guix build: Add '--with-branch' transformation option.
[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 @c Identifier of the OpenPGP key used to sign tarballs and such.
13 @set OPENPGP-SIGNING-KEY-ID 3CE464558A84FDC69DB40CFB090B11993D9AEBB5
14 @set KEY-SERVER pool.sks-keyservers.net
15
16 @copying
17 Copyright @copyright{} 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès@*
18 Copyright @copyright{} 2013, 2014, 2016 Andreas Enge@*
19 Copyright @copyright{} 2013 Nikita Karetnikov@*
20 Copyright @copyright{} 2014, 2015, 2016 Alex Kost@*
21 Copyright @copyright{} 2015, 2016 Mathieu Lirzin@*
22 Copyright @copyright{} 2014 Pierre-Antoine Rault@*
23 Copyright @copyright{} 2015 Taylan Ulrich Bayırlı/Kammer@*
24 Copyright @copyright{} 2015, 2016, 2017 Leo Famulari@*
25 Copyright @copyright{} 2015, 2016, 2017, 2018 Ricardo Wurmus@*
26 Copyright @copyright{} 2016 Ben Woodcroft@*
27 Copyright @copyright{} 2016, 2017, 2018 Chris Marusich@*
28 Copyright @copyright{} 2016, 2017, 2018 Efraim Flashner@*
29 Copyright @copyright{} 2016 John Darrington@*
30 Copyright @copyright{} 2016, 2017 Nils Gillmann@*
31 Copyright @copyright{} 2016, 2017, 2018 Jan Nieuwenhuizen@*
32 Copyright @copyright{} 2016 Julien Lepiller@*
33 Copyright @copyright{} 2016 Alex ter Weele@*
34 Copyright @copyright{} 2017, 2018 Clément Lassieur@*
35 Copyright @copyright{} 2017, 2018 Mathieu Othacehe@*
36 Copyright @copyright{} 2017 Federico Beffa@*
37 Copyright @copyright{} 2017, 2018 Carlo Zancanaro@*
38 Copyright @copyright{} 2017 Thomas Danckaert@*
39 Copyright @copyright{} 2017 humanitiesNerd@*
40 Copyright @copyright{} 2017 Christopher Allan Webber@*
41 Copyright @copyright{} 2017, 2018 Marius Bakke@*
42 Copyright @copyright{} 2017 Hartmut Goebel@*
43 Copyright @copyright{} 2017 Maxim Cournoyer@*
44 Copyright @copyright{} 2017, 2018 Tobias Geerinckx-Rice@*
45 Copyright @copyright{} 2017 George Clemmer@*
46 Copyright @copyright{} 2017 Andy Wingo@*
47 Copyright @copyright{} 2017, 2018 Arun Isaac@*
48 Copyright @copyright{} 2017 nee@*
49 Copyright @copyright{} 2018 Rutger Helling@*
50 Copyright @copyright{} 2018 Oleg Pykhalov@*
51 Copyright @copyright{} 2018 Mike Gerwitz@*
52 Copyright @copyright{} 2018 Pierre-Antoine Rouby@*
53 Copyright @copyright{} 2018 Gábor Boskovits@*
54 Copyright @copyright{} 2018 Florian Pelz@*
55 Copyright @copyright{} 2018 Laura Lazzati@*
56 Copyright @copyright{} 2018 Alex Vong@*
57
58 Permission is granted to copy, distribute and/or modify this document
59 under the terms of the GNU Free Documentation License, Version 1.3 or
60 any later version published by the Free Software Foundation; with no
61 Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
62 copy of the license is included in the section entitled ``GNU Free
63 Documentation License''.
64 @end copying
65
66 @dircategory System administration
67 @direntry
68 * Guix: (guix). Manage installed software and system configuration.
69 * guix package: (guix)Invoking guix package. Installing, removing, and upgrading packages.
70 * guix gc: (guix)Invoking guix gc. Reclaiming unused disk space.
71 * guix pull: (guix)Invoking guix pull. Update the list of available packages.
72 * guix system: (guix)Invoking guix system. Manage the operating system configuration.
73 @end direntry
74
75 @dircategory Software development
76 @direntry
77 * guix environment: (guix)Invoking guix environment. Building development environments with Guix.
78 * guix build: (guix)Invoking guix build. Building packages.
79 * guix pack: (guix)Invoking guix pack. Creating binary bundles.
80 @end direntry
81
82 @titlepage
83 @title GNU Guix Reference Manual
84 @subtitle Using the GNU Guix Functional Package Manager
85 @author The GNU Guix Developers
86
87 @page
88 @vskip 0pt plus 1filll
89 Edition @value{EDITION} @*
90 @value{UPDATED} @*
91
92 @insertcopying
93 @end titlepage
94
95 @contents
96
97 @c *********************************************************************
98 @node Top
99 @top GNU Guix
100
101 This document describes GNU Guix version @value{VERSION}, a functional
102 package management tool written for the GNU system.
103
104 @c TRANSLATORS: You can replace the following paragraph with information on
105 @c how to join your own translation team and how to report issues with the
106 @c translation.
107 This manual is also available in French (@pxref{Top,,, guix.fr, Manuel de
108 référence de GNU Guix}) and German (@pxref{Top,,, guix.de, Referenzhandbuch
109 zu GNU Guix}). If you would like to translate it in your native language,
110 consider joining the
111 @uref{https://translationproject.org/domain/guix-manual.html, Translation
112 Project}.
113
114 @menu
115 * Introduction:: What is Guix about?
116 * Installation:: Installing Guix.
117 * Package Management:: Package installation, upgrade, etc.
118 * Programming Interface:: Using Guix in Scheme.
119 * Utilities:: Package management commands.
120 * GNU Distribution:: Software for your friendly GNU system.
121 * Contributing:: Your help needed!
122
123 * Acknowledgments:: Thanks!
124 * GNU Free Documentation License:: The license of this manual.
125 * Concept Index:: Concepts.
126 * Programming Index:: Data types, functions, and variables.
127
128 @detailmenu
129 --- The Detailed Node Listing ---
130
131 Installation
132
133 * Binary Installation:: Getting Guix running in no time!
134 * Requirements:: Software needed to build and run Guix.
135 * Running the Test Suite:: Testing Guix.
136 * Setting Up the Daemon:: Preparing the build daemon's environment.
137 * Invoking guix-daemon:: Running the build daemon.
138 * Application Setup:: Application-specific setup.
139
140 Setting Up the Daemon
141
142 * Build Environment Setup:: Preparing the isolated build environment.
143 * Daemon Offload Setup:: Offloading builds to remote machines.
144 * SELinux Support:: Using an SELinux policy for the daemon.
145
146 Package Management
147
148 * Features:: How Guix will make your life brighter.
149 * Invoking guix package:: Package installation, removal, etc.
150 * Substitutes:: Downloading pre-built binaries.
151 * Packages with Multiple Outputs:: Single source package, multiple outputs.
152 * Invoking guix gc:: Running the garbage collector.
153 * Invoking guix pull:: Fetching the latest Guix and distribution.
154 * Channels:: Customizing the package collection.
155 * Inferiors:: Interacting with another revision of Guix.
156 * Invoking guix describe:: Display information about your Guix revision.
157 * Invoking guix pack:: Creating software bundles.
158 * Invoking guix archive:: Exporting and importing store files.
159
160 Substitutes
161
162 * Official Substitute Server:: One particular source of substitutes.
163 * Substitute Server Authorization:: How to enable or disable substitutes.
164 * Substitute Authentication:: How Guix verifies substitutes.
165 * Proxy Settings:: How to get substitutes via proxy.
166 * Substitution Failure:: What happens when substitution fails.
167 * On Trusting Binaries:: How can you trust that binary blob?
168
169 Programming Interface
170
171 * Defining Packages:: Defining new packages.
172 * Build Systems:: Specifying how packages are built.
173 * The Store:: Manipulating the package store.
174 * Derivations:: Low-level interface to package derivations.
175 * The Store Monad:: Purely functional interface to the store.
176 * G-Expressions:: Manipulating build expressions.
177 * Invoking guix repl:: Fiddling with Guix interactively.
178
179 Defining Packages
180
181 * package Reference:: The package data type.
182 * origin Reference:: The origin data type.
183
184 Utilities
185
186 * Invoking guix build:: Building packages from the command line.
187 * Invoking guix edit:: Editing package definitions.
188 * Invoking guix download:: Downloading a file and printing its hash.
189 * Invoking guix hash:: Computing the cryptographic hash of a file.
190 * Invoking guix import:: Importing package definitions.
191 * Invoking guix refresh:: Updating package definitions.
192 * Invoking guix lint:: Finding errors in package definitions.
193 * Invoking guix size:: Profiling disk usage.
194 * Invoking guix graph:: Visualizing the graph of packages.
195 * Invoking guix environment:: Setting up development environments.
196 * Invoking guix publish:: Sharing substitutes.
197 * Invoking guix challenge:: Challenging substitute servers.
198 * Invoking guix copy:: Copying to and from a remote store.
199 * Invoking guix container:: Process isolation.
200 * Invoking guix weather:: Assessing substitute availability.
201 * Invoking guix processes:: Listing client processes.
202
203 Invoking @command{guix build}
204
205 * Common Build Options:: Build options for most commands.
206 * Package Transformation Options:: Creating variants of packages.
207 * Additional Build Options:: Options specific to 'guix build'.
208 * Debugging Build Failures:: Real life packaging experience.
209
210 GNU Distribution
211
212 * System Installation:: Installing the whole operating system.
213 * System Configuration:: Configuring the operating system.
214 * Documentation:: Browsing software user manuals.
215 * Installing Debugging Files:: Feeding the debugger.
216 * Security Updates:: Deploying security fixes quickly.
217 * Package Modules:: Packages from the programmer's viewpoint.
218 * Packaging Guidelines:: Growing the distribution.
219 * Bootstrapping:: GNU/Linux built from scratch.
220 * Porting:: Targeting another platform or kernel.
221
222 System Installation
223
224 * Limitations:: What you can expect.
225 * Hardware Considerations:: Supported hardware.
226 * USB Stick and DVD Installation:: Preparing the installation medium.
227 * Preparing for Installation:: Networking, partitioning, etc.
228 * Proceeding with the Installation:: The real thing.
229 * Installing GuixSD in a VM:: GuixSD playground.
230 * Building the Installation Image:: How this comes to be.
231
232 System Configuration
233
234 * Using the Configuration System:: Customizing your GNU system.
235 * operating-system Reference:: Detail of operating-system declarations.
236 * File Systems:: Configuring file system mounts.
237 * Mapped Devices:: Block device extra processing.
238 * User Accounts:: Specifying user accounts.
239 * Locales:: Language and cultural convention settings.
240 * Services:: Specifying system services.
241 * Setuid Programs:: Programs running with root privileges.
242 * X.509 Certificates:: Authenticating HTTPS servers.
243 * Name Service Switch:: Configuring libc's name service switch.
244 * Initial RAM Disk:: Linux-Libre bootstrapping.
245 * Bootloader Configuration:: Configuring the boot loader.
246 * Invoking guix system:: Instantiating a system configuration.
247 * Running GuixSD in a VM:: How to run GuixSD in a virtual machine.
248 * Defining Services:: Adding new service definitions.
249
250 Services
251
252 * Base Services:: Essential system services.
253 * Scheduled Job Execution:: The mcron service.
254 * Log Rotation:: The rottlog service.
255 * Networking Services:: Network setup, SSH daemon, etc.
256 * X Window:: Graphical display.
257 * Printing Services:: Local and remote printer support.
258 * Desktop Services:: D-Bus and desktop services.
259 * Sound Services:: ALSA and Pulseaudio services.
260 * Database Services:: SQL databases, key-value stores, etc.
261 * Mail Services:: IMAP, POP3, SMTP, and all that.
262 * Messaging Services:: Messaging services.
263 * Telephony Services:: Telephony services.
264 * Monitoring Services:: Monitoring services.
265 * Kerberos Services:: Kerberos services.
266 * Web Services:: Web servers.
267 * Certificate Services:: TLS certificates via Let's Encrypt.
268 * DNS Services:: DNS daemons.
269 * VPN Services:: VPN daemons.
270 * Network File System:: NFS related services.
271 * Continuous Integration:: The Cuirass service.
272 * Power Management Services:: Extending battery life.
273 * Audio Services:: The MPD.
274 * Virtualization Services:: Virtualization services.
275 * Version Control Services:: Providing remote access to Git repositories.
276 * Game Services:: Game servers.
277 * Miscellaneous Services:: Other services.
278
279 Defining Services
280
281 * Service Composition:: The model for composing services.
282 * Service Types and Services:: Types and services.
283 * Service Reference:: API reference.
284 * Shepherd Services:: A particular type of service.
285
286 Packaging Guidelines
287
288 * Software Freedom:: What may go into the distribution.
289 * Package Naming:: What's in a name?
290 * Version Numbers:: When the name is not enough.
291 * Synopses and Descriptions:: Helping users find the right package.
292 * Python Modules:: A touch of British comedy.
293 * Perl Modules:: Little pearls.
294 * Java Packages:: Coffee break.
295 * Fonts:: Fond of fonts.
296
297 Contributing
298
299 * Building from Git:: The latest and greatest.
300 * Running Guix Before It Is Installed:: Hacker tricks.
301 * The Perfect Setup:: The right tools.
302 * Coding Style:: Hygiene of the contributor.
303 * Submitting Patches:: Share your work.
304
305 Coding Style
306
307 * Programming Paradigm:: How to compose your elements.
308 * Modules:: Where to store your code?
309 * Data Types and Pattern Matching:: Implementing data structures.
310 * Formatting Code:: Writing conventions.
311
312 @end detailmenu
313 @end menu
314
315 @c *********************************************************************
316 @node Introduction
317 @chapter Introduction
318
319 @cindex purpose
320 GNU Guix@footnote{``Guix'' is pronounced like ``geeks'', or ``ɡiːks''
321 using the international phonetic alphabet (IPA).} is a package
322 management tool for the GNU system. Guix makes it easy for unprivileged
323 users to install, upgrade, or remove packages, to roll back to a
324 previous package set, to build packages from source, and generally
325 assists with the creation and maintenance of software environments.
326
327 @cindex user interfaces
328 Guix provides a command-line package management interface
329 (@pxref{Invoking guix package}), a set of command-line utilities
330 (@pxref{Utilities}), as well as Scheme programming interfaces
331 (@pxref{Programming Interface}).
332 @cindex build daemon
333 Its @dfn{build daemon} is responsible for building packages on behalf of
334 users (@pxref{Setting Up the Daemon}) and for downloading pre-built
335 binaries from authorized sources (@pxref{Substitutes}).
336
337 @cindex extensibility of the distribution
338 @cindex customization, of packages
339 Guix includes package definitions for many GNU and non-GNU packages, all
340 of which @uref{https://www.gnu.org/philosophy/free-sw.html, respect the
341 user's computing freedom}. It is @emph{extensible}: users can write
342 their own package definitions (@pxref{Defining Packages}) and make them
343 available as independent package modules (@pxref{Package Modules}). It
344 is also @emph{customizable}: users can @emph{derive} specialized package
345 definitions from existing ones, including from the command line
346 (@pxref{Package Transformation Options}).
347
348 @cindex Guix System Distribution
349 @cindex GuixSD
350 You can install GNU@tie{}Guix on top of an existing GNU/Linux system
351 where it complements the available tools without interference
352 (@pxref{Installation}), or you can use it as part of the standalone
353 @dfn{Guix System Distribution} or GuixSD (@pxref{GNU Distribution}).
354 With GNU@tie{}GuixSD, you @emph{declare} all aspects of the operating
355 system configuration and Guix takes care of instantiating the
356 configuration in a transactional, reproducible, and stateless fashion
357 (@pxref{System Configuration}).
358
359 @cindex functional package management
360 @cindex isolation
361 Under the hood, Guix implements the @dfn{functional package management}
362 discipline pioneered by Nix (@pxref{Acknowledgments}).
363 In Guix, the package build and installation process is seen
364 as a @emph{function}, in the mathematical sense. That function takes inputs,
365 such as build scripts, a compiler, and libraries, and
366 returns an installed package. As a pure function, its result depends
367 solely on its inputs---for instance, it cannot refer to software or
368 scripts that were not explicitly passed as inputs. A build function
369 always produces the same result when passed a given set of inputs. It
370 cannot alter the environment of the running system in
371 any way; for instance, it cannot create, modify, or delete files outside
372 of its build and installation directories. This is achieved by running
373 build processes in isolated environments (or @dfn{containers}), where only their
374 explicit inputs are visible.
375
376 @cindex store
377 The result of package build functions is @dfn{cached} in the file
378 system, in a special directory called @dfn{the store} (@pxref{The
379 Store}). Each package is installed in a directory of its own in the
380 store---by default under @file{/gnu/store}. The directory name contains
381 a hash of all the inputs used to build that package; thus, changing an
382 input yields a different directory name.
383
384 This approach is the foundation for the salient features of Guix: support
385 for transactional package upgrade and rollback, per-user installation, and
386 garbage collection of packages (@pxref{Features}).
387
388
389 @c *********************************************************************
390 @node Installation
391 @chapter Installation
392
393 @cindex installing Guix
394 @cindex official website
395 GNU Guix is available for download from its website at
396 @url{http://www.gnu.org/software/guix/}. This section describes the
397 software requirements of Guix, as well as how to install it and get
398 ready to use it.
399
400 Note that this section is concerned with the installation of the package
401 manager, which can be done on top of a running GNU/Linux system. If,
402 instead, you want to install the complete GNU operating system,
403 @pxref{System Installation}.
404
405 @cindex foreign distro
406 @cindex directories related to foreign distro
407
408 When installed on a running GNU/Linux system---thereafter called a
409 @dfn{foreign distro}---GNU@tie{}Guix complements the available tools
410 without interference. Its data lives exclusively in two directories,
411 usually @file{/gnu/store} and @file{/var/guix}; other files on your
412 system, such as @file{/etc}, are left untouched.
413
414 Once installed, Guix can be updated by running @command{guix pull}
415 (@pxref{Invoking guix pull}).
416
417 @menu
418 * Binary Installation:: Getting Guix running in no time!
419 * Requirements:: Software needed to build and run Guix.
420 * Running the Test Suite:: Testing Guix.
421 * Setting Up the Daemon:: Preparing the build daemon's environment.
422 * Invoking guix-daemon:: Running the build daemon.
423 * Application Setup:: Application-specific setup.
424 @end menu
425
426 @node Binary Installation
427 @section Binary Installation
428
429 @cindex installing Guix from binaries
430 @cindex installer script
431 This section describes how to install Guix on an arbitrary system from a
432 self-contained tarball providing binaries for Guix and for all its
433 dependencies. This is often quicker than installing from source, which
434 is described in the next sections. The only requirement is to have
435 GNU@tie{}tar and Xz.
436
437 We provide a
438 @uref{https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh,
439 shell installer script}, which automates the download, installation, and
440 initial configuration of Guix. It should be run as the root user.
441
442 Installing goes along these lines:
443
444 @enumerate
445 @item
446 @cindex downloading Guix binary
447 Download the binary tarball from
448 @indicateurl{https://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{system}.tar.xz},
449 where @var{system} is @code{x86_64-linux} for an @code{x86_64} machine
450 already running the kernel Linux, and so on.
451
452 @c The following is somewhat duplicated in ``System Installation''.
453 Make sure to download the associated @file{.sig} file and to verify the
454 authenticity of the tarball against it, along these lines:
455
456 @example
457 $ wget https://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{system}.tar.xz.sig
458 $ gpg --verify guix-binary-@value{VERSION}.@var{system}.tar.xz.sig
459 @end example
460
461 If that command fails because you do not have the required public key,
462 then run this command to import it:
463
464 @example
465 $ gpg --keyserver @value{KEY-SERVER} \
466 --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
467 @end example
468
469 @noindent
470 and rerun the @code{gpg --verify} command.
471 @c end authentication part
472
473 @item
474 Now, you need to become the @code{root} user. Depending on your distribution,
475 you may have to run @code{su -} or @code{sudo -i}. As @code{root}, run:
476
477 @example
478 # cd /tmp
479 # tar --warning=no-timestamp -xf \
480 guix-binary-@value{VERSION}.@var{system}.tar.xz
481 # mv var/guix /var/ && mv gnu /
482 @end example
483
484 This creates @file{/gnu/store} (@pxref{The Store}) and @file{/var/guix}.
485 The latter contains a ready-to-use profile for @code{root} (see next
486 step.)
487
488 Do @emph{not} unpack the tarball on a working Guix system since that
489 would overwrite its own essential files.
490
491 The @code{--warning=no-timestamp} option makes sure GNU@tie{}tar does
492 not emit warnings about ``implausibly old time stamps'' (such
493 warnings were triggered by GNU@tie{}tar 1.26 and older; recent
494 versions are fine.)
495 They stem from the fact that all the
496 files in the archive have their modification time set to zero (which
497 means January 1st, 1970.) This is done on purpose to make sure the
498 archive content is independent of its creation time, thus making it
499 reproducible.
500
501 @item
502 Make the profile available under @file{~root/.config/guix/current}, which is
503 where @command{guix pull} will install updates (@pxref{Invoking guix pull}):
504
505 @example
506 # mkdir -p ~root/.config/guix
507 # ln -sf /var/guix/profiles/per-user/root/current-guix \
508 ~root/.config/guix/current
509 @end example
510
511 Source @file{etc/profile} to augment @code{PATH} and other relevant
512 environment variables:
513
514 @example
515 # GUIX_PROFILE="`echo ~root`/.config/guix/current" ; \
516 source $GUIX_PROFILE/etc/profile
517 @end example
518
519 @item
520 Create the group and user accounts for build users as explained below
521 (@pxref{Build Environment Setup}).
522
523 @item
524 Run the daemon, and set it to automatically start on boot.
525
526 If your host distro uses the systemd init system, this can be achieved
527 with these commands:
528
529 @c Versions of systemd that supported symlinked service files are not
530 @c yet widely deployed, so we should suggest that users copy the service
531 @c files into place.
532 @c
533 @c See this thread for more information:
534 @c http://lists.gnu.org/archive/html/guix-devel/2017-01/msg01199.html
535
536 @example
537 # cp ~root/.config/guix/current/lib/systemd/system/guix-daemon.service \
538 /etc/systemd/system/
539 # systemctl start guix-daemon && systemctl enable guix-daemon
540 @end example
541
542 If your host distro uses the Upstart init system:
543
544 @example
545 # initctl reload-configuration
546 # cp ~root/.config/guix/current/lib/upstart/system/guix-daemon.conf \
547 /etc/init/
548 # start guix-daemon
549 @end example
550
551 Otherwise, you can still start the daemon manually with:
552
553 @example
554 # ~root/.config/guix/current/bin/guix-daemon \
555 --build-users-group=guixbuild
556 @end example
557
558 @item
559 Make the @command{guix} command available to other users on the machine,
560 for instance with:
561
562 @example
563 # mkdir -p /usr/local/bin
564 # cd /usr/local/bin
565 # ln -s /var/guix/profiles/per-user/root/current-guix/bin/guix
566 @end example
567
568 It is also a good idea to make the Info version of this manual available
569 there:
570
571 @example
572 # mkdir -p /usr/local/share/info
573 # cd /usr/local/share/info
574 # for i in /var/guix/profiles/per-user/root/current-guix/share/info/* ;
575 do ln -s $i ; done
576 @end example
577
578 That way, assuming @file{/usr/local/share/info} is in the search path,
579 running @command{info guix} will open this manual (@pxref{Other Info
580 Directories,,, texinfo, GNU Texinfo}, for more details on changing the
581 Info search path.)
582
583 @item
584 @cindex substitutes, authorization thereof
585 To use substitutes from @code{hydra.gnu.org} or one of its mirrors
586 (@pxref{Substitutes}), authorize them:
587
588 @example
589 # guix archive --authorize < \
590 ~root/.config/guix/current/share/guix/hydra.gnu.org.pub
591 @end example
592
593 @item
594 Each user may need to perform a few additional steps to make their Guix
595 environment ready for use, @pxref{Application Setup}.
596 @end enumerate
597
598 Voilà, the installation is complete!
599
600 You can confirm that Guix is working by installing a sample package into
601 the root profile:
602
603 @example
604 # guix package -i hello
605 @end example
606
607 The @code{guix} package must remain available in @code{root}'s profile,
608 or it would become subject to garbage collection---in which case you
609 would find yourself badly handicapped by the lack of the @command{guix}
610 command. In other words, do not remove @code{guix} by running
611 @code{guix package -r guix}.
612
613 The binary installation tarball can be (re)produced and verified simply
614 by running the following command in the Guix source tree:
615
616 @example
617 make guix-binary.@var{system}.tar.xz
618 @end example
619
620 @noindent
621 ... which, in turn, runs:
622
623 @example
624 guix pack -s @var{system} --localstatedir \
625 --profile-name=current-guix guix
626 @end example
627
628 @xref{Invoking guix pack}, for more info on this handy tool.
629
630 @node Requirements
631 @section Requirements
632
633 This section lists requirements when building Guix from source. The
634 build procedure for Guix is the same as for other GNU software, and is
635 not covered here. Please see the files @file{README} and @file{INSTALL}
636 in the Guix source tree for additional details.
637
638 GNU Guix depends on the following packages:
639
640 @itemize
641 @item @url{http://gnu.org/software/guile/, GNU Guile}, version 2.0.13 or
642 later, including 2.2.x;
643 @item @url{https://notabug.org/cwebber/guile-gcrypt, Guile-Gcrypt}, version
644 0.1.0 or later;
645 @item
646 @uref{http://gnutls.org/, GnuTLS}, specifically its Guile bindings
647 (@pxref{Guile Preparations, how to install the GnuTLS bindings for
648 Guile,, gnutls-guile, GnuTLS-Guile});
649 @item
650 @uref{https://notabug.org/guile-sqlite3/guile-sqlite3, Guile-SQLite3}, version 0.1.0
651 or later;
652 @item
653 @c FIXME: Specify a version number once a release has been made.
654 @uref{https://gitlab.com/guile-git/guile-git, Guile-Git}, from August
655 2017 or later;
656 @item @url{http://zlib.net, zlib};
657 @item @url{http://www.gnu.org/software/make/, GNU Make}.
658 @end itemize
659
660 The following dependencies are optional:
661
662 @itemize
663 @item
664 Installing
665 @url{http://savannah.nongnu.org/projects/guile-json/, Guile-JSON} will
666 allow you to use the @command{guix import pypi} command (@pxref{Invoking
667 guix import}). It is of
668 interest primarily for developers and not for casual users.
669
670 @item
671 @c Note: We need at least 0.10.2 for 'channel-send-eof'.
672 Support for build offloading (@pxref{Daemon Offload Setup}) and
673 @command{guix copy} (@pxref{Invoking guix copy}) depends on
674 @uref{https://github.com/artyom-poptsov/guile-ssh, Guile-SSH},
675 version 0.10.2 or later.
676
677 @item
678 When @url{http://www.bzip.org, libbz2} is available,
679 @command{guix-daemon} can use it to compress build logs.
680 @end itemize
681
682 Unless @code{--disable-daemon} was passed to @command{configure}, the
683 following packages are also needed:
684
685 @itemize
686 @item @url{http://gnupg.org/, GNU libgcrypt};
687 @item @url{http://sqlite.org, SQLite 3};
688 @item @url{http://gcc.gnu.org, GCC's g++}, with support for the
689 C++11 standard.
690 @end itemize
691
692 @cindex state directory
693 When configuring Guix on a system that already has a Guix installation,
694 be sure to specify the same state directory as the existing installation
695 using the @code{--localstatedir} option of the @command{configure}
696 script (@pxref{Directory Variables, @code{localstatedir},, standards,
697 GNU Coding Standards}). The @command{configure} script protects against
698 unintended misconfiguration of @var{localstatedir} so you do not
699 inadvertently corrupt your store (@pxref{The Store}).
700
701 @cindex Nix, compatibility
702 When a working installation of @url{http://nixos.org/nix/, the Nix package
703 manager} is available, you
704 can instead configure Guix with @code{--disable-daemon}. In that case,
705 Nix replaces the three dependencies above.
706
707 Guix is compatible with Nix, so it is possible to share the same store
708 between both. To do so, you must pass @command{configure} not only the
709 same @code{--with-store-dir} value, but also the same
710 @code{--localstatedir} value. The latter is essential because it
711 specifies where the database that stores metadata about the store is
712 located, among other things. The default values for Nix are
713 @code{--with-store-dir=/nix/store} and @code{--localstatedir=/nix/var}.
714 Note that @code{--disable-daemon} is not required if
715 your goal is to share the store with Nix.
716
717 @node Running the Test Suite
718 @section Running the Test Suite
719
720 @cindex test suite
721 After a successful @command{configure} and @code{make} run, it is a good
722 idea to run the test suite. It can help catch issues with the setup or
723 environment, or bugs in Guix itself---and really, reporting test
724 failures is a good way to help improve the software. To run the test
725 suite, type:
726
727 @example
728 make check
729 @end example
730
731 Test cases can run in parallel: you can use the @code{-j} option of
732 GNU@tie{}make to speed things up. The first run may take a few minutes
733 on a recent machine; subsequent runs will be faster because the store
734 that is created for test purposes will already have various things in
735 cache.
736
737 It is also possible to run a subset of the tests by defining the
738 @code{TESTS} makefile variable as in this example:
739
740 @example
741 make check TESTS="tests/store.scm tests/cpio.scm"
742 @end example
743
744 By default, tests results are displayed at a file level. In order to
745 see the details of every individual test cases, it is possible to define
746 the @code{SCM_LOG_DRIVER_FLAGS} makefile variable as in this example:
747
748 @example
749 make check TESTS="tests/base64.scm" SCM_LOG_DRIVER_FLAGS="--brief=no"
750 @end example
751
752 Upon failure, please email @email{bug-guix@@gnu.org} and attach the
753 @file{test-suite.log} file. Please specify the Guix version being used
754 as well as version numbers of the dependencies (@pxref{Requirements}) in
755 your message.
756
757 Guix also comes with a whole-system test suite that tests complete
758 GuixSD operating system instances. It can only run on systems where
759 Guix is already installed, using:
760
761 @example
762 make check-system
763 @end example
764
765 @noindent
766 or, again, by defining @code{TESTS} to select a subset of tests to run:
767
768 @example
769 make check-system TESTS="basic mcron"
770 @end example
771
772 These system tests are defined in the @code{(gnu tests @dots{})}
773 modules. They work by running the operating systems under test with
774 lightweight instrumentation in a virtual machine (VM). They can be
775 computationally intensive or rather cheap, depending on whether
776 substitutes are available for their dependencies (@pxref{Substitutes}).
777 Some of them require a lot of storage space to hold VM images.
778
779 Again in case of test failures, please send @email{bug-guix@@gnu.org}
780 all the details.
781
782 @node Setting Up the Daemon
783 @section Setting Up the Daemon
784
785 @cindex daemon
786 Operations such as building a package or running the garbage collector
787 are all performed by a specialized process, the @dfn{build daemon}, on
788 behalf of clients. Only the daemon may access the store and its
789 associated database. Thus, any operation that manipulates the store
790 goes through the daemon. For instance, command-line tools such as
791 @command{guix package} and @command{guix build} communicate with the
792 daemon (@i{via} remote procedure calls) to instruct it what to do.
793
794 The following sections explain how to prepare the build daemon's
795 environment. See also @ref{Substitutes}, for information on how to allow
796 the daemon to download pre-built binaries.
797
798 @menu
799 * Build Environment Setup:: Preparing the isolated build environment.
800 * Daemon Offload Setup:: Offloading builds to remote machines.
801 * SELinux Support:: Using an SELinux policy for the daemon.
802 @end menu
803
804 @node Build Environment Setup
805 @subsection Build Environment Setup
806
807 @cindex build environment
808 In a standard multi-user setup, Guix and its daemon---the
809 @command{guix-daemon} program---are installed by the system
810 administrator; @file{/gnu/store} is owned by @code{root} and
811 @command{guix-daemon} runs as @code{root}. Unprivileged users may use
812 Guix tools to build packages or otherwise access the store, and the
813 daemon will do it on their behalf, ensuring that the store is kept in a
814 consistent state, and allowing built packages to be shared among users.
815
816 @cindex build users
817 When @command{guix-daemon} runs as @code{root}, you may not want package
818 build processes themselves to run as @code{root} too, for obvious
819 security reasons. To avoid that, a special pool of @dfn{build users}
820 should be created for use by build processes started by the daemon.
821 These build users need not have a shell and a home directory: they will
822 just be used when the daemon drops @code{root} privileges in build
823 processes. Having several such users allows the daemon to launch
824 distinct build processes under separate UIDs, which guarantees that they
825 do not interfere with each other---an essential feature since builds are
826 regarded as pure functions (@pxref{Introduction}).
827
828 On a GNU/Linux system, a build user pool may be created like this (using
829 Bash syntax and the @code{shadow} commands):
830
831 @c See http://lists.gnu.org/archive/html/bug-guix/2013-01/msg00239.html
832 @c for why `-G' is needed.
833 @example
834 # groupadd --system guixbuild
835 # for i in `seq -w 1 10`;
836 do
837 useradd -g guixbuild -G guixbuild \
838 -d /var/empty -s `which nologin` \
839 -c "Guix build user $i" --system \
840 guixbuilder$i;
841 done
842 @end example
843
844 @noindent
845 The number of build users determines how many build jobs may run in
846 parallel, as specified by the @option{--max-jobs} option
847 (@pxref{Invoking guix-daemon, @option{--max-jobs}}). To use
848 @command{guix system vm} and related commands, you may need to add the
849 build users to the @code{kvm} group so they can access @file{/dev/kvm},
850 using @code{-G guixbuild,kvm} instead of @code{-G guixbuild}
851 (@pxref{Invoking guix system}).
852
853 The @code{guix-daemon} program may then be run as @code{root} with the
854 following command@footnote{If your machine uses the systemd init system,
855 dropping the @file{@var{prefix}/lib/systemd/system/guix-daemon.service}
856 file in @file{/etc/systemd/system} will ensure that
857 @command{guix-daemon} is automatically started. Similarly, if your
858 machine uses the Upstart init system, drop the
859 @file{@var{prefix}/lib/upstart/system/guix-daemon.conf}
860 file in @file{/etc/init}.}:
861
862 @example
863 # guix-daemon --build-users-group=guixbuild
864 @end example
865
866 @cindex chroot
867 @noindent
868 This way, the daemon starts build processes in a chroot, under one of
869 the @code{guixbuilder} users. On GNU/Linux, by default, the chroot
870 environment contains nothing but:
871
872 @c Keep this list in sync with libstore/build.cc! -----------------------
873 @itemize
874 @item
875 a minimal @code{/dev} directory, created mostly independently from the
876 host @code{/dev}@footnote{``Mostly'', because while the set of files
877 that appear in the chroot's @code{/dev} is fixed, most of these files
878 can only be created if the host has them.};
879
880 @item
881 the @code{/proc} directory; it only shows the processes of the container
882 since a separate PID name space is used;
883
884 @item
885 @file{/etc/passwd} with an entry for the current user and an entry for
886 user @file{nobody};
887
888 @item
889 @file{/etc/group} with an entry for the user's group;
890
891 @item
892 @file{/etc/hosts} with an entry that maps @code{localhost} to
893 @code{127.0.0.1};
894
895 @item
896 a writable @file{/tmp} directory.
897 @end itemize
898
899 You can influence the directory where the daemon stores build trees
900 @i{via} the @code{TMPDIR} environment variable. However, the build tree
901 within the chroot is always called @file{/tmp/guix-build-@var{name}.drv-0},
902 where @var{name} is the derivation name---e.g., @code{coreutils-8.24}.
903 This way, the value of @code{TMPDIR} does not leak inside build
904 environments, which avoids discrepancies in cases where build processes
905 capture the name of their build tree.
906
907 @vindex http_proxy
908 The daemon also honors the @code{http_proxy} environment variable for
909 HTTP downloads it performs, be it for fixed-output derivations
910 (@pxref{Derivations}) or for substitutes (@pxref{Substitutes}).
911
912 If you are installing Guix as an unprivileged user, it is still possible
913 to run @command{guix-daemon} provided you pass @code{--disable-chroot}.
914 However, build processes will not be isolated from one another, and not
915 from the rest of the system. Thus, build processes may interfere with
916 each other, and may access programs, libraries, and other files
917 available on the system---making it much harder to view them as
918 @emph{pure} functions.
919
920
921 @node Daemon Offload Setup
922 @subsection Using the Offload Facility
923
924 @cindex offloading
925 @cindex build hook
926 When desired, the build daemon can @dfn{offload} derivation builds to
927 other machines running Guix, using the @code{offload} @dfn{build
928 hook}@footnote{This feature is available only when
929 @uref{https://github.com/artyom-poptsov/guile-ssh, Guile-SSH} is
930 present.}. When that
931 feature is enabled, a list of user-specified build machines is read from
932 @file{/etc/guix/machines.scm}; every time a build is requested, for
933 instance via @code{guix build}, the daemon attempts to offload it to one
934 of the machines that satisfy the constraints of the derivation, in
935 particular its system type---e.g., @file{x86_64-linux}. Missing
936 prerequisites for the build are copied over SSH to the target machine,
937 which then proceeds with the build; upon success the output(s) of the
938 build are copied back to the initial machine.
939
940 The @file{/etc/guix/machines.scm} file typically looks like this:
941
942 @example
943 (list (build-machine
944 (name "eightysix.example.org")
945 (system "x86_64-linux")
946 (host-key "ssh-ed25519 AAAAC3Nza@dots{}")
947 (user "bob")
948 (speed 2.)) ;incredibly fast!
949
950 (build-machine
951 (name "meeps.example.org")
952 (system "mips64el-linux")
953 (host-key "ssh-rsa AAAAB3Nza@dots{}")
954 (user "alice")
955 (private-key
956 (string-append (getenv "HOME")
957 "/.ssh/identity-for-guix"))))
958 @end example
959
960 @noindent
961 In the example above we specify a list of two build machines, one for
962 the @code{x86_64} architecture and one for the @code{mips64el}
963 architecture.
964
965 In fact, this file is---not surprisingly!---a Scheme file that is
966 evaluated when the @code{offload} hook is started. Its return value
967 must be a list of @code{build-machine} objects. While this example
968 shows a fixed list of build machines, one could imagine, say, using
969 DNS-SD to return a list of potential build machines discovered in the
970 local network (@pxref{Introduction, Guile-Avahi,, guile-avahi, Using
971 Avahi in Guile Scheme Programs}). The @code{build-machine} data type is
972 detailed below.
973
974 @deftp {Data Type} build-machine
975 This data type represents build machines to which the daemon may offload
976 builds. The important fields are:
977
978 @table @code
979
980 @item name
981 The host name of the remote machine.
982
983 @item system
984 The system type of the remote machine---e.g., @code{"x86_64-linux"}.
985
986 @item user
987 The user account to use when connecting to the remote machine over SSH.
988 Note that the SSH key pair must @emph{not} be passphrase-protected, to
989 allow non-interactive logins.
990
991 @item host-key
992 This must be the machine's SSH @dfn{public host key} in OpenSSH format.
993 This is used to authenticate the machine when we connect to it. It is a
994 long string that looks like this:
995
996 @example
997 ssh-ed25519 AAAAC3NzaC@dots{}mde+UhL hint@@example.org
998 @end example
999
1000 If the machine is running the OpenSSH daemon, @command{sshd}, the host
1001 key can be found in a file such as
1002 @file{/etc/ssh/ssh_host_ed25519_key.pub}.
1003
1004 If the machine is running the SSH daemon of GNU@tie{}lsh,
1005 @command{lshd}, the host key is in @file{/etc/lsh/host-key.pub} or a
1006 similar file. It can be converted to the OpenSSH format using
1007 @command{lsh-export-key} (@pxref{Converting keys,,, lsh, LSH Manual}):
1008
1009 @example
1010 $ lsh-export-key --openssh < /etc/lsh/host-key.pub
1011 ssh-rsa AAAAB3NzaC1yc2EAAAAEOp8FoQAAAQEAs1eB46LV@dots{}
1012 @end example
1013
1014 @end table
1015
1016 A number of optional fields may be specified:
1017
1018 @table @asis
1019
1020 @item @code{port} (default: @code{22})
1021 Port number of SSH server on the machine.
1022
1023 @item @code{private-key} (default: @file{~root/.ssh/id_rsa})
1024 The SSH private key file to use when connecting to the machine, in
1025 OpenSSH format. This key must not be protected with a passphrase.
1026
1027 Note that the default value is the private key @emph{of the root
1028 account}. Make sure it exists if you use the default.
1029
1030 @item @code{compression} (default: @code{"zlib@@openssh.com,zlib"})
1031 @itemx @code{compression-level} (default: @code{3})
1032 The SSH-level compression methods and compression level requested.
1033
1034 Note that offloading relies on SSH compression to reduce bandwidth usage
1035 when transferring files to and from build machines.
1036
1037 @item @code{daemon-socket} (default: @code{"/var/guix/daemon-socket/socket"})
1038 File name of the Unix-domain socket @command{guix-daemon} is listening
1039 to on that machine.
1040
1041 @item @code{parallel-builds} (default: @code{1})
1042 The number of builds that may run in parallel on the machine.
1043
1044 @item @code{speed} (default: @code{1.0})
1045 A ``relative speed factor''. The offload scheduler will tend to prefer
1046 machines with a higher speed factor.
1047
1048 @item @code{features} (default: @code{'()})
1049 A list of strings denoting specific features supported by the machine.
1050 An example is @code{"kvm"} for machines that have the KVM Linux modules
1051 and corresponding hardware support. Derivations can request features by
1052 name, and they will be scheduled on matching build machines.
1053
1054 @end table
1055 @end deftp
1056
1057 The @code{guile} command must be in the search path on the build
1058 machines. In addition, the Guix modules must be in
1059 @code{$GUILE_LOAD_PATH} on the build machine---you can check whether
1060 this is the case by running:
1061
1062 @example
1063 ssh build-machine guile -c "'(use-modules (guix config))'"
1064 @end example
1065
1066 There is one last thing to do once @file{machines.scm} is in place. As
1067 explained above, when offloading, files are transferred back and forth
1068 between the machine stores. For this to work, you first need to
1069 generate a key pair on each machine to allow the daemon to export signed
1070 archives of files from the store (@pxref{Invoking guix archive}):
1071
1072 @example
1073 # guix archive --generate-key
1074 @end example
1075
1076 @noindent
1077 Each build machine must authorize the key of the master machine so that
1078 it accepts store items it receives from the master:
1079
1080 @example
1081 # guix archive --authorize < master-public-key.txt
1082 @end example
1083
1084 @noindent
1085 Likewise, the master machine must authorize the key of each build machine.
1086
1087 All the fuss with keys is here to express pairwise mutual trust
1088 relations between the master and the build machines. Concretely, when
1089 the master receives files from a build machine (and @i{vice versa}), its
1090 build daemon can make sure they are genuine, have not been tampered
1091 with, and that they are signed by an authorized key.
1092
1093 @cindex offload test
1094 To test whether your setup is operational, run this command on the
1095 master node:
1096
1097 @example
1098 # guix offload test
1099 @end example
1100
1101 This will attempt to connect to each of the build machines specified in
1102 @file{/etc/guix/machines.scm}, make sure Guile and the Guix modules are
1103 available on each machine, attempt to export to the machine and import
1104 from it, and report any error in the process.
1105
1106 If you want to test a different machine file, just specify it on the
1107 command line:
1108
1109 @example
1110 # guix offload test machines-qualif.scm
1111 @end example
1112
1113 Last, you can test the subset of the machines whose name matches a
1114 regular expression like this:
1115
1116 @example
1117 # guix offload test machines.scm '\.gnu\.org$'
1118 @end example
1119
1120 @cindex offload status
1121 To display the current load of all build hosts, run this command on the
1122 main node:
1123
1124 @example
1125 # guix offload status
1126 @end example
1127
1128
1129 @node SELinux Support
1130 @subsection SELinux Support
1131
1132 @cindex SELinux, daemon policy
1133 @cindex mandatory access control, SELinux
1134 @cindex security, guix-daemon
1135 Guix includes an SELinux policy file at @file{etc/guix-daemon.cil} that
1136 can be installed on a system where SELinux is enabled, in order to label
1137 Guix files and to specify the expected behavior of the daemon. Since
1138 GuixSD does not provide an SELinux base policy, the daemon policy cannot
1139 be used on GuixSD.
1140
1141 @subsubsection Installing the SELinux policy
1142 @cindex SELinux, policy installation
1143 To install the policy run this command as root:
1144
1145 @example
1146 semodule -i etc/guix-daemon.cil
1147 @end example
1148
1149 Then relabel the file system with @code{restorecon} or by a different
1150 mechanism provided by your system.
1151
1152 Once the policy is installed, the file system has been relabeled, and
1153 the daemon has been restarted, it should be running in the
1154 @code{guix_daemon_t} context. You can confirm this with the following
1155 command:
1156
1157 @example
1158 ps -Zax | grep guix-daemon
1159 @end example
1160
1161 Monitor the SELinux log files as you run a command like @code{guix build
1162 hello} to convince yourself that SELinux permits all necessary
1163 operations.
1164
1165 @subsubsection Limitations
1166 @cindex SELinux, limitations
1167
1168 This policy is not perfect. Here is a list of limitations or quirks
1169 that should be considered when deploying the provided SELinux policy for
1170 the Guix daemon.
1171
1172 @enumerate
1173 @item
1174 @code{guix_daemon_socket_t} isn’t actually used. None of the socket
1175 operations involve contexts that have anything to do with
1176 @code{guix_daemon_socket_t}. It doesn’t hurt to have this unused label,
1177 but it would be preferrable to define socket rules for only this label.
1178
1179 @item
1180 @code{guix gc} cannot access arbitrary links to profiles. By design,
1181 the file label of the destination of a symlink is independent of the
1182 file label of the link itself. Although all profiles under
1183 $localstatedir are labelled, the links to these profiles inherit the
1184 label of the directory they are in. For links in the user’s home
1185 directory this will be @code{user_home_t}. But for links from the root
1186 user’s home directory, or @file{/tmp}, or the HTTP server’s working
1187 directory, etc, this won’t work. @code{guix gc} would be prevented from
1188 reading and following these links.
1189
1190 @item
1191 The daemon’s feature to listen for TCP connections might no longer work.
1192 This might require extra rules, because SELinux treats network sockets
1193 differently from files.
1194
1195 @item
1196 Currently all files with a name matching the regular expression
1197 @code{/gnu/store/.+-(guix-.+|profile)/bin/guix-daemon} are assigned the
1198 label @code{guix_daemon_exec_t}; this means that @emph{any} file with
1199 that name in any profile would be permitted to run in the
1200 @code{guix_daemon_t} domain. This is not ideal. An attacker could
1201 build a package that provides this executable and convince a user to
1202 install and run it, which lifts it into the @code{guix_daemon_t} domain.
1203 At that point SELinux could not prevent it from accessing files that are
1204 allowed for processes in that domain.
1205
1206 We could generate a much more restrictive policy at installation time,
1207 so that only the @emph{exact} file name of the currently installed
1208 @code{guix-daemon} executable would be labelled with
1209 @code{guix_daemon_exec_t}, instead of using a broad regular expression.
1210 The downside is that root would have to install or upgrade the policy at
1211 installation time whenever the Guix package that provides the
1212 effectively running @code{guix-daemon} executable is upgraded.
1213 @end enumerate
1214
1215 @node Invoking guix-daemon
1216 @section Invoking @command{guix-daemon}
1217
1218 The @command{guix-daemon} program implements all the functionality to
1219 access the store. This includes launching build processes, running the
1220 garbage collector, querying the availability of a build result, etc. It
1221 is normally run as @code{root} like this:
1222
1223 @example
1224 # guix-daemon --build-users-group=guixbuild
1225 @end example
1226
1227 @noindent
1228 For details on how to set it up, @pxref{Setting Up the Daemon}.
1229
1230 @cindex chroot
1231 @cindex container, build environment
1232 @cindex build environment
1233 @cindex reproducible builds
1234 By default, @command{guix-daemon} launches build processes under
1235 different UIDs, taken from the build group specified with
1236 @code{--build-users-group}. In addition, each build process is run in a
1237 chroot environment that only contains the subset of the store that the
1238 build process depends on, as specified by its derivation
1239 (@pxref{Programming Interface, derivation}), plus a set of specific
1240 system directories. By default, the latter contains @file{/dev} and
1241 @file{/dev/pts}. Furthermore, on GNU/Linux, the build environment is a
1242 @dfn{container}: in addition to having its own file system tree, it has
1243 a separate mount name space, its own PID name space, network name space,
1244 etc. This helps achieve reproducible builds (@pxref{Features}).
1245
1246 When the daemon performs a build on behalf of the user, it creates a
1247 build directory under @file{/tmp} or under the directory specified by
1248 its @code{TMPDIR} environment variable. This directory is shared with
1249 the container for the duration of the build, though within the container,
1250 the build tree is always called @file{/tmp/guix-build-@var{name}.drv-0}.
1251
1252 The build directory is automatically deleted upon completion, unless the
1253 build failed and the client specified @option{--keep-failed}
1254 (@pxref{Invoking guix build, @option{--keep-failed}}).
1255
1256 The daemon listens for connections and spawns one sub-process for each session
1257 started by a client (one of the @command{guix} sub-commands.) The
1258 @command{guix processes} command allows you to get an overview of the activity
1259 on your system by viewing each of the active sessions and clients.
1260 @xref{Invoking guix processes}, for more information.
1261
1262 The following command-line options are supported:
1263
1264 @table @code
1265 @item --build-users-group=@var{group}
1266 Take users from @var{group} to run build processes (@pxref{Setting Up
1267 the Daemon, build users}).
1268
1269 @item --no-substitutes
1270 @cindex substitutes
1271 Do not use substitutes for build products. That is, always build things
1272 locally instead of allowing downloads of pre-built binaries
1273 (@pxref{Substitutes}).
1274
1275 When the daemon runs with @code{--no-substitutes}, clients can still
1276 explicitly enable substitution @i{via} the @code{set-build-options}
1277 remote procedure call (@pxref{The Store}).
1278
1279 @item --substitute-urls=@var{urls}
1280 @anchor{daemon-substitute-urls}
1281 Consider @var{urls} the default whitespace-separated list of substitute
1282 source URLs. When this option is omitted,
1283 @indicateurl{https://mirror.hydra.gnu.org https://hydra.gnu.org} is used
1284 (@code{mirror.hydra.gnu.org} is a mirror of @code{hydra.gnu.org}).
1285
1286 This means that substitutes may be downloaded from @var{urls}, as long
1287 as they are signed by a trusted signature (@pxref{Substitutes}).
1288
1289 @cindex build hook
1290 @item --no-build-hook
1291 Do not use the @dfn{build hook}.
1292
1293 The build hook is a helper program that the daemon can start and to
1294 which it submits build requests. This mechanism is used to offload
1295 builds to other machines (@pxref{Daemon Offload Setup}).
1296
1297 @item --cache-failures
1298 Cache build failures. By default, only successful builds are cached.
1299
1300 When this option is used, @command{guix gc --list-failures} can be used
1301 to query the set of store items marked as failed; @command{guix gc
1302 --clear-failures} removes store items from the set of cached failures.
1303 @xref{Invoking guix gc}.
1304
1305 @item --cores=@var{n}
1306 @itemx -c @var{n}
1307 Use @var{n} CPU cores to build each derivation; @code{0} means as many
1308 as available.
1309
1310 The default value is @code{0}, but it may be overridden by clients, such
1311 as the @code{--cores} option of @command{guix build} (@pxref{Invoking
1312 guix build}).
1313
1314 The effect is to define the @code{NIX_BUILD_CORES} environment variable
1315 in the build process, which can then use it to exploit internal
1316 parallelism---for instance, by running @code{make -j$NIX_BUILD_CORES}.
1317
1318 @item --max-jobs=@var{n}
1319 @itemx -M @var{n}
1320 Allow at most @var{n} build jobs in parallel. The default value is
1321 @code{1}. Setting it to @code{0} means that no builds will be performed
1322 locally; instead, the daemon will offload builds (@pxref{Daemon Offload
1323 Setup}), or simply fail.
1324
1325 @item --max-silent-time=@var{seconds}
1326 When the build or substitution process remains silent for more than
1327 @var{seconds}, terminate it and report a build failure.
1328
1329 The default value is @code{0}, which disables the timeout.
1330
1331 The value specified here can be overridden by clients (@pxref{Common
1332 Build Options, @code{--max-silent-time}}).
1333
1334 @item --timeout=@var{seconds}
1335 Likewise, when the build or substitution process lasts for more than
1336 @var{seconds}, terminate it and report a build failure.
1337
1338 The default value is @code{0}, which disables the timeout.
1339
1340 The value specified here can be overridden by clients (@pxref{Common
1341 Build Options, @code{--timeout}}).
1342
1343 @item --rounds=@var{N}
1344 Build each derivation @var{n} times in a row, and raise an error if
1345 consecutive build results are not bit-for-bit identical. Note that this
1346 setting can be overridden by clients such as @command{guix build}
1347 (@pxref{Invoking guix build}).
1348
1349 When used in conjunction with @option{--keep-failed}, the differing
1350 output is kept in the store, under @file{/gnu/store/@dots{}-check}.
1351 This makes it easy to look for differences between the two results.
1352
1353 @item --debug
1354 Produce debugging output.
1355
1356 This is useful to debug daemon start-up issues, but then it may be
1357 overridden by clients, for example the @code{--verbosity} option of
1358 @command{guix build} (@pxref{Invoking guix build}).
1359
1360 @item --chroot-directory=@var{dir}
1361 Add @var{dir} to the build chroot.
1362
1363 Doing this may change the result of build processes---for instance if
1364 they use optional dependencies found in @var{dir} when it is available,
1365 and not otherwise. For that reason, it is not recommended to do so.
1366 Instead, make sure that each derivation declares all the inputs that it
1367 needs.
1368
1369 @item --disable-chroot
1370 Disable chroot builds.
1371
1372 Using this option is not recommended since, again, it would allow build
1373 processes to gain access to undeclared dependencies. It is necessary,
1374 though, when @command{guix-daemon} is running under an unprivileged user
1375 account.
1376
1377 @item --log-compression=@var{type}
1378 Compress build logs according to @var{type}, one of @code{gzip},
1379 @code{bzip2}, or @code{none}.
1380
1381 Unless @code{--lose-logs} is used, all the build logs are kept in the
1382 @var{localstatedir}. To save space, the daemon automatically compresses
1383 them with bzip2 by default.
1384
1385 @item --disable-deduplication
1386 @cindex deduplication
1387 Disable automatic file ``deduplication'' in the store.
1388
1389 By default, files added to the store are automatically ``deduplicated'':
1390 if a newly added file is identical to another one found in the store,
1391 the daemon makes the new file a hard link to the other file. This can
1392 noticeably reduce disk usage, at the expense of slightly increased
1393 input/output load at the end of a build process. This option disables
1394 this optimization.
1395
1396 @item --gc-keep-outputs[=yes|no]
1397 Tell whether the garbage collector (GC) must keep outputs of live
1398 derivations.
1399
1400 @cindex GC roots
1401 @cindex garbage collector roots
1402 When set to ``yes'', the GC will keep the outputs of any live derivation
1403 available in the store---the @code{.drv} files. The default is ``no'',
1404 meaning that derivation outputs are kept only if they are reachable from a GC
1405 root. @xref{Invoking guix gc}, for more on GC roots.
1406
1407 @item --gc-keep-derivations[=yes|no]
1408 Tell whether the garbage collector (GC) must keep derivations
1409 corresponding to live outputs.
1410
1411 When set to ``yes'', as is the case by default, the GC keeps
1412 derivations---i.e., @code{.drv} files---as long as at least one of their
1413 outputs is live. This allows users to keep track of the origins of
1414 items in their store. Setting it to ``no'' saves a bit of disk space.
1415
1416 In this way, setting @code{--gc-keep-derivations} to ``yes'' causes liveness
1417 to flow from outputs to derivations, and setting @code{--gc-keep-outputs} to
1418 ``yes'' causes liveness to flow from derivations to outputs. When both are
1419 set to ``yes'', the effect is to keep all the build prerequisites (the
1420 sources, compiler, libraries, and other build-time tools) of live objects in
1421 the store, regardless of whether these prerequisites are reachable from a GC
1422 root. This is convenient for developers since it saves rebuilds or downloads.
1423
1424 @item --impersonate-linux-2.6
1425 On Linux-based systems, impersonate Linux 2.6. This means that the
1426 kernel's @code{uname} system call will report 2.6 as the release number.
1427
1428 This might be helpful to build programs that (usually wrongfully) depend
1429 on the kernel version number.
1430
1431 @item --lose-logs
1432 Do not keep build logs. By default they are kept under
1433 @code{@var{localstatedir}/guix/log}.
1434
1435 @item --system=@var{system}
1436 Assume @var{system} as the current system type. By default it is the
1437 architecture/kernel pair found at configure time, such as
1438 @code{x86_64-linux}.
1439
1440 @item --listen=@var{endpoint}
1441 Listen for connections on @var{endpoint}. @var{endpoint} is interpreted
1442 as the file name of a Unix-domain socket if it starts with
1443 @code{/} (slash sign). Otherwise, @var{endpoint} is interpreted as a
1444 host name or host name and port to listen to. Here are a few examples:
1445
1446 @table @code
1447 @item --listen=/gnu/var/daemon
1448 Listen for connections on the @file{/gnu/var/daemon} Unix-domain socket,
1449 creating it if needed.
1450
1451 @item --listen=localhost
1452 @cindex daemon, remote access
1453 @cindex remote access to the daemon
1454 @cindex daemon, cluster setup
1455 @cindex clusters, daemon setup
1456 Listen for TCP connections on the network interface corresponding to
1457 @code{localhost}, on port 44146.
1458
1459 @item --listen=128.0.0.42:1234
1460 Listen for TCP connections on the network interface corresponding to
1461 @code{128.0.0.42}, on port 1234.
1462 @end table
1463
1464 This option can be repeated multiple times, in which case
1465 @command{guix-daemon} accepts connections on all the specified
1466 endpoints. Users can tell client commands what endpoint to connect to
1467 by setting the @code{GUIX_DAEMON_SOCKET} environment variable
1468 (@pxref{The Store, @code{GUIX_DAEMON_SOCKET}}).
1469
1470 @quotation Note
1471 The daemon protocol is @emph{unauthenticated and unencrypted}. Using
1472 @code{--listen=@var{host}} is suitable on local networks, such as
1473 clusters, where only trusted nodes may connect to the build daemon. In
1474 other cases where remote access to the daemon is needed, we recommend
1475 using Unix-domain sockets along with SSH.
1476 @end quotation
1477
1478 When @code{--listen} is omitted, @command{guix-daemon} listens for
1479 connections on the Unix-domain socket located at
1480 @file{@var{localstatedir}/guix/daemon-socket/socket}.
1481 @end table
1482
1483
1484 @node Application Setup
1485 @section Application Setup
1486
1487 @cindex foreign distro
1488 When using Guix on top of GNU/Linux distribution other than GuixSD---a
1489 so-called @dfn{foreign distro}---a few additional steps are needed to
1490 get everything in place. Here are some of them.
1491
1492 @subsection Locales
1493
1494 @anchor{locales-and-locpath}
1495 @cindex locales, when not on GuixSD
1496 @vindex LOCPATH
1497 @vindex GUIX_LOCPATH
1498 Packages installed @i{via} Guix will not use the locale data of the
1499 host system. Instead, you must first install one of the locale packages
1500 available with Guix and then define the @code{GUIX_LOCPATH} environment
1501 variable:
1502
1503 @example
1504 $ guix package -i glibc-locales
1505 $ export GUIX_LOCPATH=$HOME/.guix-profile/lib/locale
1506 @end example
1507
1508 Note that the @code{glibc-locales} package contains data for all the
1509 locales supported by the GNU@tie{}libc and weighs in at around
1510 110@tie{}MiB. Alternatively, the @code{glibc-utf8-locales} is smaller but
1511 limited to a few UTF-8 locales.
1512
1513 The @code{GUIX_LOCPATH} variable plays a role similar to @code{LOCPATH}
1514 (@pxref{Locale Names, @code{LOCPATH},, libc, The GNU C Library Reference
1515 Manual}). There are two important differences though:
1516
1517 @enumerate
1518 @item
1519 @code{GUIX_LOCPATH} is honored only by the libc in Guix, and not by the libc
1520 provided by foreign distros. Thus, using @code{GUIX_LOCPATH} allows you
1521 to make sure the programs of the foreign distro will not end up loading
1522 incompatible locale data.
1523
1524 @item
1525 libc suffixes each entry of @code{GUIX_LOCPATH} with @code{/X.Y}, where
1526 @code{X.Y} is the libc version---e.g., @code{2.22}. This means that,
1527 should your Guix profile contain a mixture of programs linked against
1528 different libc version, each libc version will only try to load locale
1529 data in the right format.
1530 @end enumerate
1531
1532 This is important because the locale data format used by different libc
1533 versions may be incompatible.
1534
1535 @subsection Name Service Switch
1536
1537 @cindex name service switch, glibc
1538 @cindex NSS (name service switch), glibc
1539 @cindex nscd (name service caching daemon)
1540 @cindex name service caching daemon (nscd)
1541 When using Guix on a foreign distro, we @emph{strongly recommend} that
1542 the system run the GNU C library's @dfn{name service cache daemon},
1543 @command{nscd}, which should be listening on the
1544 @file{/var/run/nscd/socket} socket. Failing to do that, applications
1545 installed with Guix may fail to look up host names or user accounts, or
1546 may even crash. The next paragraphs explain why.
1547
1548 @cindex @file{nsswitch.conf}
1549 The GNU C library implements a @dfn{name service switch} (NSS), which is
1550 an extensible mechanism for ``name lookups'' in general: host name
1551 resolution, user accounts, and more (@pxref{Name Service Switch,,, libc,
1552 The GNU C Library Reference Manual}).
1553
1554 @cindex Network information service (NIS)
1555 @cindex NIS (Network information service)
1556 Being extensible, the NSS supports @dfn{plugins}, which provide new name
1557 lookup implementations: for example, the @code{nss-mdns} plugin allow
1558 resolution of @code{.local} host names, the @code{nis} plugin allows
1559 user account lookup using the Network information service (NIS), and so
1560 on. These extra ``lookup services'' are configured system-wide in
1561 @file{/etc/nsswitch.conf}, and all the programs running on the system
1562 honor those settings (@pxref{NSS Configuration File,,, libc, The GNU C
1563 Reference Manual}).
1564
1565 When they perform a name lookup---for instance by calling the
1566 @code{getaddrinfo} function in C---applications first try to connect to
1567 the nscd; on success, nscd performs name lookups on their behalf. If
1568 the nscd is not running, then they perform the name lookup by
1569 themselves, by loading the name lookup services into their own address
1570 space and running it. These name lookup services---the
1571 @file{libnss_*.so} files---are @code{dlopen}'d, but they may come from
1572 the host system's C library, rather than from the C library the
1573 application is linked against (the C library coming from Guix).
1574
1575 And this is where the problem is: if your application is linked against
1576 Guix's C library (say, glibc 2.24) and tries to load NSS plugins from
1577 another C library (say, @code{libnss_mdns.so} for glibc 2.22), it will
1578 likely crash or have its name lookups fail unexpectedly.
1579
1580 Running @command{nscd} on the system, among other advantages, eliminates
1581 this binary incompatibility problem because those @code{libnss_*.so}
1582 files are loaded in the @command{nscd} process, not in applications
1583 themselves.
1584
1585 @subsection X11 Fonts
1586
1587 @cindex fonts
1588 The majority of graphical applications use Fontconfig to locate and
1589 load fonts and perform X11-client-side rendering. The @code{fontconfig}
1590 package in Guix looks for fonts in @file{$HOME/.guix-profile}
1591 by default. Thus, to allow graphical applications installed with Guix
1592 to display fonts, you have to install fonts with Guix as well.
1593 Essential font packages include @code{gs-fonts}, @code{font-dejavu}, and
1594 @code{font-gnu-freefont-ttf}.
1595
1596 To display text written in Chinese languages, Japanese, or Korean in
1597 graphical applications, consider installing
1598 @code{font-adobe-source-han-sans} or @code{font-wqy-zenhei}. The former
1599 has multiple outputs, one per language family (@pxref{Packages with
1600 Multiple Outputs}). For instance, the following command installs fonts
1601 for Chinese languages:
1602
1603 @example
1604 guix package -i font-adobe-source-han-sans:cn
1605 @end example
1606
1607 @cindex @code{xterm}
1608 Older programs such as @command{xterm} do not use Fontconfig and instead
1609 rely on server-side font rendering. Such programs require to specify a
1610 full name of a font using XLFD (X Logical Font Description), like this:
1611
1612 @example
1613 -*-dejavu sans-medium-r-normal-*-*-100-*-*-*-*-*-1
1614 @end example
1615
1616 To be able to use such full names for the TrueType fonts installed in
1617 your Guix profile, you need to extend the font path of the X server:
1618
1619 @c Note: 'xset' does not accept symlinks so the trick below arranges to
1620 @c get at the real directory. See <https://bugs.gnu.org/30655>.
1621 @example
1622 xset +fp $(dirname $(readlink -f ~/.guix-profile/share/fonts/truetype/fonts.dir))
1623 @end example
1624
1625 @cindex @code{xlsfonts}
1626 After that, you can run @code{xlsfonts} (from @code{xlsfonts} package)
1627 to make sure your TrueType fonts are listed there.
1628
1629 @cindex @code{fc-cache}
1630 @cindex font cache
1631 After installing fonts you may have to refresh the font cache to use
1632 them in applications. The same applies when applications installed via
1633 Guix do not seem to find fonts. To force rebuilding of the font cache
1634 run @code{fc-cache -f}. The @code{fc-cache} command is provided by the
1635 @code{fontconfig} package.
1636
1637 @subsection X.509 Certificates
1638
1639 @cindex @code{nss-certs}
1640 The @code{nss-certs} package provides X.509 certificates, which allow
1641 programs to authenticate Web servers accessed over HTTPS.
1642
1643 When using Guix on a foreign distro, you can install this package and
1644 define the relevant environment variables so that packages know where to
1645 look for certificates. @xref{X.509 Certificates}, for detailed
1646 information.
1647
1648 @subsection Emacs Packages
1649
1650 @cindex @code{emacs}
1651 When you install Emacs packages with Guix, the elisp files may be placed
1652 either in @file{$HOME/.guix-profile/share/emacs/site-lisp/} or in
1653 sub-directories of
1654 @file{$HOME/.guix-profile/share/emacs/site-lisp/guix.d/}. The latter
1655 directory exists because potentially there may exist thousands of Emacs
1656 packages and storing all their files in a single directory may not be
1657 reliable (because of name conflicts). So we think using a separate
1658 directory for each package is a good idea. It is very similar to how
1659 the Emacs package system organizes the file structure (@pxref{Package
1660 Files,,, emacs, The GNU Emacs Manual}).
1661
1662 By default, Emacs (installed with Guix) ``knows'' where these packages
1663 are placed, so you do not need to perform any configuration. If, for
1664 some reason, you want to avoid auto-loading Emacs packages installed
1665 with Guix, you can do so by running Emacs with @code{--no-site-file}
1666 option (@pxref{Init File,,, emacs, The GNU Emacs Manual}).
1667
1668 @subsection The GCC toolchain
1669
1670 @cindex GCC
1671 @cindex ld-wrapper
1672
1673 Guix offers individual compiler packages such as @code{gcc} but if you
1674 are in need of a complete toolchain for compiling and linking source
1675 code what you really want is the @code{gcc-toolchain} package. This
1676 package provides a complete GCC toolchain for C/C++ development,
1677 including GCC itself, the GNU C Library (headers and binaries, plus
1678 debugging symbols in the @code{debug} output), Binutils, and a linker
1679 wrapper.
1680
1681 @cindex attempt to use impure library, error message
1682
1683 The wrapper's purpose is to inspect the @code{-L} and @code{-l} switches
1684 passed to the linker, add corresponding @code{-rpath} arguments, and
1685 invoke the actual linker with this new set of arguments. By default,
1686 the linker wrapper refuses to link to libraries outside the store to
1687 ensure ``purity''. This can be annoying when using the toolchain to
1688 link with local libraries. To allow references to libraries outside the
1689 store you need to define the environment variable
1690 @code{GUIX_LD_WRAPPER_ALLOW_IMPURITIES}.
1691
1692 @c TODO What else?
1693
1694 @c *********************************************************************
1695 @node Package Management
1696 @chapter Package Management
1697
1698 @cindex packages
1699 The purpose of GNU Guix is to allow users to easily install, upgrade, and
1700 remove software packages, without having to know about their build
1701 procedures or dependencies. Guix also goes beyond this obvious set of
1702 features.
1703
1704 This chapter describes the main features of Guix, as well as the
1705 package management tools it provides. Along with the command-line
1706 interface described below (@pxref{Invoking guix package, @code{guix
1707 package}}), you may also use the Emacs-Guix interface (@pxref{Top,,,
1708 emacs-guix, The Emacs-Guix Reference Manual}), after installing
1709 @code{emacs-guix} package (run @kbd{M-x guix-help} command to start
1710 with it):
1711
1712 @example
1713 guix package -i emacs-guix
1714 @end example
1715
1716 @menu
1717 * Features:: How Guix will make your life brighter.
1718 * Invoking guix package:: Package installation, removal, etc.
1719 * Substitutes:: Downloading pre-built binaries.
1720 * Packages with Multiple Outputs:: Single source package, multiple outputs.
1721 * Invoking guix gc:: Running the garbage collector.
1722 * Invoking guix pull:: Fetching the latest Guix and distribution.
1723 * Channels:: Customizing the package collection.
1724 * Inferiors:: Interacting with another revision of Guix.
1725 * Invoking guix describe:: Display information about your Guix revision.
1726 * Invoking guix pack:: Creating software bundles.
1727 * Invoking guix archive:: Exporting and importing store files.
1728 @end menu
1729
1730 @node Features
1731 @section Features
1732
1733 When using Guix, each package ends up in the @dfn{package store}, in its
1734 own directory---something that resembles
1735 @file{/gnu/store/xxx-package-1.2}, where @code{xxx} is a base32 string.
1736
1737 Instead of referring to these directories, users have their own
1738 @dfn{profile}, which points to the packages that they actually want to
1739 use. These profiles are stored within each user's home directory, at
1740 @code{$HOME/.guix-profile}.
1741
1742 For example, @code{alice} installs GCC 4.7.2. As a result,
1743 @file{/home/alice/.guix-profile/bin/gcc} points to
1744 @file{/gnu/store/@dots{}-gcc-4.7.2/bin/gcc}. Now, on the same machine,
1745 @code{bob} had already installed GCC 4.8.0. The profile of @code{bob}
1746 simply continues to point to
1747 @file{/gnu/store/@dots{}-gcc-4.8.0/bin/gcc}---i.e., both versions of GCC
1748 coexist on the same system without any interference.
1749
1750 The @command{guix package} command is the central tool to manage
1751 packages (@pxref{Invoking guix package}). It operates on the per-user
1752 profiles, and can be used @emph{with normal user privileges}.
1753
1754 @cindex transactions
1755 The command provides the obvious install, remove, and upgrade
1756 operations. Each invocation is actually a @emph{transaction}: either
1757 the specified operation succeeds, or nothing happens. Thus, if the
1758 @command{guix package} process is terminated during the transaction,
1759 or if a power outage occurs during the transaction, then the user's
1760 profile remains in its previous state, and remains usable.
1761
1762 In addition, any package transaction may be @emph{rolled back}. So, if,
1763 for example, an upgrade installs a new version of a package that turns
1764 out to have a serious bug, users may roll back to the previous instance
1765 of their profile, which was known to work well. Similarly, the global
1766 system configuration on GuixSD is subject to
1767 transactional upgrades and roll-back
1768 (@pxref{Using the Configuration System}).
1769
1770 All packages in the package store may be @emph{garbage-collected}.
1771 Guix can determine which packages are still referenced by user
1772 profiles, and remove those that are provably no longer referenced
1773 (@pxref{Invoking guix gc}). Users may also explicitly remove old
1774 generations of their profile so that the packages they refer to can be
1775 collected.
1776
1777 @cindex reproducibility
1778 @cindex reproducible builds
1779 Guix takes a @dfn{purely functional} approach to package
1780 management, as described in the introduction (@pxref{Introduction}).
1781 Each @file{/gnu/store} package directory name contains a hash of all the
1782 inputs that were used to build that package---compiler, libraries, build
1783 scripts, etc. This direct correspondence allows users to make sure a
1784 given package installation matches the current state of their
1785 distribution. It also helps maximize @dfn{build reproducibility}:
1786 thanks to the isolated build environments that are used, a given build
1787 is likely to yield bit-identical files when performed on different
1788 machines (@pxref{Invoking guix-daemon, container}).
1789
1790 @cindex substitutes
1791 This foundation allows Guix to support @dfn{transparent binary/source
1792 deployment}. When a pre-built binary for a @file{/gnu/store} item is
1793 available from an external source---a @dfn{substitute}, Guix just
1794 downloads it and unpacks it;
1795 otherwise, it builds the package from source, locally
1796 (@pxref{Substitutes}). Because build results are usually bit-for-bit
1797 reproducible, users do not have to trust servers that provide
1798 substitutes: they can force a local build and @emph{challenge} providers
1799 (@pxref{Invoking guix challenge}).
1800
1801 Control over the build environment is a feature that is also useful for
1802 developers. The @command{guix environment} command allows developers of
1803 a package to quickly set up the right development environment for their
1804 package, without having to manually install the dependencies of the
1805 package into their profile (@pxref{Invoking guix environment}).
1806
1807 @cindex replication, of software environments
1808 @cindex provenance tracking, of software artifacts
1809 All of Guix and its package definitions is version-controlled, and
1810 @command{guix pull} allows you to ``travel in time'' on the history of Guix
1811 itself (@pxref{Invoking guix pull}). This makes it possible to replicate a
1812 Guix instance on a different machine or at a later point in time, which in
1813 turn allows you to @emph{replicate complete software environments}, while
1814 retaining precise @dfn{provenance tracking} of the software.
1815
1816 @node Invoking guix package
1817 @section Invoking @command{guix package}
1818
1819 @cindex installing packages
1820 @cindex removing packages
1821 @cindex package installation
1822 @cindex package removal
1823 The @command{guix package} command is the tool that allows users to
1824 install, upgrade, and remove packages, as well as rolling back to
1825 previous configurations. It operates only on the user's own profile,
1826 and works with normal user privileges (@pxref{Features}). Its syntax
1827 is:
1828
1829 @example
1830 guix package @var{options}
1831 @end example
1832 @cindex transactions
1833 Primarily, @var{options} specifies the operations to be performed during
1834 the transaction. Upon completion, a new profile is created, but
1835 previous @dfn{generations} of the profile remain available, should the user
1836 want to roll back.
1837
1838 For example, to remove @code{lua} and install @code{guile} and
1839 @code{guile-cairo} in a single transaction:
1840
1841 @example
1842 guix package -r lua -i guile guile-cairo
1843 @end example
1844
1845 @command{guix package} also supports a @dfn{declarative approach}
1846 whereby the user specifies the exact set of packages to be available and
1847 passes it @i{via} the @option{--manifest} option
1848 (@pxref{profile-manifest, @option{--manifest}}).
1849
1850 @cindex profile
1851 For each user, a symlink to the user's default profile is automatically
1852 created in @file{$HOME/.guix-profile}. This symlink always points to the
1853 current generation of the user's default profile. Thus, users can add
1854 @file{$HOME/.guix-profile/bin} to their @code{PATH} environment
1855 variable, and so on.
1856 @cindex search paths
1857 If you are not using the Guix System Distribution, consider adding the
1858 following lines to your @file{~/.bash_profile} (@pxref{Bash Startup
1859 Files,,, bash, The GNU Bash Reference Manual}) so that newly-spawned
1860 shells get all the right environment variable definitions:
1861
1862 @example
1863 GUIX_PROFILE="$HOME/.guix-profile" ; \
1864 source "$HOME/.guix-profile/etc/profile"
1865 @end example
1866
1867 In a multi-user setup, user profiles are stored in a place registered as
1868 a @dfn{garbage-collector root}, which @file{$HOME/.guix-profile} points
1869 to (@pxref{Invoking guix gc}). That directory is normally
1870 @code{@var{localstatedir}/guix/profiles/per-user/@var{user}}, where
1871 @var{localstatedir} is the value passed to @code{configure} as
1872 @code{--localstatedir}, and @var{user} is the user name. The
1873 @file{per-user} directory is created when @command{guix-daemon} is
1874 started, and the @var{user} sub-directory is created by @command{guix
1875 package}.
1876
1877 The @var{options} can be among the following:
1878
1879 @table @code
1880
1881 @item --install=@var{package} @dots{}
1882 @itemx -i @var{package} @dots{}
1883 Install the specified @var{package}s.
1884
1885 Each @var{package} may specify either a simple package name, such as
1886 @code{guile}, or a package name followed by an at-sign and version number,
1887 such as @code{guile@@1.8.8} or simply @code{guile@@1.8} (in the latter
1888 case, the newest version prefixed by @code{1.8} is selected.)
1889
1890 If no version number is specified, the
1891 newest available version will be selected. In addition, @var{package}
1892 may contain a colon, followed by the name of one of the outputs of the
1893 package, as in @code{gcc:doc} or @code{binutils@@2.22:lib}
1894 (@pxref{Packages with Multiple Outputs}). Packages with a corresponding
1895 name (and optionally version) are searched for among the GNU
1896 distribution modules (@pxref{Package Modules}).
1897
1898 @cindex propagated inputs
1899 Sometimes packages have @dfn{propagated inputs}: these are dependencies
1900 that automatically get installed along with the required package
1901 (@pxref{package-propagated-inputs, @code{propagated-inputs} in
1902 @code{package} objects}, for information about propagated inputs in
1903 package definitions).
1904
1905 @anchor{package-cmd-propagated-inputs}
1906 An example is the GNU MPC library: its C header files refer to those of
1907 the GNU MPFR library, which in turn refer to those of the GMP library.
1908 Thus, when installing MPC, the MPFR and GMP libraries also get installed
1909 in the profile; removing MPC also removes MPFR and GMP---unless they had
1910 also been explicitly installed by the user.
1911
1912 Besides, packages sometimes rely on the definition of environment
1913 variables for their search paths (see explanation of
1914 @code{--search-paths} below). Any missing or possibly incorrect
1915 environment variable definitions are reported here.
1916
1917 @item --install-from-expression=@var{exp}
1918 @itemx -e @var{exp}
1919 Install the package @var{exp} evaluates to.
1920
1921 @var{exp} must be a Scheme expression that evaluates to a
1922 @code{<package>} object. This option is notably useful to disambiguate
1923 between same-named variants of a package, with expressions such as
1924 @code{(@@ (gnu packages base) guile-final)}.
1925
1926 Note that this option installs the first output of the specified
1927 package, which may be insufficient when needing a specific output of a
1928 multiple-output package.
1929
1930 @item --install-from-file=@var{file}
1931 @itemx -f @var{file}
1932 Install the package that the code within @var{file} evaluates to.
1933
1934 As an example, @var{file} might contain a definition like this
1935 (@pxref{Defining Packages}):
1936
1937 @example
1938 @verbatiminclude package-hello.scm
1939 @end example
1940
1941 Developers may find it useful to include such a @file{guix.scm} file
1942 in the root of their project source tree that can be used to test
1943 development snapshots and create reproducible development environments
1944 (@pxref{Invoking guix environment}).
1945
1946 @item --remove=@var{package} @dots{}
1947 @itemx -r @var{package} @dots{}
1948 Remove the specified @var{package}s.
1949
1950 As for @code{--install}, each @var{package} may specify a version number
1951 and/or output name in addition to the package name. For instance,
1952 @code{-r glibc:debug} would remove the @code{debug} output of
1953 @code{glibc}.
1954
1955 @item --upgrade[=@var{regexp} @dots{}]
1956 @itemx -u [@var{regexp} @dots{}]
1957 @cindex upgrading packages
1958 Upgrade all the installed packages. If one or more @var{regexp}s are
1959 specified, upgrade only installed packages whose name matches a
1960 @var{regexp}. Also see the @code{--do-not-upgrade} option below.
1961
1962 Note that this upgrades package to the latest version of packages found
1963 in the distribution currently installed. To update your distribution,
1964 you should regularly run @command{guix pull} (@pxref{Invoking guix
1965 pull}).
1966
1967 @item --do-not-upgrade[=@var{regexp} @dots{}]
1968 When used together with the @code{--upgrade} option, do @emph{not}
1969 upgrade any packages whose name matches a @var{regexp}. For example, to
1970 upgrade all packages in the current profile except those containing the
1971 substring ``emacs'':
1972
1973 @example
1974 $ guix package --upgrade . --do-not-upgrade emacs
1975 @end example
1976
1977 @item @anchor{profile-manifest}--manifest=@var{file}
1978 @itemx -m @var{file}
1979 @cindex profile declaration
1980 @cindex profile manifest
1981 Create a new generation of the profile from the manifest object
1982 returned by the Scheme code in @var{file}.
1983
1984 This allows you to @emph{declare} the profile's contents rather than
1985 constructing it through a sequence of @code{--install} and similar
1986 commands. The advantage is that @var{file} can be put under version
1987 control, copied to different machines to reproduce the same profile, and
1988 so on.
1989
1990 @c FIXME: Add reference to (guix profile) documentation when available.
1991 @var{file} must return a @dfn{manifest} object, which is roughly a list
1992 of packages:
1993
1994 @findex packages->manifest
1995 @example
1996 (use-package-modules guile emacs)
1997
1998 (packages->manifest
1999 (list emacs
2000 guile-2.0
2001 ;; Use a specific package output.
2002 (list guile-2.0 "debug")))
2003 @end example
2004
2005 @findex specifications->manifest
2006 In this example we have to know which modules define the @code{emacs}
2007 and @code{guile-2.0} variables to provide the right
2008 @code{use-package-modules} line, which can be cumbersome. We can
2009 instead provide regular package specifications and let
2010 @code{specifications->manifest} look up the corresponding package
2011 objects, like this:
2012
2013 @example
2014 (specifications->manifest
2015 '("emacs" "guile@@2.2" "guile@@2.2:debug"))
2016 @end example
2017
2018 @item --roll-back
2019 @cindex rolling back
2020 @cindex undoing transactions
2021 @cindex transactions, undoing
2022 Roll back to the previous @dfn{generation} of the profile---i.e., undo
2023 the last transaction.
2024
2025 When combined with options such as @code{--install}, roll back occurs
2026 before any other actions.
2027
2028 When rolling back from the first generation that actually contains
2029 installed packages, the profile is made to point to the @dfn{zeroth
2030 generation}, which contains no files apart from its own metadata.
2031
2032 After having rolled back, installing, removing, or upgrading packages
2033 overwrites previous future generations. Thus, the history of the
2034 generations in a profile is always linear.
2035
2036 @item --switch-generation=@var{pattern}
2037 @itemx -S @var{pattern}
2038 @cindex generations
2039 Switch to a particular generation defined by @var{pattern}.
2040
2041 @var{pattern} may be either a generation number or a number prefixed
2042 with ``+'' or ``-''. The latter means: move forward/backward by a
2043 specified number of generations. For example, if you want to return to
2044 the latest generation after @code{--roll-back}, use
2045 @code{--switch-generation=+1}.
2046
2047 The difference between @code{--roll-back} and
2048 @code{--switch-generation=-1} is that @code{--switch-generation} will
2049 not make a zeroth generation, so if a specified generation does not
2050 exist, the current generation will not be changed.
2051
2052 @item --search-paths[=@var{kind}]
2053 @cindex search paths
2054 Report environment variable definitions, in Bash syntax, that may be
2055 needed in order to use the set of installed packages. These environment
2056 variables are used to specify @dfn{search paths} for files used by some
2057 of the installed packages.
2058
2059 For example, GCC needs the @code{CPATH} and @code{LIBRARY_PATH}
2060 environment variables to be defined so it can look for headers and
2061 libraries in the user's profile (@pxref{Environment Variables,,, gcc,
2062 Using the GNU Compiler Collection (GCC)}). If GCC and, say, the C
2063 library are installed in the profile, then @code{--search-paths} will
2064 suggest setting these variables to @code{@var{profile}/include} and
2065 @code{@var{profile}/lib}, respectively.
2066
2067 The typical use case is to define these environment variables in the
2068 shell:
2069
2070 @example
2071 $ eval `guix package --search-paths`
2072 @end example
2073
2074 @var{kind} may be one of @code{exact}, @code{prefix}, or @code{suffix},
2075 meaning that the returned environment variable definitions will either
2076 be exact settings, or prefixes or suffixes of the current value of these
2077 variables. When omitted, @var{kind} defaults to @code{exact}.
2078
2079 This option can also be used to compute the @emph{combined} search paths
2080 of several profiles. Consider this example:
2081
2082 @example
2083 $ guix package -p foo -i guile
2084 $ guix package -p bar -i guile-json
2085 $ guix package -p foo -p bar --search-paths
2086 @end example
2087
2088 The last command above reports about the @code{GUILE_LOAD_PATH}
2089 variable, even though, taken individually, neither @file{foo} nor
2090 @file{bar} would lead to that recommendation.
2091
2092
2093 @item --profile=@var{profile}
2094 @itemx -p @var{profile}
2095 Use @var{profile} instead of the user's default profile.
2096
2097 @cindex collisions, in a profile
2098 @cindex colliding packages in profiles
2099 @cindex profile collisions
2100 @item --allow-collisions
2101 Allow colliding packages in the new profile. Use at your own risk!
2102
2103 By default, @command{guix package} reports as an error @dfn{collisions}
2104 in the profile. Collisions happen when two or more different versions
2105 or variants of a given package end up in the profile.
2106
2107 @item --verbose
2108 Produce verbose output. In particular, emit the build log of the
2109 environment on the standard error port.
2110
2111 @item --bootstrap
2112 Use the bootstrap Guile to build the profile. This option is only
2113 useful to distribution developers.
2114
2115 @end table
2116
2117 In addition to these actions, @command{guix package} supports the
2118 following options to query the current state of a profile, or the
2119 availability of packages:
2120
2121 @table @option
2122
2123 @item --search=@var{regexp}
2124 @itemx -s @var{regexp}
2125 @cindex searching for packages
2126 List the available packages whose name, synopsis, or description matches
2127 @var{regexp}, sorted by relevance. Print all the metadata of matching packages in
2128 @code{recutils} format (@pxref{Top, GNU recutils databases,, recutils,
2129 GNU recutils manual}).
2130
2131 This allows specific fields to be extracted using the @command{recsel}
2132 command, for instance:
2133
2134 @example
2135 $ guix package -s malloc | recsel -p name,version,relevance
2136 name: jemalloc
2137 version: 4.5.0
2138 relevance: 6
2139
2140 name: glibc
2141 version: 2.25
2142 relevance: 1
2143
2144 name: libgc
2145 version: 7.6.0
2146 relevance: 1
2147 @end example
2148
2149 Similarly, to show the name of all the packages available under the
2150 terms of the GNU@tie{}LGPL version 3:
2151
2152 @example
2153 $ guix package -s "" | recsel -p name -e 'license ~ "LGPL 3"'
2154 name: elfutils
2155
2156 name: gmp
2157 @dots{}
2158 @end example
2159
2160 It is also possible to refine search results using several @code{-s}
2161 flags. For example, the following command returns a list of board
2162 games:
2163
2164 @example
2165 $ guix package -s '\<board\>' -s game | recsel -p name
2166 name: gnubg
2167 @dots{}
2168 @end example
2169
2170 If we were to omit @code{-s game}, we would also get software packages
2171 that deal with printed circuit boards; removing the angle brackets
2172 around @code{board} would further add packages that have to do with
2173 keyboards.
2174
2175 And now for a more elaborate example. The following command searches
2176 for cryptographic libraries, filters out Haskell, Perl, Python, and Ruby
2177 libraries, and prints the name and synopsis of the matching packages:
2178
2179 @example
2180 $ guix package -s crypto -s library | \
2181 recsel -e '! (name ~ "^(ghc|perl|python|ruby)")' -p name,synopsis
2182 @end example
2183
2184 @noindent
2185 @xref{Selection Expressions,,, recutils, GNU recutils manual}, for more
2186 information on @dfn{selection expressions} for @code{recsel -e}.
2187
2188 @item --show=@var{package}
2189 Show details about @var{package}, taken from the list of available packages, in
2190 @code{recutils} format (@pxref{Top, GNU recutils databases,, recutils, GNU
2191 recutils manual}).
2192
2193 @example
2194 $ guix package --show=python | recsel -p name,version
2195 name: python
2196 version: 2.7.6
2197
2198 name: python
2199 version: 3.3.5
2200 @end example
2201
2202 You may also specify the full name of a package to only get details about a
2203 specific version of it:
2204 @example
2205 $ guix package --show=python@@3.4 | recsel -p name,version
2206 name: python
2207 version: 3.4.3
2208 @end example
2209
2210
2211
2212 @item --list-installed[=@var{regexp}]
2213 @itemx -I [@var{regexp}]
2214 List the currently installed packages in the specified profile, with the
2215 most recently installed packages shown last. When @var{regexp} is
2216 specified, list only installed packages whose name matches @var{regexp}.
2217
2218 For each installed package, print the following items, separated by
2219 tabs: the package name, its version string, the part of the package that
2220 is installed (for instance, @code{out} for the default output,
2221 @code{include} for its headers, etc.), and the path of this package in
2222 the store.
2223
2224 @item --list-available[=@var{regexp}]
2225 @itemx -A [@var{regexp}]
2226 List packages currently available in the distribution for this system
2227 (@pxref{GNU Distribution}). When @var{regexp} is specified, list only
2228 installed packages whose name matches @var{regexp}.
2229
2230 For each package, print the following items separated by tabs: its name,
2231 its version string, the parts of the package (@pxref{Packages with
2232 Multiple Outputs}), and the source location of its definition.
2233
2234 @item --list-generations[=@var{pattern}]
2235 @itemx -l [@var{pattern}]
2236 @cindex generations
2237 Return a list of generations along with their creation dates; for each
2238 generation, show the installed packages, with the most recently
2239 installed packages shown last. Note that the zeroth generation is never
2240 shown.
2241
2242 For each installed package, print the following items, separated by
2243 tabs: the name of a package, its version string, the part of the package
2244 that is installed (@pxref{Packages with Multiple Outputs}), and the
2245 location of this package in the store.
2246
2247 When @var{pattern} is used, the command returns only matching
2248 generations. Valid patterns include:
2249
2250 @itemize
2251 @item @emph{Integers and comma-separated integers}. Both patterns denote
2252 generation numbers. For instance, @code{--list-generations=1} returns
2253 the first one.
2254
2255 And @code{--list-generations=1,8,2} outputs three generations in the
2256 specified order. Neither spaces nor trailing commas are allowed.
2257
2258 @item @emph{Ranges}. @code{--list-generations=2..9} prints the
2259 specified generations and everything in between. Note that the start of
2260 a range must be smaller than its end.
2261
2262 It is also possible to omit the endpoint. For example,
2263 @code{--list-generations=2..}, returns all generations starting from the
2264 second one.
2265
2266 @item @emph{Durations}. You can also get the last @emph{N}@tie{}days, weeks,
2267 or months by passing an integer along with the first letter of the
2268 duration. For example, @code{--list-generations=20d} lists generations
2269 that are up to 20 days old.
2270 @end itemize
2271
2272 @item --delete-generations[=@var{pattern}]
2273 @itemx -d [@var{pattern}]
2274 When @var{pattern} is omitted, delete all generations except the current
2275 one.
2276
2277 This command accepts the same patterns as @option{--list-generations}.
2278 When @var{pattern} is specified, delete the matching generations. When
2279 @var{pattern} specifies a duration, generations @emph{older} than the
2280 specified duration match. For instance, @code{--delete-generations=1m}
2281 deletes generations that are more than one month old.
2282
2283 If the current generation matches, it is @emph{not} deleted. Also, the
2284 zeroth generation is never deleted.
2285
2286 Note that deleting generations prevents rolling back to them.
2287 Consequently, this command must be used with care.
2288
2289 @end table
2290
2291 Finally, since @command{guix package} may actually start build
2292 processes, it supports all the common build options (@pxref{Common Build
2293 Options}). It also supports package transformation options, such as
2294 @option{--with-source} (@pxref{Package Transformation Options}).
2295 However, note that package transformations are lost when upgrading; to
2296 preserve transformations across upgrades, you should define your own
2297 package variant in a Guile module and add it to @code{GUIX_PACKAGE_PATH}
2298 (@pxref{Defining Packages}).
2299
2300 @node Substitutes
2301 @section Substitutes
2302
2303 @cindex substitutes
2304 @cindex pre-built binaries
2305 Guix supports transparent source/binary deployment, which means that it
2306 can either build things locally, or download pre-built items from a
2307 server, or both. We call these pre-built items @dfn{substitutes}---they
2308 are substitutes for local build results. In many cases, downloading a
2309 substitute is much faster than building things locally.
2310
2311 Substitutes can be anything resulting from a derivation build
2312 (@pxref{Derivations}). Of course, in the common case, they are
2313 pre-built package binaries, but source tarballs, for instance, which
2314 also result from derivation builds, can be available as substitutes.
2315
2316 @menu
2317 * Official Substitute Server:: One particular source of substitutes.
2318 * Substitute Server Authorization:: How to enable or disable substitutes.
2319 * Substitute Authentication:: How Guix verifies substitutes.
2320 * Proxy Settings:: How to get substitutes via proxy.
2321 * Substitution Failure:: What happens when substitution fails.
2322 * On Trusting Binaries:: How can you trust that binary blob?
2323 @end menu
2324
2325 @node Official Substitute Server
2326 @subsection Official Substitute Server
2327
2328 @cindex hydra
2329 @cindex build farm
2330 The @code{mirror.hydra.gnu.org} server is a front-end to an official build farm
2331 that builds packages from Guix continuously for some
2332 architectures, and makes them available as substitutes. This is the
2333 default source of substitutes; it can be overridden by passing the
2334 @option{--substitute-urls} option either to @command{guix-daemon}
2335 (@pxref{daemon-substitute-urls,, @code{guix-daemon --substitute-urls}})
2336 or to client tools such as @command{guix package}
2337 (@pxref{client-substitute-urls,, client @option{--substitute-urls}
2338 option}).
2339
2340 Substitute URLs can be either HTTP or HTTPS.
2341 HTTPS is recommended because communications are encrypted; conversely,
2342 using HTTP makes all communications visible to an eavesdropper, who
2343 could use the information gathered to determine, for instance, whether
2344 your system has unpatched security vulnerabilities.
2345
2346 Substitutes from the official build farm are enabled by default when
2347 using the Guix System Distribution (@pxref{GNU Distribution}). However,
2348 they are disabled by default when using Guix on a foreign distribution,
2349 unless you have explicitly enabled them via one of the recommended
2350 installation steps (@pxref{Installation}). The following paragraphs
2351 describe how to enable or disable substitutes for the official build
2352 farm; the same procedure can also be used to enable substitutes for any
2353 other substitute server.
2354
2355 @node Substitute Server Authorization
2356 @subsection Substitute Server Authorization
2357
2358 @cindex security
2359 @cindex substitutes, authorization thereof
2360 @cindex access control list (ACL), for substitutes
2361 @cindex ACL (access control list), for substitutes
2362 To allow Guix to download substitutes from @code{hydra.gnu.org} or a
2363 mirror thereof, you
2364 must add its public key to the access control list (ACL) of archive
2365 imports, using the @command{guix archive} command (@pxref{Invoking guix
2366 archive}). Doing so implies that you trust @code{hydra.gnu.org} to not
2367 be compromised and to serve genuine substitutes.
2368
2369 The public key for @code{hydra.gnu.org} is installed along with Guix, in
2370 @code{@var{prefix}/share/guix/hydra.gnu.org.pub}, where @var{prefix} is
2371 the installation prefix of Guix. If you installed Guix from source,
2372 make sure you checked the GPG signature of
2373 @file{guix-@value{VERSION}.tar.gz}, which contains this public key file.
2374 Then, you can run something like this:
2375
2376 @example
2377 # guix archive --authorize < @var{prefix}/share/guix/hydra.gnu.org.pub
2378 @end example
2379
2380 @quotation Note
2381 Similarly, the @file{berlin.guixsd.org.pub} file contains the public key
2382 for the project's new build farm, reachable at
2383 @indicateurl{https://berlin.guixsd.org}.
2384
2385 As of this writing @code{berlin.guixsd.org} is being upgraded so it can
2386 better scale up, but you might want to give it a try. It is backed by
2387 20 x86_64/i686 build nodes and may be able to provide substitutes more
2388 quickly than @code{mirror.hydra.gnu.org}.
2389 @end quotation
2390
2391 Once this is in place, the output of a command like @code{guix build}
2392 should change from something like:
2393
2394 @example
2395 $ guix build emacs --dry-run
2396 The following derivations would be built:
2397 /gnu/store/yr7bnx8xwcayd6j95r2clmkdl1qh688w-emacs-24.3.drv
2398 /gnu/store/x8qsh1hlhgjx6cwsjyvybnfv2i37z23w-dbus-1.6.4.tar.gz.drv
2399 /gnu/store/1ixwp12fl950d15h2cj11c73733jay0z-alsa-lib-1.0.27.1.tar.bz2.drv
2400 /gnu/store/nlma1pw0p603fpfiqy7kn4zm105r5dmw-util-linux-2.21.drv
2401 @dots{}
2402 @end example
2403
2404 @noindent
2405 to something like:
2406
2407 @example
2408 $ guix build emacs --dry-run
2409 112.3 MB would be downloaded:
2410 /gnu/store/pk3n22lbq6ydamyymqkkz7i69wiwjiwi-emacs-24.3
2411 /gnu/store/2ygn4ncnhrpr61rssa6z0d9x22si0va3-libjpeg-8d
2412 /gnu/store/71yz6lgx4dazma9dwn2mcjxaah9w77jq-cairo-1.12.16
2413 /gnu/store/7zdhgp0n1518lvfn8mb96sxqfmvqrl7v-libxrender-0.9.7
2414 @dots{}
2415 @end example
2416
2417 @noindent
2418 This indicates that substitutes from @code{hydra.gnu.org} are usable and
2419 will be downloaded, when possible, for future builds.
2420
2421 @cindex substitutes, how to disable
2422 The substitute mechanism can be disabled globally by running
2423 @code{guix-daemon} with @code{--no-substitutes} (@pxref{Invoking
2424 guix-daemon}). It can also be disabled temporarily by passing the
2425 @code{--no-substitutes} option to @command{guix package}, @command{guix
2426 build}, and other command-line tools.
2427
2428 @node Substitute Authentication
2429 @subsection Substitute Authentication
2430
2431 @cindex digital signatures
2432 Guix detects and raises an error when attempting to use a substitute
2433 that has been tampered with. Likewise, it ignores substitutes that are
2434 not signed, or that are not signed by one of the keys listed in the ACL.
2435
2436 There is one exception though: if an unauthorized server provides
2437 substitutes that are @emph{bit-for-bit identical} to those provided by
2438 an authorized server, then the unauthorized server becomes eligible for
2439 downloads. For example, assume we have chosen two substitute servers
2440 with this option:
2441
2442 @example
2443 --substitute-urls="https://a.example.org https://b.example.org"
2444 @end example
2445
2446 @noindent
2447 @cindex reproducible builds
2448 If the ACL contains only the key for @code{b.example.org}, and if
2449 @code{a.example.org} happens to serve the @emph{exact same} substitutes,
2450 then Guix will download substitutes from @code{a.example.org} because it
2451 comes first in the list and can be considered a mirror of
2452 @code{b.example.org}. In practice, independent build machines usually
2453 produce the same binaries, thanks to bit-reproducible builds (see
2454 below).
2455
2456 When using HTTPS, the server's X.509 certificate is @emph{not} validated
2457 (in other words, the server is not authenticated), contrary to what
2458 HTTPS clients such as Web browsers usually do. This is because Guix
2459 authenticates substitute information itself, as explained above, which
2460 is what we care about (whereas X.509 certificates are about
2461 authenticating bindings between domain names and public keys.)
2462
2463 @node Proxy Settings
2464 @subsection Proxy Settings
2465
2466 @vindex http_proxy
2467 Substitutes are downloaded over HTTP or HTTPS.
2468 The @code{http_proxy} environment
2469 variable can be set in the environment of @command{guix-daemon} and is
2470 honored for downloads of substitutes. Note that the value of
2471 @code{http_proxy} in the environment where @command{guix build},
2472 @command{guix package}, and other client commands are run has
2473 @emph{absolutely no effect}.
2474
2475 @node Substitution Failure
2476 @subsection Substitution Failure
2477
2478 Even when a substitute for a derivation is available, sometimes the
2479 substitution attempt will fail. This can happen for a variety of
2480 reasons: the substitute server might be offline, the substitute may
2481 recently have been deleted, the connection might have been interrupted,
2482 etc.
2483
2484 When substitutes are enabled and a substitute for a derivation is
2485 available, but the substitution attempt fails, Guix will attempt to
2486 build the derivation locally depending on whether or not
2487 @code{--fallback} was given (@pxref{fallback-option,, common build
2488 option @code{--fallback}}). Specifically, if @code{--fallback} was
2489 omitted, then no local build will be performed, and the derivation is
2490 considered to have failed. However, if @code{--fallback} was given,
2491 then Guix will attempt to build the derivation locally, and the success
2492 or failure of the derivation depends on the success or failure of the
2493 local build. Note that when substitutes are disabled or no substitute
2494 is available for the derivation in question, a local build will
2495 @emph{always} be performed, regardless of whether or not
2496 @code{--fallback} was given.
2497
2498 To get an idea of how many substitutes are available right now, you can
2499 try running the @command{guix weather} command (@pxref{Invoking guix
2500 weather}). This command provides statistics on the substitutes provided
2501 by a server.
2502
2503 @node On Trusting Binaries
2504 @subsection On Trusting Binaries
2505
2506 @cindex trust, of pre-built binaries
2507 Today, each individual's control over their own computing is at the
2508 mercy of institutions, corporations, and groups with enough power and
2509 determination to subvert the computing infrastructure and exploit its
2510 weaknesses. While using @code{hydra.gnu.org} substitutes can be
2511 convenient, we encourage users to also build on their own, or even run
2512 their own build farm, such that @code{hydra.gnu.org} is less of an
2513 interesting target. One way to help is by publishing the software you
2514 build using @command{guix publish} so that others have one more choice
2515 of server to download substitutes from (@pxref{Invoking guix publish}).
2516
2517 Guix has the foundations to maximize build reproducibility
2518 (@pxref{Features}). In most cases, independent builds of a given
2519 package or derivation should yield bit-identical results. Thus, through
2520 a diverse set of independent package builds, we can strengthen the
2521 integrity of our systems. The @command{guix challenge} command aims to
2522 help users assess substitute servers, and to assist developers in
2523 finding out about non-deterministic package builds (@pxref{Invoking guix
2524 challenge}). Similarly, the @option{--check} option of @command{guix
2525 build} allows users to check whether previously-installed substitutes
2526 are genuine by rebuilding them locally (@pxref{build-check,
2527 @command{guix build --check}}).
2528
2529 In the future, we want Guix to have support to publish and retrieve
2530 binaries to/from other users, in a peer-to-peer fashion. If you would
2531 like to discuss this project, join us on @email{guix-devel@@gnu.org}.
2532
2533 @node Packages with Multiple Outputs
2534 @section Packages with Multiple Outputs
2535
2536 @cindex multiple-output packages
2537 @cindex package outputs
2538 @cindex outputs
2539
2540 Often, packages defined in Guix have a single @dfn{output}---i.e., the
2541 source package leads to exactly one directory in the store. When running
2542 @command{guix package -i glibc}, one installs the default output of the
2543 GNU libc package; the default output is called @code{out}, but its name
2544 can be omitted as shown in this command. In this particular case, the
2545 default output of @code{glibc} contains all the C header files, shared
2546 libraries, static libraries, Info documentation, and other supporting
2547 files.
2548
2549 Sometimes it is more appropriate to separate the various types of files
2550 produced from a single source package into separate outputs. For
2551 instance, the GLib C library (used by GTK+ and related packages)
2552 installs more than 20 MiB of reference documentation as HTML pages.
2553 To save space for users who do not need it, the documentation goes to a
2554 separate output, called @code{doc}. To install the main GLib output,
2555 which contains everything but the documentation, one would run:
2556
2557 @example
2558 guix package -i glib
2559 @end example
2560
2561 @cindex documentation
2562 The command to install its documentation is:
2563
2564 @example
2565 guix package -i glib:doc
2566 @end example
2567
2568 Some packages install programs with different ``dependency footprints''.
2569 For instance, the WordNet package installs both command-line tools and
2570 graphical user interfaces (GUIs). The former depend solely on the C
2571 library, whereas the latter depend on Tcl/Tk and the underlying X
2572 libraries. In this case, we leave the command-line tools in the default
2573 output, whereas the GUIs are in a separate output. This allows users
2574 who do not need the GUIs to save space. The @command{guix size} command
2575 can help find out about such situations (@pxref{Invoking guix size}).
2576 @command{guix graph} can also be helpful (@pxref{Invoking guix graph}).
2577
2578 There are several such multiple-output packages in the GNU distribution.
2579 Other conventional output names include @code{lib} for libraries and
2580 possibly header files, @code{bin} for stand-alone programs, and
2581 @code{debug} for debugging information (@pxref{Installing Debugging
2582 Files}). The outputs of a packages are listed in the third column of
2583 the output of @command{guix package --list-available} (@pxref{Invoking
2584 guix package}).
2585
2586
2587 @node Invoking guix gc
2588 @section Invoking @command{guix gc}
2589
2590 @cindex garbage collector
2591 @cindex disk space
2592 Packages that are installed, but not used, may be @dfn{garbage-collected}.
2593 The @command{guix gc} command allows users to explicitly run the garbage
2594 collector to reclaim space from the @file{/gnu/store} directory. It is
2595 the @emph{only} way to remove files from @file{/gnu/store}---removing
2596 files or directories manually may break it beyond repair!
2597
2598 @cindex GC roots
2599 @cindex garbage collector roots
2600 The garbage collector has a set of known @dfn{roots}: any file under
2601 @file{/gnu/store} reachable from a root is considered @dfn{live} and
2602 cannot be deleted; any other file is considered @dfn{dead} and may be
2603 deleted. The set of garbage collector roots (``GC roots'' for short)
2604 includes default user profiles; by default, the symlinks under
2605 @file{/var/guix/gcroots} represent these GC roots. New GC roots can be
2606 added with @command{guix build --root}, for example (@pxref{Invoking
2607 guix build}).
2608
2609 Prior to running @code{guix gc --collect-garbage} to make space, it is
2610 often useful to remove old generations from user profiles; that way, old
2611 package builds referenced by those generations can be reclaimed. This
2612 is achieved by running @code{guix package --delete-generations}
2613 (@pxref{Invoking guix package}).
2614
2615 Our recommendation is to run a garbage collection periodically, or when
2616 you are short on disk space. For instance, to guarantee that at least
2617 5@tie{}GB are available on your disk, simply run:
2618
2619 @example
2620 guix gc -F 5G
2621 @end example
2622
2623 It is perfectly safe to run as a non-interactive periodic job
2624 (@pxref{Scheduled Job Execution}, for how to set up such a job on
2625 GuixSD). Running @command{guix gc} with no arguments will collect as
2626 much garbage as it can, but that is often inconvenient: you may find
2627 yourself having to rebuild or re-download software that is ``dead'' from
2628 the GC viewpoint but that is necessary to build other pieces of
2629 software---e.g., the compiler tool chain.
2630
2631 The @command{guix gc} command has three modes of operation: it can be
2632 used to garbage-collect any dead files (the default), to delete specific
2633 files (the @code{--delete} option), to print garbage-collector
2634 information, or for more advanced queries. The garbage collection
2635 options are as follows:
2636
2637 @table @code
2638 @item --collect-garbage[=@var{min}]
2639 @itemx -C [@var{min}]
2640 Collect garbage---i.e., unreachable @file{/gnu/store} files and
2641 sub-directories. This is the default operation when no option is
2642 specified.
2643
2644 When @var{min} is given, stop once @var{min} bytes have been collected.
2645 @var{min} may be a number of bytes, or it may include a unit as a
2646 suffix, such as @code{MiB} for mebibytes and @code{GB} for gigabytes
2647 (@pxref{Block size, size specifications,, coreutils, GNU Coreutils}).
2648
2649 When @var{min} is omitted, collect all the garbage.
2650
2651 @item --free-space=@var{free}
2652 @itemx -F @var{free}
2653 Collect garbage until @var{free} space is available under
2654 @file{/gnu/store}, if possible; @var{free} denotes storage space, such
2655 as @code{500MiB}, as described above.
2656
2657 When @var{free} or more is already available in @file{/gnu/store}, do
2658 nothing and exit immediately.
2659
2660 @item --delete
2661 @itemx -d
2662 Attempt to delete all the store files and directories specified as
2663 arguments. This fails if some of the files are not in the store, or if
2664 they are still live.
2665
2666 @item --list-failures
2667 List store items corresponding to cached build failures.
2668
2669 This prints nothing unless the daemon was started with
2670 @option{--cache-failures} (@pxref{Invoking guix-daemon,
2671 @option{--cache-failures}}).
2672
2673 @item --clear-failures
2674 Remove the specified store items from the failed-build cache.
2675
2676 Again, this option only makes sense when the daemon is started with
2677 @option{--cache-failures}. Otherwise, it does nothing.
2678
2679 @item --list-dead
2680 Show the list of dead files and directories still present in the
2681 store---i.e., files and directories no longer reachable from any root.
2682
2683 @item --list-live
2684 Show the list of live store files and directories.
2685
2686 @end table
2687
2688 In addition, the references among existing store files can be queried:
2689
2690 @table @code
2691
2692 @item --references
2693 @itemx --referrers
2694 @cindex package dependencies
2695 List the references (respectively, the referrers) of store files given
2696 as arguments.
2697
2698 @item --requisites
2699 @itemx -R
2700 @cindex closure
2701 List the requisites of the store files passed as arguments. Requisites
2702 include the store files themselves, their references, and the references
2703 of these, recursively. In other words, the returned list is the
2704 @dfn{transitive closure} of the store files.
2705
2706 @xref{Invoking guix size}, for a tool to profile the size of the closure
2707 of an element. @xref{Invoking guix graph}, for a tool to visualize
2708 the graph of references.
2709
2710 @item --derivers
2711 @cindex derivation
2712 Return the derivation(s) leading to the given store items
2713 (@pxref{Derivations}).
2714
2715 For example, this command:
2716
2717 @example
2718 guix gc --derivers `guix package -I ^emacs$ | cut -f4`
2719 @end example
2720
2721 @noindent
2722 returns the @file{.drv} file(s) leading to the @code{emacs} package
2723 installed in your profile.
2724
2725 Note that there may be zero matching @file{.drv} files, for instance
2726 because these files have been garbage-collected. There can also be more
2727 than one matching @file{.drv} due to fixed-output derivations.
2728 @end table
2729
2730 Lastly, the following options allow you to check the integrity of the
2731 store and to control disk usage.
2732
2733 @table @option
2734
2735 @item --verify[=@var{options}]
2736 @cindex integrity, of the store
2737 @cindex integrity checking
2738 Verify the integrity of the store.
2739
2740 By default, make sure that all the store items marked as valid in the
2741 database of the daemon actually exist in @file{/gnu/store}.
2742
2743 When provided, @var{options} must be a comma-separated list containing one
2744 or more of @code{contents} and @code{repair}.
2745
2746 When passing @option{--verify=contents}, the daemon computes the
2747 content hash of each store item and compares it against its hash in the
2748 database. Hash mismatches are reported as data corruptions. Because it
2749 traverses @emph{all the files in the store}, this command can take a
2750 long time, especially on systems with a slow disk drive.
2751
2752 @cindex repairing the store
2753 @cindex corruption, recovering from
2754 Using @option{--verify=repair} or @option{--verify=contents,repair}
2755 causes the daemon to try to repair corrupt store items by fetching
2756 substitutes for them (@pxref{Substitutes}). Because repairing is not
2757 atomic, and thus potentially dangerous, it is available only to the
2758 system administrator. A lightweight alternative, when you know exactly
2759 which items in the store are corrupt, is @command{guix build --repair}
2760 (@pxref{Invoking guix build}).
2761
2762 @item --optimize
2763 @cindex deduplication
2764 Optimize the store by hard-linking identical files---this is
2765 @dfn{deduplication}.
2766
2767 The daemon performs deduplication after each successful build or archive
2768 import, unless it was started with @code{--disable-deduplication}
2769 (@pxref{Invoking guix-daemon, @code{--disable-deduplication}}). Thus,
2770 this option is primarily useful when the daemon was running with
2771 @code{--disable-deduplication}.
2772
2773 @end table
2774
2775 @node Invoking guix pull
2776 @section Invoking @command{guix pull}
2777
2778 @cindex upgrading Guix
2779 @cindex updating Guix
2780 @cindex @command{guix pull}
2781 @cindex pull
2782 Packages are installed or upgraded to the latest version available in
2783 the distribution currently available on your local machine. To update
2784 that distribution, along with the Guix tools, you must run @command{guix
2785 pull}: the command downloads the latest Guix source code and package
2786 descriptions, and deploys it. Source code is downloaded from a
2787 @uref{https://git-scm.com, Git} repository, by default the official
2788 GNU@tie{}Guix repository, though this can be customized.
2789
2790 On completion, @command{guix package} will use packages and package
2791 versions from this just-retrieved copy of Guix. Not only that, but all
2792 the Guix commands and Scheme modules will also be taken from that latest
2793 version. New @command{guix} sub-commands added by the update also
2794 become available.
2795
2796 Any user can update their Guix copy using @command{guix pull}, and the
2797 effect is limited to the user who run @command{guix pull}. For
2798 instance, when user @code{root} runs @command{guix pull}, this has no
2799 effect on the version of Guix that user @code{alice} sees, and vice
2800 versa.
2801
2802 The result of running @command{guix pull} is a @dfn{profile} available
2803 under @file{~/.config/guix/current} containing the latest Guix. Thus,
2804 make sure to add it to the beginning of your search path so that you use
2805 the latest version, and similarly for the Info manual
2806 (@pxref{Documentation}):
2807
2808 @example
2809 export PATH="$HOME/.config/guix/current/bin:$PATH"
2810 export INFOPATH="$HOME/.config/guix/current/share/info:$INFOPATH"
2811 @end example
2812
2813 The @code{--list-generations} or @code{-l} option lists past generations
2814 produced by @command{guix pull}, along with details about their provenance:
2815
2816 @example
2817 $ guix pull -l
2818 Generation 1 Jun 10 2018 00:18:18
2819 guix 65956ad
2820 repository URL: https://git.savannah.gnu.org/git/guix.git
2821 branch: origin/master
2822 commit: 65956ad3526ba09e1f7a40722c96c6ef7c0936fe
2823
2824 Generation 2 Jun 11 2018 11:02:49
2825 guix e0cc7f6
2826 repository URL: https://git.savannah.gnu.org/git/guix.git
2827 branch: origin/master
2828 commit: e0cc7f669bec22c37481dd03a7941c7d11a64f1d
2829 2 new packages: keepalived, libnfnetlink
2830 6 packages upgraded: emacs-nix-mode@@2.0.4,
2831 guile2.0-guix@@0.14.0-12.77a1aac, guix@@0.14.0-12.77a1aac,
2832 heimdal@@7.5.0, milkytracker@@1.02.00, nix@@2.0.4
2833
2834 Generation 3 Jun 13 2018 23:31:07 (current)
2835 guix 844cc1c
2836 repository URL: https://git.savannah.gnu.org/git/guix.git
2837 branch: origin/master
2838 commit: 844cc1c8f394f03b404c5bb3aee086922373490c
2839 28 new packages: emacs-helm-ls-git, emacs-helm-mu, @dots{}
2840 69 packages upgraded: borg@@1.1.6, cheese@@3.28.0, @dots{}
2841 @end example
2842
2843 @ref{Invoking guix describe, @command{guix describe}}, for other ways to
2844 describe the current status of Guix.
2845
2846 This @code{~/.config/guix/current} profile works like any other profile
2847 created by @command{guix package} (@pxref{Invoking guix package}). That
2848 is, you can list generations, roll back to the previous
2849 generation---i.e., the previous Guix---and so on:
2850
2851 @example
2852 $ guix package -p ~/.config/guix/current --roll-back
2853 switched from generation 3 to 2
2854 $ guix package -p ~/.config/guix/current --delete-generations=1
2855 deleting /var/guix/profiles/per-user/charlie/current-guix-1-link
2856 @end example
2857
2858 The @command{guix pull} command is usually invoked with no arguments,
2859 but it supports the following options:
2860
2861 @table @code
2862 @item --url=@var{url}
2863 @itemx --commit=@var{commit}
2864 @itemx --branch=@var{branch}
2865 Download code from the specified @var{url}, at the given @var{commit} (a valid
2866 Git commit ID represented as a hexadecimal string), or @var{branch}.
2867
2868 @cindex @file{channels.scm}, configuration file
2869 @cindex configuration file for channels
2870 These options are provided for convenience, but you can also specify your
2871 configuration in the @file{~/.config/guix/channels.scm} file or using the
2872 @option{--channels} option (see below).
2873
2874 @item --channels=@var{file}
2875 @itemx -C @var{file}
2876 Read the list of channels from @var{file} instead of
2877 @file{~/.config/guix/channels.scm}. @var{file} must contain Scheme code that
2878 evaluates to a list of channel objects. @xref{Channels}, for more
2879 information.
2880
2881 @item --list-generations[=@var{pattern}]
2882 @itemx -l [@var{pattern}]
2883 List all the generations of @file{~/.config/guix/current} or, if @var{pattern}
2884 is provided, the subset of generations that match @var{pattern}.
2885 The syntax of @var{pattern} is the same as with @code{guix package
2886 --list-generations} (@pxref{Invoking guix package}).
2887
2888 @ref{Invoking guix describe}, for a way to display information about the
2889 current generation only.
2890
2891 @item --profile=@var{profile}
2892 @itemx -p @var{profile}
2893 Use @var{profile} instead of @file{~/.config/guix/current}.
2894
2895 @item --dry-run
2896 @itemx -n
2897 Show which channel commit(s) would be used and what would be built or
2898 substituted but do not actually do it.
2899
2900 @item --verbose
2901 Produce verbose output, writing build logs to the standard error output.
2902
2903 @item --bootstrap
2904 Use the bootstrap Guile to build the latest Guix. This option is only
2905 useful to Guix developers.
2906 @end table
2907
2908 The @dfn{channel} mechanism allows you to instruct @command{guix pull} which
2909 repository and branch to pull from, as well as @emph{additional} repositories
2910 containing package modules that should be deployed. @xref{Channels}, for more
2911 information.
2912
2913 In addition, @command{guix pull} supports all the common build options
2914 (@pxref{Common Build Options}).
2915
2916 @node Channels
2917 @section Channels
2918
2919 @cindex channels
2920 @cindex @file{channels.scm}, configuration file
2921 @cindex configuration file for channels
2922 @cindex @command{guix pull}, configuration file
2923 @cindex configuration of @command{guix pull}
2924 Guix and its package collection are updated by running @command{guix pull}
2925 (@pxref{Invoking guix pull}). By default @command{guix pull} downloads and
2926 deploys Guix itself from the official GNU@tie{}Guix repository. This can be
2927 customized by defining @dfn{channels} in the
2928 @file{~/.config/guix/channels.scm} file. A channel specifies a URL and branch
2929 of a Git repository to be deployed, and @command{guix pull} can be instructed
2930 to pull from one or more channels. In other words, channels can be used to
2931 @emph{customize} and to @emph{extend} Guix, as we will see below.
2932
2933 @subsection Using a Custom Guix Channel
2934
2935 The channel called @code{guix} specifies where Guix itself---its command-line
2936 tools as well as its package collection---should be downloaded. For instance,
2937 suppose you want to update from your own copy of the Guix repository at
2938 @code{example.org}, and specifically the @code{super-hacks} branch, you can
2939 write in @code{~/.config/guix/channels.scm} this specification:
2940
2941 @lisp
2942 ;; Tell 'guix pull' to use my own repo.
2943 (list (channel
2944 (name 'guix)
2945 (url "https://example.org/my-guix.git")
2946 (branch "super-hacks")))
2947 @end lisp
2948
2949 @noindent
2950 From there on, @command{guix pull} will fetch code from the @code{super-hacks}
2951 branch of the repository at @code{example.org}.
2952
2953 @subsection Specifying Additional Channels
2954
2955 @cindex extending the package collection (channels)
2956 @cindex personal packages (channels)
2957 @cindex channels, for personal packages
2958 You can also specify @emph{additional channels} to pull from. Let's say you
2959 have a bunch of custom package variants or personal packages that you think
2960 would make little sense to contribute to the Guix project, but would like to
2961 have these packages transparently available to you at the command line. You
2962 would first write modules containing those package definitions (@pxref{Package
2963 Modules}), maintain them in a Git repository, and then you and anyone else can
2964 use it as an additional channel to get packages from. Neat, no?
2965
2966 @c What follows stems from discussions at
2967 @c <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=22629#134> as well as
2968 @c earlier discussions on guix-devel@gnu.org.
2969 @quotation Warning
2970 Before you, dear user, shout---``woow this is @emph{soooo coool}!''---and
2971 publish your personal channel to the world, we would like to share a few words
2972 of caution:
2973
2974 @itemize
2975 @item
2976 Before publishing a channel, please consider contributing your package
2977 definitions to Guix proper (@pxref{Contributing}). Guix as a project is open
2978 to free software of all sorts, and packages in Guix proper are readily
2979 available to all Guix users and benefit from the project's quality assurance
2980 process.
2981
2982 @item
2983 When you maintain package definitions outside Guix, we, Guix developers,
2984 consider that @emph{the compatibility burden is on you}. Remember that
2985 package modules and package definitions are just Scheme code that uses various
2986 programming interfaces (APIs). We want to remain free to change these APIs to
2987 keep improving Guix, possibly in ways that break your channel. We never
2988 change APIs gratuitously, but we will @emph{not} commit to freezing APIs
2989 either.
2990
2991 @item
2992 Corollary: if you're using an external channel and that channel breaks, please
2993 @emph{report the issue to the channel authors}, not to the Guix project.
2994 @end itemize
2995
2996 You've been warned! Having said this, we believe external channels are a
2997 practical way to exert your freedom to augment Guix' package collection and to
2998 share your improvements, which are basic tenets of
2999 @uref{https://www.gnu.org/philosophy/free-sw.html, free software}. Please
3000 email us at @email{guix-devel@@gnu.org} if you'd like to discuss this.
3001 @end quotation
3002
3003 Once you have a Git repository containing your own package modules, you can
3004 write @code{~/.config/guix/channels.scm} to instruct @command{guix pull} to
3005 pull from your personal channel @emph{in addition} to the default Guix
3006 channel(s):
3007
3008 @vindex %default-channels
3009 @lisp
3010 ;; Add my personal packages to those Guix provides.
3011 (cons (channel
3012 (name 'my-personal-packages)
3013 (url "https://example.org/personal-packages.git"))
3014 %default-channels)
3015 @end lisp
3016
3017 @noindent
3018 Note that the snippet above is (as always!) Scheme code; we use @code{cons} to
3019 add a channel the list of channels that the variable @code{%default-channels}
3020 is bound to (@pxref{Pairs, @code{cons} and lists,, guile, GNU Guile Reference
3021 Manual}). With this file in place, @command{guix pull} builds not only Guix
3022 but also the package modules from your own repository. The result in
3023 @file{~/.config/guix/current} is the union of Guix with your own package
3024 modules:
3025
3026 @example
3027 $ guix pull --list-generations
3028 @dots{}
3029 Generation 19 Aug 27 2018 16:20:48
3030 guix d894ab8
3031 repository URL: https://git.savannah.gnu.org/git/guix.git
3032 branch: master
3033 commit: d894ab8e9bfabcefa6c49d9ba2e834dd5a73a300
3034 my-personal-packages dd3df5e
3035 repository URL: https://example.org/personal-packages.git
3036 branch: master
3037 commit: dd3df5e2c8818760a8fc0bd699e55d3b69fef2bb
3038 11 new packages: my-gimp, my-emacs-with-cool-features, @dots{}
3039 4 packages upgraded: emacs-racket-mode@@0.0.2-2.1b78827, @dots{}
3040 @end example
3041
3042 @noindent
3043 The output of @command{guix pull} above shows that Generation@tie{}19 includes
3044 both Guix and packages from the @code{my-personal-packages} channel. Among
3045 the new and upgraded packages that are listed, some like @code{my-gimp} and
3046 @code{my-emacs-with-cool-features} might come from
3047 @code{my-personal-packages}, while others come from the Guix default channel.
3048
3049 @subsection Replicating Guix
3050
3051 @cindex pinning, channels
3052 @cindex replicating Guix
3053 @cindex reproducibility, of Guix
3054 The @command{guix pull --list-generations} output above shows precisely which
3055 commits were used to build this instance of Guix. We can thus replicate it,
3056 say, on another machine, by providing a channel specification in
3057 @file{~/.config/guix/channels.scm} that is ``pinned'' to these commits:
3058
3059 @lisp
3060 ;; Deploy specific commits of my channels of interest.
3061 (list (channel
3062 (name 'guix)
3063 (url "https://git.savannah.gnu.org/git/guix.git")
3064 (commit "d894ab8e9bfabcefa6c49d9ba2e834dd5a73a300"))
3065 (channel
3066 (name 'my-personal-packages)
3067 (url "https://example.org/personal-packages.git")
3068 (branch "dd3df5e2c8818760a8fc0bd699e55d3b69fef2bb")))
3069 @end lisp
3070
3071 The @command{guix describe --format=channels} command can even generate this
3072 list of channels directly (@pxref{Invoking guix describe}).
3073
3074 At this point the two machines run the @emph{exact same Guix}, with access to
3075 the @emph{exact same packages}. The output of @command{guix build gimp} on
3076 one machine will be exactly the same, bit for bit, as the output of the same
3077 command on the other machine. It also means both machines have access to all
3078 the source code of Guix and, transitively, to all the source code of every
3079 package it defines.
3080
3081 This gives you super powers, allowing you to track the provenance of binary
3082 artifacts with very fine grain, and to reproduce software environments at
3083 will---some sort of ``meta reproducibility'' capabilities, if you will.
3084 @xref{Inferiors}, for another way to take advantage of these super powers.
3085
3086 @node Inferiors
3087 @section Inferiors
3088
3089 @c TODO: Remove this once we're more confident about API stability.
3090 @quotation Note
3091 The functionality described here is a ``technology preview'' as of version
3092 @value{VERSION}. As such, the interface is subject to change.
3093 @end quotation
3094
3095 @cindex inferiors
3096 @cindex composition of Guix revisions
3097 Sometimes you might need to mix packages from the revision of Guix you're
3098 currently running with packages available in a different revision of Guix.
3099 Guix @dfn{inferiors} allow you to achieve that by composing different Guix
3100 revisions in arbitrary ways.
3101
3102 @cindex inferior packages
3103 Technically, an ``inferior'' is essentially a separate Guix process connected
3104 to your main Guix process through a REPL (@pxref{Invoking guix repl}). The
3105 @code{(guix inferior)} module allows you to create inferiors and to
3106 communicate with them. It also provides a high-level interface to browse and
3107 manipulate the packages that an inferior provides---@dfn{inferior packages}.
3108
3109 When combined with channels (@pxref{Channels}), inferiors provide a simple way
3110 to interact with a separate revision of Guix. For example, let's assume you
3111 want to install in your profile the current @code{guile} package, along with
3112 the @code{guile-json} as it existed in an older revision of Guix---perhaps
3113 because the newer @code{guile-json} has an incompatible API and you want to
3114 run your code against the old API@. To do that, you could write a manifest for
3115 use by @code{guix package --manifest} (@pxref{Invoking guix package}); in that
3116 manifest, you would create an inferior for that old Guix revision you care
3117 about, and you would look up the @code{guile-json} package in the inferior:
3118
3119 @lisp
3120 (use-modules (guix inferior) (guix channels)
3121 (srfi srfi-1)) ;for 'first'
3122
3123 (define channels
3124 ;; This is the old revision from which we want to
3125 ;; extract guile-json.
3126 (list (channel
3127 (name 'guix)
3128 (url "https://git.savannah.gnu.org/git/guix.git")
3129 (commit
3130 "65956ad3526ba09e1f7a40722c96c6ef7c0936fe"))))
3131
3132 (define inferior
3133 ;; An inferior representing the above revision.
3134 (inferior-for-channels channels))
3135
3136 ;; Now create a manifest with the current "guile" package
3137 ;; and the old "guile-json" package.
3138 (packages->manifest
3139 (list (first (lookup-inferior-packages inferior "guile-json"))
3140 (specification->package "guile")))
3141 @end lisp
3142
3143 On its first run, @command{guix package --manifest} might have to build the
3144 channel you specified before it can create the inferior; subsequent runs will
3145 be much faster because the Guix revision will be cached.
3146
3147 The @code{(guix inferior)} module provides the following procedures to open an
3148 inferior:
3149
3150 @deffn {Scheme Procedure} inferior-for-channels @var{channels} @
3151 [#:cache-directory] [#:ttl]
3152 Return an inferior for @var{channels}, a list of channels. Use the cache at
3153 @var{cache-directory}, where entries can be reclaimed after @var{ttl} seconds.
3154 This procedure opens a new connection to the build daemon.
3155
3156 As a side effect, this procedure may build or substitute binaries for
3157 @var{channels}, which can take time.
3158 @end deffn
3159
3160 @deffn {Scheme Procedure} open-inferior @var{directory} @
3161 [#:command "bin/guix"]
3162 Open the inferior Guix in @var{directory}, running
3163 @code{@var{directory}/@var{command} repl} or equivalent. Return @code{#f} if
3164 the inferior could not be launched.
3165 @end deffn
3166
3167 @cindex inferior packages
3168 The procedures listed below allow you to obtain and manipulate inferior
3169 packages.
3170
3171 @deffn {Scheme Procedure} inferior-packages @var{inferior}
3172 Return the list of packages known to @var{inferior}.
3173 @end deffn
3174
3175 @deffn {Scheme Procedure} lookup-inferior-packages @var{inferior} @var{name} @
3176 [@var{version}]
3177 Return the sorted list of inferior packages matching @var{name} in
3178 @var{inferior}, with highest version numbers first. If @var{version} is true,
3179 return only packages with a version number prefixed by @var{version}.
3180 @end deffn
3181
3182 @deffn {Scheme Procedure} inferior-package? @var{obj}
3183 Return true if @var{obj} is an inferior package.
3184 @end deffn
3185
3186 @deffn {Scheme Procedure} inferior-package-name @var{package}
3187 @deffnx {Scheme Procedure} inferior-package-version @var{package}
3188 @deffnx {Scheme Procedure} inferior-package-synopsis @var{package}
3189 @deffnx {Scheme Procedure} inferior-package-description @var{package}
3190 @deffnx {Scheme Procedure} inferior-package-home-page @var{package}
3191 @deffnx {Scheme Procedure} inferior-package-location @var{package}
3192 @deffnx {Scheme Procedure} inferior-package-inputs @var{package}
3193 @deffnx {Scheme Procedure} inferior-package-native-inputs @var{package}
3194 @deffnx {Scheme Procedure} inferior-package-propagated-inputs @var{package}
3195 @deffnx {Scheme Procedure} inferior-package-transitive-propagated-inputs @var{package}
3196 @deffnx {Scheme Procedure} inferior-package-native-search-paths @var{package}
3197 @deffnx {Scheme Procedure} inferior-package-transitive-native-search-paths @var{package}
3198 @deffnx {Scheme Procedure} inferior-package-search-paths @var{package}
3199 These procedures are the counterpart of package record accessors
3200 (@pxref{package Reference}). Most of them work by querying the inferior
3201 @var{package} comes from, so the inferior must still be live when you call
3202 these procedures.
3203 @end deffn
3204
3205 Inferior packages can be used transparently like any other package or
3206 file-like object in G-expressions (@pxref{G-Expressions}). They are also
3207 transparently handled by the @code{packages->manifest} procedure, which is
3208 commonly use in manifests (@pxref{Invoking guix package, the
3209 @option{--manifest} option of @command{guix package}}). Thus you can insert
3210 an inferior package pretty much anywhere you would insert a regular package:
3211 in manifests, in the @code{packages} field of your @code{operating-system}
3212 declaration, and so on.
3213
3214 @node Invoking guix describe
3215 @section Invoking @command{guix describe}
3216
3217 @cindex reproducibility
3218 @cindex replicating Guix
3219 Often you may want to answer questions like: ``Which revision of Guix am I
3220 using?'' or ``Which channels am I using?'' This is useful information in many
3221 situations: if you want to @emph{replicate} an environment on a different
3222 machine or user account, if you want to report a bug or to determine what
3223 change in the channels you are using caused it, or if you want to record your
3224 system state for reproducibility purposes. The @command{guix describe}
3225 command answers these questions.
3226
3227 When run from a @command{guix pull}ed @command{guix}, @command{guix describe}
3228 displays the channel(s) that it was built from, including their repository URL
3229 and commit IDs (@pxref{Channels}):
3230
3231 @example
3232 $ guix describe
3233 Generation 10 Sep 03 2018 17:32:44 (current)
3234 guix e0fa68c
3235 repository URL: https://git.savannah.gnu.org/git/guix.git
3236 branch: master
3237 commit: e0fa68c7718fffd33d81af415279d6ddb518f727
3238 @end example
3239
3240 If you're familiar with the Git version control system, this is similar in
3241 spirit to @command{git describe}; the output is also similar to that of
3242 @command{guix pull --list-generations}, but limited to the current generation
3243 (@pxref{Invoking guix pull, the @option{--list-generations} option}). Because
3244 the Git commit ID shown above unambiguously refers to a snapshot of Guix, this
3245 information is all it takes to describe the revision of Guix you're using, and
3246 also to replicate it.
3247
3248 To make it easier to replicate Guix, @command{guix describe} can also be asked
3249 to return a list of channels instead of the human-readable description above:
3250
3251 @example
3252 $ guix describe -f channels
3253 (list (channel
3254 (name 'guix)
3255 (url "https://git.savannah.gnu.org/git/guix.git")
3256 (commit
3257 "e0fa68c7718fffd33d81af415279d6ddb518f727")))
3258 @end example
3259
3260 @noindent
3261 You can save this to a file and feed it to @command{guix pull -C} on some
3262 other machine or at a later point in time, which will instantiate @emph{this
3263 exact Guix revision} (@pxref{Invoking guix pull, the @option{-C} option}).
3264 From there on, since you're able to deploy the same revision of Guix, you can
3265 just as well @emph{replicate a complete software environment}. We humbly
3266 think that this is @emph{awesome}, and we hope you'll like it too!
3267
3268 The details of the options supported by @command{guix describe} are as
3269 follows:
3270
3271 @table @code
3272 @item --format=@var{format}
3273 @itemx -f @var{format}
3274 Produce output in the specified @var{format}, one of:
3275
3276 @table @code
3277 @item human
3278 produce human-readable output;
3279 @item channels
3280 produce a list of channel specifications that can be passed to @command{guix
3281 pull -C} or installed as @file{~/.config/guix/channels.scm} (@pxref{Invoking
3282 guix pull});
3283 @item json
3284 @cindex JSON
3285 produce a list of channel specifications in JSON format;
3286 @item recutils
3287 produce a list of channel specifications in Recutils format.
3288 @end table
3289
3290 @item --profile=@var{profile}
3291 @itemx -p @var{profile}
3292 Display information about @var{profile}.
3293 @end table
3294
3295 @node Invoking guix pack
3296 @section Invoking @command{guix pack}
3297
3298 Occasionally you want to pass software to people who are not (yet!)
3299 lucky enough to be using Guix. You'd tell them to run @command{guix
3300 package -i @var{something}}, but that's not possible in this case. This
3301 is where @command{guix pack} comes in.
3302
3303 @quotation Note
3304 If you are looking for ways to exchange binaries among machines that
3305 already run Guix, @pxref{Invoking guix copy}, @ref{Invoking guix
3306 publish}, and @ref{Invoking guix archive}.
3307 @end quotation
3308
3309 @cindex pack
3310 @cindex bundle
3311 @cindex application bundle
3312 @cindex software bundle
3313 The @command{guix pack} command creates a shrink-wrapped @dfn{pack} or
3314 @dfn{software bundle}: it creates a tarball or some other archive
3315 containing the binaries of the software you're interested in, and all
3316 its dependencies. The resulting archive can be used on any machine that
3317 does not have Guix, and people can run the exact same binaries as those
3318 you have with Guix. The pack itself is created in a bit-reproducible
3319 fashion, so anyone can verify that it really contains the build results
3320 that you pretend to be shipping.
3321
3322 For example, to create a bundle containing Guile, Emacs, Geiser, and all
3323 their dependencies, you can run:
3324
3325 @example
3326 $ guix pack guile emacs geiser
3327 @dots{}
3328 /gnu/store/@dots{}-pack.tar.gz
3329 @end example
3330
3331 The result here is a tarball containing a @file{/gnu/store} directory
3332 with all the relevant packages. The resulting tarball contains a
3333 @dfn{profile} with the three packages of interest; the profile is the
3334 same as would be created by @command{guix package -i}. It is this
3335 mechanism that is used to create Guix's own standalone binary tarball
3336 (@pxref{Binary Installation}).
3337
3338 Users of this pack would have to run
3339 @file{/gnu/store/@dots{}-profile/bin/guile} to run Guile, which you may
3340 find inconvenient. To work around it, you can create, say, a
3341 @file{/opt/gnu/bin} symlink to the profile:
3342
3343 @example
3344 guix pack -S /opt/gnu/bin=bin guile emacs geiser
3345 @end example
3346
3347 @noindent
3348 That way, users can happily type @file{/opt/gnu/bin/guile} and enjoy.
3349
3350 @cindex relocatable binaries, with @command{guix pack}
3351 What if the recipient of your pack does not have root privileges on
3352 their machine, and thus cannot unpack it in the root file system? In
3353 that case, you will want to use the @code{--relocatable} option (see
3354 below). This option produces @dfn{relocatable binaries}, meaning they
3355 they can be placed anywhere in the file system hierarchy: in the example
3356 above, users can unpack your tarball in their home directory and
3357 directly run @file{./opt/gnu/bin/guile}.
3358
3359 @cindex Docker, build an image with guix pack
3360 Alternatively, you can produce a pack in the Docker image format using
3361 the following command:
3362
3363 @example
3364 guix pack -f docker guile emacs geiser
3365 @end example
3366
3367 @noindent
3368 The result is a tarball that can be passed to the @command{docker load}
3369 command. See the
3370 @uref{https://docs.docker.com/engine/reference/commandline/load/, Docker
3371 documentation} for more information.
3372
3373 @cindex Singularity, build an image with guix pack
3374 @cindex SquashFS, build an image with guix pack
3375 Yet another option is to produce a SquashFS image with the following
3376 command:
3377
3378 @example
3379 guix pack -f squashfs guile emacs geiser
3380 @end example
3381
3382 @noindent
3383 The result is a SquashFS file system image that can either be mounted or
3384 directly be used as a file system container image with the
3385 @uref{http://singularity.lbl.gov, Singularity container execution
3386 environment}, using commands like @command{singularity shell} or
3387 @command{singularity exec}.
3388
3389 Several command-line options allow you to customize your pack:
3390
3391 @table @code
3392 @item --format=@var{format}
3393 @itemx -f @var{format}
3394 Produce a pack in the given @var{format}.
3395
3396 The available formats are:
3397
3398 @table @code
3399 @item tarball
3400 This is the default format. It produces a tarball containing all the
3401 specified binaries and symlinks.
3402
3403 @item docker
3404 This produces a tarball that follows the
3405 @uref{https://github.com/docker/docker/blob/master/image/spec/v1.2.md,
3406 Docker Image Specification}.
3407
3408 @item squashfs
3409 This produces a SquashFS image containing all the specified binaries and
3410 symlinks, as well as empty mount points for virtual file systems like
3411 procfs.
3412 @end table
3413
3414 @item --relocatable
3415 @itemx -R
3416 Produce @dfn{relocatable binaries}---i.e., binaries that can be placed
3417 anywhere in the file system hierarchy and run from there. For example,
3418 if you create a pack containing Bash with:
3419
3420 @example
3421 guix pack -R -S /mybin=bin bash
3422 @end example
3423
3424 @noindent
3425 ... you can copy that pack to a machine that lacks Guix, and from your
3426 home directory as a normal user, run:
3427
3428 @example
3429 tar xf pack.tar.gz
3430 ./mybin/sh
3431 @end example
3432
3433 @noindent
3434 In that shell, if you type @code{ls /gnu/store}, you'll notice that
3435 @file{/gnu/store} shows up and contains all the dependencies of
3436 @code{bash}, even though the machine actually lacks @file{/gnu/store}
3437 altogether! That is probably the simplest way to deploy Guix-built
3438 software on a non-Guix machine.
3439
3440 There's a gotcha though: this technique relies on the @dfn{user
3441 namespace} feature of the kernel Linux, which allows unprivileged users
3442 to mount or change root. Old versions of Linux did not support it, and
3443 some GNU/Linux distributions turn it off; on these systems, programs
3444 from the pack @emph{will fail to run}, unless they are unpacked in the
3445 root file system.
3446
3447 @item --expression=@var{expr}
3448 @itemx -e @var{expr}
3449 Consider the package @var{expr} evaluates to.
3450
3451 This has the same purpose as the same-named option in @command{guix
3452 build} (@pxref{Additional Build Options, @code{--expression} in
3453 @command{guix build}}).
3454
3455 @item --manifest=@var{file}
3456 @itemx -m @var{file}
3457 Use the packages contained in the manifest object returned by the Scheme
3458 code in @var{file}.
3459
3460 This has a similar purpose as the same-named option in @command{guix
3461 package} (@pxref{profile-manifest, @option{--manifest}}) and uses the
3462 same manifest files. It allows you to define a collection of packages
3463 once and use it both for creating profiles and for creating archives
3464 for use on machines that do not have Guix installed. Note that you can
3465 specify @emph{either} a manifest file @emph{or} a list of packages,
3466 but not both.
3467
3468 @item --system=@var{system}
3469 @itemx -s @var{system}
3470 Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of
3471 the system type of the build host.
3472
3473 @item --target=@var{triplet}
3474 @cindex cross-compilation
3475 Cross-build for @var{triplet}, which must be a valid GNU triplet, such
3476 as @code{"mips64el-linux-gnu"} (@pxref{Specifying target triplets, GNU
3477 configuration triplets,, autoconf, Autoconf}).
3478
3479 @item --compression=@var{tool}
3480 @itemx -C @var{tool}
3481 Compress the resulting tarball using @var{tool}---one of @code{gzip},
3482 @code{bzip2}, @code{xz}, @code{lzip}, or @code{none} for no compression.
3483
3484 @item --symlink=@var{spec}
3485 @itemx -S @var{spec}
3486 Add the symlinks specified by @var{spec} to the pack. This option can
3487 appear several times.
3488
3489 @var{spec} has the form @code{@var{source}=@var{target}}, where
3490 @var{source} is the symlink that will be created and @var{target} is the
3491 symlink target.
3492
3493 For instance, @code{-S /opt/gnu/bin=bin} creates a @file{/opt/gnu/bin}
3494 symlink pointing to the @file{bin} sub-directory of the profile.
3495
3496 @item --localstatedir
3497 @itemx --profile-name=@var{name}
3498 Include the ``local state directory'', @file{/var/guix}, in the resulting
3499 pack, and notably the @file{/var/guix/profiles/per-user/root/@var{name}}
3500 profile---by default @var{name} is @code{guix-profile}, which corresponds to
3501 @file{~root/.guix-profile}.
3502
3503 @file{/var/guix} contains the store database (@pxref{The Store}) as well
3504 as garbage-collector roots (@pxref{Invoking guix gc}). Providing it in
3505 the pack means that the store is ``complete'' and manageable by Guix;
3506 not providing it pack means that the store is ``dead'': items cannot be
3507 added to it or removed from it after extraction of the pack.
3508
3509 One use case for this is the Guix self-contained binary tarball
3510 (@pxref{Binary Installation}).
3511
3512 @item --bootstrap
3513 Use the bootstrap binaries to build the pack. This option is only
3514 useful to Guix developers.
3515 @end table
3516
3517 In addition, @command{guix pack} supports all the common build options
3518 (@pxref{Common Build Options}) and all the package transformation
3519 options (@pxref{Package Transformation Options}).
3520
3521
3522 @node Invoking guix archive
3523 @section Invoking @command{guix archive}
3524
3525 @cindex @command{guix archive}
3526 @cindex archive
3527 The @command{guix archive} command allows users to @dfn{export} files
3528 from the store into a single archive, and to later @dfn{import} them on
3529 a machine that runs Guix.
3530 In particular, it allows store files to be transferred from one machine
3531 to the store on another machine.
3532
3533 @quotation Note
3534 If you're looking for a way to produce archives in a format suitable for
3535 tools other than Guix, @pxref{Invoking guix pack}.
3536 @end quotation
3537
3538 @cindex exporting store items
3539 To export store files as an archive to standard output, run:
3540
3541 @example
3542 guix archive --export @var{options} @var{specifications}...
3543 @end example
3544
3545 @var{specifications} may be either store file names or package
3546 specifications, as for @command{guix package} (@pxref{Invoking guix
3547 package}). For instance, the following command creates an archive
3548 containing the @code{gui} output of the @code{git} package and the main
3549 output of @code{emacs}:
3550
3551 @example
3552 guix archive --export git:gui /gnu/store/...-emacs-24.3 > great.nar
3553 @end example
3554
3555 If the specified packages are not built yet, @command{guix archive}
3556 automatically builds them. The build process may be controlled with the
3557 common build options (@pxref{Common Build Options}).
3558
3559 To transfer the @code{emacs} package to a machine connected over SSH,
3560 one would run:
3561
3562 @example
3563 guix archive --export -r emacs | ssh the-machine guix archive --import
3564 @end example
3565
3566 @noindent
3567 Similarly, a complete user profile may be transferred from one machine
3568 to another like this:
3569
3570 @example
3571 guix archive --export -r $(readlink -f ~/.guix-profile) | \
3572 ssh the-machine guix-archive --import
3573 @end example
3574
3575 @noindent
3576 However, note that, in both examples, all of @code{emacs} and the
3577 profile as well as all of their dependencies are transferred (due to
3578 @code{-r}), regardless of what is already available in the store on the
3579 target machine. The @code{--missing} option can help figure out which
3580 items are missing from the target store. The @command{guix copy}
3581 command simplifies and optimizes this whole process, so this is probably
3582 what you should use in this case (@pxref{Invoking guix copy}).
3583
3584 @cindex nar, archive format
3585 @cindex normalized archive (nar)
3586 Archives are stored in the ``normalized archive'' or ``nar'' format, which is
3587 comparable in spirit to `tar', but with differences
3588 that make it more appropriate for our purposes. First, rather than
3589 recording all Unix metadata for each file, the nar format only mentions
3590 the file type (regular, directory, or symbolic link); Unix permissions
3591 and owner/group are dismissed. Second, the order in which directory
3592 entries are stored always follows the order of file names according to
3593 the C locale collation order. This makes archive production fully
3594 deterministic.
3595
3596 When exporting, the daemon digitally signs the contents of the archive,
3597 and that digital signature is appended. When importing, the daemon
3598 verifies the signature and rejects the import in case of an invalid
3599 signature or if the signing key is not authorized.
3600 @c FIXME: Add xref to daemon doc about signatures.
3601
3602 The main options are:
3603
3604 @table @code
3605 @item --export
3606 Export the specified store files or packages (see below.) Write the
3607 resulting archive to the standard output.
3608
3609 Dependencies are @emph{not} included in the output, unless
3610 @code{--recursive} is passed.
3611
3612 @item -r
3613 @itemx --recursive
3614 When combined with @code{--export}, this instructs @command{guix
3615 archive} to include dependencies of the given items in the archive.
3616 Thus, the resulting archive is self-contained: it contains the closure
3617 of the exported store items.
3618
3619 @item --import
3620 Read an archive from the standard input, and import the files listed
3621 therein into the store. Abort if the archive has an invalid digital
3622 signature, or if it is signed by a public key not among the authorized
3623 keys (see @code{--authorize} below.)
3624
3625 @item --missing
3626 Read a list of store file names from the standard input, one per line,
3627 and write on the standard output the subset of these files missing from
3628 the store.
3629
3630 @item --generate-key[=@var{parameters}]
3631 @cindex signing, archives
3632 Generate a new key pair for the daemon. This is a prerequisite before
3633 archives can be exported with @code{--export}. Note that this operation
3634 usually takes time, because it needs to gather enough entropy to
3635 generate the key pair.
3636
3637 The generated key pair is typically stored under @file{/etc/guix}, in
3638 @file{signing-key.pub} (public key) and @file{signing-key.sec} (private
3639 key, which must be kept secret.) When @var{parameters} is omitted,
3640 an ECDSA key using the Ed25519 curve is generated, or, for Libgcrypt
3641 versions before 1.6.0, it is a 4096-bit RSA key.
3642 Alternatively, @var{parameters} can specify
3643 @code{genkey} parameters suitable for Libgcrypt (@pxref{General
3644 public-key related Functions, @code{gcry_pk_genkey},, gcrypt, The
3645 Libgcrypt Reference Manual}).
3646
3647 @item --authorize
3648 @cindex authorizing, archives
3649 Authorize imports signed by the public key passed on standard input.
3650 The public key must be in ``s-expression advanced format''---i.e., the
3651 same format as the @file{signing-key.pub} file.
3652
3653 The list of authorized keys is kept in the human-editable file
3654 @file{/etc/guix/acl}. The file contains
3655 @url{http://people.csail.mit.edu/rivest/Sexp.txt, ``advanced-format
3656 s-expressions''} and is structured as an access-control list in the
3657 @url{http://theworld.com/~cme/spki.txt, Simple Public-Key Infrastructure
3658 (SPKI)}.
3659
3660 @item --extract=@var{directory}
3661 @itemx -x @var{directory}
3662 Read a single-item archive as served by substitute servers
3663 (@pxref{Substitutes}) and extract it to @var{directory}. This is a
3664 low-level operation needed in only very narrow use cases; see below.
3665
3666 For example, the following command extracts the substitute for Emacs
3667 served by @code{hydra.gnu.org} to @file{/tmp/emacs}:
3668
3669 @example
3670 $ wget -O - \
3671 https://hydra.gnu.org/nar/@dots{}-emacs-24.5 \
3672 | bunzip2 | guix archive -x /tmp/emacs
3673 @end example
3674
3675 Single-item archives are different from multiple-item archives produced
3676 by @command{guix archive --export}; they contain a single store item,
3677 and they do @emph{not} embed a signature. Thus this operation does
3678 @emph{no} signature verification and its output should be considered
3679 unsafe.
3680
3681 The primary purpose of this operation is to facilitate inspection of
3682 archive contents coming from possibly untrusted substitute servers.
3683
3684 @end table
3685
3686 @c *********************************************************************
3687 @node Programming Interface
3688 @chapter Programming Interface
3689
3690 GNU Guix provides several Scheme programming interfaces (APIs) to
3691 define, build, and query packages. The first interface allows users to
3692 write high-level package definitions. These definitions refer to
3693 familiar packaging concepts, such as the name and version of a package,
3694 its build system, and its dependencies. These definitions can then be
3695 turned into concrete build actions.
3696
3697 Build actions are performed by the Guix daemon, on behalf of users. In a
3698 standard setup, the daemon has write access to the store---the
3699 @file{/gnu/store} directory---whereas users do not. The recommended
3700 setup also has the daemon perform builds in chroots, under a specific
3701 build users, to minimize interference with the rest of the system.
3702
3703 @cindex derivation
3704 Lower-level APIs are available to interact with the daemon and the
3705 store. To instruct the daemon to perform a build action, users actually
3706 provide it with a @dfn{derivation}. A derivation is a low-level
3707 representation of the build actions to be taken, and the environment in
3708 which they should occur---derivations are to package definitions what
3709 assembly is to C programs. The term ``derivation'' comes from the fact
3710 that build results @emph{derive} from them.
3711
3712 This chapter describes all these APIs in turn, starting from high-level
3713 package definitions.
3714
3715 @menu
3716 * Defining Packages:: Defining new packages.
3717 * Build Systems:: Specifying how packages are built.
3718 * The Store:: Manipulating the package store.
3719 * Derivations:: Low-level interface to package derivations.
3720 * The Store Monad:: Purely functional interface to the store.
3721 * G-Expressions:: Manipulating build expressions.
3722 * Invoking guix repl:: Fiddling with Guix interactively.
3723 @end menu
3724
3725 @node Defining Packages
3726 @section Defining Packages
3727
3728 The high-level interface to package definitions is implemented in the
3729 @code{(guix packages)} and @code{(guix build-system)} modules. As an
3730 example, the package definition, or @dfn{recipe}, for the GNU Hello
3731 package looks like this:
3732
3733 @example
3734 (define-module (gnu packages hello)
3735 #:use-module (guix packages)
3736 #:use-module (guix download)
3737 #:use-module (guix build-system gnu)
3738 #:use-module (guix licenses)
3739 #:use-module (gnu packages gawk))
3740
3741 (define-public hello
3742 (package
3743 (name "hello")
3744 (version "2.10")
3745 (source (origin
3746 (method url-fetch)
3747 (uri (string-append "mirror://gnu/hello/hello-" version
3748 ".tar.gz"))
3749 (sha256
3750 (base32
3751 "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
3752 (build-system gnu-build-system)
3753 (arguments '(#:configure-flags '("--enable-silent-rules")))
3754 (inputs `(("gawk" ,gawk)))
3755 (synopsis "Hello, GNU world: An example GNU package")
3756 (description "Guess what GNU Hello prints!")
3757 (home-page "http://www.gnu.org/software/hello/")
3758 (license gpl3+)))
3759 @end example
3760
3761 @noindent
3762 Without being a Scheme expert, the reader may have guessed the meaning
3763 of the various fields here. This expression binds the variable
3764 @code{hello} to a @code{<package>} object, which is essentially a record
3765 (@pxref{SRFI-9, Scheme records,, guile, GNU Guile Reference Manual}).
3766 This package object can be inspected using procedures found in the
3767 @code{(guix packages)} module; for instance, @code{(package-name hello)}
3768 returns---surprise!---@code{"hello"}.
3769
3770 With luck, you may be able to import part or all of the definition of
3771 the package you are interested in from another repository, using the
3772 @code{guix import} command (@pxref{Invoking guix import}).
3773
3774 In the example above, @var{hello} is defined in a module of its own,
3775 @code{(gnu packages hello)}. Technically, this is not strictly
3776 necessary, but it is convenient to do so: all the packages defined in
3777 modules under @code{(gnu packages @dots{})} are automatically known to
3778 the command-line tools (@pxref{Package Modules}).
3779
3780 There are a few points worth noting in the above package definition:
3781
3782 @itemize
3783 @item
3784 The @code{source} field of the package is an @code{<origin>} object
3785 (@pxref{origin Reference}, for the complete reference).
3786 Here, the @code{url-fetch} method from @code{(guix download)} is used,
3787 meaning that the source is a file to be downloaded over FTP or HTTP.
3788
3789 The @code{mirror://gnu} prefix instructs @code{url-fetch} to use one of
3790 the GNU mirrors defined in @code{(guix download)}.
3791
3792 The @code{sha256} field specifies the expected SHA256 hash of the file
3793 being downloaded. It is mandatory, and allows Guix to check the
3794 integrity of the file. The @code{(base32 @dots{})} form introduces the
3795 base32 representation of the hash. You can obtain this information with
3796 @code{guix download} (@pxref{Invoking guix download}) and @code{guix
3797 hash} (@pxref{Invoking guix hash}).
3798
3799 @cindex patches
3800 When needed, the @code{origin} form can also have a @code{patches} field
3801 listing patches to be applied, and a @code{snippet} field giving a
3802 Scheme expression to modify the source code.
3803
3804 @item
3805 @cindex GNU Build System
3806 The @code{build-system} field specifies the procedure to build the
3807 package (@pxref{Build Systems}). Here, @var{gnu-build-system}
3808 represents the familiar GNU Build System, where packages may be
3809 configured, built, and installed with the usual @code{./configure &&
3810 make && make check && make install} command sequence.
3811
3812 @item
3813 The @code{arguments} field specifies options for the build system
3814 (@pxref{Build Systems}). Here it is interpreted by
3815 @var{gnu-build-system} as a request run @file{configure} with the
3816 @code{--enable-silent-rules} flag.
3817
3818 @cindex quote
3819 @cindex quoting
3820 @findex '
3821 @findex quote
3822 What about these quote (@code{'}) characters? They are Scheme syntax to
3823 introduce a literal list; @code{'} is synonymous with @code{quote}.
3824 @xref{Expression Syntax, quoting,, guile, GNU Guile Reference Manual},
3825 for details. Here the value of the @code{arguments} field is a list of
3826 arguments passed to the build system down the road, as with @code{apply}
3827 (@pxref{Fly Evaluation, @code{apply},, guile, GNU Guile Reference
3828 Manual}).
3829
3830 The hash-colon (@code{#:}) sequence defines a Scheme @dfn{keyword}
3831 (@pxref{Keywords,,, guile, GNU Guile Reference Manual}), and
3832 @code{#:configure-flags} is a keyword used to pass a keyword argument
3833 to the build system (@pxref{Coding With Keywords,,, guile, GNU Guile
3834 Reference Manual}).
3835
3836 @item
3837 The @code{inputs} field specifies inputs to the build process---i.e.,
3838 build-time or run-time dependencies of the package. Here, we define an
3839 input called @code{"gawk"} whose value is that of the @var{gawk}
3840 variable; @var{gawk} is itself bound to a @code{<package>} object.
3841
3842 @cindex backquote (quasiquote)
3843 @findex `
3844 @findex quasiquote
3845 @cindex comma (unquote)
3846 @findex ,
3847 @findex unquote
3848 @findex ,@@
3849 @findex unquote-splicing
3850 Again, @code{`} (a backquote, synonymous with @code{quasiquote}) allows
3851 us to introduce a literal list in the @code{inputs} field, while
3852 @code{,} (a comma, synonymous with @code{unquote}) allows us to insert a
3853 value in that list (@pxref{Expression Syntax, unquote,, guile, GNU Guile
3854 Reference Manual}).
3855
3856 Note that GCC, Coreutils, Bash, and other essential tools do not need to
3857 be specified as inputs here. Instead, @var{gnu-build-system} takes care
3858 of ensuring that they are present (@pxref{Build Systems}).
3859
3860 However, any other dependencies need to be specified in the
3861 @code{inputs} field. Any dependency not specified here will simply be
3862 unavailable to the build process, possibly leading to a build failure.
3863 @end itemize
3864
3865 @xref{package Reference}, for a full description of possible fields.
3866
3867 Once a package definition is in place, the
3868 package may actually be built using the @code{guix build} command-line
3869 tool (@pxref{Invoking guix build}), troubleshooting any build failures
3870 you encounter (@pxref{Debugging Build Failures}). You can easily jump back to the
3871 package definition using the @command{guix edit} command
3872 (@pxref{Invoking guix edit}).
3873 @xref{Packaging Guidelines}, for
3874 more information on how to test package definitions, and
3875 @ref{Invoking guix lint}, for information on how to check a definition
3876 for style conformance.
3877 @vindex GUIX_PACKAGE_PATH
3878 Lastly, @pxref{Channels}, for information
3879 on how to extend the distribution by adding your own package definitions
3880 in a ``channel''.
3881
3882 Finally, updating the package definition to a new upstream version
3883 can be partly automated by the @command{guix refresh} command
3884 (@pxref{Invoking guix refresh}).
3885
3886 Behind the scenes, a derivation corresponding to the @code{<package>}
3887 object is first computed by the @code{package-derivation} procedure.
3888 That derivation is stored in a @code{.drv} file under @file{/gnu/store}.
3889 The build actions it prescribes may then be realized by using the
3890 @code{build-derivations} procedure (@pxref{The Store}).
3891
3892 @deffn {Scheme Procedure} package-derivation @var{store} @var{package} [@var{system}]
3893 Return the @code{<derivation>} object of @var{package} for @var{system}
3894 (@pxref{Derivations}).
3895
3896 @var{package} must be a valid @code{<package>} object, and @var{system}
3897 must be a string denoting the target system type---e.g.,
3898 @code{"x86_64-linux"} for an x86_64 Linux-based GNU system. @var{store}
3899 must be a connection to the daemon, which operates on the store
3900 (@pxref{The Store}).
3901 @end deffn
3902
3903 @noindent
3904 @cindex cross-compilation
3905 Similarly, it is possible to compute a derivation that cross-builds a
3906 package for some other system:
3907
3908 @deffn {Scheme Procedure} package-cross-derivation @var{store} @
3909 @var{package} @var{target} [@var{system}]
3910 Return the @code{<derivation>} object of @var{package} cross-built from
3911 @var{system} to @var{target}.
3912
3913 @var{target} must be a valid GNU triplet denoting the target hardware
3914 and operating system, such as @code{"mips64el-linux-gnu"}
3915 (@pxref{Configuration Names, GNU configuration triplets,, configure, GNU
3916 Configure and Build System}).
3917 @end deffn
3918
3919 @cindex package transformations
3920 @cindex input rewriting
3921 @cindex dependency tree rewriting
3922 Packages can be manipulated in arbitrary ways. An example of a useful
3923 transformation is @dfn{input rewriting}, whereby the dependency tree of
3924 a package is rewritten by replacing specific inputs by others:
3925
3926 @deffn {Scheme Procedure} package-input-rewriting @var{replacements} @
3927 [@var{rewrite-name}]
3928 Return a procedure that, when passed a package, replaces its direct and
3929 indirect dependencies (but not its implicit inputs) according to
3930 @var{replacements}. @var{replacements} is a list of package pairs; the
3931 first element of each pair is the package to replace, and the second one
3932 is the replacement.
3933
3934 Optionally, @var{rewrite-name} is a one-argument procedure that takes
3935 the name of a package and returns its new name after rewrite.
3936 @end deffn
3937
3938 @noindent
3939 Consider this example:
3940
3941 @example
3942 (define libressl-instead-of-openssl
3943 ;; This is a procedure to replace OPENSSL by LIBRESSL,
3944 ;; recursively.
3945 (package-input-rewriting `((,openssl . ,libressl))))
3946
3947 (define git-with-libressl
3948 (libressl-instead-of-openssl git))
3949 @end example
3950
3951 @noindent
3952 Here we first define a rewriting procedure that replaces @var{openssl}
3953 with @var{libressl}. Then we use it to define a @dfn{variant} of the
3954 @var{git} package that uses @var{libressl} instead of @var{openssl}.
3955 This is exactly what the @option{--with-input} command-line option does
3956 (@pxref{Package Transformation Options, @option{--with-input}}).
3957
3958 A more generic procedure to rewrite a package dependency graph is
3959 @code{package-mapping}: it supports arbitrary changes to nodes in the
3960 graph.
3961
3962 @deffn {Scheme Procedure} package-mapping @var{proc} [@var{cut?}]
3963 Return a procedure that, given a package, applies @var{proc} to all the packages
3964 depended on and returns the resulting package. The procedure stops recursion
3965 when @var{cut?} returns true for a given package.
3966 @end deffn
3967
3968 @menu
3969 * package Reference:: The package data type.
3970 * origin Reference:: The origin data type.
3971 @end menu
3972
3973
3974 @node package Reference
3975 @subsection @code{package} Reference
3976
3977 This section summarizes all the options available in @code{package}
3978 declarations (@pxref{Defining Packages}).
3979
3980 @deftp {Data Type} package
3981 This is the data type representing a package recipe.
3982
3983 @table @asis
3984 @item @code{name}
3985 The name of the package, as a string.
3986
3987 @item @code{version}
3988 The version of the package, as a string.
3989
3990 @item @code{source}
3991 An object telling how the source code for the package should be
3992 acquired. Most of the time, this is an @code{origin} object, which
3993 denotes a file fetched from the Internet (@pxref{origin Reference}). It
3994 can also be any other ``file-like'' object such as a @code{local-file},
3995 which denotes a file from the local file system (@pxref{G-Expressions,
3996 @code{local-file}}).
3997
3998 @item @code{build-system}
3999 The build system that should be used to build the package (@pxref{Build
4000 Systems}).
4001
4002 @item @code{arguments} (default: @code{'()})
4003 The arguments that should be passed to the build system. This is a
4004 list, typically containing sequential keyword-value pairs.
4005
4006 @item @code{inputs} (default: @code{'()})
4007 @itemx @code{native-inputs} (default: @code{'()})
4008 @itemx @code{propagated-inputs} (default: @code{'()})
4009 @cindex inputs, of packages
4010 These fields list dependencies of the package. Each one is a list of
4011 tuples, where each tuple has a label for the input (a string) as its
4012 first element, a package, origin, or derivation as its second element,
4013 and optionally the name of the output thereof that should be used, which
4014 defaults to @code{"out"} (@pxref{Packages with Multiple Outputs}, for
4015 more on package outputs). For example, the list below specifies three
4016 inputs:
4017
4018 @example
4019 `(("libffi" ,libffi)
4020 ("libunistring" ,libunistring)
4021 ("glib:bin" ,glib "bin")) ;the "bin" output of Glib
4022 @end example
4023
4024 @cindex cross compilation, package dependencies
4025 The distinction between @code{native-inputs} and @code{inputs} is
4026 necessary when considering cross-compilation. When cross-compiling,
4027 dependencies listed in @code{inputs} are built for the @emph{target}
4028 architecture; conversely, dependencies listed in @code{native-inputs}
4029 are built for the architecture of the @emph{build} machine.
4030
4031 @code{native-inputs} is typically used to list tools needed at
4032 build time, but not at run time, such as Autoconf, Automake, pkg-config,
4033 Gettext, or Bison. @command{guix lint} can report likely mistakes in
4034 this area (@pxref{Invoking guix lint}).
4035
4036 @anchor{package-propagated-inputs}
4037 Lastly, @code{propagated-inputs} is similar to @code{inputs}, but the
4038 specified packages will be automatically installed alongside the package
4039 they belong to (@pxref{package-cmd-propagated-inputs, @command{guix
4040 package}}, for information on how @command{guix package} deals with
4041 propagated inputs.)
4042
4043 For example this is necessary when a C/C++ library needs headers of
4044 another library to compile, or when a pkg-config file refers to another
4045 one @i{via} its @code{Requires} field.
4046
4047 Another example where @code{propagated-inputs} is useful is for languages
4048 that lack a facility to record the run-time search path akin to the
4049 @code{RUNPATH} of ELF files; this includes Guile, Python, Perl, and
4050 more. To ensure that libraries written in those languages can find
4051 library code they depend on at run time, run-time dependencies must be
4052 listed in @code{propagated-inputs} rather than @code{inputs}.
4053
4054 @item @code{self-native-input?} (default: @code{#f})
4055 This is a Boolean field telling whether the package should use itself as
4056 a native input when cross-compiling.
4057
4058 @item @code{outputs} (default: @code{'("out")})
4059 The list of output names of the package. @xref{Packages with Multiple
4060 Outputs}, for typical uses of additional outputs.
4061
4062 @item @code{native-search-paths} (default: @code{'()})
4063 @itemx @code{search-paths} (default: @code{'()})
4064 A list of @code{search-path-specification} objects describing
4065 search-path environment variables honored by the package.
4066
4067 @item @code{replacement} (default: @code{#f})
4068 This must be either @code{#f} or a package object that will be used as a
4069 @dfn{replacement} for this package. @xref{Security Updates, grafts},
4070 for details.
4071
4072 @item @code{synopsis}
4073 A one-line description of the package.
4074
4075 @item @code{description}
4076 A more elaborate description of the package.
4077
4078 @item @code{license}
4079 @cindex license, of packages
4080 The license of the package; a value from @code{(guix licenses)},
4081 or a list of such values.
4082
4083 @item @code{home-page}
4084 The URL to the home-page of the package, as a string.
4085
4086 @item @code{supported-systems} (default: @var{%supported-systems})
4087 The list of systems supported by the package, as strings of the form
4088 @code{architecture-kernel}, for example @code{"x86_64-linux"}.
4089
4090 @item @code{maintainers} (default: @code{'()})
4091 The list of maintainers of the package, as @code{maintainer} objects.
4092
4093 @item @code{location} (default: source location of the @code{package} form)
4094 The source location of the package. It is useful to override this when
4095 inheriting from another package, in which case this field is not
4096 automatically corrected.
4097 @end table
4098 @end deftp
4099
4100
4101 @node origin Reference
4102 @subsection @code{origin} Reference
4103
4104 This section summarizes all the options available in @code{origin}
4105 declarations (@pxref{Defining Packages}).
4106
4107 @deftp {Data Type} origin
4108 This is the data type representing a source code origin.
4109
4110 @table @asis
4111 @item @code{uri}
4112 An object containing the URI of the source. The object type depends on
4113 the @code{method} (see below). For example, when using the
4114 @var{url-fetch} method of @code{(guix download)}, the valid @code{uri}
4115 values are: a URL represented as a string, or a list thereof.
4116
4117 @item @code{method}
4118 A procedure that handles the URI.
4119
4120 Examples include:
4121
4122 @table @asis
4123 @item @var{url-fetch} from @code{(guix download)}
4124 download a file from the HTTP, HTTPS, or FTP URL specified in the
4125 @code{uri} field;
4126
4127 @vindex git-fetch
4128 @item @var{git-fetch} from @code{(guix git-download)}
4129 clone the Git version control repository, and check out the revision
4130 specified in the @code{uri} field as a @code{git-reference} object; a
4131 @code{git-reference} looks like this:
4132
4133 @example
4134 (git-reference
4135 (url "git://git.debian.org/git/pkg-shadow/shadow")
4136 (commit "v4.1.5.1"))
4137 @end example
4138 @end table
4139
4140 @item @code{sha256}
4141 A bytevector containing the SHA-256 hash of the source. Typically the
4142 @code{base32} form is used here to generate the bytevector from a
4143 base-32 string.
4144
4145 You can obtain this information using @code{guix download}
4146 (@pxref{Invoking guix download}) or @code{guix hash} (@pxref{Invoking
4147 guix hash}).
4148
4149 @item @code{file-name} (default: @code{#f})
4150 The file name under which the source code should be saved. When this is
4151 @code{#f}, a sensible default value will be used in most cases. In case
4152 the source is fetched from a URL, the file name from the URL will be
4153 used. For version control checkouts, it is recommended to provide the
4154 file name explicitly because the default is not very descriptive.
4155
4156 @item @code{patches} (default: @code{'()})
4157 A list of file names, origins, or file-like objects (@pxref{G-Expressions,
4158 file-like objects}) pointing to patches to be applied to the source.
4159
4160 This list of patches must be unconditional. In particular, it cannot
4161 depend on the value of @code{%current-system} or
4162 @code{%current-target-system}.
4163
4164 @item @code{snippet} (default: @code{#f})
4165 A G-expression (@pxref{G-Expressions}) or S-expression that will be run
4166 in the source directory. This is a convenient way to modify the source,
4167 sometimes more convenient than a patch.
4168
4169 @item @code{patch-flags} (default: @code{'("-p1")})
4170 A list of command-line flags that should be passed to the @code{patch}
4171 command.
4172
4173 @item @code{patch-inputs} (default: @code{#f})
4174 Input packages or derivations to the patching process. When this is
4175 @code{#f}, the usual set of inputs necessary for patching are provided,
4176 such as GNU@tie{}Patch.
4177
4178 @item @code{modules} (default: @code{'()})
4179 A list of Guile modules that should be loaded during the patching
4180 process and while running the code in the @code{snippet} field.
4181
4182 @item @code{patch-guile} (default: @code{#f})
4183 The Guile package that should be used in the patching process. When
4184 this is @code{#f}, a sensible default is used.
4185 @end table
4186 @end deftp
4187
4188
4189 @node Build Systems
4190 @section Build Systems
4191
4192 @cindex build system
4193 Each package definition specifies a @dfn{build system} and arguments for
4194 that build system (@pxref{Defining Packages}). This @code{build-system}
4195 field represents the build procedure of the package, as well as implicit
4196 dependencies of that build procedure.
4197
4198 Build systems are @code{<build-system>} objects. The interface to
4199 create and manipulate them is provided by the @code{(guix build-system)}
4200 module, and actual build systems are exported by specific modules.
4201
4202 @cindex bag (low-level package representation)
4203 Under the hood, build systems first compile package objects to
4204 @dfn{bags}. A @dfn{bag} is like a package, but with less
4205 ornamentation---in other words, a bag is a lower-level representation of
4206 a package, which includes all the inputs of that package, including some
4207 that were implicitly added by the build system. This intermediate
4208 representation is then compiled to a derivation (@pxref{Derivations}).
4209
4210 Build systems accept an optional list of @dfn{arguments}. In package
4211 definitions, these are passed @i{via} the @code{arguments} field
4212 (@pxref{Defining Packages}). They are typically keyword arguments
4213 (@pxref{Optional Arguments, keyword arguments in Guile,, guile, GNU
4214 Guile Reference Manual}). The value of these arguments is usually
4215 evaluated in the @dfn{build stratum}---i.e., by a Guile process launched
4216 by the daemon (@pxref{Derivations}).
4217
4218 The main build system is @var{gnu-build-system}, which implements the
4219 standard build procedure for GNU and many other packages. It
4220 is provided by the @code{(guix build-system gnu)} module.
4221
4222 @defvr {Scheme Variable} gnu-build-system
4223 @var{gnu-build-system} represents the GNU Build System, and variants
4224 thereof (@pxref{Configuration, configuration and makefile conventions,,
4225 standards, GNU Coding Standards}).
4226
4227 @cindex build phases
4228 In a nutshell, packages using it are configured, built, and installed with
4229 the usual @code{./configure && make && make check && make install}
4230 command sequence. In practice, a few additional steps are often needed.
4231 All these steps are split up in separate @dfn{phases},
4232 notably@footnote{Please see the @code{(guix build gnu-build-system)}
4233 modules for more details about the build phases.}:
4234
4235 @table @code
4236 @item unpack
4237 Unpack the source tarball, and change the current directory to the
4238 extracted source tree. If the source is actually a directory, copy it
4239 to the build tree, and enter that directory.
4240
4241 @item patch-source-shebangs
4242 Patch shebangs encountered in source files so they refer to the right
4243 store file names. For instance, this changes @code{#!/bin/sh} to
4244 @code{#!/gnu/store/@dots{}-bash-4.3/bin/sh}.
4245
4246 @item configure
4247 Run the @file{configure} script with a number of default options, such
4248 as @code{--prefix=/gnu/store/@dots{}}, as well as the options specified
4249 by the @code{#:configure-flags} argument.
4250
4251 @item build
4252 Run @code{make} with the list of flags specified with
4253 @code{#:make-flags}. If the @code{#:parallel-build?} argument is true
4254 (the default), build with @code{make -j}.
4255
4256 @item check
4257 Run @code{make check}, or some other target specified with
4258 @code{#:test-target}, unless @code{#:tests? #f} is passed. If the
4259 @code{#:parallel-tests?} argument is true (the default), run @code{make
4260 check -j}.
4261
4262 @item install
4263 Run @code{make install} with the flags listed in @code{#:make-flags}.
4264
4265 @item patch-shebangs
4266 Patch shebangs on the installed executable files.
4267
4268 @item strip
4269 Strip debugging symbols from ELF files (unless @code{#:strip-binaries?}
4270 is false), copying them to the @code{debug} output when available
4271 (@pxref{Installing Debugging Files}).
4272 @end table
4273
4274 @vindex %standard-phases
4275 The build-side module @code{(guix build gnu-build-system)} defines
4276 @var{%standard-phases} as the default list of build phases.
4277 @var{%standard-phases} is a list of symbol/procedure pairs, where the
4278 procedure implements the actual phase.
4279
4280 The list of phases used for a particular package can be changed with the
4281 @code{#:phases} parameter. For instance, passing:
4282
4283 @example
4284 #:phases (modify-phases %standard-phases (delete 'configure))
4285 @end example
4286
4287 means that all the phases described above will be used, except the
4288 @code{configure} phase.
4289
4290 In addition, this build system ensures that the ``standard'' environment
4291 for GNU packages is available. This includes tools such as GCC, libc,
4292 Coreutils, Bash, Make, Diffutils, grep, and sed (see the @code{(guix
4293 build-system gnu)} module for a complete list). We call these the
4294 @dfn{implicit inputs} of a package, because package definitions do not
4295 have to mention them.
4296 @end defvr
4297
4298 Other @code{<build-system>} objects are defined to support other
4299 conventions and tools used by free software packages. They inherit most
4300 of @var{gnu-build-system}, and differ mainly in the set of inputs
4301 implicitly added to the build process, and in the list of phases
4302 executed. Some of these build systems are listed below.
4303
4304 @defvr {Scheme Variable} ant-build-system
4305 This variable is exported by @code{(guix build-system ant)}. It
4306 implements the build procedure for Java packages that can be built with
4307 @url{http://ant.apache.org/, Ant build tool}.
4308
4309 It adds both @code{ant} and the @dfn{Java Development Kit} (JDK) as
4310 provided by the @code{icedtea} package to the set of inputs. Different
4311 packages can be specified with the @code{#:ant} and @code{#:jdk}
4312 parameters, respectively.
4313
4314 When the original package does not provide a suitable Ant build file,
4315 the parameter @code{#:jar-name} can be used to generate a minimal Ant
4316 build file @file{build.xml} with tasks to build the specified jar
4317 archive. In this case the parameter @code{#:source-dir} can be used to
4318 specify the source sub-directory, defaulting to ``src''.
4319
4320 The @code{#:main-class} parameter can be used with the minimal ant
4321 buildfile to specify the main class of the resulting jar. This makes the
4322 jar file executable. The @code{#:test-include} parameter can be used to
4323 specify the list of junit tests to run. It defaults to
4324 @code{(list "**/*Test.java")}. The @code{#:test-exclude} can be used to
4325 disable some tests. It defaults to @code{(list "**/Abstract*.java")},
4326 because abstract classes cannot be run as tests.
4327
4328 The parameter @code{#:build-target} can be used to specify the Ant task
4329 that should be run during the @code{build} phase. By default the
4330 ``jar'' task will be run.
4331
4332 @end defvr
4333
4334 @defvr {Scheme Variable} android-ndk-build-system
4335 @cindex Android distribution
4336 @cindex Android NDK build system
4337 This variable is exported by @code{(guix build-system android-ndk)}. It
4338 implements a build procedure for Android NDK (native development kit)
4339 packages using a Guix-specific build process.
4340
4341 The build system assumes that packages install their public interface
4342 (header) files to the subdirectory "include" of the "out" output and
4343 their libraries to the subdirectory "lib" of the "out" output.
4344
4345 It's also assumed that the union of all the dependencies of a package
4346 has no conflicting files.
4347
4348 For the time being, cross-compilation is not supported - so right now
4349 the libraries and header files are assumed to be host tools.
4350
4351 @end defvr
4352
4353 @defvr {Scheme Variable} asdf-build-system/source
4354 @defvrx {Scheme Variable} asdf-build-system/sbcl
4355 @defvrx {Scheme Variable} asdf-build-system/ecl
4356
4357 These variables, exported by @code{(guix build-system asdf)}, implement
4358 build procedures for Common Lisp packages using
4359 @url{https://common-lisp.net/project/asdf/, ``ASDF''}. ASDF is a system
4360 definition facility for Common Lisp programs and libraries.
4361
4362 The @code{asdf-build-system/source} system installs the packages in
4363 source form, and can be loaded using any common lisp implementation, via
4364 ASDF. The others, such as @code{asdf-build-system/sbcl}, install binary
4365 systems in the format which a particular implementation understands.
4366 These build systems can also be used to produce executable programs, or
4367 lisp images which contain a set of packages pre-loaded.
4368
4369 The build system uses naming conventions. For binary packages, the
4370 package name should be prefixed with the lisp implementation, such as
4371 @code{sbcl-} for @code{asdf-build-system/sbcl}.
4372
4373 Additionally, the corresponding source package should be labeled using
4374 the same convention as python packages (see @ref{Python Modules}), using
4375 the @code{cl-} prefix.
4376
4377 For binary packages, each system should be defined as a Guix package.
4378 If one package @code{origin} contains several systems, package variants
4379 can be created in order to build all the systems. Source packages,
4380 which use @code{asdf-build-system/source}, may contain several systems.
4381
4382 In order to create executable programs and images, the build-side
4383 procedures @code{build-program} and @code{build-image} can be used.
4384 They should be called in a build phase after the @code{create-symlinks}
4385 phase, so that the system which was just built can be used within the
4386 resulting image. @code{build-program} requires a list of Common Lisp
4387 expressions to be passed as the @code{#:entry-program} argument.
4388
4389 If the system is not defined within its own @code{.asd} file of the same
4390 name, then the @code{#:asd-file} parameter should be used to specify
4391 which file the system is defined in. Furthermore, if the package
4392 defines a system for its tests in a separate file, it will be loaded
4393 before the tests are run if it is specified by the
4394 @code{#:test-asd-file} parameter. If it is not set, the files
4395 @code{<system>-tests.asd}, @code{<system>-test.asd}, @code{tests.asd},
4396 and @code{test.asd} will be tried if they exist.
4397
4398 If for some reason the package must be named in a different way than the
4399 naming conventions suggest, the @code{#:asd-system-name} parameter can
4400 be used to specify the name of the system.
4401
4402 @end defvr
4403
4404 @defvr {Scheme Variable} cargo-build-system
4405 @cindex Rust programming language
4406 @cindex Cargo (Rust build system)
4407 This variable is exported by @code{(guix build-system cargo)}. It
4408 supports builds of packages using Cargo, the build tool of the
4409 @uref{https://www.rust-lang.org, Rust programming language}.
4410
4411 In its @code{configure} phase, this build system replaces dependencies
4412 specified in the @file{Carto.toml} file with inputs to the Guix package.
4413 The @code{install} phase installs the binaries, and it also installs the
4414 source code and @file{Cargo.toml} file.
4415 @end defvr
4416
4417 @cindex Clojure (programming language)
4418 @cindex simple Clojure build system
4419 @defvr {Scheme Variable} clojure-build-system
4420 This variable is exported by @code{(guix build-system clojure)}. It implements
4421 a simple build procedure for @uref{https://clojure.org/, Clojure} packages
4422 using plain old @code{compile} in Clojure. Cross-compilation is not supported
4423 yet.
4424
4425 It adds @code{clojure}, @code{icedtea} and @code{zip} to the set of inputs.
4426 Different packages can be specified with the @code{#:clojure}, @code{#:jdk} and
4427 @code{#:zip} parameters, respectively.
4428
4429 A list of source directories, test directories and jar names can be specified
4430 with the @code{#:source-dirs}, @code{#:test-dirs} and @code{#:jar-names}
4431 parameters, respectively. Compile directory and main class can be specified
4432 with the @code{#:compile-dir} and @code{#:main-class} parameters, respectively.
4433 Other parameters are documented below.
4434
4435 This build system is an extension of @var{ant-build-system}, but with the
4436 following phases changed:
4437
4438 @table @code
4439
4440 @item build
4441 This phase calls @code{compile} in Clojure to compile source files and runs
4442 @command{jar} to create jars from both source files and compiled files
4443 according to the include list and exclude list specified in
4444 @code{#:aot-include} and @code{#:aot-exclude}, respectively. The exclude list
4445 has priority over the include list. These lists consist of symbols
4446 representing Clojure libraries or the special keyword @code{#:all} representing
4447 all Clojure libraries found under the source directories. The parameter
4448 @code{#:omit-source?} decides if source should be included into the jars.
4449
4450 @item check
4451 This phase runs tests according to the include list and exclude list specified
4452 in @code{#:test-include} and @code{#:test-exclude}, respectively. Their
4453 meanings are analogous to that of @code{#:aot-include} and
4454 @code{#:aot-exclude}, except that the special keyword @code{#:all} now
4455 stands for all Clojure libraries found under the test directories. The
4456 parameter @code{#:tests?} decides if tests should be run.
4457
4458 @item install
4459 This phase installs all jars built previously.
4460 @end table
4461
4462 Apart from the above, this build system also contains an additional phase:
4463
4464 @table @code
4465
4466 @item install-doc
4467 This phase installs all top-level files with base name matching
4468 @var{%doc-regex}. A different regex can be specified with the
4469 @code{#:doc-regex} parameter. All files (recursively) inside the documentation
4470 directories specified in @code{#:doc-dirs} are installed as well.
4471 @end table
4472 @end defvr
4473
4474 @defvr {Scheme Variable} cmake-build-system
4475 This variable is exported by @code{(guix build-system cmake)}. It
4476 implements the build procedure for packages using the
4477 @url{http://www.cmake.org, CMake build tool}.
4478
4479 It automatically adds the @code{cmake} package to the set of inputs.
4480 Which package is used can be specified with the @code{#:cmake}
4481 parameter.
4482
4483 The @code{#:configure-flags} parameter is taken as a list of flags
4484 passed to the @command{cmake} command. The @code{#:build-type}
4485 parameter specifies in abstract terms the flags passed to the compiler;
4486 it defaults to @code{"RelWithDebInfo"} (short for ``release mode with
4487 debugging information''), which roughly means that code is compiled with
4488 @code{-O2 -g}, as is the case for Autoconf-based packages by default.
4489 @end defvr
4490
4491 @defvr {Scheme Variable} go-build-system
4492 This variable is exported by @code{(guix build-system go)}. It
4493 implements a build procedure for Go packages using the standard
4494 @url{https://golang.org/cmd/go/#hdr-Compile_packages_and_dependencies,
4495 Go build mechanisms}.
4496
4497 The user is expected to provide a value for the key @code{#:import-path}
4498 and, in some cases, @code{#:unpack-path}. The
4499 @url{https://golang.org/doc/code.html#ImportPaths, import path}
4500 corresponds to the file system path expected by the package's build
4501 scripts and any referring packages, and provides a unique way to
4502 refer to a Go package. It is typically based on a combination of the
4503 package source code's remote URI and file system hierarchy structure. In
4504 some cases, you will need to unpack the package's source code to a
4505 different directory structure than the one indicated by the import path,
4506 and @code{#:unpack-path} should be used in such cases.
4507
4508 Packages that provide Go libraries should be installed along with their
4509 source code. The key @code{#:install-source?}, which defaults to
4510 @code{#t}, controls whether or not the source code is installed. It can
4511 be set to @code{#f} for packages that only provide executable files.
4512 @end defvr
4513
4514 @defvr {Scheme Variable} glib-or-gtk-build-system
4515 This variable is exported by @code{(guix build-system glib-or-gtk)}. It
4516 is intended for use with packages making use of GLib or GTK+.
4517
4518 This build system adds the following two phases to the ones defined by
4519 @var{gnu-build-system}:
4520
4521 @table @code
4522 @item glib-or-gtk-wrap
4523 The phase @code{glib-or-gtk-wrap} ensures that programs in
4524 @file{bin/} are able to find GLib ``schemas'' and
4525 @uref{https://developer.gnome.org/gtk3/stable/gtk-running.html, GTK+
4526 modules}. This is achieved by wrapping the programs in launch scripts
4527 that appropriately set the @code{XDG_DATA_DIRS} and @code{GTK_PATH}
4528 environment variables.
4529
4530 It is possible to exclude specific package outputs from that wrapping
4531 process by listing their names in the
4532 @code{#:glib-or-gtk-wrap-excluded-outputs} parameter. This is useful
4533 when an output is known not to contain any GLib or GTK+ binaries, and
4534 where wrapping would gratuitously add a dependency of that output on
4535 GLib and GTK+.
4536
4537 @item glib-or-gtk-compile-schemas
4538 The phase @code{glib-or-gtk-compile-schemas} makes sure that all
4539 @uref{https://developer.gnome.org/gio/stable/glib-compile-schemas.html,
4540 GSettings schemas} of GLib are compiled. Compilation is performed by the
4541 @command{glib-compile-schemas} program. It is provided by the package
4542 @code{glib:bin} which is automatically imported by the build system.
4543 The @code{glib} package providing @command{glib-compile-schemas} can be
4544 specified with the @code{#:glib} parameter.
4545 @end table
4546
4547 Both phases are executed after the @code{install} phase.
4548 @end defvr
4549
4550 @defvr {Scheme Variable} guile-build-system
4551 This build system is for Guile packages that consist exclusively of Scheme
4552 code and that are so lean that they don't even have a makefile, let alone a
4553 @file{configure} script. It compiles Scheme code using @command{guild
4554 compile} (@pxref{Compilation,,, guile, GNU Guile Reference Manual}) and
4555 installs the @file{.scm} and @file{.go} files in the right place. It also
4556 installs documentation.
4557
4558 This build system supports cross-compilation by using the @code{--target}
4559 option of @command{guild compile}.
4560
4561 Packages built with @code{guile-build-system} must provide a Guile package in
4562 their @code{native-inputs} field.
4563 @end defvr
4564
4565 @defvr {Scheme Variable} minify-build-system
4566 This variable is exported by @code{(guix build-system minify)}. It
4567 implements a minification procedure for simple JavaScript packages.
4568
4569 It adds @code{uglify-js} to the set of inputs and uses it to compress
4570 all JavaScript files in the @file{src} directory. A different minifier
4571 package can be specified with the @code{#:uglify-js} parameter, but it
4572 is expected that the package writes the minified code to the standard
4573 output.
4574
4575 When the input JavaScript files are not all located in the @file{src}
4576 directory, the parameter @code{#:javascript-files} can be used to
4577 specify a list of file names to feed to the minifier.
4578 @end defvr
4579
4580 @defvr {Scheme Variable} ocaml-build-system
4581 This variable is exported by @code{(guix build-system ocaml)}. It implements
4582 a build procedure for @uref{https://ocaml.org, OCaml} packages, which consists
4583 of choosing the correct set of commands to run for each package. OCaml
4584 packages can expect many different commands to be run. This build system will
4585 try some of them.
4586
4587 When the package has a @file{setup.ml} file present at the top-level, it will
4588 run @code{ocaml setup.ml -configure}, @code{ocaml setup.ml -build} and
4589 @code{ocaml setup.ml -install}. The build system will assume that this file
4590 was generated by @uref{http://oasis.forge.ocamlcore.org/, OASIS} and will take
4591 care of setting the prefix and enabling tests if they are not disabled. You
4592 can pass configure and build flags with the @code{#:configure-flags} and
4593 @code{#:build-flags}. The @code{#:test-flags} key can be passed to change the
4594 set of flags used to enable tests. The @code{#:use-make?} key can be used to
4595 bypass this system in the build and install phases.
4596
4597 When the package has a @file{configure} file, it is assumed that it is a
4598 hand-made configure script that requires a different argument format than
4599 in the @code{gnu-build-system}. You can add more flags with the
4600 @code{#:configure-flags} key.
4601
4602 When the package has a @file{Makefile} file (or @code{#:use-make?} is
4603 @code{#t}), it will be used and more flags can be passed to the build and
4604 install phases with the @code{#:make-flags} key.
4605
4606 Finally, some packages do not have these files and use a somewhat standard
4607 location for its build system. In that case, the build system will run
4608 @code{ocaml pkg/pkg.ml} or @code{ocaml pkg/build.ml} and take care of
4609 providing the path to the required findlib module. Additional flags can
4610 be passed via the @code{#:build-flags} key. Install is taken care of by
4611 @command{opam-installer}. In this case, the @code{opam} package must
4612 be added to the @code{native-inputs} field of the package definition.
4613
4614 Note that most OCaml packages assume they will be installed in the same
4615 directory as OCaml, which is not what we want in guix. In particular, they
4616 will install @file{.so} files in their module's directory, which is usually
4617 fine because it is in the OCaml compiler directory. In guix though, these
4618 libraries cannot be found and we use @code{CAML_LD_LIBRARY_PATH}. This
4619 variable points to @file{lib/ocaml/site-lib/stubslibs} and this is where
4620 @file{.so} libraries should be installed.
4621 @end defvr
4622
4623 @defvr {Scheme Variable} python-build-system
4624 This variable is exported by @code{(guix build-system python)}. It
4625 implements the more or less standard build procedure used by Python
4626 packages, which consists in running @code{python setup.py build} and
4627 then @code{python setup.py install --prefix=/gnu/store/@dots{}}.
4628
4629 For packages that install stand-alone Python programs under @code{bin/},
4630 it takes care of wrapping these programs so that their @code{PYTHONPATH}
4631 environment variable points to all the Python libraries they depend on.
4632
4633 Which Python package is used to perform the build can be specified with
4634 the @code{#:python} parameter. This is a useful way to force a package
4635 to be built for a specific version of the Python interpreter, which
4636 might be necessary if the package is only compatible with a single
4637 interpreter version.
4638
4639 By default guix calls @code{setup.py} under control of
4640 @code{setuptools}, much like @command{pip} does. Some packages are not
4641 compatible with setuptools (and pip), thus you can disable this by
4642 setting the @code{#:use-setuptools} parameter to @code{#f}.
4643 @end defvr
4644
4645 @defvr {Scheme Variable} perl-build-system
4646 This variable is exported by @code{(guix build-system perl)}. It
4647 implements the standard build procedure for Perl packages, which either
4648 consists in running @code{perl Build.PL --prefix=/gnu/store/@dots{}},
4649 followed by @code{Build} and @code{Build install}; or in running
4650 @code{perl Makefile.PL PREFIX=/gnu/store/@dots{}}, followed by
4651 @code{make} and @code{make install}, depending on which of
4652 @code{Build.PL} or @code{Makefile.PL} is present in the package
4653 distribution. Preference is given to the former if both @code{Build.PL}
4654 and @code{Makefile.PL} exist in the package distribution. This
4655 preference can be reversed by specifying @code{#t} for the
4656 @code{#:make-maker?} parameter.
4657
4658 The initial @code{perl Makefile.PL} or @code{perl Build.PL} invocation
4659 passes flags specified by the @code{#:make-maker-flags} or
4660 @code{#:module-build-flags} parameter, respectively.
4661
4662 Which Perl package is used can be specified with @code{#:perl}.
4663 @end defvr
4664
4665 @defvr {Scheme Variable} r-build-system
4666 This variable is exported by @code{(guix build-system r)}. It
4667 implements the build procedure used by @uref{http://r-project.org, R}
4668 packages, which essentially is little more than running @code{R CMD
4669 INSTALL --library=/gnu/store/@dots{}} in an environment where
4670 @code{R_LIBS_SITE} contains the paths to all R package inputs. Tests
4671 are run after installation using the R function
4672 @code{tools::testInstalledPackage}.
4673 @end defvr
4674
4675 @defvr {Scheme Variable} texlive-build-system
4676 This variable is exported by @code{(guix build-system texlive)}. It is
4677 used to build TeX packages in batch mode with a specified engine. The
4678 build system sets the @code{TEXINPUTS} variable to find all TeX source
4679 files in the inputs.
4680
4681 By default it runs @code{luatex} on all files ending on @code{ins}. A
4682 different engine and format can be specified with the
4683 @code{#:tex-format} argument. Different build targets can be specified
4684 with the @code{#:build-targets} argument, which expects a list of file
4685 names. The build system adds only @code{texlive-bin} and
4686 @code{texlive-latex-base} (both from @code{(gnu packages tex}) to the
4687 inputs. Both can be overridden with the arguments @code{#:texlive-bin}
4688 and @code{#:texlive-latex-base}, respectively.
4689
4690 The @code{#:tex-directory} parameter tells the build system where to
4691 install the built files under the texmf tree.
4692 @end defvr
4693
4694 @defvr {Scheme Variable} ruby-build-system
4695 This variable is exported by @code{(guix build-system ruby)}. It
4696 implements the RubyGems build procedure used by Ruby packages, which
4697 involves running @code{gem build} followed by @code{gem install}.
4698
4699 The @code{source} field of a package that uses this build system
4700 typically references a gem archive, since this is the format that Ruby
4701 developers use when releasing their software. The build system unpacks
4702 the gem archive, potentially patches the source, runs the test suite,
4703 repackages the gem, and installs it. Additionally, directories and
4704 tarballs may be referenced to allow building unreleased gems from Git or
4705 a traditional source release tarball.
4706
4707 Which Ruby package is used can be specified with the @code{#:ruby}
4708 parameter. A list of additional flags to be passed to the @command{gem}
4709 command can be specified with the @code{#:gem-flags} parameter.
4710 @end defvr
4711
4712 @defvr {Scheme Variable} waf-build-system
4713 This variable is exported by @code{(guix build-system waf)}. It
4714 implements a build procedure around the @code{waf} script. The common
4715 phases---@code{configure}, @code{build}, and @code{install}---are
4716 implemented by passing their names as arguments to the @code{waf}
4717 script.
4718
4719 The @code{waf} script is executed by the Python interpreter. Which
4720 Python package is used to run the script can be specified with the
4721 @code{#:python} parameter.
4722 @end defvr
4723
4724 @defvr {Scheme Variable} scons-build-system
4725 This variable is exported by @code{(guix build-system scons)}. It
4726 implements the build procedure used by the SCons software construction
4727 tool. This build system runs @code{scons} to build the package,
4728 @code{scons test} to run tests, and then @code{scons install} to install
4729 the package.
4730
4731 Additional flags to be passed to @code{scons} can be specified with the
4732 @code{#:scons-flags} parameter. The version of Python used to run SCons
4733 can be specified by selecting the appropriate SCons package with the
4734 @code{#:scons} parameter.
4735 @end defvr
4736
4737 @defvr {Scheme Variable} haskell-build-system
4738 This variable is exported by @code{(guix build-system haskell)}. It
4739 implements the Cabal build procedure used by Haskell packages, which
4740 involves running @code{runhaskell Setup.hs configure
4741 --prefix=/gnu/store/@dots{}} and @code{runhaskell Setup.hs build}.
4742 Instead of installing the package by running @code{runhaskell Setup.hs
4743 install}, to avoid trying to register libraries in the read-only
4744 compiler store directory, the build system uses @code{runhaskell
4745 Setup.hs copy}, followed by @code{runhaskell Setup.hs register}. In
4746 addition, the build system generates the package documentation by
4747 running @code{runhaskell Setup.hs haddock}, unless @code{#:haddock? #f}
4748 is passed. Optional Haddock parameters can be passed with the help of
4749 the @code{#:haddock-flags} parameter. If the file @code{Setup.hs} is
4750 not found, the build system looks for @code{Setup.lhs} instead.
4751
4752 Which Haskell compiler is used can be specified with the @code{#:haskell}
4753 parameter which defaults to @code{ghc}.
4754 @end defvr
4755
4756 @defvr {Scheme Variable} dub-build-system
4757 This variable is exported by @code{(guix build-system dub)}. It
4758 implements the Dub build procedure used by D packages, which
4759 involves running @code{dub build} and @code{dub run}.
4760 Installation is done by copying the files manually.
4761
4762 Which D compiler is used can be specified with the @code{#:ldc}
4763 parameter which defaults to @code{ldc}.
4764 @end defvr
4765
4766 @defvr {Scheme Variable} emacs-build-system
4767 This variable is exported by @code{(guix build-system emacs)}. It
4768 implements an installation procedure similar to the packaging system
4769 of Emacs itself (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
4770
4771 It first creates the @code{@var{package}-autoloads.el} file, then it
4772 byte compiles all Emacs Lisp files. Differently from the Emacs
4773 packaging system, the Info documentation files are moved to the standard
4774 documentation directory and the @file{dir} file is deleted. Each
4775 package is installed in its own directory under
4776 @file{share/emacs/site-lisp/guix.d}.
4777 @end defvr
4778
4779 @defvr {Scheme Variable} font-build-system
4780 This variable is exported by @code{(guix build-system font)}. It
4781 implements an installation procedure for font packages where upstream
4782 provides pre-compiled TrueType, OpenType, etc. font files that merely
4783 need to be copied into place. It copies font files to standard
4784 locations in the output directory.
4785 @end defvr
4786
4787 @defvr {Scheme Variable} meson-build-system
4788 This variable is exported by @code{(guix build-system meson)}. It
4789 implements the build procedure for packages that use
4790 @url{http://mesonbuild.com, Meson} as their build system.
4791
4792 It adds both Meson and @uref{https://ninja-build.org/, Ninja} to the set
4793 of inputs, and they can be changed with the parameters @code{#:meson}
4794 and @code{#:ninja} if needed. The default Meson is
4795 @code{meson-for-build}, which is special because it doesn't clear the
4796 @code{RUNPATH} of binaries and libraries when they are installed.
4797
4798 This build system is an extension of @var{gnu-build-system}, but with the
4799 following phases changed to some specific for Meson:
4800
4801 @table @code
4802
4803 @item configure
4804 The phase runs @code{meson} with the flags specified in
4805 @code{#:configure-flags}. The flag @code{--build-type} is always set to
4806 @code{plain} unless something else is specified in @code{#:build-type}.
4807
4808 @item build
4809 The phase runs @code{ninja} to build the package in parallel by default, but
4810 this can be changed with @code{#:parallel-build?}.
4811
4812 @item check
4813 The phase runs @code{ninja} with the target specified in @code{#:test-target},
4814 which is @code{"test"} by default.
4815
4816 @item install
4817 The phase runs @code{ninja install} and can not be changed.
4818 @end table
4819
4820 Apart from that, the build system also adds the following phases:
4821
4822 @table @code
4823
4824 @item fix-runpath
4825 This phase ensures that all binaries can find the libraries they need.
4826 It searches for required libraries in subdirectories of the package being
4827 built, and adds those to @code{RUNPATH} where needed. It also removes
4828 references to libraries left over from the build phase by
4829 @code{meson-for-build}, such as test dependencies, that aren't actually
4830 required for the program to run.
4831
4832 @item glib-or-gtk-wrap
4833 This phase is the phase provided by @code{glib-or-gtk-build-system}, and it
4834 is not enabled by default. It can be enabled with @code{#:glib-or-gtk?}.
4835
4836 @item glib-or-gtk-compile-schemas
4837 This phase is the phase provided by @code{glib-or-gtk-build-system}, and it
4838 is not enabled by default. It can be enabled with @code{#:glib-or-gtk?}.
4839 @end table
4840 @end defvr
4841
4842 Lastly, for packages that do not need anything as sophisticated, a
4843 ``trivial'' build system is provided. It is trivial in the sense that
4844 it provides basically no support: it does not pull any implicit inputs,
4845 and does not have a notion of build phases.
4846
4847 @defvr {Scheme Variable} trivial-build-system
4848 This variable is exported by @code{(guix build-system trivial)}.
4849
4850 This build system requires a @code{#:builder} argument. This argument
4851 must be a Scheme expression that builds the package output(s)---as
4852 with @code{build-expression->derivation} (@pxref{Derivations,
4853 @code{build-expression->derivation}}).
4854 @end defvr
4855
4856 @node The Store
4857 @section The Store
4858
4859 @cindex store
4860 @cindex store items
4861 @cindex store paths
4862
4863 Conceptually, the @dfn{store} is the place where derivations that have
4864 been built successfully are stored---by default, @file{/gnu/store}.
4865 Sub-directories in the store are referred to as @dfn{store items} or
4866 sometimes @dfn{store paths}. The store has an associated database that
4867 contains information such as the store paths referred to by each store
4868 path, and the list of @emph{valid} store items---results of successful
4869 builds. This database resides in @file{@var{localstatedir}/guix/db},
4870 where @var{localstatedir} is the state directory specified @i{via}
4871 @option{--localstatedir} at configure time, usually @file{/var}.
4872
4873 The store is @emph{always} accessed by the daemon on behalf of its clients
4874 (@pxref{Invoking guix-daemon}). To manipulate the store, clients
4875 connect to the daemon over a Unix-domain socket, send requests to it,
4876 and read the result---these are remote procedure calls, or RPCs.
4877
4878 @quotation Note
4879 Users must @emph{never} modify files under @file{/gnu/store} directly.
4880 This would lead to inconsistencies and break the immutability
4881 assumptions of Guix's functional model (@pxref{Introduction}).
4882
4883 @xref{Invoking guix gc, @command{guix gc --verify}}, for information on
4884 how to check the integrity of the store and attempt recovery from
4885 accidental modifications.
4886 @end quotation
4887
4888 The @code{(guix store)} module provides procedures to connect to the
4889 daemon, and to perform RPCs. These are described below. By default,
4890 @code{open-connection}, and thus all the @command{guix} commands,
4891 connect to the local daemon or to the URI specified by the
4892 @code{GUIX_DAEMON_SOCKET} environment variable.
4893
4894 @defvr {Environment Variable} GUIX_DAEMON_SOCKET
4895 When set, the value of this variable should be a file name or a URI
4896 designating the daemon endpoint. When it is a file name, it denotes a
4897 Unix-domain socket to connect to. In addition to file names, the
4898 supported URI schemes are:
4899
4900 @table @code
4901 @item file
4902 @itemx unix
4903 These are for Unix-domain sockets.
4904 @code{file:///var/guix/daemon-socket/socket} is equivalent to
4905 @file{/var/guix/daemon-socket/socket}.
4906
4907 @item guix
4908 @cindex daemon, remote access
4909 @cindex remote access to the daemon
4910 @cindex daemon, cluster setup
4911 @cindex clusters, daemon setup
4912 These URIs denote connections over TCP/IP, without encryption nor
4913 authentication of the remote host. The URI must specify the host name
4914 and optionally a port number (by default port 44146 is used):
4915
4916 @example
4917 guix://master.guix.example.org:1234
4918 @end example
4919
4920 This setup is suitable on local networks, such as clusters, where only
4921 trusted nodes may connect to the build daemon at
4922 @code{master.guix.example.org}.
4923
4924 The @code{--listen} option of @command{guix-daemon} can be used to
4925 instruct it to listen for TCP connections (@pxref{Invoking guix-daemon,
4926 @code{--listen}}).
4927
4928 @item ssh
4929 @cindex SSH access to build daemons
4930 These URIs allow you to connect to a remote daemon over
4931 SSH@footnote{This feature requires Guile-SSH (@pxref{Requirements}).}.
4932 A typical URL might look like this:
4933
4934 @example
4935 ssh://charlie@@guix.example.org:22
4936 @end example
4937
4938 As for @command{guix copy}, the usual OpenSSH client configuration files
4939 are honored (@pxref{Invoking guix copy}).
4940 @end table
4941
4942 Additional URI schemes may be supported in the future.
4943
4944 @c XXX: Remove this note when the protocol incurs fewer round trips
4945 @c and when (guix derivations) no longer relies on file system access.
4946 @quotation Note
4947 The ability to connect to remote build daemons is considered
4948 experimental as of @value{VERSION}. Please get in touch with us to
4949 share any problems or suggestions you may have (@pxref{Contributing}).
4950 @end quotation
4951 @end defvr
4952
4953 @deffn {Scheme Procedure} open-connection [@var{uri}] [#:reserve-space? #t]
4954 Connect to the daemon over the Unix-domain socket at @var{uri} (a string). When
4955 @var{reserve-space?} is true, instruct it to reserve a little bit of
4956 extra space on the file system so that the garbage collector can still
4957 operate should the disk become full. Return a server object.
4958
4959 @var{file} defaults to @var{%default-socket-path}, which is the normal
4960 location given the options that were passed to @command{configure}.
4961 @end deffn
4962
4963 @deffn {Scheme Procedure} close-connection @var{server}
4964 Close the connection to @var{server}.
4965 @end deffn
4966
4967 @defvr {Scheme Variable} current-build-output-port
4968 This variable is bound to a SRFI-39 parameter, which refers to the port
4969 where build and error logs sent by the daemon should be written.
4970 @end defvr
4971
4972 Procedures that make RPCs all take a server object as their first
4973 argument.
4974
4975 @deffn {Scheme Procedure} valid-path? @var{server} @var{path}
4976 @cindex invalid store items
4977 Return @code{#t} when @var{path} designates a valid store item and
4978 @code{#f} otherwise (an invalid item may exist on disk but still be
4979 invalid, for instance because it is the result of an aborted or failed
4980 build.)
4981
4982 A @code{&nix-protocol-error} condition is raised if @var{path} is not
4983 prefixed by the store directory (@file{/gnu/store}).
4984 @end deffn
4985
4986 @deffn {Scheme Procedure} add-text-to-store @var{server} @var{name} @var{text} [@var{references}]
4987 Add @var{text} under file @var{name} in the store, and return its store
4988 path. @var{references} is the list of store paths referred to by the
4989 resulting store path.
4990 @end deffn
4991
4992 @deffn {Scheme Procedure} build-derivations @var{server} @var{derivations}
4993 Build @var{derivations} (a list of @code{<derivation>} objects or
4994 derivation paths), and return when the worker is done building them.
4995 Return @code{#t} on success.
4996 @end deffn
4997
4998 Note that the @code{(guix monads)} module provides a monad as well as
4999 monadic versions of the above procedures, with the goal of making it
5000 more convenient to work with code that accesses the store (@pxref{The
5001 Store Monad}).
5002
5003 @c FIXME
5004 @i{This section is currently incomplete.}
5005
5006 @node Derivations
5007 @section Derivations
5008
5009 @cindex derivations
5010 Low-level build actions and the environment in which they are performed
5011 are represented by @dfn{derivations}. A derivation contains the
5012 following pieces of information:
5013
5014 @itemize
5015 @item
5016 The outputs of the derivation---derivations produce at least one file or
5017 directory in the store, but may produce more.
5018
5019 @item
5020 The inputs of the derivations, which may be other derivations or plain
5021 files in the store (patches, build scripts, etc.)
5022
5023 @item
5024 The system type targeted by the derivation---e.g., @code{x86_64-linux}.
5025
5026 @item
5027 The file name of a build script in the store, along with the arguments
5028 to be passed.
5029
5030 @item
5031 A list of environment variables to be defined.
5032
5033 @end itemize
5034
5035 @cindex derivation path
5036 Derivations allow clients of the daemon to communicate build actions to
5037 the store. They exist in two forms: as an in-memory representation,
5038 both on the client- and daemon-side, and as files in the store whose
5039 name end in @code{.drv}---these files are referred to as @dfn{derivation
5040 paths}. Derivations paths can be passed to the @code{build-derivations}
5041 procedure to perform the build actions they prescribe (@pxref{The
5042 Store}).
5043
5044 @cindex fixed-output derivations
5045 Operations such as file downloads and version-control checkouts for
5046 which the expected content hash is known in advance are modeled as
5047 @dfn{fixed-output derivations}. Unlike regular derivations, the outputs
5048 of a fixed-output derivation are independent of its inputs---e.g., a
5049 source code download produces the same result regardless of the download
5050 method and tools being used.
5051
5052 The @code{(guix derivations)} module provides a representation of
5053 derivations as Scheme objects, along with procedures to create and
5054 otherwise manipulate derivations. The lowest-level primitive to create
5055 a derivation is the @code{derivation} procedure:
5056
5057 @deffn {Scheme Procedure} derivation @var{store} @var{name} @var{builder} @
5058 @var{args} [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
5059 [#:recursive? #f] [#:inputs '()] [#:env-vars '()] @
5060 [#:system (%current-system)] [#:references-graphs #f] @
5061 [#:allowed-references #f] [#:disallowed-references #f] @
5062 [#:leaked-env-vars #f] [#:local-build? #f] @
5063 [#:substitutable? #t] [#:properties '()]
5064 Build a derivation with the given arguments, and return the resulting
5065 @code{<derivation>} object.
5066
5067 When @var{hash} and @var{hash-algo} are given, a
5068 @dfn{fixed-output derivation} is created---i.e., one whose result is
5069 known in advance, such as a file download. If, in addition,
5070 @var{recursive?} is true, then that fixed output may be an executable
5071 file or a directory and @var{hash} must be the hash of an archive
5072 containing this output.
5073
5074 When @var{references-graphs} is true, it must be a list of file
5075 name/store path pairs. In that case, the reference graph of each store
5076 path is exported in the build environment in the corresponding file, in
5077 a simple text format.
5078
5079 When @var{allowed-references} is true, it must be a list of store items
5080 or outputs that the derivation's output may refer to. Likewise,
5081 @var{disallowed-references}, if true, must be a list of things the
5082 outputs may @emph{not} refer to.
5083
5084 When @var{leaked-env-vars} is true, it must be a list of strings
5085 denoting environment variables that are allowed to ``leak'' from the
5086 daemon's environment to the build environment. This is only applicable
5087 to fixed-output derivations---i.e., when @var{hash} is true. The main
5088 use is to allow variables such as @code{http_proxy} to be passed to
5089 derivations that download files.
5090
5091 When @var{local-build?} is true, declare that the derivation is not a
5092 good candidate for offloading and should rather be built locally
5093 (@pxref{Daemon Offload Setup}). This is the case for small derivations
5094 where the costs of data transfers would outweigh the benefits.
5095
5096 When @var{substitutable?} is false, declare that substitutes of the
5097 derivation's output should not be used (@pxref{Substitutes}). This is
5098 useful, for instance, when building packages that capture details of the
5099 host CPU instruction set.
5100
5101 @var{properties} must be an association list describing ``properties'' of the
5102 derivation. It is kept as-is, uninterpreted, in the derivation.
5103 @end deffn
5104
5105 @noindent
5106 Here's an example with a shell script as its builder, assuming
5107 @var{store} is an open connection to the daemon, and @var{bash} points
5108 to a Bash executable in the store:
5109
5110 @lisp
5111 (use-modules (guix utils)
5112 (guix store)
5113 (guix derivations))
5114
5115 (let ((builder ; add the Bash script to the store
5116 (add-text-to-store store "my-builder.sh"
5117 "echo hello world > $out\n" '())))
5118 (derivation store "foo"
5119 bash `("-e" ,builder)
5120 #:inputs `((,bash) (,builder))
5121 #:env-vars '(("HOME" . "/homeless"))))
5122 @result{} #<derivation /gnu/store/@dots{}-foo.drv => /gnu/store/@dots{}-foo>
5123 @end lisp
5124
5125 As can be guessed, this primitive is cumbersome to use directly. A
5126 better approach is to write build scripts in Scheme, of course! The
5127 best course of action for that is to write the build code as a
5128 ``G-expression'', and to pass it to @code{gexp->derivation}. For more
5129 information, @pxref{G-Expressions}.
5130
5131 Once upon a time, @code{gexp->derivation} did not exist and constructing
5132 derivations with build code written in Scheme was achieved with
5133 @code{build-expression->derivation}, documented below. This procedure
5134 is now deprecated in favor of the much nicer @code{gexp->derivation}.
5135
5136 @deffn {Scheme Procedure} build-expression->derivation @var{store} @
5137 @var{name} @var{exp} @
5138 [#:system (%current-system)] [#:inputs '()] @
5139 [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
5140 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
5141 [#:references-graphs #f] [#:allowed-references #f] @
5142 [#:disallowed-references #f] @
5143 [#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
5144 Return a derivation that executes Scheme expression @var{exp} as a
5145 builder for derivation @var{name}. @var{inputs} must be a list of
5146 @code{(name drv-path sub-drv)} tuples; when @var{sub-drv} is omitted,
5147 @code{"out"} is assumed. @var{modules} is a list of names of Guile
5148 modules from the current search path to be copied in the store,
5149 compiled, and made available in the load path during the execution of
5150 @var{exp}---e.g., @code{((guix build utils) (guix build
5151 gnu-build-system))}.
5152
5153 @var{exp} is evaluated in an environment where @code{%outputs} is bound
5154 to a list of output/path pairs, and where @code{%build-inputs} is bound
5155 to a list of string/output-path pairs made from @var{inputs}.
5156 Optionally, @var{env-vars} is a list of string pairs specifying the name
5157 and value of environment variables visible to the builder. The builder
5158 terminates by passing the result of @var{exp} to @code{exit}; thus, when
5159 @var{exp} returns @code{#f}, the build is considered to have failed.
5160
5161 @var{exp} is built using @var{guile-for-build} (a derivation). When
5162 @var{guile-for-build} is omitted or is @code{#f}, the value of the
5163 @code{%guile-for-build} fluid is used instead.
5164
5165 See the @code{derivation} procedure for the meaning of
5166 @var{references-graphs}, @var{allowed-references},
5167 @var{disallowed-references}, @var{local-build?}, and
5168 @var{substitutable?}.
5169 @end deffn
5170
5171 @noindent
5172 Here's an example of a single-output derivation that creates a directory
5173 containing one file:
5174
5175 @lisp
5176 (let ((builder '(let ((out (assoc-ref %outputs "out")))
5177 (mkdir out) ; create /gnu/store/@dots{}-goo
5178 (call-with-output-file (string-append out "/test")
5179 (lambda (p)
5180 (display '(hello guix) p))))))
5181 (build-expression->derivation store "goo" builder))
5182
5183 @result{} #<derivation /gnu/store/@dots{}-goo.drv => @dots{}>
5184 @end lisp
5185
5186
5187 @node The Store Monad
5188 @section The Store Monad
5189
5190 @cindex monad
5191
5192 The procedures that operate on the store described in the previous
5193 sections all take an open connection to the build daemon as their first
5194 argument. Although the underlying model is functional, they either have
5195 side effects or depend on the current state of the store.
5196
5197 The former is inconvenient: the connection to the build daemon has to be
5198 carried around in all those functions, making it impossible to compose
5199 functions that do not take that parameter with functions that do. The
5200 latter can be problematic: since store operations have side effects
5201 and/or depend on external state, they have to be properly sequenced.
5202
5203 @cindex monadic values
5204 @cindex monadic functions
5205 This is where the @code{(guix monads)} module comes in. This module
5206 provides a framework for working with @dfn{monads}, and a particularly
5207 useful monad for our uses, the @dfn{store monad}. Monads are a
5208 construct that allows two things: associating ``context'' with values
5209 (in our case, the context is the store), and building sequences of
5210 computations (here computations include accesses to the store). Values
5211 in a monad---values that carry this additional context---are called
5212 @dfn{monadic values}; procedures that return such values are called
5213 @dfn{monadic procedures}.
5214
5215 Consider this ``normal'' procedure:
5216
5217 @example
5218 (define (sh-symlink store)
5219 ;; Return a derivation that symlinks the 'bash' executable.
5220 (let* ((drv (package-derivation store bash))
5221 (out (derivation->output-path drv))
5222 (sh (string-append out "/bin/bash")))
5223 (build-expression->derivation store "sh"
5224 `(symlink ,sh %output))))
5225 @end example
5226
5227 Using @code{(guix monads)} and @code{(guix gexp)}, it may be rewritten
5228 as a monadic function:
5229
5230 @example
5231 (define (sh-symlink)
5232 ;; Same, but return a monadic value.
5233 (mlet %store-monad ((drv (package->derivation bash)))
5234 (gexp->derivation "sh"
5235 #~(symlink (string-append #$drv "/bin/bash")
5236 #$output))))
5237 @end example
5238
5239 There are several things to note in the second version: the @code{store}
5240 parameter is now implicit and is ``threaded'' in the calls to the
5241 @code{package->derivation} and @code{gexp->derivation} monadic
5242 procedures, and the monadic value returned by @code{package->derivation}
5243 is @dfn{bound} using @code{mlet} instead of plain @code{let}.
5244
5245 As it turns out, the call to @code{package->derivation} can even be
5246 omitted since it will take place implicitly, as we will see later
5247 (@pxref{G-Expressions}):
5248
5249 @example
5250 (define (sh-symlink)
5251 (gexp->derivation "sh"
5252 #~(symlink (string-append #$bash "/bin/bash")
5253 #$output)))
5254 @end example
5255
5256 @c See
5257 @c <https://syntaxexclamation.wordpress.com/2014/06/26/escaping-continuations/>
5258 @c for the funny quote.
5259 Calling the monadic @code{sh-symlink} has no effect. As someone once
5260 said, ``you exit a monad like you exit a building on fire: by running''.
5261 So, to exit the monad and get the desired effect, one must use
5262 @code{run-with-store}:
5263
5264 @example
5265 (run-with-store (open-connection) (sh-symlink))
5266 @result{} /gnu/store/...-sh-symlink
5267 @end example
5268
5269 Note that the @code{(guix monad-repl)} module extends the Guile REPL with
5270 new ``meta-commands'' to make it easier to deal with monadic procedures:
5271 @code{run-in-store}, and @code{enter-store-monad}. The former is used
5272 to ``run'' a single monadic value through the store:
5273
5274 @example
5275 scheme@@(guile-user)> ,run-in-store (package->derivation hello)
5276 $1 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
5277 @end example
5278
5279 The latter enters a recursive REPL, where all the return values are
5280 automatically run through the store:
5281
5282 @example
5283 scheme@@(guile-user)> ,enter-store-monad
5284 store-monad@@(guile-user) [1]> (package->derivation hello)
5285 $2 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
5286 store-monad@@(guile-user) [1]> (text-file "foo" "Hello!")
5287 $3 = "/gnu/store/@dots{}-foo"
5288 store-monad@@(guile-user) [1]> ,q
5289 scheme@@(guile-user)>
5290 @end example
5291
5292 @noindent
5293 Note that non-monadic values cannot be returned in the
5294 @code{store-monad} REPL.
5295
5296 The main syntactic forms to deal with monads in general are provided by
5297 the @code{(guix monads)} module and are described below.
5298
5299 @deffn {Scheme Syntax} with-monad @var{monad} @var{body} ...
5300 Evaluate any @code{>>=} or @code{return} forms in @var{body} as being
5301 in @var{monad}.
5302 @end deffn
5303
5304 @deffn {Scheme Syntax} return @var{val}
5305 Return a monadic value that encapsulates @var{val}.
5306 @end deffn
5307
5308 @deffn {Scheme Syntax} >>= @var{mval} @var{mproc} ...
5309 @dfn{Bind} monadic value @var{mval}, passing its ``contents'' to monadic
5310 procedures @var{mproc}@dots{}@footnote{This operation is commonly
5311 referred to as ``bind'', but that name denotes an unrelated procedure in
5312 Guile. Thus we use this somewhat cryptic symbol inherited from the
5313 Haskell language.}. There can be one @var{mproc} or several of them, as
5314 in this example:
5315
5316 @example
5317 (run-with-state
5318 (with-monad %state-monad
5319 (>>= (return 1)
5320 (lambda (x) (return (+ 1 x)))
5321 (lambda (x) (return (* 2 x)))))
5322 'some-state)
5323
5324 @result{} 4
5325 @result{} some-state
5326 @end example
5327 @end deffn
5328
5329 @deffn {Scheme Syntax} mlet @var{monad} ((@var{var} @var{mval}) ...) @
5330 @var{body} ...
5331 @deffnx {Scheme Syntax} mlet* @var{monad} ((@var{var} @var{mval}) ...) @
5332 @var{body} ...
5333 Bind the variables @var{var} to the monadic values @var{mval} in
5334 @var{body}, which is a sequence of expressions. As with the bind
5335 operator, this can be thought of as ``unpacking'' the raw, non-monadic
5336 value ``contained'' in @var{mval} and making @var{var} refer to that
5337 raw, non-monadic value within the scope of the @var{body}. The form
5338 (@var{var} -> @var{val}) binds @var{var} to the ``normal'' value
5339 @var{val}, as per @code{let}. The binding operations occur in sequence
5340 from left to right. The last expression of @var{body} must be a monadic
5341 expression, and its result will become the result of the @code{mlet} or
5342 @code{mlet*} when run in the @var{monad}.
5343
5344 @code{mlet*} is to @code{mlet} what @code{let*} is to @code{let}
5345 (@pxref{Local Bindings,,, guile, GNU Guile Reference Manual}).
5346 @end deffn
5347
5348 @deffn {Scheme System} mbegin @var{monad} @var{mexp} ...
5349 Bind @var{mexp} and the following monadic expressions in sequence,
5350 returning the result of the last expression. Every expression in the
5351 sequence must be a monadic expression.
5352
5353 This is akin to @code{mlet}, except that the return values of the
5354 monadic expressions are ignored. In that sense, it is analogous to
5355 @code{begin}, but applied to monadic expressions.
5356 @end deffn
5357
5358 @deffn {Scheme System} mwhen @var{condition} @var{mexp0} @var{mexp*} ...
5359 When @var{condition} is true, evaluate the sequence of monadic
5360 expressions @var{mexp0}..@var{mexp*} as in an @code{mbegin}. When
5361 @var{condition} is false, return @code{*unspecified*} in the current
5362 monad. Every expression in the sequence must be a monadic expression.
5363 @end deffn
5364
5365 @deffn {Scheme System} munless @var{condition} @var{mexp0} @var{mexp*} ...
5366 When @var{condition} is false, evaluate the sequence of monadic
5367 expressions @var{mexp0}..@var{mexp*} as in an @code{mbegin}. When
5368 @var{condition} is true, return @code{*unspecified*} in the current
5369 monad. Every expression in the sequence must be a monadic expression.
5370 @end deffn
5371
5372 @cindex state monad
5373 The @code{(guix monads)} module provides the @dfn{state monad}, which
5374 allows an additional value---the state---to be @emph{threaded} through
5375 monadic procedure calls.
5376
5377 @defvr {Scheme Variable} %state-monad
5378 The state monad. Procedures in the state monad can access and change
5379 the state that is threaded.
5380
5381 Consider the example below. The @code{square} procedure returns a value
5382 in the state monad. It returns the square of its argument, but also
5383 increments the current state value:
5384
5385 @example
5386 (define (square x)
5387 (mlet %state-monad ((count (current-state)))
5388 (mbegin %state-monad
5389 (set-current-state (+ 1 count))
5390 (return (* x x)))))
5391
5392 (run-with-state (sequence %state-monad (map square (iota 3))) 0)
5393 @result{} (0 1 4)
5394 @result{} 3
5395 @end example
5396
5397 When ``run'' through @var{%state-monad}, we obtain that additional state
5398 value, which is the number of @code{square} calls.
5399 @end defvr
5400
5401 @deffn {Monadic Procedure} current-state
5402 Return the current state as a monadic value.
5403 @end deffn
5404
5405 @deffn {Monadic Procedure} set-current-state @var{value}
5406 Set the current state to @var{value} and return the previous state as a
5407 monadic value.
5408 @end deffn
5409
5410 @deffn {Monadic Procedure} state-push @var{value}
5411 Push @var{value} to the current state, which is assumed to be a list,
5412 and return the previous state as a monadic value.
5413 @end deffn
5414
5415 @deffn {Monadic Procedure} state-pop
5416 Pop a value from the current state and return it as a monadic value.
5417 The state is assumed to be a list.
5418 @end deffn
5419
5420 @deffn {Scheme Procedure} run-with-state @var{mval} [@var{state}]
5421 Run monadic value @var{mval} starting with @var{state} as the initial
5422 state. Return two values: the resulting value, and the resulting state.
5423 @end deffn
5424
5425 The main interface to the store monad, provided by the @code{(guix
5426 store)} module, is as follows.
5427
5428 @defvr {Scheme Variable} %store-monad
5429 The store monad---an alias for @var{%state-monad}.
5430
5431 Values in the store monad encapsulate accesses to the store. When its
5432 effect is needed, a value of the store monad must be ``evaluated'' by
5433 passing it to the @code{run-with-store} procedure (see below.)
5434 @end defvr
5435
5436 @deffn {Scheme Procedure} run-with-store @var{store} @var{mval} [#:guile-for-build] [#:system (%current-system)]
5437 Run @var{mval}, a monadic value in the store monad, in @var{store}, an
5438 open store connection.
5439 @end deffn
5440
5441 @deffn {Monadic Procedure} text-file @var{name} @var{text} [@var{references}]
5442 Return as a monadic value the absolute file name in the store of the file
5443 containing @var{text}, a string. @var{references} is a list of store items that the
5444 resulting text file refers to; it defaults to the empty list.
5445 @end deffn
5446
5447 @deffn {Monadic Procedure} binary-file @var{name} @var{data} [@var{references}]
5448 Return as a monadic value the absolute file name in the store of the file
5449 containing @var{data}, a bytevector. @var{references} is a list of store
5450 items that the resulting binary file refers to; it defaults to the empty list.
5451 @end deffn
5452
5453 @deffn {Monadic Procedure} interned-file @var{file} [@var{name}] @
5454 [#:recursive? #t] [#:select? (const #t)]
5455 Return the name of @var{file} once interned in the store. Use
5456 @var{name} as its store name, or the basename of @var{file} if
5457 @var{name} is omitted.
5458
5459 When @var{recursive?} is true, the contents of @var{file} are added
5460 recursively; if @var{file} designates a flat file and @var{recursive?}
5461 is true, its contents are added, and its permission bits are kept.
5462
5463 When @var{recursive?} is true, call @code{(@var{select?} @var{file}
5464 @var{stat})} for each directory entry, where @var{file} is the entry's
5465 absolute file name and @var{stat} is the result of @code{lstat}; exclude
5466 entries for which @var{select?} does not return true.
5467
5468 The example below adds a file to the store, under two different names:
5469
5470 @example
5471 (run-with-store (open-connection)
5472 (mlet %store-monad ((a (interned-file "README"))
5473 (b (interned-file "README" "LEGU-MIN")))
5474 (return (list a b))))
5475
5476 @result{} ("/gnu/store/rwm@dots{}-README" "/gnu/store/44i@dots{}-LEGU-MIN")
5477 @end example
5478
5479 @end deffn
5480
5481 The @code{(guix packages)} module exports the following package-related
5482 monadic procedures:
5483
5484 @deffn {Monadic Procedure} package-file @var{package} [@var{file}] @
5485 [#:system (%current-system)] [#:target #f] @
5486 [#:output "out"]
5487 Return as a monadic
5488 value in the absolute file name of @var{file} within the @var{output}
5489 directory of @var{package}. When @var{file} is omitted, return the name
5490 of the @var{output} directory of @var{package}. When @var{target} is
5491 true, use it as a cross-compilation target triplet.
5492 @end deffn
5493
5494 @deffn {Monadic Procedure} package->derivation @var{package} [@var{system}]
5495 @deffnx {Monadic Procedure} package->cross-derivation @var{package} @
5496 @var{target} [@var{system}]
5497 Monadic version of @code{package-derivation} and
5498 @code{package-cross-derivation} (@pxref{Defining Packages}).
5499 @end deffn
5500
5501
5502 @node G-Expressions
5503 @section G-Expressions
5504
5505 @cindex G-expression
5506 @cindex build code quoting
5507 So we have ``derivations'', which represent a sequence of build actions
5508 to be performed to produce an item in the store (@pxref{Derivations}).
5509 These build actions are performed when asking the daemon to actually
5510 build the derivations; they are run by the daemon in a container
5511 (@pxref{Invoking guix-daemon}).
5512
5513 @cindex strata of code
5514 It should come as no surprise that we like to write these build actions
5515 in Scheme. When we do that, we end up with two @dfn{strata} of Scheme
5516 code@footnote{The term @dfn{stratum} in this context was coined by
5517 Manuel Serrano et al.@: in the context of their work on Hop. Oleg
5518 Kiselyov, who has written insightful
5519 @url{http://okmij.org/ftp/meta-programming/#meta-scheme, essays and code
5520 on this topic}, refers to this kind of code generation as
5521 @dfn{staging}.}: the ``host code''---code that defines packages, talks
5522 to the daemon, etc.---and the ``build code''---code that actually
5523 performs build actions, such as making directories, invoking
5524 @command{make}, etc.
5525
5526 To describe a derivation and its build actions, one typically needs to
5527 embed build code inside host code. It boils down to manipulating build
5528 code as data, and the homoiconicity of Scheme---code has a direct
5529 representation as data---comes in handy for that. But we need more than
5530 the normal @code{quasiquote} mechanism in Scheme to construct build
5531 expressions.
5532
5533 The @code{(guix gexp)} module implements @dfn{G-expressions}, a form of
5534 S-expressions adapted to build expressions. G-expressions, or
5535 @dfn{gexps}, consist essentially of three syntactic forms: @code{gexp},
5536 @code{ungexp}, and @code{ungexp-splicing} (or simply: @code{#~},
5537 @code{#$}, and @code{#$@@}), which are comparable to
5538 @code{quasiquote}, @code{unquote}, and @code{unquote-splicing},
5539 respectively (@pxref{Expression Syntax, @code{quasiquote},, guile,
5540 GNU Guile Reference Manual}). However, there are major differences:
5541
5542 @itemize
5543 @item
5544 Gexps are meant to be written to a file and run or manipulated by other
5545 processes.
5546
5547 @item
5548 When a high-level object such as a package or derivation is unquoted
5549 inside a gexp, the result is as if its output file name had been
5550 introduced.
5551
5552 @item
5553 Gexps carry information about the packages or derivations they refer to,
5554 and these dependencies are automatically added as inputs to the build
5555 processes that use them.
5556 @end itemize
5557
5558 @cindex lowering, of high-level objects in gexps
5559 This mechanism is not limited to package and derivation
5560 objects: @dfn{compilers} able to ``lower'' other high-level objects to
5561 derivations or files in the store can be defined,
5562 such that these objects can also be inserted
5563 into gexps. For example, a useful type of high-level objects that can be
5564 inserted in a gexp is ``file-like objects'', which make it easy to
5565 add files to the store and to refer to them in
5566 derivations and such (see @code{local-file} and @code{plain-file}
5567 below.)
5568
5569 To illustrate the idea, here is an example of a gexp:
5570
5571 @example
5572 (define build-exp
5573 #~(begin
5574 (mkdir #$output)
5575 (chdir #$output)
5576 (symlink (string-append #$coreutils "/bin/ls")
5577 "list-files")))
5578 @end example
5579
5580 This gexp can be passed to @code{gexp->derivation}; we obtain a
5581 derivation that builds a directory containing exactly one symlink to
5582 @file{/gnu/store/@dots{}-coreutils-8.22/bin/ls}:
5583
5584 @example
5585 (gexp->derivation "the-thing" build-exp)
5586 @end example
5587
5588 As one would expect, the @code{"/gnu/store/@dots{}-coreutils-8.22"} string is
5589 substituted to the reference to the @var{coreutils} package in the
5590 actual build code, and @var{coreutils} is automatically made an input to
5591 the derivation. Likewise, @code{#$output} (equivalent to @code{(ungexp
5592 output)}) is replaced by a string containing the directory name of the
5593 output of the derivation.
5594
5595 @cindex cross compilation
5596 In a cross-compilation context, it is useful to distinguish between
5597 references to the @emph{native} build of a package---that can run on the
5598 host---versus references to cross builds of a package. To that end, the
5599 @code{#+} plays the same role as @code{#$}, but is a reference to a
5600 native package build:
5601
5602 @example
5603 (gexp->derivation "vi"
5604 #~(begin
5605 (mkdir #$output)
5606 (system* (string-append #+coreutils "/bin/ln")
5607 "-s"
5608 (string-append #$emacs "/bin/emacs")
5609 (string-append #$output "/bin/vi")))
5610 #:target "mips64el-linux-gnu")
5611 @end example
5612
5613 @noindent
5614 In the example above, the native build of @var{coreutils} is used, so
5615 that @command{ln} can actually run on the host; but then the
5616 cross-compiled build of @var{emacs} is referenced.
5617
5618 @cindex imported modules, for gexps
5619 @findex with-imported-modules
5620 Another gexp feature is @dfn{imported modules}: sometimes you want to be
5621 able to use certain Guile modules from the ``host environment'' in the
5622 gexp, so those modules should be imported in the ``build environment''.
5623 The @code{with-imported-modules} form allows you to express that:
5624
5625 @example
5626 (let ((build (with-imported-modules '((guix build utils))
5627 #~(begin
5628 (use-modules (guix build utils))
5629 (mkdir-p (string-append #$output "/bin"))))))
5630 (gexp->derivation "empty-dir"
5631 #~(begin
5632 #$build
5633 (display "success!\n")
5634 #t)))
5635 @end example
5636
5637 @noindent
5638 In this example, the @code{(guix build utils)} module is automatically
5639 pulled into the isolated build environment of our gexp, such that
5640 @code{(use-modules (guix build utils))} works as expected.
5641
5642 @cindex module closure
5643 @findex source-module-closure
5644 Usually you want the @emph{closure} of the module to be imported---i.e.,
5645 the module itself and all the modules it depends on---rather than just
5646 the module; failing to do that, attempts to use the module will fail
5647 because of missing dependent modules. The @code{source-module-closure}
5648 procedure computes the closure of a module by looking at its source file
5649 headers, which comes in handy in this case:
5650
5651 @example
5652 (use-modules (guix modules)) ;for 'source-module-closure'
5653
5654 (with-imported-modules (source-module-closure
5655 '((guix build utils)
5656 (gnu build vm)))
5657 (gexp->derivation "something-with-vms"
5658 #~(begin
5659 (use-modules (guix build utils)
5660 (gnu build vm))
5661 @dots{})))
5662 @end example
5663
5664 @cindex extensions, for gexps
5665 @findex with-extensions
5666 In the same vein, sometimes you want to import not just pure-Scheme
5667 modules, but also ``extensions'' such as Guile bindings to C libraries
5668 or other ``full-blown'' packages. Say you need the @code{guile-json}
5669 package available on the build side, here's how you would do it:
5670
5671 @example
5672 (use-modules (gnu packages guile)) ;for 'guile-json'
5673
5674 (with-extensions (list guile-json)
5675 (gexp->derivation "something-with-json"
5676 #~(begin
5677 (use-modules (json))
5678 @dots{})))
5679 @end example
5680
5681 The syntactic form to construct gexps is summarized below.
5682
5683 @deffn {Scheme Syntax} #~@var{exp}
5684 @deffnx {Scheme Syntax} (gexp @var{exp})
5685 Return a G-expression containing @var{exp}. @var{exp} may contain one
5686 or more of the following forms:
5687
5688 @table @code
5689 @item #$@var{obj}
5690 @itemx (ungexp @var{obj})
5691 Introduce a reference to @var{obj}. @var{obj} may have one of the
5692 supported types, for example a package or a
5693 derivation, in which case the @code{ungexp} form is replaced by its
5694 output file name---e.g., @code{"/gnu/store/@dots{}-coreutils-8.22}.
5695
5696 If @var{obj} is a list, it is traversed and references to supported
5697 objects are substituted similarly.
5698
5699 If @var{obj} is another gexp, its contents are inserted and its
5700 dependencies are added to those of the containing gexp.
5701
5702 If @var{obj} is another kind of object, it is inserted as is.
5703
5704 @item #$@var{obj}:@var{output}
5705 @itemx (ungexp @var{obj} @var{output})
5706 This is like the form above, but referring explicitly to the
5707 @var{output} of @var{obj}---this is useful when @var{obj} produces
5708 multiple outputs (@pxref{Packages with Multiple Outputs}).
5709
5710 @item #+@var{obj}
5711 @itemx #+@var{obj}:output
5712 @itemx (ungexp-native @var{obj})
5713 @itemx (ungexp-native @var{obj} @var{output})
5714 Same as @code{ungexp}, but produces a reference to the @emph{native}
5715 build of @var{obj} when used in a cross compilation context.
5716
5717 @item #$output[:@var{output}]
5718 @itemx (ungexp output [@var{output}])
5719 Insert a reference to derivation output @var{output}, or to the main
5720 output when @var{output} is omitted.
5721
5722 This only makes sense for gexps passed to @code{gexp->derivation}.
5723
5724 @item #$@@@var{lst}
5725 @itemx (ungexp-splicing @var{lst})
5726 Like the above, but splices the contents of @var{lst} inside the
5727 containing list.
5728
5729 @item #+@@@var{lst}
5730 @itemx (ungexp-native-splicing @var{lst})
5731 Like the above, but refers to native builds of the objects listed in
5732 @var{lst}.
5733
5734 @end table
5735
5736 G-expressions created by @code{gexp} or @code{#~} are run-time objects
5737 of the @code{gexp?} type (see below.)
5738 @end deffn
5739
5740 @deffn {Scheme Syntax} with-imported-modules @var{modules} @var{body}@dots{}
5741 Mark the gexps defined in @var{body}@dots{} as requiring @var{modules}
5742 in their execution environment.
5743
5744 Each item in @var{modules} can be the name of a module, such as
5745 @code{(guix build utils)}, or it can be a module name, followed by an
5746 arrow, followed by a file-like object:
5747
5748 @example
5749 `((guix build utils)
5750 (guix gcrypt)
5751 ((guix config) => ,(scheme-file "config.scm"
5752 #~(define-module @dots{}))))
5753 @end example
5754
5755 @noindent
5756 In the example above, the first two modules are taken from the search
5757 path, and the last one is created from the given file-like object.
5758
5759 This form has @emph{lexical} scope: it has an effect on the gexps
5760 directly defined in @var{body}@dots{}, but not on those defined, say, in
5761 procedures called from @var{body}@dots{}.
5762 @end deffn
5763
5764 @deffn {Scheme Syntax} with-extensions @var{extensions} @var{body}@dots{}
5765 Mark the gexps defined in @var{body}@dots{} as requiring
5766 @var{extensions} in their build and execution environment.
5767 @var{extensions} is typically a list of package objects such as those
5768 defined in the @code{(gnu packages guile)} module.
5769
5770 Concretely, the packages listed in @var{extensions} are added to the
5771 load path while compiling imported modules in @var{body}@dots{}; they
5772 are also added to the load path of the gexp returned by
5773 @var{body}@dots{}.
5774 @end deffn
5775
5776 @deffn {Scheme Procedure} gexp? @var{obj}
5777 Return @code{#t} if @var{obj} is a G-expression.
5778 @end deffn
5779
5780 G-expressions are meant to be written to disk, either as code building
5781 some derivation, or as plain files in the store. The monadic procedures
5782 below allow you to do that (@pxref{The Store Monad}, for more
5783 information about monads.)
5784
5785 @deffn {Monadic Procedure} gexp->derivation @var{name} @var{exp} @
5786 [#:system (%current-system)] [#:target #f] [#:graft? #t] @
5787 [#:hash #f] [#:hash-algo #f] @
5788 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
5789 [#:module-path @var{%load-path}] @
5790 [#:effective-version "2.2"] @
5791 [#:references-graphs #f] [#:allowed-references #f] @
5792 [#:disallowed-references #f] @
5793 [#:leaked-env-vars #f] @
5794 [#:script-name (string-append @var{name} "-builder")] @
5795 [#:deprecation-warnings #f] @
5796 [#:local-build? #f] [#:substitutable? #t] @
5797 [#:properties '()] [#:guile-for-build #f]
5798 Return a derivation @var{name} that runs @var{exp} (a gexp) with
5799 @var{guile-for-build} (a derivation) on @var{system}; @var{exp} is
5800 stored in a file called @var{script-name}. When @var{target} is true,
5801 it is used as the cross-compilation target triplet for packages referred
5802 to by @var{exp}.
5803
5804 @var{modules} is deprecated in favor of @code{with-imported-modules}.
5805 Its meaning is to
5806 make @var{modules} available in the evaluation context of @var{exp};
5807 @var{modules} is a list of names of Guile modules searched in
5808 @var{module-path} to be copied in the store, compiled, and made available in
5809 the load path during the execution of @var{exp}---e.g., @code{((guix
5810 build utils) (guix build gnu-build-system))}.
5811
5812 @var{effective-version} determines the string to use when adding extensions of
5813 @var{exp} (see @code{with-extensions}) to the search path---e.g., @code{"2.2"}.
5814
5815 @var{graft?} determines whether packages referred to by @var{exp} should be grafted when
5816 applicable.
5817
5818 When @var{references-graphs} is true, it must be a list of tuples of one of the
5819 following forms:
5820
5821 @example
5822 (@var{file-name} @var{package})
5823 (@var{file-name} @var{package} @var{output})
5824 (@var{file-name} @var{derivation})
5825 (@var{file-name} @var{derivation} @var{output})
5826 (@var{file-name} @var{store-item})
5827 @end example
5828
5829 The right-hand-side of each element of @var{references-graphs} is automatically made
5830 an input of the build process of @var{exp}. In the build environment, each
5831 @var{file-name} contains the reference graph of the corresponding item, in a simple
5832 text format.
5833
5834 @var{allowed-references} must be either @code{#f} or a list of output names and packages.
5835 In the latter case, the list denotes store items that the result is allowed to
5836 refer to. Any reference to another store item will lead to a build error.
5837 Similarly for @var{disallowed-references}, which can list items that must not be
5838 referenced by the outputs.
5839
5840 @var{deprecation-warnings} determines whether to show deprecation warnings while
5841 compiling modules. It can be @code{#f}, @code{#t}, or @code{'detailed}.
5842
5843 The other arguments are as for @code{derivation} (@pxref{Derivations}).
5844 @end deffn
5845
5846 @cindex file-like objects
5847 The @code{local-file}, @code{plain-file}, @code{computed-file},
5848 @code{program-file}, and @code{scheme-file} procedures below return
5849 @dfn{file-like objects}. That is, when unquoted in a G-expression,
5850 these objects lead to a file in the store. Consider this G-expression:
5851
5852 @example
5853 #~(system* #$(file-append glibc "/sbin/nscd") "-f"
5854 #$(local-file "/tmp/my-nscd.conf"))
5855 @end example
5856
5857 The effect here is to ``intern'' @file{/tmp/my-nscd.conf} by copying it
5858 to the store. Once expanded, for instance @i{via}
5859 @code{gexp->derivation}, the G-expression refers to that copy under
5860 @file{/gnu/store}; thus, modifying or removing the file in @file{/tmp}
5861 does not have any effect on what the G-expression does.
5862 @code{plain-file} can be used similarly; it differs in that the file
5863 content is directly passed as a string.
5864
5865 @deffn {Scheme Procedure} local-file @var{file} [@var{name}] @
5866 [#:recursive? #f] [#:select? (const #t)]
5867 Return an object representing local file @var{file} to add to the store; this
5868 object can be used in a gexp. If @var{file} is a relative file name, it is looked
5869 up relative to the source file where this form appears. @var{file} will be added to
5870 the store under @var{name}--by default the base name of @var{file}.
5871
5872 When @var{recursive?} is true, the contents of @var{file} are added recursively; if @var{file}
5873 designates a flat file and @var{recursive?} is true, its contents are added, and its
5874 permission bits are kept.
5875
5876 When @var{recursive?} is true, call @code{(@var{select?} @var{file}
5877 @var{stat})} for each directory entry, where @var{file} is the entry's
5878 absolute file name and @var{stat} is the result of @code{lstat}; exclude
5879 entries for which @var{select?} does not return true.
5880
5881 This is the declarative counterpart of the @code{interned-file} monadic
5882 procedure (@pxref{The Store Monad, @code{interned-file}}).
5883 @end deffn
5884
5885 @deffn {Scheme Procedure} plain-file @var{name} @var{content}
5886 Return an object representing a text file called @var{name} with the given
5887 @var{content} (a string or a bytevector) to be added to the store.
5888
5889 This is the declarative counterpart of @code{text-file}.
5890 @end deffn
5891
5892 @deffn {Scheme Procedure} computed-file @var{name} @var{gexp} @
5893 [#:options '(#:local-build? #t)]
5894 Return an object representing the store item @var{name}, a file or
5895 directory computed by @var{gexp}. @var{options}
5896 is a list of additional arguments to pass to @code{gexp->derivation}.
5897
5898 This is the declarative counterpart of @code{gexp->derivation}.
5899 @end deffn
5900
5901 @deffn {Monadic Procedure} gexp->script @var{name} @var{exp} @
5902 [#:guile (default-guile)] [#:module-path %load-path]
5903 Return an executable script @var{name} that runs @var{exp} using
5904 @var{guile}, with @var{exp}'s imported modules in its search path.
5905 Look up @var{exp}'s modules in @var{module-path}.
5906
5907 The example below builds a script that simply invokes the @command{ls}
5908 command:
5909
5910 @example
5911 (use-modules (guix gexp) (gnu packages base))
5912
5913 (gexp->script "list-files"
5914 #~(execl #$(file-append coreutils "/bin/ls")
5915 "ls"))
5916 @end example
5917
5918 When ``running'' it through the store (@pxref{The Store Monad,
5919 @code{run-with-store}}), we obtain a derivation that produces an
5920 executable file @file{/gnu/store/@dots{}-list-files} along these lines:
5921
5922 @example
5923 #!/gnu/store/@dots{}-guile-2.0.11/bin/guile -ds
5924 !#
5925 (execl "/gnu/store/@dots{}-coreutils-8.22"/bin/ls" "ls")
5926 @end example
5927 @end deffn
5928
5929 @deffn {Scheme Procedure} program-file @var{name} @var{exp} @
5930 [#:guile #f] [#:module-path %load-path]
5931 Return an object representing the executable store item @var{name} that
5932 runs @var{gexp}. @var{guile} is the Guile package used to execute that
5933 script. Imported modules of @var{gexp} are looked up in @var{module-path}.
5934
5935 This is the declarative counterpart of @code{gexp->script}.
5936 @end deffn
5937
5938 @deffn {Monadic Procedure} gexp->file @var{name} @var{exp} @
5939 [#:set-load-path? #t] [#:module-path %load-path] @
5940 [#:splice? #f] @
5941 [#:guile (default-guile)]
5942 Return a derivation that builds a file @var{name} containing @var{exp}.
5943 When @var{splice?} is true, @var{exp} is considered to be a list of
5944 expressions that will be spliced in the resulting file.
5945
5946 When @var{set-load-path?} is true, emit code in the resulting file to
5947 set @code{%load-path} and @code{%load-compiled-path} to honor
5948 @var{exp}'s imported modules. Look up @var{exp}'s modules in
5949 @var{module-path}.
5950
5951 The resulting file holds references to all the dependencies of @var{exp}
5952 or a subset thereof.
5953 @end deffn
5954
5955 @deffn {Scheme Procedure} scheme-file @var{name} @var{exp} [#:splice? #f]
5956 Return an object representing the Scheme file @var{name} that contains
5957 @var{exp}.
5958
5959 This is the declarative counterpart of @code{gexp->file}.
5960 @end deffn
5961
5962 @deffn {Monadic Procedure} text-file* @var{name} @var{text} @dots{}
5963 Return as a monadic value a derivation that builds a text file
5964 containing all of @var{text}. @var{text} may list, in addition to
5965 strings, objects of any type that can be used in a gexp: packages,
5966 derivations, local file objects, etc. The resulting store file holds
5967 references to all these.
5968
5969 This variant should be preferred over @code{text-file} anytime the file
5970 to create will reference items from the store. This is typically the
5971 case when building a configuration file that embeds store file names,
5972 like this:
5973
5974 @example
5975 (define (profile.sh)
5976 ;; Return the name of a shell script in the store that
5977 ;; initializes the 'PATH' environment variable.
5978 (text-file* "profile.sh"
5979 "export PATH=" coreutils "/bin:"
5980 grep "/bin:" sed "/bin\n"))
5981 @end example
5982
5983 In this example, the resulting @file{/gnu/store/@dots{}-profile.sh} file
5984 will reference @var{coreutils}, @var{grep}, and @var{sed}, thereby
5985 preventing them from being garbage-collected during its lifetime.
5986 @end deffn
5987
5988 @deffn {Scheme Procedure} mixed-text-file @var{name} @var{text} @dots{}
5989 Return an object representing store file @var{name} containing
5990 @var{text}. @var{text} is a sequence of strings and file-like objects,
5991 as in:
5992
5993 @example
5994 (mixed-text-file "profile"
5995 "export PATH=" coreutils "/bin:" grep "/bin")
5996 @end example
5997
5998 This is the declarative counterpart of @code{text-file*}.
5999 @end deffn
6000
6001 @deffn {Scheme Procedure} file-union @var{name} @var{files}
6002 Return a @code{<computed-file>} that builds a directory containing all of @var{files}.
6003 Each item in @var{files} must be a two-element list where the first element is the
6004 file name to use in the new directory, and the second element is a gexp
6005 denoting the target file. Here's an example:
6006
6007 @example
6008 (file-union "etc"
6009 `(("hosts" ,(plain-file "hosts"
6010 "127.0.0.1 localhost"))
6011 ("bashrc" ,(plain-file "bashrc"
6012 "alias ls='ls --color=auto'"))))
6013 @end example
6014
6015 This yields an @code{etc} directory containing these two files.
6016 @end deffn
6017
6018 @deffn {Scheme Procedure} directory-union @var{name} @var{things}
6019 Return a directory that is the union of @var{things}, where @var{things} is a list of
6020 file-like objects denoting directories. For example:
6021
6022 @example
6023 (directory-union "guile+emacs" (list guile emacs))
6024 @end example
6025
6026 yields a directory that is the union of the @code{guile} and @code{emacs} packages.
6027 @end deffn
6028
6029 @deffn {Scheme Procedure} file-append @var{obj} @var{suffix} @dots{}
6030 Return a file-like object that expands to the concatenation of @var{obj}
6031 and @var{suffix}, where @var{obj} is a lowerable object and each
6032 @var{suffix} is a string.
6033
6034 As an example, consider this gexp:
6035
6036 @example
6037 (gexp->script "run-uname"
6038 #~(system* #$(file-append coreutils
6039 "/bin/uname")))
6040 @end example
6041
6042 The same effect could be achieved with:
6043
6044 @example
6045 (gexp->script "run-uname"
6046 #~(system* (string-append #$coreutils
6047 "/bin/uname")))
6048 @end example
6049
6050 There is one difference though: in the @code{file-append} case, the
6051 resulting script contains the absolute file name as a string, whereas in
6052 the second case, the resulting script contains a @code{(string-append
6053 @dots{})} expression to construct the file name @emph{at run time}.
6054 @end deffn
6055
6056
6057 Of course, in addition to gexps embedded in ``host'' code, there are
6058 also modules containing build tools. To make it clear that they are
6059 meant to be used in the build stratum, these modules are kept in the
6060 @code{(guix build @dots{})} name space.
6061
6062 @cindex lowering, of high-level objects in gexps
6063 Internally, high-level objects are @dfn{lowered}, using their compiler,
6064 to either derivations or store items. For instance, lowering a package
6065 yields a derivation, and lowering a @code{plain-file} yields a store
6066 item. This is achieved using the @code{lower-object} monadic procedure.
6067
6068 @deffn {Monadic Procedure} lower-object @var{obj} [@var{system}] @
6069 [#:target #f]
6070 Return as a value in @var{%store-monad} the derivation or store item
6071 corresponding to @var{obj} for @var{system}, cross-compiling for
6072 @var{target} if @var{target} is true. @var{obj} must be an object that
6073 has an associated gexp compiler, such as a @code{<package>}.
6074 @end deffn
6075
6076 @node Invoking guix repl
6077 @section Invoking @command{guix repl}
6078
6079 @cindex REPL, read-eval-print loop
6080 The @command{guix repl} command spawns a Guile @dfn{read-eval-print loop}
6081 (REPL) for interactive programming (@pxref{Using Guile Interactively,,, guile,
6082 GNU Guile Reference Manual}). Compared to just launching the @command{guile}
6083 command, @command{guix repl} guarantees that all the Guix modules and all its
6084 dependencies are available in the search path. You can use it this way:
6085
6086 @example
6087 $ guix repl
6088 scheme@@(guile-user)> ,use (gnu packages base)
6089 scheme@@(guile-user)> coreutils
6090 $1 = #<package coreutils@@8.29 gnu/packages/base.scm:327 3e28300>
6091 @end example
6092
6093 @cindex inferiors
6094 In addition, @command{guix repl} implements a simple machine-readable REPL
6095 protocol for use by @code{(guix inferior)}, a facility to interact with
6096 @dfn{inferiors}, separate processes running a potentially different revision
6097 of Guix.
6098
6099 The available options are as follows:
6100
6101 @table @code
6102 @item --type=@var{type}
6103 @itemx -t @var{type}
6104 Start a REPL of the given @var{TYPE}, which can be one of the following:
6105
6106 @table @code
6107 @item guile
6108 This is default, and it spawns a standard full-featured Guile REPL.
6109 @item machine
6110 Spawn a REPL that uses the machine-readable protocol. This is the protocol
6111 that the @code{(guix inferior)} module speaks.
6112 @end table
6113
6114 @item --listen=@var{endpoint}
6115 By default, @command{guix repl} reads from standard input and writes to
6116 standard output. When this option is passed, it will instead listen for
6117 connections on @var{endpoint}. Here are examples of valid options:
6118
6119 @table @code
6120 @item --listen=tcp:37146
6121 Accept connections on localhost on port 37146.
6122
6123 @item --listen=unix:/tmp/socket
6124 Accept connections on the Unix-domain socket @file{/tmp/socket}.
6125 @end table
6126 @end table
6127
6128 @c *********************************************************************
6129 @node Utilities
6130 @chapter Utilities
6131
6132 This section describes Guix command-line utilities. Some of them are
6133 primarily targeted at developers and users who write new package
6134 definitions, while others are more generally useful. They complement
6135 the Scheme programming interface of Guix in a convenient way.
6136
6137 @menu
6138 * Invoking guix build:: Building packages from the command line.
6139 * Invoking guix edit:: Editing package definitions.
6140 * Invoking guix download:: Downloading a file and printing its hash.
6141 * Invoking guix hash:: Computing the cryptographic hash of a file.
6142 * Invoking guix import:: Importing package definitions.
6143 * Invoking guix refresh:: Updating package definitions.
6144 * Invoking guix lint:: Finding errors in package definitions.
6145 * Invoking guix size:: Profiling disk usage.
6146 * Invoking guix graph:: Visualizing the graph of packages.
6147 * Invoking guix environment:: Setting up development environments.
6148 * Invoking guix publish:: Sharing substitutes.
6149 * Invoking guix challenge:: Challenging substitute servers.
6150 * Invoking guix copy:: Copying to and from a remote store.
6151 * Invoking guix container:: Process isolation.
6152 * Invoking guix weather:: Assessing substitute availability.
6153 * Invoking guix processes:: Listing client processes.
6154 @end menu
6155
6156 @node Invoking guix build
6157 @section Invoking @command{guix build}
6158
6159 @cindex package building
6160 @cindex @command{guix build}
6161 The @command{guix build} command builds packages or derivations and
6162 their dependencies, and prints the resulting store paths. Note that it
6163 does not modify the user's profile---this is the job of the
6164 @command{guix package} command (@pxref{Invoking guix package}). Thus,
6165 it is mainly useful for distribution developers.
6166
6167 The general syntax is:
6168
6169 @example
6170 guix build @var{options} @var{package-or-derivation}@dots{}
6171 @end example
6172
6173 As an example, the following command builds the latest versions of Emacs
6174 and of Guile, displays their build logs, and finally displays the
6175 resulting directories:
6176
6177 @example
6178 guix build emacs guile
6179 @end example
6180
6181 Similarly, the following command builds all the available packages:
6182
6183 @example
6184 guix build --quiet --keep-going \
6185 `guix package -A | cut -f1,2 --output-delimiter=@@`
6186 @end example
6187
6188 @var{package-or-derivation} may be either the name of a package found in
6189 the software distribution such as @code{coreutils} or
6190 @code{coreutils@@8.20}, or a derivation such as
6191 @file{/gnu/store/@dots{}-coreutils-8.19.drv}. In the former case, a
6192 package with the corresponding name (and optionally version) is searched
6193 for among the GNU distribution modules (@pxref{Package Modules}).
6194
6195 Alternatively, the @code{--expression} option may be used to specify a
6196 Scheme expression that evaluates to a package; this is useful when
6197 disambiguating among several same-named packages or package variants is
6198 needed.
6199
6200 There may be zero or more @var{options}. The available options are
6201 described in the subsections below.
6202
6203 @menu
6204 * Common Build Options:: Build options for most commands.
6205 * Package Transformation Options:: Creating variants of packages.
6206 * Additional Build Options:: Options specific to 'guix build'.
6207 * Debugging Build Failures:: Real life packaging experience.
6208 @end menu
6209
6210 @node Common Build Options
6211 @subsection Common Build Options
6212
6213 A number of options that control the build process are common to
6214 @command{guix build} and other commands that can spawn builds, such as
6215 @command{guix package} or @command{guix archive}. These are the
6216 following:
6217
6218 @table @code
6219
6220 @item --load-path=@var{directory}
6221 @itemx -L @var{directory}
6222 Add @var{directory} to the front of the package module search path
6223 (@pxref{Package Modules}).
6224
6225 This allows users to define their own packages and make them visible to
6226 the command-line tools.
6227
6228 @item --keep-failed
6229 @itemx -K
6230 Keep the build tree of failed builds. Thus, if a build fails, its build
6231 tree is kept under @file{/tmp}, in a directory whose name is shown at
6232 the end of the build log. This is useful when debugging build issues.
6233 @xref{Debugging Build Failures}, for tips and tricks on how to debug
6234 build issues.
6235
6236 This option has no effect when connecting to a remote daemon with a
6237 @code{guix://} URI (@pxref{The Store, the @code{GUIX_DAEMON_SOCKET}
6238 variable}).
6239
6240 @item --keep-going
6241 @itemx -k
6242 Keep going when some of the derivations fail to build; return only once
6243 all the builds have either completed or failed.
6244
6245 The default behavior is to stop as soon as one of the specified
6246 derivations has failed.
6247
6248 @item --dry-run
6249 @itemx -n
6250 Do not build the derivations.
6251
6252 @anchor{fallback-option}
6253 @item --fallback
6254 When substituting a pre-built binary fails, fall back to building
6255 packages locally (@pxref{Substitution Failure}).
6256
6257 @item --substitute-urls=@var{urls}
6258 @anchor{client-substitute-urls}
6259 Consider @var{urls} the whitespace-separated list of substitute source
6260 URLs, overriding the default list of URLs of @command{guix-daemon}
6261 (@pxref{daemon-substitute-urls,, @command{guix-daemon} URLs}).
6262
6263 This means that substitutes may be downloaded from @var{urls}, provided
6264 they are signed by a key authorized by the system administrator
6265 (@pxref{Substitutes}).
6266
6267 When @var{urls} is the empty string, substitutes are effectively
6268 disabled.
6269
6270 @item --no-substitutes
6271 Do not use substitutes for build products. That is, always build things
6272 locally instead of allowing downloads of pre-built binaries
6273 (@pxref{Substitutes}).
6274
6275 @item --no-grafts
6276 Do not ``graft'' packages. In practice, this means that package updates
6277 available as grafts are not applied. @xref{Security Updates}, for more
6278 information on grafts.
6279
6280 @item --rounds=@var{n}
6281 Build each derivation @var{n} times in a row, and raise an error if
6282 consecutive build results are not bit-for-bit identical.
6283
6284 This is a useful way to detect non-deterministic builds processes.
6285 Non-deterministic build processes are a problem because they make it
6286 practically impossible for users to @emph{verify} whether third-party
6287 binaries are genuine. @xref{Invoking guix challenge}, for more.
6288
6289 Note that, currently, the differing build results are not kept around,
6290 so you will have to manually investigate in case of an error---e.g., by
6291 stashing one of the build results with @code{guix archive --export}
6292 (@pxref{Invoking guix archive}), then rebuilding, and finally comparing
6293 the two results.
6294
6295 @item --no-build-hook
6296 Do not attempt to offload builds @i{via} the ``build hook'' of the daemon
6297 (@pxref{Daemon Offload Setup}). That is, always build things locally
6298 instead of offloading builds to remote machines.
6299
6300 @item --max-silent-time=@var{seconds}
6301 When the build or substitution process remains silent for more than
6302 @var{seconds}, terminate it and report a build failure.
6303
6304 By default, the daemon's setting is honored (@pxref{Invoking
6305 guix-daemon, @code{--max-silent-time}}).
6306
6307 @item --timeout=@var{seconds}
6308 Likewise, when the build or substitution process lasts for more than
6309 @var{seconds}, terminate it and report a build failure.
6310
6311 By default, the daemon's setting is honored (@pxref{Invoking
6312 guix-daemon, @code{--timeout}}).
6313
6314 @item --verbosity=@var{level}
6315 Use the given verbosity level. @var{level} must be an integer between 0
6316 and 5; higher means more verbose output. Setting a level of 4 or more
6317 may be helpful when debugging setup issues with the build daemon.
6318
6319 @item --cores=@var{n}
6320 @itemx -c @var{n}
6321 Allow the use of up to @var{n} CPU cores for the build. The special
6322 value @code{0} means to use as many CPU cores as available.
6323
6324 @item --max-jobs=@var{n}
6325 @itemx -M @var{n}
6326 Allow at most @var{n} build jobs in parallel. @xref{Invoking
6327 guix-daemon, @code{--max-jobs}}, for details about this option and the
6328 equivalent @command{guix-daemon} option.
6329
6330 @end table
6331
6332 Behind the scenes, @command{guix build} is essentially an interface to
6333 the @code{package-derivation} procedure of the @code{(guix packages)}
6334 module, and to the @code{build-derivations} procedure of the @code{(guix
6335 derivations)} module.
6336
6337 In addition to options explicitly passed on the command line,
6338 @command{guix build} and other @command{guix} commands that support
6339 building honor the @code{GUIX_BUILD_OPTIONS} environment variable.
6340
6341 @defvr {Environment Variable} GUIX_BUILD_OPTIONS
6342 Users can define this variable to a list of command line options that
6343 will automatically be used by @command{guix build} and other
6344 @command{guix} commands that can perform builds, as in the example
6345 below:
6346
6347 @example
6348 $ export GUIX_BUILD_OPTIONS="--no-substitutes -c 2 -L /foo/bar"
6349 @end example
6350
6351 These options are parsed independently, and the result is appended to
6352 the parsed command-line options.
6353 @end defvr
6354
6355
6356 @node Package Transformation Options
6357 @subsection Package Transformation Options
6358
6359 @cindex package variants
6360 Another set of command-line options supported by @command{guix build}
6361 and also @command{guix package} are @dfn{package transformation
6362 options}. These are options that make it possible to define @dfn{package
6363 variants}---for instance, packages built from different source code.
6364 This is a convenient way to create customized packages on the fly
6365 without having to type in the definitions of package variants
6366 (@pxref{Defining Packages}).
6367
6368 @table @code
6369
6370 @item --with-source=@var{source}
6371 @itemx --with-source=@var{package}=@var{source}
6372 @itemx --with-source=@var{package}@@@var{version}=@var{source}
6373 Use @var{source} as the source of @var{package}, and @var{version} as
6374 its version number.
6375 @var{source} must be a file name or a URL, as for @command{guix
6376 download} (@pxref{Invoking guix download}).
6377
6378 When @var{package} is omitted,
6379 it is taken to be the package name specified on the
6380 command line that matches the base of @var{source}---e.g.,
6381 if @var{source} is @code{/src/guile-2.0.10.tar.gz}, the corresponding
6382 package is @code{guile}.
6383
6384 Likewise, when @var{version} is omitted, the version string is inferred from
6385 @var{source}; in the previous example, it is @code{2.0.10}.
6386
6387 This option allows users to try out versions of packages other than the
6388 one provided by the distribution. The example below downloads
6389 @file{ed-1.7.tar.gz} from a GNU mirror and uses that as the source for
6390 the @code{ed} package:
6391
6392 @example
6393 guix build ed --with-source=mirror://gnu/ed/ed-1.7.tar.gz
6394 @end example
6395
6396 As a developer, @code{--with-source} makes it easy to test release
6397 candidates:
6398
6399 @example
6400 guix build guile --with-source=../guile-2.0.9.219-e1bb7.tar.xz
6401 @end example
6402
6403 @dots{} or to build from a checkout in a pristine environment:
6404
6405 @example
6406 $ git clone git://git.sv.gnu.org/guix.git
6407 $ guix build guix --with-source=guix@@1.0=./guix
6408 @end example
6409
6410 @item --with-input=@var{package}=@var{replacement}
6411 Replace dependency on @var{package} by a dependency on
6412 @var{replacement}. @var{package} must be a package name, and
6413 @var{replacement} must be a package specification such as @code{guile}
6414 or @code{guile@@1.8}.
6415
6416 For instance, the following command builds Guix, but replaces its
6417 dependency on the current stable version of Guile with a dependency on
6418 the legacy version of Guile, @code{guile@@2.0}:
6419
6420 @example
6421 guix build --with-input=guile=guile@@2.0 guix
6422 @end example
6423
6424 This is a recursive, deep replacement. So in this example, both
6425 @code{guix} and its dependency @code{guile-json} (which also depends on
6426 @code{guile}) get rebuilt against @code{guile@@2.0}.
6427
6428 This is implemented using the @code{package-input-rewriting} Scheme
6429 procedure (@pxref{Defining Packages, @code{package-input-rewriting}}).
6430
6431 @item --with-graft=@var{package}=@var{replacement}
6432 This is similar to @code{--with-input} but with an important difference:
6433 instead of rebuilding the whole dependency chain, @var{replacement} is
6434 built and then @dfn{grafted} onto the binaries that were initially
6435 referring to @var{package}. @xref{Security Updates}, for more
6436 information on grafts.
6437
6438 For example, the command below grafts version 3.5.4 of GnuTLS onto Wget
6439 and all its dependencies, replacing references to the version of GnuTLS
6440 they currently refer to:
6441
6442 @example
6443 guix build --with-graft=gnutls=gnutls@@3.5.4 wget
6444 @end example
6445
6446 This has the advantage of being much faster than rebuilding everything.
6447 But there is a caveat: it works if and only if @var{package} and
6448 @var{replacement} are strictly compatible---for example, if they provide
6449 a library, the application binary interface (ABI) of those libraries
6450 must be compatible. If @var{replacement} is somehow incompatible with
6451 @var{package}, then the resulting package may be unusable. Use with
6452 care!
6453
6454 @item --with-branch=@var{package}=@var{branch}
6455 @cindex Git, using the latest commit
6456 @cindex latest commit, building
6457 Build @var{package} from the latest commit of @var{branch}. The @code{source}
6458 field of @var{package} must be an origin with the @code{git-fetch} method
6459 (@pxref{origin Reference}) or a @code{git-checkout} object; the repository URL
6460 is taken from that @code{source}.
6461
6462 For instance, the following command builds @code{guile-sqlite3} from the
6463 latest commit of its @code{master} branch, and then builds @code{guix} (which
6464 depends on it) and @code{cuirass} (which depends on @code{guix}) against this
6465 specific @code{guile-sqlite3} build:
6466
6467 @example
6468 guix build --with-branch=guile-sqlite3=master cuirass
6469 @end example
6470
6471 @cindex continuous integration
6472 Obviously, since it uses the latest commit of the given branch, the result of
6473 such a command varies over time. Nevertheless it is a convenient way to
6474 rebuild entire software stacks against the latest commit of one or more
6475 packages. This is particularly useful in the context of continuous
6476 integration (CI).
6477
6478 Checkouts are kept in a cache under @file{~/.cache/guix/checkouts} to speed up
6479 consecutive accesses to the same repository. You may want to clean it up once
6480 in a while to save disk space.
6481 @end table
6482
6483 @node Additional Build Options
6484 @subsection Additional Build Options
6485
6486 The command-line options presented below are specific to @command{guix
6487 build}.
6488
6489 @table @code
6490
6491 @item --quiet
6492 @itemx -q
6493 Build quietly, without displaying the build log. Upon completion, the
6494 build log is kept in @file{/var} (or similar) and can always be
6495 retrieved using the @option{--log-file} option.
6496
6497 @item --file=@var{file}
6498 @itemx -f @var{file}
6499 Build the package, derivation, or other file-like object that the code within
6500 @var{file} evaluates to (@pxref{G-Expressions, file-like objects}).
6501
6502 As an example, @var{file} might contain a package definition like this
6503 (@pxref{Defining Packages}):
6504
6505 @example
6506 @verbatiminclude package-hello.scm
6507 @end example
6508
6509 @item --expression=@var{expr}
6510 @itemx -e @var{expr}
6511 Build the package or derivation @var{expr} evaluates to.
6512
6513 For example, @var{expr} may be @code{(@@ (gnu packages guile)
6514 guile-1.8)}, which unambiguously designates this specific variant of
6515 version 1.8 of Guile.
6516
6517 Alternatively, @var{expr} may be a G-expression, in which case it is used
6518 as a build program passed to @code{gexp->derivation}
6519 (@pxref{G-Expressions}).
6520
6521 Lastly, @var{expr} may refer to a zero-argument monadic procedure
6522 (@pxref{The Store Monad}). The procedure must return a derivation as a
6523 monadic value, which is then passed through @code{run-with-store}.
6524
6525 @item --source
6526 @itemx -S
6527 Build the source derivations of the packages, rather than the packages
6528 themselves.
6529
6530 For instance, @code{guix build -S gcc} returns something like
6531 @file{/gnu/store/@dots{}-gcc-4.7.2.tar.bz2}, which is the GCC
6532 source tarball.
6533
6534 The returned source tarball is the result of applying any patches and
6535 code snippets specified in the package @code{origin} (@pxref{Defining
6536 Packages}).
6537
6538 @item --sources
6539 Fetch and return the source of @var{package-or-derivation} and all their
6540 dependencies, recursively. This is a handy way to obtain a local copy
6541 of all the source code needed to build @var{packages}, allowing you to
6542 eventually build them even without network access. It is an extension
6543 of the @code{--source} option and can accept one of the following
6544 optional argument values:
6545
6546 @table @code
6547 @item package
6548 This value causes the @code{--sources} option to behave in the same way
6549 as the @code{--source} option.
6550
6551 @item all
6552 Build the source derivations of all packages, including any source that
6553 might be listed as @code{inputs}. This is the default value.
6554
6555 @example
6556 $ guix build --sources tzdata
6557 The following derivations will be built:
6558 /gnu/store/@dots{}-tzdata2015b.tar.gz.drv
6559 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
6560 @end example
6561
6562 @item transitive
6563 Build the source derivations of all packages, as well of all transitive
6564 inputs to the packages. This can be used e.g. to
6565 prefetch package source for later offline building.
6566
6567 @example
6568 $ guix build --sources=transitive tzdata
6569 The following derivations will be built:
6570 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
6571 /gnu/store/@dots{}-findutils-4.4.2.tar.xz.drv
6572 /gnu/store/@dots{}-grep-2.21.tar.xz.drv
6573 /gnu/store/@dots{}-coreutils-8.23.tar.xz.drv
6574 /gnu/store/@dots{}-make-4.1.tar.xz.drv
6575 /gnu/store/@dots{}-bash-4.3.tar.xz.drv
6576 @dots{}
6577 @end example
6578
6579 @end table
6580
6581 @item --system=@var{system}
6582 @itemx -s @var{system}
6583 Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of
6584 the system type of the build host.
6585
6586 @quotation Note
6587 The @code{--system} flag is for @emph{native} compilation and must not
6588 be confused with cross-compilation. See @code{--target} below for
6589 information on cross-compilation.
6590 @end quotation
6591
6592 An example use of this is on Linux-based systems, which can emulate
6593 different personalities. For instance, passing
6594 @code{--system=i686-linux} on an @code{x86_64-linux} system or
6595 @code{--system=armhf-linux} on an @code{aarch64-linux} system allows you
6596 to build packages in a complete 32-bit environment.
6597
6598 @quotation Note
6599 Building for an @code{armhf-linux} system is unconditionally enabled on
6600 @code{aarch64-linux} machines, although certain aarch64 chipsets do not
6601 allow for this functionality, notably the ThunderX.
6602 @end quotation
6603
6604 Similarly, when transparent emulation with QEMU and @code{binfmt_misc}
6605 is enabled (@pxref{Virtualization Services,
6606 @code{qemu-binfmt-service-type}}), you can build for any system for
6607 which a QEMU @code{binfmt_misc} handler is installed.
6608
6609 Builds for a system other than that of the machine you are using can
6610 also be offloaded to a remote machine of the right architecture.
6611 @xref{Daemon Offload Setup}, for more information on offloading.
6612
6613 @item --target=@var{triplet}
6614 @cindex cross-compilation
6615 Cross-build for @var{triplet}, which must be a valid GNU triplet, such
6616 as @code{"mips64el-linux-gnu"} (@pxref{Specifying target triplets, GNU
6617 configuration triplets,, autoconf, Autoconf}).
6618
6619 @anchor{build-check}
6620 @item --check
6621 @cindex determinism, checking
6622 @cindex reproducibility, checking
6623 Rebuild @var{package-or-derivation}, which are already available in the
6624 store, and raise an error if the build results are not bit-for-bit
6625 identical.
6626
6627 This mechanism allows you to check whether previously installed
6628 substitutes are genuine (@pxref{Substitutes}), or whether the build result
6629 of a package is deterministic. @xref{Invoking guix challenge}, for more
6630 background information and tools.
6631
6632 When used in conjunction with @option{--keep-failed}, the differing
6633 output is kept in the store, under @file{/gnu/store/@dots{}-check}.
6634 This makes it easy to look for differences between the two results.
6635
6636 @item --repair
6637 @cindex repairing store items
6638 @cindex corruption, recovering from
6639 Attempt to repair the specified store items, if they are corrupt, by
6640 re-downloading or rebuilding them.
6641
6642 This operation is not atomic and thus restricted to @code{root}.
6643
6644 @item --derivations
6645 @itemx -d
6646 Return the derivation paths, not the output paths, of the given
6647 packages.
6648
6649 @item --root=@var{file}
6650 @itemx -r @var{file}
6651 @cindex GC roots, adding
6652 @cindex garbage collector roots, adding
6653 Make @var{file} a symlink to the result, and register it as a garbage
6654 collector root.
6655
6656 Consequently, the results of this @command{guix build} invocation are
6657 protected from garbage collection until @var{file} is removed. When
6658 that option is omitted, build results are eligible for garbage
6659 collection as soon as the build completes. @xref{Invoking guix gc}, for
6660 more on GC roots.
6661
6662 @item --log-file
6663 @cindex build logs, access
6664 Return the build log file names or URLs for the given
6665 @var{package-or-derivation}, or raise an error if build logs are
6666 missing.
6667
6668 This works regardless of how packages or derivations are specified. For
6669 instance, the following invocations are equivalent:
6670
6671 @example
6672 guix build --log-file `guix build -d guile`
6673 guix build --log-file `guix build guile`
6674 guix build --log-file guile
6675 guix build --log-file -e '(@@ (gnu packages guile) guile-2.0)'
6676 @end example
6677
6678 If a log is unavailable locally, and unless @code{--no-substitutes} is
6679 passed, the command looks for a corresponding log on one of the
6680 substitute servers (as specified with @code{--substitute-urls}.)
6681
6682 So for instance, imagine you want to see the build log of GDB on MIPS,
6683 but you are actually on an @code{x86_64} machine:
6684
6685 @example
6686 $ guix build --log-file gdb -s mips64el-linux
6687 https://hydra.gnu.org/log/@dots{}-gdb-7.10
6688 @end example
6689
6690 You can freely access a huge library of build logs!
6691 @end table
6692
6693 @node Debugging Build Failures
6694 @subsection Debugging Build Failures
6695
6696 @cindex build failures, debugging
6697 When defining a new package (@pxref{Defining Packages}), you will
6698 probably find yourself spending some time debugging and tweaking the
6699 build until it succeeds. To do that, you need to operate the build
6700 commands yourself in an environment as close as possible to the one the
6701 build daemon uses.
6702
6703 To that end, the first thing to do is to use the @option{--keep-failed}
6704 or @option{-K} option of @command{guix build}, which will keep the
6705 failed build tree in @file{/tmp} or whatever directory you specified as
6706 @code{TMPDIR} (@pxref{Invoking guix build, @code{--keep-failed}}).
6707
6708 From there on, you can @command{cd} to the failed build tree and source
6709 the @file{environment-variables} file, which contains all the
6710 environment variable definitions that were in place when the build
6711 failed. So let's say you're debugging a build failure in package
6712 @code{foo}; a typical session would look like this:
6713
6714 @example
6715 $ guix build foo -K
6716 @dots{} @i{build fails}
6717 $ cd /tmp/guix-build-foo.drv-0
6718 $ source ./environment-variables
6719 $ cd foo-1.2
6720 @end example
6721
6722 Now, you can invoke commands as if you were the daemon (almost) and
6723 troubleshoot your build process.
6724
6725 Sometimes it happens that, for example, a package's tests pass when you
6726 run them manually but they fail when the daemon runs them. This can
6727 happen because the daemon runs builds in containers where, unlike in our
6728 environment above, network access is missing, @file{/bin/sh} does not
6729 exist, etc. (@pxref{Build Environment Setup}).
6730
6731 In such cases, you may need to run inspect the build process from within
6732 a container similar to the one the build daemon creates:
6733
6734 @example
6735 $ guix build -K foo
6736 @dots{}
6737 $ cd /tmp/guix-build-foo.drv-0
6738 $ guix environment --no-grafts -C foo --ad-hoc strace gdb
6739 [env]# source ./environment-variables
6740 [env]# cd foo-1.2
6741 @end example
6742
6743 Here, @command{guix environment -C} creates a container and spawns a new
6744 shell in it (@pxref{Invoking guix environment}). The @command{--ad-hoc
6745 strace gdb} part adds the @command{strace} and @command{gdb} commands to
6746 the container, which would may find handy while debugging. The
6747 @option{--no-grafts} option makes sure we get the exact same
6748 environment, with ungrafted packages (@pxref{Security Updates}, for more
6749 info on grafts).
6750
6751 To get closer to a container like that used by the build daemon, we can
6752 remove @file{/bin/sh}:
6753
6754 @example
6755 [env]# rm /bin/sh
6756 @end example
6757
6758 (Don't worry, this is harmless: this is all happening in the throw-away
6759 container created by @command{guix environment}.)
6760
6761 The @command{strace} command is probably not in the search path, but we
6762 can run:
6763
6764 @example
6765 [env]# $GUIX_ENVIRONMENT/bin/strace -f -o log make check
6766 @end example
6767
6768 In this way, not only you will have reproduced the environment variables
6769 the daemon uses, you will also be running the build process in a container
6770 similar to the one the daemon uses.
6771
6772
6773 @node Invoking guix edit
6774 @section Invoking @command{guix edit}
6775
6776 @cindex @command{guix edit}
6777 @cindex package definition, editing
6778 So many packages, so many source files! The @command{guix edit} command
6779 facilitates the life of users and packagers by pointing their editor at
6780 the source file containing the definition of the specified packages.
6781 For instance:
6782
6783 @example
6784 guix edit gcc@@4.9 vim
6785 @end example
6786
6787 @noindent
6788 launches the program specified in the @code{VISUAL} or in the
6789 @code{EDITOR} environment variable to view the recipe of GCC@tie{}4.9.3
6790 and that of Vim.
6791
6792 If you are using a Guix Git checkout (@pxref{Building from Git}), or
6793 have created your own packages on @code{GUIX_PACKAGE_PATH}
6794 (@pxref{Package Modules}), you will be able to edit the package
6795 recipes. In other cases, you will be able to examine the read-only recipes
6796 for packages currently in the store.
6797
6798
6799 @node Invoking guix download
6800 @section Invoking @command{guix download}
6801
6802 @cindex @command{guix download}
6803 @cindex downloading package sources
6804 When writing a package definition, developers typically need to download
6805 a source tarball, compute its SHA256 hash, and write that
6806 hash in the package definition (@pxref{Defining Packages}). The
6807 @command{guix download} tool helps with this task: it downloads a file
6808 from the given URI, adds it to the store, and prints both its file name
6809 in the store and its SHA256 hash.
6810
6811 The fact that the downloaded file is added to the store saves bandwidth:
6812 when the developer eventually tries to build the newly defined package
6813 with @command{guix build}, the source tarball will not have to be
6814 downloaded again because it is already in the store. It is also a
6815 convenient way to temporarily stash files, which may be deleted
6816 eventually (@pxref{Invoking guix gc}).
6817
6818 The @command{guix download} command supports the same URIs as used in
6819 package definitions. In particular, it supports @code{mirror://} URIs.
6820 @code{https} URIs (HTTP over TLS) are supported @emph{provided} the
6821 Guile bindings for GnuTLS are available in the user's environment; when
6822 they are not available, an error is raised. @xref{Guile Preparations,
6823 how to install the GnuTLS bindings for Guile,, gnutls-guile,
6824 GnuTLS-Guile}, for more information.
6825
6826 @command{guix download} verifies HTTPS server certificates by loading
6827 the certificates of X.509 authorities from the directory pointed to by
6828 the @code{SSL_CERT_DIR} environment variable (@pxref{X.509
6829 Certificates}), unless @option{--no-check-certificate} is used.
6830
6831 The following options are available:
6832
6833 @table @code
6834 @item --format=@var{fmt}
6835 @itemx -f @var{fmt}
6836 Write the hash in the format specified by @var{fmt}. For more
6837 information on the valid values for @var{fmt}, @pxref{Invoking guix hash}.
6838
6839 @item --no-check-certificate
6840 Do not validate the X.509 certificates of HTTPS servers.
6841
6842 When using this option, you have @emph{absolutely no guarantee} that you
6843 are communicating with the authentic server responsible for the given
6844 URL, which makes you vulnerable to ``man-in-the-middle'' attacks.
6845
6846 @item --output=@var{file}
6847 @itemx -o @var{file}
6848 Save the downloaded file to @var{file} instead of adding it to the
6849 store.
6850 @end table
6851
6852 @node Invoking guix hash
6853 @section Invoking @command{guix hash}
6854
6855 @cindex @command{guix hash}
6856 The @command{guix hash} command computes the SHA256 hash of a file.
6857 It is primarily a convenience tool for anyone contributing to the
6858 distribution: it computes the cryptographic hash of a file, which can be
6859 used in the definition of a package (@pxref{Defining Packages}).
6860
6861 The general syntax is:
6862
6863 @example
6864 guix hash @var{option} @var{file}
6865 @end example
6866
6867 When @var{file} is @code{-} (a hyphen), @command{guix hash} computes the
6868 hash of data read from standard input. @command{guix hash} has the
6869 following options:
6870
6871 @table @code
6872
6873 @item --format=@var{fmt}
6874 @itemx -f @var{fmt}
6875 Write the hash in the format specified by @var{fmt}.
6876
6877 Supported formats: @code{nix-base32}, @code{base32}, @code{base16}
6878 (@code{hex} and @code{hexadecimal} can be used as well).
6879
6880 If the @option{--format} option is not specified, @command{guix hash}
6881 will output the hash in @code{nix-base32}. This representation is used
6882 in the definitions of packages.
6883
6884 @item --recursive
6885 @itemx -r
6886 Compute the hash on @var{file} recursively.
6887
6888 In this case, the hash is computed on an archive containing @var{file},
6889 including its children if it is a directory. Some of the metadata of
6890 @var{file} is part of the archive; for instance, when @var{file} is a
6891 regular file, the hash is different depending on whether @var{file} is
6892 executable or not. Metadata such as time stamps has no impact on the
6893 hash (@pxref{Invoking guix archive}).
6894 @c FIXME: Replace xref above with xref to an ``Archive'' section when
6895 @c it exists.
6896
6897 @item --exclude-vcs
6898 @itemx -x
6899 When combined with @option{--recursive}, exclude version control system
6900 directories (@file{.bzr}, @file{.git}, @file{.hg}, etc.)
6901
6902 @vindex git-fetch
6903 As an example, here is how you would compute the hash of a Git checkout,
6904 which is useful when using the @code{git-fetch} method (@pxref{origin
6905 Reference}):
6906
6907 @example
6908 $ git clone http://example.org/foo.git
6909 $ cd foo
6910 $ guix hash -rx .
6911 @end example
6912 @end table
6913
6914 @node Invoking guix import
6915 @section Invoking @command{guix import}
6916
6917 @cindex importing packages
6918 @cindex package import
6919 @cindex package conversion
6920 @cindex Invoking @command{guix import}
6921 The @command{guix import} command is useful for people who would like to
6922 add a package to the distribution with as little work as
6923 possible---a legitimate demand. The command knows of a few
6924 repositories from which it can ``import'' package metadata. The result
6925 is a package definition, or a template thereof, in the format we know
6926 (@pxref{Defining Packages}).
6927
6928 The general syntax is:
6929
6930 @example
6931 guix import @var{importer} @var{options}@dots{}
6932 @end example
6933
6934 @var{importer} specifies the source from which to import package
6935 metadata, and @var{options} specifies a package identifier and other
6936 options specific to @var{importer}. Currently, the available
6937 ``importers'' are:
6938
6939 @table @code
6940 @item gnu
6941 Import metadata for the given GNU package. This provides a template
6942 for the latest version of that GNU package, including the hash of its
6943 source tarball, and its canonical synopsis and description.
6944
6945 Additional information such as the package dependencies and its
6946 license needs to be figured out manually.
6947
6948 For example, the following command returns a package definition for
6949 GNU@tie{}Hello:
6950
6951 @example
6952 guix import gnu hello
6953 @end example
6954
6955 Specific command-line options are:
6956
6957 @table @code
6958 @item --key-download=@var{policy}
6959 As for @code{guix refresh}, specify the policy to handle missing OpenPGP
6960 keys when verifying the package signature. @xref{Invoking guix
6961 refresh, @code{--key-download}}.
6962 @end table
6963
6964 @item pypi
6965 @cindex pypi
6966 Import metadata from the @uref{https://pypi.python.org/, Python Package
6967 Index}@footnote{This functionality requires Guile-JSON to be installed.
6968 @xref{Requirements}.}. Information is taken from the JSON-formatted
6969 description available at @code{pypi.python.org} and usually includes all
6970 the relevant information, including package dependencies. For maximum
6971 efficiency, it is recommended to install the @command{unzip} utility, so
6972 that the importer can unzip Python wheels and gather data from them.
6973
6974 The command below imports metadata for the @code{itsdangerous} Python
6975 package:
6976
6977 @example
6978 guix import pypi itsdangerous
6979 @end example
6980
6981 @table @code
6982 @item --recursive
6983 @itemx -r
6984 Traverse the dependency graph of the given upstream package recursively
6985 and generate package expressions for all those packages that are not yet
6986 in Guix.
6987 @end table
6988
6989 @item gem
6990 @cindex gem
6991 Import metadata from @uref{https://rubygems.org/,
6992 RubyGems}@footnote{This functionality requires Guile-JSON to be
6993 installed. @xref{Requirements}.}. Information is taken from the
6994 JSON-formatted description available at @code{rubygems.org} and includes
6995 most relevant information, including runtime dependencies. There are
6996 some caveats, however. The metadata doesn't distinguish between
6997 synopses and descriptions, so the same string is used for both fields.
6998 Additionally, the details of non-Ruby dependencies required to build
6999 native extensions is unavailable and left as an exercise to the
7000 packager.
7001
7002 The command below imports metadata for the @code{rails} Ruby package:
7003
7004 @example
7005 guix import gem rails
7006 @end example
7007
7008 @table @code
7009 @item --recursive
7010 @itemx -r
7011 Traverse the dependency graph of the given upstream package recursively
7012 and generate package expressions for all those packages that are not yet
7013 in Guix.
7014 @end table
7015
7016 @item cpan
7017 @cindex CPAN
7018 Import metadata from @uref{https://www.metacpan.org/, MetaCPAN}@footnote{This
7019 functionality requires Guile-JSON to be installed.
7020 @xref{Requirements}.}.
7021 Information is taken from the JSON-formatted metadata provided through
7022 @uref{https://fastapi.metacpan.org/, MetaCPAN's API} and includes most
7023 relevant information, such as module dependencies. License information
7024 should be checked closely. If Perl is available in the store, then the
7025 @code{corelist} utility will be used to filter core modules out of the
7026 list of dependencies.
7027
7028 The command command below imports metadata for the @code{Acme::Boolean}
7029 Perl module:
7030
7031 @example
7032 guix import cpan Acme::Boolean
7033 @end example
7034
7035 @item cran
7036 @cindex CRAN
7037 @cindex Bioconductor
7038 Import metadata from @uref{https://cran.r-project.org/, CRAN}, the
7039 central repository for the @uref{http://r-project.org, GNU@tie{}R
7040 statistical and graphical environment}.
7041
7042 Information is extracted from the @code{DESCRIPTION} file of the package.
7043
7044 The command command below imports metadata for the @code{Cairo}
7045 R package:
7046
7047 @example
7048 guix import cran Cairo
7049 @end example
7050
7051 When @code{--recursive} is added, the importer will traverse the
7052 dependency graph of the given upstream package recursively and generate
7053 package expressions for all those packages that are not yet in Guix.
7054
7055 When @code{--archive=bioconductor} is added, metadata is imported from
7056 @uref{https://www.bioconductor.org/, Bioconductor}, a repository of R
7057 packages for for the analysis and comprehension of high-throughput
7058 genomic data in bioinformatics.
7059
7060 Information is extracted from the @code{DESCRIPTION} file of a package
7061 published on the web interface of the Bioconductor SVN repository.
7062
7063 The command below imports metadata for the @code{GenomicRanges}
7064 R package:
7065
7066 @example
7067 guix import cran --archive=bioconductor GenomicRanges
7068 @end example
7069
7070 @item texlive
7071 @cindex TeX Live
7072 @cindex CTAN
7073 Import metadata from @uref{http://www.ctan.org/, CTAN}, the
7074 comprehensive TeX archive network for TeX packages that are part of the
7075 @uref{https://www.tug.org/texlive/, TeX Live distribution}.
7076
7077 Information about the package is obtained through the XML API provided
7078 by CTAN, while the source code is downloaded from the SVN repository of
7079 the Tex Live project. This is done because the CTAN does not keep
7080 versioned archives.
7081
7082 The command command below imports metadata for the @code{fontspec}
7083 TeX package:
7084
7085 @example
7086 guix import texlive fontspec
7087 @end example
7088
7089 When @code{--archive=DIRECTORY} is added, the source code is downloaded
7090 not from the @file{latex} sub-directory of the @file{texmf-dist/source}
7091 tree in the TeX Live SVN repository, but from the specified sibling
7092 directory under the same root.
7093
7094 The command below imports metadata for the @code{ifxetex} package from
7095 CTAN while fetching the sources from the directory
7096 @file{texmf/source/generic}:
7097
7098 @example
7099 guix import texlive --archive=generic ifxetex
7100 @end example
7101
7102 @item json
7103 @cindex JSON, import
7104 Import package metadata from a local JSON file@footnote{This
7105 functionality requires Guile-JSON to be installed.
7106 @xref{Requirements}.}. Consider the following example package
7107 definition in JSON format:
7108
7109 @example
7110 @{
7111 "name": "hello",
7112 "version": "2.10",
7113 "source": "mirror://gnu/hello/hello-2.10.tar.gz",
7114 "build-system": "gnu",
7115 "home-page": "https://www.gnu.org/software/hello/",
7116 "synopsis": "Hello, GNU world: An example GNU package",
7117 "description": "GNU Hello prints a greeting.",
7118 "license": "GPL-3.0+",
7119 "native-inputs": ["gcc@@6"]
7120 @}
7121 @end example
7122
7123 The field names are the same as for the @code{<package>} record
7124 (@xref{Defining Packages}). References to other packages are provided
7125 as JSON lists of quoted package specification strings such as
7126 @code{guile} or @code{guile@@2.0}.
7127
7128 The importer also supports a more explicit source definition using the
7129 common fields for @code{<origin>} records:
7130
7131 @example
7132 @{
7133 @dots{}
7134 "source": @{
7135 "method": "url-fetch",
7136 "uri": "mirror://gnu/hello/hello-2.10.tar.gz",
7137 "sha256": @{
7138 "base32": "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"
7139 @}
7140 @}
7141 @dots{}
7142 @}
7143 @end example
7144
7145 The command below reads metadata from the JSON file @code{hello.json}
7146 and outputs a package expression:
7147
7148 @example
7149 guix import json hello.json
7150 @end example
7151
7152 @item nix
7153 Import metadata from a local copy of the source of the
7154 @uref{http://nixos.org/nixpkgs/, Nixpkgs distribution}@footnote{This
7155 relies on the @command{nix-instantiate} command of
7156 @uref{http://nixos.org/nix/, Nix}.}. Package definitions in Nixpkgs are
7157 typically written in a mixture of Nix-language and Bash code. This
7158 command only imports the high-level package structure that is written in
7159 the Nix language. It normally includes all the basic fields of a
7160 package definition.
7161
7162 When importing a GNU package, the synopsis and descriptions are replaced
7163 by their canonical upstream variant.
7164
7165 Usually, you will first need to do:
7166
7167 @example
7168 export NIX_REMOTE=daemon
7169 @end example
7170
7171 @noindent
7172 so that @command{nix-instantiate} does not try to open the Nix database.
7173
7174 As an example, the command below imports the package definition of
7175 LibreOffice (more precisely, it imports the definition of the package
7176 bound to the @code{libreoffice} top-level attribute):
7177
7178 @example
7179 guix import nix ~/path/to/nixpkgs libreoffice
7180 @end example
7181
7182 @item hackage
7183 @cindex hackage
7184 Import metadata from the Haskell community's central package archive
7185 @uref{https://hackage.haskell.org/, Hackage}. Information is taken from
7186 Cabal files and includes all the relevant information, including package
7187 dependencies.
7188
7189 Specific command-line options are:
7190
7191 @table @code
7192 @item --stdin
7193 @itemx -s
7194 Read a Cabal file from standard input.
7195 @item --no-test-dependencies
7196 @itemx -t
7197 Do not include dependencies required only by the test suites.
7198 @item --cabal-environment=@var{alist}
7199 @itemx -e @var{alist}
7200 @var{alist} is a Scheme alist defining the environment in which the
7201 Cabal conditionals are evaluated. The accepted keys are: @code{os},
7202 @code{arch}, @code{impl} and a string representing the name of a flag.
7203 The value associated with a flag has to be either the symbol
7204 @code{true} or @code{false}. The value associated with other keys
7205 has to conform to the Cabal file format definition. The default value
7206 associated with the keys @code{os}, @code{arch} and @code{impl} is
7207 @samp{linux}, @samp{x86_64} and @samp{ghc}, respectively.
7208 @item --recursive
7209 @itemx -r
7210 Traverse the dependency graph of the given upstream package recursively
7211 and generate package expressions for all those packages that are not yet
7212 in Guix.
7213 @end table
7214
7215 The command below imports metadata for the latest version of the
7216 @code{HTTP} Haskell package without including test dependencies and
7217 specifying the value of the flag @samp{network-uri} as @code{false}:
7218
7219 @example
7220 guix import hackage -t -e "'((\"network-uri\" . false))" HTTP
7221 @end example
7222
7223 A specific package version may optionally be specified by following the
7224 package name by an at-sign and a version number as in the following example:
7225
7226 @example
7227 guix import hackage mtl@@2.1.3.1
7228 @end example
7229
7230 @item stackage
7231 @cindex stackage
7232 The @code{stackage} importer is a wrapper around the @code{hackage} one.
7233 It takes a package name, looks up the package version included in a
7234 long-term support (LTS) @uref{https://www.stackage.org, Stackage}
7235 release and uses the @code{hackage} importer to retrieve its metadata.
7236 Note that it is up to you to select an LTS release compatible with the
7237 GHC compiler used by Guix.
7238
7239 Specific command-line options are:
7240
7241 @table @code
7242 @item --no-test-dependencies
7243 @itemx -t
7244 Do not include dependencies required only by the test suites.
7245 @item --lts-version=@var{version}
7246 @itemx -l @var{version}
7247 @var{version} is the desired LTS release version. If omitted the latest
7248 release is used.
7249 @item --recursive
7250 @itemx -r
7251 Traverse the dependency graph of the given upstream package recursively
7252 and generate package expressions for all those packages that are not yet
7253 in Guix.
7254 @end table
7255
7256 The command below imports metadata for the @code{HTTP} Haskell package
7257 included in the LTS Stackage release version 7.18:
7258
7259 @example
7260 guix import stackage --lts-version=7.18 HTTP
7261 @end example
7262
7263 @item elpa
7264 @cindex elpa
7265 Import metadata from an Emacs Lisp Package Archive (ELPA) package
7266 repository (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
7267
7268 Specific command-line options are:
7269
7270 @table @code
7271 @item --archive=@var{repo}
7272 @itemx -a @var{repo}
7273 @var{repo} identifies the archive repository from which to retrieve the
7274 information. Currently the supported repositories and their identifiers
7275 are:
7276 @itemize -
7277 @item
7278 @uref{http://elpa.gnu.org/packages, GNU}, selected by the @code{gnu}
7279 identifier. This is the default.
7280
7281 Packages from @code{elpa.gnu.org} are signed with one of the keys
7282 contained in the GnuPG keyring at
7283 @file{share/emacs/25.1/etc/package-keyring.gpg} (or similar) in the
7284 @code{emacs} package (@pxref{Package Installation, ELPA package
7285 signatures,, emacs, The GNU Emacs Manual}).
7286
7287 @item
7288 @uref{http://stable.melpa.org/packages, MELPA-Stable}, selected by the
7289 @code{melpa-stable} identifier.
7290
7291 @item
7292 @uref{http://melpa.org/packages, MELPA}, selected by the @code{melpa}
7293 identifier.
7294 @end itemize
7295
7296 @item --recursive
7297 @itemx -r
7298 Traverse the dependency graph of the given upstream package recursively
7299 and generate package expressions for all those packages that are not yet
7300 in Guix.
7301 @end table
7302
7303 @item crate
7304 @cindex crate
7305 Import metadata from the crates.io Rust package repository
7306 @uref{https://crates.io, crates.io}.
7307
7308 @item opam
7309 @cindex OPAM
7310 @cindex OCaml
7311 Import metadata from the @uref{https://opam.ocaml.org/, OPAM} package
7312 repository used by the OCaml community.
7313 @end table
7314
7315 The structure of the @command{guix import} code is modular. It would be
7316 useful to have more importers for other package formats, and your help
7317 is welcome here (@pxref{Contributing}).
7318
7319 @node Invoking guix refresh
7320 @section Invoking @command{guix refresh}
7321
7322 @cindex @command {guix refresh}
7323 The primary audience of the @command{guix refresh} command is developers
7324 of the GNU software distribution. By default, it reports any packages
7325 provided by the distribution that are outdated compared to the latest
7326 upstream version, like this:
7327
7328 @example
7329 $ guix refresh
7330 gnu/packages/gettext.scm:29:13: gettext would be upgraded from 0.18.1.1 to 0.18.2.1
7331 gnu/packages/glib.scm:77:12: glib would be upgraded from 2.34.3 to 2.37.0
7332 @end example
7333
7334 Alternately, one can specify packages to consider, in which case a
7335 warning is emitted for packages that lack an updater:
7336
7337 @example
7338 $ guix refresh coreutils guile guile-ssh
7339 gnu/packages/ssh.scm:205:2: warning: no updater for guile-ssh
7340 gnu/packages/guile.scm:136:12: guile would be upgraded from 2.0.12 to 2.0.13
7341 @end example
7342
7343 @command{guix refresh} browses the upstream repository of each package and determines
7344 the highest version number of the releases therein. The command
7345 knows how to update specific types of packages: GNU packages, ELPA
7346 packages, etc.---see the documentation for @option{--type} below. There
7347 are many packages, though, for which it lacks a method to determine
7348 whether a new upstream release is available. However, the mechanism is
7349 extensible, so feel free to get in touch with us to add a new method!
7350
7351 Sometimes the upstream name differs from the package name used in Guix,
7352 and @command{guix refresh} needs a little help. Most updaters honor the
7353 @code{upstream-name} property in package definitions, which can be used
7354 to that effect:
7355
7356 @example
7357 (define-public network-manager
7358 (package
7359 (name "network-manager")
7360 ;; @dots{}
7361 (properties '((upstream-name . "NetworkManager")))))
7362 @end example
7363
7364 When passed @code{--update}, it modifies distribution source files to
7365 update the version numbers and source tarball hashes of those package
7366 recipes (@pxref{Defining Packages}). This is achieved by downloading
7367 each package's latest source tarball and its associated OpenPGP
7368 signature, authenticating the downloaded tarball against its signature
7369 using @command{gpg}, and finally computing its hash. When the public
7370 key used to sign the tarball is missing from the user's keyring, an
7371 attempt is made to automatically retrieve it from a public key server;
7372 when this is successful, the key is added to the user's keyring; otherwise,
7373 @command{guix refresh} reports an error.
7374
7375 The following options are supported:
7376
7377 @table @code
7378
7379 @item --expression=@var{expr}
7380 @itemx -e @var{expr}
7381 Consider the package @var{expr} evaluates to.
7382
7383 This is useful to precisely refer to a package, as in this example:
7384
7385 @example
7386 guix refresh -l -e '(@@@@ (gnu packages commencement) glibc-final)'
7387 @end example
7388
7389 This command lists the dependents of the ``final'' libc (essentially all
7390 the packages.)
7391
7392 @item --update
7393 @itemx -u
7394 Update distribution source files (package recipes) in place. This is
7395 usually run from a checkout of the Guix source tree (@pxref{Running
7396 Guix Before It Is Installed}):
7397
7398 @example
7399 $ ./pre-inst-env guix refresh -s non-core -u
7400 @end example
7401
7402 @xref{Defining Packages}, for more information on package definitions.
7403
7404 @item --select=[@var{subset}]
7405 @itemx -s @var{subset}
7406 Select all the packages in @var{subset}, one of @code{core} or
7407 @code{non-core}.
7408
7409 The @code{core} subset refers to all the packages at the core of the
7410 distribution---i.e., packages that are used to build ``everything
7411 else''. This includes GCC, libc, Binutils, Bash, etc. Usually,
7412 changing one of these packages in the distribution entails a rebuild of
7413 all the others. Thus, such updates are an inconvenience to users in
7414 terms of build time or bandwidth used to achieve the upgrade.
7415
7416 The @code{non-core} subset refers to the remaining packages. It is
7417 typically useful in cases where an update of the core packages would be
7418 inconvenient.
7419
7420 @item --manifest=@var{file}
7421 @itemx -m @var{file}
7422 Select all the packages from the manifest in @var{file}. This is useful to
7423 check if any packages of the user manifest can be updated.
7424
7425 @item --type=@var{updater}
7426 @itemx -t @var{updater}
7427 Select only packages handled by @var{updater} (may be a comma-separated
7428 list of updaters). Currently, @var{updater} may be one of:
7429
7430 @table @code
7431 @item gnu
7432 the updater for GNU packages;
7433 @item gnome
7434 the updater for GNOME packages;
7435 @item kde
7436 the updater for KDE packages;
7437 @item xorg
7438 the updater for X.org packages;
7439 @item kernel.org
7440 the updater for packages hosted on kernel.org;
7441 @item elpa
7442 the updater for @uref{http://elpa.gnu.org/, ELPA} packages;
7443 @item cran
7444 the updater for @uref{https://cran.r-project.org/, CRAN} packages;
7445 @item bioconductor
7446 the updater for @uref{https://www.bioconductor.org/, Bioconductor} R packages;
7447 @item cpan
7448 the updater for @uref{http://www.cpan.org/, CPAN} packages;
7449 @item pypi
7450 the updater for @uref{https://pypi.python.org, PyPI} packages.
7451 @item gem
7452 the updater for @uref{https://rubygems.org, RubyGems} packages.
7453 @item github
7454 the updater for @uref{https://github.com, GitHub} packages.
7455 @item hackage
7456 the updater for @uref{https://hackage.haskell.org, Hackage} packages.
7457 @item stackage
7458 the updater for @uref{https://www.stackage.org, Stackage} packages.
7459 @item crate
7460 the updater for @uref{https://crates.io, Crates} packages.
7461 @end table
7462
7463 For instance, the following command only checks for updates of Emacs
7464 packages hosted at @code{elpa.gnu.org} and for updates of CRAN packages:
7465
7466 @example
7467 $ guix refresh --type=elpa,cran
7468 gnu/packages/statistics.scm:819:13: r-testthat would be upgraded from 0.10.0 to 0.11.0
7469 gnu/packages/emacs.scm:856:13: emacs-auctex would be upgraded from 11.88.6 to 11.88.9
7470 @end example
7471
7472 @end table
7473
7474 In addition, @command{guix refresh} can be passed one or more package
7475 names, as in this example:
7476
7477 @example
7478 $ ./pre-inst-env guix refresh -u emacs idutils gcc@@4.8
7479 @end example
7480
7481 @noindent
7482 The command above specifically updates the @code{emacs} and
7483 @code{idutils} packages. The @code{--select} option would have no
7484 effect in this case.
7485
7486 When considering whether to upgrade a package, it is sometimes
7487 convenient to know which packages would be affected by the upgrade and
7488 should be checked for compatibility. For this the following option may
7489 be used when passing @command{guix refresh} one or more package names:
7490
7491 @table @code
7492
7493 @item --list-updaters
7494 @itemx -L
7495 List available updaters and exit (see @option{--type} above.)
7496
7497 For each updater, display the fraction of packages it covers; at the
7498 end, display the fraction of packages covered by all these updaters.
7499
7500 @item --list-dependent
7501 @itemx -l
7502 List top-level dependent packages that would need to be rebuilt as a
7503 result of upgrading one or more packages.
7504
7505 @xref{Invoking guix graph, the @code{reverse-package} type of
7506 @command{guix graph}}, for information on how to visualize the list of
7507 dependents of a package.
7508
7509 @end table
7510
7511 Be aware that the @code{--list-dependent} option only
7512 @emph{approximates} the rebuilds that would be required as a result of
7513 an upgrade. More rebuilds might be required under some circumstances.
7514
7515 @example
7516 $ guix refresh --list-dependent flex
7517 Building the following 120 packages would ensure 213 dependent packages are rebuilt:
7518 hop@@2.4.0 geiser@@0.4 notmuch@@0.18 mu@@0.9.9.5 cflow@@1.4 idutils@@4.6 @dots{}
7519 @end example
7520
7521 The command above lists a set of packages that could be built to check
7522 for compatibility with an upgraded @code{flex} package.
7523
7524 The following options can be used to customize GnuPG operation:
7525
7526 @table @code
7527
7528 @item --gpg=@var{command}
7529 Use @var{command} as the GnuPG 2.x command. @var{command} is searched
7530 for in @code{$PATH}.
7531
7532 @item --keyring=@var{file}
7533 Use @var{file} as the keyring for upstream keys. @var{file} must be in the
7534 @dfn{keybox format}. Keybox files usually have a name ending in @file{.kbx}
7535 and the GNU@tie{}Privacy Guard (GPG) can manipulate these files
7536 (@pxref{kbxutil, @command{kbxutil},, gnupg, Using the GNU Privacy Guard}, for
7537 information on a tool to manipulate keybox files).
7538
7539 When this option is omitted, @command{guix refresh} uses
7540 @file{~/.config/guix/upstream/trustedkeys.kbx} as the keyring for upstream
7541 signing keys. OpenPGP signatures are checked against keys from this keyring;
7542 missing keys are downloaded to this keyring as well (see
7543 @option{--key-download} below.)
7544
7545 You can export keys from your default GPG keyring into a keybox file using
7546 commands like this one:
7547
7548 @example
7549 gpg --export rms@@gnu.org | kbxutil --import-openpgp >> mykeyring.kbx
7550 @end example
7551
7552 Likewise, you can fetch keys to a specific keybox file like this:
7553
7554 @example
7555 gpg --no-default-keyring --keyring mykeyring.kbx \
7556 --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
7557 @end example
7558
7559 @ref{GPG Configuration Options, @option{--keyring},, gnupg, Using the GNU
7560 Privacy Guard}, for more information on GPG's @option{--keyring} option.
7561
7562 @item --key-download=@var{policy}
7563 Handle missing OpenPGP keys according to @var{policy}, which may be one
7564 of:
7565
7566 @table @code
7567 @item always
7568 Always download missing OpenPGP keys from the key server, and add them
7569 to the user's GnuPG keyring.
7570
7571 @item never
7572 Never try to download missing OpenPGP keys. Instead just bail out.
7573
7574 @item interactive
7575 When a package signed with an unknown OpenPGP key is encountered, ask
7576 the user whether to download it or not. This is the default behavior.
7577 @end table
7578
7579 @item --key-server=@var{host}
7580 Use @var{host} as the OpenPGP key server when importing a public key.
7581
7582 @end table
7583
7584 The @code{github} updater uses the
7585 @uref{https://developer.github.com/v3/, GitHub API} to query for new
7586 releases. When used repeatedly e.g. when refreshing all packages,
7587 GitHub will eventually refuse to answer any further API requests. By
7588 default 60 API requests per hour are allowed, and a full refresh on all
7589 GitHub packages in Guix requires more than this. Authentication with
7590 GitHub through the use of an API token alleviates these limits. To use
7591 an API token, set the environment variable @code{GUIX_GITHUB_TOKEN} to a
7592 token procured from @uref{https://github.com/settings/tokens} or
7593 otherwise.
7594
7595
7596 @node Invoking guix lint
7597 @section Invoking @command{guix lint}
7598
7599 @cindex @command{guix lint}
7600 @cindex package, checking for errors
7601 The @command{guix lint} command is meant to help package developers avoid
7602 common errors and use a consistent style. It runs a number of checks on
7603 a given set of packages in order to find common mistakes in their
7604 definitions. Available @dfn{checkers} include (see
7605 @code{--list-checkers} for a complete list):
7606
7607 @table @code
7608 @item synopsis
7609 @itemx description
7610 Validate certain typographical and stylistic rules about package
7611 descriptions and synopses.
7612
7613 @item inputs-should-be-native
7614 Identify inputs that should most likely be native inputs.
7615
7616 @item source
7617 @itemx home-page
7618 @itemx mirror-url
7619 @itemx source-file-name
7620 Probe @code{home-page} and @code{source} URLs and report those that are
7621 invalid. Suggest a @code{mirror://} URL when applicable. Check that
7622 the source file name is meaningful, e.g. is not
7623 just a version number or ``git-checkout'', without a declared
7624 @code{file-name} (@pxref{origin Reference}).
7625
7626 @item cve
7627 @cindex security vulnerabilities
7628 @cindex CVE, Common Vulnerabilities and Exposures
7629 Report known vulnerabilities found in the Common Vulnerabilities and
7630 Exposures (CVE) databases of the current and past year
7631 @uref{https://nvd.nist.gov/download.cfm#CVE_FEED, published by the US
7632 NIST}.
7633
7634 To view information about a particular vulnerability, visit pages such as:
7635
7636 @itemize
7637 @item
7638 @indicateurl{https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-YYYY-ABCD}
7639 @item
7640 @indicateurl{https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-YYYY-ABCD}
7641 @end itemize
7642
7643 @noindent
7644 where @code{CVE-YYYY-ABCD} is the CVE identifier---e.g.,
7645 @code{CVE-2015-7554}.
7646
7647 Package developers can specify in package recipes the
7648 @uref{https://nvd.nist.gov/cpe.cfm,Common Platform Enumeration (CPE)}
7649 name and version of the package when they differ from the name or version
7650 that Guix uses, as in this example:
7651
7652 @example
7653 (package
7654 (name "grub")
7655 ;; @dots{}
7656 ;; CPE calls this package "grub2".
7657 (properties '((cpe-name . "grub2")
7658 (cpe-version . "2.3")))
7659 @end example
7660
7661 @c See <http://www.openwall.com/lists/oss-security/2017/03/15/3>.
7662 Some entries in the CVE database do not specify which version of a
7663 package they apply to, and would thus ``stick around'' forever. Package
7664 developers who found CVE alerts and verified they can be ignored can
7665 declare them as in this example:
7666
7667 @example
7668 (package
7669 (name "t1lib")
7670 ;; @dots{}
7671 ;; These CVEs no longer apply and can be safely ignored.
7672 (properties `((lint-hidden-cve . ("CVE-2011-0433"
7673 "CVE-2011-1553"
7674 "CVE-2011-1554"
7675 "CVE-2011-5244")))))
7676 @end example
7677
7678 @item formatting
7679 Warn about obvious source code formatting issues: trailing white space,
7680 use of tabulations, etc.
7681 @end table
7682
7683 The general syntax is:
7684
7685 @example
7686 guix lint @var{options} @var{package}@dots{}
7687 @end example
7688
7689 If no package is given on the command line, then all packages are checked.
7690 The @var{options} may be zero or more of the following:
7691
7692 @table @code
7693 @item --list-checkers
7694 @itemx -l
7695 List and describe all the available checkers that will be run on packages
7696 and exit.
7697
7698 @item --checkers
7699 @itemx -c
7700 Only enable the checkers specified in a comma-separated list using the
7701 names returned by @code{--list-checkers}.
7702
7703 @end table
7704
7705 @node Invoking guix size
7706 @section Invoking @command{guix size}
7707
7708 @cindex size
7709 @cindex package size
7710 @cindex closure
7711 @cindex @command{guix size}
7712 The @command{guix size} command helps package developers profile the
7713 disk usage of packages. It is easy to overlook the impact of an
7714 additional dependency added to a package, or the impact of using a
7715 single output for a package that could easily be split (@pxref{Packages
7716 with Multiple Outputs}). Such are the typical issues that
7717 @command{guix size} can highlight.
7718
7719 The command can be passed one or more package specifications
7720 such as @code{gcc@@4.8}
7721 or @code{guile:debug}, or a file name in the store. Consider this
7722 example:
7723
7724 @example
7725 $ guix size coreutils
7726 store item total self
7727 /gnu/store/@dots{}-gcc-5.5.0-lib 60.4 30.1 38.1%
7728 /gnu/store/@dots{}-glibc-2.27 30.3 28.8 36.6%
7729 /gnu/store/@dots{}-coreutils-8.28 78.9 15.0 19.0%
7730 /gnu/store/@dots{}-gmp-6.1.2 63.1 2.7 3.4%
7731 /gnu/store/@dots{}-bash-static-4.4.12 1.5 1.5 1.9%
7732 /gnu/store/@dots{}-acl-2.2.52 61.1 0.4 0.5%
7733 /gnu/store/@dots{}-attr-2.4.47 60.6 0.2 0.3%
7734 /gnu/store/@dots{}-libcap-2.25 60.5 0.2 0.2%
7735 total: 78.9 MiB
7736 @end example
7737
7738 @cindex closure
7739 The store items listed here constitute the @dfn{transitive closure} of
7740 Coreutils---i.e., Coreutils and all its dependencies, recursively---as
7741 would be returned by:
7742
7743 @example
7744 $ guix gc -R /gnu/store/@dots{}-coreutils-8.23
7745 @end example
7746
7747 Here the output shows three columns next to store items. The first column,
7748 labeled ``total'', shows the size in mebibytes (MiB) of the closure of
7749 the store item---that is, its own size plus the size of all its
7750 dependencies. The next column, labeled ``self'', shows the size of the
7751 item itself. The last column shows the ratio of the size of the item
7752 itself to the space occupied by all the items listed here.
7753
7754 In this example, we see that the closure of Coreutils weighs in at
7755 79@tie{}MiB, most of which is taken by libc and GCC's run-time support
7756 libraries. (That libc and GCC's libraries represent a large fraction of
7757 the closure is not a problem @i{per se} because they are always available
7758 on the system anyway.)
7759
7760 When the package(s) passed to @command{guix size} are available in the
7761 store@footnote{More precisely, @command{guix size} looks for the
7762 @emph{ungrafted} variant of the given package(s), as returned by
7763 @code{guix build @var{package} --no-grafts}. @xref{Security Updates},
7764 for information on grafts.}, @command{guix size} queries the daemon to determine its
7765 dependencies, and measures its size in the store, similar to @command{du
7766 -ms --apparent-size} (@pxref{du invocation,,, coreutils, GNU
7767 Coreutils}).
7768
7769 When the given packages are @emph{not} in the store, @command{guix size}
7770 reports information based on the available substitutes
7771 (@pxref{Substitutes}). This makes it possible it to profile disk usage of
7772 store items that are not even on disk, only available remotely.
7773
7774 You can also specify several package names:
7775
7776 @example
7777 $ guix size coreutils grep sed bash
7778 store item total self
7779 /gnu/store/@dots{}-coreutils-8.24 77.8 13.8 13.4%
7780 /gnu/store/@dots{}-grep-2.22 73.1 0.8 0.8%
7781 /gnu/store/@dots{}-bash-4.3.42 72.3 4.7 4.6%
7782 /gnu/store/@dots{}-readline-6.3 67.6 1.2 1.2%
7783 @dots{}
7784 total: 102.3 MiB
7785 @end example
7786
7787 @noindent
7788 In this example we see that the combination of the four packages takes
7789 102.3@tie{}MiB in total, which is much less than the sum of each closure
7790 since they have a lot of dependencies in common.
7791
7792 The available options are:
7793
7794 @table @option
7795
7796 @item --substitute-urls=@var{urls}
7797 Use substitute information from @var{urls}.
7798 @xref{client-substitute-urls, the same option for @code{guix build}}.
7799
7800 @item --sort=@var{key}
7801 Sort lines according to @var{key}, one of the following options:
7802
7803 @table @code
7804 @item self
7805 the size of each item (the default);
7806 @item closure
7807 the total size of the item's closure.
7808 @end table
7809
7810 @item --map-file=@var{file}
7811 Write a graphical map of disk usage in PNG format to @var{file}.
7812
7813 For the example above, the map looks like this:
7814
7815 @image{images/coreutils-size-map,5in,, map of Coreutils disk usage
7816 produced by @command{guix size}}
7817
7818 This option requires that
7819 @uref{http://wingolog.org/software/guile-charting/, Guile-Charting} be
7820 installed and visible in Guile's module search path. When that is not
7821 the case, @command{guix size} fails as it tries to load it.
7822
7823 @item --system=@var{system}
7824 @itemx -s @var{system}
7825 Consider packages for @var{system}---e.g., @code{x86_64-linux}.
7826
7827 @end table
7828
7829 @node Invoking guix graph
7830 @section Invoking @command{guix graph}
7831
7832 @cindex DAG
7833 @cindex @command{guix graph}
7834 @cindex package dependencies
7835 Packages and their dependencies form a @dfn{graph}, specifically a
7836 directed acyclic graph (DAG). It can quickly become difficult to have a
7837 mental model of the package DAG, so the @command{guix graph} command
7838 provides a visual representation of the DAG. By default,
7839 @command{guix graph} emits a DAG representation in the input format of
7840 @uref{http://www.graphviz.org/, Graphviz}, so its output can be passed
7841 directly to the @command{dot} command of Graphviz. It can also emit an
7842 HTML page with embedded JavaScript code to display a ``chord diagram''
7843 in a Web browser, using the @uref{https://d3js.org/, d3.js} library, or
7844 emit Cypher queries to construct a graph in a graph database supporting
7845 the @uref{http://www.opencypher.org/, openCypher} query language.
7846 The general syntax is:
7847
7848 @example
7849 guix graph @var{options} @var{package}@dots{}
7850 @end example
7851
7852 For example, the following command generates a PDF file representing the
7853 package DAG for the GNU@tie{}Core Utilities, showing its build-time
7854 dependencies:
7855
7856 @example
7857 guix graph coreutils | dot -Tpdf > dag.pdf
7858 @end example
7859
7860 The output looks like this:
7861
7862 @image{images/coreutils-graph,2in,,Dependency graph of the GNU Coreutils}
7863
7864 Nice little graph, no?
7865
7866 But there is more than one graph! The one above is concise: it is the
7867 graph of package objects, omitting implicit inputs such as GCC, libc,
7868 grep, etc. It is often useful to have such a concise graph, but
7869 sometimes one may want to see more details. @command{guix graph} supports
7870 several types of graphs, allowing you to choose the level of detail:
7871
7872 @table @code
7873 @item package
7874 This is the default type used in the example above. It shows the DAG of
7875 package objects, excluding implicit dependencies. It is concise, but
7876 filters out many details.
7877
7878 @item reverse-package
7879 This shows the @emph{reverse} DAG of packages. For example:
7880
7881 @example
7882 guix graph --type=reverse-package ocaml
7883 @end example
7884
7885 ... yields the graph of packages that depend on OCaml.
7886
7887 Note that for core packages this can yield huge graphs. If all you want
7888 is to know the number of packages that depend on a given package, use
7889 @command{guix refresh --list-dependent} (@pxref{Invoking guix refresh,
7890 @option{--list-dependent}}).
7891
7892 @item bag-emerged
7893 This is the package DAG, @emph{including} implicit inputs.
7894
7895 For instance, the following command:
7896
7897 @example
7898 guix graph --type=bag-emerged coreutils | dot -Tpdf > dag.pdf
7899 @end example
7900
7901 ... yields this bigger graph:
7902
7903 @image{images/coreutils-bag-graph,,5in,Detailed dependency graph of the GNU Coreutils}
7904
7905 At the bottom of the graph, we see all the implicit inputs of
7906 @var{gnu-build-system} (@pxref{Build Systems, @code{gnu-build-system}}).
7907
7908 Now, note that the dependencies of these implicit inputs---that is, the
7909 @dfn{bootstrap dependencies} (@pxref{Bootstrapping})---are not shown
7910 here, for conciseness.
7911
7912 @item bag
7913 Similar to @code{bag-emerged}, but this time including all the bootstrap
7914 dependencies.
7915
7916 @item bag-with-origins
7917 Similar to @code{bag}, but also showing origins and their dependencies.
7918
7919 @item derivation
7920 This is the most detailed representation: It shows the DAG of
7921 derivations (@pxref{Derivations}) and plain store items. Compared to
7922 the above representation, many additional nodes are visible, including
7923 build scripts, patches, Guile modules, etc.
7924
7925 For this type of graph, it is also possible to pass a @file{.drv} file
7926 name instead of a package name, as in:
7927
7928 @example
7929 guix graph -t derivation `guix system build -d my-config.scm`
7930 @end example
7931
7932 @item module
7933 This is the graph of @dfn{package modules} (@pxref{Package Modules}).
7934 For example, the following command shows the graph for the package
7935 module that defines the @code{guile} package:
7936
7937 @example
7938 guix graph -t module guile | dot -Tpdf > module-graph.pdf
7939 @end example
7940 @end table
7941
7942 All the types above correspond to @emph{build-time dependencies}. The
7943 following graph type represents the @emph{run-time dependencies}:
7944
7945 @table @code
7946 @item references
7947 This is the graph of @dfn{references} of a package output, as returned
7948 by @command{guix gc --references} (@pxref{Invoking guix gc}).
7949
7950 If the given package output is not available in the store, @command{guix
7951 graph} attempts to obtain dependency information from substitutes.
7952
7953 Here you can also pass a store file name instead of a package name. For
7954 example, the command below produces the reference graph of your profile
7955 (which can be big!):
7956
7957 @example
7958 guix graph -t references `readlink -f ~/.guix-profile`
7959 @end example
7960
7961 @item referrers
7962 This is the graph of the @dfn{referrers} of a store item, as returned by
7963 @command{guix gc --referrers} (@pxref{Invoking guix gc}).
7964
7965 This relies exclusively on local information from your store. For
7966 instance, let us suppose that the current Inkscape is available in 10
7967 profiles on your machine; @command{guix graph -t referrers inkscape}
7968 will show a graph rooted at Inkscape and with those 10 profiles linked
7969 to it.
7970
7971 It can help determine what is preventing a store item from being garbage
7972 collected.
7973
7974 @end table
7975
7976 The available options are the following:
7977
7978 @table @option
7979 @item --type=@var{type}
7980 @itemx -t @var{type}
7981 Produce a graph output of @var{type}, where @var{type} must be one of
7982 the values listed above.
7983
7984 @item --list-types
7985 List the supported graph types.
7986
7987 @item --backend=@var{backend}
7988 @itemx -b @var{backend}
7989 Produce a graph using the selected @var{backend}.
7990
7991 @item --list-backends
7992 List the supported graph backends.
7993
7994 Currently, the available backends are Graphviz and d3.js.
7995
7996 @item --expression=@var{expr}
7997 @itemx -e @var{expr}
7998 Consider the package @var{expr} evaluates to.
7999
8000 This is useful to precisely refer to a package, as in this example:
8001
8002 @example
8003 guix graph -e '(@@@@ (gnu packages commencement) gnu-make-final)'
8004 @end example
8005
8006 @item --system=@var{system}
8007 @itemx -s @var{system}
8008 Display the graph for @var{system}---e.g., @code{i686-linux}.
8009
8010 The package dependency graph is largely architecture-independent, but there
8011 are some architecture-dependent bits that this option allows you to visualize.
8012 @end table
8013
8014
8015 @node Invoking guix environment
8016 @section Invoking @command{guix environment}
8017
8018 @cindex reproducible build environments
8019 @cindex development environments
8020 @cindex @command{guix environment}
8021 @cindex environment, package build environment
8022 The purpose of @command{guix environment} is to assist hackers in
8023 creating reproducible development environments without polluting their
8024 package profile. The @command{guix environment} tool takes one or more
8025 packages, builds all of their inputs, and creates a shell
8026 environment to use them.
8027
8028 The general syntax is:
8029
8030 @example
8031 guix environment @var{options} @var{package}@dots{}
8032 @end example
8033
8034 The following example spawns a new shell set up for the development of
8035 GNU@tie{}Guile:
8036
8037 @example
8038 guix environment guile
8039 @end example
8040
8041 If the needed dependencies are not built yet, @command{guix environment}
8042 automatically builds them. The environment of the new shell is an augmented
8043 version of the environment that @command{guix environment} was run in.
8044 It contains the necessary search paths for building the given package
8045 added to the existing environment variables. To create a ``pure''
8046 environment, in which the original environment variables have been unset,
8047 use the @code{--pure} option@footnote{Users sometimes wrongfully augment
8048 environment variables such as @code{PATH} in their @file{~/.bashrc}
8049 file. As a consequence, when @code{guix environment} launches it, Bash
8050 may read @file{~/.bashrc}, thereby introducing ``impurities'' in these
8051 environment variables. It is an error to define such environment
8052 variables in @file{.bashrc}; instead, they should be defined in
8053 @file{.bash_profile}, which is sourced only by log-in shells.
8054 @xref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}, for
8055 details on Bash start-up files.}.
8056
8057 @vindex GUIX_ENVIRONMENT
8058 @command{guix environment} defines the @code{GUIX_ENVIRONMENT}
8059 variable in the shell it spawns; its value is the file name of the
8060 profile of this environment. This allows users to, say, define a
8061 specific prompt for development environments in their @file{.bashrc}
8062 (@pxref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}):
8063
8064 @example
8065 if [ -n "$GUIX_ENVIRONMENT" ]
8066 then
8067 export PS1="\u@@\h \w [dev]\$ "
8068 fi
8069 @end example
8070
8071 @noindent
8072 ... or to browse the profile:
8073
8074 @example
8075 $ ls "$GUIX_ENVIRONMENT/bin"
8076 @end example
8077
8078 Additionally, more than one package may be specified, in which case the
8079 union of the inputs for the given packages are used. For example, the
8080 command below spawns a shell where all of the dependencies of both Guile
8081 and Emacs are available:
8082
8083 @example
8084 guix environment guile emacs
8085 @end example
8086
8087 Sometimes an interactive shell session is not desired. An arbitrary
8088 command may be invoked by placing the @code{--} token to separate the
8089 command from the rest of the arguments:
8090
8091 @example
8092 guix environment guile -- make -j4
8093 @end example
8094
8095 In other situations, it is more convenient to specify the list of
8096 packages needed in the environment. For example, the following command
8097 runs @command{python} from an environment containing Python@tie{}2.7 and
8098 NumPy:
8099
8100 @example
8101 guix environment --ad-hoc python2-numpy python-2.7 -- python
8102 @end example
8103
8104 Furthermore, one might want the dependencies of a package and also some
8105 additional packages that are not build-time or runtime dependencies, but
8106 are useful when developing nonetheless. Because of this, the
8107 @code{--ad-hoc} flag is positional. Packages appearing before
8108 @code{--ad-hoc} are interpreted as packages whose dependencies will be
8109 added to the environment. Packages appearing after are interpreted as
8110 packages that will be added to the environment directly. For example,
8111 the following command creates a Guix development environment that
8112 additionally includes Git and strace:
8113
8114 @example
8115 guix environment guix --ad-hoc git strace
8116 @end example
8117
8118 Sometimes it is desirable to isolate the environment as much as
8119 possible, for maximal purity and reproducibility. In particular, when
8120 using Guix on a host distro that is not GuixSD, it is desirable to
8121 prevent access to @file{/usr/bin} and other system-wide resources from
8122 the development environment. For example, the following command spawns
8123 a Guile REPL in a ``container'' where only the store and the current
8124 working directory are mounted:
8125
8126 @example
8127 guix environment --ad-hoc --container guile -- guile
8128 @end example
8129
8130 @quotation Note
8131 The @code{--container} option requires Linux-libre 3.19 or newer.
8132 @end quotation
8133
8134 The available options are summarized below.
8135
8136 @table @code
8137 @item --root=@var{file}
8138 @itemx -r @var{file}
8139 @cindex persistent environment
8140 @cindex garbage collector root, for environments
8141 Make @var{file} a symlink to the profile for this environment, and
8142 register it as a garbage collector root.
8143
8144 This is useful if you want to protect your environment from garbage
8145 collection, to make it ``persistent''.
8146
8147 When this option is omitted, the environment is protected from garbage
8148 collection only for the duration of the @command{guix environment}
8149 session. This means that next time you recreate the same environment,
8150 you could have to rebuild or re-download packages. @xref{Invoking guix
8151 gc}, for more on GC roots.
8152
8153 @item --expression=@var{expr}
8154 @itemx -e @var{expr}
8155 Create an environment for the package or list of packages that
8156 @var{expr} evaluates to.
8157
8158 For example, running:
8159
8160 @example
8161 guix environment -e '(@@ (gnu packages maths) petsc-openmpi)'
8162 @end example
8163
8164 starts a shell with the environment for this specific variant of the
8165 PETSc package.
8166
8167 Running:
8168
8169 @example
8170 guix environment --ad-hoc -e '(@@ (gnu) %base-packages)'
8171 @end example
8172
8173 starts a shell with all the GuixSD base packages available.
8174
8175 The above commands only use the default output of the given packages.
8176 To select other outputs, two element tuples can be specified:
8177
8178 @example
8179 guix environment --ad-hoc -e '(list (@@ (gnu packages bash) bash) "include")'
8180 @end example
8181
8182 @item --load=@var{file}
8183 @itemx -l @var{file}
8184 Create an environment for the package or list of packages that the code
8185 within @var{file} evaluates to.
8186
8187 As an example, @var{file} might contain a definition like this
8188 (@pxref{Defining Packages}):
8189
8190 @example
8191 @verbatiminclude environment-gdb.scm
8192 @end example
8193
8194 @item --manifest=@var{file}
8195 @itemx -m @var{file}
8196 Create an environment for the packages contained in the manifest object
8197 returned by the Scheme code in @var{file}.
8198
8199 This is similar to the same-named option in @command{guix package}
8200 (@pxref{profile-manifest, @option{--manifest}}) and uses the same
8201 manifest files.
8202
8203 @item --ad-hoc
8204 Include all specified packages in the resulting environment, as if an
8205 @i{ad hoc} package were defined with them as inputs. This option is
8206 useful for quickly creating an environment without having to write a
8207 package expression to contain the desired inputs.
8208
8209 For instance, the command:
8210
8211 @example
8212 guix environment --ad-hoc guile guile-sdl -- guile
8213 @end example
8214
8215 runs @command{guile} in an environment where Guile and Guile-SDL are
8216 available.
8217
8218 Note that this example implicitly asks for the default output of
8219 @code{guile} and @code{guile-sdl}, but it is possible to ask for a
8220 specific output---e.g., @code{glib:bin} asks for the @code{bin} output
8221 of @code{glib} (@pxref{Packages with Multiple Outputs}).
8222
8223 This option may be composed with the default behavior of @command{guix
8224 environment}. Packages appearing before @code{--ad-hoc} are interpreted
8225 as packages whose dependencies will be added to the environment, the
8226 default behavior. Packages appearing after are interpreted as packages
8227 that will be added to the environment directly.
8228
8229 @item --pure
8230 Unset existing environment variables when building the new environment.
8231 This has the effect of creating an environment in which search paths
8232 only contain package inputs.
8233
8234 @item --search-paths
8235 Display the environment variable definitions that make up the
8236 environment.
8237
8238 @item --system=@var{system}
8239 @itemx -s @var{system}
8240 Attempt to build for @var{system}---e.g., @code{i686-linux}.
8241
8242 @item --container
8243 @itemx -C
8244 @cindex container
8245 Run @var{command} within an isolated container. The current working
8246 directory outside the container is mapped inside the container.
8247 Additionally, unless overridden with @code{--user}, a dummy home
8248 directory is created that matches the current user's home directory, and
8249 @file{/etc/passwd} is configured accordingly. The spawned process runs
8250 as the current user outside the container, but has root privileges in
8251 the context of the container.
8252
8253 @item --network
8254 @itemx -N
8255 For containers, share the network namespace with the host system.
8256 Containers created without this flag only have access to the loopback
8257 device.
8258
8259 @item --link-profile
8260 @itemx -P
8261 For containers, link the environment profile to
8262 @file{~/.guix-profile} within the container. This is equivalent to
8263 running the command @command{ln -s $GUIX_ENVIRONMENT ~/.guix-profile}
8264 within the container. Linking will fail and abort the environment if
8265 the directory already exists, which will certainly be the case if
8266 @command{guix environment} was invoked in the user's home directory.
8267
8268 Certain packages are configured to look in
8269 @code{~/.guix-profile} for configuration files and data;@footnote{For
8270 example, the @code{fontconfig} package inspects
8271 @file{~/.guix-profile/share/fonts} for additional fonts.}
8272 @code{--link-profile} allows these programs to behave as expected within
8273 the environment.
8274
8275 @item --user=@var{user}
8276 @itemx -u @var{user}
8277 For containers, use the username @var{user} in place of the current
8278 user. The generated @file{/etc/passwd} entry within the container will
8279 contain the name @var{user}; the home directory will be
8280 @file{/home/USER}; and no user GECOS data will be copied. @var{user}
8281 need not exist on the system.
8282
8283 Additionally, any shared or exposed path (see @code{--share} and
8284 @code{--expose} respectively) whose target is within the current user's
8285 home directory will be remapped relative to @file{/home/USER}; this
8286 includes the automatic mapping of the current working directory.
8287
8288 @example
8289 # will expose paths as /home/foo/wd, /home/foo/test, and /home/foo/target
8290 cd $HOME/wd
8291 guix environment --container --user=foo \
8292 --expose=$HOME/test \
8293 --expose=/tmp/target=$HOME/target
8294 @end example
8295
8296 While this will limit the leaking of user identity through home paths
8297 and each of the user fields, this is only one useful component of a
8298 broader privacy/anonymity solution---not one in and of itself.
8299
8300 @item --expose=@var{source}[=@var{target}]
8301 For containers, expose the file system @var{source} from the host system
8302 as the read-only file system @var{target} within the container. If
8303 @var{target} is not specified, @var{source} is used as the target mount
8304 point in the container.
8305
8306 The example below spawns a Guile REPL in a container in which the user's
8307 home directory is accessible read-only via the @file{/exchange}
8308 directory:
8309
8310 @example
8311 guix environment --container --expose=$HOME=/exchange --ad-hoc guile -- guile
8312 @end example
8313
8314 @item --share=@var{source}[=@var{target}]
8315 For containers, share the file system @var{source} from the host system
8316 as the writable file system @var{target} within the container. If
8317 @var{target} is not specified, @var{source} is used as the target mount
8318 point in the container.
8319
8320 The example below spawns a Guile REPL in a container in which the user's
8321 home directory is accessible for both reading and writing via the
8322 @file{/exchange} directory:
8323
8324 @example
8325 guix environment --container --share=$HOME=/exchange --ad-hoc guile -- guile
8326 @end example
8327 @end table
8328
8329 @command{guix environment}
8330 also supports all of the common build options that @command{guix
8331 build} supports (@pxref{Common Build Options}).
8332
8333
8334 @node Invoking guix publish
8335 @section Invoking @command{guix publish}
8336
8337 @cindex @command{guix publish}
8338 The purpose of @command{guix publish} is to enable users to easily share
8339 their store with others, who can then use it as a substitute server
8340 (@pxref{Substitutes}).
8341
8342 When @command{guix publish} runs, it spawns an HTTP server which allows
8343 anyone with network access to obtain substitutes from it. This means
8344 that any machine running Guix can also act as if it were a build farm,
8345 since the HTTP interface is compatible with Hydra, the software behind
8346 the @code{hydra.gnu.org} build farm.
8347
8348 For security, each substitute is signed, allowing recipients to check
8349 their authenticity and integrity (@pxref{Substitutes}). Because
8350 @command{guix publish} uses the signing key of the system, which is only
8351 readable by the system administrator, it must be started as root; the
8352 @code{--user} option makes it drop root privileges early on.
8353
8354 The signing key pair must be generated before @command{guix publish} is
8355 launched, using @command{guix archive --generate-key} (@pxref{Invoking
8356 guix archive}).
8357
8358 The general syntax is:
8359
8360 @example
8361 guix publish @var{options}@dots{}
8362 @end example
8363
8364 Running @command{guix publish} without any additional arguments will
8365 spawn an HTTP server on port 8080:
8366
8367 @example
8368 guix publish
8369 @end example
8370
8371 Once a publishing server has been authorized (@pxref{Invoking guix
8372 archive}), the daemon may download substitutes from it:
8373
8374 @example
8375 guix-daemon --substitute-urls=http://example.org:8080
8376 @end example
8377
8378 By default, @command{guix publish} compresses archives on the fly as it
8379 serves them. This ``on-the-fly'' mode is convenient in that it requires
8380 no setup and is immediately available. However, when serving lots of
8381 clients, we recommend using the @option{--cache} option, which enables
8382 caching of the archives before they are sent to clients---see below for
8383 details. The @command{guix weather} command provides a handy way to
8384 check what a server provides (@pxref{Invoking guix weather}).
8385
8386 As a bonus, @command{guix publish} also serves as a content-addressed
8387 mirror for source files referenced in @code{origin} records
8388 (@pxref{origin Reference}). For instance, assuming @command{guix
8389 publish} is running on @code{example.org}, the following URL returns the
8390 raw @file{hello-2.10.tar.gz} file with the given SHA256 hash
8391 (represented in @code{nix-base32} format, @pxref{Invoking guix hash}):
8392
8393 @example
8394 http://example.org/file/hello-2.10.tar.gz/sha256/0ssi1@dots{}ndq1i
8395 @end example
8396
8397 Obviously, these URLs only work for files that are in the store; in
8398 other cases, they return 404 (``Not Found'').
8399
8400 @cindex build logs, publication
8401 Build logs are available from @code{/log} URLs like:
8402
8403 @example
8404 http://example.org/log/gwspk@dots{}-guile-2.2.3
8405 @end example
8406
8407 @noindent
8408 When @command{guix-daemon} is configured to save compressed build logs,
8409 as is the case by default (@pxref{Invoking guix-daemon}), @code{/log}
8410 URLs return the compressed log as-is, with an appropriate
8411 @code{Content-Type} and/or @code{Content-Encoding} header. We recommend
8412 running @command{guix-daemon} with @code{--log-compression=gzip} since
8413 Web browsers can automatically decompress it, which is not the case with
8414 bzip2 compression.
8415
8416 The following options are available:
8417
8418 @table @code
8419 @item --port=@var{port}
8420 @itemx -p @var{port}
8421 Listen for HTTP requests on @var{port}.
8422
8423 @item --listen=@var{host}
8424 Listen on the network interface for @var{host}. The default is to
8425 accept connections from any interface.
8426
8427 @item --user=@var{user}
8428 @itemx -u @var{user}
8429 Change privileges to @var{user} as soon as possible---i.e., once the
8430 server socket is open and the signing key has been read.
8431
8432 @item --compression[=@var{level}]
8433 @itemx -C [@var{level}]
8434 Compress data using the given @var{level}. When @var{level} is zero,
8435 disable compression. The range 1 to 9 corresponds to different gzip
8436 compression levels: 1 is the fastest, and 9 is the best (CPU-intensive).
8437 The default is 3.
8438
8439 Unless @option{--cache} is used, compression occurs on the fly and
8440 the compressed streams are not
8441 cached. Thus, to reduce load on the machine that runs @command{guix
8442 publish}, it may be a good idea to choose a low compression level, to
8443 run @command{guix publish} behind a caching proxy, or to use
8444 @option{--cache}. Using @option{--cache} has the advantage that it
8445 allows @command{guix publish} to add @code{Content-Length} HTTP header
8446 to its responses.
8447
8448 @item --cache=@var{directory}
8449 @itemx -c @var{directory}
8450 Cache archives and meta-data (@code{.narinfo} URLs) to @var{directory}
8451 and only serve archives that are in cache.
8452
8453 When this option is omitted, archives and meta-data are created
8454 on-the-fly. This can reduce the available bandwidth, especially when
8455 compression is enabled, since this may become CPU-bound. Another
8456 drawback of the default mode is that the length of archives is not known
8457 in advance, so @command{guix publish} does not add a
8458 @code{Content-Length} HTTP header to its responses, which in turn
8459 prevents clients from knowing the amount of data being downloaded.
8460
8461 Conversely, when @option{--cache} is used, the first request for a store
8462 item (@i{via} a @code{.narinfo} URL) returns 404 and triggers a
8463 background process to @dfn{bake} the archive---computing its
8464 @code{.narinfo} and compressing the archive, if needed. Once the
8465 archive is cached in @var{directory}, subsequent requests succeed and
8466 are served directly from the cache, which guarantees that clients get
8467 the best possible bandwidth.
8468
8469 The ``baking'' process is performed by worker threads. By default, one
8470 thread per CPU core is created, but this can be customized. See
8471 @option{--workers} below.
8472
8473 When @option{--ttl} is used, cached entries are automatically deleted
8474 when they have expired.
8475
8476 @item --workers=@var{N}
8477 When @option{--cache} is used, request the allocation of @var{N} worker
8478 threads to ``bake'' archives.
8479
8480 @item --ttl=@var{ttl}
8481 Produce @code{Cache-Control} HTTP headers that advertise a time-to-live
8482 (TTL) of @var{ttl}. @var{ttl} must denote a duration: @code{5d} means 5
8483 days, @code{1m} means 1 month, and so on.
8484
8485 This allows the user's Guix to keep substitute information in cache for
8486 @var{ttl}. However, note that @code{guix publish} does not itself
8487 guarantee that the store items it provides will indeed remain available
8488 for as long as @var{ttl}.
8489
8490 Additionally, when @option{--cache} is used, cached entries that have
8491 not been accessed for @var{ttl} and that no longer have a corresponding
8492 item in the store, may be deleted.
8493
8494 @item --nar-path=@var{path}
8495 Use @var{path} as the prefix for the URLs of ``nar'' files
8496 (@pxref{Invoking guix archive, normalized archives}).
8497
8498 By default, nars are served at a URL such as
8499 @code{/nar/gzip/@dots{}-coreutils-8.25}. This option allows you to
8500 change the @code{/nar} part to @var{path}.
8501
8502 @item --public-key=@var{file}
8503 @itemx --private-key=@var{file}
8504 Use the specific @var{file}s as the public/private key pair used to sign
8505 the store items being published.
8506
8507 The files must correspond to the same key pair (the private key is used
8508 for signing and the public key is merely advertised in the signature
8509 metadata). They must contain keys in the canonical s-expression format
8510 as produced by @command{guix archive --generate-key} (@pxref{Invoking
8511 guix archive}). By default, @file{/etc/guix/signing-key.pub} and
8512 @file{/etc/guix/signing-key.sec} are used.
8513
8514 @item --repl[=@var{port}]
8515 @itemx -r [@var{port}]
8516 Spawn a Guile REPL server (@pxref{REPL Servers,,, guile, GNU Guile
8517 Reference Manual}) on @var{port} (37146 by default). This is used
8518 primarily for debugging a running @command{guix publish} server.
8519 @end table
8520
8521 Enabling @command{guix publish} on a GuixSD system is a one-liner: just
8522 instantiate a @code{guix-publish-service-type} service in the @code{services} field
8523 of the @code{operating-system} declaration (@pxref{guix-publish-service-type,
8524 @code{guix-publish-service-type}}).
8525
8526 If you are instead running Guix on a ``foreign distro'', follow these
8527 instructions:”
8528
8529 @itemize
8530 @item
8531 If your host distro uses the systemd init system:
8532
8533 @example
8534 # ln -s ~root/.guix-profile/lib/systemd/system/guix-publish.service \
8535 /etc/systemd/system/
8536 # systemctl start guix-publish && systemctl enable guix-publish
8537 @end example
8538
8539 @item
8540 If your host distro uses the Upstart init system:
8541
8542 @example
8543 # ln -s ~root/.guix-profile/lib/upstart/system/guix-publish.conf /etc/init/
8544 # start guix-publish
8545 @end example
8546
8547 @item
8548 Otherwise, proceed similarly with your distro's init system.
8549 @end itemize
8550
8551 @node Invoking guix challenge
8552 @section Invoking @command{guix challenge}
8553
8554 @cindex reproducible builds
8555 @cindex verifiable builds
8556 @cindex @command{guix challenge}
8557 @cindex challenge
8558 Do the binaries provided by this server really correspond to the source
8559 code it claims to build? Is a package build process deterministic?
8560 These are the questions the @command{guix challenge} command attempts to
8561 answer.
8562
8563 The former is obviously an important question: Before using a substitute
8564 server (@pxref{Substitutes}), one had better @emph{verify} that it
8565 provides the right binaries, and thus @emph{challenge} it. The latter
8566 is what enables the former: If package builds are deterministic, then
8567 independent builds of the package should yield the exact same result,
8568 bit for bit; if a server provides a binary different from the one
8569 obtained locally, it may be either corrupt or malicious.
8570
8571 We know that the hash that shows up in @file{/gnu/store} file names is
8572 the hash of all the inputs of the process that built the file or
8573 directory---compilers, libraries, build scripts,
8574 etc. (@pxref{Introduction}). Assuming deterministic build processes,
8575 one store file name should map to exactly one build output.
8576 @command{guix challenge} checks whether there is, indeed, a single
8577 mapping by comparing the build outputs of several independent builds of
8578 any given store item.
8579
8580 The command output looks like this:
8581
8582 @smallexample
8583 $ guix challenge --substitute-urls="https://hydra.gnu.org https://guix.example.org"
8584 updating list of substitutes from 'https://hydra.gnu.org'... 100.0%
8585 updating list of substitutes from 'https://guix.example.org'... 100.0%
8586 /gnu/store/@dots{}-openssl-1.0.2d contents differ:
8587 local hash: 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
8588 https://hydra.gnu.org/nar/@dots{}-openssl-1.0.2d: 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
8589 https://guix.example.org/nar/@dots{}-openssl-1.0.2d: 1zy4fmaaqcnjrzzajkdn3f5gmjk754b43qkq47llbyak9z0qjyim
8590 /gnu/store/@dots{}-git-2.5.0 contents differ:
8591 local hash: 00p3bmryhjxrhpn2gxs2fy0a15lnip05l97205pgbk5ra395hyha
8592 https://hydra.gnu.org/nar/@dots{}-git-2.5.0: 069nb85bv4d4a6slrwjdy8v1cn4cwspm3kdbmyb81d6zckj3nq9f
8593 https://guix.example.org/nar/@dots{}-git-2.5.0: 0mdqa9w1p6cmli6976v4wi0sw9r4p5prkj7lzfd1877wk11c9c73
8594 /gnu/store/@dots{}-pius-2.1.1 contents differ:
8595 local hash: 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
8596 https://hydra.gnu.org/nar/@dots{}-pius-2.1.1: 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
8597 https://guix.example.org/nar/@dots{}-pius-2.1.1: 1cy25x1a4fzq5rk0pmvc8xhwyffnqz95h2bpvqsz2mpvlbccy0gs
8598
8599 @dots{}
8600
8601 6,406 store items were analyzed:
8602 - 4,749 (74.1%) were identical
8603 - 525 (8.2%) differed
8604 - 1,132 (17.7%) were inconclusive
8605 @end smallexample
8606
8607 @noindent
8608 In this example, @command{guix challenge} first scans the store to
8609 determine the set of locally-built derivations---as opposed to store
8610 items that were downloaded from a substitute server---and then queries
8611 all the substitute servers. It then reports those store items for which
8612 the servers obtained a result different from the local build.
8613
8614 @cindex non-determinism, in package builds
8615 As an example, @code{guix.example.org} always gets a different answer.
8616 Conversely, @code{hydra.gnu.org} agrees with local builds, except in the
8617 case of Git. This might indicate that the build process of Git is
8618 non-deterministic, meaning that its output varies as a function of
8619 various things that Guix does not fully control, in spite of building
8620 packages in isolated environments (@pxref{Features}). Most common
8621 sources of non-determinism include the addition of timestamps in build
8622 results, the inclusion of random numbers, and directory listings sorted
8623 by inode number. See @uref{https://reproducible-builds.org/docs/}, for
8624 more information.
8625
8626 To find out what is wrong with this Git binary, we can do something along
8627 these lines (@pxref{Invoking guix archive}):
8628
8629 @example
8630 $ wget -q -O - https://hydra.gnu.org/nar/@dots{}-git-2.5.0 \
8631 | guix archive -x /tmp/git
8632 $ diff -ur --no-dereference /gnu/store/@dots{}-git.2.5.0 /tmp/git
8633 @end example
8634
8635 This command shows the difference between the files resulting from the
8636 local build, and the files resulting from the build on
8637 @code{hydra.gnu.org} (@pxref{Overview, Comparing and Merging Files,,
8638 diffutils, Comparing and Merging Files}). The @command{diff} command
8639 works great for text files. When binary files differ, a better option
8640 is @uref{https://diffoscope.org/, Diffoscope}, a tool that helps
8641 visualize differences for all kinds of files.
8642
8643 Once you have done that work, you can tell whether the differences are due
8644 to a non-deterministic build process or to a malicious server. We try
8645 hard to remove sources of non-determinism in packages to make it easier
8646 to verify substitutes, but of course, this is a process that
8647 involves not just Guix, but a large part of the free software community.
8648 In the meantime, @command{guix challenge} is one tool to help address
8649 the problem.
8650
8651 If you are writing packages for Guix, you are encouraged to check
8652 whether @code{hydra.gnu.org} and other substitute servers obtain the
8653 same build result as you did with:
8654
8655 @example
8656 $ guix challenge @var{package}
8657 @end example
8658
8659 @noindent
8660 where @var{package} is a package specification such as
8661 @code{guile@@2.0} or @code{glibc:debug}.
8662
8663 The general syntax is:
8664
8665 @example
8666 guix challenge @var{options} [@var{packages}@dots{}]
8667 @end example
8668
8669 When a difference is found between the hash of a locally-built item and
8670 that of a server-provided substitute, or among substitutes provided by
8671 different servers, the command displays it as in the example above and
8672 its exit code is 2 (other non-zero exit codes denote other kinds of
8673 errors.)
8674
8675 The one option that matters is:
8676
8677 @table @code
8678
8679 @item --substitute-urls=@var{urls}
8680 Consider @var{urls} the whitespace-separated list of substitute source
8681 URLs to compare to.
8682
8683 @item --verbose
8684 @itemx -v
8685 Show details about matches (identical contents) in addition to
8686 information about mismatches.
8687
8688 @end table
8689
8690 @node Invoking guix copy
8691 @section Invoking @command{guix copy}
8692
8693 @cindex copy, of store items, over SSH
8694 @cindex SSH, copy of store items
8695 @cindex sharing store items across machines
8696 @cindex transferring store items across machines
8697 The @command{guix copy} command copies items from the store of one
8698 machine to that of another machine over a secure shell (SSH)
8699 connection@footnote{This command is available only when Guile-SSH was
8700 found. @xref{Requirements}, for details.}. For example, the following
8701 command copies the @code{coreutils} package, the user's profile, and all
8702 their dependencies over to @var{host}, logged in as @var{user}:
8703
8704 @example
8705 guix copy --to=@var{user}@@@var{host} \
8706 coreutils `readlink -f ~/.guix-profile`
8707 @end example
8708
8709 If some of the items to be copied are already present on @var{host},
8710 they are not actually sent.
8711
8712 The command below retrieves @code{libreoffice} and @code{gimp} from
8713 @var{host}, assuming they are available there:
8714
8715 @example
8716 guix copy --from=@var{host} libreoffice gimp
8717 @end example
8718
8719 The SSH connection is established using the Guile-SSH client, which is
8720 compatible with OpenSSH: it honors @file{~/.ssh/known_hosts} and
8721 @file{~/.ssh/config}, and uses the SSH agent for authentication.
8722
8723 The key used to sign items that are sent must be accepted by the remote
8724 machine. Likewise, the key used by the remote machine to sign items you
8725 are retrieving must be in @file{/etc/guix/acl} so it is accepted by your
8726 own daemon. @xref{Invoking guix archive}, for more information about
8727 store item authentication.
8728
8729 The general syntax is:
8730
8731 @example
8732 guix copy [--to=@var{spec}|--from=@var{spec}] @var{items}@dots{}
8733 @end example
8734
8735 You must always specify one of the following options:
8736
8737 @table @code
8738 @item --to=@var{spec}
8739 @itemx --from=@var{spec}
8740 Specify the host to send to or receive from. @var{spec} must be an SSH
8741 spec such as @code{example.org}, @code{charlie@@example.org}, or
8742 @code{charlie@@example.org:2222}.
8743 @end table
8744
8745 The @var{items} can be either package names, such as @code{gimp}, or
8746 store items, such as @file{/gnu/store/@dots{}-idutils-4.6}.
8747
8748 When specifying the name of a package to send, it is first built if
8749 needed, unless @option{--dry-run} was specified. Common build options
8750 are supported (@pxref{Common Build Options}).
8751
8752
8753 @node Invoking guix container
8754 @section Invoking @command{guix container}
8755 @cindex container
8756 @cindex @command{guix container}
8757 @quotation Note
8758 As of version @value{VERSION}, this tool is experimental. The interface
8759 is subject to radical change in the future.
8760 @end quotation
8761
8762 The purpose of @command{guix container} is to manipulate processes
8763 running within an isolated environment, commonly known as a
8764 ``container'', typically created by the @command{guix environment}
8765 (@pxref{Invoking guix environment}) and @command{guix system container}
8766 (@pxref{Invoking guix system}) commands.
8767
8768 The general syntax is:
8769
8770 @example
8771 guix container @var{action} @var{options}@dots{}
8772 @end example
8773
8774 @var{action} specifies the operation to perform with a container, and
8775 @var{options} specifies the context-specific arguments for the action.
8776
8777 The following actions are available:
8778
8779 @table @code
8780 @item exec
8781 Execute a command within the context of a running container.
8782
8783 The syntax is:
8784
8785 @example
8786 guix container exec @var{pid} @var{program} @var{arguments}@dots{}
8787 @end example
8788
8789 @var{pid} specifies the process ID of the running container.
8790 @var{program} specifies an executable file name within the root file
8791 system of the container. @var{arguments} are the additional options that
8792 will be passed to @var{program}.
8793
8794 The following command launches an interactive login shell inside a
8795 GuixSD container, started by @command{guix system container}, and whose
8796 process ID is 9001:
8797
8798 @example
8799 guix container exec 9001 /run/current-system/profile/bin/bash --login
8800 @end example
8801
8802 Note that the @var{pid} cannot be the parent process of a container. It
8803 must be PID 1 of the container or one of its child processes.
8804
8805 @end table
8806
8807 @node Invoking guix weather
8808 @section Invoking @command{guix weather}
8809
8810 Occasionally you're grumpy because substitutes are lacking and you end
8811 up building packages by yourself (@pxref{Substitutes}). The
8812 @command{guix weather} command reports on substitute availability on the
8813 specified servers so you can have an idea of whether you'll be grumpy
8814 today. It can sometimes be useful info as a user, but it is primarily
8815 useful to people running @command{guix publish} (@pxref{Invoking guix
8816 publish}).
8817
8818 @cindex statistics, for substitutes
8819 @cindex availability of substitutes
8820 @cindex substitute availability
8821 @cindex weather, substitute availability
8822 Here's a sample run:
8823
8824 @example
8825 $ guix weather --substitute-urls=https://guix.example.org
8826 computing 5,872 package derivations for x86_64-linux...
8827 looking for 6,128 store items on https://guix.example.org..
8828 updating list of substitutes from 'https://guix.example.org'... 100.0%
8829 https://guix.example.org
8830 43.4% substitutes available (2,658 out of 6,128)
8831 7,032.5 MiB of nars (compressed)
8832 19,824.2 MiB on disk (uncompressed)
8833 0.030 seconds per request (182.9 seconds in total)
8834 33.5 requests per second
8835
8836 9.8% (342 out of 3,470) of the missing items are queued
8837 867 queued builds
8838 x86_64-linux: 518 (59.7%)
8839 i686-linux: 221 (25.5%)
8840 aarch64-linux: 128 (14.8%)
8841 build rate: 23.41 builds per hour
8842 x86_64-linux: 11.16 builds per hour
8843 i686-linux: 6.03 builds per hour
8844 aarch64-linux: 6.41 builds per hour
8845 @end example
8846
8847 @cindex continuous integration, statistics
8848 As you can see, it reports the fraction of all the packages for which
8849 substitutes are available on the server---regardless of whether
8850 substitutes are enabled, and regardless of whether this server's signing
8851 key is authorized. It also reports the size of the compressed archives
8852 (``nars'') provided by the server, the size the corresponding store
8853 items occupy in the store (assuming deduplication is turned off), and
8854 the server's throughput. The second part gives continuous integration
8855 (CI) statistics, if the server supports it.
8856
8857 To achieve that, @command{guix weather} queries over HTTP(S) meta-data
8858 (@dfn{narinfos}) for all the relevant store items. Like @command{guix
8859 challenge}, it ignores signatures on those substitutes, which is
8860 innocuous since the command only gathers statistics and cannot install
8861 those substitutes.
8862
8863 Among other things, it is possible to query specific system types and
8864 specific package sets. The available options are listed below.
8865
8866 @table @code
8867 @item --substitute-urls=@var{urls}
8868 @var{urls} is the space-separated list of substitute server URLs to
8869 query. When this option is omitted, the default set of substitute
8870 servers is queried.
8871
8872 @item --system=@var{system}
8873 @itemx -s @var{system}
8874 Query substitutes for @var{system}---e.g., @code{aarch64-linux}. This
8875 option can be repeated, in which case @command{guix weather} will query
8876 substitutes for several system types.
8877
8878 @item --manifest=@var{file}
8879 Instead of querying substitutes for all the packages, only ask for those
8880 specified in @var{file}. @var{file} must contain a @dfn{manifest}, as
8881 with the @code{-m} option of @command{guix package} (@pxref{Invoking
8882 guix package}).
8883 @end table
8884
8885 @node Invoking guix processes
8886 @section Invoking @command{guix processes}
8887
8888 The @command{guix processes} command can be useful to developers and system
8889 administrators, especially on multi-user machines and on build farms: it lists
8890 the current sessions (connections to the daemon), as well as information about
8891 the processes involved@footnote{Remote sessions, when @command{guix-daemon} is
8892 started with @option{--listen} specifying a TCP endpoint, are @emph{not}
8893 listed.}. Here's an example of the information it returns:
8894
8895 @example
8896 $ sudo guix processes
8897 SessionPID: 19002
8898 ClientPID: 19090
8899 ClientCommand: guix environment --ad-hoc python
8900
8901 SessionPID: 19402
8902 ClientPID: 19367
8903 ClientCommand: guix publish -u guix-publish -p 3000 -C 9 @dots{}
8904
8905 SessionPID: 19444
8906 ClientPID: 19419
8907 ClientCommand: cuirass --cache-directory /var/cache/cuirass @dots{}
8908 LockHeld: /gnu/store/@dots{}-perl-ipc-cmd-0.96.lock
8909 LockHeld: /gnu/store/@dots{}-python-six-bootstrap-1.11.0.lock
8910 LockHeld: /gnu/store/@dots{}-libjpeg-turbo-2.0.0.lock
8911 ChildProcess: 20495: guix offload x86_64-linux 7200 1 28800
8912 ChildProcess: 27733: guix offload x86_64-linux 7200 1 28800
8913 ChildProcess: 27793: guix offload x86_64-linux 7200 1 28800
8914 @end example
8915
8916 In this example we see that @command{guix-daemon} has three clients:
8917 @command{guix environment}, @command{guix publish}, and the Cuirass continuous
8918 integration tool; their process identifier (PID) is given by the
8919 @code{ClientPID} field. The @code{SessionPID} field gives the PID of the
8920 @command{guix-daemon} sub-process of this particular session.
8921
8922 The @code{LockHeld} fields show which store items are currently locked by this
8923 session, which corresponds to store items being built or substituted (the
8924 @code{LockHeld} field is not displayed when @command{guix processes} is not
8925 running as root.) Last, by looking at the @code{ChildProcess} field, we
8926 understand that these three builds are being offloaded (@pxref{Daemon Offload
8927 Setup}).
8928
8929 The output is in Recutils format so we can use the handy @command{recsel}
8930 command to select sessions of interest (@pxref{Selection Expressions,,,
8931 recutils, GNU recutils manual}). As an example, the command shows the command
8932 line and PID of the client that triggered the build of a Perl package:
8933
8934 @example
8935 $ sudo guix processes | \
8936 recsel -p ClientPID,ClientCommand -e 'LockHeld ~ "perl"'
8937 ClientPID: 19419
8938 ClientCommand: cuirass --cache-directory /var/cache/cuirass @dots{}
8939 @end example
8940
8941 @c *********************************************************************
8942 @node GNU Distribution
8943 @chapter GNU Distribution
8944
8945 @cindex Guix System Distribution
8946 @cindex GuixSD
8947 Guix comes with a distribution of the GNU system consisting entirely of
8948 free software@footnote{The term ``free'' here refers to the
8949 @url{http://www.gnu.org/philosophy/free-sw.html,freedom provided to
8950 users of that software}.}. The
8951 distribution can be installed on its own (@pxref{System Installation}),
8952 but it is also possible to install Guix as a package manager on top of
8953 an installed GNU/Linux system (@pxref{Installation}). To distinguish
8954 between the two, we refer to the standalone distribution as the Guix
8955 System Distribution, or GuixSD.
8956
8957 The distribution provides core GNU packages such as GNU libc, GCC, and
8958 Binutils, as well as many GNU and non-GNU applications. The complete
8959 list of available packages can be browsed
8960 @url{http://www.gnu.org/software/guix/packages,on-line} or by
8961 running @command{guix package} (@pxref{Invoking guix package}):
8962
8963 @example
8964 guix package --list-available
8965 @end example
8966
8967 Our goal is to provide a practical 100% free software distribution of
8968 Linux-based and other variants of GNU, with a focus on the promotion and
8969 tight integration of GNU components, and an emphasis on programs and
8970 tools that help users exert that freedom.
8971
8972 Packages are currently available on the following platforms:
8973
8974 @table @code
8975
8976 @item x86_64-linux
8977 Intel/AMD @code{x86_64} architecture, Linux-Libre kernel;
8978
8979 @item i686-linux
8980 Intel 32-bit architecture (IA32), Linux-Libre kernel;
8981
8982 @item armhf-linux
8983 ARMv7-A architecture with hard float, Thumb-2 and NEON,
8984 using the EABI hard-float application binary interface (ABI),
8985 and Linux-Libre kernel.
8986
8987 @item aarch64-linux
8988 little-endian 64-bit ARMv8-A processors, Linux-Libre kernel. This is
8989 currently in an experimental stage, with limited support.
8990 @xref{Contributing}, for how to help!
8991
8992 @item mips64el-linux
8993 little-endian 64-bit MIPS processors, specifically the Loongson series,
8994 n32 ABI, and Linux-Libre kernel.
8995
8996 @end table
8997
8998 GuixSD itself is currently only available on @code{i686} and @code{x86_64}.
8999
9000 @noindent
9001 For information on porting to other architectures or kernels,
9002 @pxref{Porting}.
9003
9004 @menu
9005 * System Installation:: Installing the whole operating system.
9006 * System Configuration:: Configuring the operating system.
9007 * Documentation:: Browsing software user manuals.
9008 * Installing Debugging Files:: Feeding the debugger.
9009 * Security Updates:: Deploying security fixes quickly.
9010 * Package Modules:: Packages from the programmer's viewpoint.
9011 * Packaging Guidelines:: Growing the distribution.
9012 * Bootstrapping:: GNU/Linux built from scratch.
9013 * Porting:: Targeting another platform or kernel.
9014 @end menu
9015
9016 Building this distribution is a cooperative effort, and you are invited
9017 to join! @xref{Contributing}, for information about how you can help.
9018
9019 @node System Installation
9020 @section System Installation
9021
9022 @cindex installing GuixSD
9023 @cindex Guix System Distribution
9024 This section explains how to install the Guix System Distribution (GuixSD)
9025 on a machine. The Guix package manager can
9026 also be installed on top of a running GNU/Linux system,
9027 @pxref{Installation}.
9028
9029 @ifinfo
9030 @quotation Note
9031 @c This paragraph is for people reading this from tty2 of the
9032 @c installation image.
9033 You are reading this documentation with an Info reader. For details on
9034 how to use it, hit the @key{RET} key (``return'' or ``enter'') on the
9035 link that follows: @pxref{Top, Info reader,, info-stnd, Stand-alone GNU
9036 Info}. Hit @kbd{l} afterwards to come back here.
9037
9038 Alternately, run @command{info info} in another tty to keep the manual
9039 available.
9040 @end quotation
9041 @end ifinfo
9042
9043 @menu
9044 * Limitations:: What you can expect.
9045 * Hardware Considerations:: Supported hardware.
9046 * USB Stick and DVD Installation:: Preparing the installation medium.
9047 * Preparing for Installation:: Networking, partitioning, etc.
9048 * Proceeding with the Installation:: The real thing.
9049 * Installing GuixSD in a VM:: GuixSD playground.
9050 * Building the Installation Image:: How this comes to be.
9051 @end menu
9052
9053 @node Limitations
9054 @subsection Limitations
9055
9056 As of version @value{VERSION}, the Guix System Distribution (GuixSD) is
9057 not production-ready. It may contain bugs and lack important
9058 features. Thus, if you are looking for a stable production system that
9059 respects your freedom as a computer user, a good solution at this point
9060 is to consider @url{http://www.gnu.org/distros/free-distros.html, one of
9061 the more established GNU/Linux distributions}. We hope you can soon switch
9062 to the GuixSD without fear, of course. In the meantime, you can
9063 also keep using your distribution and try out the package manager on top
9064 of it (@pxref{Installation}).
9065
9066 Before you proceed with the installation, be aware of the following
9067 noteworthy limitations applicable to version @value{VERSION}:
9068
9069 @itemize
9070 @item
9071 The installation process does not include a graphical user interface and
9072 requires familiarity with GNU/Linux (see the following subsections to
9073 get a feel of what that means.)
9074
9075 @item
9076 Support for the Logical Volume Manager (LVM) is missing.
9077
9078 @item
9079 More and more system services are provided (@pxref{Services}), but some
9080 may be missing.
9081
9082 @item
9083 More than 7,500 packages are available, but you might
9084 occasionally find that a useful package is missing.
9085
9086 @item
9087 GNOME, Xfce, LXDE, and Enlightenment are available (@pxref{Desktop Services}),
9088 as well as a number of X11 window managers. However, some graphical
9089 applications may be missing, as well as KDE.
9090 @end itemize
9091
9092 You have been warned! But more than a disclaimer, this is an invitation
9093 to report issues (and success stories!), and to join us in improving it.
9094 @xref{Contributing}, for more info.
9095
9096
9097 @node Hardware Considerations
9098 @subsection Hardware Considerations
9099
9100 @cindex hardware support on GuixSD
9101 GNU@tie{}GuixSD focuses on respecting the user's computing freedom. It
9102 builds around the kernel Linux-libre, which means that only hardware for
9103 which free software drivers and firmware exist is supported. Nowadays,
9104 a wide range of off-the-shelf hardware is supported on
9105 GNU/Linux-libre---from keyboards to graphics cards to scanners and
9106 Ethernet controllers. Unfortunately, there are still areas where
9107 hardware vendors deny users control over their own computing, and such
9108 hardware is not supported on GuixSD.
9109
9110 @cindex WiFi, hardware support
9111 One of the main areas where free drivers or firmware are lacking is WiFi
9112 devices. WiFi devices known to work include those using Atheros chips
9113 (AR9271 and AR7010), which corresponds to the @code{ath9k} Linux-libre
9114 driver, and those using Broadcom/AirForce chips (BCM43xx with
9115 Wireless-Core Revision 5), which corresponds to the @code{b43-open}
9116 Linux-libre driver. Free firmware exists for both and is available
9117 out-of-the-box on GuixSD, as part of @var{%base-firmware}
9118 (@pxref{operating-system Reference, @code{firmware}}).
9119
9120 @cindex RYF, Respects Your Freedom
9121 The @uref{https://www.fsf.org/, Free Software Foundation} runs
9122 @uref{https://www.fsf.org/ryf, @dfn{Respects Your Freedom}} (RYF), a
9123 certification program for hardware products that respect your freedom
9124 and your privacy and ensure that you have control over your device. We
9125 encourage you to check the list of RYF-certified devices.
9126
9127 Another useful resource is the @uref{https://www.h-node.org/, H-Node}
9128 web site. It contains a catalog of hardware devices with information
9129 about their support in GNU/Linux.
9130
9131
9132 @node USB Stick and DVD Installation
9133 @subsection USB Stick and DVD Installation
9134
9135 An ISO-9660 installation image that can be written to a USB stick or
9136 burnt to a DVD can be downloaded from
9137 @indicateurl{https://alpha.gnu.org/gnu/guix/guixsd-install-@value{VERSION}.@var{system}.iso.xz},
9138 where @var{system} is one of:
9139
9140 @table @code
9141 @item x86_64-linux
9142 for a GNU/Linux system on Intel/AMD-compatible 64-bit CPUs;
9143
9144 @item i686-linux
9145 for a 32-bit GNU/Linux system on Intel-compatible CPUs.
9146 @end table
9147
9148 @c start duplication of authentication part from ``Binary Installation''
9149 Make sure to download the associated @file{.sig} file and to verify the
9150 authenticity of the image against it, along these lines:
9151
9152 @example
9153 $ wget https://alpha.gnu.org/gnu/guix/guixsd-install-@value{VERSION}.@var{system}.iso.xz.sig
9154 $ gpg --verify guixsd-install-@value{VERSION}.@var{system}.iso.xz.sig
9155 @end example
9156
9157 If that command fails because you do not have the required public key,
9158 then run this command to import it:
9159
9160 @example
9161 $ gpg --keyserver @value{KEY-SERVER} \
9162 --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
9163 @end example
9164
9165 @noindent
9166 and rerun the @code{gpg --verify} command.
9167 @c end duplication
9168
9169 This image contains the tools necessary for an installation.
9170 It is meant to be copied @emph{as is} to a large-enough USB stick or DVD.
9171
9172 @unnumberedsubsubsec Copying to a USB Stick
9173
9174 To copy the image to a USB stick, follow these steps:
9175
9176 @enumerate
9177 @item
9178 Decompress the image using the @command{xz} command:
9179
9180 @example
9181 xz -d guixsd-install-@value{VERSION}.@var{system}.iso.xz
9182 @end example
9183
9184 @item
9185 Insert a USB stick of 1@tie{}GiB or more into your machine, and determine
9186 its device name. Assuming that the USB stick is known as @file{/dev/sdX},
9187 copy the image with:
9188
9189 @example
9190 dd if=guixsd-install-@value{VERSION}.x86_64-linux.iso of=/dev/sdX
9191 sync
9192 @end example
9193
9194 Access to @file{/dev/sdX} usually requires root privileges.
9195 @end enumerate
9196
9197 @unnumberedsubsubsec Burning on a DVD
9198
9199 To copy the image to a DVD, follow these steps:
9200
9201 @enumerate
9202 @item
9203 Decompress the image using the @command{xz} command:
9204
9205 @example
9206 xz -d guixsd-install-@value{VERSION}.@var{system}.iso.xz
9207 @end example
9208
9209 @item
9210 Insert a blank DVD into your machine, and determine
9211 its device name. Assuming that the DVD drive is known as @file{/dev/srX},
9212 copy the image with:
9213
9214 @example
9215 growisofs -dvd-compat -Z /dev/srX=guixsd-install-@value{VERSION}.x86_64.iso
9216 @end example
9217
9218 Access to @file{/dev/srX} usually requires root privileges.
9219 @end enumerate
9220
9221 @unnumberedsubsubsec Booting
9222
9223 Once this is done, you should be able to reboot the system and boot from
9224 the USB stick or DVD. The latter usually requires you to get in the
9225 BIOS or UEFI boot menu, where you can choose to boot from the USB stick.
9226
9227 @xref{Installing GuixSD in a VM}, if, instead, you would like to install
9228 GuixSD in a virtual machine (VM).
9229
9230
9231 @node Preparing for Installation
9232 @subsection Preparing for Installation
9233
9234 Once you have successfully booted your computer using the installation medium,
9235 you should end up with a root prompt. Several console TTYs are configured
9236 and can be used to run commands as root. TTY2 shows this documentation,
9237 browsable using the Info reader commands (@pxref{Top,,, info-stnd,
9238 Stand-alone GNU Info}). The installation system runs the GPM mouse
9239 daemon, which allows you to select text with the left mouse button and
9240 to paste it with the middle button.
9241
9242 @quotation Note
9243 Installation requires access to the Internet so that any missing
9244 dependencies of your system configuration can be downloaded. See the
9245 ``Networking'' section below.
9246 @end quotation
9247
9248 The installation system includes many common tools needed for this task.
9249 But it is also a full-blown GuixSD system, which means that you can
9250 install additional packages, should you need it, using @command{guix
9251 package} (@pxref{Invoking guix package}).
9252
9253 @subsubsection Keyboard Layout
9254
9255 @cindex keyboard layout
9256 The installation image uses the US qwerty keyboard layout. If you want
9257 to change it, you can use the @command{loadkeys} command. For example,
9258 the following command selects the Dvorak keyboard layout:
9259
9260 @example
9261 loadkeys dvorak
9262 @end example
9263
9264 See the files under @file{/run/current-system/profile/share/keymaps} for
9265 a list of available keyboard layouts. Run @command{man loadkeys} for
9266 more information.
9267
9268 @subsubsection Networking
9269
9270 Run the following command to see what your network interfaces are called:
9271
9272 @example
9273 ifconfig -a
9274 @end example
9275
9276 @noindent
9277 @dots{} or, using the GNU/Linux-specific @command{ip} command:
9278
9279 @example
9280 ip a
9281 @end example
9282
9283 @c http://cgit.freedesktop.org/systemd/systemd/tree/src/udev/udev-builtin-net_id.c#n20
9284 Wired interfaces have a name starting with @samp{e}; for example, the
9285 interface corresponding to the first on-board Ethernet controller is
9286 called @samp{eno1}. Wireless interfaces have a name starting with
9287 @samp{w}, like @samp{w1p2s0}.
9288
9289 @table @asis
9290 @item Wired connection
9291 To configure a wired network run the following command, substituting
9292 @var{interface} with the name of the wired interface you want to use.
9293
9294 @example
9295 ifconfig @var{interface} up
9296 @end example
9297
9298 @item Wireless connection
9299 @cindex wireless
9300 @cindex WiFi
9301 To configure wireless networking, you can create a configuration file
9302 for the @command{wpa_supplicant} configuration tool (its location is not
9303 important) using one of the available text editors such as
9304 @command{nano}:
9305
9306 @example
9307 nano wpa_supplicant.conf
9308 @end example
9309
9310 As an example, the following stanza can go to this file and will work
9311 for many wireless networks, provided you give the actual SSID and
9312 passphrase for the network you are connecting to:
9313
9314 @example
9315 network=@{
9316 ssid="@var{my-ssid}"
9317 key_mgmt=WPA-PSK
9318 psk="the network's secret passphrase"
9319 @}
9320 @end example
9321
9322 Start the wireless service and run it in the background with the
9323 following command (substitute @var{interface} with the name of the
9324 network interface you want to use):
9325
9326 @example
9327 wpa_supplicant -c wpa_supplicant.conf -i @var{interface} -B
9328 @end example
9329
9330 Run @command{man wpa_supplicant} for more information.
9331 @end table
9332
9333 @cindex DHCP
9334 At this point, you need to acquire an IP address. On a network where IP
9335 addresses are automatically assigned @i{via} DHCP, you can run:
9336
9337 @example
9338 dhclient -v @var{interface}
9339 @end example
9340
9341 Try to ping a server to see if networking is up and running:
9342
9343 @example
9344 ping -c 3 gnu.org
9345 @end example
9346
9347 Setting up network access is almost always a requirement because the
9348 image does not contain all the software and tools that may be needed.
9349
9350 @cindex installing over SSH
9351 If you want to, you can continue the installation remotely by starting
9352 an SSH server:
9353
9354 @example
9355 herd start ssh-daemon
9356 @end example
9357
9358 Make sure to either set a password with @command{passwd}, or configure
9359 OpenSSH public key authentication before logging in.
9360
9361 @subsubsection Disk Partitioning
9362
9363 Unless this has already been done, the next step is to partition, and
9364 then format the target partition(s).
9365
9366 The installation image includes several partitioning tools, including
9367 Parted (@pxref{Overview,,, parted, GNU Parted User Manual}),
9368 @command{fdisk}, and @command{cfdisk}. Run it and set up your disk with
9369 the partition layout you want:
9370
9371 @example
9372 cfdisk
9373 @end example
9374
9375 If your disk uses the GUID Partition Table (GPT) format and you plan to
9376 install BIOS-based GRUB (which is the default), make sure a BIOS Boot
9377 Partition is available (@pxref{BIOS installation,,, grub, GNU GRUB
9378 manual}).
9379
9380 @cindex EFI, installation
9381 @cindex UEFI, installation
9382 @cindex ESP, EFI system partition
9383 If you instead wish to use EFI-based GRUB, a FAT32 @dfn{EFI System Partition}
9384 (ESP) is required. This partition should be mounted at @file{/boot/efi} and
9385 must have the @code{esp} flag set. E.g., for @command{parted}:
9386
9387 @example
9388 parted /dev/sda set 1 esp on
9389 @end example
9390
9391 @quotation Note
9392 @vindex grub-bootloader
9393 @vindex grub-efi-bootloader
9394 Unsure whether to use EFI- or BIOS-based GRUB? If the directory
9395 @file{/sys/firmware/efi} exists in the installation image, then you should
9396 probably perform an EFI installation, using @code{grub-efi-bootloader}.
9397 Otherwise you should use the BIOS-based GRUB, known as
9398 @code{grub-bootloader}. @xref{Bootloader Configuration}, for more info on
9399 bootloaders.
9400 @end quotation
9401
9402 Once you are done partitioning the target hard disk drive, you have to
9403 create a file system on the relevant partition(s)@footnote{Currently
9404 GuixSD only supports ext4 and btrfs file systems. In particular, code
9405 that reads file system UUIDs and labels only works for these file system
9406 types.}. For the ESP, if you have one and assuming it is
9407 @file{/dev/sda1}, run:
9408
9409 @example
9410 mkfs.fat -F32 /dev/sda1
9411 @end example
9412
9413 Preferably, assign file systems a label so that you can easily and
9414 reliably refer to them in @code{file-system} declarations (@pxref{File
9415 Systems}). This is typically done using the @code{-L} option of
9416 @command{mkfs.ext4} and related commands. So, assuming the target root
9417 partition lives at @file{/dev/sda2}, a file system with the label
9418 @code{my-root} can be created with:
9419
9420 @example
9421 mkfs.ext4 -L my-root /dev/sda2
9422 @end example
9423
9424 @cindex encrypted disk
9425 If you are instead planning to encrypt the root partition, you can use
9426 the Cryptsetup/LUKS utilities to do that (see @inlinefmtifelse{html,
9427 @uref{https://linux.die.net/man/8/cryptsetup, @code{man cryptsetup}},
9428 @code{man cryptsetup}} for more information.) Assuming you want to
9429 store the root partition on @file{/dev/sda2}, the command sequence would
9430 be along these lines:
9431
9432 @example
9433 cryptsetup luksFormat /dev/sda2
9434 cryptsetup open --type luks /dev/sda2 my-partition
9435 mkfs.ext4 -L my-root /dev/mapper/my-partition
9436 @end example
9437
9438 Once that is done, mount the target file system under @file{/mnt}
9439 with a command like (again, assuming @code{my-root} is the label of the
9440 root file system):
9441
9442 @example
9443 mount LABEL=my-root /mnt
9444 @end example
9445
9446 Also mount any other file systems you would like to use on the target
9447 system relative to this path. If you have @file{/boot} on a separate
9448 partition for example, mount it at @file{/mnt/boot} now so it is found
9449 by @code{guix system init} afterwards.
9450
9451 Finally, if you plan to use one or more swap partitions (@pxref{Memory
9452 Concepts, swap space,, libc, The GNU C Library Reference Manual}), make
9453 sure to initialize them with @command{mkswap}. Assuming you have one
9454 swap partition on @file{/dev/sda3}, you would run:
9455
9456 @example
9457 mkswap /dev/sda3
9458 swapon /dev/sda3
9459 @end example
9460
9461 Alternatively, you may use a swap file. For example, assuming that in
9462 the new system you want to use the file @file{/swapfile} as a swap file,
9463 you would run@footnote{This example will work for many types of file
9464 systems (e.g., ext4). However, for copy-on-write file systems (e.g.,
9465 btrfs), the required steps may be different. For details, see the
9466 manual pages for @command{mkswap} and @command{swapon}.}:
9467
9468 @example
9469 # This is 10 GiB of swap space. Adjust "count" to change the size.
9470 dd if=/dev/zero of=/mnt/swapfile bs=1MiB count=10240
9471 # For security, make the file readable and writable only by root.
9472 chmod 600 /mnt/swapfile
9473 mkswap /mnt/swapfile
9474 swapon /mnt/swapfile
9475 @end example
9476
9477 Note that if you have encrypted the root partition and created a swap
9478 file in its file system as described above, then the encryption also
9479 protects the swap file, just like any other file in that file system.
9480
9481 @node Proceeding with the Installation
9482 @subsection Proceeding with the Installation
9483
9484 With the target partitions ready and the target root mounted on
9485 @file{/mnt}, we're ready to go. First, run:
9486
9487 @example
9488 herd start cow-store /mnt
9489 @end example
9490
9491 This makes @file{/gnu/store} copy-on-write, such that packages added to it
9492 during the installation phase are written to the target disk on @file{/mnt}
9493 rather than kept in memory. This is necessary because the first phase of
9494 the @command{guix system init} command (see below) entails downloads or
9495 builds to @file{/gnu/store} which, initially, is an in-memory file system.
9496
9497 Next, you have to edit a file and
9498 provide the declaration of the operating system to be installed. To
9499 that end, the installation system comes with three text editors. We
9500 recommend GNU nano (@pxref{Top,,, nano, GNU nano Manual}), which
9501 supports syntax highlighting and parentheses matching; other editors
9502 include GNU Zile (an Emacs clone), and
9503 nvi (a clone of the original BSD @command{vi} editor).
9504 We strongly recommend storing that file on the target root file system, say,
9505 as @file{/mnt/etc/config.scm}. Failing to do that, you will have lost your
9506 configuration file once you have rebooted into the newly-installed system.
9507
9508 @xref{Using the Configuration System}, for an overview of the
9509 configuration file. The example configurations discussed in that
9510 section are available under @file{/etc/configuration} in the
9511 installation image. Thus, to get started with a system configuration
9512 providing a graphical display server (a ``desktop'' system), you can run
9513 something along these lines:
9514
9515 @example
9516 # mkdir /mnt/etc
9517 # cp /etc/configuration/desktop.scm /mnt/etc/config.scm
9518 # nano /mnt/etc/config.scm
9519 @end example
9520
9521 You should pay attention to what your configuration file contains, and
9522 in particular:
9523
9524 @itemize
9525 @item
9526 Make sure the @code{bootloader-configuration} form refers to the target
9527 you want to install GRUB on. It should mention @code{grub-bootloader} if
9528 you are installing GRUB in the legacy way, or @code{grub-efi-bootloader}
9529 for newer UEFI systems. For legacy systems, the @code{target} field
9530 names a device, like @code{/dev/sda}; for UEFI systems it names a path
9531 to a mounted EFI partition, like @code{/boot/efi}, and do make sure the
9532 path is actually mounted.
9533
9534 @item
9535 Be sure that your file system labels match the value of their respective
9536 @code{device} fields in your @code{file-system} configuration, assuming
9537 your @code{file-system} configuration uses the @code{file-system-label}
9538 procedure in its @code{device} field.
9539
9540 @item
9541 If there are encrypted or RAID partitions, make sure to add a
9542 @code{mapped-devices} field to describe them (@pxref{Mapped Devices}).
9543 @end itemize
9544
9545 Once you are done preparing the configuration file, the new system must
9546 be initialized (remember that the target root file system is mounted
9547 under @file{/mnt}):
9548
9549 @example
9550 guix system init /mnt/etc/config.scm /mnt
9551 @end example
9552
9553 @noindent
9554 This copies all the necessary files and installs GRUB on
9555 @file{/dev/sdX}, unless you pass the @option{--no-bootloader} option. For
9556 more information, @pxref{Invoking guix system}. This command may trigger
9557 downloads or builds of missing packages, which can take some time.
9558
9559 Once that command has completed---and hopefully succeeded!---you can run
9560 @command{reboot} and boot into the new system. The @code{root} password
9561 in the new system is initially empty; other users' passwords need to be
9562 initialized by running the @command{passwd} command as @code{root},
9563 unless your configuration specifies otherwise
9564 (@pxref{user-account-password, user account passwords}).
9565
9566 @cindex upgrading GuixSD
9567 From then on, you can update GuixSD whenever you want by running
9568 @command{guix pull} as @code{root} (@pxref{Invoking guix pull}), and
9569 then running @command{guix system reconfigure} to build a new system
9570 generation with the latest packages and services (@pxref{Invoking guix
9571 system}). We recommend doing that regularly so that your system
9572 includes the latest security updates (@pxref{Security Updates}).
9573
9574 Join us on @code{#guix} on the Freenode IRC network or on
9575 @file{guix-devel@@gnu.org} to share your experience---good or not so
9576 good.
9577
9578 @node Installing GuixSD in a VM
9579 @subsection Installing GuixSD in a Virtual Machine
9580
9581 @cindex virtual machine, GuixSD installation
9582 @cindex virtual private server (VPS)
9583 @cindex VPS (virtual private server)
9584 If you'd like to install GuixSD in a virtual machine (VM) or on a
9585 virtual private server (VPS) rather than on your beloved machine, this
9586 section is for you.
9587
9588 To boot a @uref{http://qemu.org/,QEMU} VM for installing GuixSD in a
9589 disk image, follow these steps:
9590
9591 @enumerate
9592 @item
9593 First, retrieve and decompress the GuixSD installation image as
9594 described previously (@pxref{USB Stick and DVD Installation}).
9595
9596 @item
9597 Create a disk image that will hold the installed system. To make a
9598 qcow2-formatted disk image, use the @command{qemu-img} command:
9599
9600 @example
9601 qemu-img create -f qcow2 guixsd.img 50G
9602 @end example
9603
9604 The resulting file will be much smaller than 50 GB (typically less than
9605 1 MB), but it will grow as the virtualized storage device is filled up.
9606
9607 @item
9608 Boot the USB installation image in an VM:
9609
9610 @example
9611 qemu-system-x86_64 -m 1024 -smp 1 \
9612 -net user -net nic,model=virtio -boot menu=on \
9613 -drive file=guixsd-install-@value{VERSION}.@var{system}.iso \
9614 -drive file=guixsd.img
9615 @end example
9616
9617 The ordering of the drives matters.
9618
9619 In the VM console, quickly press the @kbd{F12} key to enter the boot
9620 menu. Then press the @kbd{2} key and the @kbd{RET} key to validate your
9621 selection.
9622
9623 @item
9624 You're now root in the VM, proceed with the installation process.
9625 @xref{Preparing for Installation}, and follow the instructions.
9626 @end enumerate
9627
9628 Once installation is complete, you can boot the system that's on your
9629 @file{guixsd.img} image. @xref{Running GuixSD in a VM}, for how to do
9630 that.
9631
9632 @node Building the Installation Image
9633 @subsection Building the Installation Image
9634
9635 @cindex installation image
9636 The installation image described above was built using the @command{guix
9637 system} command, specifically:
9638
9639 @example
9640 guix system disk-image gnu/system/install.scm
9641 @end example
9642
9643 Have a look at @file{gnu/system/install.scm} in the source tree,
9644 and see also @ref{Invoking guix system} for more information
9645 about the installation image.
9646
9647 @subsection Building the Installation Image for ARM Boards
9648
9649 Many ARM boards require a specific variant of the
9650 @uref{http://www.denx.de/wiki/U-Boot/, U-Boot} bootloader.
9651
9652 If you build a disk image and the bootloader is not available otherwise
9653 (on another boot drive etc), it's advisable to build an image that
9654 includes the bootloader, specifically:
9655
9656 @example
9657 guix system disk-image --system=armhf-linux -e '((@@ (gnu system install) os-with-u-boot) (@@ (gnu system install) installation-os) "A20-OLinuXino-Lime2")'
9658 @end example
9659
9660 @code{A20-OLinuXino-Lime2} is the name of the board. If you specify an invalid
9661 board, a list of possible boards will be printed.
9662
9663 @node System Configuration
9664 @section System Configuration
9665
9666 @cindex system configuration
9667 The Guix System Distribution supports a consistent whole-system configuration
9668 mechanism. By that we mean that all aspects of the global system
9669 configuration---such as the available system services, timezone and
9670 locale settings, user accounts---are declared in a single place. Such
9671 a @dfn{system configuration} can be @dfn{instantiated}---i.e., effected.
9672
9673 One of the advantages of putting all the system configuration under the
9674 control of Guix is that it supports transactional system upgrades, and
9675 makes it possible to roll back to a previous system instantiation,
9676 should something go wrong with the new one (@pxref{Features}). Another
9677 advantage is that it makes it easy to replicate the exact same configuration
9678 across different machines, or at different points in time, without
9679 having to resort to additional administration tools layered on top of
9680 the own tools of the system.
9681 @c Yes, we're talking of Puppet, Chef, & co. here. ↑
9682
9683 This section describes this mechanism. First we focus on the system
9684 administrator's viewpoint---explaining how the system is configured and
9685 instantiated. Then we show how this mechanism can be extended, for
9686 instance to support new system services.
9687
9688 @menu
9689 * Using the Configuration System:: Customizing your GNU system.
9690 * operating-system Reference:: Detail of operating-system declarations.
9691 * File Systems:: Configuring file system mounts.
9692 * Mapped Devices:: Block device extra processing.
9693 * User Accounts:: Specifying user accounts.
9694 * Locales:: Language and cultural convention settings.
9695 * Services:: Specifying system services.
9696 * Setuid Programs:: Programs running with root privileges.
9697 * X.509 Certificates:: Authenticating HTTPS servers.
9698 * Name Service Switch:: Configuring libc's name service switch.
9699 * Initial RAM Disk:: Linux-Libre bootstrapping.
9700 * Bootloader Configuration:: Configuring the boot loader.
9701 * Invoking guix system:: Instantiating a system configuration.
9702 * Running GuixSD in a VM:: How to run GuixSD in a virtual machine.
9703 * Defining Services:: Adding new service definitions.
9704 @end menu
9705
9706 @node Using the Configuration System
9707 @subsection Using the Configuration System
9708
9709 The operating system is configured by providing an
9710 @code{operating-system} declaration in a file that can then be passed to
9711 the @command{guix system} command (@pxref{Invoking guix system}). A
9712 simple setup, with the default system services, the default Linux-Libre
9713 kernel, initial RAM disk, and boot loader looks like this:
9714
9715 @findex operating-system
9716 @lisp
9717 @include os-config-bare-bones.texi
9718 @end lisp
9719
9720 This example should be self-describing. Some of the fields defined
9721 above, such as @code{host-name} and @code{bootloader}, are mandatory.
9722 Others, such as @code{packages} and @code{services}, can be omitted, in
9723 which case they get a default value.
9724
9725 Below we discuss the effect of some of the most important fields
9726 (@pxref{operating-system Reference}, for details about all the available
9727 fields), and how to @dfn{instantiate} the operating system using
9728 @command{guix system}.
9729
9730 @unnumberedsubsubsec Bootloader
9731
9732 @cindex legacy boot, on Intel machines
9733 @cindex BIOS boot, on Intel machines
9734 @cindex UEFI boot
9735 @cindex EFI boot
9736 The @code{bootloader} field describes the method that will be used to boot
9737 your system. Machines based on Intel processors can boot in ``legacy'' BIOS
9738 mode, as in the example above. However, more recent machines rely instead on
9739 the @dfn{Unified Extensible Firmware Interface} (UEFI) to boot. In that case,
9740 the @code{bootloader} field should contain something along these lines:
9741
9742 @example
9743 (bootloader-configuration
9744 (bootloader grub-efi-bootloader)
9745 (target "/boot/efi"))
9746 @end example
9747
9748 @xref{Bootloader Configuration}, for more information on the available
9749 configuration options.
9750
9751 @unnumberedsubsubsec Globally-Visible Packages
9752
9753 @vindex %base-packages
9754 The @code{packages} field lists packages that will be globally visible
9755 on the system, for all user accounts---i.e., in every user's @code{PATH}
9756 environment variable---in addition to the per-user profiles
9757 (@pxref{Invoking guix package}). The @var{%base-packages} variable
9758 provides all the tools one would expect for basic user and administrator
9759 tasks---including the GNU Core Utilities, the GNU Networking Utilities,
9760 the GNU Zile lightweight text editor, @command{find}, @command{grep},
9761 etc. The example above adds GNU@tie{}Screen to those,
9762 taken from the @code{(gnu packages screen)}
9763 module (@pxref{Package Modules}). The
9764 @code{(list package output)} syntax can be used to add a specific output
9765 of a package:
9766
9767 @lisp
9768 (use-modules (gnu packages))
9769 (use-modules (gnu packages dns))
9770
9771 (operating-system
9772 ;; ...
9773 (packages (cons (list bind "utils")
9774 %base-packages)))
9775 @end lisp
9776
9777 @findex specification->package
9778 Referring to packages by variable name, like @code{bind} above, has
9779 the advantage of being unambiguous; it also allows typos and such to be
9780 diagnosed right away as ``unbound variables''. The downside is that one
9781 needs to know which module defines which package, and to augment the
9782 @code{use-package-modules} line accordingly. To avoid that, one can use
9783 the @code{specification->package} procedure of the @code{(gnu packages)}
9784 module, which returns the best package for a given name or name and
9785 version:
9786
9787 @lisp
9788 (use-modules (gnu packages))
9789
9790 (operating-system
9791 ;; ...
9792 (packages (append (map specification->package
9793 '("tcpdump" "htop" "gnupg@@2.0"))
9794 %base-packages)))
9795 @end lisp
9796
9797 @unnumberedsubsubsec System Services
9798
9799 @cindex services
9800 @vindex %base-services
9801 The @code{services} field lists @dfn{system services} to be made
9802 available when the system starts (@pxref{Services}).
9803 The @code{operating-system} declaration above specifies that, in
9804 addition to the basic services, we want the @command{lshd} secure shell
9805 daemon listening on port 2222 (@pxref{Networking Services,
9806 @code{lsh-service}}). Under the hood,
9807 @code{lsh-service} arranges so that @code{lshd} is started with the
9808 right command-line options, possibly with supporting configuration files
9809 generated as needed (@pxref{Defining Services}).
9810
9811 @cindex customization, of services
9812 @findex modify-services
9813 Occasionally, instead of using the base services as is, you will want to
9814 customize them. To do this, use @code{modify-services} (@pxref{Service
9815 Reference, @code{modify-services}}) to modify the list.
9816
9817 For example, suppose you want to modify @code{guix-daemon} and Mingetty
9818 (the console log-in) in the @var{%base-services} list (@pxref{Base
9819 Services, @code{%base-services}}). To do that, you can write the
9820 following in your operating system declaration:
9821
9822 @lisp
9823 (define %my-services
9824 ;; My very own list of services.
9825 (modify-services %base-services
9826 (guix-service-type config =>
9827 (guix-configuration
9828 (inherit config)
9829 (use-substitutes? #f)
9830 (extra-options '("--gc-keep-derivations"))))
9831 (mingetty-service-type config =>
9832 (mingetty-configuration
9833 (inherit config)))))
9834
9835 (operating-system
9836 ;; @dots{}
9837 (services %my-services))
9838 @end lisp
9839
9840 This changes the configuration---i.e., the service parameters---of the
9841 @code{guix-service-type} instance, and that of all the
9842 @code{mingetty-service-type} instances in the @var{%base-services} list.
9843 Observe how this is accomplished: first, we arrange for the original
9844 configuration to be bound to the identifier @code{config} in the
9845 @var{body}, and then we write the @var{body} so that it evaluates to the
9846 desired configuration. In particular, notice how we use @code{inherit}
9847 to create a new configuration which has the same values as the old
9848 configuration, but with a few modifications.
9849
9850 @cindex encrypted disk
9851 The configuration for a typical ``desktop'' usage, with an encrypted
9852 root partition, the X11 display
9853 server, GNOME and Xfce (users can choose which of these desktop
9854 environments to use at the log-in screen by pressing @kbd{F1}), network
9855 management, power management, and more, would look like this:
9856
9857 @lisp
9858 @include os-config-desktop.texi
9859 @end lisp
9860
9861 A graphical system with a choice of lightweight window managers
9862 instead of full-blown desktop environments would look like this:
9863
9864 @lisp
9865 @include os-config-lightweight-desktop.texi
9866 @end lisp
9867
9868 This example refers to the @file{/boot/efi} file system by its UUID,
9869 @code{1234-ABCD}. Replace this UUID with the right UUID on your system,
9870 as returned by the @command{blkid} command.
9871
9872 @xref{Desktop Services}, for the exact list of services provided by
9873 @var{%desktop-services}. @xref{X.509 Certificates}, for background
9874 information about the @code{nss-certs} package that is used here.
9875
9876 Again, @var{%desktop-services} is just a list of service objects. If
9877 you want to remove services from there, you can do so using the
9878 procedures for list filtering (@pxref{SRFI-1 Filtering and
9879 Partitioning,,, guile, GNU Guile Reference Manual}). For instance, the
9880 following expression returns a list that contains all the services in
9881 @var{%desktop-services} minus the Avahi service:
9882
9883 @example
9884 (remove (lambda (service)
9885 (eq? (service-kind service) avahi-service-type))
9886 %desktop-services)
9887 @end example
9888
9889 @unnumberedsubsubsec Instantiating the System
9890
9891 Assuming the @code{operating-system} declaration
9892 is stored in the @file{my-system-config.scm}
9893 file, the @command{guix system reconfigure my-system-config.scm} command
9894 instantiates that configuration, and makes it the default GRUB boot
9895 entry (@pxref{Invoking guix system}).
9896
9897 The normal way to change the system configuration is by updating this
9898 file and re-running @command{guix system reconfigure}. One should never
9899 have to touch files in @file{/etc} or to run commands that modify the
9900 system state such as @command{useradd} or @command{grub-install}. In
9901 fact, you must avoid that since that would not only void your warranty
9902 but also prevent you from rolling back to previous versions of your
9903 system, should you ever need to.
9904
9905 @cindex roll-back, of the operating system
9906 Speaking of roll-back, each time you run @command{guix system
9907 reconfigure}, a new @dfn{generation} of the system is created---without
9908 modifying or deleting previous generations. Old system generations get
9909 an entry in the bootloader boot menu, allowing you to boot them in case
9910 something went wrong with the latest generation. Reassuring, no? The
9911 @command{guix system list-generations} command lists the system
9912 generations available on disk. It is also possible to roll back the
9913 system via the commands @command{guix system roll-back} and
9914 @command{guix system switch-generation}.
9915
9916 Although the @command{guix system reconfigure} command will not modify
9917 previous generations, you must take care when the current generation is not
9918 the latest (e.g., after invoking @command{guix system roll-back}), since
9919 the operation might overwrite a later generation (@pxref{Invoking guix
9920 system}).
9921
9922 @unnumberedsubsubsec The Programming Interface
9923
9924 At the Scheme level, the bulk of an @code{operating-system} declaration
9925 is instantiated with the following monadic procedure (@pxref{The Store
9926 Monad}):
9927
9928 @deffn {Monadic Procedure} operating-system-derivation os
9929 Return a derivation that builds @var{os}, an @code{operating-system}
9930 object (@pxref{Derivations}).
9931
9932 The output of the derivation is a single directory that refers to all
9933 the packages, configuration files, and other supporting files needed to
9934 instantiate @var{os}.
9935 @end deffn
9936
9937 This procedure is provided by the @code{(gnu system)} module. Along
9938 with @code{(gnu services)} (@pxref{Services}), this module contains the
9939 guts of GuixSD. Make sure to visit it!
9940
9941
9942 @node operating-system Reference
9943 @subsection @code{operating-system} Reference
9944
9945 This section summarizes all the options available in
9946 @code{operating-system} declarations (@pxref{Using the Configuration
9947 System}).
9948
9949 @deftp {Data Type} operating-system
9950 This is the data type representing an operating system configuration.
9951 By that, we mean all the global system configuration, not per-user
9952 configuration (@pxref{Using the Configuration System}).
9953
9954 @table @asis
9955 @item @code{kernel} (default: @var{linux-libre})
9956 The package object of the operating system kernel to use@footnote{Currently
9957 only the Linux-libre kernel is supported. In the future, it will be
9958 possible to use the GNU@tie{}Hurd.}.
9959
9960 @item @code{kernel-arguments} (default: @code{'()})
9961 List of strings or gexps representing additional arguments to pass on
9962 the command-line of the kernel---e.g., @code{("console=ttyS0")}.
9963
9964 @item @code{bootloader}
9965 The system bootloader configuration object. @xref{Bootloader Configuration}.
9966
9967 @item @code{initrd-modules} (default: @code{%base-initrd-modules})
9968 @cindex initrd
9969 @cindex initial RAM disk
9970 The list of Linux kernel modules that need to be available in the
9971 initial RAM disk. @xref{Initial RAM Disk}.
9972
9973 @item @code{initrd} (default: @code{base-initrd})
9974 A procedure that returns an initial RAM disk for the Linux
9975 kernel. This field is provided to support low-level customization and
9976 should rarely be needed for casual use. @xref{Initial RAM Disk}.
9977
9978 @item @code{firmware} (default: @var{%base-firmware})
9979 @cindex firmware
9980 List of firmware packages loadable by the operating system kernel.
9981
9982 The default includes firmware needed for Atheros- and Broadcom-based
9983 WiFi devices (Linux-libre modules @code{ath9k} and @code{b43-open},
9984 respectively). @xref{Hardware Considerations}, for more info on
9985 supported hardware.
9986
9987 @item @code{host-name}
9988 The host name.
9989
9990 @item @code{hosts-file}
9991 @cindex hosts file
9992 A file-like object (@pxref{G-Expressions, file-like objects}) for use as
9993 @file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C Library
9994 Reference Manual}). The default is a file with entries for
9995 @code{localhost} and @var{host-name}.
9996
9997 @item @code{mapped-devices} (default: @code{'()})
9998 A list of mapped devices. @xref{Mapped Devices}.
9999
10000 @item @code{file-systems}
10001 A list of file systems. @xref{File Systems}.
10002
10003 @item @code{swap-devices} (default: @code{'()})
10004 @cindex swap devices
10005 A list of strings identifying devices or files to be used for ``swap
10006 space'' (@pxref{Memory Concepts,,, libc, The GNU C Library Reference
10007 Manual}). For example, @code{'("/dev/sda3")} or @code{'("/swapfile")}.
10008 It is possible to specify a swap file in a file system on a mapped
10009 device, provided that the necessary device mapping and file system are
10010 also specified. @xref{Mapped Devices} and @ref{File Systems}.
10011
10012 @item @code{users} (default: @code{%base-user-accounts})
10013 @itemx @code{groups} (default: @var{%base-groups})
10014 List of user accounts and groups. @xref{User Accounts}.
10015
10016 If the @code{users} list lacks a user account with UID@tie{}0, a
10017 ``root'' account with UID@tie{}0 is automatically added.
10018
10019 @item @code{skeletons} (default: @code{(default-skeletons)})
10020 A list target file name/file-like object tuples (@pxref{G-Expressions,
10021 file-like objects}). These are the skeleton files that will be added to
10022 the home directory of newly-created user accounts.
10023
10024 For instance, a valid value may look like this:
10025
10026 @example
10027 `((".bashrc" ,(plain-file "bashrc" "echo Hello\n"))
10028 (".guile" ,(plain-file "guile"
10029 "(use-modules (ice-9 readline))
10030 (activate-readline)")))
10031 @end example
10032
10033 @item @code{issue} (default: @var{%default-issue})
10034 A string denoting the contents of the @file{/etc/issue} file, which is
10035 displayed when users log in on a text console.
10036
10037 @item @code{packages} (default: @var{%base-packages})
10038 The set of packages installed in the global profile, which is accessible
10039 at @file{/run/current-system/profile}.
10040
10041 The default set includes core utilities and it is good practice to
10042 install non-core utilities in user profiles (@pxref{Invoking guix
10043 package}).
10044
10045 @item @code{timezone}
10046 A timezone identifying string---e.g., @code{"Europe/Paris"}.
10047
10048 You can run the @command{tzselect} command to find out which timezone
10049 string corresponds to your region. Choosing an invalid timezone name
10050 causes @command{guix system} to fail.
10051
10052 @item @code{locale} (default: @code{"en_US.utf8"})
10053 The name of the default locale (@pxref{Locale Names,,, libc, The GNU C
10054 Library Reference Manual}). @xref{Locales}, for more information.
10055
10056 @item @code{locale-definitions} (default: @var{%default-locale-definitions})
10057 The list of locale definitions to be compiled and that may be used at
10058 run time. @xref{Locales}.
10059
10060 @item @code{locale-libcs} (default: @code{(list @var{glibc})})
10061 The list of GNU@tie{}libc packages whose locale data and tools are used
10062 to build the locale definitions. @xref{Locales}, for compatibility
10063 considerations that justify this option.
10064
10065 @item @code{name-service-switch} (default: @var{%default-nss})
10066 Configuration of the libc name service switch (NSS)---a
10067 @code{<name-service-switch>} object. @xref{Name Service Switch}, for
10068 details.
10069
10070 @item @code{services} (default: @var{%base-services})
10071 A list of service objects denoting system services. @xref{Services}.
10072
10073 @item @code{pam-services} (default: @code{(base-pam-services)})
10074 @cindex PAM
10075 @cindex pluggable authentication modules
10076 Linux @dfn{pluggable authentication module} (PAM) services.
10077 @c FIXME: Add xref to PAM services section.
10078
10079 @item @code{setuid-programs} (default: @var{%setuid-programs})
10080 List of string-valued G-expressions denoting setuid programs.
10081 @xref{Setuid Programs}.
10082
10083 @item @code{sudoers-file} (default: @var{%sudoers-specification})
10084 @cindex sudoers file
10085 The contents of the @file{/etc/sudoers} file as a file-like object
10086 (@pxref{G-Expressions, @code{local-file} and @code{plain-file}}).
10087
10088 This file specifies which users can use the @command{sudo} command, what
10089 they are allowed to do, and what privileges they may gain. The default
10090 is that only @code{root} and members of the @code{wheel} group may use
10091 @code{sudo}.
10092
10093 @end table
10094 @end deftp
10095
10096 @node File Systems
10097 @subsection File Systems
10098
10099 The list of file systems to be mounted is specified in the
10100 @code{file-systems} field of the operating system declaration
10101 (@pxref{Using the Configuration System}). Each file system is declared
10102 using the @code{file-system} form, like this:
10103
10104 @example
10105 (file-system
10106 (mount-point "/home")
10107 (device "/dev/sda3")
10108 (type "ext4"))
10109 @end example
10110
10111 As usual, some of the fields are mandatory---those shown in the example
10112 above---while others can be omitted. These are described below.
10113
10114 @deftp {Data Type} file-system
10115 Objects of this type represent file systems to be mounted. They
10116 contain the following members:
10117
10118 @table @asis
10119 @item @code{type}
10120 This is a string specifying the type of the file system---e.g.,
10121 @code{"ext4"}.
10122
10123 @item @code{mount-point}
10124 This designates the place where the file system is to be mounted.
10125
10126 @item @code{device}
10127 This names the ``source'' of the file system. It can be one of three
10128 things: a file system label, a file system UUID, or the name of a
10129 @file{/dev} node. Labels and UUIDs offer a way to refer to file
10130 systems without having to hard-code their actual device
10131 name@footnote{Note that, while it is tempting to use
10132 @file{/dev/disk/by-uuid} and similar device names to achieve the same
10133 result, this is not recommended: These special device nodes are created
10134 by the udev daemon and may be unavailable at the time the device is
10135 mounted.}.
10136
10137 @findex file-system-label
10138 File system labels are created using the @code{file-system-label}
10139 procedure, UUIDs are created using @code{uuid}, and @file{/dev} node are
10140 plain strings. Here's an example of a file system referred to by its
10141 label, as shown by the @command{e2label} command:
10142
10143 @example
10144 (file-system
10145 (mount-point "/home")
10146 (type "ext4")
10147 (device (file-system-label "my-home")))
10148 @end example
10149
10150 @findex uuid
10151 UUIDs are converted from their string representation (as shown by the
10152 @command{tune2fs -l} command) using the @code{uuid} form@footnote{The
10153 @code{uuid} form expects 16-byte UUIDs as defined in
10154 @uref{https://tools.ietf.org/html/rfc4122, RFC@tie{}4122}. This is the
10155 form of UUID used by the ext2 family of file systems and others, but it
10156 is different from ``UUIDs'' found in FAT file systems, for instance.},
10157 like this:
10158
10159 @example
10160 (file-system
10161 (mount-point "/home")
10162 (type "ext4")
10163 (device (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")))
10164 @end example
10165
10166 When the source of a file system is a mapped device (@pxref{Mapped
10167 Devices}), its @code{device} field @emph{must} refer to the mapped
10168 device name---e.g., @file{"/dev/mapper/root-partition"}.
10169 This is required so that
10170 the system knows that mounting the file system depends on having the
10171 corresponding device mapping established.
10172
10173 @item @code{flags} (default: @code{'()})
10174 This is a list of symbols denoting mount flags. Recognized flags
10175 include @code{read-only}, @code{bind-mount}, @code{no-dev} (disallow
10176 access to special files), @code{no-suid} (ignore setuid and setgid
10177 bits), and @code{no-exec} (disallow program execution.)
10178
10179 @item @code{options} (default: @code{#f})
10180 This is either @code{#f}, or a string denoting mount options.
10181
10182 @item @code{mount?} (default: @code{#t})
10183 This value indicates whether to automatically mount the file system when
10184 the system is brought up. When set to @code{#f}, the file system gets
10185 an entry in @file{/etc/fstab} (read by the @command{mount} command) but
10186 is not automatically mounted.
10187
10188 @item @code{needed-for-boot?} (default: @code{#f})
10189 This Boolean value indicates whether the file system is needed when
10190 booting. If that is true, then the file system is mounted when the
10191 initial RAM disk (initrd) is loaded. This is always the case, for
10192 instance, for the root file system.
10193
10194 @item @code{check?} (default: @code{#t})
10195 This Boolean indicates whether the file system needs to be checked for
10196 errors before being mounted.
10197
10198 @item @code{create-mount-point?} (default: @code{#f})
10199 When true, the mount point is created if it does not exist yet.
10200
10201 @item @code{dependencies} (default: @code{'()})
10202 This is a list of @code{<file-system>} or @code{<mapped-device>} objects
10203 representing file systems that must be mounted or mapped devices that
10204 must be opened before (and unmounted or closed after) this one.
10205
10206 As an example, consider a hierarchy of mounts: @file{/sys/fs/cgroup} is
10207 a dependency of @file{/sys/fs/cgroup/cpu} and
10208 @file{/sys/fs/cgroup/memory}.
10209
10210 Another example is a file system that depends on a mapped device, for
10211 example for an encrypted partition (@pxref{Mapped Devices}).
10212 @end table
10213 @end deftp
10214
10215 The @code{(gnu system file-systems)} exports the following useful
10216 variables.
10217
10218 @defvr {Scheme Variable} %base-file-systems
10219 These are essential file systems that are required on normal systems,
10220 such as @var{%pseudo-terminal-file-system} and @var{%immutable-store} (see
10221 below.) Operating system declarations should always contain at least
10222 these.
10223 @end defvr
10224
10225 @defvr {Scheme Variable} %pseudo-terminal-file-system
10226 This is the file system to be mounted as @file{/dev/pts}. It supports
10227 @dfn{pseudo-terminals} created @i{via} @code{openpty} and similar
10228 functions (@pxref{Pseudo-Terminals,,, libc, The GNU C Library Reference
10229 Manual}). Pseudo-terminals are used by terminal emulators such as
10230 @command{xterm}.
10231 @end defvr
10232
10233 @defvr {Scheme Variable} %shared-memory-file-system
10234 This file system is mounted as @file{/dev/shm} and is used to support
10235 memory sharing across processes (@pxref{Memory-mapped I/O,
10236 @code{shm_open},, libc, The GNU C Library Reference Manual}).
10237 @end defvr
10238
10239 @defvr {Scheme Variable} %immutable-store
10240 This file system performs a read-only ``bind mount'' of
10241 @file{/gnu/store}, making it read-only for all the users including
10242 @code{root}. This prevents against accidental modification by software
10243 running as @code{root} or by system administrators.
10244
10245 The daemon itself is still able to write to the store: it remounts it
10246 read-write in its own ``name space.''
10247 @end defvr
10248
10249 @defvr {Scheme Variable} %binary-format-file-system
10250 The @code{binfmt_misc} file system, which allows handling of arbitrary
10251 executable file types to be delegated to user space. This requires the
10252 @code{binfmt.ko} kernel module to be loaded.
10253 @end defvr
10254
10255 @defvr {Scheme Variable} %fuse-control-file-system
10256 The @code{fusectl} file system, which allows unprivileged users to mount
10257 and unmount user-space FUSE file systems. This requires the
10258 @code{fuse.ko} kernel module to be loaded.
10259 @end defvr
10260
10261 @node Mapped Devices
10262 @subsection Mapped Devices
10263
10264 @cindex device mapping
10265 @cindex mapped devices
10266 The Linux kernel has a notion of @dfn{device mapping}: a block device,
10267 such as a hard disk partition, can be @dfn{mapped} into another device,
10268 usually in @code{/dev/mapper/},
10269 with additional processing over the data that flows through
10270 it@footnote{Note that the GNU@tie{}Hurd makes no difference between the
10271 concept of a ``mapped device'' and that of a file system: both boil down
10272 to @emph{translating} input/output operations made on a file to
10273 operations on its backing store. Thus, the Hurd implements mapped
10274 devices, like file systems, using the generic @dfn{translator} mechanism
10275 (@pxref{Translators,,, hurd, The GNU Hurd Reference Manual}).}. A
10276 typical example is encryption device mapping: all writes to the mapped
10277 device are encrypted, and all reads are deciphered, transparently.
10278 Guix extends this notion by considering any device or set of devices that
10279 are @dfn{transformed} in some way to create a new device; for instance,
10280 RAID devices are obtained by @dfn{assembling} several other devices, such
10281 as hard disks or partitions, into a new one that behaves as one partition.
10282 Other examples, not yet implemented, are LVM logical volumes.
10283
10284 Mapped devices are declared using the @code{mapped-device} form,
10285 defined as follows; for examples, see below.
10286
10287 @deftp {Data Type} mapped-device
10288 Objects of this type represent device mappings that will be made when
10289 the system boots up.
10290
10291 @table @code
10292 @item source
10293 This is either a string specifying the name of the block device to be mapped,
10294 such as @code{"/dev/sda3"}, or a list of such strings when several devices
10295 need to be assembled for creating a new one.
10296
10297 @item target
10298 This string specifies the name of the resulting mapped device. For
10299 kernel mappers such as encrypted devices of type @code{luks-device-mapping},
10300 specifying @code{"my-partition"} leads to the creation of
10301 the @code{"/dev/mapper/my-partition"} device.
10302 For RAID devices of type @code{raid-device-mapping}, the full device name
10303 such as @code{"/dev/md0"} needs to be given.
10304
10305 @item type
10306 This must be a @code{mapped-device-kind} object, which specifies how
10307 @var{source} is mapped to @var{target}.
10308 @end table
10309 @end deftp
10310
10311 @defvr {Scheme Variable} luks-device-mapping
10312 This defines LUKS block device encryption using the @command{cryptsetup}
10313 command from the package with the same name. It relies on the
10314 @code{dm-crypt} Linux kernel module.
10315 @end defvr
10316
10317 @defvr {Scheme Variable} raid-device-mapping
10318 This defines a RAID device, which is assembled using the @code{mdadm}
10319 command from the package with the same name. It requires a Linux kernel
10320 module for the appropriate RAID level to be loaded, such as @code{raid456}
10321 for RAID-4, RAID-5 or RAID-6, or @code{raid10} for RAID-10.
10322 @end defvr
10323
10324 @cindex disk encryption
10325 @cindex LUKS
10326 The following example specifies a mapping from @file{/dev/sda3} to
10327 @file{/dev/mapper/home} using LUKS---the
10328 @url{https://gitlab.com/cryptsetup/cryptsetup,Linux Unified Key Setup}, a
10329 standard mechanism for disk encryption.
10330 The @file{/dev/mapper/home}
10331 device can then be used as the @code{device} of a @code{file-system}
10332 declaration (@pxref{File Systems}).
10333
10334 @example
10335 (mapped-device
10336 (source "/dev/sda3")
10337 (target "home")
10338 (type luks-device-mapping))
10339 @end example
10340
10341 Alternatively, to become independent of device numbering, one may obtain
10342 the LUKS UUID (@dfn{unique identifier}) of the source device by a
10343 command like:
10344
10345 @example
10346 cryptsetup luksUUID /dev/sda3
10347 @end example
10348
10349 and use it as follows:
10350
10351 @example
10352 (mapped-device
10353 (source (uuid "cb67fc72-0d54-4c88-9d4b-b225f30b0f44"))
10354 (target "home")
10355 (type luks-device-mapping))
10356 @end example
10357
10358 @cindex swap encryption
10359 It is also desirable to encrypt swap space, since swap space may contain
10360 sensitive data. One way to accomplish that is to use a swap file in a
10361 file system on a device mapped via LUKS encryption. In this way, the
10362 swap file is encrypted because the entire device is encrypted.
10363 @xref{Preparing for Installation,,Disk Partitioning}, for an example.
10364
10365 A RAID device formed of the partitions @file{/dev/sda1} and @file{/dev/sdb1}
10366 may be declared as follows:
10367
10368 @example
10369 (mapped-device
10370 (source (list "/dev/sda1" "/dev/sdb1"))
10371 (target "/dev/md0")
10372 (type raid-device-mapping))
10373 @end example
10374
10375 The @file{/dev/md0} device can then be used as the @code{device} of a
10376 @code{file-system} declaration (@pxref{File Systems}).
10377 Note that the RAID level need not be given; it is chosen during the
10378 initial creation and formatting of the RAID device and is determined
10379 automatically later.
10380
10381
10382 @node User Accounts
10383 @subsection User Accounts
10384
10385 @cindex users
10386 @cindex accounts
10387 @cindex user accounts
10388 User accounts and groups are entirely managed through the
10389 @code{operating-system} declaration. They are specified with the
10390 @code{user-account} and @code{user-group} forms:
10391
10392 @example
10393 (user-account
10394 (name "alice")
10395 (group "users")
10396 (supplementary-groups '("wheel" ;allow use of sudo, etc.
10397 "audio" ;sound card
10398 "video" ;video devices such as webcams
10399 "cdrom")) ;the good ol' CD-ROM
10400 (comment "Bob's sister")
10401 (home-directory "/home/alice"))
10402 @end example
10403
10404 When booting or upon completion of @command{guix system reconfigure},
10405 the system ensures that only the user accounts and groups specified in
10406 the @code{operating-system} declaration exist, and with the specified
10407 properties. Thus, account or group creations or modifications made by
10408 directly invoking commands such as @command{useradd} are lost upon
10409 reconfiguration or reboot. This ensures that the system remains exactly
10410 as declared.
10411
10412 @deftp {Data Type} user-account
10413 Objects of this type represent user accounts. The following members may
10414 be specified:
10415
10416 @table @asis
10417 @item @code{name}
10418 The name of the user account.
10419
10420 @item @code{group}
10421 @cindex groups
10422 This is the name (a string) or identifier (a number) of the user group
10423 this account belongs to.
10424
10425 @item @code{supplementary-groups} (default: @code{'()})
10426 Optionally, this can be defined as a list of group names that this
10427 account belongs to.
10428
10429 @item @code{uid} (default: @code{#f})
10430 This is the user ID for this account (a number), or @code{#f}. In the
10431 latter case, a number is automatically chosen by the system when the
10432 account is created.
10433
10434 @item @code{comment} (default: @code{""})
10435 A comment about the account, such as the account owner's full name.
10436
10437 @item @code{home-directory}
10438 This is the name of the home directory for the account.
10439
10440 @item @code{create-home-directory?} (default: @code{#t})
10441 Indicates whether the home directory of this account should be created
10442 if it does not exist yet.
10443
10444 @item @code{shell} (default: Bash)
10445 This is a G-expression denoting the file name of a program to be used as
10446 the shell (@pxref{G-Expressions}).
10447
10448 @item @code{system?} (default: @code{#f})
10449 This Boolean value indicates whether the account is a ``system''
10450 account. System accounts are sometimes treated specially; for instance,
10451 graphical login managers do not list them.
10452
10453 @anchor{user-account-password}
10454 @item @code{password} (default: @code{#f})
10455 You would normally leave this field to @code{#f}, initialize user
10456 passwords as @code{root} with the @command{passwd} command, and then let
10457 users change it with @command{passwd}. Passwords set with
10458 @command{passwd} are of course preserved across reboot and
10459 reconfiguration.
10460
10461 If you @emph{do} want to have a preset password for an account, then
10462 this field must contain the encrypted password, as a string.
10463 @xref{crypt,,, libc, The GNU C Library Reference Manual}, for more information
10464 on password encryption, and @ref{Encryption,,, guile, GNU Guile Reference
10465 Manual}, for information on Guile's @code{crypt} procedure.
10466
10467 @end table
10468 @end deftp
10469
10470 @cindex groups
10471 User group declarations are even simpler:
10472
10473 @example
10474 (user-group (name "students"))
10475 @end example
10476
10477 @deftp {Data Type} user-group
10478 This type is for, well, user groups. There are just a few fields:
10479
10480 @table @asis
10481 @item @code{name}
10482 The name of the group.
10483
10484 @item @code{id} (default: @code{#f})
10485 The group identifier (a number). If @code{#f}, a new number is
10486 automatically allocated when the group is created.
10487
10488 @item @code{system?} (default: @code{#f})
10489 This Boolean value indicates whether the group is a ``system'' group.
10490 System groups have low numerical IDs.
10491
10492 @item @code{password} (default: @code{#f})
10493 What, user groups can have a password? Well, apparently yes. Unless
10494 @code{#f}, this field specifies the password of the group.
10495
10496 @end table
10497 @end deftp
10498
10499 For convenience, a variable lists all the basic user groups one may
10500 expect:
10501
10502 @defvr {Scheme Variable} %base-groups
10503 This is the list of basic user groups that users and/or packages expect
10504 to be present on the system. This includes groups such as ``root'',
10505 ``wheel'', and ``users'', as well as groups used to control access to
10506 specific devices such as ``audio'', ``disk'', and ``cdrom''.
10507 @end defvr
10508
10509 @defvr {Scheme Variable} %base-user-accounts
10510 This is the list of basic system accounts that programs may expect to
10511 find on a GNU/Linux system, such as the ``nobody'' account.
10512
10513 Note that the ``root'' account is not included here. It is a
10514 special-case and is automatically added whether or not it is specified.
10515 @end defvr
10516
10517 @node Locales
10518 @subsection Locales
10519
10520 @cindex locale
10521 A @dfn{locale} defines cultural conventions for a particular language
10522 and region of the world (@pxref{Locales,,, libc, The GNU C Library
10523 Reference Manual}). Each locale has a name that typically has the form
10524 @code{@var{language}_@var{territory}.@var{codeset}}---e.g.,
10525 @code{fr_LU.utf8} designates the locale for the French language, with
10526 cultural conventions from Luxembourg, and using the UTF-8 encoding.
10527
10528 @cindex locale definition
10529 Usually, you will want to specify the default locale for the machine
10530 using the @code{locale} field of the @code{operating-system} declaration
10531 (@pxref{operating-system Reference, @code{locale}}).
10532
10533 The selected locale is automatically added to the @dfn{locale
10534 definitions} known to the system if needed, with its codeset inferred
10535 from its name---e.g., @code{bo_CN.utf8} will be assumed to use the
10536 @code{UTF-8} codeset. Additional locale definitions can be specified in
10537 the @code{locale-definitions} slot of @code{operating-system}---this is
10538 useful, for instance, if the codeset could not be inferred from the
10539 locale name. The default set of locale definitions includes some widely
10540 used locales, but not all the available locales, in order to save space.
10541
10542 For instance, to add the North Frisian locale for Germany, the value of
10543 that field may be:
10544
10545 @example
10546 (cons (locale-definition
10547 (name "fy_DE.utf8") (source "fy_DE"))
10548 %default-locale-definitions)
10549 @end example
10550
10551 Likewise, to save space, one might want @code{locale-definitions} to
10552 list only the locales that are actually used, as in:
10553
10554 @example
10555 (list (locale-definition
10556 (name "ja_JP.eucjp") (source "ja_JP")
10557 (charset "EUC-JP")))
10558 @end example
10559
10560 @vindex LOCPATH
10561 The compiled locale definitions are available at
10562 @file{/run/current-system/locale/X.Y}, where @code{X.Y} is the libc
10563 version, which is the default location where the GNU@tie{}libc provided
10564 by Guix looks for locale data. This can be overridden using the
10565 @code{LOCPATH} environment variable (@pxref{locales-and-locpath,
10566 @code{LOCPATH} and locale packages}).
10567
10568 The @code{locale-definition} form is provided by the @code{(gnu system
10569 locale)} module. Details are given below.
10570
10571 @deftp {Data Type} locale-definition
10572 This is the data type of a locale definition.
10573
10574 @table @asis
10575
10576 @item @code{name}
10577 The name of the locale. @xref{Locale Names,,, libc, The GNU C Library
10578 Reference Manual}, for more information on locale names.
10579
10580 @item @code{source}
10581 The name of the source for that locale. This is typically the
10582 @code{@var{language}_@var{territory}} part of the locale name.
10583
10584 @item @code{charset} (default: @code{"UTF-8"})
10585 The ``character set'' or ``code set'' for that locale,
10586 @uref{http://www.iana.org/assignments/character-sets, as defined by
10587 IANA}.
10588
10589 @end table
10590 @end deftp
10591
10592 @defvr {Scheme Variable} %default-locale-definitions
10593 A list of commonly used UTF-8 locales, used as the default
10594 value of the @code{locale-definitions} field of @code{operating-system}
10595 declarations.
10596
10597 @cindex locale name
10598 @cindex normalized codeset in locale names
10599 These locale definitions use the @dfn{normalized codeset} for the part
10600 that follows the dot in the name (@pxref{Using gettextized software,
10601 normalized codeset,, libc, The GNU C Library Reference Manual}). So for
10602 instance it has @code{uk_UA.utf8} but @emph{not}, say,
10603 @code{uk_UA.UTF-8}.
10604 @end defvr
10605
10606 @subsubsection Locale Data Compatibility Considerations
10607
10608 @cindex incompatibility, of locale data
10609 @code{operating-system} declarations provide a @code{locale-libcs} field
10610 to specify the GNU@tie{}libc packages that are used to compile locale
10611 declarations (@pxref{operating-system Reference}). ``Why would I
10612 care?'', you may ask. Well, it turns out that the binary format of
10613 locale data is occasionally incompatible from one libc version to
10614 another.
10615
10616 @c See <https://sourceware.org/ml/libc-alpha/2015-09/msg00575.html>
10617 @c and <https://lists.gnu.org/archive/html/guix-devel/2015-08/msg00737.html>.
10618 For instance, a program linked against libc version 2.21 is unable to
10619 read locale data produced with libc 2.22; worse, that program
10620 @emph{aborts} instead of simply ignoring the incompatible locale
10621 data@footnote{Versions 2.23 and later of GNU@tie{}libc will simply skip
10622 the incompatible locale data, which is already an improvement.}.
10623 Similarly, a program linked against libc 2.22 can read most, but not
10624 all, of the locale data from libc 2.21 (specifically, @code{LC_COLLATE}
10625 data is incompatible); thus calls to @code{setlocale} may fail, but
10626 programs will not abort.
10627
10628 The ``problem'' in GuixSD is that users have a lot of freedom: They can
10629 choose whether and when to upgrade software in their profiles, and might
10630 be using a libc version different from the one the system administrator
10631 used to build the system-wide locale data.
10632
10633 Fortunately, unprivileged users can also install their own locale data
10634 and define @var{GUIX_LOCPATH} accordingly (@pxref{locales-and-locpath,
10635 @code{GUIX_LOCPATH} and locale packages}).
10636
10637 Still, it is best if the system-wide locale data at
10638 @file{/run/current-system/locale} is built for all the libc versions
10639 actually in use on the system, so that all the programs can access
10640 it---this is especially crucial on a multi-user system. To do that, the
10641 administrator can specify several libc packages in the
10642 @code{locale-libcs} field of @code{operating-system}:
10643
10644 @example
10645 (use-package-modules base)
10646
10647 (operating-system
10648 ;; @dots{}
10649 (locale-libcs (list glibc-2.21 (canonical-package glibc))))
10650 @end example
10651
10652 This example would lead to a system containing locale definitions for
10653 both libc 2.21 and the current version of libc in
10654 @file{/run/current-system/locale}.
10655
10656
10657 @node Services
10658 @subsection Services
10659
10660 @cindex system services
10661 An important part of preparing an @code{operating-system} declaration is
10662 listing @dfn{system services} and their configuration (@pxref{Using the
10663 Configuration System}). System services are typically daemons launched
10664 when the system boots, or other actions needed at that time---e.g.,
10665 configuring network access.
10666
10667 GuixSD has a broad definition of ``service'' (@pxref{Service
10668 Composition}), but many services are managed by the GNU@tie{}Shepherd
10669 (@pxref{Shepherd Services}). On a running system, the @command{herd}
10670 command allows you to list the available services, show their status,
10671 start and stop them, or do other specific operations (@pxref{Jump
10672 Start,,, shepherd, The GNU Shepherd Manual}). For example:
10673
10674 @example
10675 # herd status
10676 @end example
10677
10678 The above command, run as @code{root}, lists the currently defined
10679 services. The @command{herd doc} command shows a synopsis of the given
10680 service and its associated actions:
10681
10682 @example
10683 # herd doc nscd
10684 Run libc's name service cache daemon (nscd).
10685
10686 # herd doc nscd action invalidate
10687 invalidate: Invalidate the given cache--e.g., 'hosts' for host name lookups.
10688 @end example
10689
10690 The @command{start}, @command{stop}, and @command{restart} sub-commands
10691 have the effect you would expect. For instance, the commands below stop
10692 the nscd service and restart the Xorg display server:
10693
10694 @example
10695 # herd stop nscd
10696 Service nscd has been stopped.
10697 # herd restart xorg-server
10698 Service xorg-server has been stopped.
10699 Service xorg-server has been started.
10700 @end example
10701
10702 The following sections document the available services, starting with
10703 the core services, that may be used in an @code{operating-system}
10704 declaration.
10705
10706 @menu
10707 * Base Services:: Essential system services.
10708 * Scheduled Job Execution:: The mcron service.
10709 * Log Rotation:: The rottlog service.
10710 * Networking Services:: Network setup, SSH daemon, etc.
10711 * X Window:: Graphical display.
10712 * Printing Services:: Local and remote printer support.
10713 * Desktop Services:: D-Bus and desktop services.
10714 * Sound Services:: ALSA and Pulseaudio services.
10715 * Database Services:: SQL databases, key-value stores, etc.
10716 * Mail Services:: IMAP, POP3, SMTP, and all that.
10717 * Messaging Services:: Messaging services.
10718 * Telephony Services:: Telephony services.
10719 * Monitoring Services:: Monitoring services.
10720 * Kerberos Services:: Kerberos services.
10721 * Web Services:: Web servers.
10722 * Certificate Services:: TLS certificates via Let's Encrypt.
10723 * DNS Services:: DNS daemons.
10724 * VPN Services:: VPN daemons.
10725 * Network File System:: NFS related services.
10726 * Continuous Integration:: The Cuirass service.
10727 * Power Management Services:: Extending battery life.
10728 * Audio Services:: The MPD.
10729 * Virtualization Services:: Virtualization services.
10730 * Version Control Services:: Providing remote access to Git repositories.
10731 * Game Services:: Game servers.
10732 * Miscellaneous Services:: Other services.
10733 @end menu
10734
10735 @node Base Services
10736 @subsubsection Base Services
10737
10738 The @code{(gnu services base)} module provides definitions for the basic
10739 services that one expects from the system. The services exported by
10740 this module are listed below.
10741
10742 @defvr {Scheme Variable} %base-services
10743 This variable contains a list of basic services (@pxref{Service Types
10744 and Services}, for more information on service objects) one would
10745 expect from the system: a login service (mingetty) on each tty, syslogd,
10746 the libc name service cache daemon (nscd), the udev device manager, and
10747 more.
10748
10749 This is the default value of the @code{services} field of
10750 @code{operating-system} declarations. Usually, when customizing a
10751 system, you will want to append services to @var{%base-services}, like
10752 this:
10753
10754 @example
10755 (cons* (avahi-service) (lsh-service) %base-services)
10756 @end example
10757 @end defvr
10758
10759 @defvr {Scheme Variable} special-files-service-type
10760 This is the service that sets up ``special files'' such as
10761 @file{/bin/sh}; an instance of it is part of @code{%base-services}.
10762
10763 The value associated with @code{special-files-service-type} services
10764 must be a list of tuples where the first element is the ``special file''
10765 and the second element is its target. By default it is:
10766
10767 @cindex @file{/bin/sh}
10768 @cindex @file{sh}, in @file{/bin}
10769 @example
10770 `(("/bin/sh" ,(file-append @var{bash} "/bin/sh")))
10771 @end example
10772
10773 @cindex @file{/usr/bin/env}
10774 @cindex @file{env}, in @file{/usr/bin}
10775 If you want to add, say, @code{/usr/bin/env} to your system, you can
10776 change it to:
10777
10778 @example
10779 `(("/bin/sh" ,(file-append @var{bash} "/bin/sh"))
10780 ("/usr/bin/env" ,(file-append @var{coreutils} "/bin/env")))
10781 @end example
10782
10783 Since this is part of @code{%base-services}, you can use
10784 @code{modify-services} to customize the set of special files
10785 (@pxref{Service Reference, @code{modify-services}}). But the simple way
10786 to add a special file is @i{via} the @code{extra-special-file} procedure
10787 (see below.)
10788 @end defvr
10789
10790 @deffn {Scheme Procedure} extra-special-file @var{file} @var{target}
10791 Use @var{target} as the ``special file'' @var{file}.
10792
10793 For example, adding the following lines to the @code{services} field of
10794 your operating system declaration leads to a @file{/usr/bin/env}
10795 symlink:
10796
10797 @example
10798 (extra-special-file "/usr/bin/env"
10799 (file-append coreutils "/bin/env"))
10800 @end example
10801 @end deffn
10802
10803 @deffn {Scheme Procedure} host-name-service @var{name}
10804 Return a service that sets the host name to @var{name}.
10805 @end deffn
10806
10807 @deffn {Scheme Procedure} login-service @var{config}
10808 Return a service to run login according to @var{config}, a
10809 @code{<login-configuration>} object, which specifies the message of the day,
10810 among other things.
10811 @end deffn
10812
10813 @deftp {Data Type} login-configuration
10814 This is the data type representing the configuration of login.
10815
10816 @table @asis
10817
10818 @item @code{motd}
10819 @cindex message of the day
10820 A file-like object containing the ``message of the day''.
10821
10822 @item @code{allow-empty-passwords?} (default: @code{#t})
10823 Allow empty passwords by default so that first-time users can log in when
10824 the 'root' account has just been created.
10825
10826 @end table
10827 @end deftp
10828
10829 @deffn {Scheme Procedure} mingetty-service @var{config}
10830 Return a service to run mingetty according to @var{config}, a
10831 @code{<mingetty-configuration>} object, which specifies the tty to run, among
10832 other things.
10833 @end deffn
10834
10835 @deftp {Data Type} mingetty-configuration
10836 This is the data type representing the configuration of Mingetty, which
10837 provides the default implementation of virtual console log-in.
10838
10839 @table @asis
10840
10841 @item @code{tty}
10842 The name of the console this Mingetty runs on---e.g., @code{"tty1"}.
10843
10844 @item @code{auto-login} (default: @code{#f})
10845 When true, this field must be a string denoting the user name under
10846 which the system automatically logs in. When it is @code{#f}, a
10847 user name and password must be entered to log in.
10848
10849 @item @code{login-program} (default: @code{#f})
10850 This must be either @code{#f}, in which case the default log-in program
10851 is used (@command{login} from the Shadow tool suite), or a gexp denoting
10852 the name of the log-in program.
10853
10854 @item @code{login-pause?} (default: @code{#f})
10855 When set to @code{#t} in conjunction with @var{auto-login}, the user
10856 will have to press a key before the log-in shell is launched.
10857
10858 @item @code{mingetty} (default: @var{mingetty})
10859 The Mingetty package to use.
10860
10861 @end table
10862 @end deftp
10863
10864 @deffn {Scheme Procedure} agetty-service @var{config}
10865 Return a service to run agetty according to @var{config}, an
10866 @code{<agetty-configuration>} object, which specifies the tty to run,
10867 among other things.
10868 @end deffn
10869
10870 @deftp {Data Type} agetty-configuration
10871 This is the data type representing the configuration of agetty, which
10872 implements virtual and serial console log-in. See the @code{agetty(8)}
10873 man page for more information.
10874
10875 @table @asis
10876
10877 @item @code{tty}
10878 The name of the console this agetty runs on, as a string---e.g.,
10879 @code{"ttyS0"}. This argument is optional, it will default to
10880 a reasonable default serial port used by the kernel Linux.
10881
10882 For this, if there is a value for an option @code{agetty.tty} in the kernel
10883 command line, agetty will extract the device name of the serial port
10884 from it and use that.
10885
10886 If not and if there is a value for an option @code{console} with a tty in
10887 the Linux command line, agetty will extract the device name of the
10888 serial port from it and use that.
10889
10890 In both cases, agetty will leave the other serial device settings
10891 (baud rate etc.) alone---in the hope that Linux pinned them to the
10892 correct values.
10893
10894 @item @code{baud-rate} (default: @code{#f})
10895 A string containing a comma-separated list of one or more baud rates, in
10896 descending order.
10897
10898 @item @code{term} (default: @code{#f})
10899 A string containing the value used for the @code{TERM} environment
10900 variable.
10901
10902 @item @code{eight-bits?} (default: @code{#f})
10903 When @code{#t}, the tty is assumed to be 8-bit clean, and parity detection is
10904 disabled.
10905
10906 @item @code{auto-login} (default: @code{#f})
10907 When passed a login name, as a string, the specified user will be logged
10908 in automatically without prompting for their login name or password.
10909
10910 @item @code{no-reset?} (default: @code{#f})
10911 When @code{#t}, don't reset terminal cflags (control modes).
10912
10913 @item @code{host} (default: @code{#f})
10914 This accepts a string containing the "login_host", which will be written
10915 into the @file{/var/run/utmpx} file.
10916
10917 @item @code{remote?} (default: @code{#f})
10918 When set to @code{#t} in conjunction with @var{host}, this will add an
10919 @code{-r} fakehost option to the command line of the login program
10920 specified in @var{login-program}.
10921
10922 @item @code{flow-control?} (default: @code{#f})
10923 When set to @code{#t}, enable hardware (RTS/CTS) flow control.
10924
10925 @item @code{no-issue?} (default: @code{#f})
10926 When set to @code{#t}, the contents of the @file{/etc/issue} file will
10927 not be displayed before presenting the login prompt.
10928
10929 @item @code{init-string} (default: @code{#f})
10930 This accepts a string that will be sent to the tty or modem before
10931 sending anything else. It can be used to initialize a modem.
10932
10933 @item @code{no-clear?} (default: @code{#f})
10934 When set to @code{#t}, agetty will not clear the screen before showing
10935 the login prompt.
10936
10937 @item @code{login-program} (default: (file-append shadow "/bin/login"))
10938 This must be either a gexp denoting the name of a log-in program, or
10939 unset, in which case the default value is the @command{login} from the
10940 Shadow tool suite.
10941
10942 @item @code{local-line} (default: @code{#f})
10943 Control the CLOCAL line flag. This accepts one of three symbols as
10944 arguments, @code{'auto}, @code{'always}, or @code{'never}. If @code{#f},
10945 the default value chosen by agetty is @code{'auto}.
10946
10947 @item @code{extract-baud?} (default: @code{#f})
10948 When set to @code{#t}, instruct agetty to try to extract the baud rate
10949 from the status messages produced by certain types of modems.
10950
10951 @item @code{skip-login?} (default: @code{#f})
10952 When set to @code{#t}, do not prompt the user for a login name. This
10953 can be used with @var{login-program} field to use non-standard login
10954 systems.
10955
10956 @item @code{no-newline?} (default: @code{#f})
10957 When set to @code{#t}, do not print a newline before printing the
10958 @file{/etc/issue} file.
10959
10960 @c Is this dangerous only when used with login-program, or always?
10961 @item @code{login-options} (default: @code{#f})
10962 This option accepts a string containing options that are passed to the
10963 login program. When used with the @var{login-program}, be aware that a
10964 malicious user could try to enter a login name containing embedded
10965 options that could be parsed by the login program.
10966
10967 @item @code{login-pause} (default: @code{#f})
10968 When set to @code{#t}, wait for any key before showing the login prompt.
10969 This can be used in conjunction with @var{auto-login} to save memory by
10970 lazily spawning shells.
10971
10972 @item @code{chroot} (default: @code{#f})
10973 Change root to the specified directory. This option accepts a directory
10974 path as a string.
10975
10976 @item @code{hangup?} (default: @code{#f})
10977 Use the Linux system call @code{vhangup} to do a virtual hangup of the
10978 specified terminal.
10979
10980 @item @code{keep-baud?} (default: @code{#f})
10981 When set to @code{#t}, try to keep the existing baud rate. The baud
10982 rates from @var{baud-rate} are used when agetty receives a @key{BREAK}
10983 character.
10984
10985 @item @code{timeout} (default: @code{#f})
10986 When set to an integer value, terminate if no user name could be read
10987 within @var{timeout} seconds.
10988
10989 @item @code{detect-case?} (default: @code{#f})
10990 When set to @code{#t}, turn on support for detecting an uppercase-only
10991 terminal. This setting will detect a login name containing only
10992 uppercase letters as indicating an uppercase-only terminal and turn on
10993 some upper-to-lower case conversions. Note that this will not support
10994 Unicode characters.
10995
10996 @item @code{wait-cr?} (default: @code{#f})
10997 When set to @code{#t}, wait for the user or modem to send a
10998 carriage-return or linefeed character before displaying
10999 @file{/etc/issue} or login prompt. This is typically used with the
11000 @var{init-string} option.
11001
11002 @item @code{no-hints?} (default: @code{#f})
11003 When set to @code{#t}, do not print hints about Num, Caps, and Scroll
11004 locks.
11005
11006 @item @code{no-hostname?} (default: @code{#f})
11007 By default, the hostname is printed. When this option is set to
11008 @code{#t}, no hostname will be shown at all.
11009
11010 @item @code{long-hostname?} (default: @code{#f})
11011 By default, the hostname is only printed until the first dot. When this
11012 option is set to @code{#t}, the fully qualified hostname by
11013 @code{gethostname} or @code{getaddrinfo} is shown.
11014
11015 @item @code{erase-characters} (default: @code{#f})
11016 This option accepts a string of additional characters that should be
11017 interpreted as backspace when the user types their login name.
11018
11019 @item @code{kill-characters} (default: @code{#f})
11020 This option accepts a string that should be interpreted to mean "ignore
11021 all previous characters" (also called a "kill" character) when the types
11022 their login name.
11023
11024 @item @code{chdir} (default: @code{#f})
11025 This option accepts, as a string, a directory path that will be changed
11026 to before login.
11027
11028 @item @code{delay} (default: @code{#f})
11029 This options accepts, as an integer, the number of seconds to sleep
11030 before opening the tty and displaying the login prompt.
11031
11032 @item @code{nice} (default: @code{#f})
11033 This option accepts, as an integer, the nice value with which to run the
11034 @command{login} program.
11035
11036 @item @code{extra-options} (default: @code{'()})
11037 This option provides an "escape hatch" for the user to provide arbitrary
11038 command-line arguments to @command{agetty} as a list of strings.
11039
11040 @end table
11041 @end deftp
11042
11043 @deffn {Scheme Procedure} kmscon-service-type @var{config}
11044 Return a service to run @uref{https://www.freedesktop.org/wiki/Software/kmscon,kmscon}
11045 according to @var{config}, a @code{<kmscon-configuration>} object, which
11046 specifies the tty to run, among other things.
11047 @end deffn
11048
11049 @deftp {Data Type} kmscon-configuration
11050 This is the data type representing the configuration of Kmscon, which
11051 implements virtual console log-in.
11052
11053 @table @asis
11054
11055 @item @code{virtual-terminal}
11056 The name of the console this Kmscon runs on---e.g., @code{"tty1"}.
11057
11058 @item @code{login-program} (default: @code{#~(string-append #$shadow "/bin/login")})
11059 A gexp denoting the name of the log-in program. The default log-in program is
11060 @command{login} from the Shadow tool suite.
11061
11062 @item @code{login-arguments} (default: @code{'("-p")})
11063 A list of arguments to pass to @command{login}.
11064
11065 @item @code{auto-login} (default: @code{#f})
11066 When passed a login name, as a string, the specified user will be logged
11067 in automatically without prompting for their login name or password.
11068
11069 @item @code{hardware-acceleration?} (default: #f)
11070 Whether to use hardware acceleration.
11071
11072 @item @code{kmscon} (default: @var{kmscon})
11073 The Kmscon package to use.
11074
11075 @end table
11076 @end deftp
11077
11078 @cindex name service cache daemon
11079 @cindex nscd
11080 @deffn {Scheme Procedure} nscd-service [@var{config}] [#:glibc glibc] @
11081 [#:name-services '()]
11082 Return a service that runs the libc name service cache daemon (nscd) with the
11083 given @var{config}---an @code{<nscd-configuration>} object. @xref{Name
11084 Service Switch}, for an example.
11085
11086 For convenience, the Shepherd service for nscd provides the following actions:
11087
11088 @table @code
11089 @item invalidate
11090 @cindex cache invalidation, nscd
11091 @cindex nscd, cache invalidation
11092 This invalidate the given cache. For instance, running:
11093
11094 @example
11095 herd invalidate nscd hosts
11096 @end example
11097
11098 @noindent
11099 invalidates the host name lookup cache of nscd.
11100
11101 @item statistics
11102 Running @command{herd statistics nscd} displays information about nscd usage
11103 and caches.
11104 @end table
11105
11106 @end deffn
11107
11108 @defvr {Scheme Variable} %nscd-default-configuration
11109 This is the default @code{<nscd-configuration>} value (see below) used
11110 by @code{nscd-service}. It uses the caches defined by
11111 @var{%nscd-default-caches}; see below.
11112 @end defvr
11113
11114 @deftp {Data Type} nscd-configuration
11115 This is the data type representing the name service cache daemon (nscd)
11116 configuration.
11117
11118 @table @asis
11119
11120 @item @code{name-services} (default: @code{'()})
11121 List of packages denoting @dfn{name services} that must be visible to
11122 the nscd---e.g., @code{(list @var{nss-mdns})}.
11123
11124 @item @code{glibc} (default: @var{glibc})
11125 Package object denoting the GNU C Library providing the @command{nscd}
11126 command.
11127
11128 @item @code{log-file} (default: @code{"/var/log/nscd.log"})
11129 Name of the nscd log file. This is where debugging output goes when
11130 @code{debug-level} is strictly positive.
11131
11132 @item @code{debug-level} (default: @code{0})
11133 Integer denoting the debugging levels. Higher numbers mean that more
11134 debugging output is logged.
11135
11136 @item @code{caches} (default: @var{%nscd-default-caches})
11137 List of @code{<nscd-cache>} objects denoting things to be cached; see
11138 below.
11139
11140 @end table
11141 @end deftp
11142
11143 @deftp {Data Type} nscd-cache
11144 Data type representing a cache database of nscd and its parameters.
11145
11146 @table @asis
11147
11148 @item @code{database}
11149 This is a symbol representing the name of the database to be cached.
11150 Valid values are @code{passwd}, @code{group}, @code{hosts}, and
11151 @code{services}, which designate the corresponding NSS database
11152 (@pxref{NSS Basics,,, libc, The GNU C Library Reference Manual}).
11153
11154 @item @code{positive-time-to-live}
11155 @itemx @code{negative-time-to-live} (default: @code{20})
11156 A number representing the number of seconds during which a positive or
11157 negative lookup result remains in cache.
11158
11159 @item @code{check-files?} (default: @code{#t})
11160 Whether to check for updates of the files corresponding to
11161 @var{database}.
11162
11163 For instance, when @var{database} is @code{hosts}, setting this flag
11164 instructs nscd to check for updates in @file{/etc/hosts} and to take
11165 them into account.
11166
11167 @item @code{persistent?} (default: @code{#t})
11168 Whether the cache should be stored persistently on disk.
11169
11170 @item @code{shared?} (default: @code{#t})
11171 Whether the cache should be shared among users.
11172
11173 @item @code{max-database-size} (default: 32@tie{}MiB)
11174 Maximum size in bytes of the database cache.
11175
11176 @c XXX: 'suggested-size' and 'auto-propagate?' seem to be expert
11177 @c settings, so leave them out.
11178
11179 @end table
11180 @end deftp
11181
11182 @defvr {Scheme Variable} %nscd-default-caches
11183 List of @code{<nscd-cache>} objects used by default by
11184 @code{nscd-configuration} (see above).
11185
11186 It enables persistent and aggressive caching of service and host name
11187 lookups. The latter provides better host name lookup performance,
11188 resilience in the face of unreliable name servers, and also better
11189 privacy---often the result of host name lookups is in local cache, so
11190 external name servers do not even need to be queried.
11191 @end defvr
11192
11193 @anchor{syslog-configuration-type}
11194 @cindex syslog
11195 @cindex logging
11196 @deftp {Data Type} syslog-configuration
11197 This data type represents the configuration of the syslog daemon.
11198
11199 @table @asis
11200 @item @code{syslogd} (default: @code{#~(string-append #$inetutils "/libexec/syslogd")})
11201 The syslog daemon to use.
11202
11203 @item @code{config-file} (default: @code{%default-syslog.conf})
11204 The syslog configuration file to use.
11205
11206 @end table
11207 @end deftp
11208
11209 @anchor{syslog-service}
11210 @cindex syslog
11211 @deffn {Scheme Procedure} syslog-service @var{config}
11212 Return a service that runs a syslog daemon according to @var{config}.
11213
11214 @xref{syslogd invocation,,, inetutils, GNU Inetutils}, for more
11215 information on the configuration file syntax.
11216 @end deffn
11217
11218 @defvr {Scheme Variable} guix-service-type
11219 This is the type of the service that runs the build daemon,
11220 @command{guix-daemon} (@pxref{Invoking guix-daemon}). Its value must be a
11221 @code{guix-configuration} record as described below.
11222 @end defvr
11223
11224 @anchor{guix-configuration-type}
11225 @deftp {Data Type} guix-configuration
11226 This data type represents the configuration of the Guix build daemon.
11227 @xref{Invoking guix-daemon}, for more information.
11228
11229 @table @asis
11230 @item @code{guix} (default: @var{guix})
11231 The Guix package to use.
11232
11233 @item @code{build-group} (default: @code{"guixbuild"})
11234 Name of the group for build user accounts.
11235
11236 @item @code{build-accounts} (default: @code{10})
11237 Number of build user accounts to create.
11238
11239 @item @code{authorize-key?} (default: @code{#t})
11240 @cindex substitutes, authorization thereof
11241 Whether to authorize the substitute keys listed in
11242 @code{authorized-keys}---by default that of @code{hydra.gnu.org}
11243 (@pxref{Substitutes}).
11244
11245 @vindex %default-authorized-guix-keys
11246 @item @code{authorized-keys} (default: @var{%default-authorized-guix-keys})
11247 The list of authorized key files for archive imports, as a list of
11248 string-valued gexps (@pxref{Invoking guix archive}). By default, it
11249 contains that of @code{hydra.gnu.org} (@pxref{Substitutes}).
11250
11251 @item @code{use-substitutes?} (default: @code{#t})
11252 Whether to use substitutes.
11253
11254 @item @code{substitute-urls} (default: @var{%default-substitute-urls})
11255 The list of URLs where to look for substitutes by default.
11256
11257 @item @code{max-silent-time} (default: @code{0})
11258 @itemx @code{timeout} (default: @code{0})
11259 The number of seconds of silence and the number of seconds of activity,
11260 respectively, after which a build process times out. A value of zero
11261 disables the timeout.
11262
11263 @item @code{log-compression} (default: @code{'bzip2})
11264 The type of compression used for build logs---one of @code{gzip},
11265 @code{bzip2}, or @code{none}.
11266
11267 @item @code{extra-options} (default: @code{'()})
11268 List of extra command-line options for @command{guix-daemon}.
11269
11270 @item @code{log-file} (default: @code{"/var/log/guix-daemon.log"})
11271 File where @command{guix-daemon}'s standard output and standard error
11272 are written.
11273
11274 @item @code{http-proxy} (default: @code{#f})
11275 The HTTP proxy used for downloading fixed-output derivations and
11276 substitutes.
11277
11278 @item @code{tmpdir} (default: @code{#f})
11279 A directory path where the @command{guix-daemon} will perform builds.
11280
11281 @end table
11282 @end deftp
11283
11284 @deffn {Scheme Procedure} udev-service [#:udev @var{eudev} #:rules @code{'()}]
11285 Run @var{udev}, which populates the @file{/dev} directory dynamically.
11286 udev rules can be provided as a list of files through the @var{rules}
11287 variable. The procedures @var{udev-rule} and @var{file->udev-rule} from
11288 @code{(gnu services base)} simplify the creation of such rule files.
11289
11290 @deffn {Scheme Procedure} udev-rule [@var{file-name} @var{contents}]
11291 Return a udev-rule file named @var{file-name} containing the rules
11292 defined by the @var{contents} literal.
11293
11294 In the following example, a rule for a USB device is defined to be
11295 stored in the file @file{90-usb-thing.rules}. The rule runs a script
11296 upon detecting a USB device with a given product identifier.
11297
11298 @example
11299 (define %example-udev-rule
11300 (udev-rule
11301 "90-usb-thing.rules"
11302 (string-append "ACTION==\"add\", SUBSYSTEM==\"usb\", "
11303 "ATTR@{product@}==\"Example\", "
11304 "RUN+=\"/path/to/script\"")))
11305 @end example
11306 @end deffn
11307
11308 Here we show how the default @var{udev-service} can be extended with it.
11309
11310 @example
11311 (operating-system
11312 ;; @dots{}
11313 (services
11314 (modify-services %desktop-services
11315 (udev-service-type config =>
11316 (udev-configuration (inherit config)
11317 (rules (append (udev-configuration-rules config)
11318 (list %example-udev-rule))))))))
11319 @end example
11320
11321 @deffn {Scheme Procedure} file->udev-rule [@var{file-name} @var{file}]
11322 Return a udev file named @var{file-name} containing the rules defined
11323 within @var{file}, a file-like object.
11324
11325 The following example showcases how we can use an existing rule file.
11326
11327 @example
11328 (use-modules (guix download) ;for url-fetch
11329 (guix packages) ;for origin
11330 ;; @dots{})
11331
11332 (define %android-udev-rules
11333 (file->udev-rule
11334 "51-android-udev.rules"
11335 (let ((version "20170910"))
11336 (origin
11337 (method url-fetch)
11338 (uri (string-append "https://raw.githubusercontent.com/M0Rf30/"
11339 "android-udev-rules/" version "/51-android.rules"))
11340 (sha256
11341 (base32 "0lmmagpyb6xsq6zcr2w1cyx9qmjqmajkvrdbhjx32gqf1d9is003"))))))
11342 @end example
11343 @end deffn
11344
11345 Additionally, Guix package definitions can be included in @var{rules} in
11346 order to extend the udev rules with the definitions found under their
11347 @file{lib/udev/rules.d} sub-directory. In lieu of the previous
11348 @var{file->udev-rule} example, we could have used the
11349 @var{android-udev-rules} package which exists in Guix in the @code{(gnu
11350 packages android)} module.
11351
11352 The following example shows how to use the @var{android-udev-rules}
11353 package so that the Android tool @command{adb} can detect devices
11354 without root privileges. It also details how to create the
11355 @code{adbusers} group, which is required for the proper functioning of
11356 the rules defined within the @var{android-udev-rules} package. To
11357 create such a group, we must define it both as part of the
11358 @var{supplementary-groups} of our @var{user-account} declaration, as
11359 well as in the @var{groups} field of the @var{operating-system} record.
11360
11361 @example
11362 (use-modules (gnu packages android) ;for android-udev-rules
11363 (gnu system shadow) ;for user-group
11364 ;; @dots{})
11365
11366 (operating-system
11367 ;; @dots{}
11368 (users (cons (user-acount
11369 ;; @dots{}
11370 (supplementary-groups
11371 '("adbusers" ;for adb
11372 "wheel" "netdev" "audio" "video"))
11373 ;; @dots{})))
11374
11375 (groups (cons (user-group (system? #t) (name "adbusers"))
11376 %base-groups))
11377
11378 ;; @dots{}
11379
11380 (services
11381 (modify-services %desktop-services
11382 (udev-service-type config =>
11383 (udev-configuration (inherit config)
11384 (rules (cons* android-udev-rules
11385 (udev-configuration-rules config))))))))
11386 @end example
11387 @end deffn
11388
11389 @defvr {Scheme Variable} urandom-seed-service-type
11390 Save some entropy in @var{%random-seed-file} to seed @file{/dev/urandom}
11391 when rebooting. It also tries to seed @file{/dev/urandom} from
11392 @file{/dev/hwrng} while booting, if @file{/dev/hwrng} exists and is
11393 readable.
11394 @end defvr
11395
11396 @defvr {Scheme Variable} %random-seed-file
11397 This is the name of the file where some random bytes are saved by
11398 @var{urandom-seed-service} to seed @file{/dev/urandom} when rebooting.
11399 It defaults to @file{/var/lib/random-seed}.
11400 @end defvr
11401
11402 @cindex keymap
11403 @cindex keyboard
11404 @deffn {Scheme Procedure} console-keymap-service @var{files} ...
11405 @cindex keyboard layout
11406 Return a service to load console keymaps from @var{files} using
11407 @command{loadkeys} command. Most likely, you want to load some default
11408 keymap, which can be done like this:
11409
11410 @example
11411 (console-keymap-service "dvorak")
11412 @end example
11413
11414 Or, for example, for a Swedish keyboard, you may need to combine
11415 the following keymaps:
11416 @example
11417 (console-keymap-service "se-lat6" "se-fi-lat6")
11418 @end example
11419
11420 Also you can specify a full file name (or file names) of your keymap(s).
11421 See @code{man loadkeys} for details.
11422
11423 @end deffn
11424
11425 @cindex mouse
11426 @cindex gpm
11427 @defvr {Scheme Variable} gpm-service-type
11428 This is the type of the service that runs GPM, the @dfn{general-purpose
11429 mouse daemon}, which provides mouse support to the Linux console. GPM
11430 allows users to use the mouse in the console, notably to select, copy,
11431 and paste text.
11432
11433 The value for services of this type must be a @code{gpm-configuration}
11434 (see below). This service is not part of @var{%base-services}.
11435 @end defvr
11436
11437 @deftp {Data Type} gpm-configuration
11438 Data type representing the configuration of GPM.
11439
11440 @table @asis
11441 @item @code{options} (default: @code{%default-gpm-options})
11442 Command-line options passed to @command{gpm}. The default set of
11443 options instruct @command{gpm} to listen to mouse events on
11444 @file{/dev/input/mice}. @xref{Command Line,,, gpm, gpm manual}, for
11445 more information.
11446
11447 @item @code{gpm} (default: @code{gpm})
11448 The GPM package to use.
11449
11450 @end table
11451 @end deftp
11452
11453 @anchor{guix-publish-service-type}
11454 @deffn {Scheme Variable} guix-publish-service-type
11455 This is the service type for @command{guix publish} (@pxref{Invoking
11456 guix publish}). Its value must be a @code{guix-configuration}
11457 object, as described below.
11458
11459 This assumes that @file{/etc/guix} already contains a signing key pair as
11460 created by @command{guix archive --generate-key} (@pxref{Invoking guix
11461 archive}). If that is not the case, the service will fail to start.
11462 @end deffn
11463
11464 @deftp {Data Type} guix-publish-configuration
11465 Data type representing the configuration of the @code{guix publish}
11466 service.
11467
11468 @table @asis
11469 @item @code{guix} (default: @code{guix})
11470 The Guix package to use.
11471
11472 @item @code{port} (default: @code{80})
11473 The TCP port to listen for connections.
11474
11475 @item @code{host} (default: @code{"localhost"})
11476 The host (and thus, network interface) to listen to. Use
11477 @code{"0.0.0.0"} to listen on all the network interfaces.
11478
11479 @item @code{compression-level} (default: @code{3})
11480 The gzip compression level at which substitutes are compressed. Use
11481 @code{0} to disable compression altogether, and @code{9} to get the best
11482 compression ratio at the expense of increased CPU usage.
11483
11484 @item @code{nar-path} (default: @code{"nar"})
11485 The URL path at which ``nars'' can be fetched. @xref{Invoking guix
11486 publish, @code{--nar-path}}, for details.
11487
11488 @item @code{cache} (default: @code{#f})
11489 When it is @code{#f}, disable caching and instead generate archives on
11490 demand. Otherwise, this should be the name of a directory---e.g.,
11491 @code{"/var/cache/guix/publish"}---where @command{guix publish} caches
11492 archives and meta-data ready to be sent. @xref{Invoking guix publish,
11493 @option{--cache}}, for more information on the tradeoffs involved.
11494
11495 @item @code{workers} (default: @code{#f})
11496 When it is an integer, this is the number of worker threads used for
11497 caching; when @code{#f}, the number of processors is used.
11498 @xref{Invoking guix publish, @option{--workers}}, for more information.
11499
11500 @item @code{ttl} (default: @code{#f})
11501 When it is an integer, this denotes the @dfn{time-to-live} in seconds
11502 of the published archives. @xref{Invoking guix publish, @option{--ttl}},
11503 for more information.
11504 @end table
11505 @end deftp
11506
11507 @anchor{rngd-service}
11508 @deffn {Scheme Procedure} rngd-service [#:rng-tools @var{rng-tools}] @
11509 [#:device "/dev/hwrng"]
11510 Return a service that runs the @command{rngd} program from @var{rng-tools}
11511 to add @var{device} to the kernel's entropy pool. The service will fail if
11512 @var{device} does not exist.
11513 @end deffn
11514
11515 @anchor{pam-limits-service}
11516 @cindex session limits
11517 @cindex ulimit
11518 @cindex priority
11519 @cindex realtime
11520 @cindex jackd
11521 @deffn {Scheme Procedure} pam-limits-service [#:limits @code{'()}]
11522
11523 Return a service that installs a configuration file for the
11524 @uref{http://linux-pam.org/Linux-PAM-html/sag-pam_limits.html,
11525 @code{pam_limits} module}. The procedure optionally takes a list of
11526 @code{pam-limits-entry} values, which can be used to specify
11527 @code{ulimit} limits and nice priority limits to user sessions.
11528
11529 The following limits definition sets two hard and soft limits for all
11530 login sessions of users in the @code{realtime} group:
11531
11532 @example
11533 (pam-limits-service
11534 (list
11535 (pam-limits-entry "@@realtime" 'both 'rtprio 99)
11536 (pam-limits-entry "@@realtime" 'both 'memlock 'unlimited)))
11537 @end example
11538
11539 The first entry increases the maximum realtime priority for
11540 non-privileged processes; the second entry lifts any restriction of the
11541 maximum address space that can be locked in memory. These settings are
11542 commonly used for real-time audio systems.
11543 @end deffn
11544
11545 @node Scheduled Job Execution
11546 @subsubsection Scheduled Job Execution
11547
11548 @cindex cron
11549 @cindex mcron
11550 @cindex scheduling jobs
11551 The @code{(gnu services mcron)} module provides an interface to
11552 GNU@tie{}mcron, a daemon to run jobs at scheduled times (@pxref{Top,,,
11553 mcron, GNU@tie{}mcron}). GNU@tie{}mcron is similar to the traditional
11554 Unix @command{cron} daemon; the main difference is that it is
11555 implemented in Guile Scheme, which provides a lot of flexibility when
11556 specifying the scheduling of jobs and their actions.
11557
11558 The example below defines an operating system that runs the
11559 @command{updatedb} (@pxref{Invoking updatedb,,, find, Finding Files})
11560 and the @command{guix gc} commands (@pxref{Invoking guix gc}) daily, as
11561 well as the @command{mkid} command on behalf of an unprivileged user
11562 (@pxref{mkid invocation,,, idutils, ID Database Utilities}). It uses
11563 gexps to introduce job definitions that are passed to mcron
11564 (@pxref{G-Expressions}).
11565
11566 @lisp
11567 (use-modules (guix) (gnu) (gnu services mcron))
11568 (use-package-modules base idutils)
11569
11570 (define updatedb-job
11571 ;; Run 'updatedb' at 3AM every day. Here we write the
11572 ;; job's action as a Scheme procedure.
11573 #~(job '(next-hour '(3))
11574 (lambda ()
11575 (execl (string-append #$findutils "/bin/updatedb")
11576 "updatedb"
11577 "--prunepaths=/tmp /var/tmp /gnu/store"))))
11578
11579 (define garbage-collector-job
11580 ;; Collect garbage 5 minutes after midnight every day.
11581 ;; The job's action is a shell command.
11582 #~(job "5 0 * * *" ;Vixie cron syntax
11583 "guix gc -F 1G"))
11584
11585 (define idutils-job
11586 ;; Update the index database as user "charlie" at 12:15PM
11587 ;; and 19:15PM. This runs from the user's home directory.
11588 #~(job '(next-minute-from (next-hour '(12 19)) '(15))
11589 (string-append #$idutils "/bin/mkid src")
11590 #:user "charlie"))
11591
11592 (operating-system
11593 ;; @dots{}
11594 (services (cons (mcron-service (list garbage-collector-job
11595 updatedb-job
11596 idutils-job))
11597 %base-services)))
11598 @end lisp
11599
11600 @xref{Guile Syntax, mcron job specifications,, mcron, GNU@tie{}mcron},
11601 for more information on mcron job specifications. Below is the
11602 reference of the mcron service.
11603
11604 On a running system, you can use the @code{schedule} action of the service to
11605 visualize the mcron jobs that will be executed next:
11606
11607 @example
11608 # herd schedule mcron
11609 @end example
11610
11611 @noindent
11612 The example above lists the next five tasks that will be executed, but you can
11613 also specify the number of tasks to display:
11614
11615 @example
11616 # herd schedule mcron 10
11617 @end example
11618
11619 @deffn {Scheme Procedure} mcron-service @var{jobs} [#:mcron @var{mcron}]
11620 Return an mcron service running @var{mcron} that schedules @var{jobs}, a
11621 list of gexps denoting mcron job specifications.
11622
11623 This is a shorthand for:
11624 @example
11625 (service mcron-service-type
11626 (mcron-configuration (mcron mcron) (jobs jobs)))
11627 @end example
11628 @end deffn
11629
11630 @defvr {Scheme Variable} mcron-service-type
11631 This is the type of the @code{mcron} service, whose value is an
11632 @code{mcron-configuration} object.
11633
11634 This service type can be the target of a service extension that provides
11635 it additional job specifications (@pxref{Service Composition}). In
11636 other words, it is possible to define services that provide additional
11637 mcron jobs to run.
11638 @end defvr
11639
11640 @deftp {Data Type} mcron-configuration
11641 Data type representing the configuration of mcron.
11642
11643 @table @asis
11644 @item @code{mcron} (default: @var{mcron})
11645 The mcron package to use.
11646
11647 @item @code{jobs}
11648 This is a list of gexps (@pxref{G-Expressions}), where each gexp
11649 corresponds to an mcron job specification (@pxref{Syntax, mcron job
11650 specifications,, mcron, GNU@tie{}mcron}).
11651 @end table
11652 @end deftp
11653
11654
11655 @node Log Rotation
11656 @subsubsection Log Rotation
11657
11658 @cindex rottlog
11659 @cindex log rotation
11660 @cindex logging
11661 Log files such as those found in @file{/var/log} tend to grow endlessly,
11662 so it's a good idea to @dfn{rotate} them once in a while---i.e., archive
11663 their contents in separate files, possibly compressed. The @code{(gnu
11664 services admin)} module provides an interface to GNU@tie{}Rot[t]log, a
11665 log rotation tool (@pxref{Top,,, rottlog, GNU Rot[t]log Manual}).
11666
11667 The example below defines an operating system that provides log rotation
11668 with the default settings, for commonly encountered log files.
11669
11670 @lisp
11671 (use-modules (guix) (gnu))
11672 (use-service-modules admin mcron)
11673 (use-package-modules base idutils)
11674
11675 (operating-system
11676 ;; @dots{}
11677 (services (cons (service rottlog-service-type)
11678 %base-services)))
11679 @end lisp
11680
11681 @defvr {Scheme Variable} rottlog-service-type
11682 This is the type of the Rottlog service, whose value is a
11683 @code{rottlog-configuration} object.
11684
11685 Other services can extend this one with new @code{log-rotation} objects
11686 (see below), thereby augmenting the set of files to be rotated.
11687
11688 This service type can define mcron jobs (@pxref{Scheduled Job
11689 Execution}) to run the rottlog service.
11690 @end defvr
11691
11692 @deftp {Data Type} rottlog-configuration
11693 Data type representing the configuration of rottlog.
11694
11695 @table @asis
11696 @item @code{rottlog} (default: @code{rottlog})
11697 The Rottlog package to use.
11698
11699 @item @code{rc-file} (default: @code{(file-append rottlog "/etc/rc")})
11700 The Rottlog configuration file to use (@pxref{Mandatory RC Variables,,,
11701 rottlog, GNU Rot[t]log Manual}).
11702
11703 @item @code{rotations} (default: @code{%default-rotations})
11704 A list of @code{log-rotation} objects as defined below.
11705
11706 @item @code{jobs}
11707 This is a list of gexps where each gexp corresponds to an mcron job
11708 specification (@pxref{Scheduled Job Execution}).
11709 @end table
11710 @end deftp
11711
11712 @deftp {Data Type} log-rotation
11713 Data type representing the rotation of a group of log files.
11714
11715 Taking an example from the Rottlog manual (@pxref{Period Related File
11716 Examples,,, rottlog, GNU Rot[t]log Manual}), a log rotation might be
11717 defined like this:
11718
11719 @example
11720 (log-rotation
11721 (frequency 'daily)
11722 (files '("/var/log/apache/*"))
11723 (options '("storedir apache-archives"
11724 "rotate 6"
11725 "notifempty"
11726 "nocompress")))
11727 @end example
11728
11729 The list of fields is as follows:
11730
11731 @table @asis
11732 @item @code{frequency} (default: @code{'weekly})
11733 The log rotation frequency, a symbol.
11734
11735 @item @code{files}
11736 The list of files or file glob patterns to rotate.
11737
11738 @item @code{options} (default: @code{'()})
11739 The list of rottlog options for this rotation (@pxref{Configuration
11740 parameters,,, rottlog, GNU Rot[t]lg Manual}).
11741
11742 @item @code{post-rotate} (default: @code{#f})
11743 Either @code{#f} or a gexp to execute once the rotation has completed.
11744 @end table
11745 @end deftp
11746
11747 @defvr {Scheme Variable} %default-rotations
11748 Specifies weekly rotation of @var{%rotated-files} and
11749 a couple of other files.
11750 @end defvr
11751
11752 @defvr {Scheme Variable} %rotated-files
11753 The list of syslog-controlled files to be rotated. By default it is:
11754 @code{'("/var/log/messages" "/var/log/secure")}.
11755 @end defvr
11756
11757 @node Networking Services
11758 @subsubsection Networking Services
11759
11760 The @code{(gnu services networking)} module provides services to configure
11761 the network interface.
11762
11763 @cindex DHCP, networking service
11764 @defvr {Scheme Variable} dhcp-client-service-type
11765 This is the type of services that run @var{dhcp}, a Dynamic Host Configuration
11766 Protocol (DHCP) client, on all the non-loopback network interfaces. Its value
11767 is the DHCP client package to use, @code{isc-dhcp} by default.
11768 @end defvr
11769
11770 @deffn {Scheme Procedure} dhcpd-service-type
11771 This type defines a service that runs a DHCP daemon. To create a
11772 service of this type, you must supply a @code{<dhcpd-configuration>}.
11773 For example:
11774
11775 @example
11776 (service dhcpd-service-type
11777 (dhcpd-configuration
11778 (config-file (local-file "my-dhcpd.conf"))
11779 (interfaces '("enp0s25"))))
11780 @end example
11781 @end deffn
11782
11783 @deftp {Data Type} dhcpd-configuration
11784 @table @asis
11785 @item @code{package} (default: @code{isc-dhcp})
11786 The package that provides the DHCP daemon. This package is expected to
11787 provide the daemon at @file{sbin/dhcpd} relative to its output
11788 directory. The default package is the
11789 @uref{http://www.isc.org/products/DHCP, ISC's DHCP server}.
11790 @item @code{config-file} (default: @code{#f})
11791 The configuration file to use. This is required. It will be passed to
11792 @code{dhcpd} via its @code{-cf} option. This may be any ``file-like''
11793 object (@pxref{G-Expressions, file-like objects}). See @code{man
11794 dhcpd.conf} for details on the configuration file syntax.
11795 @item @code{version} (default: @code{"4"})
11796 The DHCP version to use. The ISC DHCP server supports the values ``4'',
11797 ``6'', and ``4o6''. These correspond to the @code{dhcpd} program
11798 options @code{-4}, @code{-6}, and @code{-4o6}. See @code{man dhcpd} for
11799 details.
11800 @item @code{run-directory} (default: @code{"/run/dhcpd"})
11801 The run directory to use. At service activation time, this directory
11802 will be created if it does not exist.
11803 @item @code{pid-file} (default: @code{"/run/dhcpd/dhcpd.pid"})
11804 The PID file to use. This corresponds to the @code{-pf} option of
11805 @code{dhcpd}. See @code{man dhcpd} for details.
11806 @item @code{interfaces} (default: @code{'()})
11807 The names of the network interfaces on which dhcpd should listen for
11808 broadcasts. If this list is not empty, then its elements (which must be
11809 strings) will be appended to the @code{dhcpd} invocation when starting
11810 the daemon. It may not be necessary to explicitly specify any
11811 interfaces here; see @code{man dhcpd} for details.
11812 @end table
11813 @end deftp
11814
11815 @defvr {Scheme Variable} static-networking-service-type
11816 This is the type for statically-configured network interfaces.
11817 @c TODO Document <static-networking> data structures.
11818 @end defvr
11819
11820 @deffn {Scheme Procedure} static-networking-service @var{interface} @var{ip} @
11821 [#:netmask #f] [#:gateway #f] [#:name-servers @code{'()}] @
11822 [#:requirement @code{'(udev)}]
11823 Return a service that starts @var{interface} with address @var{ip}. If
11824 @var{netmask} is true, use it as the network mask. If @var{gateway} is true,
11825 it must be a string specifying the default network gateway. @var{requirement}
11826 can be used to declare a dependency on another service before configuring the
11827 interface.
11828
11829 This procedure can be called several times, one for each network
11830 interface of interest. Behind the scenes what it does is extend
11831 @code{static-networking-service-type} with additional network interfaces
11832 to handle.
11833
11834 For example:
11835
11836 @example
11837 (static-networking-service "eno1" "192.168.1.82"
11838 #:gateway "192.168.1.2"
11839 #:name-servers '("192.168.1.2"))
11840 @end example
11841 @end deffn
11842
11843 @cindex wicd
11844 @cindex wireless
11845 @cindex WiFi
11846 @cindex network management
11847 @deffn {Scheme Procedure} wicd-service [#:wicd @var{wicd}]
11848 Return a service that runs @url{https://launchpad.net/wicd,Wicd}, a network
11849 management daemon that aims to simplify wired and wireless networking.
11850
11851 This service adds the @var{wicd} package to the global profile, providing
11852 several commands to interact with the daemon and configure networking:
11853 @command{wicd-client}, a graphical user interface, and the @command{wicd-cli}
11854 and @command{wicd-curses} user interfaces.
11855 @end deffn
11856
11857 @cindex ModemManager
11858
11859 @defvr {Scheme Variable} modem-manager-service-type
11860 This is the service type for the
11861 @uref{https://wiki.gnome.org/Projects/ModemManager, ModemManager}
11862 service. The value for this service type is a
11863 @code{modem-manager-configuration} record.
11864
11865 This service is part of @code{%desktop-services} (@pxref{Desktop
11866 Services}).
11867 @end defvr
11868
11869 @deftp {Data Type} modem-manager-configuration
11870 Data type representing the configuration of ModemManager.
11871
11872 @table @asis
11873 @item @code{modem-manager} (default: @code{modem-manager})
11874 The ModemManager package to use.
11875
11876 @end table
11877 @end deftp
11878
11879 @cindex NetworkManager
11880
11881 @defvr {Scheme Variable} network-manager-service-type
11882 This is the service type for the
11883 @uref{https://wiki.gnome.org/Projects/NetworkManager, NetworkManager}
11884 service. The value for this service type is a
11885 @code{network-manager-configuration} record.
11886
11887 This service is part of @code{%desktop-services} (@pxref{Desktop
11888 Services}).
11889 @end defvr
11890
11891 @deftp {Data Type} network-manager-configuration
11892 Data type representing the configuration of NetworkManager.
11893
11894 @table @asis
11895 @item @code{network-manager} (default: @code{network-manager})
11896 The NetworkManager package to use.
11897
11898 @item @code{dns} (default: @code{"default"})
11899 Processing mode for DNS, which affects how NetworkManager uses the
11900 @code{resolv.conf} configuration file.
11901
11902 @table @samp
11903 @item default
11904 NetworkManager will update @code{resolv.conf} to reflect the nameservers
11905 provided by currently active connections.
11906
11907 @item dnsmasq
11908 NetworkManager will run @code{dnsmasq} as a local caching nameserver,
11909 using a "split DNS" configuration if you are connected to a VPN, and
11910 then update @code{resolv.conf} to point to the local nameserver.
11911
11912 @item none
11913 NetworkManager will not modify @code{resolv.conf}.
11914 @end table
11915
11916 @item @code{vpn-plugins} (default: @code{'()})
11917 This is the list of available plugins for virtual private networks
11918 (VPNs). An example of this is the @code{network-manager-openvpn}
11919 package, which allows NetworkManager to manage VPNs @i{via} OpenVPN.
11920
11921 @end table
11922 @end deftp
11923
11924 @cindex Connman
11925 @deffn {Scheme Variable} connman-service-type
11926 This is the service type to run @url{https://01.org/connman,Connman},
11927 a network connection manager.
11928
11929 Its value must be an
11930 @code{connman-configuration} record as in this example:
11931
11932 @example
11933 (service connman-service-type
11934 (connman-configuration
11935 (disable-vpn? #t)))
11936 @end example
11937
11938 See below for details about @code{connman-configuration}.
11939 @end deffn
11940
11941 @deftp {Data Type} connman-configuration
11942 Data Type representing the configuration of connman.
11943
11944 @table @asis
11945 @item @code{connman} (default: @var{connman})
11946 The connman package to use.
11947
11948 @item @code{disable-vpn?} (default: @code{#f})
11949 When true, disable connman's vpn plugin.
11950 @end table
11951 @end deftp
11952
11953 @cindex WPA Supplicant
11954 @defvr {Scheme Variable} wpa-supplicant-service-type
11955 This is the service type to run @url{https://w1.fi/wpa_supplicant/,WPA
11956 supplicant}, an authentication daemon required to authenticate against
11957 encrypted WiFi or ethernet networks.
11958 @end defvr
11959
11960 @deftp {Data Type} wpa-supplicant-configuration
11961 Data type representing the configuration of WPA Supplicant.
11962
11963 It takes the following parameters:
11964
11965 @table @asis
11966 @item @code{wpa-supplicant} (default: @code{wpa-supplicant})
11967 The WPA Supplicant package to use.
11968
11969 @item @code{dbus?} (default: @code{#t})
11970 Whether to listen for requests on D-Bus.
11971
11972 @item @code{pid-file} (default: @code{"/var/run/wpa_supplicant.pid"})
11973 Where to store the PID file.
11974
11975 @item @code{interface} (default: @code{#f})
11976 If this is set, it must specify the name of a network interface that
11977 WPA supplicant will control.
11978
11979 @item @code{config-file} (default: @code{#f})
11980 Optional configuration file to use.
11981
11982 @item @code{extra-options} (default: @code{'()})
11983 List of additional command-line arguments to pass to the daemon.
11984 @end table
11985 @end deftp
11986
11987 @cindex iptables
11988 @defvr {Scheme Variable} iptables-service-type
11989 This is the service type to set up an iptables configuration. iptables is a
11990 packet filtering framework supported by the Linux kernel. This service
11991 supports configuring iptables for both IPv4 and IPv6. A simple example
11992 configuration rejecting all incoming connections except those to the ssh port
11993 22 is shown below.
11994
11995 @lisp
11996 (service iptables-service-type
11997 (iptables-configuration
11998 (ipv4-rules (plain-file "iptables.rules" "*filter
11999 :INPUT ACCEPT
12000 :FORWARD ACCEPT
12001 :OUTPUT ACCEPT
12002 -A INPUT -p tcp --dport 22 -j ACCEPT
12003 -A INPUT -j REJECT --reject-with icmp-port-unreachable
12004 COMMIT
12005 "))
12006 (ipv6-rules (plain-file "ip6tables.rules" "*filter
12007 :INPUT ACCEPT
12008 :FORWARD ACCEPT
12009 :OUTPUT ACCEPT
12010 -A INPUT -p tcp --dport 22 -j ACCEPT
12011 -A INPUT -j REJECT --reject-with icmp6-port-unreachable
12012 COMMIT
12013 "))))
12014 @end lisp
12015 @end defvr
12016
12017 @deftp {Data Type} iptables-configuration
12018 The data type representing the configuration of iptables.
12019
12020 @table @asis
12021 @item @code{iptables} (default: @code{iptables})
12022 The iptables package that provides @code{iptables-restore} and
12023 @code{ip6tables-restore}.
12024 @item @code{ipv4-rules} (default: @code{%iptables-accept-all-rules})
12025 The iptables rules to use. It will be passed to @code{iptables-restore}.
12026 This may be any ``file-like'' object (@pxref{G-Expressions, file-like
12027 objects}).
12028 @item @code{ipv6-rules} (default: @code{%iptables-accept-all-rules})
12029 The ip6tables rules to use. It will be passed to @code{ip6tables-restore}.
12030 This may be any ``file-like'' object (@pxref{G-Expressions, file-like
12031 objects}).
12032 @end table
12033 @end deftp
12034
12035 @cindex NTP (Network Time Protocol), service
12036 @cindex real time clock
12037 @defvr {Scheme Variable} ntp-service-type
12038 This is the type of the service running the the @uref{http://www.ntp.org,
12039 Network Time Protocol (NTP)} daemon, @command{ntpd}. The daemon will keep the
12040 system clock synchronized with that of the specified NTP servers.
12041
12042 The value of this service is an @code{ntpd-configuration} object, as described
12043 below.
12044 @end defvr
12045
12046 @deftp {Data Type} ntp-configuration
12047 This is the data type for the NTP service configuration.
12048
12049 @table @asis
12050 @item @code{servers} (default: @code{%ntp-servers})
12051 This is the list of servers (host names) with which @command{ntpd} will be
12052 synchronized.
12053
12054 @item @code{allow-large-adjustment?} (default: @code{#f})
12055 This determines whether @command{ntpd} is allowed to make an initial
12056 adjustment of more than 1,000 seconds.
12057
12058 @item @code{ntp} (default: @code{ntp})
12059 The NTP package to use.
12060 @end table
12061 @end deftp
12062
12063 @defvr {Scheme Variable} %ntp-servers
12064 List of host names used as the default NTP servers. These are servers of the
12065 @uref{https://www.ntppool.org/en/, NTP Pool Project}.
12066 @end defvr
12067
12068 @cindex OpenNTPD
12069 @deffn {Scheme Procedure} openntpd-service-type
12070 Run the @command{ntpd}, the Network Time Protocol (NTP) daemon, as implemented
12071 by @uref{http://www.openntpd.org, OpenNTPD}. The daemon will keep the system
12072 clock synchronized with that of the given servers.
12073
12074 @example
12075 (service
12076 openntpd-service-type
12077 (openntpd-configuration
12078 (listen-on '("127.0.0.1" "::1"))
12079 (sensor '("udcf0 correction 70000"))
12080 (constraint-from '("www.gnu.org"))
12081 (constraints-from '("https://www.google.com/"))
12082 (allow-large-adjustment? #t)))
12083
12084 @end example
12085 @end deffn
12086
12087 @deftp {Data Type} openntpd-configuration
12088 @table @asis
12089 @item @code{openntpd} (default: @code{(file-append openntpd "/sbin/ntpd")})
12090 The openntpd executable to use.
12091 @item @code{listen-on} (default: @code{'("127.0.0.1" "::1")})
12092 A list of local IP addresses or hostnames the ntpd daemon should listen on.
12093 @item @code{query-from} (default: @code{'()})
12094 A list of local IP address the ntpd daemon should use for outgoing queries.
12095 @item @code{sensor} (default: @code{'()})
12096 Specify a list of timedelta sensor devices ntpd should use. @code{ntpd}
12097 will listen to each sensor that acutally exists and ignore non-existant ones.
12098 See @uref{https://man.openbsd.org/ntpd.conf, upstream documentation} for more
12099 information.
12100 @item @code{server} (default: @var{%ntp-servers})
12101 Specify a list of IP addresses or hostnames of NTP servers to synchronize to.
12102 @item @code{servers} (default: @code{'()})
12103 Specify a list of IP addresses or hostnames of NTP pools to synchronize to.
12104 @item @code{constraint-from} (default: @code{'()})
12105 @code{ntpd} can be configured to query the ‘Date’ from trusted HTTPS servers via TLS.
12106 This time information is not used for precision but acts as an authenticated
12107 constraint, thereby reducing the impact of unauthenticated NTP
12108 man-in-the-middle attacks.
12109 Specify a list of URLs, IP addresses or hostnames of HTTPS servers to provide
12110 a constraint.
12111 @item @code{constraints-from} (default: @code{'()})
12112 As with constraint from, specify a list of URLs, IP addresses or hostnames of
12113 HTTPS servers to provide a constraint. Should the hostname resolve to multiple
12114 IP addresses, @code{ntpd} will calculate a median constraint from all of them.
12115 @item @code{allow-large-adjustment?} (default: @code{#f})
12116 Determines if @code{ntpd} is allowed to make an initial adjustment of more
12117 than 180 seconds.
12118 @end table
12119 @end deftp
12120
12121 @cindex inetd
12122 @deffn {Scheme variable} inetd-service-type
12123 This service runs the @command{inetd} (@pxref{inetd invocation,,,
12124 inetutils, GNU Inetutils}) daemon. @command{inetd} listens for
12125 connections on internet sockets, and lazily starts the specified server
12126 program when a connection is made on one of these sockets.
12127
12128 The value of this service is an @code{inetd-configuration} object. The
12129 following example configures the @command{inetd} daemon to provide the
12130 built-in @command{echo} service, as well as an smtp service which
12131 forwards smtp traffic over ssh to a server @code{smtp-server} behind a
12132 gateway @code{hostname}:
12133
12134 @example
12135 (service
12136 inetd-service-type
12137 (inetd-configuration
12138 (entries (list
12139 (inetd-entry
12140 (name "echo")
12141 (socket-type 'stream)
12142 (protocol "tcp")
12143 (wait? #f)
12144 (user "root"))
12145 (inetd-entry
12146 (node "127.0.0.1")
12147 (name "smtp")
12148 (socket-type 'stream)
12149 (protocol "tcp")
12150 (wait? #f)
12151 (user "root")
12152 (program (file-append openssh "/bin/ssh"))
12153 (arguments
12154 '("ssh" "-qT" "-i" "/path/to/ssh_key"
12155 "-W" "smtp-server:25" "user@@hostname")))))
12156 @end example
12157
12158 See below for more details about @code{inetd-configuration}.
12159 @end deffn
12160
12161 @deftp {Data Type} inetd-configuration
12162 Data type representing the configuration of @command{inetd}.
12163
12164 @table @asis
12165 @item @code{program} (default: @code{(file-append inetutils "/libexec/inetd")})
12166 The @command{inetd} executable to use.
12167
12168 @item @code{entries} (default: @code{'()})
12169 A list of @command{inetd} service entries. Each entry should be created
12170 by the @code{inetd-entry} constructor.
12171 @end table
12172 @end deftp
12173
12174 @deftp {Data Type} inetd-entry
12175 Data type representing an entry in the @command{inetd} configuration.
12176 Each entry corresponds to a socket where @command{inetd} will listen for
12177 requests.
12178
12179 @table @asis
12180 @item @code{node} (default: @code{#f})
12181 Optional string, a comma-separated list of local addresses
12182 @command{inetd} should use when listening for this service.
12183 @xref{Configuration file,,, inetutils, GNU Inetutils} for a complete
12184 description of all options.
12185 @item @code{name}
12186 A string, the name must correspond to an entry in @code{/etc/services}.
12187 @item @code{socket-type}
12188 One of @code{'stream}, @code{'dgram}, @code{'raw}, @code{'rdm} or
12189 @code{'seqpacket}.
12190 @item @code{protocol}
12191 A string, must correspond to an entry in @code{/etc/protocols}.
12192 @item @code{wait?} (default: @code{#t})
12193 Whether @command{inetd} should wait for the server to exit before
12194 listening to new service requests.
12195 @item @code{user}
12196 A string containing the user (and, optionally, group) name of the user
12197 as whom the server should run. The group name can be specified in a
12198 suffix, separated by a colon or period, i.e. @code{"user"},
12199 @code{"user:group"} or @code{"user.group"}.
12200 @item @code{program} (default: @code{"internal"})
12201 The server program which will serve the requests, or @code{"internal"}
12202 if @command{inetd} should use a built-in service.
12203 @item @code{arguments} (default: @code{'()})
12204 A list strings or file-like objects, which are the server program's
12205 arguments, starting with the zeroth argument, i.e. the name of the
12206 program itself. For @command{inetd}'s internal services, this entry
12207 must be @code{'()} or @code{'("internal")}.
12208 @end table
12209
12210 @xref{Configuration file,,, inetutils, GNU Inetutils} for a more
12211 detailed discussion of each configuration field.
12212 @end deftp
12213
12214 @cindex Tor
12215 @defvr {Scheme Variable} tor-service-type
12216 This is the type for a service that runs the @uref{https://torproject.org,
12217 Tor} anonymous networking daemon. The service is configured using a
12218 @code{<tor-configuration>} record. By default, the Tor daemon runs as the
12219 @code{tor} unprivileged user, which is a member of the @code{tor} group.
12220
12221 @end defvr
12222
12223 @deffn {Scheme Procedure} tor-service [@var{config-file}] [#:tor @var{tor}]
12224 This procedure is deprecated and will be removed in a future release. Return
12225 a service of the @code{tor-service-type} type. @var{config-file} and
12226 @var{tor} have the same meaning as in @code{<tor-configuration>}.
12227 @end deffn
12228
12229 @deftp {Data Type} tor-configuration
12230 @table @asis
12231 @item @code{tor} (default: @code{tor})
12232 The package that provides the Tor daemon. This package is expected to provide
12233 the daemon at @file{bin/tor} relative to its output directory. The default
12234 package is the @uref{https://www.torproject.org, Tor Project's}
12235 implementation.
12236
12237 @item @code{config-file} (default: @code{(plain-file "empty" "")})
12238 The configuration file to use. It will be appended to a default configuration
12239 file, and the final configuration file will be passed to @code{tor} via its
12240 @code{-f} option. This may be any ``file-like'' object (@pxref{G-Expressions,
12241 file-like objects}). See @code{man tor} for details on the configuration file
12242 syntax.
12243
12244 @item @code{hidden-services} (default: @code{'()})
12245 The list of @code{<hidden-service>} records to use. For any hidden service
12246 you include in this list, appropriate configuration to enable the hidden
12247 service will be automatically added to the default configuration file. You
12248 may conveniently create @code{<hidden-service>} records using the
12249 @code{tor-hidden-service} procedure described below.
12250
12251 @item @code{socks-socket-type} (default: @code{'tcp})
12252 The default socket type that Tor should use for its SOCKS socket. This must
12253 be either @code{'tcp} or @code{'unix}. If it is @code{'tcp}, then by default
12254 Tor will listen on TCP port 9050 on the loopback interface (i.e., localhost).
12255 If it is @code{'unix}, then Tor will listen on the UNIX domain socket
12256 @file{/var/run/tor/socks-sock}, which will be made writable by members of the
12257 @code{tor} group.
12258
12259 If you want to customize the SOCKS socket in more detail, leave
12260 @code{socks-socket-type} at its default value of @code{'tcp} and use
12261 @code{config-file} to override the default by providing your own
12262 @code{SocksPort} option.
12263 @end table
12264 @end deftp
12265
12266 @cindex hidden service
12267 @deffn {Scheme Procedure} tor-hidden-service @var{name} @var{mapping}
12268 Define a new Tor @dfn{hidden service} called @var{name} and implementing
12269 @var{mapping}. @var{mapping} is a list of port/host tuples, such as:
12270
12271 @example
12272 '((22 "127.0.0.1:22")
12273 (80 "127.0.0.1:8080"))
12274 @end example
12275
12276 In this example, port 22 of the hidden service is mapped to local port 22, and
12277 port 80 is mapped to local port 8080.
12278
12279 This creates a @file{/var/lib/tor/hidden-services/@var{name}} directory, where
12280 the @file{hostname} file contains the @code{.onion} host name for the hidden
12281 service.
12282
12283 See @uref{https://www.torproject.org/docs/tor-hidden-service.html.en, the Tor
12284 project's documentation} for more information.
12285 @end deffn
12286
12287 The @code{(gnu services rsync)} module provides the following services:
12288
12289 You might want an rsync daemon if you have files that you want available
12290 so anyone (or just yourself) can download existing files or upload new
12291 files.
12292
12293 @deffn {Scheme Variable} rsync-service-type
12294 This is the type for the @uref{https://rsync.samba.org, rsync} rsync daemon,
12295 @command{rsync-configuration} record as in this example:
12296
12297 @example
12298 (service rsync-service-type)
12299 @end example
12300
12301 See below for details about @code{rsync-configuration}.
12302 @end deffn
12303
12304 @deftp {Data Type} rsync-configuration
12305 Data type representing the configuration for @code{rsync-service}.
12306
12307 @table @asis
12308 @item @code{package} (default: @var{rsync})
12309 @code{rsync} package to use.
12310
12311 @item @code{port-number} (default: @code{873})
12312 TCP port on which @command{rsync} listens for incoming connections. If port
12313 is less than @code{1024} @command{rsync} needs to be started as the
12314 @code{root} user and group.
12315
12316 @item @code{pid-file} (default: @code{"/var/run/rsyncd/rsyncd.pid"})
12317 Name of the file where @command{rsync} writes its PID.
12318
12319 @item @code{lock-file} (default: @code{"/var/run/rsyncd/rsyncd.lock"})
12320 Name of the file where @command{rsync} writes its lock file.
12321
12322 @item @code{log-file} (default: @code{"/var/log/rsyncd.log"})
12323 Name of the file where @command{rsync} writes its log file.
12324
12325 @item @code{use-chroot?} (default: @var{#t})
12326 Whether to use chroot for @command{rsync} shared directory.
12327
12328 @item @code{share-path} (default: @file{/srv/rsync})
12329 Location of the @command{rsync} shared directory.
12330
12331 @item @code{share-comment} (default: @code{"Rsync share"})
12332 Comment of the @command{rsync} shared directory.
12333
12334 @item @code{read-only?} (default: @var{#f})
12335 Read-write permissions to shared directory.
12336
12337 @item @code{timeout} (default: @code{300})
12338 I/O timeout in seconds.
12339
12340 @item @code{user} (default: @var{"root"})
12341 Owner of the @code{rsync} process.
12342
12343 @item @code{group} (default: @var{"root"})
12344 Group of the @code{rsync} process.
12345
12346 @item @code{uid} (default: @var{"rsyncd"})
12347 User name or user ID that file transfers to and from that module should take
12348 place as when the daemon was run as @code{root}.
12349
12350 @item @code{gid} (default: @var{"rsyncd"})
12351 Group name or group ID that will be used when accessing the module.
12352
12353 @end table
12354 @end deftp
12355
12356 Furthermore, @code{(gnu services ssh)} provides the following services.
12357 @cindex SSH
12358 @cindex SSH server
12359
12360 @deffn {Scheme Procedure} lsh-service [#:host-key "/etc/lsh/host-key"] @
12361 [#:daemonic? #t] [#:interfaces '()] [#:port-number 22] @
12362 [#:allow-empty-passwords? #f] [#:root-login? #f] @
12363 [#:syslog-output? #t] [#:x11-forwarding? #t] @
12364 [#:tcp/ip-forwarding? #t] [#:password-authentication? #t] @
12365 [#:public-key-authentication? #t] [#:initialize? #t]
12366 Run the @command{lshd} program from @var{lsh} to listen on port @var{port-number}.
12367 @var{host-key} must designate a file containing the host key, and readable
12368 only by root.
12369
12370 When @var{daemonic?} is true, @command{lshd} will detach from the
12371 controlling terminal and log its output to syslogd, unless one sets
12372 @var{syslog-output?} to false. Obviously, it also makes lsh-service
12373 depend on existence of syslogd service. When @var{pid-file?} is true,
12374 @command{lshd} writes its PID to the file called @var{pid-file}.
12375
12376 When @var{initialize?} is true, automatically create the seed and host key
12377 upon service activation if they do not exist yet. This may take long and
12378 require interaction.
12379
12380 When @var{initialize?} is false, it is up to the user to initialize the
12381 randomness generator (@pxref{lsh-make-seed,,, lsh, LSH Manual}), and to create
12382 a key pair with the private key stored in file @var{host-key} (@pxref{lshd
12383 basics,,, lsh, LSH Manual}).
12384
12385 When @var{interfaces} is empty, lshd listens for connections on all the
12386 network interfaces; otherwise, @var{interfaces} must be a list of host names
12387 or addresses.
12388
12389 @var{allow-empty-passwords?} specifies whether to accept log-ins with empty
12390 passwords, and @var{root-login?} specifies whether to accept log-ins as
12391 root.
12392
12393 The other options should be self-descriptive.
12394 @end deffn
12395
12396 @cindex SSH
12397 @cindex SSH server
12398 @deffn {Scheme Variable} openssh-service-type
12399 This is the type for the @uref{http://www.openssh.org, OpenSSH} secure
12400 shell daemon, @command{sshd}. Its value must be an
12401 @code{openssh-configuration} record as in this example:
12402
12403 @example
12404 (service openssh-service-type
12405 (openssh-configuration
12406 (x11-forwarding? #t)
12407 (permit-root-login 'without-password)
12408 (authorized-keys
12409 `(("alice" ,(local-file "alice.pub"))
12410 ("bob" ,(local-file "bob.pub"))))))
12411 @end example
12412
12413 See below for details about @code{openssh-configuration}.
12414
12415 This service can be extended with extra authorized keys, as in this
12416 example:
12417
12418 @example
12419 (service-extension openssh-service-type
12420 (const `(("charlie"
12421 ,(local-file "charlie.pub")))))
12422 @end example
12423 @end deffn
12424
12425 @deftp {Data Type} openssh-configuration
12426 This is the configuration record for OpenSSH's @command{sshd}.
12427
12428 @table @asis
12429 @item @code{pid-file} (default: @code{"/var/run/sshd.pid"})
12430 Name of the file where @command{sshd} writes its PID.
12431
12432 @item @code{port-number} (default: @code{22})
12433 TCP port on which @command{sshd} listens for incoming connections.
12434
12435 @item @code{permit-root-login} (default: @code{#f})
12436 This field determines whether and when to allow logins as root. If
12437 @code{#f}, root logins are disallowed; if @code{#t}, they are allowed.
12438 If it's the symbol @code{'without-password}, then root logins are
12439 permitted but not with password-based authentication.
12440
12441 @item @code{allow-empty-passwords?} (default: @code{#f})
12442 When true, users with empty passwords may log in. When false, they may
12443 not.
12444
12445 @item @code{password-authentication?} (default: @code{#t})
12446 When true, users may log in with their password. When false, they have
12447 other authentication methods.
12448
12449 @item @code{public-key-authentication?} (default: @code{#t})
12450 When true, users may log in using public key authentication. When
12451 false, users have to use other authentication method.
12452
12453 Authorized public keys are stored in @file{~/.ssh/authorized_keys}.
12454 This is used only by protocol version 2.
12455
12456 @item @code{x11-forwarding?} (default: @code{#f})
12457 When true, forwarding of X11 graphical client connections is
12458 enabled---in other words, @command{ssh} options @option{-X} and
12459 @option{-Y} will work.
12460
12461 @item @code{allow-agent-forwarding?} (default: @code{#t})
12462 Whether to allow agent forwarding.
12463
12464 @item @code{allow-tcp-forwarding?} (default: @code{#t})
12465 Whether to allow TCP forwarding.
12466
12467 @item @code{gateway-ports?} (default: @code{#f})
12468 Whether to allow gateway ports.
12469
12470 @item @code{challenge-response-authentication?} (default: @code{#f})
12471 Specifies whether challenge response authentication is allowed (e.g. via
12472 PAM).
12473
12474 @item @code{use-pam?} (default: @code{#t})
12475 Enables the Pluggable Authentication Module interface. If set to
12476 @code{#t}, this will enable PAM authentication using
12477 @code{challenge-response-authentication?} and
12478 @code{password-authentication?}, in addition to PAM account and session
12479 module processing for all authentication types.
12480
12481 Because PAM challenge response authentication usually serves an
12482 equivalent role to password authentication, you should disable either
12483 @code{challenge-response-authentication?} or
12484 @code{password-authentication?}.
12485
12486 @item @code{print-last-log?} (default: @code{#t})
12487 Specifies whether @command{sshd} should print the date and time of the
12488 last user login when a user logs in interactively.
12489
12490 @item @code{subsystems} (default: @code{'(("sftp" "internal-sftp"))})
12491 Configures external subsystems (e.g. file transfer daemon).
12492
12493 This is a list of two-element lists, each of which containing the
12494 subsystem name and a command (with optional arguments) to execute upon
12495 subsystem request.
12496
12497 The command @command{internal-sftp} implements an in-process SFTP
12498 server. Alternately, one can specify the @command{sftp-server} command:
12499 @example
12500 (service openssh-service-type
12501 (openssh-configuration
12502 (subsystems
12503 `(("sftp" ,(file-append openssh "/libexec/sftp-server"))))))
12504 @end example
12505
12506 @item @code{accepted-environment} (default: @code{'()})
12507 List of strings describing which environment variables may be exported.
12508
12509 Each string gets on its own line. See the @code{AcceptEnv} option in
12510 @code{man sshd_config}.
12511
12512 This example allows ssh-clients to export the @code{COLORTERM} variable.
12513 It is set by terminal emulators, which support colors. You can use it in
12514 your shell's ressource file to enable colors for the prompt and commands
12515 if this variable is set.
12516
12517 @example
12518 (service openssh-service-type
12519 (openssh-configuration
12520 (accepted-environment '("COLORTERM"))))
12521 @end example
12522
12523 @item @code{authorized-keys} (default: @code{'()})
12524 @cindex authorized keys, SSH
12525 @cindex SSH authorized keys
12526 This is the list of authorized keys. Each element of the list is a user
12527 name followed by one or more file-like objects that represent SSH public
12528 keys. For example:
12529
12530 @example
12531 (openssh-configuration
12532 (authorized-keys
12533 `(("rekado" ,(local-file "rekado.pub"))
12534 ("chris" ,(local-file "chris.pub"))
12535 ("root" ,(local-file "rekado.pub") ,(local-file "chris.pub")))))
12536 @end example
12537
12538 @noindent
12539 registers the specified public keys for user accounts @code{rekado},
12540 @code{chris}, and @code{root}.
12541
12542 Additional authorized keys can be specified @i{via}
12543 @code{service-extension}.
12544
12545 Note that this does @emph{not} interfere with the use of
12546 @file{~/.ssh/authorized_keys}.
12547
12548 @item @code{log-level} (default: @code{'info})
12549 This is a symbol specifying the logging level: @code{quiet}, @code{fatal},
12550 @code{error}, @code{info}, @code{verbose}, @code{debug}, etc. See the man
12551 page for @file{sshd_config} for the full list of level names.
12552
12553 @end table
12554 @end deftp
12555
12556 @deffn {Scheme Procedure} dropbear-service [@var{config}]
12557 Run the @uref{https://matt.ucc.asn.au/dropbear/dropbear.html,Dropbear SSH
12558 daemon} with the given @var{config}, a @code{<dropbear-configuration>}
12559 object.
12560
12561 For example, to specify a Dropbear service listening on port 1234, add
12562 this call to the operating system's @code{services} field:
12563
12564 @example
12565 (dropbear-service (dropbear-configuration
12566 (port-number 1234)))
12567 @end example
12568 @end deffn
12569
12570 @deftp {Data Type} dropbear-configuration
12571 This data type represents the configuration of a Dropbear SSH daemon.
12572
12573 @table @asis
12574 @item @code{dropbear} (default: @var{dropbear})
12575 The Dropbear package to use.
12576
12577 @item @code{port-number} (default: 22)
12578 The TCP port where the daemon waits for incoming connections.
12579
12580 @item @code{syslog-output?} (default: @code{#t})
12581 Whether to enable syslog output.
12582
12583 @item @code{pid-file} (default: @code{"/var/run/dropbear.pid"})
12584 File name of the daemon's PID file.
12585
12586 @item @code{root-login?} (default: @code{#f})
12587 Whether to allow @code{root} logins.
12588
12589 @item @code{allow-empty-passwords?} (default: @code{#f})
12590 Whether to allow empty passwords.
12591
12592 @item @code{password-authentication?} (default: @code{#t})
12593 Whether to enable password-based authentication.
12594 @end table
12595 @end deftp
12596
12597 @defvr {Scheme Variable} %facebook-host-aliases
12598 This variable contains a string for use in @file{/etc/hosts}
12599 (@pxref{Host Names,,, libc, The GNU C Library Reference Manual}). Each
12600 line contains a entry that maps a known server name of the Facebook
12601 on-line service---e.g., @code{www.facebook.com}---to the local
12602 host---@code{127.0.0.1} or its IPv6 equivalent, @code{::1}.
12603
12604 This variable is typically used in the @code{hosts-file} field of an
12605 @code{operating-system} declaration (@pxref{operating-system Reference,
12606 @file{/etc/hosts}}):
12607
12608 @example
12609 (use-modules (gnu) (guix))
12610
12611 (operating-system
12612 (host-name "mymachine")
12613 ;; ...
12614 (hosts-file
12615 ;; Create a /etc/hosts file with aliases for "localhost"
12616 ;; and "mymachine", as well as for Facebook servers.
12617 (plain-file "hosts"
12618 (string-append (local-host-aliases host-name)
12619 %facebook-host-aliases))))
12620 @end example
12621
12622 This mechanism can prevent programs running locally, such as Web
12623 browsers, from accessing Facebook.
12624 @end defvr
12625
12626 The @code{(gnu services avahi)} provides the following definition.
12627
12628 @deffn {Scheme Procedure} avahi-service [#:avahi @var{avahi}] @
12629 [#:host-name #f] [#:publish? #t] [#:ipv4? #t] @
12630 [#:ipv6? #t] [#:wide-area? #f] @
12631 [#:domains-to-browse '()] [#:debug? #f]
12632 Return a service that runs @command{avahi-daemon}, a system-wide
12633 mDNS/DNS-SD responder that allows for service discovery and
12634 "zero-configuration" host name lookups (see @uref{http://avahi.org/}), and
12635 extends the name service cache daemon (nscd) so that it can resolve
12636 @code{.local} host names using
12637 @uref{http://0pointer.de/lennart/projects/nss-mdns/, nss-mdns}. Additionally,
12638 add the @var{avahi} package to the system profile so that commands such as
12639 @command{avahi-browse} are directly usable.
12640
12641 If @var{host-name} is different from @code{#f}, use that as the host name to
12642 publish for this machine; otherwise, use the machine's actual host name.
12643
12644 When @var{publish?} is true, publishing of host names and services is allowed;
12645 in particular, avahi-daemon will publish the machine's host name and IP
12646 address via mDNS on the local network.
12647
12648 When @var{wide-area?} is true, DNS-SD over unicast DNS is enabled.
12649
12650 Boolean values @var{ipv4?} and @var{ipv6?} determine whether to use IPv4/IPv6
12651 sockets.
12652 @end deffn
12653
12654 @deffn {Scheme Variable} openvswitch-service-type
12655 This is the type of the @uref{http://www.openvswitch.org, Open vSwitch}
12656 service, whose value should be an @code{openvswitch-configuration}
12657 object.
12658 @end deffn
12659
12660 @deftp {Data Type} openvswitch-configuration
12661 Data type representing the configuration of Open vSwitch, a multilayer
12662 virtual switch which is designed to enable massive network automation
12663 through programmatic extension.
12664
12665 @table @asis
12666 @item @code{package} (default: @var{openvswitch})
12667 Package object of the Open vSwitch.
12668
12669 @end table
12670 @end deftp
12671
12672 @node X Window
12673 @subsubsection X Window
12674
12675 @cindex X11
12676 @cindex X Window System
12677 @cindex login manager
12678 Support for the X Window graphical display system---specifically
12679 Xorg---is provided by the @code{(gnu services xorg)} module. Note that
12680 there is no @code{xorg-service} procedure. Instead, the X server is
12681 started by the @dfn{login manager}, by default SLiM.
12682
12683 @cindex window manager
12684 To use X11, you must install at least one @dfn{window manager}---for
12685 example the @code{windowmaker} or @code{openbox} packages---preferably
12686 by adding it to the @code{packages} field of your operating system
12687 definition (@pxref{operating-system Reference, system-wide packages}).
12688
12689 @defvr {Scheme Variable} slim-service-type
12690 This is the type for the SLiM graphical login manager for X11.
12691
12692 @cindex session types (X11)
12693 @cindex X11 session types
12694 SLiM looks for @dfn{session types} described by the @file{.desktop} files in
12695 @file{/run/current-system/profile/share/xsessions} and allows users to
12696 choose a session from the log-in screen using @kbd{F1}. Packages such
12697 as @code{xfce}, @code{sawfish}, and @code{ratpoison} provide
12698 @file{.desktop} files; adding them to the system-wide set of packages
12699 automatically makes them available at the log-in screen.
12700
12701 In addition, @file{~/.xsession} files are honored. When available,
12702 @file{~/.xsession} must be an executable that starts a window manager
12703 and/or other X clients.
12704 @end defvr
12705
12706 @deftp {Data Type} slim-configuration
12707 Data type representing the configuration of @code{slim-service-type}.
12708
12709 @table @asis
12710 @item @code{allow-empty-passwords?} (default: @code{#t})
12711 Whether to allow logins with empty passwords.
12712
12713 @item @code{auto-login?} (default: @code{#f})
12714 @itemx @code{default-user} (default: @code{""})
12715 When @code{auto-login?} is false, SLiM presents a log-in screen.
12716
12717 When @code{auto-login?} is true, SLiM logs in directly as
12718 @code{default-user}.
12719
12720 @item @code{theme} (default: @code{%default-slim-theme})
12721 @itemx @code{theme-name} (default: @code{%default-slim-theme-name})
12722 The graphical theme to use and its name.
12723
12724 @item @code{auto-login-session} (default: @code{#f})
12725 If true, this must be the name of the executable to start as the default
12726 session---e.g., @code{(file-append windowmaker "/bin/windowmaker")}.
12727
12728 If false, a session described by one of the available @file{.desktop}
12729 files in @code{/run/current-system/profile} and @code{~/.guix-profile}
12730 will be used.
12731
12732 @quotation Note
12733 You must install at least one window manager in the system profile or in
12734 your user profile. Failing to do that, if @code{auto-login-session} is
12735 false, you will be unable to log in.
12736 @end quotation
12737
12738 @item @code{startx} (default: @code{(xorg-start-command)})
12739 The command used to start the X11 graphical server.
12740
12741 @item @code{xauth} (default: @code{xauth})
12742 The XAuth package to use.
12743
12744 @item @code{shepherd} (default: @code{shepherd})
12745 The Shepherd package used when invoking @command{halt} and
12746 @command{reboot}.
12747
12748 @item @code{sessreg} (default: @code{sessreg})
12749 The sessreg package used in order to register the session.
12750
12751 @item @code{slim} (default: @code{slim})
12752 The SLiM package to use.
12753 @end table
12754 @end deftp
12755
12756 @defvr {Scheme Variable} %default-theme
12757 @defvrx {Scheme Variable} %default-theme-name
12758 The default SLiM theme and its name.
12759 @end defvr
12760
12761
12762 @deftp {Data Type} sddm-configuration
12763 This is the data type representing the sddm service configuration.
12764
12765 @table @asis
12766 @item @code{display-server} (default: "x11")
12767 Select display server to use for the greeter. Valid values are "x11"
12768 or "wayland".
12769
12770 @item @code{numlock} (default: "on")
12771 Valid values are "on", "off" or "none".
12772
12773 @item @code{halt-command} (default @code{#~(string-apppend #$shepherd "/sbin/halt")})
12774 Command to run when halting.
12775
12776 @item @code{reboot-command} (default @code{#~(string-append #$shepherd "/sbin/reboot")})
12777 Command to run when rebooting.
12778
12779 @item @code{theme} (default "maldives")
12780 Theme to use. Default themes provided by SDDM are "elarun" or "maldives".
12781
12782 @item @code{themes-directory} (default "/run/current-system/profile/share/sddm/themes")
12783 Directory to look for themes.
12784
12785 @item @code{faces-directory} (default "/run/current-system/profile/share/sddm/faces")
12786 Directory to look for faces.
12787
12788 @item @code{default-path} (default "/run/current-system/profile/bin")
12789 Default PATH to use.
12790
12791 @item @code{minimum-uid} (default 1000)
12792 Minimum UID to display in SDDM.
12793
12794 @item @code{maximum-uid} (default 2000)
12795 Maximum UID to display in SDDM
12796
12797 @item @code{remember-last-user?} (default #t)
12798 Remember last user.
12799
12800 @item @code{remember-last-session?} (default #t)
12801 Remember last session.
12802
12803 @item @code{hide-users} (default "")
12804 Usernames to hide from SDDM greeter.
12805
12806 @item @code{hide-shells} (default @code{#~(string-append #$shadow "/sbin/nologin")})
12807 Users with shells listed will be hidden from the SDDM greeter.
12808
12809 @item @code{session-command} (default @code{#~(string-append #$sddm "/share/sddm/scripts/wayland-session")})
12810 Script to run before starting a wayland session.
12811
12812 @item @code{sessions-directory} (default "/run/current-system/profile/share/wayland-sessions")
12813 Directory to look for desktop files starting wayland sessions.
12814
12815 @item @code{xorg-server-path} (default @code{xorg-start-command})
12816 Path to xorg-server.
12817
12818 @item @code{xauth-path} (default @code{#~(string-append #$xauth "/bin/xauth")})
12819 Path to xauth.
12820
12821 @item @code{xephyr-path} (default @code{#~(string-append #$xorg-server "/bin/Xephyr")})
12822 Path to Xephyr.
12823
12824 @item @code{xdisplay-start} (default @code{#~(string-append #$sddm "/share/sddm/scripts/Xsetup")})
12825 Script to run after starting xorg-server.
12826
12827 @item @code{xdisplay-stop} (default @code{#~(string-append #$sddm "/share/sddm/scripts/Xstop")})
12828 Script to run before stopping xorg-server.
12829
12830 @item @code{xsession-command} (default: @code{xinitrc})
12831 Script to run before starting a X session.
12832
12833 @item @code{xsessions-directory} (default: "/run/current-system/profile/share/xsessions")
12834 Directory to look for desktop files starting X sessions.
12835
12836 @item @code{minimum-vt} (default: 7)
12837 Minimum VT to use.
12838
12839 @item @code{xserver-arguments} (default "-nolisten tcp")
12840 Arguments to pass to xorg-server.
12841
12842 @item @code{auto-login-user} (default "")
12843 User to use for auto-login.
12844
12845 @item @code{auto-login-session} (default "")
12846 Desktop file to use for auto-login.
12847
12848 @item @code{relogin?} (default #f)
12849 Relogin after logout.
12850
12851 @end table
12852 @end deftp
12853
12854 @cindex login manager
12855 @cindex X11 login
12856 @deffn {Scheme Procedure} sddm-service config
12857 Return a service that spawns the SDDM graphical login manager for config of
12858 type @code{<sddm-configuration>}.
12859
12860 @example
12861 (sddm-service (sddm-configuration
12862 (auto-login-user "Alice")
12863 (auto-login-session "xfce.desktop")))
12864 @end example
12865 @end deffn
12866
12867 @deffn {Scheme Procedure} xorg-start-command [#:guile] @
12868 [#:modules %default-xorg-modules] @
12869 [#:fonts %default-xorg-fonts] @
12870 [#:configuration-file (xorg-configuration-file @dots{})] @
12871 [#:xorg-server @var{xorg-server}]
12872 Return a @code{startx} script in which @var{modules}, a list of X module
12873 packages, and @var{fonts}, a list of X font directories, are available. See
12874 @code{xorg-wrapper} for more details on the arguments. The result should be
12875 used in place of @code{startx}.
12876
12877 Usually the X server is started by a login manager.
12878 @end deffn
12879
12880 @deffn {Scheme Procedure} xorg-configuration-file @
12881 [#:modules %default-xorg-modules] @
12882 [#:fonts %default-xorg-fonts] @
12883 [#:drivers '()] [#:resolutions '()] [#:extra-config '()]
12884 Return a configuration file for the Xorg server containing search paths for
12885 all the common drivers.
12886
12887 @var{modules} must be a list of @dfn{module packages} loaded by the Xorg
12888 server---e.g., @code{xf86-video-vesa}, @code{xf86-input-keyboard}, and so on.
12889 @var{fonts} must be a list of font directories to add to the server's
12890 @dfn{font path}.
12891
12892 @var{drivers} must be either the empty list, in which case Xorg chooses a
12893 graphics driver automatically, or a list of driver names that will be tried in
12894 this order---e.g., @code{("modesetting" "vesa")}.
12895
12896 Likewise, when @var{resolutions} is the empty list, Xorg chooses an
12897 appropriate screen resolution; otherwise, it must be a list of
12898 resolutions---e.g., @code{((1024 768) (640 480))}.
12899
12900 Last, @var{extra-config} is a list of strings or objects appended to the
12901 configuration file. It is used to pass extra text to be
12902 added verbatim to the configuration file.
12903
12904 @cindex keymap
12905 @cindex keyboard layout
12906 This procedure is especially useful to configure a different keyboard layout
12907 than the default US keymap. For instance, to use the ``bépo'' keymap by
12908 default on the display manager:
12909
12910 @example
12911 (define bepo-evdev
12912 "Section \"InputClass\"
12913 Identifier \"evdev keyboard catchall\"
12914 Driver \"evdev\"
12915 MatchIsKeyboard \"on\"
12916 Option \"xkb_layout\" \"fr\"
12917 Option \"xkb_variant\" \"bepo\"
12918 EndSection")
12919
12920 (operating-system
12921 ...
12922 (services
12923 (modify-services %desktop-services
12924 (slim-service-type config =>
12925 (slim-configuration
12926 (inherit config)
12927 (startx (xorg-start-command
12928 #:configuration-file
12929 (xorg-configuration-file
12930 #:extra-config
12931 (list bepo-evdev)))))))))
12932 @end example
12933
12934 The @code{MatchIsKeyboard} line specifies that we only apply the configuration
12935 to keyboards. Without this line, other devices such as touchpad may not work
12936 correctly because they will be attached to the wrong driver. In this example,
12937 the user typically used @code{setxkbmap fr bepo} to set their favorite keymap
12938 once logged in. The first argument corresponds to the layout, while the second
12939 argument corresponds to the variant. The @code{xkb_variant} line can be omitted
12940 to select the default variant.
12941 @end deffn
12942
12943 @deffn {Scheme Procedure} screen-locker-service @var{package} [@var{program}]
12944 Add @var{package}, a package for a screen locker or screen saver whose
12945 command is @var{program}, to the set of setuid programs and add a PAM entry
12946 for it. For example:
12947
12948 @lisp
12949 (screen-locker-service xlockmore "xlock")
12950 @end lisp
12951
12952 makes the good ol' XlockMore usable.
12953 @end deffn
12954
12955
12956 @node Printing Services
12957 @subsubsection Printing Services
12958
12959 @cindex printer support with CUPS
12960 The @code{(gnu services cups)} module provides a Guix service definition
12961 for the CUPS printing service. To add printer support to a GuixSD
12962 system, add a @code{cups-service} to the operating system definition:
12963
12964 @deffn {Scheme Variable} cups-service-type
12965 The service type for the CUPS print server. Its value should be a valid
12966 CUPS configuration (see below). To use the default settings, simply
12967 write:
12968 @example
12969 (service cups-service-type)
12970 @end example
12971 @end deffn
12972
12973 The CUPS configuration controls the basic things about your CUPS
12974 installation: what interfaces it listens on, what to do if a print job
12975 fails, how much logging to do, and so on. To actually add a printer,
12976 you have to visit the @url{http://localhost:631} URL, or use a tool such
12977 as GNOME's printer configuration services. By default, configuring a
12978 CUPS service will generate a self-signed certificate if needed, for
12979 secure connections to the print server.
12980
12981 Suppose you want to enable the Web interface of CUPS and also add
12982 support for Epson printers @i{via} the @code{escpr} package and for HP
12983 printers @i{via} the @code{hplip-minimal} package. You can do that directly,
12984 like this (you need to use the @code{(gnu packages cups)} module):
12985
12986 @example
12987 (service cups-service-type
12988 (cups-configuration
12989 (web-interface? #t)
12990 (extensions
12991 (list cups-filters escpr hplip-minimal))))
12992 @end example
12993
12994 Note: If you wish to use the Qt5 based GUI which comes with the hplip
12995 package then it is suggested that you install the @code{hplip} package,
12996 either in your OS configuration file or as your user.
12997
12998 The available configuration parameters follow. Each parameter
12999 definition is preceded by its type; for example, @samp{string-list foo}
13000 indicates that the @code{foo} parameter should be specified as a list of
13001 strings. There is also a way to specify the configuration as a string,
13002 if you have an old @code{cupsd.conf} file that you want to port over
13003 from some other system; see the end for more details.
13004
13005 @c The following documentation was initially generated by
13006 @c (generate-documentation) in (gnu services cups). Manually maintained
13007 @c documentation is better, so we shouldn't hesitate to edit below as
13008 @c needed. However if the change you want to make to this documentation
13009 @c can be done in an automated way, it's probably easier to change
13010 @c (generate-documentation) than to make it below and have to deal with
13011 @c the churn as CUPS updates.
13012
13013
13014 Available @code{cups-configuration} fields are:
13015
13016 @deftypevr {@code{cups-configuration} parameter} package cups
13017 The CUPS package.
13018 @end deftypevr
13019
13020 @deftypevr {@code{cups-configuration} parameter} package-list extensions
13021 Drivers and other extensions to the CUPS package.
13022 @end deftypevr
13023
13024 @deftypevr {@code{cups-configuration} parameter} files-configuration files-configuration
13025 Configuration of where to write logs, what directories to use for print
13026 spools, and related privileged configuration parameters.
13027
13028 Available @code{files-configuration} fields are:
13029
13030 @deftypevr {@code{files-configuration} parameter} log-location access-log
13031 Defines the access log filename. Specifying a blank filename disables
13032 access log generation. The value @code{stderr} causes log entries to be
13033 sent to the standard error file when the scheduler is running in the
13034 foreground, or to the system log daemon when run in the background. The
13035 value @code{syslog} causes log entries to be sent to the system log
13036 daemon. The server name may be included in filenames using the string
13037 @code{%s}, as in @code{/var/log/cups/%s-access_log}.
13038
13039 Defaults to @samp{"/var/log/cups/access_log"}.
13040 @end deftypevr
13041
13042 @deftypevr {@code{files-configuration} parameter} file-name cache-dir
13043 Where CUPS should cache data.
13044
13045 Defaults to @samp{"/var/cache/cups"}.
13046 @end deftypevr
13047
13048 @deftypevr {@code{files-configuration} parameter} string config-file-perm
13049 Specifies the permissions for all configuration files that the scheduler
13050 writes.
13051
13052 Note that the permissions for the printers.conf file are currently
13053 masked to only allow access from the scheduler user (typically root).
13054 This is done because printer device URIs sometimes contain sensitive
13055 authentication information that should not be generally known on the
13056 system. There is no way to disable this security feature.
13057
13058 Defaults to @samp{"0640"}.
13059 @end deftypevr
13060
13061 @deftypevr {@code{files-configuration} parameter} log-location error-log
13062 Defines the error log filename. Specifying a blank filename disables
13063 access log generation. The value @code{stderr} causes log entries to be
13064 sent to the standard error file when the scheduler is running in the
13065 foreground, or to the system log daemon when run in the background. The
13066 value @code{syslog} causes log entries to be sent to the system log
13067 daemon. The server name may be included in filenames using the string
13068 @code{%s}, as in @code{/var/log/cups/%s-error_log}.
13069
13070 Defaults to @samp{"/var/log/cups/error_log"}.
13071 @end deftypevr
13072
13073 @deftypevr {@code{files-configuration} parameter} string fatal-errors
13074 Specifies which errors are fatal, causing the scheduler to exit. The
13075 kind strings are:
13076
13077 @table @code
13078 @item none
13079 No errors are fatal.
13080
13081 @item all
13082 All of the errors below are fatal.
13083
13084 @item browse
13085 Browsing initialization errors are fatal, for example failed connections
13086 to the DNS-SD daemon.
13087
13088 @item config
13089 Configuration file syntax errors are fatal.
13090
13091 @item listen
13092 Listen or Port errors are fatal, except for IPv6 failures on the
13093 loopback or @code{any} addresses.
13094
13095 @item log
13096 Log file creation or write errors are fatal.
13097
13098 @item permissions
13099 Bad startup file permissions are fatal, for example shared TLS
13100 certificate and key files with world-read permissions.
13101 @end table
13102
13103 Defaults to @samp{"all -browse"}.
13104 @end deftypevr
13105
13106 @deftypevr {@code{files-configuration} parameter} boolean file-device?
13107 Specifies whether the file pseudo-device can be used for new printer
13108 queues. The URI @uref{file:///dev/null} is always allowed.
13109
13110 Defaults to @samp{#f}.
13111 @end deftypevr
13112
13113 @deftypevr {@code{files-configuration} parameter} string group
13114 Specifies the group name or ID that will be used when executing external
13115 programs.
13116
13117 Defaults to @samp{"lp"}.
13118 @end deftypevr
13119
13120 @deftypevr {@code{files-configuration} parameter} string log-file-perm
13121 Specifies the permissions for all log files that the scheduler writes.
13122
13123 Defaults to @samp{"0644"}.
13124 @end deftypevr
13125
13126 @deftypevr {@code{files-configuration} parameter} log-location page-log
13127 Defines the page log filename. Specifying a blank filename disables
13128 access log generation. The value @code{stderr} causes log entries to be
13129 sent to the standard error file when the scheduler is running in the
13130 foreground, or to the system log daemon when run in the background. The
13131 value @code{syslog} causes log entries to be sent to the system log
13132 daemon. The server name may be included in filenames using the string
13133 @code{%s}, as in @code{/var/log/cups/%s-page_log}.
13134
13135 Defaults to @samp{"/var/log/cups/page_log"}.
13136 @end deftypevr
13137
13138 @deftypevr {@code{files-configuration} parameter} string remote-root
13139 Specifies the username that is associated with unauthenticated accesses
13140 by clients claiming to be the root user. The default is @code{remroot}.
13141
13142 Defaults to @samp{"remroot"}.
13143 @end deftypevr
13144
13145 @deftypevr {@code{files-configuration} parameter} file-name request-root
13146 Specifies the directory that contains print jobs and other HTTP request
13147 data.
13148
13149 Defaults to @samp{"/var/spool/cups"}.
13150 @end deftypevr
13151
13152 @deftypevr {@code{files-configuration} parameter} sandboxing sandboxing
13153 Specifies the level of security sandboxing that is applied to print
13154 filters, backends, and other child processes of the scheduler; either
13155 @code{relaxed} or @code{strict}. This directive is currently only
13156 used/supported on macOS.
13157
13158 Defaults to @samp{strict}.
13159 @end deftypevr
13160
13161 @deftypevr {@code{files-configuration} parameter} file-name server-keychain
13162 Specifies the location of TLS certificates and private keys. CUPS will
13163 look for public and private keys in this directory: a @code{.crt} files
13164 for PEM-encoded certificates and corresponding @code{.key} files for
13165 PEM-encoded private keys.
13166
13167 Defaults to @samp{"/etc/cups/ssl"}.
13168 @end deftypevr
13169
13170 @deftypevr {@code{files-configuration} parameter} file-name server-root
13171 Specifies the directory containing the server configuration files.
13172
13173 Defaults to @samp{"/etc/cups"}.
13174 @end deftypevr
13175
13176 @deftypevr {@code{files-configuration} parameter} boolean sync-on-close?
13177 Specifies whether the scheduler calls fsync(2) after writing
13178 configuration or state files.
13179
13180 Defaults to @samp{#f}.
13181 @end deftypevr
13182
13183 @deftypevr {@code{files-configuration} parameter} space-separated-string-list system-group
13184 Specifies the group(s) to use for @code{@@SYSTEM} group authentication.
13185 @end deftypevr
13186
13187 @deftypevr {@code{files-configuration} parameter} file-name temp-dir
13188 Specifies the directory where temporary files are stored.
13189
13190 Defaults to @samp{"/var/spool/cups/tmp"}.
13191 @end deftypevr
13192
13193 @deftypevr {@code{files-configuration} parameter} string user
13194 Specifies the user name or ID that is used when running external
13195 programs.
13196
13197 Defaults to @samp{"lp"}.
13198 @end deftypevr
13199 @end deftypevr
13200
13201 @deftypevr {@code{cups-configuration} parameter} access-log-level access-log-level
13202 Specifies the logging level for the AccessLog file. The @code{config}
13203 level logs when printers and classes are added, deleted, or modified and
13204 when configuration files are accessed or updated. The @code{actions}
13205 level logs when print jobs are submitted, held, released, modified, or
13206 canceled, and any of the conditions for @code{config}. The @code{all}
13207 level logs all requests.
13208
13209 Defaults to @samp{actions}.
13210 @end deftypevr
13211
13212 @deftypevr {@code{cups-configuration} parameter} boolean auto-purge-jobs?
13213 Specifies whether to purge job history data automatically when it is no
13214 longer required for quotas.
13215
13216 Defaults to @samp{#f}.
13217 @end deftypevr
13218
13219 @deftypevr {@code{cups-configuration} parameter} browse-local-protocols browse-local-protocols
13220 Specifies which protocols to use for local printer sharing.
13221
13222 Defaults to @samp{dnssd}.
13223 @end deftypevr
13224
13225 @deftypevr {@code{cups-configuration} parameter} boolean browse-web-if?
13226 Specifies whether the CUPS web interface is advertised.
13227
13228 Defaults to @samp{#f}.
13229 @end deftypevr
13230
13231 @deftypevr {@code{cups-configuration} parameter} boolean browsing?
13232 Specifies whether shared printers are advertised.
13233
13234 Defaults to @samp{#f}.
13235 @end deftypevr
13236
13237 @deftypevr {@code{cups-configuration} parameter} string classification
13238 Specifies the security classification of the server. Any valid banner
13239 name can be used, including "classified", "confidential", "secret",
13240 "topsecret", and "unclassified", or the banner can be omitted to disable
13241 secure printing functions.
13242
13243 Defaults to @samp{""}.
13244 @end deftypevr
13245
13246 @deftypevr {@code{cups-configuration} parameter} boolean classify-override?
13247 Specifies whether users may override the classification (cover page) of
13248 individual print jobs using the @code{job-sheets} option.
13249
13250 Defaults to @samp{#f}.
13251 @end deftypevr
13252
13253 @deftypevr {@code{cups-configuration} parameter} default-auth-type default-auth-type
13254 Specifies the default type of authentication to use.
13255
13256 Defaults to @samp{Basic}.
13257 @end deftypevr
13258
13259 @deftypevr {@code{cups-configuration} parameter} default-encryption default-encryption
13260 Specifies whether encryption will be used for authenticated requests.
13261
13262 Defaults to @samp{Required}.
13263 @end deftypevr
13264
13265 @deftypevr {@code{cups-configuration} parameter} string default-language
13266 Specifies the default language to use for text and web content.
13267
13268 Defaults to @samp{"en"}.
13269 @end deftypevr
13270
13271 @deftypevr {@code{cups-configuration} parameter} string default-paper-size
13272 Specifies the default paper size for new print queues. @samp{"Auto"}
13273 uses a locale-specific default, while @samp{"None"} specifies there is
13274 no default paper size. Specific size names are typically
13275 @samp{"Letter"} or @samp{"A4"}.
13276
13277 Defaults to @samp{"Auto"}.
13278 @end deftypevr
13279
13280 @deftypevr {@code{cups-configuration} parameter} string default-policy
13281 Specifies the default access policy to use.
13282
13283 Defaults to @samp{"default"}.
13284 @end deftypevr
13285
13286 @deftypevr {@code{cups-configuration} parameter} boolean default-shared?
13287 Specifies whether local printers are shared by default.
13288
13289 Defaults to @samp{#t}.
13290 @end deftypevr
13291
13292 @deftypevr {@code{cups-configuration} parameter} non-negative-integer dirty-clean-interval
13293 Specifies the delay for updating of configuration and state files, in
13294 seconds. A value of 0 causes the update to happen as soon as possible,
13295 typically within a few milliseconds.
13296
13297 Defaults to @samp{30}.
13298 @end deftypevr
13299
13300 @deftypevr {@code{cups-configuration} parameter} error-policy error-policy
13301 Specifies what to do when an error occurs. Possible values are
13302 @code{abort-job}, which will discard the failed print job;
13303 @code{retry-job}, which will retry the job at a later time;
13304 @code{retry-this-job}, which retries the failed job immediately; and
13305 @code{stop-printer}, which stops the printer.
13306
13307 Defaults to @samp{stop-printer}.
13308 @end deftypevr
13309
13310 @deftypevr {@code{cups-configuration} parameter} non-negative-integer filter-limit
13311 Specifies the maximum cost of filters that are run concurrently, which
13312 can be used to minimize disk, memory, and CPU resource problems. A
13313 limit of 0 disables filter limiting. An average print to a
13314 non-PostScript printer needs a filter limit of about 200. A PostScript
13315 printer needs about half that (100). Setting the limit below these
13316 thresholds will effectively limit the scheduler to printing a single job
13317 at any time.
13318
13319 Defaults to @samp{0}.
13320 @end deftypevr
13321
13322 @deftypevr {@code{cups-configuration} parameter} non-negative-integer filter-nice
13323 Specifies the scheduling priority of filters that are run to print a
13324 job. The nice value ranges from 0, the highest priority, to 19, the
13325 lowest priority.
13326
13327 Defaults to @samp{0}.
13328 @end deftypevr
13329
13330 @deftypevr {@code{cups-configuration} parameter} host-name-lookups host-name-lookups
13331 Specifies whether to do reverse lookups on connecting clients. The
13332 @code{double} setting causes @code{cupsd} to verify that the hostname
13333 resolved from the address matches one of the addresses returned for that
13334 hostname. Double lookups also prevent clients with unregistered
13335 addresses from connecting to your server. Only set this option to
13336 @code{#t} or @code{double} if absolutely required.
13337
13338 Defaults to @samp{#f}.
13339 @end deftypevr
13340
13341 @deftypevr {@code{cups-configuration} parameter} non-negative-integer job-kill-delay
13342 Specifies the number of seconds to wait before killing the filters and
13343 backend associated with a canceled or held job.
13344
13345 Defaults to @samp{30}.
13346 @end deftypevr
13347
13348 @deftypevr {@code{cups-configuration} parameter} non-negative-integer job-retry-interval
13349 Specifies the interval between retries of jobs in seconds. This is
13350 typically used for fax queues but can also be used with normal print
13351 queues whose error policy is @code{retry-job} or
13352 @code{retry-current-job}.
13353
13354 Defaults to @samp{30}.
13355 @end deftypevr
13356
13357 @deftypevr {@code{cups-configuration} parameter} non-negative-integer job-retry-limit
13358 Specifies the number of retries that are done for jobs. This is
13359 typically used for fax queues but can also be used with normal print
13360 queues whose error policy is @code{retry-job} or
13361 @code{retry-current-job}.
13362
13363 Defaults to @samp{5}.
13364 @end deftypevr
13365
13366 @deftypevr {@code{cups-configuration} parameter} boolean keep-alive?
13367 Specifies whether to support HTTP keep-alive connections.
13368
13369 Defaults to @samp{#t}.
13370 @end deftypevr
13371
13372 @deftypevr {@code{cups-configuration} parameter} non-negative-integer keep-alive-timeout
13373 Specifies how long an idle client connection remains open, in seconds.
13374
13375 Defaults to @samp{30}.
13376 @end deftypevr
13377
13378 @deftypevr {@code{cups-configuration} parameter} non-negative-integer limit-request-body
13379 Specifies the maximum size of print files, IPP requests, and HTML form
13380 data. A limit of 0 disables the limit check.
13381
13382 Defaults to @samp{0}.
13383 @end deftypevr
13384
13385 @deftypevr {@code{cups-configuration} parameter} multiline-string-list listen
13386 Listens on the specified interfaces for connections. Valid values are
13387 of the form @var{address}:@var{port}, where @var{address} is either an
13388 IPv6 address enclosed in brackets, an IPv4 address, or @code{*} to
13389 indicate all addresses. Values can also be file names of local UNIX
13390 domain sockets. The Listen directive is similar to the Port directive
13391 but allows you to restrict access to specific interfaces or networks.
13392 @end deftypevr
13393
13394 @deftypevr {@code{cups-configuration} parameter} non-negative-integer listen-back-log
13395 Specifies the number of pending connections that will be allowed. This
13396 normally only affects very busy servers that have reached the MaxClients
13397 limit, but can also be triggered by large numbers of simultaneous
13398 connections. When the limit is reached, the operating system will
13399 refuse additional connections until the scheduler can accept the pending
13400 ones.
13401
13402 Defaults to @samp{128}.
13403 @end deftypevr
13404
13405 @deftypevr {@code{cups-configuration} parameter} location-access-control-list location-access-controls
13406 Specifies a set of additional access controls.
13407
13408 Available @code{location-access-controls} fields are:
13409
13410 @deftypevr {@code{location-access-controls} parameter} file-name path
13411 Specifies the URI path to which the access control applies.
13412 @end deftypevr
13413
13414 @deftypevr {@code{location-access-controls} parameter} access-control-list access-controls
13415 Access controls for all access to this path, in the same format as the
13416 @code{access-controls} of @code{operation-access-control}.
13417
13418 Defaults to @samp{()}.
13419 @end deftypevr
13420
13421 @deftypevr {@code{location-access-controls} parameter} method-access-control-list method-access-controls
13422 Access controls for method-specific access to this path.
13423
13424 Defaults to @samp{()}.
13425
13426 Available @code{method-access-controls} fields are:
13427
13428 @deftypevr {@code{method-access-controls} parameter} boolean reverse?
13429 If @code{#t}, apply access controls to all methods except the listed
13430 methods. Otherwise apply to only the listed methods.
13431
13432 Defaults to @samp{#f}.
13433 @end deftypevr
13434
13435 @deftypevr {@code{method-access-controls} parameter} method-list methods
13436 Methods to which this access control applies.
13437
13438 Defaults to @samp{()}.
13439 @end deftypevr
13440
13441 @deftypevr {@code{method-access-controls} parameter} access-control-list access-controls
13442 Access control directives, as a list of strings. Each string should be
13443 one directive, such as "Order allow,deny".
13444
13445 Defaults to @samp{()}.
13446 @end deftypevr
13447 @end deftypevr
13448 @end deftypevr
13449
13450 @deftypevr {@code{cups-configuration} parameter} non-negative-integer log-debug-history
13451 Specifies the number of debugging messages that are retained for logging
13452 if an error occurs in a print job. Debug messages are logged regardless
13453 of the LogLevel setting.
13454
13455 Defaults to @samp{100}.
13456 @end deftypevr
13457
13458 @deftypevr {@code{cups-configuration} parameter} log-level log-level
13459 Specifies the level of logging for the ErrorLog file. The value
13460 @code{none} stops all logging while @code{debug2} logs everything.
13461
13462 Defaults to @samp{info}.
13463 @end deftypevr
13464
13465 @deftypevr {@code{cups-configuration} parameter} log-time-format log-time-format
13466 Specifies the format of the date and time in the log files. The value
13467 @code{standard} logs whole seconds while @code{usecs} logs microseconds.
13468
13469 Defaults to @samp{standard}.
13470 @end deftypevr
13471
13472 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-clients
13473 Specifies the maximum number of simultaneous clients that are allowed by
13474 the scheduler.
13475
13476 Defaults to @samp{100}.
13477 @end deftypevr
13478
13479 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-clients-per-host
13480 Specifies the maximum number of simultaneous clients that are allowed
13481 from a single address.
13482
13483 Defaults to @samp{100}.
13484 @end deftypevr
13485
13486 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-copies
13487 Specifies the maximum number of copies that a user can print of each
13488 job.
13489
13490 Defaults to @samp{9999}.
13491 @end deftypevr
13492
13493 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-hold-time
13494 Specifies the maximum time a job may remain in the @code{indefinite}
13495 hold state before it is canceled. A value of 0 disables cancellation of
13496 held jobs.
13497
13498 Defaults to @samp{0}.
13499 @end deftypevr
13500
13501 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs
13502 Specifies the maximum number of simultaneous jobs that are allowed. Set
13503 to 0 to allow an unlimited number of jobs.
13504
13505 Defaults to @samp{500}.
13506 @end deftypevr
13507
13508 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs-per-printer
13509 Specifies the maximum number of simultaneous jobs that are allowed per
13510 printer. A value of 0 allows up to MaxJobs jobs per printer.
13511
13512 Defaults to @samp{0}.
13513 @end deftypevr
13514
13515 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs-per-user
13516 Specifies the maximum number of simultaneous jobs that are allowed per
13517 user. A value of 0 allows up to MaxJobs jobs per user.
13518
13519 Defaults to @samp{0}.
13520 @end deftypevr
13521
13522 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-job-time
13523 Specifies the maximum time a job may take to print before it is
13524 canceled, in seconds. Set to 0 to disable cancellation of "stuck" jobs.
13525
13526 Defaults to @samp{10800}.
13527 @end deftypevr
13528
13529 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-log-size
13530 Specifies the maximum size of the log files before they are rotated, in
13531 bytes. The value 0 disables log rotation.
13532
13533 Defaults to @samp{1048576}.
13534 @end deftypevr
13535
13536 @deftypevr {@code{cups-configuration} parameter} non-negative-integer multiple-operation-timeout
13537 Specifies the maximum amount of time to allow between files in a
13538 multiple file print job, in seconds.
13539
13540 Defaults to @samp{300}.
13541 @end deftypevr
13542
13543 @deftypevr {@code{cups-configuration} parameter} string page-log-format
13544 Specifies the format of PageLog lines. Sequences beginning with percent
13545 (@samp{%}) characters are replaced with the corresponding information,
13546 while all other characters are copied literally. The following percent
13547 sequences are recognized:
13548
13549 @table @samp
13550 @item %%
13551 insert a single percent character
13552
13553 @item %@{name@}
13554 insert the value of the specified IPP attribute
13555
13556 @item %C
13557 insert the number of copies for the current page
13558
13559 @item %P
13560 insert the current page number
13561
13562 @item %T
13563 insert the current date and time in common log format
13564
13565 @item %j
13566 insert the job ID
13567
13568 @item %p
13569 insert the printer name
13570
13571 @item %u
13572 insert the username
13573 @end table
13574
13575 A value of the empty string disables page logging. The string @code{%p
13576 %u %j %T %P %C %@{job-billing@} %@{job-originating-host-name@}
13577 %@{job-name@} %@{media@} %@{sides@}} creates a page log with the
13578 standard items.
13579
13580 Defaults to @samp{""}.
13581 @end deftypevr
13582
13583 @deftypevr {@code{cups-configuration} parameter} environment-variables environment-variables
13584 Passes the specified environment variable(s) to child processes; a list
13585 of strings.
13586
13587 Defaults to @samp{()}.
13588 @end deftypevr
13589
13590 @deftypevr {@code{cups-configuration} parameter} policy-configuration-list policies
13591 Specifies named access control policies.
13592
13593 Available @code{policy-configuration} fields are:
13594
13595 @deftypevr {@code{policy-configuration} parameter} string name
13596 Name of the policy.
13597 @end deftypevr
13598
13599 @deftypevr {@code{policy-configuration} parameter} string job-private-access
13600 Specifies an access list for a job's private values. @code{@@ACL} maps
13601 to the printer's requesting-user-name-allowed or
13602 requesting-user-name-denied values. @code{@@OWNER} maps to the job's
13603 owner. @code{@@SYSTEM} maps to the groups listed for the
13604 @code{system-group} field of the @code{files-config} configuration,
13605 which is reified into the @code{cups-files.conf(5)} file. Other
13606 possible elements of the access list include specific user names, and
13607 @code{@@@var{group}} to indicate members of a specific group. The
13608 access list may also be simply @code{all} or @code{default}.
13609
13610 Defaults to @samp{"@@OWNER @@SYSTEM"}.
13611 @end deftypevr
13612
13613 @deftypevr {@code{policy-configuration} parameter} string job-private-values
13614 Specifies the list of job values to make private, or @code{all},
13615 @code{default}, or @code{none}.
13616
13617 Defaults to @samp{"job-name job-originating-host-name
13618 job-originating-user-name phone"}.
13619 @end deftypevr
13620
13621 @deftypevr {@code{policy-configuration} parameter} string subscription-private-access
13622 Specifies an access list for a subscription's private values.
13623 @code{@@ACL} maps to the printer's requesting-user-name-allowed or
13624 requesting-user-name-denied values. @code{@@OWNER} maps to the job's
13625 owner. @code{@@SYSTEM} maps to the groups listed for the
13626 @code{system-group} field of the @code{files-config} configuration,
13627 which is reified into the @code{cups-files.conf(5)} file. Other
13628 possible elements of the access list include specific user names, and
13629 @code{@@@var{group}} to indicate members of a specific group. The
13630 access list may also be simply @code{all} or @code{default}.
13631
13632 Defaults to @samp{"@@OWNER @@SYSTEM"}.
13633 @end deftypevr
13634
13635 @deftypevr {@code{policy-configuration} parameter} string subscription-private-values
13636 Specifies the list of job values to make private, or @code{all},
13637 @code{default}, or @code{none}.
13638
13639 Defaults to @samp{"notify-events notify-pull-method notify-recipient-uri
13640 notify-subscriber-user-name notify-user-data"}.
13641 @end deftypevr
13642
13643 @deftypevr {@code{policy-configuration} parameter} operation-access-control-list access-controls
13644 Access control by IPP operation.
13645
13646 Defaults to @samp{()}.
13647 @end deftypevr
13648 @end deftypevr
13649
13650 @deftypevr {@code{cups-configuration} parameter} boolean-or-non-negative-integer preserve-job-files
13651 Specifies whether job files (documents) are preserved after a job is
13652 printed. If a numeric value is specified, job files are preserved for
13653 the indicated number of seconds after printing. Otherwise a boolean
13654 value applies indefinitely.
13655
13656 Defaults to @samp{86400}.
13657 @end deftypevr
13658
13659 @deftypevr {@code{cups-configuration} parameter} boolean-or-non-negative-integer preserve-job-history
13660 Specifies whether the job history is preserved after a job is printed.
13661 If a numeric value is specified, the job history is preserved for the
13662 indicated number of seconds after printing. If @code{#t}, the job
13663 history is preserved until the MaxJobs limit is reached.
13664
13665 Defaults to @samp{#t}.
13666 @end deftypevr
13667
13668 @deftypevr {@code{cups-configuration} parameter} non-negative-integer reload-timeout
13669 Specifies the amount of time to wait for job completion before
13670 restarting the scheduler.
13671
13672 Defaults to @samp{30}.
13673 @end deftypevr
13674
13675 @deftypevr {@code{cups-configuration} parameter} string rip-cache
13676 Specifies the maximum amount of memory to use when converting documents
13677 into bitmaps for a printer.
13678
13679 Defaults to @samp{"128m"}.
13680 @end deftypevr
13681
13682 @deftypevr {@code{cups-configuration} parameter} string server-admin
13683 Specifies the email address of the server administrator.
13684
13685 Defaults to @samp{"root@@localhost.localdomain"}.
13686 @end deftypevr
13687
13688 @deftypevr {@code{cups-configuration} parameter} host-name-list-or-* server-alias
13689 The ServerAlias directive is used for HTTP Host header validation when
13690 clients connect to the scheduler from external interfaces. Using the
13691 special name @code{*} can expose your system to known browser-based DNS
13692 rebinding attacks, even when accessing sites through a firewall. If the
13693 auto-discovery of alternate names does not work, we recommend listing
13694 each alternate name with a ServerAlias directive instead of using
13695 @code{*}.
13696
13697 Defaults to @samp{*}.
13698 @end deftypevr
13699
13700 @deftypevr {@code{cups-configuration} parameter} string server-name
13701 Specifies the fully-qualified host name of the server.
13702
13703 Defaults to @samp{"localhost"}.
13704 @end deftypevr
13705
13706 @deftypevr {@code{cups-configuration} parameter} server-tokens server-tokens
13707 Specifies what information is included in the Server header of HTTP
13708 responses. @code{None} disables the Server header. @code{ProductOnly}
13709 reports @code{CUPS}. @code{Major} reports @code{CUPS 2}. @code{Minor}
13710 reports @code{CUPS 2.0}. @code{Minimal} reports @code{CUPS 2.0.0}.
13711 @code{OS} reports @code{CUPS 2.0.0 (@var{uname})} where @var{uname} is
13712 the output of the @code{uname} command. @code{Full} reports @code{CUPS
13713 2.0.0 (@var{uname}) IPP/2.0}.
13714
13715 Defaults to @samp{Minimal}.
13716 @end deftypevr
13717
13718 @deftypevr {@code{cups-configuration} parameter} string set-env
13719 Set the specified environment variable to be passed to child processes.
13720
13721 Defaults to @samp{"variable value"}.
13722 @end deftypevr
13723
13724 @deftypevr {@code{cups-configuration} parameter} multiline-string-list ssl-listen
13725 Listens on the specified interfaces for encrypted connections. Valid
13726 values are of the form @var{address}:@var{port}, where @var{address} is
13727 either an IPv6 address enclosed in brackets, an IPv4 address, or
13728 @code{*} to indicate all addresses.
13729
13730 Defaults to @samp{()}.
13731 @end deftypevr
13732
13733 @deftypevr {@code{cups-configuration} parameter} ssl-options ssl-options
13734 Sets encryption options. By default, CUPS only supports encryption
13735 using TLS v1.0 or higher using known secure cipher suites. The
13736 @code{AllowRC4} option enables the 128-bit RC4 cipher suites, which are
13737 required for some older clients that do not implement newer ones. The
13738 @code{AllowSSL3} option enables SSL v3.0, which is required for some
13739 older clients that do not support TLS v1.0.
13740
13741 Defaults to @samp{()}.
13742 @end deftypevr
13743
13744 @deftypevr {@code{cups-configuration} parameter} boolean strict-conformance?
13745 Specifies whether the scheduler requires clients to strictly adhere to
13746 the IPP specifications.
13747
13748 Defaults to @samp{#f}.
13749 @end deftypevr
13750
13751 @deftypevr {@code{cups-configuration} parameter} non-negative-integer timeout
13752 Specifies the HTTP request timeout, in seconds.
13753
13754 Defaults to @samp{300}.
13755
13756 @end deftypevr
13757
13758 @deftypevr {@code{cups-configuration} parameter} boolean web-interface?
13759 Specifies whether the web interface is enabled.
13760
13761 Defaults to @samp{#f}.
13762 @end deftypevr
13763
13764 At this point you're probably thinking ``oh dear, Guix manual, I like
13765 you but you can stop already with the configuration options''. Indeed.
13766 However, one more point: it could be that you have an existing
13767 @code{cupsd.conf} that you want to use. In that case, you can pass an
13768 @code{opaque-cups-configuration} as the configuration of a
13769 @code{cups-service-type}.
13770
13771 Available @code{opaque-cups-configuration} fields are:
13772
13773 @deftypevr {@code{opaque-cups-configuration} parameter} package cups
13774 The CUPS package.
13775 @end deftypevr
13776
13777 @deftypevr {@code{opaque-cups-configuration} parameter} string cupsd.conf
13778 The contents of the @code{cupsd.conf}, as a string.
13779 @end deftypevr
13780
13781 @deftypevr {@code{opaque-cups-configuration} parameter} string cups-files.conf
13782 The contents of the @code{cups-files.conf} file, as a string.
13783 @end deftypevr
13784
13785 For example, if your @code{cupsd.conf} and @code{cups-files.conf} are in
13786 strings of the same name, you could instantiate a CUPS service like
13787 this:
13788
13789 @example
13790 (service cups-service-type
13791 (opaque-cups-configuration
13792 (cupsd.conf cupsd.conf)
13793 (cups-files.conf cups-files.conf)))
13794 @end example
13795
13796
13797 @node Desktop Services
13798 @subsubsection Desktop Services
13799
13800 The @code{(gnu services desktop)} module provides services that are
13801 usually useful in the context of a ``desktop'' setup---that is, on a
13802 machine running a graphical display server, possibly with graphical user
13803 interfaces, etc. It also defines services that provide specific desktop
13804 environments like GNOME, XFCE or MATE.
13805
13806 To simplify things, the module defines a variable containing the set of
13807 services that users typically expect on a machine with a graphical
13808 environment and networking:
13809
13810 @defvr {Scheme Variable} %desktop-services
13811 This is a list of services that builds upon @var{%base-services} and
13812 adds or adjusts services for a typical ``desktop'' setup.
13813
13814 In particular, it adds a graphical login manager (@pxref{X Window,
13815 @code{slim-service}}), screen lockers, a network management tool
13816 (@pxref{Networking Services, @code{network-manager-service-type}}), energy and color
13817 management services, the @code{elogind} login and seat manager, the
13818 Polkit privilege service, the GeoClue location service, the
13819 AccountsService daemon that allows authorized users change system
13820 passwords, an NTP client (@pxref{Networking Services}), the Avahi
13821 daemon, and has the name service switch service configured to be able to
13822 use @code{nss-mdns} (@pxref{Name Service Switch, mDNS}).
13823 @end defvr
13824
13825 The @var{%desktop-services} variable can be used as the @code{services}
13826 field of an @code{operating-system} declaration (@pxref{operating-system
13827 Reference, @code{services}}).
13828
13829 Additionally, the @code{gnome-desktop-service},
13830 @code{xfce-desktop-service}, @code{mate-desktop-service} and
13831 @code{enlightenment-desktop-service-type} procedures can add GNOME, XFCE, MATE
13832 and/or Enlightenment to a system. To ``add GNOME'' means that system-level
13833 services like the backlight adjustment helpers and the power management
13834 utilities are added to the system, extending @code{polkit} and @code{dbus}
13835 appropriately, allowing GNOME to operate with elevated privileges on a
13836 limited number of special-purpose system interfaces. Additionally,
13837 adding a service made by @code{gnome-desktop-service} adds the GNOME
13838 metapackage to the system profile. Likewise, adding the XFCE service
13839 not only adds the @code{xfce} metapackage to the system profile, but it
13840 also gives the Thunar file manager the ability to open a ``root-mode''
13841 file management window, if the user authenticates using the
13842 administrator's password via the standard polkit graphical interface.
13843 To ``add MATE'' means that @code{polkit} and @code{dbus} are extended
13844 appropriately, allowing MATE to operate with elevated privileges on a
13845 limited number of special-purpose system interfaces. Additionally,
13846 adding a service made by @code{mate-desktop-service} adds the MATE
13847 metapackage to the system profile. ``Adding ENLIGHTENMENT'' means that
13848 @code{dbus} is extended appropriately, and several of Enlightenment's binaries
13849 are set as setuid, allowing Enlightenment's screen locker and other
13850 functionality to work as expetected.
13851
13852 The desktop environments in Guix use the Xorg display server by
13853 default. If you'd like to use the newer display server protocol
13854 called Wayland, you need to use the @code{sddm-service} instead of the
13855 @code{slim-service} for the graphical login manager. You should then
13856 select the ``GNOME (Wayland)'' session in SDDM. Alternatively you can
13857 also try starting GNOME on Wayland manually from a TTY with the
13858 command ``XDG_SESSION_TYPE=wayland exec dbus-run-session
13859 gnome-session``. Currently only GNOME has support for Wayland.
13860
13861 @deffn {Scheme Procedure} gnome-desktop-service
13862 Return a service that adds the @code{gnome} package to the system
13863 profile, and extends polkit with the actions from
13864 @code{gnome-settings-daemon}.
13865 @end deffn
13866
13867 @deffn {Scheme Procedure} xfce-desktop-service
13868 Return a service that adds the @code{xfce} package to the system profile,
13869 and extends polkit with the ability for @code{thunar} to manipulate the
13870 file system as root from within a user session, after the user has
13871 authenticated with the administrator's password.
13872 @end deffn
13873
13874 @deffn {Scheme Procedure} mate-desktop-service
13875 Return a service that adds the @code{mate} package to the system
13876 profile, and extends polkit with the actions from
13877 @code{mate-settings-daemon}.
13878 @end deffn
13879
13880 @deffn {Scheme Procedure} enlightenment-desktop-service-type
13881 Return a service that adds the @code{enlightenment} package to the system
13882 profile, and extends dbus with actions from @code{efl}.
13883 @end deffn
13884
13885 @deftp {Data Type} enlightenment-desktop-service-configuration
13886 @table @asis
13887 @item @code{enlightenment} (default @code{enlightenment})
13888 The enlightenment package to use.
13889 @end table
13890 @end deftp
13891
13892 Because the GNOME, XFCE and MATE desktop services pull in so many packages,
13893 the default @code{%desktop-services} variable doesn't include any of
13894 them by default. To add GNOME, XFCE or MATE, just @code{cons} them onto
13895 @code{%desktop-services} in the @code{services} field of your
13896 @code{operating-system}:
13897
13898 @example
13899 (use-modules (gnu))
13900 (use-service-modules desktop)
13901 (operating-system
13902 ...
13903 ;; cons* adds items to the list given as its last argument.
13904 (services (cons* (gnome-desktop-service)
13905 (xfce-desktop-service)
13906 %desktop-services))
13907 ...)
13908 @end example
13909
13910 These desktop environments will then be available as options in the
13911 graphical login window.
13912
13913 The actual service definitions included in @code{%desktop-services} and
13914 provided by @code{(gnu services dbus)} and @code{(gnu services desktop)}
13915 are described below.
13916
13917 @deffn {Scheme Procedure} dbus-service [#:dbus @var{dbus}] [#:services '()]
13918 Return a service that runs the ``system bus'', using @var{dbus}, with
13919 support for @var{services}.
13920
13921 @uref{http://dbus.freedesktop.org/, D-Bus} is an inter-process communication
13922 facility. Its system bus is used to allow system services to communicate
13923 and to be notified of system-wide events.
13924
13925 @var{services} must be a list of packages that provide an
13926 @file{etc/dbus-1/system.d} directory containing additional D-Bus configuration
13927 and policy files. For example, to allow avahi-daemon to use the system bus,
13928 @var{services} must be equal to @code{(list avahi)}.
13929 @end deffn
13930
13931 @deffn {Scheme Procedure} elogind-service [#:config @var{config}]
13932 Return a service that runs the @code{elogind} login and
13933 seat management daemon. @uref{https://github.com/elogind/elogind,
13934 Elogind} exposes a D-Bus interface that can be used to know which users
13935 are logged in, know what kind of sessions they have open, suspend the
13936 system, inhibit system suspend, reboot the system, and other tasks.
13937
13938 Elogind handles most system-level power events for a computer, for
13939 example suspending the system when a lid is closed, or shutting it down
13940 when the power button is pressed.
13941
13942 The @var{config} keyword argument specifies the configuration for
13943 elogind, and should be the result of an @code{(elogind-configuration
13944 (@var{parameter} @var{value})...)} invocation. Available parameters and
13945 their default values are:
13946
13947 @table @code
13948 @item kill-user-processes?
13949 @code{#f}
13950 @item kill-only-users
13951 @code{()}
13952 @item kill-exclude-users
13953 @code{("root")}
13954 @item inhibit-delay-max-seconds
13955 @code{5}
13956 @item handle-power-key
13957 @code{poweroff}
13958 @item handle-suspend-key
13959 @code{suspend}
13960 @item handle-hibernate-key
13961 @code{hibernate}
13962 @item handle-lid-switch
13963 @code{suspend}
13964 @item handle-lid-switch-docked
13965 @code{ignore}
13966 @item power-key-ignore-inhibited?
13967 @code{#f}
13968 @item suspend-key-ignore-inhibited?
13969 @code{#f}
13970 @item hibernate-key-ignore-inhibited?
13971 @code{#f}
13972 @item lid-switch-ignore-inhibited?
13973 @code{#t}
13974 @item holdoff-timeout-seconds
13975 @code{30}
13976 @item idle-action
13977 @code{ignore}
13978 @item idle-action-seconds
13979 @code{(* 30 60)}
13980 @item runtime-directory-size-percent
13981 @code{10}
13982 @item runtime-directory-size
13983 @code{#f}
13984 @item remove-ipc?
13985 @code{#t}
13986 @item suspend-state
13987 @code{("mem" "standby" "freeze")}
13988 @item suspend-mode
13989 @code{()}
13990 @item hibernate-state
13991 @code{("disk")}
13992 @item hibernate-mode
13993 @code{("platform" "shutdown")}
13994 @item hybrid-sleep-state
13995 @code{("disk")}
13996 @item hybrid-sleep-mode
13997 @code{("suspend" "platform" "shutdown")}
13998 @end table
13999 @end deffn
14000
14001 @deffn {Scheme Procedure} accountsservice-service @
14002 [#:accountsservice @var{accountsservice}]
14003 Return a service that runs AccountsService, a system service that can
14004 list available accounts, change their passwords, and so on.
14005 AccountsService integrates with PolicyKit to enable unprivileged users
14006 to acquire the capability to modify their system configuration.
14007 @uref{https://www.freedesktop.org/wiki/Software/AccountsService/, the
14008 accountsservice web site} for more information.
14009
14010 The @var{accountsservice} keyword argument is the @code{accountsservice}
14011 package to expose as a service.
14012 @end deffn
14013
14014 @deffn {Scheme Procedure} polkit-service @
14015 [#:polkit @var{polkit}]
14016 Return a service that runs the
14017 @uref{http://www.freedesktop.org/wiki/Software/polkit/, Polkit privilege
14018 management service}, which allows system administrators to grant access to
14019 privileged operations in a structured way. By querying the Polkit service, a
14020 privileged system component can know when it should grant additional
14021 capabilities to ordinary users. For example, an ordinary user can be granted
14022 the capability to suspend the system if the user is logged in locally.
14023 @end deffn
14024
14025 @deffn {Scheme Procedure} upower-service [#:upower @var{upower}] @
14026 [#:watts-up-pro? #f] @
14027 [#:poll-batteries? #t] @
14028 [#:ignore-lid? #f] @
14029 [#:use-percentage-for-policy? #f] @
14030 [#:percentage-low 10] @
14031 [#:percentage-critical 3] @
14032 [#:percentage-action 2] @
14033 [#:time-low 1200] @
14034 [#:time-critical 300] @
14035 [#:time-action 120] @
14036 [#:critical-power-action 'hybrid-sleep]
14037 Return a service that runs @uref{http://upower.freedesktop.org/,
14038 @command{upowerd}}, a system-wide monitor for power consumption and battery
14039 levels, with the given configuration settings. It implements the
14040 @code{org.freedesktop.UPower} D-Bus interface, and is notably used by
14041 GNOME.
14042 @end deffn
14043
14044 @deffn {Scheme Procedure} udisks-service [#:udisks @var{udisks}]
14045 Return a service for @uref{http://udisks.freedesktop.org/docs/latest/,
14046 UDisks}, a @dfn{disk management} daemon that provides user interfaces with
14047 notifications and ways to mount/unmount disks. Programs that talk to UDisks
14048 include the @command{udisksctl} command, part of UDisks, and GNOME Disks.
14049 @end deffn
14050
14051 @deffn {Scheme Procedure} colord-service [#:colord @var{colord}]
14052 Return a service that runs @command{colord}, a system service with a D-Bus
14053 interface to manage the color profiles of input and output devices such as
14054 screens and scanners. It is notably used by the GNOME Color Manager graphical
14055 tool. See @uref{http://www.freedesktop.org/software/colord/, the colord web
14056 site} for more information.
14057 @end deffn
14058
14059 @deffn {Scheme Procedure} geoclue-application name [#:allowed? #t] [#:system? #f] [#:users '()]
14060 Return a configuration allowing an application to access GeoClue
14061 location data. @var{name} is the Desktop ID of the application, without
14062 the @code{.desktop} part. If @var{allowed?} is true, the application
14063 will have access to location information by default. The boolean
14064 @var{system?} value indicates whether an application is a system component
14065 or not. Finally @var{users} is a list of UIDs of all users for which
14066 this application is allowed location info access. An empty users list
14067 means that all users are allowed.
14068 @end deffn
14069
14070 @defvr {Scheme Variable} %standard-geoclue-applications
14071 The standard list of well-known GeoClue application configurations,
14072 granting authority to the GNOME date-and-time utility to ask for the
14073 current location in order to set the time zone, and allowing the
14074 IceCat and Epiphany web browsers to request location information.
14075 IceCat and Epiphany both query the user before allowing a web page to
14076 know the user's location.
14077 @end defvr
14078
14079 @deffn {Scheme Procedure} geoclue-service [#:colord @var{colord}] @
14080 [#:whitelist '()] @
14081 [#:wifi-geolocation-url "https://location.services.mozilla.com/v1/geolocate?key=geoclue"] @
14082 [#:submit-data? #f]
14083 [#:wifi-submission-url "https://location.services.mozilla.com/v1/submit?key=geoclue"] @
14084 [#:submission-nick "geoclue"] @
14085 [#:applications %standard-geoclue-applications]
14086 Return a service that runs the GeoClue location service. This service
14087 provides a D-Bus interface to allow applications to request access to a
14088 user's physical location, and optionally to add information to online
14089 location databases. See
14090 @uref{https://wiki.freedesktop.org/www/Software/GeoClue/, the GeoClue
14091 web site} for more information.
14092 @end deffn
14093
14094 @deffn {Scheme Procedure} bluetooth-service [#:bluez @var{bluez}] @
14095 [@w{#:auto-enable? #f}]
14096 Return a service that runs the @command{bluetoothd} daemon, which
14097 manages all the Bluetooth devices and provides a number of D-Bus
14098 interfaces. When AUTO-ENABLE? is true, the bluetooth controller is
14099 powered automatically at boot, which can be useful when using a
14100 bluetooth keyboard or mouse.
14101
14102 Users need to be in the @code{lp} group to access the D-Bus service.
14103 @end deffn
14104
14105 @node Sound Services
14106 @subsubsection Sound Services
14107
14108 @cindex sound support
14109 @cindex ALSA
14110 @cindex PulseAudio, sound support
14111
14112 The @code{(gnu services sound)} module provides a service to configure the
14113 Advanced Linux Sound Architecture (ALSA) system, which makes PulseAudio the
14114 preferred ALSA output driver.
14115
14116 @deffn {Scheme Variable} alsa-service-type
14117 This is the type for the @uref{https://alsa-project.org/, Advanced Linux Sound
14118 Architecture} (ALSA) system, which generates the @file{/etc/asound.conf}
14119 configuration file. The value for this type is a @command{alsa-configuration}
14120 record as in this example:
14121
14122 @example
14123 (service alsa-service-type)
14124 @end example
14125
14126 See below for details about @code{alsa-configuration}.
14127 @end deffn
14128
14129 @deftp {Data Type} alsa-configuration
14130 Data type representing the configuration for @code{alsa-service}.
14131
14132 @table @asis
14133 @item @code{alsa-plugins} (default: @var{alsa-plugins})
14134 @code{alsa-plugins} package to use.
14135
14136 @item @code{pulseaudio?} (default: @var{#t})
14137 Whether ALSA applications should transparently be made to use the
14138 @uref{http://www.pulseaudio.org/, PulseAudio} sound server.
14139
14140 Using PulseAudio allows you to run several sound-producing applications
14141 at the same time and to individual control them @i{via}
14142 @command{pavucontrol}, among other things.
14143
14144 @item @code{extra-options} (default: @var{""})
14145 String to append to the @file{/etc/asound.conf} file.
14146
14147 @end table
14148 @end deftp
14149
14150 Individual users who want to override the system configuration of ALSA can do
14151 it with the @file{~/.asoundrc} file:
14152
14153 @example
14154 # In guix, we have to specify the absolute path for plugins.
14155 pcm_type.jack @{
14156 lib "/home/alice/.guix-profile/lib/alsa-lib/libasound_module_pcm_jack.so"
14157 @}
14158
14159 # Routing ALSA to jack:
14160 # <http://jackaudio.org/faq/routing_alsa.html>.
14161 pcm.rawjack @{
14162 type jack
14163 playback_ports @{
14164 0 system:playback_1
14165 1 system:playback_2
14166 @}
14167
14168 capture_ports @{
14169 0 system:capture_1
14170 1 system:capture_2
14171 @}
14172 @}
14173
14174 pcm.!default @{
14175 type plug
14176 slave @{
14177 pcm "rawjack"
14178 @}
14179 @}
14180 @end example
14181
14182 See @uref{https://www.alsa-project.org/main/index.php/Asoundrc} for the
14183 details.
14184
14185
14186 @node Database Services
14187 @subsubsection Database Services
14188
14189 @cindex database
14190 @cindex SQL
14191 The @code{(gnu services databases)} module provides the following services.
14192
14193 @deffn {Scheme Procedure} postgresql-service [#:postgresql postgresql] @
14194 [#:config-file] [#:data-directory ``/var/lib/postgresql/data''] @
14195 [#:port 5432] [#:locale ``en_US.utf8'']
14196 Return a service that runs @var{postgresql}, the PostgreSQL database
14197 server.
14198
14199 The PostgreSQL daemon loads its runtime configuration from @var{config-file},
14200 creates a database cluster with @var{locale} as the default
14201 locale, stored in @var{data-directory}. It then listens on @var{port}.
14202 @end deffn
14203
14204 @deffn {Scheme Procedure} mysql-service [#:config (mysql-configuration)]
14205 Return a service that runs @command{mysqld}, the MySQL or MariaDB
14206 database server.
14207
14208 The optional @var{config} argument specifies the configuration for
14209 @command{mysqld}, which should be a @code{<mysql-configuration>} object.
14210 @end deffn
14211
14212 @deftp {Data Type} mysql-configuration
14213 Data type representing the configuration of @var{mysql-service}.
14214
14215 @table @asis
14216 @item @code{mysql} (default: @var{mariadb})
14217 Package object of the MySQL database server, can be either @var{mariadb}
14218 or @var{mysql}.
14219
14220 For MySQL, a temporary root password will be displayed at activation time.
14221 For MariaDB, the root password is empty.
14222
14223 @item @code{port} (default: @code{3306})
14224 TCP port on which the database server listens for incoming connections.
14225 @end table
14226 @end deftp
14227
14228 @defvr {Scheme Variable} memcached-service-type
14229 This is the service type for the @uref{https://memcached.org/,
14230 Memcached} service, which provides a distributed in memory cache. The
14231 value for the service type is a @code{memcached-configuration} object.
14232 @end defvr
14233
14234 @example
14235 (service memcached-service-type)
14236 @end example
14237
14238 @deftp {Data Type} memcached-configuration
14239 Data type representing the configuration of memcached.
14240
14241 @table @asis
14242 @item @code{memcached} (default: @code{memcached})
14243 The Memcached package to use.
14244
14245 @item @code{interfaces} (default: @code{'("0.0.0.0")})
14246 Network interfaces on which to listen.
14247
14248 @item @code{tcp-port} (default: @code{11211})
14249 Port on which to accept connections on,
14250
14251 @item @code{udp-port} (default: @code{11211})
14252 Port on which to accept UDP connections on, a value of 0 will disable
14253 listening on a UDP socket.
14254
14255 @item @code{additional-options} (default: @code{'()})
14256 Additional command line options to pass to @code{memcached}.
14257 @end table
14258 @end deftp
14259
14260 @defvr {Scheme Variable} mongodb-service-type
14261 This is the service type for @uref{https://www.mongodb.com/, MongoDB}.
14262 The value for the service type is a @code{mongodb-configuration} object.
14263 @end defvr
14264
14265 @example
14266 (service mongodb-service-type)
14267 @end example
14268
14269 @deftp {Data Type} mongodb-configuration
14270 Data type representing the configuration of mongodb.
14271
14272 @table @asis
14273 @item @code{mongodb} (default: @code{mongodb})
14274 The MongoDB package to use.
14275
14276 @item @code{config-file} (default: @code{%default-mongodb-configuration-file})
14277 The configuration file for MongoDB.
14278
14279 @item @code{data-directory} (default: @code{"/var/lib/mongodb"})
14280 This value is used to create the directory, so that it exists and is
14281 owned by the mongodb user. It should match the data-directory which
14282 MongoDB is configured to use through the configuration file.
14283 @end table
14284 @end deftp
14285
14286 @defvr {Scheme Variable} redis-service-type
14287 This is the service type for the @uref{https://redis.io/, Redis}
14288 key/value store, whose value is a @code{redis-configuration} object.
14289 @end defvr
14290
14291 @deftp {Data Type} redis-configuration
14292 Data type representing the configuration of redis.
14293
14294 @table @asis
14295 @item @code{redis} (default: @code{redis})
14296 The Redis package to use.
14297
14298 @item @code{bind} (default: @code{"127.0.0.1"})
14299 Network interface on which to listen.
14300
14301 @item @code{port} (default: @code{6379})
14302 Port on which to accept connections on, a value of 0 will disable
14303 listening on a TCP socket.
14304
14305 @item @code{working-directory} (default: @code{"/var/lib/redis"})
14306 Directory in which to store the database and related files.
14307 @end table
14308 @end deftp
14309
14310 @node Mail Services
14311 @subsubsection Mail Services
14312
14313 @cindex mail
14314 @cindex email
14315 The @code{(gnu services mail)} module provides Guix service definitions
14316 for email services: IMAP, POP3, and LMTP servers, as well as mail
14317 transport agents (MTAs). Lots of acronyms! These services are detailed
14318 in the subsections below.
14319
14320 @subsubheading Dovecot Service
14321
14322 @deffn {Scheme Procedure} dovecot-service [#:config (dovecot-configuration)]
14323 Return a service that runs the Dovecot IMAP/POP3/LMTP mail server.
14324 @end deffn
14325
14326 By default, Dovecot does not need much configuration; the default
14327 configuration object created by @code{(dovecot-configuration)} will
14328 suffice if your mail is delivered to @code{~/Maildir}. A self-signed
14329 certificate will be generated for TLS-protected connections, though
14330 Dovecot will also listen on cleartext ports by default. There are a
14331 number of options, though, which mail administrators might need to change,
14332 and as is the case with other services, Guix allows the system
14333 administrator to specify these parameters via a uniform Scheme interface.
14334
14335 For example, to specify that mail is located at @code{maildir~/.mail},
14336 one would instantiate the Dovecot service like this:
14337
14338 @example
14339 (dovecot-service #:config
14340 (dovecot-configuration
14341 (mail-location "maildir:~/.mail")))
14342 @end example
14343
14344 The available configuration parameters follow. Each parameter
14345 definition is preceded by its type; for example, @samp{string-list foo}
14346 indicates that the @code{foo} parameter should be specified as a list of
14347 strings. There is also a way to specify the configuration as a string,
14348 if you have an old @code{dovecot.conf} file that you want to port over
14349 from some other system; see the end for more details.
14350
14351 @c The following documentation was initially generated by
14352 @c (generate-documentation) in (gnu services mail). Manually maintained
14353 @c documentation is better, so we shouldn't hesitate to edit below as
14354 @c needed. However if the change you want to make to this documentation
14355 @c can be done in an automated way, it's probably easier to change
14356 @c (generate-documentation) than to make it below and have to deal with
14357 @c the churn as dovecot updates.
14358
14359 Available @code{dovecot-configuration} fields are:
14360
14361 @deftypevr {@code{dovecot-configuration} parameter} package dovecot
14362 The dovecot package.
14363 @end deftypevr
14364
14365 @deftypevr {@code{dovecot-configuration} parameter} comma-separated-string-list listen
14366 A list of IPs or hosts where to listen for connections. @samp{*}
14367 listens on all IPv4 interfaces, @samp{::} listens on all IPv6
14368 interfaces. If you want to specify non-default ports or anything more
14369 complex, customize the address and port fields of the
14370 @samp{inet-listener} of the specific services you are interested in.
14371 @end deftypevr
14372
14373 @deftypevr {@code{dovecot-configuration} parameter} protocol-configuration-list protocols
14374 List of protocols we want to serve. Available protocols include
14375 @samp{imap}, @samp{pop3}, and @samp{lmtp}.
14376
14377 Available @code{protocol-configuration} fields are:
14378
14379 @deftypevr {@code{protocol-configuration} parameter} string name
14380 The name of the protocol.
14381 @end deftypevr
14382
14383 @deftypevr {@code{protocol-configuration} parameter} string auth-socket-path
14384 UNIX socket path to the master authentication server to find users.
14385 This is used by imap (for shared users) and lda.
14386 It defaults to @samp{"/var/run/dovecot/auth-userdb"}.
14387 @end deftypevr
14388
14389 @deftypevr {@code{protocol-configuration} parameter} space-separated-string-list mail-plugins
14390 Space separated list of plugins to load.
14391 @end deftypevr
14392
14393 @deftypevr {@code{protocol-configuration} parameter} non-negative-integer mail-max-userip-connections
14394 Maximum number of IMAP connections allowed for a user from each IP
14395 address. NOTE: The username is compared case-sensitively.
14396 Defaults to @samp{10}.
14397 @end deftypevr
14398
14399 @end deftypevr
14400
14401 @deftypevr {@code{dovecot-configuration} parameter} service-configuration-list services
14402 List of services to enable. Available services include @samp{imap},
14403 @samp{imap-login}, @samp{pop3}, @samp{pop3-login}, @samp{auth}, and
14404 @samp{lmtp}.
14405
14406 Available @code{service-configuration} fields are:
14407
14408 @deftypevr {@code{service-configuration} parameter} string kind
14409 The service kind. Valid values include @code{director},
14410 @code{imap-login}, @code{pop3-login}, @code{lmtp}, @code{imap},
14411 @code{pop3}, @code{auth}, @code{auth-worker}, @code{dict},
14412 @code{tcpwrap}, @code{quota-warning}, or anything else.
14413 @end deftypevr
14414
14415 @deftypevr {@code{service-configuration} parameter} listener-configuration-list listeners
14416 Listeners for the service. A listener is either a
14417 @code{unix-listener-configuration}, a @code{fifo-listener-configuration}, or
14418 an @code{inet-listener-configuration}.
14419 Defaults to @samp{()}.
14420
14421 Available @code{unix-listener-configuration} fields are:
14422
14423 @deftypevr {@code{unix-listener-configuration} parameter} string path
14424 Path to the file, relative to @code{base-dir} field. This is also used as
14425 the section name.
14426 @end deftypevr
14427
14428 @deftypevr {@code{unix-listener-configuration} parameter} string mode
14429 The access mode for the socket.
14430 Defaults to @samp{"0600"}.
14431 @end deftypevr
14432
14433 @deftypevr {@code{unix-listener-configuration} parameter} string user
14434 The user to own the socket.
14435 Defaults to @samp{""}.
14436 @end deftypevr
14437
14438 @deftypevr {@code{unix-listener-configuration} parameter} string group
14439 The group to own the socket.
14440 Defaults to @samp{""}.
14441 @end deftypevr
14442
14443
14444 Available @code{fifo-listener-configuration} fields are:
14445
14446 @deftypevr {@code{fifo-listener-configuration} parameter} string path
14447 Path to the file, relative to @code{base-dir} field. This is also used as
14448 the section name.
14449 @end deftypevr
14450
14451 @deftypevr {@code{fifo-listener-configuration} parameter} string mode
14452 The access mode for the socket.
14453 Defaults to @samp{"0600"}.
14454 @end deftypevr
14455
14456 @deftypevr {@code{fifo-listener-configuration} parameter} string user
14457 The user to own the socket.
14458 Defaults to @samp{""}.
14459 @end deftypevr
14460
14461 @deftypevr {@code{fifo-listener-configuration} parameter} string group
14462 The group to own the socket.
14463 Defaults to @samp{""}.
14464 @end deftypevr
14465
14466
14467 Available @code{inet-listener-configuration} fields are:
14468
14469 @deftypevr {@code{inet-listener-configuration} parameter} string protocol
14470 The protocol to listen for.
14471 @end deftypevr
14472
14473 @deftypevr {@code{inet-listener-configuration} parameter} string address
14474 The address on which to listen, or empty for all addresses.
14475 Defaults to @samp{""}.
14476 @end deftypevr
14477
14478 @deftypevr {@code{inet-listener-configuration} parameter} non-negative-integer port
14479 The port on which to listen.
14480 @end deftypevr
14481
14482 @deftypevr {@code{inet-listener-configuration} parameter} boolean ssl?
14483 Whether to use SSL for this service; @samp{yes}, @samp{no}, or
14484 @samp{required}.
14485 Defaults to @samp{#t}.
14486 @end deftypevr
14487
14488 @end deftypevr
14489
14490 @deftypevr {@code{service-configuration} parameter} non-negative-integer client-limit
14491 Maximum number of simultaneous client connections per process. Once
14492 this number of connections is received, the next incoming connection
14493 will prompt Dovecot to spawn another process. If set to 0,
14494 @code{default-client-limit} is used instead.
14495
14496 Defaults to @samp{0}.
14497
14498 @end deftypevr
14499
14500 @deftypevr {@code{service-configuration} parameter} non-negative-integer service-count
14501 Number of connections to handle before starting a new process.
14502 Typically the only useful values are 0 (unlimited) or 1. 1 is more
14503 secure, but 0 is faster. <doc/wiki/LoginProcess.txt>.
14504 Defaults to @samp{1}.
14505
14506 @end deftypevr
14507
14508 @deftypevr {@code{service-configuration} parameter} non-negative-integer process-limit
14509 Maximum number of processes that can exist for this service. If set to
14510 0, @code{default-process-limit} is used instead.
14511
14512 Defaults to @samp{0}.
14513
14514 @end deftypevr
14515
14516 @deftypevr {@code{service-configuration} parameter} non-negative-integer process-min-avail
14517 Number of processes to always keep waiting for more connections.
14518 Defaults to @samp{0}.
14519 @end deftypevr
14520
14521 @deftypevr {@code{service-configuration} parameter} non-negative-integer vsz-limit
14522 If you set @samp{service-count 0}, you probably need to grow
14523 this.
14524 Defaults to @samp{256000000}.
14525 @end deftypevr
14526
14527 @end deftypevr
14528
14529 @deftypevr {@code{dovecot-configuration} parameter} dict-configuration dict
14530 Dict configuration, as created by the @code{dict-configuration}
14531 constructor.
14532
14533 Available @code{dict-configuration} fields are:
14534
14535 @deftypevr {@code{dict-configuration} parameter} free-form-fields entries
14536 A list of key-value pairs that this dict should hold.
14537 Defaults to @samp{()}.
14538 @end deftypevr
14539
14540 @end deftypevr
14541
14542 @deftypevr {@code{dovecot-configuration} parameter} passdb-configuration-list passdbs
14543 A list of passdb configurations, each one created by the
14544 @code{passdb-configuration} constructor.
14545
14546 Available @code{passdb-configuration} fields are:
14547
14548 @deftypevr {@code{passdb-configuration} parameter} string driver
14549 The driver that the passdb should use. Valid values include
14550 @samp{pam}, @samp{passwd}, @samp{shadow}, @samp{bsdauth}, and
14551 @samp{static}.
14552 Defaults to @samp{"pam"}.
14553 @end deftypevr
14554
14555 @deftypevr {@code{passdb-configuration} parameter} space-separated-string-list args
14556 Space separated list of arguments to the passdb driver.
14557 Defaults to @samp{""}.
14558 @end deftypevr
14559
14560 @end deftypevr
14561
14562 @deftypevr {@code{dovecot-configuration} parameter} userdb-configuration-list userdbs
14563 List of userdb configurations, each one created by the
14564 @code{userdb-configuration} constructor.
14565
14566 Available @code{userdb-configuration} fields are:
14567
14568 @deftypevr {@code{userdb-configuration} parameter} string driver
14569 The driver that the userdb should use. Valid values include
14570 @samp{passwd} and @samp{static}.
14571 Defaults to @samp{"passwd"}.
14572 @end deftypevr
14573
14574 @deftypevr {@code{userdb-configuration} parameter} space-separated-string-list args
14575 Space separated list of arguments to the userdb driver.
14576 Defaults to @samp{""}.
14577 @end deftypevr
14578
14579 @deftypevr {@code{userdb-configuration} parameter} free-form-args override-fields
14580 Override fields from passwd.
14581 Defaults to @samp{()}.
14582 @end deftypevr
14583
14584 @end deftypevr
14585
14586 @deftypevr {@code{dovecot-configuration} parameter} plugin-configuration plugin-configuration
14587 Plug-in configuration, created by the @code{plugin-configuration}
14588 constructor.
14589 @end deftypevr
14590
14591 @deftypevr {@code{dovecot-configuration} parameter} list-of-namespace-configuration namespaces
14592 List of namespaces. Each item in the list is created by the
14593 @code{namespace-configuration} constructor.
14594
14595 Available @code{namespace-configuration} fields are:
14596
14597 @deftypevr {@code{namespace-configuration} parameter} string name
14598 Name for this namespace.
14599 @end deftypevr
14600
14601 @deftypevr {@code{namespace-configuration} parameter} string type
14602 Namespace type: @samp{private}, @samp{shared} or @samp{public}.
14603 Defaults to @samp{"private"}.
14604 @end deftypevr
14605
14606 @deftypevr {@code{namespace-configuration} parameter} string separator
14607 Hierarchy separator to use. You should use the same separator for
14608 all namespaces or some clients get confused. @samp{/} is usually a good
14609 one. The default however depends on the underlying mail storage
14610 format.
14611 Defaults to @samp{""}.
14612 @end deftypevr
14613
14614 @deftypevr {@code{namespace-configuration} parameter} string prefix
14615 Prefix required to access this namespace. This needs to be
14616 different for all namespaces. For example @samp{Public/}.
14617 Defaults to @samp{""}.
14618 @end deftypevr
14619
14620 @deftypevr {@code{namespace-configuration} parameter} string location
14621 Physical location of the mailbox. This is in the same format as
14622 mail_location, which is also the default for it.
14623 Defaults to @samp{""}.
14624 @end deftypevr
14625
14626 @deftypevr {@code{namespace-configuration} parameter} boolean inbox?
14627 There can be only one INBOX, and this setting defines which
14628 namespace has it.
14629 Defaults to @samp{#f}.
14630 @end deftypevr
14631
14632 @deftypevr {@code{namespace-configuration} parameter} boolean hidden?
14633 If namespace is hidden, it's not advertised to clients via NAMESPACE
14634 extension. You'll most likely also want to set @samp{list? #f}. This is mostly
14635 useful when converting from another server with different namespaces
14636 which you want to deprecate but still keep working. For example you can
14637 create hidden namespaces with prefixes @samp{~/mail/}, @samp{~%u/mail/}
14638 and @samp{mail/}.
14639 Defaults to @samp{#f}.
14640 @end deftypevr
14641
14642 @deftypevr {@code{namespace-configuration} parameter} boolean list?
14643 Show the mailboxes under this namespace with the LIST command. This
14644 makes the namespace visible for clients that do not support the NAMESPACE
14645 extension. The special @code{children} value lists child mailboxes, but
14646 hides the namespace prefix.
14647 Defaults to @samp{#t}.
14648 @end deftypevr
14649
14650 @deftypevr {@code{namespace-configuration} parameter} boolean subscriptions?
14651 Namespace handles its own subscriptions. If set to @code{#f}, the
14652 parent namespace handles them. The empty prefix should always have this
14653 as @code{#t}).
14654 Defaults to @samp{#t}.
14655 @end deftypevr
14656
14657 @deftypevr {@code{namespace-configuration} parameter} mailbox-configuration-list mailboxes
14658 List of predefined mailboxes in this namespace.
14659 Defaults to @samp{()}.
14660
14661 Available @code{mailbox-configuration} fields are:
14662
14663 @deftypevr {@code{mailbox-configuration} parameter} string name
14664 Name for this mailbox.
14665 @end deftypevr
14666
14667 @deftypevr {@code{mailbox-configuration} parameter} string auto
14668 @samp{create} will automatically create this mailbox.
14669 @samp{subscribe} will both create and subscribe to the mailbox.
14670 Defaults to @samp{"no"}.
14671 @end deftypevr
14672
14673 @deftypevr {@code{mailbox-configuration} parameter} space-separated-string-list special-use
14674 List of IMAP @code{SPECIAL-USE} attributes as specified by RFC 6154.
14675 Valid values are @code{\All}, @code{\Archive}, @code{\Drafts},
14676 @code{\Flagged}, @code{\Junk}, @code{\Sent}, and @code{\Trash}.
14677 Defaults to @samp{()}.
14678 @end deftypevr
14679
14680 @end deftypevr
14681
14682 @end deftypevr
14683
14684 @deftypevr {@code{dovecot-configuration} parameter} file-name base-dir
14685 Base directory where to store runtime data.
14686 Defaults to @samp{"/var/run/dovecot/"}.
14687 @end deftypevr
14688
14689 @deftypevr {@code{dovecot-configuration} parameter} string login-greeting
14690 Greeting message for clients.
14691 Defaults to @samp{"Dovecot ready."}.
14692 @end deftypevr
14693
14694 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-trusted-networks
14695 List of trusted network ranges. Connections from these IPs are
14696 allowed to override their IP addresses and ports (for logging and for
14697 authentication checks). @samp{disable-plaintext-auth} is also ignored
14698 for these networks. Typically you would specify your IMAP proxy servers
14699 here.
14700 Defaults to @samp{()}.
14701 @end deftypevr
14702
14703 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-access-sockets
14704 List of login access check sockets (e.g. tcpwrap).
14705 Defaults to @samp{()}.
14706 @end deftypevr
14707
14708 @deftypevr {@code{dovecot-configuration} parameter} boolean verbose-proctitle?
14709 Show more verbose process titles (in ps). Currently shows user name
14710 and IP address. Useful for seeing who is actually using the IMAP
14711 processes (e.g. shared mailboxes or if the same uid is used for multiple
14712 accounts).
14713 Defaults to @samp{#f}.
14714 @end deftypevr
14715
14716 @deftypevr {@code{dovecot-configuration} parameter} boolean shutdown-clients?
14717 Should all processes be killed when Dovecot master process shuts down.
14718 Setting this to @code{#f} means that Dovecot can be upgraded without
14719 forcing existing client connections to close (although that could also
14720 be a problem if the upgrade is e.g. due to a security fix).
14721 Defaults to @samp{#t}.
14722 @end deftypevr
14723
14724 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer doveadm-worker-count
14725 If non-zero, run mail commands via this many connections to doveadm
14726 server, instead of running them directly in the same process.
14727 Defaults to @samp{0}.
14728 @end deftypevr
14729
14730 @deftypevr {@code{dovecot-configuration} parameter} string doveadm-socket-path
14731 UNIX socket or host:port used for connecting to doveadm server.
14732 Defaults to @samp{"doveadm-server"}.
14733 @end deftypevr
14734
14735 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list import-environment
14736 List of environment variables that are preserved on Dovecot startup
14737 and passed down to all of its child processes. You can also give
14738 key=value pairs to always set specific settings.
14739 @end deftypevr
14740
14741 @deftypevr {@code{dovecot-configuration} parameter} boolean disable-plaintext-auth?
14742 Disable LOGIN command and all other plaintext authentications unless
14743 SSL/TLS is used (LOGINDISABLED capability). Note that if the remote IP
14744 matches the local IP (i.e. you're connecting from the same computer),
14745 the connection is considered secure and plaintext authentication is
14746 allowed. See also ssl=required setting.
14747 Defaults to @samp{#t}.
14748 @end deftypevr
14749
14750 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer auth-cache-size
14751 Authentication cache size (e.g. @samp{#e10e6}). 0 means it's disabled.
14752 Note that bsdauth, PAM and vpopmail require @samp{cache-key} to be set
14753 for caching to be used.
14754 Defaults to @samp{0}.
14755 @end deftypevr
14756
14757 @deftypevr {@code{dovecot-configuration} parameter} string auth-cache-ttl
14758 Time to live for cached data. After TTL expires the cached record
14759 is no longer used, *except* if the main database lookup returns internal
14760 failure. We also try to handle password changes automatically: If
14761 user's previous authentication was successful, but this one wasn't, the
14762 cache isn't used. For now this works only with plaintext
14763 authentication.
14764 Defaults to @samp{"1 hour"}.
14765 @end deftypevr
14766
14767 @deftypevr {@code{dovecot-configuration} parameter} string auth-cache-negative-ttl
14768 TTL for negative hits (user not found, password mismatch).
14769 0 disables caching them completely.
14770 Defaults to @samp{"1 hour"}.
14771 @end deftypevr
14772
14773 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list auth-realms
14774 List of realms for SASL authentication mechanisms that need them.
14775 You can leave it empty if you don't want to support multiple realms.
14776 Many clients simply use the first one listed here, so keep the default
14777 realm first.
14778 Defaults to @samp{()}.
14779 @end deftypevr
14780
14781 @deftypevr {@code{dovecot-configuration} parameter} string auth-default-realm
14782 Default realm/domain to use if none was specified. This is used for
14783 both SASL realms and appending @@domain to username in plaintext
14784 logins.
14785 Defaults to @samp{""}.
14786 @end deftypevr
14787
14788 @deftypevr {@code{dovecot-configuration} parameter} string auth-username-chars
14789 List of allowed characters in username. If the user-given username
14790 contains a character not listed in here, the login automatically fails.
14791 This is just an extra check to make sure user can't exploit any
14792 potential quote escaping vulnerabilities with SQL/LDAP databases. If
14793 you want to allow all characters, set this value to empty.
14794 Defaults to @samp{"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@@"}.
14795 @end deftypevr
14796
14797 @deftypevr {@code{dovecot-configuration} parameter} string auth-username-translation
14798 Username character translations before it's looked up from
14799 databases. The value contains series of from -> to characters. For
14800 example @samp{#@@/@@} means that @samp{#} and @samp{/} characters are
14801 translated to @samp{@@}.
14802 Defaults to @samp{""}.
14803 @end deftypevr
14804
14805 @deftypevr {@code{dovecot-configuration} parameter} string auth-username-format
14806 Username formatting before it's looked up from databases. You can
14807 use the standard variables here, e.g. %Lu would lowercase the username,
14808 %n would drop away the domain if it was given, or @samp{%n-AT-%d} would
14809 change the @samp{@@} into @samp{-AT-}. This translation is done after
14810 @samp{auth-username-translation} changes.
14811 Defaults to @samp{"%Lu"}.
14812 @end deftypevr
14813
14814 @deftypevr {@code{dovecot-configuration} parameter} string auth-master-user-separator
14815 If you want to allow master users to log in by specifying the master
14816 username within the normal username string (i.e. not using SASL
14817 mechanism's support for it), you can specify the separator character
14818 here. The format is then <username><separator><master username>.
14819 UW-IMAP uses @samp{*} as the separator, so that could be a good
14820 choice.
14821 Defaults to @samp{""}.
14822 @end deftypevr
14823
14824 @deftypevr {@code{dovecot-configuration} parameter} string auth-anonymous-username
14825 Username to use for users logging in with ANONYMOUS SASL
14826 mechanism.
14827 Defaults to @samp{"anonymous"}.
14828 @end deftypevr
14829
14830 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer auth-worker-max-count
14831 Maximum number of dovecot-auth worker processes. They're used to
14832 execute blocking passdb and userdb queries (e.g. MySQL and PAM).
14833 They're automatically created and destroyed as needed.
14834 Defaults to @samp{30}.
14835 @end deftypevr
14836
14837 @deftypevr {@code{dovecot-configuration} parameter} string auth-gssapi-hostname
14838 Host name to use in GSSAPI principal names. The default is to use
14839 the name returned by gethostname(). Use @samp{$ALL} (with quotes) to
14840 allow all keytab entries.
14841 Defaults to @samp{""}.
14842 @end deftypevr
14843
14844 @deftypevr {@code{dovecot-configuration} parameter} string auth-krb5-keytab
14845 Kerberos keytab to use for the GSSAPI mechanism. Will use the
14846 system default (usually @file{/etc/krb5.keytab}) if not specified. You may
14847 need to change the auth service to run as root to be able to read this
14848 file.
14849 Defaults to @samp{""}.
14850 @end deftypevr
14851
14852 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-use-winbind?
14853 Do NTLM and GSS-SPNEGO authentication using Samba's winbind daemon
14854 and @samp{ntlm-auth} helper.
14855 <doc/wiki/Authentication/Mechanisms/Winbind.txt>.
14856 Defaults to @samp{#f}.
14857 @end deftypevr
14858
14859 @deftypevr {@code{dovecot-configuration} parameter} file-name auth-winbind-helper-path
14860 Path for Samba's @samp{ntlm-auth} helper binary.
14861 Defaults to @samp{"/usr/bin/ntlm_auth"}.
14862 @end deftypevr
14863
14864 @deftypevr {@code{dovecot-configuration} parameter} string auth-failure-delay
14865 Time to delay before replying to failed authentications.
14866 Defaults to @samp{"2 secs"}.
14867 @end deftypevr
14868
14869 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-ssl-require-client-cert?
14870 Require a valid SSL client certificate or the authentication
14871 fails.
14872 Defaults to @samp{#f}.
14873 @end deftypevr
14874
14875 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-ssl-username-from-cert?
14876 Take the username from client's SSL certificate, using
14877 @code{X509_NAME_get_text_by_NID()} which returns the subject's DN's
14878 CommonName.
14879 Defaults to @samp{#f}.
14880 @end deftypevr
14881
14882 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list auth-mechanisms
14883 List of wanted authentication mechanisms. Supported mechanisms are:
14884 @samp{plain}, @samp{login}, @samp{digest-md5}, @samp{cram-md5},
14885 @samp{ntlm}, @samp{rpa}, @samp{apop}, @samp{anonymous}, @samp{gssapi},
14886 @samp{otp}, @samp{skey}, and @samp{gss-spnego}. NOTE: See also
14887 @samp{disable-plaintext-auth} setting.
14888 @end deftypevr
14889
14890 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list director-servers
14891 List of IPs or hostnames to all director servers, including ourself.
14892 Ports can be specified as ip:port. The default port is the same as what
14893 director service's @samp{inet-listener} is using.
14894 Defaults to @samp{()}.
14895 @end deftypevr
14896
14897 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list director-mail-servers
14898 List of IPs or hostnames to all backend mail servers. Ranges are
14899 allowed too, like 10.0.0.10-10.0.0.30.
14900 Defaults to @samp{()}.
14901 @end deftypevr
14902
14903 @deftypevr {@code{dovecot-configuration} parameter} string director-user-expire
14904 How long to redirect users to a specific server after it no longer
14905 has any connections.
14906 Defaults to @samp{"15 min"}.
14907 @end deftypevr
14908
14909 @deftypevr {@code{dovecot-configuration} parameter} string director-username-hash
14910 How the username is translated before being hashed. Useful values
14911 include %Ln if user can log in with or without @@domain, %Ld if mailboxes
14912 are shared within domain.
14913 Defaults to @samp{"%Lu"}.
14914 @end deftypevr
14915
14916 @deftypevr {@code{dovecot-configuration} parameter} string log-path
14917 Log file to use for error messages. @samp{syslog} logs to syslog,
14918 @samp{/dev/stderr} logs to stderr.
14919 Defaults to @samp{"syslog"}.
14920 @end deftypevr
14921
14922 @deftypevr {@code{dovecot-configuration} parameter} string info-log-path
14923 Log file to use for informational messages. Defaults to
14924 @samp{log-path}.
14925 Defaults to @samp{""}.
14926 @end deftypevr
14927
14928 @deftypevr {@code{dovecot-configuration} parameter} string debug-log-path
14929 Log file to use for debug messages. Defaults to
14930 @samp{info-log-path}.
14931 Defaults to @samp{""}.
14932 @end deftypevr
14933
14934 @deftypevr {@code{dovecot-configuration} parameter} string syslog-facility
14935 Syslog facility to use if you're logging to syslog. Usually if you
14936 don't want to use @samp{mail}, you'll use local0..local7. Also other
14937 standard facilities are supported.
14938 Defaults to @samp{"mail"}.
14939 @end deftypevr
14940
14941 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-verbose?
14942 Log unsuccessful authentication attempts and the reasons why they
14943 failed.
14944 Defaults to @samp{#f}.
14945 @end deftypevr
14946
14947 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-verbose-passwords?
14948 In case of password mismatches, log the attempted password. Valid
14949 values are no, plain and sha1. sha1 can be useful for detecting brute
14950 force password attempts vs. user simply trying the same password over
14951 and over again. You can also truncate the value to n chars by appending
14952 ":n" (e.g. sha1:6).
14953 Defaults to @samp{#f}.
14954 @end deftypevr
14955
14956 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-debug?
14957 Even more verbose logging for debugging purposes. Shows for example
14958 SQL queries.
14959 Defaults to @samp{#f}.
14960 @end deftypevr
14961
14962 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-debug-passwords?
14963 In case of password mismatches, log the passwords and used scheme so
14964 the problem can be debugged. Enabling this also enables
14965 @samp{auth-debug}.
14966 Defaults to @samp{#f}.
14967 @end deftypevr
14968
14969 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-debug?
14970 Enable mail process debugging. This can help you figure out why
14971 Dovecot isn't finding your mails.
14972 Defaults to @samp{#f}.
14973 @end deftypevr
14974
14975 @deftypevr {@code{dovecot-configuration} parameter} boolean verbose-ssl?
14976 Show protocol level SSL errors.
14977 Defaults to @samp{#f}.
14978 @end deftypevr
14979
14980 @deftypevr {@code{dovecot-configuration} parameter} string log-timestamp
14981 Prefix for each line written to log file. % codes are in
14982 strftime(3) format.
14983 Defaults to @samp{"\"%b %d %H:%M:%S \""}.
14984 @end deftypevr
14985
14986 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-log-format-elements
14987 List of elements we want to log. The elements which have a
14988 non-empty variable value are joined together to form a comma-separated
14989 string.
14990 @end deftypevr
14991
14992 @deftypevr {@code{dovecot-configuration} parameter} string login-log-format
14993 Login log format. %s contains @samp{login-log-format-elements}
14994 string, %$ contains the data we want to log.
14995 Defaults to @samp{"%$: %s"}.
14996 @end deftypevr
14997
14998 @deftypevr {@code{dovecot-configuration} parameter} string mail-log-prefix
14999 Log prefix for mail processes. See doc/wiki/Variables.txt for list
15000 of possible variables you can use.
15001 Defaults to @samp{"\"%s(%u)<%@{pid@}><%@{session@}>: \""}.
15002 @end deftypevr
15003
15004 @deftypevr {@code{dovecot-configuration} parameter} string deliver-log-format
15005 Format to use for logging mail deliveries. You can use variables:
15006 @table @code
15007 @item %$
15008 Delivery status message (e.g. @samp{saved to INBOX})
15009 @item %m
15010 Message-ID
15011 @item %s
15012 Subject
15013 @item %f
15014 From address
15015 @item %p
15016 Physical size
15017 @item %w
15018 Virtual size.
15019 @end table
15020 Defaults to @samp{"msgid=%m: %$"}.
15021 @end deftypevr
15022
15023 @deftypevr {@code{dovecot-configuration} parameter} string mail-location
15024 Location for users' mailboxes. The default is empty, which means
15025 that Dovecot tries to find the mailboxes automatically. This won't work
15026 if the user doesn't yet have any mail, so you should explicitly tell
15027 Dovecot the full location.
15028
15029 If you're using mbox, giving a path to the INBOX
15030 file (e.g. /var/mail/%u) isn't enough. You'll also need to tell Dovecot
15031 where the other mailboxes are kept. This is called the "root mail
15032 directory", and it must be the first path given in the
15033 @samp{mail-location} setting.
15034
15035 There are a few special variables you can use, eg.:
15036
15037 @table @samp
15038 @item %u
15039 username
15040 @item %n
15041 user part in user@@domain, same as %u if there's no domain
15042 @item %d
15043 domain part in user@@domain, empty if there's no domain
15044 @item %h
15045 home director
15046 @end table
15047
15048 See doc/wiki/Variables.txt for full list. Some examples:
15049 @table @samp
15050 @item maildir:~/Maildir
15051 @item mbox:~/mail:INBOX=/var/mail/%u
15052 @item mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%
15053 @end table
15054 Defaults to @samp{""}.
15055 @end deftypevr
15056
15057 @deftypevr {@code{dovecot-configuration} parameter} string mail-uid
15058 System user and group used to access mails. If you use multiple,
15059 userdb can override these by returning uid or gid fields. You can use
15060 either numbers or names. <doc/wiki/UserIds.txt>.
15061 Defaults to @samp{""}.
15062 @end deftypevr
15063
15064 @deftypevr {@code{dovecot-configuration} parameter} string mail-gid
15065
15066 Defaults to @samp{""}.
15067 @end deftypevr
15068
15069 @deftypevr {@code{dovecot-configuration} parameter} string mail-privileged-group
15070 Group to enable temporarily for privileged operations. Currently
15071 this is used only with INBOX when either its initial creation or
15072 dotlocking fails. Typically this is set to "mail" to give access to
15073 /var/mail.
15074 Defaults to @samp{""}.
15075 @end deftypevr
15076
15077 @deftypevr {@code{dovecot-configuration} parameter} string mail-access-groups
15078 Grant access to these supplementary groups for mail processes.
15079 Typically these are used to set up access to shared mailboxes. Note
15080 that it may be dangerous to set these if users can create
15081 symlinks (e.g. if "mail" group is set here, ln -s /var/mail ~/mail/var
15082 could allow a user to delete others' mailboxes, or ln -s
15083 /secret/shared/box ~/mail/mybox would allow reading it).
15084 Defaults to @samp{""}.
15085 @end deftypevr
15086
15087 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-full-filesystem-access?
15088 Allow full file system access to clients. There's no access checks
15089 other than what the operating system does for the active UID/GID. It
15090 works with both maildir and mboxes, allowing you to prefix mailboxes
15091 names with e.g. /path/ or ~user/.
15092 Defaults to @samp{#f}.
15093 @end deftypevr
15094
15095 @deftypevr {@code{dovecot-configuration} parameter} boolean mmap-disable?
15096 Don't use mmap() at all. This is required if you store indexes to
15097 shared file systems (NFS or clustered file system).
15098 Defaults to @samp{#f}.
15099 @end deftypevr
15100
15101 @deftypevr {@code{dovecot-configuration} parameter} boolean dotlock-use-excl?
15102 Rely on @samp{O_EXCL} to work when creating dotlock files. NFS
15103 supports @samp{O_EXCL} since version 3, so this should be safe to use
15104 nowadays by default.
15105 Defaults to @samp{#t}.
15106 @end deftypevr
15107
15108 @deftypevr {@code{dovecot-configuration} parameter} string mail-fsync
15109 When to use fsync() or fdatasync() calls:
15110 @table @code
15111 @item optimized
15112 Whenever necessary to avoid losing important data
15113 @item always
15114 Useful with e.g. NFS when write()s are delayed
15115 @item never
15116 Never use it (best performance, but crashes can lose data).
15117 @end table
15118 Defaults to @samp{"optimized"}.
15119 @end deftypevr
15120
15121 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-nfs-storage?
15122 Mail storage exists in NFS. Set this to yes to make Dovecot flush
15123 NFS caches whenever needed. If you're using only a single mail server
15124 this isn't needed.
15125 Defaults to @samp{#f}.
15126 @end deftypevr
15127
15128 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-nfs-index?
15129 Mail index files also exist in NFS. Setting this to yes requires
15130 @samp{mmap-disable? #t} and @samp{fsync-disable? #f}.
15131 Defaults to @samp{#f}.
15132 @end deftypevr
15133
15134 @deftypevr {@code{dovecot-configuration} parameter} string lock-method
15135 Locking method for index files. Alternatives are fcntl, flock and
15136 dotlock. Dotlocking uses some tricks which may create more disk I/O
15137 than other locking methods. NFS users: flock doesn't work, remember to
15138 change @samp{mmap-disable}.
15139 Defaults to @samp{"fcntl"}.
15140 @end deftypevr
15141
15142 @deftypevr {@code{dovecot-configuration} parameter} file-name mail-temp-dir
15143 Directory in which LDA/LMTP temporarily stores incoming mails >128
15144 kB.
15145 Defaults to @samp{"/tmp"}.
15146 @end deftypevr
15147
15148 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer first-valid-uid
15149 Valid UID range for users. This is mostly to make sure that users can't
15150 log in as daemons or other system users. Note that denying root logins is
15151 hardcoded to dovecot binary and can't be done even if @samp{first-valid-uid}
15152 is set to 0.
15153 Defaults to @samp{500}.
15154 @end deftypevr
15155
15156 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer last-valid-uid
15157
15158 Defaults to @samp{0}.
15159 @end deftypevr
15160
15161 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer first-valid-gid
15162 Valid GID range for users. Users having non-valid GID as primary group ID
15163 aren't allowed to log in. If user belongs to supplementary groups with
15164 non-valid GIDs, those groups are not set.
15165 Defaults to @samp{1}.
15166 @end deftypevr
15167
15168 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer last-valid-gid
15169
15170 Defaults to @samp{0}.
15171 @end deftypevr
15172
15173 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-max-keyword-length
15174 Maximum allowed length for mail keyword name. It's only forced when
15175 trying to create new keywords.
15176 Defaults to @samp{50}.
15177 @end deftypevr
15178
15179 @deftypevr {@code{dovecot-configuration} parameter} colon-separated-file-name-list valid-chroot-dirs
15180 List of directories under which chrooting is allowed for mail
15181 processes (i.e. /var/mail will allow chrooting to /var/mail/foo/bar
15182 too). This setting doesn't affect @samp{login-chroot}
15183 @samp{mail-chroot} or auth chroot settings. If this setting is empty,
15184 "/./" in home dirs are ignored. WARNING: Never add directories here
15185 which local users can modify, that may lead to root exploit. Usually
15186 this should be done only if you don't allow shell access for users.
15187 <doc/wiki/Chrooting.txt>.
15188 Defaults to @samp{()}.
15189 @end deftypevr
15190
15191 @deftypevr {@code{dovecot-configuration} parameter} string mail-chroot
15192 Default chroot directory for mail processes. This can be overridden
15193 for specific users in user database by giving /./ in user's home
15194 directory (e.g. /home/./user chroots into /home). Note that usually
15195 there is no real need to do chrooting, Dovecot doesn't allow users to
15196 access files outside their mail directory anyway. If your home
15197 directories are prefixed with the chroot directory, append "/." to
15198 @samp{mail-chroot}. <doc/wiki/Chrooting.txt>.
15199 Defaults to @samp{""}.
15200 @end deftypevr
15201
15202 @deftypevr {@code{dovecot-configuration} parameter} file-name auth-socket-path
15203 UNIX socket path to master authentication server to find users.
15204 This is used by imap (for shared users) and lda.
15205 Defaults to @samp{"/var/run/dovecot/auth-userdb"}.
15206 @end deftypevr
15207
15208 @deftypevr {@code{dovecot-configuration} parameter} file-name mail-plugin-dir
15209 Directory where to look up mail plugins.
15210 Defaults to @samp{"/usr/lib/dovecot"}.
15211 @end deftypevr
15212
15213 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mail-plugins
15214 List of plugins to load for all services. Plugins specific to IMAP,
15215 LDA, etc. are added to this list in their own .conf files.
15216 Defaults to @samp{()}.
15217 @end deftypevr
15218
15219 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-cache-min-mail-count
15220 The minimum number of mails in a mailbox before updates are done to
15221 cache file. This allows optimizing Dovecot's behavior to do less disk
15222 writes at the cost of more disk reads.
15223 Defaults to @samp{0}.
15224 @end deftypevr
15225
15226 @deftypevr {@code{dovecot-configuration} parameter} string mailbox-idle-check-interval
15227 When IDLE command is running, mailbox is checked once in a while to
15228 see if there are any new mails or other changes. This setting defines
15229 the minimum time to wait between those checks. Dovecot can also use
15230 dnotify, inotify and kqueue to find out immediately when changes
15231 occur.
15232 Defaults to @samp{"30 secs"}.
15233 @end deftypevr
15234
15235 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-save-crlf?
15236 Save mails with CR+LF instead of plain LF. This makes sending those
15237 mails take less CPU, especially with sendfile() syscall with Linux and
15238 FreeBSD. But it also creates a bit more disk I/O which may just make it
15239 slower. Also note that if other software reads the mboxes/maildirs,
15240 they may handle the extra CRs wrong and cause problems.
15241 Defaults to @samp{#f}.
15242 @end deftypevr
15243
15244 @deftypevr {@code{dovecot-configuration} parameter} boolean maildir-stat-dirs?
15245 By default LIST command returns all entries in maildir beginning
15246 with a dot. Enabling this option makes Dovecot return only entries
15247 which are directories. This is done by stat()ing each entry, so it
15248 causes more disk I/O.
15249 (For systems setting struct @samp{dirent->d_type} this check is free
15250 and it's done always regardless of this setting).
15251 Defaults to @samp{#f}.
15252 @end deftypevr
15253
15254 @deftypevr {@code{dovecot-configuration} parameter} boolean maildir-copy-with-hardlinks?
15255 When copying a message, do it with hard links whenever possible.
15256 This makes the performance much better, and it's unlikely to have any
15257 side effects.
15258 Defaults to @samp{#t}.
15259 @end deftypevr
15260
15261 @deftypevr {@code{dovecot-configuration} parameter} boolean maildir-very-dirty-syncs?
15262 Assume Dovecot is the only MUA accessing Maildir: Scan cur/
15263 directory only when its mtime changes unexpectedly or when we can't find
15264 the mail otherwise.
15265 Defaults to @samp{#f}.
15266 @end deftypevr
15267
15268 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mbox-read-locks
15269 Which locking methods to use for locking mbox. There are four
15270 available:
15271
15272 @table @code
15273 @item dotlock
15274 Create <mailbox>.lock file. This is the oldest and most NFS-safe
15275 solution. If you want to use /var/mail/ like directory, the users will
15276 need write access to that directory.
15277 @item dotlock-try
15278 Same as dotlock, but if it fails because of permissions or because there
15279 isn't enough disk space, just skip it.
15280 @item fcntl
15281 Use this if possible. Works with NFS too if lockd is used.
15282 @item flock
15283 May not exist in all systems. Doesn't work with NFS.
15284 @item lockf
15285 May not exist in all systems. Doesn't work with NFS.
15286 @end table
15287
15288 You can use multiple locking methods; if you do the order they're declared
15289 in is important to avoid deadlocks if other MTAs/MUAs are using multiple
15290 locking methods as well. Some operating systems don't allow using some of
15291 them simultaneously.
15292 @end deftypevr
15293
15294 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mbox-write-locks
15295
15296 @end deftypevr
15297
15298 @deftypevr {@code{dovecot-configuration} parameter} string mbox-lock-timeout
15299 Maximum time to wait for lock (all of them) before aborting.
15300 Defaults to @samp{"5 mins"}.
15301 @end deftypevr
15302
15303 @deftypevr {@code{dovecot-configuration} parameter} string mbox-dotlock-change-timeout
15304 If dotlock exists but the mailbox isn't modified in any way,
15305 override the lock file after this much time.
15306 Defaults to @samp{"2 mins"}.
15307 @end deftypevr
15308
15309 @deftypevr {@code{dovecot-configuration} parameter} boolean mbox-dirty-syncs?
15310 When mbox changes unexpectedly we have to fully read it to find out
15311 what changed. If the mbox is large this can take a long time. Since
15312 the change is usually just a newly appended mail, it'd be faster to
15313 simply read the new mails. If this setting is enabled, Dovecot does
15314 this but still safely fallbacks to re-reading the whole mbox file
15315 whenever something in mbox isn't how it's expected to be. The only real
15316 downside to this setting is that if some other MUA changes message
15317 flags, Dovecot doesn't notice it immediately. Note that a full sync is
15318 done with SELECT, EXAMINE, EXPUNGE and CHECK commands.
15319 Defaults to @samp{#t}.
15320 @end deftypevr
15321
15322 @deftypevr {@code{dovecot-configuration} parameter} boolean mbox-very-dirty-syncs?
15323 Like @samp{mbox-dirty-syncs}, but don't do full syncs even with SELECT,
15324 EXAMINE, EXPUNGE or CHECK commands. If this is set,
15325 @samp{mbox-dirty-syncs} is ignored.
15326 Defaults to @samp{#f}.
15327 @end deftypevr
15328
15329 @deftypevr {@code{dovecot-configuration} parameter} boolean mbox-lazy-writes?
15330 Delay writing mbox headers until doing a full write sync (EXPUNGE
15331 and CHECK commands and when closing the mailbox). This is especially
15332 useful for POP3 where clients often delete all mails. The downside is
15333 that our changes aren't immediately visible to other MUAs.
15334 Defaults to @samp{#t}.
15335 @end deftypevr
15336
15337 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mbox-min-index-size
15338 If mbox size is smaller than this (e.g. 100k), don't write index
15339 files. If an index file already exists it's still read, just not
15340 updated.
15341 Defaults to @samp{0}.
15342 @end deftypevr
15343
15344 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mdbox-rotate-size
15345 Maximum dbox file size until it's rotated.
15346 Defaults to @samp{10000000}.
15347 @end deftypevr
15348
15349 @deftypevr {@code{dovecot-configuration} parameter} string mdbox-rotate-interval
15350 Maximum dbox file age until it's rotated. Typically in days. Day
15351 begins from midnight, so 1d = today, 2d = yesterday, etc. 0 = check
15352 disabled.
15353 Defaults to @samp{"1d"}.
15354 @end deftypevr
15355
15356 @deftypevr {@code{dovecot-configuration} parameter} boolean mdbox-preallocate-space?
15357 When creating new mdbox files, immediately preallocate their size to
15358 @samp{mdbox-rotate-size}. This setting currently works only in Linux
15359 with some file systems (ext4, xfs).
15360 Defaults to @samp{#f}.
15361 @end deftypevr
15362
15363 @deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-dir
15364 sdbox and mdbox support saving mail attachments to external files,
15365 which also allows single instance storage for them. Other backends
15366 don't support this for now.
15367
15368 WARNING: This feature hasn't been tested much yet. Use at your own risk.
15369
15370 Directory root where to store mail attachments. Disabled, if empty.
15371 Defaults to @samp{""}.
15372 @end deftypevr
15373
15374 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-attachment-min-size
15375 Attachments smaller than this aren't saved externally. It's also
15376 possible to write a plugin to disable saving specific attachments
15377 externally.
15378 Defaults to @samp{128000}.
15379 @end deftypevr
15380
15381 @deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-fs
15382 File system backend to use for saving attachments:
15383 @table @code
15384 @item posix
15385 No SiS done by Dovecot (but this might help FS's own deduplication)
15386 @item sis posix
15387 SiS with immediate byte-by-byte comparison during saving
15388 @item sis-queue posix
15389 SiS with delayed comparison and deduplication.
15390 @end table
15391 Defaults to @samp{"sis posix"}.
15392 @end deftypevr
15393
15394 @deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-hash
15395 Hash format to use in attachment filenames. You can add any text and
15396 variables: @code{%@{md4@}}, @code{%@{md5@}}, @code{%@{sha1@}},
15397 @code{%@{sha256@}}, @code{%@{sha512@}}, @code{%@{size@}}. Variables can be
15398 truncated, e.g. @code{%@{sha256:80@}} returns only first 80 bits.
15399 Defaults to @samp{"%@{sha1@}"}.
15400 @end deftypevr
15401
15402 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-process-limit
15403
15404 Defaults to @samp{100}.
15405 @end deftypevr
15406
15407 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-client-limit
15408
15409 Defaults to @samp{1000}.
15410 @end deftypevr
15411
15412 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-vsz-limit
15413 Default VSZ (virtual memory size) limit for service processes.
15414 This is mainly intended to catch and kill processes that leak memory
15415 before they eat up everything.
15416 Defaults to @samp{256000000}.
15417 @end deftypevr
15418
15419 @deftypevr {@code{dovecot-configuration} parameter} string default-login-user
15420 Login user is internally used by login processes. This is the most
15421 untrusted user in Dovecot system. It shouldn't have access to anything
15422 at all.
15423 Defaults to @samp{"dovenull"}.
15424 @end deftypevr
15425
15426 @deftypevr {@code{dovecot-configuration} parameter} string default-internal-user
15427 Internal user is used by unprivileged processes. It should be
15428 separate from login user, so that login processes can't disturb other
15429 processes.
15430 Defaults to @samp{"dovecot"}.
15431 @end deftypevr
15432
15433 @deftypevr {@code{dovecot-configuration} parameter} string ssl?
15434 SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>.
15435 Defaults to @samp{"required"}.
15436 @end deftypevr
15437
15438 @deftypevr {@code{dovecot-configuration} parameter} string ssl-cert
15439 PEM encoded X.509 SSL/TLS certificate (public key).
15440 Defaults to @samp{"</etc/dovecot/default.pem"}.
15441 @end deftypevr
15442
15443 @deftypevr {@code{dovecot-configuration} parameter} string ssl-key
15444 PEM encoded SSL/TLS private key. The key is opened before
15445 dropping root privileges, so keep the key file unreadable by anyone but
15446 root.
15447 Defaults to @samp{"</etc/dovecot/private/default.pem"}.
15448 @end deftypevr
15449
15450 @deftypevr {@code{dovecot-configuration} parameter} string ssl-key-password
15451 If key file is password protected, give the password here.
15452 Alternatively give it when starting dovecot with -p parameter. Since
15453 this file is often world-readable, you may want to place this setting
15454 instead to a different.
15455 Defaults to @samp{""}.
15456 @end deftypevr
15457
15458 @deftypevr {@code{dovecot-configuration} parameter} string ssl-ca
15459 PEM encoded trusted certificate authority. Set this only if you
15460 intend to use @samp{ssl-verify-client-cert? #t}. The file should
15461 contain the CA certificate(s) followed by the matching
15462 CRL(s). (e.g. @samp{ssl-ca </etc/ssl/certs/ca.pem}).
15463 Defaults to @samp{""}.
15464 @end deftypevr
15465
15466 @deftypevr {@code{dovecot-configuration} parameter} boolean ssl-require-crl?
15467 Require that CRL check succeeds for client certificates.
15468 Defaults to @samp{#t}.
15469 @end deftypevr
15470
15471 @deftypevr {@code{dovecot-configuration} parameter} boolean ssl-verify-client-cert?
15472 Request client to send a certificate. If you also want to require
15473 it, set @samp{auth-ssl-require-client-cert? #t} in auth section.
15474 Defaults to @samp{#f}.
15475 @end deftypevr
15476
15477 @deftypevr {@code{dovecot-configuration} parameter} string ssl-cert-username-field
15478 Which field from certificate to use for username. commonName and
15479 x500UniqueIdentifier are the usual choices. You'll also need to set
15480 @samp{auth-ssl-username-from-cert? #t}.
15481 Defaults to @samp{"commonName"}.
15482 @end deftypevr
15483
15484 @deftypevr {@code{dovecot-configuration} parameter} string ssl-min-protocol
15485 Minimum SSL protocol version to accept.
15486 Defaults to @samp{"TLSv1"}.
15487 @end deftypevr
15488
15489 @deftypevr {@code{dovecot-configuration} parameter} string ssl-cipher-list
15490 SSL ciphers to use.
15491 Defaults to @samp{"ALL:!kRSA:!SRP:!kDHd:!DSS:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!RC4:!ADH:!LOW@@STRENGTH"}.
15492 @end deftypevr
15493
15494 @deftypevr {@code{dovecot-configuration} parameter} string ssl-crypto-device
15495 SSL crypto device to use, for valid values run "openssl engine".
15496 Defaults to @samp{""}.
15497 @end deftypevr
15498
15499 @deftypevr {@code{dovecot-configuration} parameter} string postmaster-address
15500 Address to use when sending rejection mails.
15501 %d expands to recipient domain.
15502 Defaults to @samp{"postmaster@@%d"}.
15503 @end deftypevr
15504
15505 @deftypevr {@code{dovecot-configuration} parameter} string hostname
15506 Hostname to use in various parts of sent mails (e.g. in Message-Id)
15507 and in LMTP replies. Default is the system's real hostname@@domain.
15508 Defaults to @samp{""}.
15509 @end deftypevr
15510
15511 @deftypevr {@code{dovecot-configuration} parameter} boolean quota-full-tempfail?
15512 If user is over quota, return with temporary failure instead of
15513 bouncing the mail.
15514 Defaults to @samp{#f}.
15515 @end deftypevr
15516
15517 @deftypevr {@code{dovecot-configuration} parameter} file-name sendmail-path
15518 Binary to use for sending mails.
15519 Defaults to @samp{"/usr/sbin/sendmail"}.
15520 @end deftypevr
15521
15522 @deftypevr {@code{dovecot-configuration} parameter} string submission-host
15523 If non-empty, send mails via this SMTP host[:port] instead of
15524 sendmail.
15525 Defaults to @samp{""}.
15526 @end deftypevr
15527
15528 @deftypevr {@code{dovecot-configuration} parameter} string rejection-subject
15529 Subject: header to use for rejection mails. You can use the same
15530 variables as for @samp{rejection-reason} below.
15531 Defaults to @samp{"Rejected: %s"}.
15532 @end deftypevr
15533
15534 @deftypevr {@code{dovecot-configuration} parameter} string rejection-reason
15535 Human readable error message for rejection mails. You can use
15536 variables:
15537
15538 @table @code
15539 @item %n
15540 CRLF
15541 @item %r
15542 reason
15543 @item %s
15544 original subject
15545 @item %t
15546 recipient
15547 @end table
15548 Defaults to @samp{"Your message to <%t> was automatically rejected:%n%r"}.
15549 @end deftypevr
15550
15551 @deftypevr {@code{dovecot-configuration} parameter} string recipient-delimiter
15552 Delimiter character between local-part and detail in email
15553 address.
15554 Defaults to @samp{"+"}.
15555 @end deftypevr
15556
15557 @deftypevr {@code{dovecot-configuration} parameter} string lda-original-recipient-header
15558 Header where the original recipient address (SMTP's RCPT TO:
15559 address) is taken from if not available elsewhere. With dovecot-lda -a
15560 parameter overrides this. A commonly used header for this is
15561 X-Original-To.
15562 Defaults to @samp{""}.
15563 @end deftypevr
15564
15565 @deftypevr {@code{dovecot-configuration} parameter} boolean lda-mailbox-autocreate?
15566 Should saving a mail to a nonexistent mailbox automatically create
15567 it?.
15568 Defaults to @samp{#f}.
15569 @end deftypevr
15570
15571 @deftypevr {@code{dovecot-configuration} parameter} boolean lda-mailbox-autosubscribe?
15572 Should automatically created mailboxes be also automatically
15573 subscribed?.
15574 Defaults to @samp{#f}.
15575 @end deftypevr
15576
15577 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer imap-max-line-length
15578 Maximum IMAP command line length. Some clients generate very long
15579 command lines with huge mailboxes, so you may need to raise this if you
15580 get "Too long argument" or "IMAP command line too large" errors
15581 often.
15582 Defaults to @samp{64000}.
15583 @end deftypevr
15584
15585 @deftypevr {@code{dovecot-configuration} parameter} string imap-logout-format
15586 IMAP logout format string:
15587 @table @code
15588 @item %i
15589 total number of bytes read from client
15590 @item %o
15591 total number of bytes sent to client.
15592 @end table
15593 See @file{doc/wiki/Variables.txt} for a list of all the variables you can use.
15594 Defaults to @samp{"in=%i out=%o deleted=%@{deleted@} expunged=%@{expunged@} trashed=%@{trashed@} hdr_count=%@{fetch_hdr_count@} hdr_bytes=%@{fetch_hdr_bytes@} body_count=%@{fetch_body_count@} body_bytes=%@{fetch_body_bytes@}"}.
15595 @end deftypevr
15596
15597 @deftypevr {@code{dovecot-configuration} parameter} string imap-capability
15598 Override the IMAP CAPABILITY response. If the value begins with '+',
15599 add the given capabilities on top of the defaults (e.g. +XFOO XBAR).
15600 Defaults to @samp{""}.
15601 @end deftypevr
15602
15603 @deftypevr {@code{dovecot-configuration} parameter} string imap-idle-notify-interval
15604 How long to wait between "OK Still here" notifications when client
15605 is IDLEing.
15606 Defaults to @samp{"2 mins"}.
15607 @end deftypevr
15608
15609 @deftypevr {@code{dovecot-configuration} parameter} string imap-id-send
15610 ID field names and values to send to clients. Using * as the value
15611 makes Dovecot use the default value. The following fields have default
15612 values currently: name, version, os, os-version, support-url,
15613 support-email.
15614 Defaults to @samp{""}.
15615 @end deftypevr
15616
15617 @deftypevr {@code{dovecot-configuration} parameter} string imap-id-log
15618 ID fields sent by client to log. * means everything.
15619 Defaults to @samp{""}.
15620 @end deftypevr
15621
15622 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list imap-client-workarounds
15623 Workarounds for various client bugs:
15624
15625 @table @code
15626 @item delay-newmail
15627 Send EXISTS/RECENT new mail notifications only when replying to NOOP and
15628 CHECK commands. Some clients ignore them otherwise, for example OSX
15629 Mail (<v2.1). Outlook Express breaks more badly though, without this it
15630 may show user "Message no longer in server" errors. Note that OE6
15631 still breaks even with this workaround if synchronization is set to
15632 "Headers Only".
15633
15634 @item tb-extra-mailbox-sep
15635 Thunderbird gets somehow confused with LAYOUT=fs (mbox and dbox) and
15636 adds extra @samp{/} suffixes to mailbox names. This option causes Dovecot to
15637 ignore the extra @samp{/} instead of treating it as invalid mailbox name.
15638
15639 @item tb-lsub-flags
15640 Show \Noselect flags for LSUB replies with LAYOUT=fs (e.g. mbox).
15641 This makes Thunderbird realize they aren't selectable and show them
15642 greyed out, instead of only later giving "not selectable" popup error.
15643 @end table
15644 Defaults to @samp{()}.
15645 @end deftypevr
15646
15647 @deftypevr {@code{dovecot-configuration} parameter} string imap-urlauth-host
15648 Host allowed in URLAUTH URLs sent by client. "*" allows all.
15649 Defaults to @samp{""}.
15650 @end deftypevr
15651
15652
15653 Whew! Lots of configuration options. The nice thing about it though is
15654 that GuixSD has a complete interface to Dovecot's configuration
15655 language. This allows not only a nice way to declare configurations,
15656 but also offers reflective capabilities as well: users can write code to
15657 inspect and transform configurations from within Scheme.
15658
15659 However, it could be that you just want to get a @code{dovecot.conf} up
15660 and running. In that case, you can pass an
15661 @code{opaque-dovecot-configuration} as the @code{#:config} parameter to
15662 @code{dovecot-service}. As its name indicates, an opaque configuration
15663 does not have easy reflective capabilities.
15664
15665 Available @code{opaque-dovecot-configuration} fields are:
15666
15667 @deftypevr {@code{opaque-dovecot-configuration} parameter} package dovecot
15668 The dovecot package.
15669 @end deftypevr
15670
15671 @deftypevr {@code{opaque-dovecot-configuration} parameter} string string
15672 The contents of the @code{dovecot.conf}, as a string.
15673 @end deftypevr
15674
15675 For example, if your @code{dovecot.conf} is just the empty string, you
15676 could instantiate a dovecot service like this:
15677
15678 @example
15679 (dovecot-service #:config
15680 (opaque-dovecot-configuration
15681 (string "")))
15682 @end example
15683
15684 @subsubheading OpenSMTPD Service
15685
15686 @deffn {Scheme Variable} opensmtpd-service-type
15687 This is the type of the @uref{https://www.opensmtpd.org, OpenSMTPD}
15688 service, whose value should be an @code{opensmtpd-configuration} object
15689 as in this example:
15690
15691 @example
15692 (service opensmtpd-service-type
15693 (opensmtpd-configuration
15694 (config-file (local-file "./my-smtpd.conf"))))
15695 @end example
15696 @end deffn
15697
15698 @deftp {Data Type} opensmtpd-configuration
15699 Data type representing the configuration of opensmtpd.
15700
15701 @table @asis
15702 @item @code{package} (default: @var{opensmtpd})
15703 Package object of the OpenSMTPD SMTP server.
15704
15705 @item @code{config-file} (default: @var{%default-opensmtpd-file})
15706 File-like object of the OpenSMTPD configuration file to use. By default
15707 it listens on the loopback network interface, and allows for mail from
15708 users and daemons on the local machine, as well as permitting email to
15709 remote servers. Run @command{man smtpd.conf} for more information.
15710
15711 @end table
15712 @end deftp
15713
15714 @subsubheading Exim Service
15715
15716 @cindex mail transfer agent (MTA)
15717 @cindex MTA (mail transfer agent)
15718 @cindex SMTP
15719
15720 @deffn {Scheme Variable} exim-service-type
15721 This is the type of the @uref{https://exim.org, Exim} mail transfer
15722 agent (MTA), whose value should be an @code{exim-configuration} object
15723 as in this example:
15724
15725 @example
15726 (service exim-service-type
15727 (exim-configuration
15728 (config-file (local-file "./my-exim.conf"))))
15729 @end example
15730 @end deffn
15731
15732 In order to use an @code{exim-service-type} service you must also have a
15733 @code{mail-aliases-service-type} service present in your
15734 @code{operating-system} (even if it has no aliases).
15735
15736 @deftp {Data Type} exim-configuration
15737 Data type representing the configuration of exim.
15738
15739 @table @asis
15740 @item @code{package} (default: @var{exim})
15741 Package object of the Exim server.
15742
15743 @item @code{config-file} (default: @code{#f})
15744 File-like object of the Exim configuration file to use. If its value is
15745 @code{#f} then use the default configuration file from the package
15746 provided in @code{package}. The resulting configuration file is loaded
15747 after setting the @code{exim_user} and @code{exim_group} configuration
15748 variables.
15749
15750 @end table
15751 @end deftp
15752
15753 @subsubheading Mail Aliases Service
15754
15755 @cindex email aliases
15756 @cindex aliases, for email addresses
15757
15758 @deffn {Scheme Variable} mail-aliases-service-type
15759 This is the type of the service which provides @code{/etc/aliases},
15760 specifying how to deliver mail to users on this system.
15761
15762 @example
15763 (service mail-aliases-service-type
15764 '(("postmaster" "bob")
15765 ("bob" "bob@@example.com" "bob@@example2.com")))
15766 @end example
15767 @end deffn
15768
15769 The configuration for a @code{mail-aliases-service-type} service is an
15770 association list denoting how to deliver mail that comes to this
15771 system. Each entry is of the form @code{(alias addresses ...)}, with
15772 @code{alias} specifying the local alias and @code{addresses} specifying
15773 where to deliver this user's mail.
15774
15775 The aliases aren't required to exist as users on the local system. In
15776 the above example, there doesn't need to be a @code{postmaster} entry in
15777 the @code{operating-system}'s @code{user-accounts} in order to deliver
15778 the @code{postmaster} mail to @code{bob} (which subsequently would
15779 deliver mail to @code{bob@@example.com} and @code{bob@@example2.com}).
15780
15781 @node Messaging Services
15782 @subsubsection Messaging Services
15783
15784 @cindex messaging
15785 @cindex jabber
15786 @cindex XMPP
15787 The @code{(gnu services messaging)} module provides Guix service
15788 definitions for messaging services: currently only Prosody is supported.
15789
15790 @subsubheading Prosody Service
15791
15792 @deffn {Scheme Variable} prosody-service-type
15793 This is the type for the @uref{https://prosody.im, Prosody XMPP
15794 communication server}. Its value must be a @code{prosody-configuration}
15795 record as in this example:
15796
15797 @example
15798 (service prosody-service-type
15799 (prosody-configuration
15800 (modules-enabled (cons "groups" "mam" %default-modules-enabled))
15801 (int-components
15802 (list
15803 (int-component-configuration
15804 (hostname "conference.example.net")
15805 (plugin "muc")
15806 (mod-muc (mod-muc-configuration)))))
15807 (virtualhosts
15808 (list
15809 (virtualhost-configuration
15810 (domain "example.net"))))))
15811 @end example
15812
15813 See below for details about @code{prosody-configuration}.
15814
15815 @end deffn
15816
15817 By default, Prosody does not need much configuration. Only one
15818 @code{virtualhosts} field is needed: it specifies the domain you wish
15819 Prosody to serve.
15820
15821 You can perform various sanity checks on the generated configuration
15822 with the @code{prosodyctl check} command.
15823
15824 Prosodyctl will also help you to import certificates from the
15825 @code{letsencrypt} directory so that the @code{prosody} user can access
15826 them. See @url{https://prosody.im/doc/letsencrypt}.
15827
15828 @example
15829 prosodyctl --root cert import /etc/letsencrypt/live
15830 @end example
15831
15832 The available configuration parameters follow. Each parameter
15833 definition is preceded by its type; for example, @samp{string-list foo}
15834 indicates that the @code{foo} parameter should be specified as a list of
15835 strings. Types starting with @code{maybe-} denote parameters that won't
15836 show up in @code{prosody.cfg.lua} when their value is @code{'disabled}.
15837
15838 There is also a way to specify the configuration as a string, if you
15839 have an old @code{prosody.cfg.lua} file that you want to port over from
15840 some other system; see the end for more details.
15841
15842 The @code{file-object} type designates either a file-like object
15843 (@pxref{G-Expressions, file-like objects}) or a file name.
15844
15845 @c The following documentation was initially generated by
15846 @c (generate-documentation) in (gnu services messaging). Manually maintained
15847 @c documentation is better, so we shouldn't hesitate to edit below as
15848 @c needed. However if the change you want to make to this documentation
15849 @c can be done in an automated way, it's probably easier to change
15850 @c (generate-documentation) than to make it below and have to deal with
15851 @c the churn as Prosody updates.
15852
15853 Available @code{prosody-configuration} fields are:
15854
15855 @deftypevr {@code{prosody-configuration} parameter} package prosody
15856 The Prosody package.
15857 @end deftypevr
15858
15859 @deftypevr {@code{prosody-configuration} parameter} file-name data-path
15860 Location of the Prosody data storage directory. See
15861 @url{https://prosody.im/doc/configure}.
15862 Defaults to @samp{"/var/lib/prosody"}.
15863 @end deftypevr
15864
15865 @deftypevr {@code{prosody-configuration} parameter} file-object-list plugin-paths
15866 Additional plugin directories. They are searched in all the specified
15867 paths in order. See @url{https://prosody.im/doc/plugins_directory}.
15868 Defaults to @samp{()}.
15869 @end deftypevr
15870
15871 @deftypevr {@code{prosody-configuration} parameter} file-name certificates
15872 Every virtual host and component needs a certificate so that clients and
15873 servers can securely verify its identity. Prosody will automatically load
15874 certificates/keys from the directory specified here.
15875 Defaults to @samp{"/etc/prosody/certs"}.
15876 @end deftypevr
15877
15878 @deftypevr {@code{prosody-configuration} parameter} string-list admins
15879 This is a list of accounts that are admins for the server. Note that you
15880 must create the accounts separately. See @url{https://prosody.im/doc/admins} and
15881 @url{https://prosody.im/doc/creating_accounts}.
15882 Example: @code{(admins '("user1@@example.com" "user2@@example.net"))}
15883 Defaults to @samp{()}.
15884 @end deftypevr
15885
15886 @deftypevr {@code{prosody-configuration} parameter} boolean use-libevent?
15887 Enable use of libevent for better performance under high load. See
15888 @url{https://prosody.im/doc/libevent}.
15889 Defaults to @samp{#f}.
15890 @end deftypevr
15891
15892 @deftypevr {@code{prosody-configuration} parameter} module-list modules-enabled
15893 This is the list of modules Prosody will load on startup. It looks for
15894 @code{mod_modulename.lua} in the plugins folder, so make sure that exists too.
15895 Documentation on modules can be found at:
15896 @url{https://prosody.im/doc/modules}.
15897 Defaults to @samp{("roster" "saslauth" "tls" "dialback" "disco" "carbons" "private" "blocklist" "vcard" "version" "uptime" "time" "ping" "pep" "register" "admin_adhoc")}.
15898 @end deftypevr
15899
15900 @deftypevr {@code{prosody-configuration} parameter} string-list modules-disabled
15901 @samp{"offline"}, @samp{"c2s"} and @samp{"s2s"} are auto-loaded, but
15902 should you want to disable them then add them to this list.
15903 Defaults to @samp{()}.
15904 @end deftypevr
15905
15906 @deftypevr {@code{prosody-configuration} parameter} file-object groups-file
15907 Path to a text file where the shared groups are defined. If this path is
15908 empty then @samp{mod_groups} does nothing. See
15909 @url{https://prosody.im/doc/modules/mod_groups}.
15910 Defaults to @samp{"/var/lib/prosody/sharedgroups.txt"}.
15911 @end deftypevr
15912
15913 @deftypevr {@code{prosody-configuration} parameter} boolean allow-registration?
15914 Disable account creation by default, for security. See
15915 @url{https://prosody.im/doc/creating_accounts}.
15916 Defaults to @samp{#f}.
15917 @end deftypevr
15918
15919 @deftypevr {@code{prosody-configuration} parameter} maybe-ssl-configuration ssl
15920 These are the SSL/TLS-related settings. Most of them are disabled so to
15921 use Prosody's defaults. If you do not completely understand these options, do
15922 not add them to your config, it is easy to lower the security of your server
15923 using them. See @url{https://prosody.im/doc/advanced_ssl_config}.
15924
15925 Available @code{ssl-configuration} fields are:
15926
15927 @deftypevr {@code{ssl-configuration} parameter} maybe-string protocol
15928 This determines what handshake to use.
15929 @end deftypevr
15930
15931 @deftypevr {@code{ssl-configuration} parameter} maybe-file-name key
15932 Path to your private key file.
15933 @end deftypevr
15934
15935 @deftypevr {@code{ssl-configuration} parameter} maybe-file-name certificate
15936 Path to your certificate file.
15937 @end deftypevr
15938
15939 @deftypevr {@code{ssl-configuration} parameter} file-object capath
15940 Path to directory containing root certificates that you wish Prosody to
15941 trust when verifying the certificates of remote servers.
15942 Defaults to @samp{"/etc/ssl/certs"}.
15943 @end deftypevr
15944
15945 @deftypevr {@code{ssl-configuration} parameter} maybe-file-object cafile
15946 Path to a file containing root certificates that you wish Prosody to trust.
15947 Similar to @code{capath} but with all certificates concatenated together.
15948 @end deftypevr
15949
15950 @deftypevr {@code{ssl-configuration} parameter} maybe-string-list verify
15951 A list of verification options (these mostly map to OpenSSL's
15952 @code{set_verify()} flags).
15953 @end deftypevr
15954
15955 @deftypevr {@code{ssl-configuration} parameter} maybe-string-list options
15956 A list of general options relating to SSL/TLS. These map to OpenSSL's
15957 @code{set_options()}. For a full list of options available in LuaSec, see the
15958 LuaSec source.
15959 @end deftypevr
15960
15961 @deftypevr {@code{ssl-configuration} parameter} maybe-non-negative-integer depth
15962 How long a chain of certificate authorities to check when looking for a
15963 trusted root certificate.
15964 @end deftypevr
15965
15966 @deftypevr {@code{ssl-configuration} parameter} maybe-string ciphers
15967 An OpenSSL cipher string. This selects what ciphers Prosody will offer to
15968 clients, and in what order.
15969 @end deftypevr
15970
15971 @deftypevr {@code{ssl-configuration} parameter} maybe-file-name dhparam
15972 A path to a file containing parameters for Diffie-Hellman key exchange. You
15973 can create such a file with:
15974 @code{openssl dhparam -out /etc/prosody/certs/dh-2048.pem 2048}
15975 @end deftypevr
15976
15977 @deftypevr {@code{ssl-configuration} parameter} maybe-string curve
15978 Curve for Elliptic curve Diffie-Hellman. Prosody's default is
15979 @samp{"secp384r1"}.
15980 @end deftypevr
15981
15982 @deftypevr {@code{ssl-configuration} parameter} maybe-string-list verifyext
15983 A list of "extra" verification options.
15984 @end deftypevr
15985
15986 @deftypevr {@code{ssl-configuration} parameter} maybe-string password
15987 Password for encrypted private keys.
15988 @end deftypevr
15989
15990 @end deftypevr
15991
15992 @deftypevr {@code{prosody-configuration} parameter} boolean c2s-require-encryption?
15993 Whether to force all client-to-server connections to be encrypted or not.
15994 See @url{https://prosody.im/doc/modules/mod_tls}.
15995 Defaults to @samp{#f}.
15996 @end deftypevr
15997
15998 @deftypevr {@code{prosody-configuration} parameter} string-list disable-sasl-mechanisms
15999 Set of mechanisms that will never be offered. See
16000 @url{https://prosody.im/doc/modules/mod_saslauth}.
16001 Defaults to @samp{("DIGEST-MD5")}.
16002 @end deftypevr
16003
16004 @deftypevr {@code{prosody-configuration} parameter} boolean s2s-require-encryption?
16005 Whether to force all server-to-server connections to be encrypted or not.
16006 See @url{https://prosody.im/doc/modules/mod_tls}.
16007 Defaults to @samp{#f}.
16008 @end deftypevr
16009
16010 @deftypevr {@code{prosody-configuration} parameter} boolean s2s-secure-auth?
16011 Whether to require encryption and certificate authentication. This
16012 provides ideal security, but requires servers you communicate with to support
16013 encryption AND present valid, trusted certificates. See
16014 @url{https://prosody.im/doc/s2s#security}.
16015 Defaults to @samp{#f}.
16016 @end deftypevr
16017
16018 @deftypevr {@code{prosody-configuration} parameter} string-list s2s-insecure-domains
16019 Many servers don't support encryption or have invalid or self-signed
16020 certificates. You can list domains here that will not be required to
16021 authenticate using certificates. They will be authenticated using DNS. See
16022 @url{https://prosody.im/doc/s2s#security}.
16023 Defaults to @samp{()}.
16024 @end deftypevr
16025
16026 @deftypevr {@code{prosody-configuration} parameter} string-list s2s-secure-domains
16027 Even if you leave @code{s2s-secure-auth?} disabled, you can still require
16028 valid certificates for some domains by specifying a list here. See
16029 @url{https://prosody.im/doc/s2s#security}.
16030 Defaults to @samp{()}.
16031 @end deftypevr
16032
16033 @deftypevr {@code{prosody-configuration} parameter} string authentication
16034 Select the authentication backend to use. The default provider stores
16035 passwords in plaintext and uses Prosody's configured data storage to store the
16036 authentication data. If you do not trust your server please see
16037 @url{https://prosody.im/doc/modules/mod_auth_internal_hashed} for information
16038 about using the hashed backend. See also
16039 @url{https://prosody.im/doc/authentication}
16040 Defaults to @samp{"internal_plain"}.
16041 @end deftypevr
16042
16043 @deftypevr {@code{prosody-configuration} parameter} maybe-string log
16044 Set logging options. Advanced logging configuration is not yet supported
16045 by the GuixSD Prosody Service. See @url{https://prosody.im/doc/logging}.
16046 Defaults to @samp{"*syslog"}.
16047 @end deftypevr
16048
16049 @deftypevr {@code{prosody-configuration} parameter} file-name pidfile
16050 File to write pid in. See @url{https://prosody.im/doc/modules/mod_posix}.
16051 Defaults to @samp{"/var/run/prosody/prosody.pid"}.
16052 @end deftypevr
16053
16054 @deftypevr {@code{prosody-configuration} parameter} maybe-non-negative-integer http-max-content-size
16055 Maximum allowed size of the HTTP body (in bytes).
16056 @end deftypevr
16057
16058 @deftypevr {@code{prosody-configuration} parameter} maybe-string http-external-url
16059 Some modules expose their own URL in various ways. This URL is built
16060 from the protocol, host and port used. If Prosody sits behind a proxy, the
16061 public URL will be @code{http-external-url} instead. See
16062 @url{https://prosody.im/doc/http#external_url}.
16063 @end deftypevr
16064
16065 @deftypevr {@code{prosody-configuration} parameter} virtualhost-configuration-list virtualhosts
16066 A host in Prosody is a domain on which user accounts can be created. For
16067 example if you want your users to have addresses like
16068 @samp{"john.smith@@example.com"} then you need to add a host
16069 @samp{"example.com"}. All options in this list will apply only to this host.
16070
16071 Note: the name "virtual" host is used in configuration to avoid confusion with
16072 the actual physical host that Prosody is installed on. A single Prosody
16073 instance can serve many domains, each one defined as a VirtualHost entry in
16074 Prosody's configuration. Conversely a server that hosts a single domain would
16075 have just one VirtualHost entry.
16076
16077 See @url{https://prosody.im/doc/configure#virtual_host_settings}.
16078
16079 Available @code{virtualhost-configuration} fields are:
16080
16081 all these @code{prosody-configuration} fields: @code{admins}, @code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled}, @code{groups-file}, @code{allow-registration?}, @code{ssl}, @code{c2s-require-encryption?}, @code{disable-sasl-mechanisms}, @code{s2s-require-encryption?}, @code{s2s-secure-auth?}, @code{s2s-insecure-domains}, @code{s2s-secure-domains}, @code{authentication}, @code{log}, @code{http-max-content-size}, @code{http-external-url}, @code{raw-content}, plus:
16082 @deftypevr {@code{virtualhost-configuration} parameter} string domain
16083 Domain you wish Prosody to serve.
16084 @end deftypevr
16085
16086 @end deftypevr
16087
16088 @deftypevr {@code{prosody-configuration} parameter} int-component-configuration-list int-components
16089 Components are extra services on a server which are available to clients,
16090 usually on a subdomain of the main server (such as
16091 @samp{"mycomponent.example.com"}). Example components might be chatroom
16092 servers, user directories, or gateways to other protocols.
16093
16094 Internal components are implemented with Prosody-specific plugins. To add an
16095 internal component, you simply fill the hostname field, and the plugin you wish
16096 to use for the component.
16097
16098 See @url{https://prosody.im/doc/components}.
16099 Defaults to @samp{()}.
16100
16101 Available @code{int-component-configuration} fields are:
16102
16103 all these @code{prosody-configuration} fields: @code{admins}, @code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled}, @code{groups-file}, @code{allow-registration?}, @code{ssl}, @code{c2s-require-encryption?}, @code{disable-sasl-mechanisms}, @code{s2s-require-encryption?}, @code{s2s-secure-auth?}, @code{s2s-insecure-domains}, @code{s2s-secure-domains}, @code{authentication}, @code{log}, @code{http-max-content-size}, @code{http-external-url}, @code{raw-content}, plus:
16104 @deftypevr {@code{int-component-configuration} parameter} string hostname
16105 Hostname of the component.
16106 @end deftypevr
16107
16108 @deftypevr {@code{int-component-configuration} parameter} string plugin
16109 Plugin you wish to use for the component.
16110 @end deftypevr
16111
16112 @deftypevr {@code{int-component-configuration} parameter} maybe-mod-muc-configuration mod-muc
16113 Multi-user chat (MUC) is Prosody's module for allowing you to create
16114 hosted chatrooms/conferences for XMPP users.
16115
16116 General information on setting up and using multi-user chatrooms can be found
16117 in the "Chatrooms" documentation (@url{https://prosody.im/doc/chatrooms}),
16118 which you should read if you are new to XMPP chatrooms.
16119
16120 See also @url{https://prosody.im/doc/modules/mod_muc}.
16121
16122 Available @code{mod-muc-configuration} fields are:
16123
16124 @deftypevr {@code{mod-muc-configuration} parameter} string name
16125 The name to return in service discovery responses.
16126 Defaults to @samp{"Prosody Chatrooms"}.
16127 @end deftypevr
16128
16129 @deftypevr {@code{mod-muc-configuration} parameter} string-or-boolean restrict-room-creation
16130 If @samp{#t}, this will only allow admins to create new chatrooms.
16131 Otherwise anyone can create a room. The value @samp{"local"} restricts room
16132 creation to users on the service's parent domain. E.g. @samp{user@@example.com}
16133 can create rooms on @samp{rooms.example.com}. The value @samp{"admin"}
16134 restricts to service administrators only.
16135 Defaults to @samp{#f}.
16136 @end deftypevr
16137
16138 @deftypevr {@code{mod-muc-configuration} parameter} non-negative-integer max-history-messages
16139 Maximum number of history messages that will be sent to the member that has
16140 just joined the room.
16141 Defaults to @samp{20}.
16142 @end deftypevr
16143
16144 @end deftypevr
16145
16146 @end deftypevr
16147
16148 @deftypevr {@code{prosody-configuration} parameter} ext-component-configuration-list ext-components
16149 External components use XEP-0114, which most standalone components
16150 support. To add an external component, you simply fill the hostname field. See
16151 @url{https://prosody.im/doc/components}.
16152 Defaults to @samp{()}.
16153
16154 Available @code{ext-component-configuration} fields are:
16155
16156 all these @code{prosody-configuration} fields: @code{admins}, @code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled}, @code{groups-file}, @code{allow-registration?}, @code{ssl}, @code{c2s-require-encryption?}, @code{disable-sasl-mechanisms}, @code{s2s-require-encryption?}, @code{s2s-secure-auth?}, @code{s2s-insecure-domains}, @code{s2s-secure-domains}, @code{authentication}, @code{log}, @code{http-max-content-size}, @code{http-external-url}, @code{raw-content}, plus:
16157 @deftypevr {@code{ext-component-configuration} parameter} string component-secret
16158 Password which the component will use to log in.
16159 @end deftypevr
16160
16161 @deftypevr {@code{ext-component-configuration} parameter} string hostname
16162 Hostname of the component.
16163 @end deftypevr
16164
16165 @end deftypevr
16166
16167 @deftypevr {@code{prosody-configuration} parameter} non-negative-integer-list component-ports
16168 Port(s) Prosody listens on for component connections.
16169 Defaults to @samp{(5347)}.
16170 @end deftypevr
16171
16172 @deftypevr {@code{prosody-configuration} parameter} string component-interface
16173 Interface Prosody listens on for component connections.
16174 Defaults to @samp{"127.0.0.1"}.
16175 @end deftypevr
16176
16177 @deftypevr {@code{prosody-configuration} parameter} maybe-raw-content raw-content
16178 Raw content that will be added to the configuration file.
16179 @end deftypevr
16180
16181 It could be that you just want to get a @code{prosody.cfg.lua}
16182 up and running. In that case, you can pass an
16183 @code{opaque-prosody-configuration} record as the value of
16184 @code{prosody-service-type}. As its name indicates, an opaque configuration
16185 does not have easy reflective capabilities.
16186 Available @code{opaque-prosody-configuration} fields are:
16187
16188 @deftypevr {@code{opaque-prosody-configuration} parameter} package prosody
16189 The prosody package.
16190 @end deftypevr
16191
16192 @deftypevr {@code{opaque-prosody-configuration} parameter} string prosody.cfg.lua
16193 The contents of the @code{prosody.cfg.lua} to use.
16194 @end deftypevr
16195
16196 For example, if your @code{prosody.cfg.lua} is just the empty
16197 string, you could instantiate a prosody service like this:
16198
16199 @example
16200 (service prosody-service-type
16201 (opaque-prosody-configuration
16202 (prosody.cfg.lua "")))
16203 @end example
16204
16205 @c end of Prosody auto-generated documentation
16206
16207 @subsubheading BitlBee Service
16208
16209 @cindex IRC (Internet Relay Chat)
16210 @cindex IRC gateway
16211 @url{http://bitlbee.org,BitlBee} is a gateway that provides an IRC
16212 interface to a variety of messaging protocols such as XMPP.
16213
16214 @defvr {Scheme Variable} bitlbee-service-type
16215 This is the service type for the @url{http://bitlbee.org,BitlBee} IRC
16216 gateway daemon. Its value is a @code{bitlbee-configuration} (see
16217 below).
16218
16219 To have BitlBee listen on port 6667 on localhost, add this line to your
16220 services:
16221
16222 @example
16223 (service bitlbee-service-type)
16224 @end example
16225 @end defvr
16226
16227 @deftp {Data Type} bitlbee-configuration
16228 This is the configuration for BitlBee, with the following fields:
16229
16230 @table @asis
16231 @item @code{interface} (default: @code{"127.0.0.1"})
16232 @itemx @code{port} (default: @code{6667})
16233 Listen on the network interface corresponding to the IP address
16234 specified in @var{interface}, on @var{port}.
16235
16236 When @var{interface} is @code{127.0.0.1}, only local clients can
16237 connect; when it is @code{0.0.0.0}, connections can come from any
16238 networking interface.
16239
16240 @item @code{package} (default: @code{bitlbee})
16241 The BitlBee package to use.
16242
16243 @item @code{plugins} (default: @code{'()})
16244 List of plugin packages to use---e.g., @code{bitlbee-discord}.
16245
16246 @item @code{extra-settings} (default: @code{""})
16247 Configuration snippet added as-is to the BitlBee configuration file.
16248 @end table
16249 @end deftp
16250
16251
16252 @node Telephony Services
16253 @subsubsection Telephony Services
16254
16255 @cindex Murmur (VoIP server)
16256 @cindex VoIP server
16257 This section describes how to set up and run a Murmur server. Murmur is
16258 the server of the @uref{https://mumble.info, Mumble} voice-over-IP
16259 (VoIP) suite.
16260
16261 @deftp {Data Type} murmur-configuration
16262 The service type for the Murmur server. An example configuration can
16263 look like this:
16264
16265 @example
16266 (service murmur-service-type
16267 (murmur-configuration
16268 (welcome-text
16269 "Welcome to this Mumble server running on GuixSD!")
16270 (cert-required? #t) ;disallow text password logins
16271 (ssl-cert "/etc/letsencrypt/live/mumble.example.com/fullchain.pem")
16272 (ssl-key "/etc/letsencrypt/live/mumble.example.com/privkey.pem")))
16273 @end example
16274
16275 After reconfiguring your system, you can manually set the murmur @code{SuperUser}
16276 password with the command that is printed during the activation phase.
16277
16278 It is recommended to register a normal Mumble user account
16279 and grant it admin or moderator rights.
16280 You can use the @code{mumble} client to
16281 login as new normal user, register yourself, and log out.
16282 For the next step login with the name @code{SuperUser} use
16283 the @code{SuperUser} password that you set previously,
16284 and grant your newly registered mumble user administrator or moderator
16285 rights and create some channels.
16286
16287 Available @code{murmur-configuration} fields are:
16288
16289 @table @asis
16290 @item @code{package} (default: @code{mumble})
16291 Package that contains @code{bin/murmurd}.
16292
16293 @item @code{user} (default: @code{"murmur"})
16294 User who will run the Murmur server.
16295
16296 @item @code{group} (default: @code{"murmur"})
16297 Group of the user who will run the murmur server.
16298
16299 @item @code{port} (default: @code{64738})
16300 Port on which the server will listen.
16301
16302 @item @code{welcome-text} (default: @code{""})
16303 Welcome text sent to clients when they connect.
16304
16305 @item @code{server-password} (default: @code{""})
16306 Password the clients have to enter in order to connect.
16307
16308 @item @code{max-users} (default: @code{100})
16309 Maximum of users that can be connected to the server at once.
16310
16311 @item @code{max-user-bandwidth} (default: @code{#f})
16312 Maximum voice traffic a user can send per second.
16313
16314 @item @code{database-file} (default: @code{"/var/lib/murmur/db.sqlite"})
16315 File name of the sqlite database.
16316 The service's user will become the owner of the directory.
16317
16318 @item @code{log-file} (default: @code{"/var/log/murmur/murmur.log"})
16319 File name of the log file.
16320 The service's user will become the owner of the directory.
16321
16322 @item @code{autoban-attempts} (default: @code{10})
16323 Maximum number of logins a user can make in @code{autoban-timeframe}
16324 without getting auto banned for @code{autoban-time}.
16325
16326 @item @code{autoban-timeframe} (default: @code{120})
16327 Timeframe for autoban in seconds.
16328
16329 @item @code{autoban-time} (default: @code{300})
16330 Amount of time in seconds for which a client gets banned
16331 when violating the autoban limits.
16332
16333 @item @code{opus-threshold} (default: @code{100})
16334 Percentage of clients that need to support opus
16335 before switching over to opus audio codec.
16336
16337 @item @code{channel-nesting-limit} (default: @code{10})
16338 How deep channels can be nested at maximum.
16339
16340 @item @code{channelname-regex} (default: @code{#f})
16341 A string in form of a Qt regular expression that channel names must conform to.
16342
16343 @item @code{username-regex} (default: @code{#f})
16344 A string in form of a Qt regular expression that user names must conform to.
16345
16346 @item @code{text-message-length} (default: @code{5000})
16347 Maximum size in bytes that a user can send in one text chat message.
16348
16349 @item @code{image-message-length} (default: @code{(* 128 1024)})
16350 Maximum size in bytes that a user can send in one image message.
16351
16352 @item @code{cert-required?} (default: @code{#f})
16353 If it is set to @code{#t} clients that use weak password authentification
16354 will not be accepted. Users must have completed the certificate wizard to join.
16355
16356 @item @code{remember-channel?} (default: @code{#f})
16357 Should murmur remember the last channel each user was in when they disconnected
16358 and put them into the remembered channel when they rejoin.
16359
16360 @item @code{allow-html?} (default: @code{#f})
16361 Should html be allowed in text messages, user comments, and channel descriptions.
16362
16363 @item @code{allow-ping?} (default: @code{#f})
16364 Setting to true exposes the current user count, the maximum user count, and
16365 the server's maximum bandwidth per client to unauthenticated users. In the
16366 Mumble client, this information is shown in the Connect dialog.
16367
16368 Disabling this setting will prevent public listing of the server.
16369
16370 @item @code{bonjour?} (default: @code{#f})
16371 Should the server advertise itself in the local network through the bonjour protocol.
16372
16373 @item @code{send-version?} (default: @code{#f})
16374 Should the murmur server version be exposed in ping requests.
16375
16376 @item @code{log-days} (default: @code{31})
16377 Murmur also stores logs in the database, which are accessible via RPC.
16378 The default is 31 days of months, but you can set this setting to 0 to keep logs forever,
16379 or -1 to disable logging to the database.
16380
16381 @item @code{obfuscate-ips?} (default: @code{#t})
16382 Should logged ips be obfuscated to protect the privacy of users.
16383
16384 @item @code{ssl-cert} (default: @code{#f})
16385 File name of the SSL/TLS certificate used for encrypted connections.
16386
16387 @example
16388 (ssl-cert "/etc/letsencrypt/live/example.com/fullchain.pem")
16389 @end example
16390 @item @code{ssl-key} (default: @code{#f})
16391 Filepath to the ssl private key used for encrypted connections.
16392 @example
16393 (ssl-key "/etc/letsencrypt/live/example.com/privkey.pem")
16394 @end example
16395
16396 @item @code{ssl-dh-params} (default: @code{#f})
16397 File name of a PEM-encoded file with Diffie-Hellman parameters
16398 for the SSL/TLS encryption. Alternatively you set it to
16399 @code{"@@ffdhe2048"}, @code{"@@ffdhe3072"}, @code{"@@ffdhe4096"}, @code{"@@ffdhe6144"}
16400 or @code{"@@ffdhe8192"} to use bundled parameters from RFC 7919.
16401
16402 @item @code{ssl-ciphers} (default: @code{#f})
16403 The @code{ssl-ciphers} option chooses the cipher suites to make available for use
16404 in SSL/TLS.
16405
16406 This option is specified using
16407 @uref{https://www.openssl.org/docs/apps/ciphers.html#CIPHER-LIST-FORMAT,
16408 OpenSSL cipher list notation}.
16409
16410 It is recommended that you try your cipher string using 'openssl ciphers <string>'
16411 before setting it here, to get a feel for which cipher suites you will get.
16412 After setting this option, it is recommend that you inspect your Murmur log
16413 to ensure that Murmur is using the cipher suites that you expected it to.
16414
16415 Note: Changing this option may impact the backwards compatibility of your
16416 Murmur server, and can remove the ability for older Mumble clients to be able
16417 to connect to it.
16418
16419 @item @code{public-registration} (default: @code{#f})
16420 Must be a @code{<murmur-public-registration-configuration>} record or @code{#f}.
16421
16422 You can optionally register your server in the public server list that the
16423 @code{mumble} client shows on startup.
16424 You cannot register your server if you have set a @code{server-password},
16425 or set @code{allow-ping} to @code{#f}.
16426
16427 It might take a few hours until it shows up in the public list.
16428
16429 @item @code{file} (default: @code{#f})
16430 Optional alternative override for this configuration.
16431 @end table
16432 @end deftp
16433
16434 @deftp {Data Type} murmur-public-registration-configuration
16435 Configuration for public registration of a murmur service.
16436
16437 @table @asis
16438 @item @code{name}
16439 This is a display name for your server. Not to be confused with the hostname.
16440
16441 @item @code{password}
16442 A password to identify your registration.
16443 Subsequent updates will need the same password. Don't lose your password.
16444
16445 @item @code{url}
16446 This should be a @code{http://} or @code{https://} link to your web
16447 site.
16448
16449 @item @code{hostname} (default: @code{#f})
16450 By default your server will be listed by its IP address.
16451 If it is set your server will be linked by this host name instead.
16452 @end table
16453 @end deftp
16454
16455
16456
16457 @node Monitoring Services
16458 @subsubsection Monitoring Services
16459
16460 @subsubheading Tailon Service
16461
16462 @uref{https://tailon.readthedocs.io/, Tailon} is a web application for
16463 viewing and searching log files.
16464
16465 The following example will configure the service with default values.
16466 By default, Tailon can be accessed on port 8080 (@code{http://localhost:8080}).
16467
16468 @example
16469 (service tailon-service-type)
16470 @end example
16471
16472 The following example customises more of the Tailon configuration,
16473 adding @command{sed} to the list of allowed commands.
16474
16475 @example
16476 (service tailon-service-type
16477 (tailon-configuration
16478 (config-file
16479 (tailon-configuration-file
16480 (allowed-commands '("tail" "grep" "awk" "sed"))))))
16481 @end example
16482
16483
16484 @deftp {Data Type} tailon-configuration
16485 Data type representing the configuration of Tailon.
16486 This type has the following parameters:
16487
16488 @table @asis
16489 @item @code{config-file} (default: @code{(tailon-configuration-file)})
16490 The configuration file to use for Tailon. This can be set to a
16491 @dfn{tailon-configuration-file} record value, or any gexp
16492 (@pxref{G-Expressions}).
16493
16494 For example, to instead use a local file, the @code{local-file} function
16495 can be used:
16496
16497 @example
16498 (service tailon-service-type
16499 (tailon-configuration
16500 (config-file (local-file "./my-tailon.conf"))))
16501 @end example
16502
16503 @item @code{package} (default: @code{tailon})
16504 The tailon package to use.
16505
16506 @end table
16507 @end deftp
16508
16509 @deftp {Data Type} tailon-configuration-file
16510 Data type representing the configuration options for Tailon.
16511 This type has the following parameters:
16512
16513 @table @asis
16514 @item @code{files} (default: @code{(list "/var/log")})
16515 List of files to display. The list can include strings for a single file
16516 or directory, or a list, where the first item is the name of a
16517 subsection, and the remaining items are the files or directories in that
16518 subsection.
16519
16520 @item @code{bind} (default: @code{"localhost:8080"})
16521 Address and port to which Tailon should bind on.
16522
16523 @item @code{relative-root} (default: @code{#f})
16524 URL path to use for Tailon, set to @code{#f} to not use a path.
16525
16526 @item @code{allow-transfers?} (default: @code{#t})
16527 Allow downloading the log files in the web interface.
16528
16529 @item @code{follow-names?} (default: @code{#t})
16530 Allow tailing of not-yet existent files.
16531
16532 @item @code{tail-lines} (default: @code{200})
16533 Number of lines to read initially from each file.
16534
16535 @item @code{allowed-commands} (default: @code{(list "tail" "grep" "awk")})
16536 Commands to allow running. By default, @code{sed} is disabled.
16537
16538 @item @code{debug?} (default: @code{#f})
16539 Set @code{debug?} to @code{#t} to show debug messages.
16540
16541 @item @code{wrap-lines} (default: @code{#t})
16542 Initial line wrapping state in the web interface. Set to @code{#t} to
16543 initially wrap lines (the default), or to @code{#f} to initially not
16544 wrap lines.
16545
16546 @item @code{http-auth} (default: @code{#f})
16547 HTTP authentication type to use. Set to @code{#f} to disable
16548 authentication (the default). Supported values are @code{"digest"} or
16549 @code{"basic"}.
16550
16551 @item @code{users} (default: @code{#f})
16552 If HTTP authentication is enabled (see @code{http-auth}), access will be
16553 restricted to the credentials provided here. To configure users, use a
16554 list of pairs, where the first element of the pair is the username, and
16555 the 2nd element of the pair is the password.
16556
16557 @example
16558 (tailon-configuration-file
16559 (http-auth "basic")
16560 (users '(("user1" . "password1")
16561 ("user2" . "password2"))))
16562 @end example
16563
16564 @end table
16565 @end deftp
16566
16567
16568 @subsubheading Darkstat Service
16569 @cindex darkstat
16570 Darkstat is a packet sniffer that captures network traffic, calculates
16571 statistics about usage, and serves reports over HTTP.
16572
16573 @defvar {Scheme Variable} darkstat-service-type
16574 This is the service type for the
16575 @uref{https://unix4lyfe.org/darkstat/, darkstat}
16576 service, its value must be a @code{darkstat-configuration} record as in
16577 this example:
16578
16579 @example
16580 (service darkstat-service-type
16581 (darkstat-configuration
16582 (interface "eno1")))
16583 @end example
16584 @end defvar
16585
16586 @deftp {Data Type} darkstat-configuration
16587 Data type representing the configuration of @command{darkstat}.
16588
16589 @table @asis
16590 @item @code{package} (default: @code{darkstat})
16591 The darkstat package to use.
16592
16593 @item @code{interface}
16594 Capture traffic on the specified network interface.
16595
16596 @item @code{port} (default: @code{"667"})
16597 Bind the web interface to the specified port.
16598
16599 @item @code{bind-address} (default: @code{"127.0.0.1"})
16600 Bind the web interface to the specified address.
16601
16602 @item @code{base} (default: @code{"/"})
16603 Specify the path of the base URL. This can be useful if
16604 @command{darkstat} is accessed via a reverse proxy.
16605
16606 @end table
16607 @end deftp
16608
16609 @subsubheading Prometheus Node Exporter Service
16610
16611 @cindex prometheus-node-exporter
16612 The Prometheus ``node exporter'' makes hardware and operating system statistics
16613 provided by the Linux kernel available for the Prometheus monitoring system.
16614 This service should be deployed on all physical nodes and virtual machines,
16615 where monitoring these statistics is desirable.
16616
16617 @defvar {Scheme variable} prometheus-node-exporter-service-type
16618 This is the service type for the
16619 @uref{https://github.com/prometheus/node_exporter/, prometheus-node-exporter}
16620 service, its value must be a @code{prometheus-node-exporter-configuration}
16621 record as in this example:
16622
16623 @example
16624 (service prometheus-node-exporter-service-type
16625 (prometheus-node-exporter-configuration
16626 (web-listen-address ":9100")))
16627 @end example
16628 @end defvar
16629
16630 @deftp {Data Type} prometheus-node-exporter-configuration
16631 Data type representing the configuration of @command{node_exporter}.
16632
16633 @table @asis
16634 @item @code{package} (default: @code{go-github-com-prometheus-node-exporter})
16635 The prometheus-node-exporter package to use.
16636
16637 @item @code{web-listen-address} (default: @code{":9100"})
16638 Bind the web interface to the specified address.
16639
16640 @end table
16641 @end deftp
16642
16643 @node Kerberos Services
16644 @subsubsection Kerberos Services
16645 @cindex Kerberos
16646
16647 The @code{(gnu services kerberos)} module provides services relating to
16648 the authentication protocol @dfn{Kerberos}.
16649
16650 @subsubheading Krb5 Service
16651
16652 Programs using a Kerberos client library normally
16653 expect a configuration file in @file{/etc/krb5.conf}.
16654 This service generates such a file from a definition provided in the
16655 operating system declaration.
16656 It does not cause any daemon to be started.
16657
16658 No ``keytab'' files are provided by this service---you must explicitly create them.
16659 This service is known to work with the MIT client library, @code{mit-krb5}.
16660 Other implementations have not been tested.
16661
16662 @defvr {Scheme Variable} krb5-service-type
16663 A service type for Kerberos 5 clients.
16664 @end defvr
16665
16666 @noindent
16667 Here is an example of its use:
16668 @lisp
16669 (service krb5-service-type
16670 (krb5-configuration
16671 (default-realm "EXAMPLE.COM")
16672 (allow-weak-crypto? #t)
16673 (realms (list
16674 (krb5-realm
16675 (name "EXAMPLE.COM")
16676 (admin-server "groucho.example.com")
16677 (kdc "karl.example.com"))
16678 (krb5-realm
16679 (name "ARGRX.EDU")
16680 (admin-server "kerb-admin.argrx.edu")
16681 (kdc "keys.argrx.edu"))))))
16682 @end lisp
16683
16684 @noindent
16685 This example provides a Kerberos@tie{}5 client configuration which:
16686 @itemize
16687 @item Recognizes two realms, @i{viz:} ``EXAMPLE.COM'' and ``ARGRX.EDU'', both
16688 of which have distinct administration servers and key distribution centers;
16689 @item Will default to the realm ``EXAMPLE.COM'' if the realm is not explicitly
16690 specified by clients;
16691 @item Accepts services which only support encryption types known to be weak.
16692 @end itemize
16693
16694 The @code{krb5-realm} and @code{krb5-configuration} types have many fields.
16695 Only the most commonly used ones are described here.
16696 For a full list, and more detailed explanation of each, see the MIT
16697 @uref{http://web.mit.edu/kerberos/krb5-devel/doc/admin/conf_files/krb5_conf.html,,krb5.conf}
16698 documentation.
16699
16700
16701 @deftp {Data Type} krb5-realm
16702 @cindex realm, kerberos
16703 @table @asis
16704 @item @code{name}
16705 This field is a string identifying the name of the realm.
16706 A common convention is to use the fully qualified DNS name of your organization,
16707 converted to upper case.
16708
16709 @item @code{admin-server}
16710 This field is a string identifying the host where the administration server is
16711 running.
16712
16713 @item @code{kdc}
16714 This field is a string identifying the key distribution center
16715 for the realm.
16716 @end table
16717 @end deftp
16718
16719 @deftp {Data Type} krb5-configuration
16720
16721 @table @asis
16722 @item @code{allow-weak-crypto?} (default: @code{#f})
16723 If this flag is @code{#t} then services which only offer encryption algorithms
16724 known to be weak will be accepted.
16725
16726 @item @code{default-realm} (default: @code{#f})
16727 This field should be a string identifying the default Kerberos
16728 realm for the client.
16729 You should set this field to the name of your Kerberos realm.
16730 If this value is @code{#f}
16731 then a realm must be specified with every Kerberos principal when invoking programs
16732 such as @command{kinit}.
16733
16734 @item @code{realms}
16735 This should be a non-empty list of @code{krb5-realm} objects, which clients may
16736 access.
16737 Normally, one of them will have a @code{name} field matching the @code{default-realm}
16738 field.
16739 @end table
16740 @end deftp
16741
16742
16743 @subsubheading PAM krb5 Service
16744 @cindex pam-krb5
16745
16746 The @code{pam-krb5} service allows for login authentication and password
16747 management via Kerberos.
16748 You will need this service if you want PAM enabled applications to authenticate
16749 users using Kerberos.
16750
16751 @defvr {Scheme Variable} pam-krb5-service-type
16752 A service type for the Kerberos 5 PAM module.
16753 @end defvr
16754
16755 @deftp {Data Type} pam-krb5-configuration
16756 Data type representing the configuration of the Kerberos 5 PAM module
16757 This type has the following parameters:
16758 @table @asis
16759 @item @code{pam-krb5} (default: @code{pam-krb5})
16760 The pam-krb5 package to use.
16761
16762 @item @code{minimum-uid} (default: @code{1000})
16763 The smallest user ID for which Kerberos authentications should be attempted.
16764 Local accounts with lower values will silently fail to authenticate.
16765 @end table
16766 @end deftp
16767
16768
16769 @node Web Services
16770 @subsubsection Web Services
16771
16772 @cindex web
16773 @cindex www
16774 @cindex HTTP
16775 The @code{(gnu services web)} module provides the Apache HTTP Server,
16776 the nginx web server, and also a fastcgi wrapper daemon.
16777
16778 @subsubheading Apache HTTP Server
16779
16780 @deffn {Scheme Variable} httpd-service-type
16781 Service type for the @uref{https://httpd.apache.org/,Apache HTTP} server
16782 (@dfn{httpd}). The value for this service type is a
16783 @code{httpd-configuration} record.
16784
16785 A simple example configuration is given below.
16786
16787 @example
16788 (service httpd-service-type
16789 (httpd-configuration
16790 (config
16791 (httpd-config-file
16792 (server-name "www.example.com")
16793 (document-root "/srv/http/www.example.com")))))
16794 @end example
16795
16796 Other services can also extend the @code{httpd-service-type} to add to
16797 the configuration.
16798
16799 @example
16800 (simple-service 'my-extra-server httpd-service-type
16801 (list
16802 (httpd-virtualhost
16803 "*:80"
16804 (list (string-append
16805 "ServerName "www.example.com
16806 DocumentRoot \"/srv/http/www.example.com\"")))))
16807 @end example
16808 @end deffn
16809
16810 The details for the @code{httpd-configuration}, @code{httpd-module},
16811 @code{httpd-config-file} and @code{httpd-virtualhost} record types are
16812 given below.
16813
16814 @deffn {Data Type} httpd-configuration
16815 This data type represents the configuration for the httpd service.
16816
16817 @table @asis
16818 @item @code{package} (default: @code{httpd})
16819 The httpd package to use.
16820
16821 @item @code{pid-file} (default: @code{"/var/run/httpd"})
16822 The pid file used by the shepherd-service.
16823
16824 @item @code{config} (default: @code{(httpd-config-file)})
16825 The configuration file to use with the httpd service. The default value
16826 is a @code{httpd-config-file} record, but this can also be a different
16827 G-expression that generates a file, for example a @code{plain-file}. A
16828 file outside of the store can also be specified through a string.
16829
16830 @end table
16831 @end deffn
16832
16833 @deffn {Data Type} httpd-module
16834 This data type represents a module for the httpd service.
16835
16836 @table @asis
16837 @item @code{name}
16838 The name of the module.
16839
16840 @item @code{file}
16841 The file for the module. This can be relative to the httpd package being
16842 used, the absolute location of a file, or a G-expression for a file
16843 within the store, for example @code{(file-append mod-wsgi
16844 "/modules/mod_wsgi.so")}.
16845
16846 @end table
16847 @end deffn
16848
16849 @defvr {Scheme Variable} %default-httpd-modules
16850 A default list of @code{httpd-module} objects.
16851 @end defvr
16852
16853 @deffn {Data Type} httpd-config-file
16854 This data type represents a configuration file for the httpd service.
16855
16856 @table @asis
16857 @item @code{modules} (default: @code{%default-httpd-modules})
16858 The modules to load. Additional modules can be added here, or loaded by
16859 additional configuration.
16860
16861 For example, in order to handle requests for PHP files, you can use Apache’s
16862 @code{mod_proxy_fcgi} module along with @code{php-fpm-service-type}:
16863
16864 @example
16865 (service httpd-service-type
16866 (httpd-configuration
16867 (config
16868 (httpd-config-file
16869 (modules (cons*
16870 (httpd-module
16871 (name "proxy_module")
16872 (file "modules/mod_proxy.so"))
16873 (httpd-module
16874 (name "proxy_fcgi_module")
16875 (file "modules/mod_proxy_fcgi.so"))
16876 %default-httpd-modules))
16877 (extra-config (list "\
16878 <FilesMatch \\.php$>
16879 SetHandler \"proxy:unix:/var/run/php-fpm.sock|fcgi://localhost/\"
16880 </FilesMatch>"))))))
16881 (service php-fpm-service-type
16882 (php-fpm-configuration
16883 (socket "/var/run/php-fpm.sock")
16884 (socket-group "httpd")))
16885 @end example
16886
16887 @item @code{server-root} (default: @code{httpd})
16888 The @code{ServerRoot} in the configuration file, defaults to the httpd
16889 package. Directives including @code{Include} and @code{LoadModule} are
16890 taken as relative to the server root.
16891
16892 @item @code{server-name} (default: @code{#f})
16893 The @code{ServerName} in the configuration file, used to specify the
16894 request scheme, hostname and port that the server uses to identify
16895 itself.
16896
16897 This doesn't need to be set in the server config, and can be specifyed
16898 in virtual hosts. The default is @code{#f} to not specify a
16899 @code{ServerName}.
16900
16901 @item @code{document-root} (default: @code{"/srv/http"})
16902 The @code{DocumentRoot} from which files will be served.
16903
16904 @item @code{listen} (default: @code{'("80")})
16905 The list of values for the @code{Listen} directives in the config
16906 file. The value should be a list of strings, when each string can
16907 specify the port number to listen on, and optionally the IP address and
16908 protocol to use.
16909
16910 @item @code{pid-file} (default: @code{"/var/run/httpd"})
16911 The @code{PidFile} to use. This should match the @code{pid-file} set in
16912 the @code{httpd-configuration} so that the Shepherd service is
16913 configured correctly.
16914
16915 @item @code{error-log} (default: @code{"/var/log/httpd/error_log"})
16916 The @code{ErrorLog} to which the server will log errors.
16917
16918 @item @code{user} (default: @code{"httpd"})
16919 The @code{User} which the server will answer requests as.
16920
16921 @item @code{group} (default: @code{"httpd"})
16922 The @code{Group} which the server will answer requests as.
16923
16924 @item @code{extra-config} (default: @code{(list "TypesConfig etc/httpd/mime.types")})
16925 A flat list of strings and G-expressions which will be added to the end
16926 of the configuration file.
16927
16928 Any values which the service is extended with will be appended to this
16929 list.
16930
16931 @end table
16932 @end deffn
16933
16934 @deffn {Data Type} httpd-virtualhost
16935 This data type represents a virtualhost configuration block for the httpd service.
16936
16937 These should be added to the extra-config for the httpd-service.
16938
16939 @example
16940 (simple-service 'my-extra-server httpd-service-type
16941 (list
16942 (httpd-virtualhost
16943 "*:80"
16944 (list (string-append
16945 "ServerName "www.example.com
16946 DocumentRoot \"/srv/http/www.example.com\"")))))
16947 @end example
16948
16949 @table @asis
16950 @item @code{addresses-and-ports}
16951 The addresses and ports for the @code{VirtualHost} directive.
16952
16953 @item @code{contents}
16954 The contents of the @code{VirtualHost} directive, this should be a list
16955 of strings and G-expressions.
16956
16957 @end table
16958 @end deffn
16959
16960 @subsubheading NGINX
16961
16962 @deffn {Scheme Variable} nginx-service-type
16963 Service type for the @uref{https://nginx.org/,NGinx} web server. The
16964 value for this service type is a @code{<nginx-configuration>} record.
16965
16966 A simple example configuration is given below.
16967
16968 @example
16969 (service nginx-service-type
16970 (nginx-configuration
16971 (server-blocks
16972 (list (nginx-server-configuration
16973 (server-name '("www.example.com"))
16974 (root "/srv/http/www.example.com"))))))
16975 @end example
16976
16977 In addition to adding server blocks to the service configuration
16978 directly, this service can be extended by other services to add server
16979 blocks, as in this example:
16980
16981 @example
16982 (simple-service 'my-extra-server nginx-service-type
16983 (list (nginx-server-configuration
16984 (root "/srv/http/extra-website")
16985 (try-files (list "$uri" "$uri/index.html")))))
16986 @end example
16987 @end deffn
16988
16989 At startup, @command{nginx} has not yet read its configuration file, so
16990 it uses a default file to log error messages. If it fails to load its
16991 configuration file, that is where error messages are logged. After the
16992 configuration file is loaded, the default error log file changes as per
16993 configuration. In our case, startup error messages can be found in
16994 @file{/var/run/nginx/logs/error.log}, and after configuration in
16995 @file{/var/log/nginx/error.log}. The second location can be changed
16996 with the @var{log-directory} configuration option.
16997
16998 @deffn {Data Type} nginx-configuration
16999 This data type represents the configuration for NGinx. Some
17000 configuration can be done through this and the other provided record
17001 types, or alternatively, a config file can be provided.
17002
17003 @table @asis
17004 @item @code{nginx} (default: @code{nginx})
17005 The nginx package to use.
17006
17007 @item @code{log-directory} (default: @code{"/var/log/nginx"})
17008 The directory to which NGinx will write log files.
17009
17010 @item @code{run-directory} (default: @code{"/var/run/nginx"})
17011 The directory in which NGinx will create a pid file, and write temporary
17012 files.
17013
17014 @item @code{server-blocks} (default: @code{'()})
17015 A list of @dfn{server blocks} to create in the generated configuration
17016 file, the elements should be of type
17017 @code{<nginx-server-configuration>}.
17018
17019 The following example would setup NGinx to serve @code{www.example.com}
17020 from the @code{/srv/http/www.example.com} directory, without using
17021 HTTPS.
17022 @example
17023 (service nginx-service-type
17024 (nginx-configuration
17025 (server-blocks
17026 (list (nginx-server-configuration
17027 (server-name '("www.example.com"))
17028 (root "/srv/http/www.example.com"))))))
17029 @end example
17030
17031 @item @code{upstream-blocks} (default: @code{'()})
17032 A list of @dfn{upstream blocks} to create in the generated configuration
17033 file, the elements should be of type
17034 @code{<nginx-upstream-configuration>}.
17035
17036 Configuring upstreams through the @code{upstream-blocks} can be useful
17037 when combined with @code{locations} in the
17038 @code{<nginx-server-configuration>} records. The following example
17039 creates a server configuration with one location configuration, that
17040 will proxy requests to a upstream configuration, which will handle
17041 requests with two servers.
17042
17043 @example
17044 (service
17045 nginx-service-type
17046 (nginx-configuration
17047 (server-blocks
17048 (list (nginx-server-configuration
17049 (server-name '("www.example.com"))
17050 (root "/srv/http/www.example.com")
17051 (locations
17052 (list
17053 (nginx-location-configuration
17054 (uri "/path1")
17055 (body '("proxy_pass http://server-proxy;"))))))))
17056 (upstream-blocks
17057 (list (nginx-upstream-configuration
17058 (name "server-proxy")
17059 (servers (list "server1.example.com"
17060 "server2.example.com")))))))
17061 @end example
17062
17063 @item @code{file} (default: @code{#f})
17064 If a configuration @var{file} is provided, this will be used, rather than
17065 generating a configuration file from the provided @code{log-directory},
17066 @code{run-directory}, @code{server-blocks} and @code{upstream-blocks}. For
17067 proper operation, these arguments should match what is in @var{file} to ensure
17068 that the directories are created when the service is activated.
17069
17070 This can be useful if you have an existing configuration file, or it's
17071 not possible to do what is required through the other parts of the
17072 nginx-configuration record.
17073
17074 @item @code{server-names-hash-bucket-size} (default: @code{#f})
17075 Bucket size for the server names hash tables, defaults to @code{#f} to
17076 use the size of the processors cache line.
17077
17078 @item @code{server-names-hash-bucket-max-size} (default: @code{#f})
17079 Maximum bucket size for the server names hash tables.
17080
17081 @item @code{extra-content} (default: @code{""})
17082 Extra content for the @code{http} block. Should be string or a string
17083 valued G-expression.
17084
17085 @end table
17086 @end deffn
17087
17088 @deftp {Data Type} nginx-server-configuration
17089 Data type representing the configuration of an nginx server block.
17090 This type has the following parameters:
17091
17092 @table @asis
17093 @item @code{listen} (default: @code{'("80" "443 ssl")})
17094 Each @code{listen} directive sets the address and port for IP, or the
17095 path for a UNIX-domain socket on which the server will accept requests.
17096 Both address and port, or only address or only port can be specified.
17097 An address may also be a hostname, for example:
17098
17099 @example
17100 '("127.0.0.1:8000" "127.0.0.1" "8000" "*:8000" "localhost:8000")
17101 @end example
17102
17103 @item @code{server-name} (default: @code{(list 'default)})
17104 A list of server names this server represents. @code{'default} represents the
17105 default server for connections matching no other server.
17106
17107 @item @code{root} (default: @code{"/srv/http"})
17108 Root of the website nginx will serve.
17109
17110 @item @code{locations} (default: @code{'()})
17111 A list of @dfn{nginx-location-configuration} or
17112 @dfn{nginx-named-location-configuration} records to use within this
17113 server block.
17114
17115 @item @code{index} (default: @code{(list "index.html")})
17116 Index files to look for when clients ask for a directory. If it cannot be found,
17117 Nginx will send the list of files in the directory.
17118
17119 @item @code{try-files} (default: @code{'()})
17120 A list of files whose existence is checked in the specified order.
17121 @code{nginx} will use the first file it finds to process the request.
17122
17123 @item @code{ssl-certificate} (default: @code{#f})
17124 Where to find the certificate for secure connections. Set it to @code{#f} if
17125 you don't have a certificate or you don't want to use HTTPS.
17126
17127 @item @code{ssl-certificate-key} (default: @code{#f})
17128 Where to find the private key for secure connections. Set it to @code{#f} if
17129 you don't have a key or you don't want to use HTTPS.
17130
17131 @item @code{server-tokens?} (default: @code{#f})
17132 Whether the server should add its configuration to response.
17133
17134 @item @code{raw-content} (default: @code{'()})
17135 A list of raw lines added to the server block.
17136
17137 @end table
17138 @end deftp
17139
17140 @deftp {Data Type} nginx-upstream-configuration
17141 Data type representing the configuration of an nginx @code{upstream}
17142 block. This type has the following parameters:
17143
17144 @table @asis
17145 @item @code{name}
17146 Name for this group of servers.
17147
17148 @item @code{servers}
17149 Specify the addresses of the servers in the group. The address can be
17150 specified as a IP address (e.g. @samp{127.0.0.1}), domain name
17151 (e.g. @samp{backend1.example.com}) or a path to a UNIX socket using the
17152 prefix @samp{unix:}. For addresses using an IP address or domain name,
17153 the default port is 80, and a different port can be specified
17154 explicitly.
17155
17156 @end table
17157 @end deftp
17158
17159 @deftp {Data Type} nginx-location-configuration
17160 Data type representing the configuration of an nginx @code{location}
17161 block. This type has the following parameters:
17162
17163 @table @asis
17164 @item @code{uri}
17165 URI which this location block matches.
17166
17167 @anchor{nginx-location-configuration body}
17168 @item @code{body}
17169 Body of the location block, specified as a list of strings. This can contain
17170 many
17171 configuration directives. For example, to pass requests to a upstream
17172 server group defined using an @code{nginx-upstream-configuration} block,
17173 the following directive would be specified in the body @samp{(list "proxy_pass
17174 http://upstream-name;")}.
17175
17176 @end table
17177 @end deftp
17178
17179 @deftp {Data Type} nginx-named-location-configuration
17180 Data type representing the configuration of an nginx named location
17181 block. Named location blocks are used for request redirection, and not
17182 used for regular request processing. This type has the following
17183 parameters:
17184
17185 @table @asis
17186 @item @code{name}
17187 Name to identify this location block.
17188
17189 @item @code{body}
17190 @xref{nginx-location-configuration body}, as the body for named location
17191 blocks can be used in a similar way to the
17192 @code{nginx-location-configuration body}. One restriction is that the
17193 body of a named location block cannot contain location blocks.
17194
17195 @end table
17196 @end deftp
17197
17198 @subsubheading Varnish Cache
17199 @cindex Varnish
17200 Varnish is a fast cache server that sits in between web applications
17201 and end users. It proxies requests from clients and caches the
17202 accessed URLs such that multiple requests for the same resource only
17203 creates one request to the back-end.
17204
17205 @defvr {Scheme Variable} varnish-service-type
17206 Service type for the Varnish daemon.
17207 @end defvr
17208
17209 @deftp {Data Type} varnish-configuration
17210 Data type representing the @code{varnish} service configuration.
17211 This type has the following parameters:
17212
17213 @table @asis
17214 @item @code{package} (default: @code{varnish})
17215 The Varnish package to use.
17216
17217 @item @code{name} (default: @code{"default"})
17218 A name for this Varnish instance. Varnish will create a directory in
17219 @file{/var/varnish/} with this name and keep temporary files there. If
17220 the name starts with a forward slash, it is interpreted as an absolute
17221 directory name.
17222
17223 Pass the @code{-n} argument to other Varnish programs to connect to the
17224 named instance, e.g. @command{varnishncsa -n default}.
17225
17226 @item @code{backend} (default: @code{"localhost:8080"})
17227 The backend to use. This option has no effect if @code{vcl} is set.
17228
17229 @item @code{vcl} (default: #f)
17230 The @dfn{VCL} (Varnish Configuration Language) program to run. If this
17231 is @code{#f}, Varnish will proxy @code{backend} using the default
17232 configuration. Otherwise this must be a file-like object with valid
17233 VCL syntax.
17234
17235 @c Varnish does not support HTTPS, so keep this URL to avoid confusion.
17236 For example, to mirror @url{http://www.gnu.org,www.gnu.org} with VCL you
17237 can do something along these lines:
17238
17239 @example
17240 (define %gnu-mirror
17241 (plain-file
17242 "gnu.vcl"
17243 "vcl 4.1;
17244 backend gnu @{ .host = "www.gnu.org"; @}"))
17245
17246 (operating-system
17247 ...
17248 (services (cons (service varnish-service-type
17249 (varnish-configuration
17250 (listen '(":80"))
17251 (vcl %gnu-mirror)))
17252 %base-services)))
17253 @end example
17254
17255 The configuration of an already running Varnish instance can be inspected
17256 and changed using the @command{varnishadm} program.
17257
17258 Consult the @url{https://varnish-cache.org/docs/,Varnish User Guide} and
17259 @url{https://book.varnish-software.com/4.0/,Varnish Book} for
17260 comprehensive documentation on Varnish and its configuration language.
17261
17262 @item @code{listen} (default: @code{'("localhost:80")})
17263 List of addresses Varnish will listen on.
17264
17265 @item @code{storage} (default: @code{'("malloc,128m")})
17266 List of storage backends that will be available in VCL.
17267
17268 @item @code{parameters} (default: @code{'()})
17269 List of run-time parameters in the form @code{'(("parameter" . "value"))}.
17270
17271 @item @code{extra-options} (default: @code{'()})
17272 Additional arguments to pass to the @command{varnishd} process.
17273
17274 @end table
17275 @end deftp
17276
17277 @subsubheading FastCGI
17278 @cindex fastcgi
17279 @cindex fcgiwrap
17280 FastCGI is an interface between the front-end and the back-end of a web
17281 service. It is a somewhat legacy facility; new web services should
17282 generally just talk HTTP between the front-end and the back-end.
17283 However there are a number of back-end services such as PHP or the
17284 optimized HTTP Git repository access that use FastCGI, so we have
17285 support for it in Guix.
17286
17287 To use FastCGI, you configure the front-end web server (e.g., nginx) to
17288 dispatch some subset of its requests to the fastcgi backend, which
17289 listens on a local TCP or UNIX socket. There is an intermediary
17290 @code{fcgiwrap} program that sits between the actual backend process and
17291 the web server. The front-end indicates which backend program to run,
17292 passing that information to the @code{fcgiwrap} process.
17293
17294 @defvr {Scheme Variable} fcgiwrap-service-type
17295 A service type for the @code{fcgiwrap} FastCGI proxy.
17296 @end defvr
17297
17298 @deftp {Data Type} fcgiwrap-configuration
17299 Data type representing the configuration of the @code{fcgiwrap} serice.
17300 This type has the following parameters:
17301 @table @asis
17302 @item @code{package} (default: @code{fcgiwrap})
17303 The fcgiwrap package to use.
17304
17305 @item @code{socket} (default: @code{tcp:127.0.0.1:9000})
17306 The socket on which the @code{fcgiwrap} process should listen, as a
17307 string. Valid @var{socket} values include
17308 @code{unix:@var{/path/to/unix/socket}},
17309 @code{tcp:@var{dot.ted.qu.ad}:@var{port}} and
17310 @code{tcp6:[@var{ipv6_addr}]:port}.
17311
17312 @item @code{user} (default: @code{fcgiwrap})
17313 @itemx @code{group} (default: @code{fcgiwrap})
17314 The user and group names, as strings, under which to run the
17315 @code{fcgiwrap} process. The @code{fastcgi} service will ensure that if
17316 the user asks for the specific user or group names @code{fcgiwrap} that
17317 the corresponding user and/or group is present on the system.
17318
17319 It is possible to configure a FastCGI-backed web service to pass HTTP
17320 authentication information from the front-end to the back-end, and to
17321 allow @code{fcgiwrap} to run the back-end process as a corresponding
17322 local user. To enable this capability on the back-end., run
17323 @code{fcgiwrap} as the @code{root} user and group. Note that this
17324 capability also has to be configured on the front-end as well.
17325 @end table
17326 @end deftp
17327
17328 @cindex php-fpm
17329 PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI implementation
17330 with some additional features useful for sites of any size.
17331
17332 These features include:
17333 @itemize @bullet
17334 @item Adaptive process spawning
17335 @item Basic statistics (similar to Apache's mod_status)
17336 @item Advanced process management with graceful stop/start
17337 @item Ability to start workers with different uid/gid/chroot/environment
17338 and different php.ini (replaces safe_mode)
17339 @item Stdout & stderr logging
17340 @item Emergency restart in case of accidental opcode cache destruction
17341 @item Accelerated upload support
17342 @item Support for a "slowlog"
17343 @item Enhancements to FastCGI, such as fastcgi_finish_request() -
17344 a special function to finish request & flush all data while continuing to do
17345 something time-consuming (video converting, stats processing, etc.)
17346 @end itemize
17347 ... and much more.
17348
17349 @defvr {Scheme Variable} php-fpm-service-type
17350 A Service type for @code{php-fpm}.
17351 @end defvr
17352
17353 @deftp {Data Type} php-fpm-configuration
17354 Data Type for php-fpm service configuration.
17355 @table @asis
17356 @item @code{php} (default: @code{php})
17357 The php package to use.
17358 @item @code{socket} (default: @code{(string-append "/var/run/php" (version-major (package-version php)) "-fpm.sock")})
17359 The address on which to accept FastCGI requests. Valid syntaxes are:
17360 @table @asis
17361 @item @code{"ip.add.re.ss:port"}
17362 Listen on a TCP socket to a specific address on a specific port.
17363 @item @code{"port"}
17364 Listen on a TCP socket to all addresses on a specific port.
17365 @item @code{"/path/to/unix/socket"}
17366 Listen on a unix socket.
17367 @end table
17368
17369 @item @code{user} (default: @code{php-fpm})
17370 User who will own the php worker processes.
17371 @item @code{group} (default: @code{php-fpm})
17372 Group of the worker processes.
17373 @item @code{socket-user} (default: @code{php-fpm})
17374 User who can speak to the php-fpm socket.
17375 @item @code{socket-group} (default: @code{php-fpm})
17376 Group that can speak to the php-fpm socket.
17377 @item @code{pid-file} (default: @code{(string-append "/var/run/php" (version-major (package-version php)) "-fpm.pid")})
17378 The process id of the php-fpm process is written to this file
17379 once the service has started.
17380 @item @code{log-file} (default: @code{(string-append "/var/log/php" (version-major (package-version php)) "-fpm.log")})
17381 Log for the php-fpm master process.
17382 @item @code{process-manager} (default: @code{(php-fpm-dynamic-process-manager-configuration)})
17383 Detailed settings for the php-fpm process manager.
17384 Must be either:
17385 @table @asis
17386 @item @code{<php-fpm-dynamic-process-manager-configuration>}
17387 @item @code{<php-fpm-static-process-manager-configuration>}
17388 @item @code{<php-fpm-on-demand-process-manager-configuration>}
17389 @end table
17390 @item @code{display-errors} (default @code{#f})
17391 Determines whether php errors and warning should be sent to clients
17392 and displayed in their browsers.
17393 This is useful for local php development, but a security risk for public sites,
17394 as error messages can reveal passwords and personal data.
17395 @item @code{workers-logfile} (default @code{(string-append "/var/log/php" (version-major (package-version php)) "-fpm.www.log")})
17396 This file will log the @code{stderr} outputs of php worker processes.
17397 Can be set to @code{#f} to disable logging.
17398 @item @code{file} (default @code{#f})
17399 An optional override of the whole configuration.
17400 You can use the @code{mixed-text-file} function or an absolute filepath for it.
17401 @end table
17402 @end deftp
17403
17404 @deftp {Data type} php-fpm-dynamic-process-manager-configuration
17405 Data Type for the @code{dynamic} php-fpm process manager. With the
17406 @code{dynamic} process manager, spare worker processes are kept around
17407 based on it's configured limits.
17408 @table @asis
17409 @item @code{max-children} (default: @code{5})
17410 Maximum of worker processes.
17411 @item @code{start-servers} (default: @code{2})
17412 How many worker processes should be started on start-up.
17413 @item @code{min-spare-servers} (default: @code{1})
17414 How many spare worker processes should be kept around at minimum.
17415 @item @code{max-spare-servers} (default: @code{3})
17416 How many spare worker processes should be kept around at maximum.
17417 @end table
17418 @end deftp
17419
17420 @deftp {Data type} php-fpm-static-process-manager-configuration
17421 Data Type for the @code{static} php-fpm process manager. With the
17422 @code{static} process manager, an unchanging number of worker processes
17423 are created.
17424 @table @asis
17425 @item @code{max-children} (default: @code{5})
17426 Maximum of worker processes.
17427 @end table
17428 @end deftp
17429
17430 @deftp {Data type} php-fpm-on-demand-process-manager-configuration
17431 Data Type for the @code{on-demand} php-fpm process manager. With the
17432 @code{on-demand} process manager, worker processes are only created as
17433 requests arrive.
17434 @table @asis
17435 @item @code{max-children} (default: @code{5})
17436 Maximum of worker processes.
17437 @item @code{process-idle-timeout} (default: @code{10})
17438 The time in seconds after which a process with no requests is killed.
17439 @end table
17440 @end deftp
17441
17442
17443 @deffn {Scheme Procedure} nginx-php-fpm-location @
17444 [#:nginx-package nginx] @
17445 [socket (string-append "/var/run/php" @
17446 (version-major (package-version php)) @
17447 "-fpm.sock")]
17448 A helper function to quickly add php to an @code{nginx-server-configuration}.
17449 @end deffn
17450
17451 A simple services setup for nginx with php can look like this:
17452 @example
17453 (services (cons* (service dhcp-client-service-type)
17454 (service php-fpm-service-type)
17455 (service nginx-service-type
17456 (nginx-server-configuration
17457 (server-name '("example.com"))
17458 (root "/srv/http/")
17459 (locations
17460 (list (nginx-php-location)))
17461 (https-port #f)
17462 (ssl-certificate #f)
17463 (ssl-certificate-key #f)))
17464 %base-services))
17465 @end example
17466
17467 @cindex cat-avatar-generator
17468 The cat avatar generator is a simple service to demonstrate the use of php-fpm
17469 in @code{Nginx}. It is used to generate cat avatar from a seed, for instance
17470 the hash of a user's email address.
17471
17472 @deffn {Scheme Procedure} cat-avatar-generator-serice @
17473 [#:cache-dir "/var/cache/cat-avatar-generator"] @
17474 [#:package cat-avatar-generator] @
17475 [#:configuration (nginx-server-configuration)]
17476 Returns an nginx-server-configuration that inherits @code{configuration}. It
17477 extends the nginx configuration to add a server block that serves @code{package},
17478 a version of cat-avatar-generator. During execution, cat-avatar-generator will
17479 be able to use @code{cache-dir} as its cache directory.
17480 @end deffn
17481
17482 A simple setup for cat-avatar-generator can look like this:
17483 @example
17484 (services (cons* (cat-avatar-generator-service
17485 #:configuration
17486 (nginx-server-configuration
17487 (server-name '("example.com"))))
17488 ...
17489 %base-services))
17490 @end example
17491
17492 @subsubheading Hpcguix-web
17493
17494 @cindex hpcguix-web
17495 The @uref{hpcguix-web, https://github.com/UMCUGenetics/hpcguix-web/}
17496 program is a customizable web interface to browse Guix packages,
17497 initially designed for users of high-performance computing (HPC)
17498 clusters.
17499
17500 @defvr {Scheme Variable} hpcguix-web-service-type
17501 The service type for @code{hpcguix-web}.
17502 @end defvr
17503
17504 @deftp {Data Type} hpcguix-web-configuration
17505 Data type for the hpcguix-web service configuration.
17506
17507 @table @asis
17508 @item @code{specs}
17509 A gexp (@pxref{G-Expressions}) specifying the hpcguix-web service
17510 configuration. The main items available in this spec are:
17511
17512 @table @asis
17513 @item @code{title-prefix} (default: @code{"hpcguix | "})
17514 The page title prefix.
17515
17516 @item @code{guix-command} (default: @code{"guix"})
17517 The @command{guix} command.
17518
17519 @item @code{package-filter-proc} (default: @code{(const #t)})
17520 A procedure specifying how to filter packages that are displayed.
17521
17522 @item @code{package-page-extension-proc} (default: @code{(const '())})
17523 Extension package for @code{hpcguix-web}.
17524
17525 @item @code{menu} (default: @code{'()})
17526 Additional entry in page @code{menu}.
17527
17528 @item @code{channels} (default: @code{%default-channels})
17529 List of channels from which the package list is built (@pxref{Channels}).
17530
17531 @item @code{package-list-expiration} (default: @code{(* 12 3600)})
17532 The expiration time, in seconds, after which the package list is rebuilt from
17533 the latest instances of the given channels.
17534 @end table
17535
17536 See the hpcguix-web repository for a
17537 @uref{https://github.com/UMCUGenetics/hpcguix-web/blob/master/hpcweb-configuration.scm,
17538 complete example}.
17539
17540 @item @code{package} (default: @code{hpcguix-web})
17541 The hpcguix-web package to use.
17542 @end table
17543 @end deftp
17544
17545 A typical hpcguix-web service declaration looks like this:
17546
17547 @example
17548 (service hpcguix-web-service-type
17549 (hpcguix-web-configuration
17550 (specs
17551 #~(define site-config
17552 (hpcweb-configuration
17553 (title-prefix "Guix-HPC - ")
17554 (menu '(("/about" "ABOUT"))))))))
17555 @end example
17556
17557 @quotation Note
17558 The hpcguix-web service periodically updates the package list it publishes by
17559 pulling channels from Git. To that end, it needs to access X.509 certificates
17560 so that it can authenticate Git servers when communicating over HTTPS, and it
17561 assumes that @file{/etc/ssl/certs} contains those certificates.
17562
17563 Thus, make sure to add @code{nss-certs} or another certificate package to the
17564 @code{packages} field of your configuration. @ref{X.509 Certificates}, for
17565 more information on X.509 certificates.
17566 @end quotation
17567
17568 @node Certificate Services
17569 @subsubsection Certificate Services
17570
17571 @cindex Web
17572 @cindex HTTP, HTTPS
17573 @cindex Let's Encrypt
17574 @cindex TLS certificates
17575 The @code{(gnu services certbot)} module provides a service to
17576 automatically obtain a valid TLS certificate from the Let's Encrypt
17577 certificate authority. These certificates can then be used to serve
17578 content securely over HTTPS or other TLS-based protocols, with the
17579 knowledge that the client will be able to verify the server's
17580 authenticity.
17581
17582 @url{https://letsencrypt.org/, Let's Encrypt} provides the
17583 @code{certbot} tool to automate the certification process. This tool
17584 first securely generates a key on the server. It then makes a request
17585 to the Let's Encrypt certificate authority (CA) to sign the key. The CA
17586 checks that the request originates from the host in question by using a
17587 challenge-response protocol, requiring the server to provide its
17588 response over HTTP. If that protocol completes successfully, the CA
17589 signs the key, resulting in a certificate. That certificate is valid
17590 for a limited period of time, and therefore to continue to provide TLS
17591 services, the server needs to periodically ask the CA to renew its
17592 signature.
17593
17594 The certbot service automates this process: the initial key
17595 generation, the initial certification request to the Let's Encrypt
17596 service, the web server challenge/response integration, writing the
17597 certificate to disk, the automated periodic renewals, and the deployment
17598 tasks associated with the renewal (e.g. reloading services, copying keys
17599 with different permissions).
17600
17601 Certbot is run twice a day, at a random minute within the hour. It
17602 won't do anything until your certificates are due for renewal or
17603 revoked, but running it regularly would give your service a chance of
17604 staying online in case a Let's Encrypt-initiated revocation happened for
17605 some reason.
17606
17607 By using this service, you agree to the ACME Subscriber Agreement, which
17608 can be found there:
17609 @url{https://acme-v01.api.letsencrypt.org/directory}.
17610
17611 @defvr {Scheme Variable} certbot-service-type
17612 A service type for the @code{certbot} Let's Encrypt client. Its value
17613 must be a @code{certbot-configuration} record as in this example:
17614
17615 @example
17616 (define %nginx-deploy-hook
17617 (program-file
17618 "nginx-deploy-hook"
17619 #~(let ((pid (call-with-input-file "/var/run/nginx/pid" read)))
17620 (kill pid SIGHUP))))
17621
17622 (service certbot-service-type
17623 (certbot-configuration
17624 (email "foo@@example.net")
17625 (certificates
17626 (list
17627 (certificate-configuration
17628 (domains '("example.net" "www.example.net"))
17629 (deploy-hook %nginx-deploy-hook))
17630 (certificate-configuration
17631 (domains '("bar.example.net")))))))
17632 @end example
17633
17634 See below for details about @code{certbot-configuration}.
17635 @end defvr
17636
17637 @deftp {Data Type} certbot-configuration
17638 Data type representing the configuration of the @code{certbot} service.
17639 This type has the following parameters:
17640
17641 @table @asis
17642 @item @code{package} (default: @code{certbot})
17643 The certbot package to use.
17644
17645 @item @code{webroot} (default: @code{/var/www})
17646 The directory from which to serve the Let's Encrypt challenge/response
17647 files.
17648
17649 @item @code{certificates} (default: @code{()})
17650 A list of @code{certificates-configuration}s for which to generate
17651 certificates and request signatures. Each certificate has a @code{name}
17652 and several @code{domains}.
17653
17654 @item @code{email}
17655 Mandatory email used for registration, recovery contact, and important
17656 account notifications.
17657
17658 @item @code{rsa-key-size} (default: @code{2048})
17659 Size of the RSA key.
17660
17661 @item @code{default-location} (default: @i{see below})
17662 The default @code{nginx-location-configuration}. Because @code{certbot}
17663 needs to be able to serve challenges and responses, it needs to be able
17664 to run a web server. It does so by extending the @code{nginx} web
17665 service with an @code{nginx-server-configuration} listening on the
17666 @var{domains} on port 80, and which has a
17667 @code{nginx-location-configuration} for the @code{/.well-known/} URI
17668 path subspace used by Let's Encrypt. @xref{Web Services}, for more on
17669 these nginx configuration data types.
17670
17671 Requests to other URL paths will be matched by the
17672 @code{default-location}, which if present is added to all
17673 @code{nginx-server-configuration}s.
17674
17675 By default, the @code{default-location} will issue a redirect from
17676 @code{http://@var{domain}/...} to @code{https://@var{domain}/...}, leaving
17677 you to define what to serve on your site via @code{https}.
17678
17679 Pass @code{#f} to not issue a default location.
17680 @end table
17681 @end deftp
17682
17683 @deftp {Data Type} certificate-configuration
17684 Data type representing the configuration of a certificate.
17685 This type has the following parameters:
17686
17687 @table @asis
17688 @item @code{name} (default: @i{see below})
17689 This name is used by Certbot for housekeeping and in file paths; it
17690 doesn't affect the content of the certificate itself. To see
17691 certificate names, run @code{certbot certificates}.
17692
17693 Its default is the first provided domain.
17694
17695 @item @code{domains} (default: @code{()})
17696 The first domain provided will be the subject CN of the certificate, and
17697 all domains will be Subject Alternative Names on the certificate.
17698
17699 @item @code{deploy-hook} (default: @code{#f})
17700 Command to be run in a shell once for each successfully issued
17701 certificate. For this command, the shell variable
17702 @code{$RENEWED_LINEAGE} will point to the config live subdirectory (for
17703 example, @samp{"/etc/letsencrypt/live/example.com"}) containing the new
17704 certificates and keys; the shell variable @code{$RENEWED_DOMAINS} will
17705 contain a space-delimited list of renewed certificate domains (for
17706 example, @samp{"example.com www.example.com"}.
17707
17708 @end table
17709 @end deftp
17710
17711 For each @code{certificate-configuration}, the certificate is saved to
17712 @code{/etc/letsencrypt/live/@var{name}/fullchain.pem} and the key is
17713 saved to @code{/etc/letsencrypt/live/@var{name}/privkey.pem}.
17714 @node DNS Services
17715 @subsubsection DNS Services
17716 @cindex DNS (domain name system)
17717 @cindex domain name system (DNS)
17718
17719 The @code{(gnu services dns)} module provides services related to the
17720 @dfn{domain name system} (DNS). It provides a server service for hosting
17721 an @emph{authoritative} DNS server for multiple zones, slave or master.
17722 This service uses @uref{https://www.knot-dns.cz/, Knot DNS}. And also a
17723 caching and forwarding DNS server for the LAN, which uses
17724 @uref{http://www.thekelleys.org.uk/dnsmasq/doc.html, dnsmasq}.
17725
17726 @subsubheading Knot Service
17727
17728 An example configuration of an authoritative server for two zones, one master
17729 and one slave, is:
17730
17731 @lisp
17732 (define-zone-entries example.org.zone
17733 ;; Name TTL Class Type Data
17734 ("@@" "" "IN" "A" "127.0.0.1")
17735 ("@@" "" "IN" "NS" "ns")
17736 ("ns" "" "IN" "A" "127.0.0.1"))
17737
17738 (define master-zone
17739 (knot-zone-configuration
17740 (domain "example.org")
17741 (zone (zone-file
17742 (origin "example.org")
17743 (entries example.org.zone)))))
17744
17745 (define slave-zone
17746 (knot-zone-configuration
17747 (domain "plop.org")
17748 (dnssec-policy "default")
17749 (master (list "plop-master"))))
17750
17751 (define plop-master
17752 (knot-remote-configuration
17753 (id "plop-master")
17754 (address (list "208.76.58.171"))))
17755
17756 (operating-system
17757 ;; ...
17758 (services (cons* (service knot-service-type
17759 (knot-configuration
17760 (remotes (list plop-master))
17761 (zones (list master-zone slave-zone))))
17762 ;; ...
17763 %base-services)))
17764 @end lisp
17765
17766 @deffn {Scheme Variable} knot-service-type
17767 This is the type for the Knot DNS server.
17768
17769 Knot DNS is an authoritative DNS server, meaning that it can serve multiple
17770 zones, that is to say domain names you would buy from a registrar. This server
17771 is not a resolver, meaning that it can only resolve names for which it is
17772 authoritative. This server can be configured to serve zones as a master server
17773 or a slave server as a per-zone basis. Slave zones will get their data from
17774 masters, and will serve it as an authoritative server. From the point of view
17775 of a resolver, there is no difference between master and slave.
17776
17777 The following data types are used to configure the Knot DNS server:
17778 @end deffn
17779
17780 @deftp {Data Type} knot-key-configuration
17781 Data type representing a key.
17782 This type has the following parameters:
17783
17784 @table @asis
17785 @item @code{id} (default: @code{""})
17786 An identifier for other configuration fields to refer to this key. IDs must
17787 be unique and must not be empty.
17788
17789 @item @code{algorithm} (default: @code{#f})
17790 The algorithm to use. Choose between @code{#f}, @code{'hmac-md5},
17791 @code{'hmac-sha1}, @code{'hmac-sha224}, @code{'hmac-sha256}, @code{'hmac-sha384}
17792 and @code{'hmac-sha512}.
17793
17794 @item @code{secret} (default: @code{""})
17795 The secret key itself.
17796
17797 @end table
17798 @end deftp
17799
17800 @deftp {Data Type} knot-acl-configuration
17801 Data type representing an Access Control List (ACL) configuration.
17802 This type has the following parameters:
17803
17804 @table @asis
17805 @item @code{id} (default: @code{""})
17806 An identifier for ether configuration fields to refer to this key. IDs must be
17807 unique and must not be empty.
17808
17809 @item @code{address} (default: @code{'()})
17810 An ordered list of IP addresses, network subnets, or network ranges represented
17811 with strings. The query must match one of them. Empty value means that
17812 address match is not required.
17813
17814 @item @code{key} (default: @code{'()})
17815 An ordered list of references to keys represented with strings. The string
17816 must match a key ID defined in a @code{knot-key-configuration}. No key means
17817 that a key is not require to match that ACL.
17818
17819 @item @code{action} (default: @code{'()})
17820 An ordered list of actions that are permitted or forbidden by this ACL. Possible
17821 values are lists of zero or more elements from @code{'transfer}, @code{'notify}
17822 and @code{'update}.
17823
17824 @item @code{deny?} (default: @code{#f})
17825 When true, the ACL defines restrictions. Listed actions are forbidden. When
17826 false, listed actions are allowed.
17827
17828 @end table
17829 @end deftp
17830
17831 @deftp {Data Type} zone-entry
17832 Data type represnting a record entry in a zone file.
17833 This type has the following parameters:
17834
17835 @table @asis
17836 @item @code{name} (default: @code{"@@"})
17837 The name of the record. @code{"@@"} refers to the origin of the zone. Names
17838 are relative to the origin of the zone. For example, in the @code{example.org}
17839 zone, @code{"ns.example.org"} actually refers to @code{ns.example.org.example.org}.
17840 Names ending with a dot are absolute, which means that @code{"ns.example.org."}
17841 refers to @code{ns.example.org}.
17842
17843 @item @code{ttl} (default: @code{""})
17844 The Time-To-Live (TTL) of this record. If not set, the default TTL is used.
17845
17846 @item @code{class} (default: @code{"IN"})
17847 The class of the record. Knot currently supports only @code{"IN"} and
17848 partially @code{"CH"}.
17849
17850 @item @code{type} (default: @code{"A"})
17851 The type of the record. Common types include A (IPv4 address), AAAA (IPv6
17852 address), NS (Name Server) and MX (Mail eXchange). Many other types are
17853 defined.
17854
17855 @item @code{data} (default: @code{""})
17856 The data contained in the record. For instance an IP address associated with
17857 an A record, or a domain name associated with an NS record. Remember that
17858 domain names are relative to the origin unless they end with a dot.
17859
17860 @end table
17861 @end deftp
17862
17863 @deftp {Data Type} zone-file
17864 Data type representing the content of a zone file.
17865 This type has the following parameters:
17866
17867 @table @asis
17868 @item @code{entries} (default: @code{'()})
17869 The list of entries. The SOA record is taken care of, so you don't need to
17870 put it in the list of entries. This list should probably contain an entry
17871 for your primary authoritative DNS server. Other than using a list of entries
17872 directly, you can use @code{define-zone-entries} to define a object containing
17873 the list of entries more easily, that you can later pass to the @code{entries}
17874 field of the @code{zone-file}.
17875
17876 @item @code{origin} (default: @code{""})
17877 The name of your zone. This parameter cannot be empty.
17878
17879 @item @code{ns} (default: @code{"ns"})
17880 The domain of your primary authoritative DNS server. The name is relative to
17881 the origin, unless it ends with a dot. It is mandatory that this primary
17882 DNS server corresponds to an NS record in the zone and that it is associated
17883 to an IP address in the list of entries.
17884
17885 @item @code{mail} (default: @code{"hostmaster"})
17886 An email address people can contact you at, as the owner of the zone. This
17887 is translated as @code{<mail>@@<origin>}.
17888
17889 @item @code{serial} (default: @code{1})
17890 The serial number of the zone. As this is used to keep track of changes by
17891 both slaves and resolvers, it is mandatory that it @emph{never} decreases.
17892 Always increment it when you make a change in your zone.
17893
17894 @item @code{refresh} (default: @code{(* 2 24 3600)})
17895 The frequency at which slaves will do a zone transfer. This value is a number
17896 of seconds. It can be computed by multiplications or with
17897 @code{(string->duration)}.
17898
17899 @item @code{retry} (default: @code{(* 15 60)})
17900 The period after which a slave will retry to contact its master when it fails
17901 to do so a first time.
17902
17903 @item @code{expiry} (default: @code{(* 14 24 3600)})
17904 Default TTL of records. Existing records are considered correct for at most
17905 this amount of time. After this period, resolvers will invalidate their cache
17906 and check again that it still exists.
17907
17908 @item @code{nx} (default: @code{3600})
17909 Default TTL of inexistant records. This delay is usually short because you want
17910 your new domains to reach everyone quickly.
17911
17912 @end table
17913 @end deftp
17914
17915 @deftp {Data Type} knot-remote-configuration
17916 Data type representing a remote configuration.
17917 This type has the following parameters:
17918
17919 @table @asis
17920 @item @code{id} (default: @code{""})
17921 An identifier for other configuration fields to refer to this remote. IDs must
17922 be unique and must not be empty.
17923
17924 @item @code{address} (default: @code{'()})
17925 An ordered list of destination IP addresses. Addresses are tried in sequence.
17926 An optional port can be given with the @@ separator. For instance:
17927 @code{(list "1.2.3.4" "2.3.4.5@@53")}. Default port is 53.
17928
17929 @item @code{via} (default: @code{'()})
17930 An ordered list of source IP addresses. An empty list will have Knot choose
17931 an appropriate source IP. An optional port can be given with the @@ separator.
17932 The default is to choose at random.
17933
17934 @item @code{key} (default: @code{#f})
17935 A reference to a key, that is a string containing the identifier of a key
17936 defined in a @code{knot-key-configuration} field.
17937
17938 @end table
17939 @end deftp
17940
17941 @deftp {Data Type} knot-keystore-configuration
17942 Data type representing a keystore to hold dnssec keys.
17943 This type has the following parameters:
17944
17945 @table @asis
17946 @item @code{id} (default: @code{""})
17947 The id of the keystore. It must not be empty.
17948
17949 @item @code{backend} (default: @code{'pem})
17950 The backend to store the keys in. Can be @code{'pem} or @code{'pkcs11}.
17951
17952 @item @code{config} (default: @code{"/var/lib/knot/keys/keys"})
17953 The configuration string of the backend. An example for the PKCS#11 is:
17954 @code{"pkcs11:token=knot;pin-value=1234 /gnu/store/.../lib/pkcs11/libsofthsm2.so"}.
17955 For the pem backend, the string reprensents a path in the file system.
17956
17957 @end table
17958 @end deftp
17959
17960 @deftp {Data Type} knot-policy-configuration
17961 Data type representing a dnssec policy. Knot DNS is able to automatically
17962 sign your zones. It can either generate and manage your keys automatically or
17963 use keys that you generate.
17964
17965 Dnssec is usually implemented using two keys: a Key Signing Key (KSK) that is
17966 used to sign the second, and a Zone Signing Key (ZSK) that is used to sign the
17967 zone. In order to be trusted, the KSK needs to be present in the parent zone
17968 (usually a top-level domain). If your registrar supports dnssec, you will
17969 have to send them your KSK's hash so they can add a DS record in their zone.
17970 This is not automated and need to be done each time you change your KSK.
17971
17972 The policy also defines the lifetime of keys. Usually, ZSK can be changed
17973 easily and use weaker cryptographic functions (they use lower parameters) in
17974 order to sign records quickly, so they are changed often. The KSK however
17975 requires manual interaction with the registrar, so they are changed less often
17976 and use stronger parameters because they sign only one record.
17977
17978 This type has the following parameters:
17979
17980 @table @asis
17981 @item @code{id} (default: @code{""})
17982 The id of the policy. It must not be empty.
17983
17984 @item @code{keystore} (default: @code{"default"})
17985 A reference to a keystore, that is a string containing the identifier of a
17986 keystore defined in a @code{knot-keystore-configuration} field. The
17987 @code{"default"} identifier means the default keystore (a kasp database that
17988 was setup by this service).
17989
17990 @item @code{manual?} (default: @code{#f})
17991 Whether the key management is manual or automatic.
17992
17993 @item @code{single-type-signing?} (default: @code{#f})
17994 When @code{#t}, use the Single-Type Signing Scheme.
17995
17996 @item @code{algorithm} (default: @code{"ecdsap256sha256"})
17997 An algorithm of signing keys and issued signatures.
17998
17999 @item @code{ksk-size} (default: @code{256})
18000 The length of the KSK. Note that this value is correct for the default
18001 algorithm, but would be unsecure for other algorithms.
18002
18003 @item @code{zsk-size} (default: @code{256})
18004 The length of the ZSK. Note that this value is correct for the default
18005 algorithm, but would be unsecure for other algorithms.
18006
18007 @item @code{dnskey-ttl} (default: @code{'default})
18008 The TTL value for DNSKEY records added into zone apex. The special
18009 @code{'default} value means same as the zone SOA TTL.
18010
18011 @item @code{zsk-lifetime} (default: @code{(* 30 24 3600)})
18012 The period between ZSK publication and the next rollover initiation.
18013
18014 @item @code{propagation-delay} (default: @code{(* 24 3600)})
18015 An extra delay added for each key rollover step. This value should be high
18016 enough to cover propagation of data from the master server to all slaves.
18017
18018 @item @code{rrsig-lifetime} (default: @code{(* 14 24 3600)})
18019 A validity period of newly issued signatures.
18020
18021 @item @code{rrsig-refresh} (default: @code{(* 7 24 3600)})
18022 A period how long before a signature expiration the signature will be refreshed.
18023
18024 @item @code{nsec3?} (default: @code{#f})
18025 When @code{#t}, NSEC3 will be used instead of NSEC.
18026
18027 @item @code{nsec3-iterations} (default: @code{5})
18028 The number of additional times the hashing is performed.
18029
18030 @item @code{nsec3-salt-length} (default: @code{8})
18031 The length of a salt field in octets, which is appended to the original owner
18032 name before hashing.
18033
18034 @item @code{nsec3-salt-lifetime} (default: @code{(* 30 24 3600)})
18035 The validity period of newly issued salt field.
18036
18037 @end table
18038 @end deftp
18039
18040 @deftp {Data Type} knot-zone-configuration
18041 Data type representing a zone served by Knot.
18042 This type has the following parameters:
18043
18044 @table @asis
18045 @item @code{domain} (default: @code{""})
18046 The domain served by this configuration. It must not be empty.
18047
18048 @item @code{file} (default: @code{""})
18049 The file where this zone is saved. This parameter is ignored by master zones.
18050 Empty means default location that depends on the domain name.
18051
18052 @item @code{zone} (default: @code{(zone-file)})
18053 The content of the zone file. This parameter is ignored by slave zones. It
18054 must contain a zone-file record.
18055
18056 @item @code{master} (default: @code{'()})
18057 A list of master remotes. When empty, this zone is a master. When set, this
18058 zone is a slave. This is a list of remotes identifiers.
18059
18060 @item @code{ddns-master} (default: @code{#f})
18061 The main master. When empty, it defaults to the first master in the list of
18062 masters.
18063
18064 @item @code{notify} (default: @code{'()})
18065 A list of slave remote identifiers.
18066
18067 @item @code{acl} (default: @code{'()})
18068 A list of acl identifiers.
18069
18070 @item @code{semantic-checks?} (default: @code{#f})
18071 When set, this adds more semantic checks to the zone.
18072
18073 @item @code{disable-any?} (default: @code{#f})
18074 When set, this forbids queries of the ANY type.
18075
18076 @item @code{zonefile-sync} (default: @code{0})
18077 The delay between a modification in memory and on disk. 0 means immediate
18078 synchronization.
18079
18080 @item @code{serial-policy} (default: @code{'increment})
18081 A policy between @code{'increment} and @code{'unixtime}.
18082
18083 @end table
18084 @end deftp
18085
18086 @deftp {Data Type} knot-configuration
18087 Data type representing the Knot configuration.
18088 This type has the following parameters:
18089
18090 @table @asis
18091 @item @code{knot} (default: @code{knot})
18092 The Knot package.
18093
18094 @item @code{run-directory} (default: @code{"/var/run/knot"})
18095 The run directory. This directory will be used for pid file and sockets.
18096
18097 @item @code{listen-v4} (default: @code{"0.0.0.0"})
18098 An ip address on which to listen.
18099
18100 @item @code{listen-v6} (default: @code{"::"})
18101 An ip address on which to listen.
18102
18103 @item @code{listen-port} (default: @code{53})
18104 A port on which to listen.
18105
18106 @item @code{keys} (default: @code{'()})
18107 The list of knot-key-configuration used by this configuration.
18108
18109 @item @code{acls} (default: @code{'()})
18110 The list of knot-acl-configuration used by this configuration.
18111
18112 @item @code{remotes} (default: @code{'()})
18113 The list of knot-remote-configuration used by this configuration.
18114
18115 @item @code{zones} (default: @code{'()})
18116 The list of knot-zone-configuration used by this configuration.
18117
18118 @end table
18119 @end deftp
18120
18121 @subsubheading Dnsmasq Service
18122
18123 @deffn {Scheme Variable} dnsmasq-service-type
18124 This is the type of the dnsmasq service, whose value should be an
18125 @code{dnsmasq-configuration} object as in this example:
18126
18127 @example
18128 (service dnsmasq-service-type
18129 (dnsmasq-configuration
18130 (no-resolv? #t)
18131 (servers '("192.168.1.1"))))
18132 @end example
18133 @end deffn
18134
18135 @deftp {Data Type} dnsmasq-configuration
18136 Data type representing the configuration of dnsmasq.
18137
18138 @table @asis
18139 @item @code{package} (default: @var{dnsmasq})
18140 Package object of the dnsmasq server.
18141
18142 @item @code{no-hosts?} (default: @code{#f})
18143 When true, don't read the hostnames in /etc/hosts.
18144
18145 @item @code{port} (default: @code{53})
18146 The port to listen on. Setting this to zero completely disables DNS
18147 responses, leaving only DHCP and/or TFTP functions.
18148
18149 @item @code{local-service?} (default: @code{#t})
18150 Accept DNS queries only from hosts whose address is on a local subnet,
18151 ie a subnet for which an interface exists on the server.
18152
18153 @item @code{listen-addresses} (default: @code{'()})
18154 Listen on the given IP addresses.
18155
18156 @item @code{resolv-file} (default: @code{"/etc/resolv.conf"})
18157 The file to read the IP address of the upstream nameservers from.
18158
18159 @item @code{no-resolv?} (default: @code{#f})
18160 When true, don't read @var{resolv-file}.
18161
18162 @item @code{servers} (default: @code{'()})
18163 Specify IP address of upstream servers directly.
18164
18165 @item @code{cache-size} (default: @code{150})
18166 Set the size of dnsmasq's cache. Setting the cache size to zero
18167 disables caching.
18168
18169 @item @code{negative-cache?} (default: @code{#t})
18170 When false, disable negative caching.
18171
18172 @end table
18173 @end deftp
18174
18175 @subsubheading ddclient Service
18176
18177 @cindex ddclient
18178 The ddclient service described below runs the ddclient daemon, which takes
18179 care of automatically updating DNS entries for service providers such as
18180 @uref{https://dyn.com/dns/, Dyn}.
18181
18182 The following example show instantiates the service with its default
18183 configuration:
18184
18185 @example
18186 (service ddclient-service-type)
18187 @end example
18188
18189 Note that ddclient needs to access credentials that are stored in a
18190 @dfn{secret file}, by default @file{/etc/ddclient/secrets} (see
18191 @code{secret-file} below.) You are expected to create this file manually, in
18192 an ``out-of-band'' fashion (you @emph{could} make this file part of the
18193 service configuration, for instance by using @code{plain-file}, but it will be
18194 world-readable @i{via} @file{/gnu/store}.) See the examples in the
18195 @file{share/ddclient} directory of the @code{ddclient} package.
18196
18197 @c %start of fragment
18198
18199 Available @code{ddclient-configuration} fields are:
18200
18201 @deftypevr {@code{ddclient-configuration} parameter} package ddclient
18202 The ddclient package.
18203
18204 @end deftypevr
18205
18206 @deftypevr {@code{ddclient-configuration} parameter} integer daemon
18207 The period after which ddclient will retry to check IP and domain name.
18208
18209 Defaults to @samp{300}.
18210
18211 @end deftypevr
18212
18213 @deftypevr {@code{ddclient-configuration} parameter} boolean syslog
18214 Use syslog for the output.
18215
18216 Defaults to @samp{#t}.
18217
18218 @end deftypevr
18219
18220 @deftypevr {@code{ddclient-configuration} parameter} string mail
18221 Mail to user.
18222
18223 Defaults to @samp{"root"}.
18224
18225 @end deftypevr
18226
18227 @deftypevr {@code{ddclient-configuration} parameter} string mail-failure
18228 Mail failed update to user.
18229
18230 Defaults to @samp{"root"}.
18231
18232 @end deftypevr
18233
18234 @deftypevr {@code{ddclient-configuration} parameter} string pid
18235 The ddclient PID file.
18236
18237 Defaults to @samp{"/var/run/ddclient/ddclient.pid"}.
18238
18239 @end deftypevr
18240
18241 @deftypevr {@code{ddclient-configuration} parameter} boolean ssl
18242 Enable SSL support.
18243
18244 Defaults to @samp{#t}.
18245
18246 @end deftypevr
18247
18248 @deftypevr {@code{ddclient-configuration} parameter} string user
18249 Specifies the user name or ID that is used when running ddclient
18250 program.
18251
18252 Defaults to @samp{"ddclient"}.
18253
18254 @end deftypevr
18255
18256 @deftypevr {@code{ddclient-configuration} parameter} string group
18257 Group of the user who will run the ddclient program.
18258
18259 Defaults to @samp{"ddclient"}.
18260
18261 @end deftypevr
18262
18263 @deftypevr {@code{ddclient-configuration} parameter} string secret-file
18264 Secret file which will be appended to @file{ddclient.conf} file. This
18265 file contains credentials for use by ddclient. You are expected to
18266 create it manually.
18267
18268 Defaults to @samp{"/etc/ddclient/secrets.conf"}.
18269
18270 @end deftypevr
18271
18272 @deftypevr {@code{ddclient-configuration} parameter} list extra-options
18273 Extra options will be appended to @file{ddclient.conf} file.
18274
18275 Defaults to @samp{()}.
18276
18277 @end deftypevr
18278
18279
18280 @c %end of fragment
18281
18282
18283 @node VPN Services
18284 @subsubsection VPN Services
18285 @cindex VPN (virtual private network)
18286 @cindex virtual private network (VPN)
18287
18288 The @code{(gnu services vpn)} module provides services related to
18289 @dfn{virtual private networks} (VPNs). It provides a @emph{client} service for
18290 your machine to connect to a VPN, and a @emph{servire} service for your machine
18291 to host a VPN. Both services use @uref{https://openvpn.net/, OpenVPN}.
18292
18293 @deffn {Scheme Procedure} openvpn-client-service @
18294 [#:config (openvpn-client-configuration)]
18295
18296 Return a service that runs @command{openvpn}, a VPN daemon, as a client.
18297 @end deffn
18298
18299 @deffn {Scheme Procedure} openvpn-server-service @
18300 [#:config (openvpn-server-configuration)]
18301
18302 Return a service that runs @command{openvpn}, a VPN daemon, as a server.
18303
18304 Both can be run simultaneously.
18305 @end deffn
18306
18307 @c %automatically generated documentation
18308
18309 Available @code{openvpn-client-configuration} fields are:
18310
18311 @deftypevr {@code{openvpn-client-configuration} parameter} package openvpn
18312 The OpenVPN package.
18313
18314 @end deftypevr
18315
18316 @deftypevr {@code{openvpn-client-configuration} parameter} string pid-file
18317 The OpenVPN pid file.
18318
18319 Defaults to @samp{"/var/run/openvpn/openvpn.pid"}.
18320
18321 @end deftypevr
18322
18323 @deftypevr {@code{openvpn-client-configuration} parameter} proto proto
18324 The protocol (UDP or TCP) used to open a channel between clients and
18325 servers.
18326
18327 Defaults to @samp{udp}.
18328
18329 @end deftypevr
18330
18331 @deftypevr {@code{openvpn-client-configuration} parameter} dev dev
18332 The device type used to represent the VPN connection.
18333
18334 Defaults to @samp{tun}.
18335
18336 @end deftypevr
18337
18338 @deftypevr {@code{openvpn-client-configuration} parameter} string ca
18339 The certificate authority to check connections against.
18340
18341 Defaults to @samp{"/etc/openvpn/ca.crt"}.
18342
18343 @end deftypevr
18344
18345 @deftypevr {@code{openvpn-client-configuration} parameter} string cert
18346 The certificate of the machine the daemon is running on. It should be
18347 signed by the authority given in @code{ca}.
18348
18349 Defaults to @samp{"/etc/openvpn/client.crt"}.
18350
18351 @end deftypevr
18352
18353 @deftypevr {@code{openvpn-client-configuration} parameter} string key
18354 The key of the machine the daemon is running on. It must be the key whose
18355 certificate is @code{cert}.
18356
18357 Defaults to @samp{"/etc/openvpn/client.key"}.
18358
18359 @end deftypevr
18360
18361 @deftypevr {@code{openvpn-client-configuration} parameter} boolean comp-lzo?
18362 Whether to use the lzo compression algorithm.
18363
18364 Defaults to @samp{#t}.
18365
18366 @end deftypevr
18367
18368 @deftypevr {@code{openvpn-client-configuration} parameter} boolean persist-key?
18369 Don't re-read key files across SIGUSR1 or --ping-restart.
18370
18371 Defaults to @samp{#t}.
18372
18373 @end deftypevr
18374
18375 @deftypevr {@code{openvpn-client-configuration} parameter} boolean persist-tun?
18376 Don't close and reopen TUN/TAP device or run up/down scripts across
18377 SIGUSR1 or --ping-restart restarts.
18378
18379 Defaults to @samp{#t}.
18380
18381 @end deftypevr
18382
18383 @deftypevr {@code{openvpn-client-configuration} parameter} number verbosity
18384 Verbosity level.
18385
18386 Defaults to @samp{3}.
18387
18388 @end deftypevr
18389
18390 @deftypevr {@code{openvpn-client-configuration} parameter} tls-auth-client tls-auth
18391 Add an additional layer of HMAC authentication on top of the TLS control
18392 channel to protect against DoS attacks.
18393
18394 Defaults to @samp{#f}.
18395
18396 @end deftypevr
18397
18398 @deftypevr {@code{openvpn-client-configuration} parameter} key-usage verify-key-usage?
18399 Whether to check the server certificate has server usage extension.
18400
18401 Defaults to @samp{#t}.
18402
18403 @end deftypevr
18404
18405 @deftypevr {@code{openvpn-client-configuration} parameter} bind bind?
18406 Bind to a specific local port number.
18407
18408 Defaults to @samp{#f}.
18409
18410 @end deftypevr
18411
18412 @deftypevr {@code{openvpn-client-configuration} parameter} resolv-retry resolv-retry?
18413 Retry resolving server address.
18414
18415 Defaults to @samp{#t}.
18416
18417 @end deftypevr
18418
18419 @deftypevr {@code{openvpn-client-configuration} parameter} openvpn-remote-list remote
18420 A list of remote servers to connect to.
18421
18422 Defaults to @samp{()}.
18423
18424 Available @code{openvpn-remote-configuration} fields are:
18425
18426 @deftypevr {@code{openvpn-remote-configuration} parameter} string name
18427 Server name.
18428
18429 Defaults to @samp{"my-server"}.
18430
18431 @end deftypevr
18432
18433 @deftypevr {@code{openvpn-remote-configuration} parameter} number port
18434 Port number the server listens to.
18435
18436 Defaults to @samp{1194}.
18437
18438 @end deftypevr
18439
18440 @end deftypevr
18441 @c %end of automatic openvpn-client documentation
18442
18443 @c %automatically generated documentation
18444
18445 Available @code{openvpn-server-configuration} fields are:
18446
18447 @deftypevr {@code{openvpn-server-configuration} parameter} package openvpn
18448 The OpenVPN package.
18449
18450 @end deftypevr
18451
18452 @deftypevr {@code{openvpn-server-configuration} parameter} string pid-file
18453 The OpenVPN pid file.
18454
18455 Defaults to @samp{"/var/run/openvpn/openvpn.pid"}.
18456
18457 @end deftypevr
18458
18459 @deftypevr {@code{openvpn-server-configuration} parameter} proto proto
18460 The protocol (UDP or TCP) used to open a channel between clients and
18461 servers.
18462
18463 Defaults to @samp{udp}.
18464
18465 @end deftypevr
18466
18467 @deftypevr {@code{openvpn-server-configuration} parameter} dev dev
18468 The device type used to represent the VPN connection.
18469
18470 Defaults to @samp{tun}.
18471
18472 @end deftypevr
18473
18474 @deftypevr {@code{openvpn-server-configuration} parameter} string ca
18475 The certificate authority to check connections against.
18476
18477 Defaults to @samp{"/etc/openvpn/ca.crt"}.
18478
18479 @end deftypevr
18480
18481 @deftypevr {@code{openvpn-server-configuration} parameter} string cert
18482 The certificate of the machine the daemon is running on. It should be
18483 signed by the authority given in @code{ca}.
18484
18485 Defaults to @samp{"/etc/openvpn/client.crt"}.
18486
18487 @end deftypevr
18488
18489 @deftypevr {@code{openvpn-server-configuration} parameter} string key
18490 The key of the machine the daemon is running on. It must be the key whose
18491 certificate is @code{cert}.
18492
18493 Defaults to @samp{"/etc/openvpn/client.key"}.
18494
18495 @end deftypevr
18496
18497 @deftypevr {@code{openvpn-server-configuration} parameter} boolean comp-lzo?
18498 Whether to use the lzo compression algorithm.
18499
18500 Defaults to @samp{#t}.
18501
18502 @end deftypevr
18503
18504 @deftypevr {@code{openvpn-server-configuration} parameter} boolean persist-key?
18505 Don't re-read key files across SIGUSR1 or --ping-restart.
18506
18507 Defaults to @samp{#t}.
18508
18509 @end deftypevr
18510
18511 @deftypevr {@code{openvpn-server-configuration} parameter} boolean persist-tun?
18512 Don't close and reopen TUN/TAP device or run up/down scripts across
18513 SIGUSR1 or --ping-restart restarts.
18514
18515 Defaults to @samp{#t}.
18516
18517 @end deftypevr
18518
18519 @deftypevr {@code{openvpn-server-configuration} parameter} number verbosity
18520 Verbosity level.
18521
18522 Defaults to @samp{3}.
18523
18524 @end deftypevr
18525
18526 @deftypevr {@code{openvpn-server-configuration} parameter} tls-auth-server tls-auth
18527 Add an additional layer of HMAC authentication on top of the TLS control
18528 channel to protect against DoS attacks.
18529
18530 Defaults to @samp{#f}.
18531
18532 @end deftypevr
18533
18534 @deftypevr {@code{openvpn-server-configuration} parameter} number port
18535 Specifies the port number on which the server listens.
18536
18537 Defaults to @samp{1194}.
18538
18539 @end deftypevr
18540
18541 @deftypevr {@code{openvpn-server-configuration} parameter} ip-mask server
18542 An ip and mask specifying the subnet inside the virtual network.
18543
18544 Defaults to @samp{"10.8.0.0 255.255.255.0"}.
18545
18546 @end deftypevr
18547
18548 @deftypevr {@code{openvpn-server-configuration} parameter} cidr6 server-ipv6
18549 A CIDR notation specifying the IPv6 subnet inside the virtual network.
18550
18551 Defaults to @samp{#f}.
18552
18553 @end deftypevr
18554
18555 @deftypevr {@code{openvpn-server-configuration} parameter} string dh
18556 The Diffie-Hellman parameters file.
18557
18558 Defaults to @samp{"/etc/openvpn/dh2048.pem"}.
18559
18560 @end deftypevr
18561
18562 @deftypevr {@code{openvpn-server-configuration} parameter} string ifconfig-pool-persist
18563 The file that records client IPs.
18564
18565 Defaults to @samp{"/etc/openvpn/ipp.txt"}.
18566
18567 @end deftypevr
18568
18569 @deftypevr {@code{openvpn-server-configuration} parameter} gateway redirect-gateway?
18570 When true, the server will act as a gateway for its clients.
18571
18572 Defaults to @samp{#f}.
18573
18574 @end deftypevr
18575
18576 @deftypevr {@code{openvpn-server-configuration} parameter} boolean client-to-client?
18577 When true, clients are allowed to talk to each other inside the VPN.
18578
18579 Defaults to @samp{#f}.
18580
18581 @end deftypevr
18582
18583 @deftypevr {@code{openvpn-server-configuration} parameter} keepalive keepalive
18584 Causes ping-like messages to be sent back and forth over the link so
18585 that each side knows when the other side has gone down. @code{keepalive}
18586 requires a pair. The first element is the period of the ping sending,
18587 and the second element is the timeout before considering the other side
18588 down.
18589
18590 @end deftypevr
18591
18592 @deftypevr {@code{openvpn-server-configuration} parameter} number max-clients
18593 The maximum number of clients.
18594
18595 Defaults to @samp{100}.
18596
18597 @end deftypevr
18598
18599 @deftypevr {@code{openvpn-server-configuration} parameter} string status
18600 The status file. This file shows a small report on current connection.
18601 It is truncated and rewritten every minute.
18602
18603 Defaults to @samp{"/var/run/openvpn/status"}.
18604
18605 @end deftypevr
18606
18607 @deftypevr {@code{openvpn-server-configuration} parameter} openvpn-ccd-list client-config-dir
18608 The list of configuration for some clients.
18609
18610 Defaults to @samp{()}.
18611
18612 Available @code{openvpn-ccd-configuration} fields are:
18613
18614 @deftypevr {@code{openvpn-ccd-configuration} parameter} string name
18615 Client name.
18616
18617 Defaults to @samp{"client"}.
18618
18619 @end deftypevr
18620
18621 @deftypevr {@code{openvpn-ccd-configuration} parameter} ip-mask iroute
18622 Client own network
18623
18624 Defaults to @samp{#f}.
18625
18626 @end deftypevr
18627
18628 @deftypevr {@code{openvpn-ccd-configuration} parameter} ip-mask ifconfig-push
18629 Client VPN IP.
18630
18631 Defaults to @samp{#f}.
18632
18633 @end deftypevr
18634
18635 @end deftypevr
18636
18637
18638 @c %end of automatic openvpn-server documentation
18639
18640
18641 @node Network File System
18642 @subsubsection Network File System
18643 @cindex NFS
18644
18645 The @code{(gnu services nfs)} module provides the following services,
18646 which are most commonly used in relation to mounting or exporting
18647 directory trees as @dfn{network file systems} (NFS).
18648
18649 @subsubheading RPC Bind Service
18650 @cindex rpcbind
18651
18652 The RPC Bind service provides a facility to map program numbers into
18653 universal addresses.
18654 Many NFS related services use this facility. Hence it is automatically
18655 started when a dependent service starts.
18656
18657 @defvr {Scheme Variable} rpcbind-service-type
18658 A service type for the RPC portmapper daemon.
18659 @end defvr
18660
18661
18662 @deftp {Data Type} rpcbind-configuration
18663 Data type representing the configuration of the RPC Bind Service.
18664 This type has the following parameters:
18665 @table @asis
18666 @item @code{rpcbind} (default: @code{rpcbind})
18667 The rpcbind package to use.
18668
18669 @item @code{warm-start?} (default: @code{#t})
18670 If this parameter is @code{#t}, then the daemon will read a
18671 state file on startup thus reloading state information saved by a previous
18672 instance.
18673 @end table
18674 @end deftp
18675
18676
18677 @subsubheading Pipefs Pseudo File System
18678 @cindex pipefs
18679 @cindex rpc_pipefs
18680
18681 The pipefs file system is used to transfer NFS related data
18682 between the kernel and user space programs.
18683
18684 @defvr {Scheme Variable} pipefs-service-type
18685 A service type for the pipefs pseudo file system.
18686 @end defvr
18687
18688 @deftp {Data Type} pipefs-configuration
18689 Data type representing the configuration of the pipefs pseudo file system service.
18690 This type has the following parameters:
18691 @table @asis
18692 @item @code{mount-point} (default: @code{"/var/lib/nfs/rpc_pipefs"})
18693 The directory to which the file system is to be attached.
18694 @end table
18695 @end deftp
18696
18697
18698 @subsubheading GSS Daemon Service
18699 @cindex GSSD
18700 @cindex GSS
18701 @cindex global security system
18702
18703 The @dfn{global security system} (GSS) daemon provides strong security for RPC
18704 based protocols.
18705 Before exchanging RPC requests an RPC client must establish a security
18706 context. Typically this is done using the Kerberos command @command{kinit}
18707 or automatically at login time using PAM services (@pxref{Kerberos Services}).
18708
18709 @defvr {Scheme Variable} gss-service-type
18710 A service type for the Global Security System (GSS) daemon.
18711 @end defvr
18712
18713 @deftp {Data Type} gss-configuration
18714 Data type representing the configuration of the GSS daemon service.
18715 This type has the following parameters:
18716 @table @asis
18717 @item @code{nfs-utils} (default: @code{nfs-utils})
18718 The package in which the @command{rpc.gssd} command is to be found.
18719
18720 @item @code{pipefs-directory} (default: @code{"/var/lib/nfs/rpc_pipefs"})
18721 The directory where the pipefs file system is mounted.
18722
18723 @end table
18724 @end deftp
18725
18726
18727 @subsubheading IDMAP Daemon Service
18728 @cindex idmapd
18729 @cindex name mapper
18730
18731 The idmap daemon service provides mapping between user IDs and user names.
18732 Typically it is required in order to access file systems mounted via NFSv4.
18733
18734 @defvr {Scheme Variable} idmap-service-type
18735 A service type for the Identity Mapper (IDMAP) daemon.
18736 @end defvr
18737
18738 @deftp {Data Type} idmap-configuration
18739 Data type representing the configuration of the IDMAP daemon service.
18740 This type has the following parameters:
18741 @table @asis
18742 @item @code{nfs-utils} (default: @code{nfs-utils})
18743 The package in which the @command{rpc.idmapd} command is to be found.
18744
18745 @item @code{pipefs-directory} (default: @code{"/var/lib/nfs/rpc_pipefs"})
18746 The directory where the pipefs file system is mounted.
18747
18748 @item @code{domain} (default: @code{#f})
18749 The local NFSv4 domain name.
18750 This must be a string or @code{#f}.
18751 If it is @code{#f} then the daemon will use the host's fully qualified domain name.
18752
18753 @end table
18754 @end deftp
18755
18756 @node Continuous Integration
18757 @subsubsection Continuous Integration
18758
18759 @cindex continuous integration
18760 @uref{https://git.savannah.gnu.org/cgit/guix/guix-cuirass.git, Cuirass} is a
18761 continuous integration tool for Guix. It can be used both for development and
18762 for providing substitutes to others (@pxref{Substitutes}).
18763
18764 The @code{(gnu services cuirass)} module provides the following service.
18765
18766 @defvr {Scheme Procedure} cuirass-service-type
18767 The type of the Cuirass service. Its value must be a
18768 @code{cuirass-configuration} object, as described below.
18769 @end defvr
18770
18771 To add build jobs, you have to set the @code{specifications} field of the
18772 configuration. Here is an example of a service that polls the Guix repository
18773 and builds the packages from a manifest. Some of the packages are defined in
18774 the @code{"custom-packages"} input, which is the equivalent of
18775 @code{GUIX_PACKAGE_PATH}.
18776
18777 @example
18778 (define %cuirass-specs
18779 #~(list
18780 '((#:name . "my-manifest")
18781 (#:load-path-inputs . ("guix"))
18782 (#:package-path-inputs . ("custom-packages"))
18783 (#:proc-input . "guix")
18784 (#:proc-file . "build-aux/cuirass/gnu-system.scm")
18785 (#:proc . cuirass-jobs)
18786 (#:proc-args . ((subset . "manifests")
18787 (systems . ("x86_64-linux"))
18788 (manifests . (("config" . "guix/manifest.scm")))))
18789 (#:inputs . (((#:name . "guix")
18790 (#:url . "git://git.savannah.gnu.org/guix.git")
18791 (#:load-path . ".")
18792 (#:branch . "master")
18793 (#:no-compile? . #t))
18794 ((#:name . "config")
18795 (#:url . "git://git.example.org/config.git")
18796 (#:load-path . ".")
18797 (#:branch . "master")
18798 (#:no-compile? . #t))
18799 ((#:name . "custom-packages")
18800 (#:url . "git://git.example.org/custom-packages.git")
18801 (#:load-path . ".")
18802 (#:branch . "master")
18803 (#:no-compile? . #t)))))))
18804
18805 (service cuirass-service-type
18806 (cuirass-configuration
18807 (specifications %cuirass-specs)))
18808 @end example
18809
18810 While information related to build jobs is located directly in the
18811 specifications, global settings for the @command{cuirass} process are
18812 accessible in other @code{cuirass-configuration} fields.
18813
18814 @deftp {Data Type} cuirass-configuration
18815 Data type representing the configuration of Cuirass.
18816
18817 @table @asis
18818 @item @code{log-file} (default: @code{"/var/log/cuirass.log"})
18819 Location of the log file.
18820
18821 @item @code{cache-directory} (default: @code{"/var/cache/cuirass"})
18822 Location of the repository cache.
18823
18824 @item @code{user} (default: @code{"cuirass"})
18825 Owner of the @code{cuirass} process.
18826
18827 @item @code{group} (default: @code{"cuirass"})
18828 Owner's group of the @code{cuirass} process.
18829
18830 @item @code{interval} (default: @code{60})
18831 Number of seconds between the poll of the repositories followed by the
18832 Cuirass jobs.
18833
18834 @item @code{database} (default: @code{"/var/lib/cuirass/cuirass.db"})
18835 Location of sqlite database which contains the build results and previously
18836 added specifications.
18837
18838 @item @code{ttl} (default: @code{(* 30 24 3600)})
18839 Specifies the time-to-live (TTL) in seconds of garbage collector roots that
18840 are registered for build results. This means that build results are protected
18841 from garbage collection for at least @var{ttl} seconds.
18842
18843 @item @code{port} (default: @code{8081})
18844 Port number used by the HTTP server.
18845
18846 @item --listen=@var{host}
18847 Listen on the network interface for @var{host}. The default is to
18848 accept connections from localhost.
18849
18850 @item @code{specifications} (default: @code{#~'()})
18851 A gexp (@pxref{G-Expressions}) that evaluates to a list of specifications,
18852 where a specification is an association list
18853 (@pxref{Associations Lists,,, guile, GNU Guile Reference Manual}) whose
18854 keys are keywords (@code{#:keyword-example}) as shown in the example
18855 above.
18856
18857 @item @code{use-substitutes?} (default: @code{#f})
18858 This allows using substitutes to avoid building every dependencies of a job
18859 from source.
18860
18861 @item @code{one-shot?} (default: @code{#f})
18862 Only evaluate specifications and build derivations once.
18863
18864 @item @code{fallback?} (default: @code{#f})
18865 When substituting a pre-built binary fails, fall back to building
18866 packages locally.
18867
18868 @item @code{cuirass} (default: @code{cuirass})
18869 The Cuirass package to use.
18870 @end table
18871 @end deftp
18872
18873 @node Power Management Services
18874 @subsubsection Power Management Services
18875
18876 @cindex tlp
18877 @cindex power management with TLP
18878 @subsubheading TLP daemon
18879
18880 The @code{(gnu services pm)} module provides a Guix service definition
18881 for the Linux power management tool TLP.
18882
18883 TLP enables various powersaving modes in userspace and kernel.
18884 Contrary to @code{upower-service}, it is not a passive,
18885 monitoring tool, as it will apply custom settings each time a new power
18886 source is detected. More information can be found at
18887 @uref{http://linrunner.de/en/tlp/tlp.html, TLP home page}.
18888
18889 @deffn {Scheme Variable} tlp-service-type
18890 The service type for the TLP tool. Its value should be a valid
18891 TLP configuration (see below). To use the default settings, simply
18892 write:
18893 @example
18894 (service tlp-service-type)
18895 @end example
18896 @end deffn
18897
18898 By default TLP does not need much configuration but most TLP parameters
18899 can be tweaked using @code{tlp-configuration}.
18900
18901 Each parameter definition is preceded by its type; for example,
18902 @samp{boolean foo} indicates that the @code{foo} parameter
18903 should be specified as a boolean. Types starting with
18904 @code{maybe-} denote parameters that won't show up in TLP config file
18905 when their value is @code{'disabled}.
18906
18907 @c The following documentation was initially generated by
18908 @c (generate-tlp-documentation) in (gnu services pm). Manually maintained
18909 @c documentation is better, so we shouldn't hesitate to edit below as
18910 @c needed. However if the change you want to make to this documentation
18911 @c can be done in an automated way, it's probably easier to change
18912 @c (generate-documentation) than to make it below and have to deal with
18913 @c the churn as TLP updates.
18914
18915 Available @code{tlp-configuration} fields are:
18916
18917 @deftypevr {@code{tlp-configuration} parameter} package tlp
18918 The TLP package.
18919
18920 @end deftypevr
18921
18922 @deftypevr {@code{tlp-configuration} parameter} boolean tlp-enable?
18923 Set to true if you wish to enable TLP.
18924
18925 Defaults to @samp{#t}.
18926
18927 @end deftypevr
18928
18929 @deftypevr {@code{tlp-configuration} parameter} string tlp-default-mode
18930 Default mode when no power supply can be detected. Alternatives are AC
18931 and BAT.
18932
18933 Defaults to @samp{"AC"}.
18934
18935 @end deftypevr
18936
18937 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer disk-idle-secs-on-ac
18938 Number of seconds Linux kernel has to wait after the disk goes idle,
18939 before syncing on AC.
18940
18941 Defaults to @samp{0}.
18942
18943 @end deftypevr
18944
18945 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer disk-idle-secs-on-bat
18946 Same as @code{disk-idle-ac} but on BAT mode.
18947
18948 Defaults to @samp{2}.
18949
18950 @end deftypevr
18951
18952 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer max-lost-work-secs-on-ac
18953 Dirty pages flushing periodicity, expressed in seconds.
18954
18955 Defaults to @samp{15}.
18956
18957 @end deftypevr
18958
18959 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer max-lost-work-secs-on-bat
18960 Same as @code{max-lost-work-secs-on-ac} but on BAT mode.
18961
18962 Defaults to @samp{60}.
18963
18964 @end deftypevr
18965
18966 @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list cpu-scaling-governor-on-ac
18967 CPU frequency scaling governor on AC mode. With intel_pstate driver,
18968 alternatives are powersave and performance. With acpi-cpufreq driver,
18969 alternatives are ondemand, powersave, performance and conservative.
18970
18971 Defaults to @samp{disabled}.
18972
18973 @end deftypevr
18974
18975 @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list cpu-scaling-governor-on-bat
18976 Same as @code{cpu-scaling-governor-on-ac} but on BAT mode.
18977
18978 Defaults to @samp{disabled}.
18979
18980 @end deftypevr
18981
18982 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-min-freq-on-ac
18983 Set the min available frequency for the scaling governor on AC.
18984
18985 Defaults to @samp{disabled}.
18986
18987 @end deftypevr
18988
18989 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-max-freq-on-ac
18990 Set the max available frequency for the scaling governor on AC.
18991
18992 Defaults to @samp{disabled}.
18993
18994 @end deftypevr
18995
18996 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-min-freq-on-bat
18997 Set the min available frequency for the scaling governor on BAT.
18998
18999 Defaults to @samp{disabled}.
19000
19001 @end deftypevr
19002
19003 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-max-freq-on-bat
19004 Set the max available frequency for the scaling governor on BAT.
19005
19006 Defaults to @samp{disabled}.
19007
19008 @end deftypevr
19009
19010 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-min-perf-on-ac
19011 Limit the min P-state to control the power dissipation of the CPU, in AC
19012 mode. Values are stated as a percentage of the available performance.
19013
19014 Defaults to @samp{disabled}.
19015
19016 @end deftypevr
19017
19018 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-max-perf-on-ac
19019 Limit the max P-state to control the power dissipation of the CPU, in AC
19020 mode. Values are stated as a percentage of the available performance.
19021
19022 Defaults to @samp{disabled}.
19023
19024 @end deftypevr
19025
19026 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-min-perf-on-bat
19027 Same as @code{cpu-min-perf-on-ac} on BAT mode.
19028
19029 Defaults to @samp{disabled}.
19030
19031 @end deftypevr
19032
19033 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-max-perf-on-bat
19034 Same as @code{cpu-max-perf-on-ac} on BAT mode.
19035
19036 Defaults to @samp{disabled}.
19037
19038 @end deftypevr
19039
19040 @deftypevr {@code{tlp-configuration} parameter} maybe-boolean cpu-boost-on-ac?
19041 Enable CPU turbo boost feature on AC mode.
19042
19043 Defaults to @samp{disabled}.
19044
19045 @end deftypevr
19046
19047 @deftypevr {@code{tlp-configuration} parameter} maybe-boolean cpu-boost-on-bat?
19048 Same as @code{cpu-boost-on-ac?} on BAT mode.
19049
19050 Defaults to @samp{disabled}.
19051
19052 @end deftypevr
19053
19054 @deftypevr {@code{tlp-configuration} parameter} boolean sched-powersave-on-ac?
19055 Allow Linux kernel to minimize the number of CPU cores/hyper-threads
19056 used under light load conditions.
19057
19058 Defaults to @samp{#f}.
19059
19060 @end deftypevr
19061
19062 @deftypevr {@code{tlp-configuration} parameter} boolean sched-powersave-on-bat?
19063 Same as @code{sched-powersave-on-ac?} but on BAT mode.
19064
19065 Defaults to @samp{#t}.
19066
19067 @end deftypevr
19068
19069 @deftypevr {@code{tlp-configuration} parameter} boolean nmi-watchdog?
19070 Enable Linux kernel NMI watchdog.
19071
19072 Defaults to @samp{#f}.
19073
19074 @end deftypevr
19075
19076 @deftypevr {@code{tlp-configuration} parameter} maybe-string phc-controls
19077 For Linux kernels with PHC patch applied, change CPU voltages. An
19078 example value would be @samp{"F:V F:V F:V F:V"}.
19079
19080 Defaults to @samp{disabled}.
19081
19082 @end deftypevr
19083
19084 @deftypevr {@code{tlp-configuration} parameter} string energy-perf-policy-on-ac
19085 Set CPU performance versus energy saving policy on AC. Alternatives are
19086 performance, normal, powersave.
19087
19088 Defaults to @samp{"performance"}.
19089
19090 @end deftypevr
19091
19092 @deftypevr {@code{tlp-configuration} parameter} string energy-perf-policy-on-bat
19093 Same as @code{energy-perf-policy-ac} but on BAT mode.
19094
19095 Defaults to @samp{"powersave"}.
19096
19097 @end deftypevr
19098
19099 @deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disks-devices
19100 Hard disk devices.
19101
19102 @end deftypevr
19103
19104 @deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disk-apm-level-on-ac
19105 Hard disk advanced power management level.
19106
19107 @end deftypevr
19108
19109 @deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disk-apm-level-on-bat
19110 Same as @code{disk-apm-bat} but on BAT mode.
19111
19112 @end deftypevr
19113
19114 @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-spindown-timeout-on-ac
19115 Hard disk spin down timeout. One value has to be specified for each
19116 declared hard disk.
19117
19118 Defaults to @samp{disabled}.
19119
19120 @end deftypevr
19121
19122 @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-spindown-timeout-on-bat
19123 Same as @code{disk-spindown-timeout-on-ac} but on BAT mode.
19124
19125 Defaults to @samp{disabled}.
19126
19127 @end deftypevr
19128
19129 @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-iosched
19130 Select IO scheduler for disk devices. One value has to be specified for
19131 each declared hard disk. Example alternatives are cfq, deadline and
19132 noop.
19133
19134 Defaults to @samp{disabled}.
19135
19136 @end deftypevr
19137
19138 @deftypevr {@code{tlp-configuration} parameter} string sata-linkpwr-on-ac
19139 SATA aggressive link power management (ALPM) level. Alternatives are
19140 min_power, medium_power, max_performance.
19141
19142 Defaults to @samp{"max_performance"}.
19143
19144 @end deftypevr
19145
19146 @deftypevr {@code{tlp-configuration} parameter} string sata-linkpwr-on-bat
19147 Same as @code{sata-linkpwr-ac} but on BAT mode.
19148
19149 Defaults to @samp{"min_power"}.
19150
19151 @end deftypevr
19152
19153 @deftypevr {@code{tlp-configuration} parameter} maybe-string sata-linkpwr-blacklist
19154 Exclude specified SATA host devices for link power management.
19155
19156 Defaults to @samp{disabled}.
19157
19158 @end deftypevr
19159
19160 @deftypevr {@code{tlp-configuration} parameter} maybe-on-off-boolean ahci-runtime-pm-on-ac?
19161 Enable Runtime Power Management for AHCI controller and disks on AC
19162 mode.
19163
19164 Defaults to @samp{disabled}.
19165
19166 @end deftypevr
19167
19168 @deftypevr {@code{tlp-configuration} parameter} maybe-on-off-boolean ahci-runtime-pm-on-bat?
19169 Same as @code{ahci-runtime-pm-on-ac} on BAT mode.
19170
19171 Defaults to @samp{disabled}.
19172
19173 @end deftypevr
19174
19175 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer ahci-runtime-pm-timeout
19176 Seconds of inactivity before disk is suspended.
19177
19178 Defaults to @samp{15}.
19179
19180 @end deftypevr
19181
19182 @deftypevr {@code{tlp-configuration} parameter} string pcie-aspm-on-ac
19183 PCI Express Active State Power Management level. Alternatives are
19184 default, performance, powersave.
19185
19186 Defaults to @samp{"performance"}.
19187
19188 @end deftypevr
19189
19190 @deftypevr {@code{tlp-configuration} parameter} string pcie-aspm-on-bat
19191 Same as @code{pcie-aspm-ac} but on BAT mode.
19192
19193 Defaults to @samp{"powersave"}.
19194
19195 @end deftypevr
19196
19197 @deftypevr {@code{tlp-configuration} parameter} string radeon-power-profile-on-ac
19198 Radeon graphics clock speed level. Alternatives are low, mid, high,
19199 auto, default.
19200
19201 Defaults to @samp{"high"}.
19202
19203 @end deftypevr
19204
19205 @deftypevr {@code{tlp-configuration} parameter} string radeon-power-profile-on-bat
19206 Same as @code{radeon-power-ac} but on BAT mode.
19207
19208 Defaults to @samp{"low"}.
19209
19210 @end deftypevr
19211
19212 @deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-state-on-ac
19213 Radeon dynamic power management method (DPM). Alternatives are battery,
19214 performance.
19215
19216 Defaults to @samp{"performance"}.
19217
19218 @end deftypevr
19219
19220 @deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-state-on-bat
19221 Same as @code{radeon-dpm-state-ac} but on BAT mode.
19222
19223 Defaults to @samp{"battery"}.
19224
19225 @end deftypevr
19226
19227 @deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-perf-level-on-ac
19228 Radeon DPM performance level. Alternatives are auto, low, high.
19229
19230 Defaults to @samp{"auto"}.
19231
19232 @end deftypevr
19233
19234 @deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-perf-level-on-bat
19235 Same as @code{radeon-dpm-perf-ac} but on BAT mode.
19236
19237 Defaults to @samp{"auto"}.
19238
19239 @end deftypevr
19240
19241 @deftypevr {@code{tlp-configuration} parameter} on-off-boolean wifi-pwr-on-ac?
19242 Wifi power saving mode.
19243
19244 Defaults to @samp{#f}.
19245
19246 @end deftypevr
19247
19248 @deftypevr {@code{tlp-configuration} parameter} on-off-boolean wifi-pwr-on-bat?
19249 Same as @code{wifi-power-ac?} but on BAT mode.
19250
19251 Defaults to @samp{#t}.
19252
19253 @end deftypevr
19254
19255 @deftypevr {@code{tlp-configuration} parameter} y-n-boolean wol-disable?
19256 Disable wake on LAN.
19257
19258 Defaults to @samp{#t}.
19259
19260 @end deftypevr
19261
19262 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer sound-power-save-on-ac
19263 Timeout duration in seconds before activating audio power saving on
19264 Intel HDA and AC97 devices. A value of 0 disables power saving.
19265
19266 Defaults to @samp{0}.
19267
19268 @end deftypevr
19269
19270 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer sound-power-save-on-bat
19271 Same as @code{sound-powersave-ac} but on BAT mode.
19272
19273 Defaults to @samp{1}.
19274
19275 @end deftypevr
19276
19277 @deftypevr {@code{tlp-configuration} parameter} y-n-boolean sound-power-save-controller?
19278 Disable controller in powersaving mode on Intel HDA devices.
19279
19280 Defaults to @samp{#t}.
19281
19282 @end deftypevr
19283
19284 @deftypevr {@code{tlp-configuration} parameter} boolean bay-poweroff-on-bat?
19285 Enable optical drive in UltraBay/MediaBay on BAT mode. Drive can be
19286 powered on again by releasing (and reinserting) the eject lever or by
19287 pressing the disc eject button on newer models.
19288
19289 Defaults to @samp{#f}.
19290
19291 @end deftypevr
19292
19293 @deftypevr {@code{tlp-configuration} parameter} string bay-device
19294 Name of the optical drive device to power off.
19295
19296 Defaults to @samp{"sr0"}.
19297
19298 @end deftypevr
19299
19300 @deftypevr {@code{tlp-configuration} parameter} string runtime-pm-on-ac
19301 Runtime Power Management for PCI(e) bus devices. Alternatives are on
19302 and auto.
19303
19304 Defaults to @samp{"on"}.
19305
19306 @end deftypevr
19307
19308 @deftypevr {@code{tlp-configuration} parameter} string runtime-pm-on-bat
19309 Same as @code{runtime-pm-ac} but on BAT mode.
19310
19311 Defaults to @samp{"auto"}.
19312
19313 @end deftypevr
19314
19315 @deftypevr {@code{tlp-configuration} parameter} boolean runtime-pm-all?
19316 Runtime Power Management for all PCI(e) bus devices, except blacklisted
19317 ones.
19318
19319 Defaults to @samp{#t}.
19320
19321 @end deftypevr
19322
19323 @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list runtime-pm-blacklist
19324 Exclude specified PCI(e) device addresses from Runtime Power Management.
19325
19326 Defaults to @samp{disabled}.
19327
19328 @end deftypevr
19329
19330 @deftypevr {@code{tlp-configuration} parameter} space-separated-string-list runtime-pm-driver-blacklist
19331 Exclude PCI(e) devices assigned to the specified drivers from Runtime
19332 Power Management.
19333
19334 @end deftypevr
19335
19336 @deftypevr {@code{tlp-configuration} parameter} boolean usb-autosuspend?
19337 Enable USB autosuspend feature.
19338
19339 Defaults to @samp{#t}.
19340
19341 @end deftypevr
19342
19343 @deftypevr {@code{tlp-configuration} parameter} maybe-string usb-blacklist
19344 Exclude specified devices from USB autosuspend.
19345
19346 Defaults to @samp{disabled}.
19347
19348 @end deftypevr
19349
19350 @deftypevr {@code{tlp-configuration} parameter} boolean usb-blacklist-wwan?
19351 Exclude WWAN devices from USB autosuspend.
19352
19353 Defaults to @samp{#t}.
19354
19355 @end deftypevr
19356
19357 @deftypevr {@code{tlp-configuration} parameter} maybe-string usb-whitelist
19358 Include specified devices into USB autosuspend, even if they are already
19359 excluded by the driver or via @code{usb-blacklist-wwan?}.
19360
19361 Defaults to @samp{disabled}.
19362
19363 @end deftypevr
19364
19365 @deftypevr {@code{tlp-configuration} parameter} maybe-boolean usb-autosuspend-disable-on-shutdown?
19366 Enable USB autosuspend before shutdown.
19367
19368 Defaults to @samp{disabled}.
19369
19370 @end deftypevr
19371
19372 @deftypevr {@code{tlp-configuration} parameter} boolean restore-device-state-on-startup?
19373 Restore radio device state (bluetooth, wifi, wwan) from previous
19374 shutdown on system startup.
19375
19376 Defaults to @samp{#f}.
19377
19378 @end deftypevr
19379
19380 @cindex thermald
19381 @cindex CPU frequency scaling with thermald
19382 @subsubheading Thermald daemon
19383
19384 The @code{(gnu services pm)} module provides an interface to
19385 thermald, a CPU frequency scaling service which helps prevent overheating.
19386
19387 @defvr {Scheme Variable} thermald-service-type
19388 This is the service type for
19389 @uref{https://01.org/linux-thermal-daemon/, thermald}, the Linux
19390 Thermal Daemon, which is responsible for controlling the thermal state
19391 of processors and preventing overheating.
19392 @end defvr
19393
19394 @deftp {Data Type} thermald-configuration
19395 Data type representing the configuration of @code{thermald-service-type}.
19396
19397 @table @asis
19398 @item @code{ignore-cpuid-check?} (default: @code{#f})
19399 Ignore cpuid check for supported CPU models.
19400
19401 @item @code{thermald} (default: @var{thermald})
19402 Package object of thermald.
19403
19404 @end table
19405 @end deftp
19406
19407 @node Audio Services
19408 @subsubsection Audio Services
19409
19410 The @code{(gnu services audio)} module provides a service to start MPD
19411 (the Music Player Daemon).
19412
19413 @cindex mpd
19414 @subsubheading Music Player Daemon
19415
19416 The Music Player Daemon (MPD) is a service that can play music while
19417 being controlled from the local machine or over the network by a variety
19418 of clients.
19419
19420 The following example shows how one might run @code{mpd} as user
19421 @code{"bob"} on port @code{6666}. It uses pulseaudio for output.
19422
19423 @example
19424 (service mpd-service-type
19425 (mpd-configuration
19426 (user "bob")
19427 (port "6666")))
19428 @end example
19429
19430 @defvr {Scheme Variable} mpd-service-type
19431 The service type for @command{mpd}
19432 @end defvr
19433
19434 @deftp {Data Type} mpd-configuration
19435 Data type representing the configuration of @command{mpd}.
19436
19437 @table @asis
19438 @item @code{user} (default: @code{"mpd"})
19439 The user to run mpd as.
19440
19441 @item @code{music-dir} (default: @code{"~/Music"})
19442 The directory to scan for music files.
19443
19444 @item @code{playlist-dir} (default: @code{"~/.mpd/playlists"})
19445 The directory to store playlists.
19446
19447 @item @code{port} (default: @code{"6600"})
19448 The port to run mpd on.
19449
19450 @item @code{address} (default: @code{"any"})
19451 The address that mpd will bind to. To use a Unix domain socket,
19452 an absolute path can be specified here.
19453
19454 @end table
19455 @end deftp
19456
19457 @node Virtualization Services
19458 @subsubsection Virtualization services
19459
19460 The @code{(gnu services virtualization)} module provides services for
19461 the libvirt and virtlog daemons, as well as other virtualization-related
19462 services.
19463
19464 @subsubheading Libvirt daemon
19465 @code{libvirtd} is the server side daemon component of the libvirt
19466 virtualization management system. This daemon runs on host servers
19467 and performs required management tasks for virtualized guests.
19468
19469 @deffn {Scheme Variable} libvirt-service-type
19470 This is the type of the @uref{https://libvirt.org, libvirt daemon}.
19471 Its value must be a @code{libvirt-configuration}.
19472
19473 @example
19474 (service libvirt-service-type
19475 (libvirt-configuration
19476 (unix-sock-group "libvirt")
19477 (tls-port "16555")))
19478 @end example
19479 @end deffn
19480
19481 @c Auto-generated with (generate-libvirt-documentation)
19482 Available @code{libvirt-configuration} fields are:
19483
19484 @deftypevr {@code{libvirt-configuration} parameter} package libvirt
19485 Libvirt package.
19486
19487 @end deftypevr
19488
19489 @deftypevr {@code{libvirt-configuration} parameter} boolean listen-tls?
19490 Flag listening for secure TLS connections on the public TCP/IP port.
19491 must set @code{listen} for this to have any effect.
19492
19493 It is necessary to setup a CA and issue server certificates before using
19494 this capability.
19495
19496 Defaults to @samp{#t}.
19497
19498 @end deftypevr
19499
19500 @deftypevr {@code{libvirt-configuration} parameter} boolean listen-tcp?
19501 Listen for unencrypted TCP connections on the public TCP/IP port. must
19502 set @code{listen} for this to have any effect.
19503
19504 Using the TCP socket requires SASL authentication by default. Only SASL
19505 mechanisms which support data encryption are allowed. This is
19506 DIGEST_MD5 and GSSAPI (Kerberos5)
19507
19508 Defaults to @samp{#f}.
19509
19510 @end deftypevr
19511
19512 @deftypevr {@code{libvirt-configuration} parameter} string tls-port
19513 Port for accepting secure TLS connections This can be a port number, or
19514 service name
19515
19516 Defaults to @samp{"16514"}.
19517
19518 @end deftypevr
19519
19520 @deftypevr {@code{libvirt-configuration} parameter} string tcp-port
19521 Port for accepting insecure TCP connections This can be a port number,
19522 or service name
19523
19524 Defaults to @samp{"16509"}.
19525
19526 @end deftypevr
19527
19528 @deftypevr {@code{libvirt-configuration} parameter} string listen-addr
19529 IP address or hostname used for client connections.
19530
19531 Defaults to @samp{"0.0.0.0"}.
19532
19533 @end deftypevr
19534
19535 @deftypevr {@code{libvirt-configuration} parameter} boolean mdns-adv?
19536 Flag toggling mDNS advertisement of the libvirt service.
19537
19538 Alternatively can disable for all services on a host by stopping the
19539 Avahi daemon.
19540
19541 Defaults to @samp{#f}.
19542
19543 @end deftypevr
19544
19545 @deftypevr {@code{libvirt-configuration} parameter} string mdns-name
19546 Default mDNS advertisement name. This must be unique on the immediate
19547 broadcast network.
19548
19549 Defaults to @samp{"Virtualization Host <hostname>"}.
19550
19551 @end deftypevr
19552
19553 @deftypevr {@code{libvirt-configuration} parameter} string unix-sock-group
19554 UNIX domain socket group ownership. This can be used to allow a
19555 'trusted' set of users access to management capabilities without
19556 becoming root.
19557
19558 Defaults to @samp{"root"}.
19559
19560 @end deftypevr
19561
19562 @deftypevr {@code{libvirt-configuration} parameter} string unix-sock-ro-perms
19563 UNIX socket permissions for the R/O socket. This is used for monitoring
19564 VM status only.
19565
19566 Defaults to @samp{"0777"}.
19567
19568 @end deftypevr
19569
19570 @deftypevr {@code{libvirt-configuration} parameter} string unix-sock-rw-perms
19571 UNIX socket permissions for the R/W socket. Default allows only root.
19572 If PolicyKit is enabled on the socket, the default will change to allow
19573 everyone (eg, 0777)
19574
19575 Defaults to @samp{"0770"}.
19576
19577 @end deftypevr
19578
19579 @deftypevr {@code{libvirt-configuration} parameter} string unix-sock-admin-perms
19580 UNIX socket permissions for the admin socket. Default allows only owner
19581 (root), do not change it unless you are sure to whom you are exposing
19582 the access to.
19583
19584 Defaults to @samp{"0777"}.
19585
19586 @end deftypevr
19587
19588 @deftypevr {@code{libvirt-configuration} parameter} string unix-sock-dir
19589 The directory in which sockets will be found/created.
19590
19591 Defaults to @samp{"/var/run/libvirt"}.
19592
19593 @end deftypevr
19594
19595 @deftypevr {@code{libvirt-configuration} parameter} string auth-unix-ro
19596 Authentication scheme for UNIX read-only sockets. By default socket
19597 permissions allow anyone to connect
19598
19599 Defaults to @samp{"polkit"}.
19600
19601 @end deftypevr
19602
19603 @deftypevr {@code{libvirt-configuration} parameter} string auth-unix-rw
19604 Authentication scheme for UNIX read-write sockets. By default socket
19605 permissions only allow root. If PolicyKit support was compiled into
19606 libvirt, the default will be to use 'polkit' auth.
19607
19608 Defaults to @samp{"polkit"}.
19609
19610 @end deftypevr
19611
19612 @deftypevr {@code{libvirt-configuration} parameter} string auth-tcp
19613 Authentication scheme for TCP sockets. If you don't enable SASL, then
19614 all TCP traffic is cleartext. Don't do this outside of a dev/test
19615 scenario.
19616
19617 Defaults to @samp{"sasl"}.
19618
19619 @end deftypevr
19620
19621 @deftypevr {@code{libvirt-configuration} parameter} string auth-tls
19622 Authentication scheme for TLS sockets. TLS sockets already have
19623 encryption provided by the TLS layer, and limited authentication is done
19624 by certificates.
19625
19626 It is possible to make use of any SASL authentication mechanism as well,
19627 by using 'sasl' for this option
19628
19629 Defaults to @samp{"none"}.
19630
19631 @end deftypevr
19632
19633 @deftypevr {@code{libvirt-configuration} parameter} optional-list access-drivers
19634 API access control scheme.
19635
19636 By default an authenticated user is allowed access to all APIs. Access
19637 drivers can place restrictions on this.
19638
19639 Defaults to @samp{()}.
19640
19641 @end deftypevr
19642
19643 @deftypevr {@code{libvirt-configuration} parameter} string key-file
19644 Server key file path. If set to an empty string, then no private key is
19645 loaded.
19646
19647 Defaults to @samp{""}.
19648
19649 @end deftypevr
19650
19651 @deftypevr {@code{libvirt-configuration} parameter} string cert-file
19652 Server key file path. If set to an empty string, then no certificate is
19653 loaded.
19654
19655 Defaults to @samp{""}.
19656
19657 @end deftypevr
19658
19659 @deftypevr {@code{libvirt-configuration} parameter} string ca-file
19660 Server key file path. If set to an empty string, then no CA certificate
19661 is loaded.
19662
19663 Defaults to @samp{""}.
19664
19665 @end deftypevr
19666
19667 @deftypevr {@code{libvirt-configuration} parameter} string crl-file
19668 Certificate revocation list path. If set to an empty string, then no
19669 CRL is loaded.
19670
19671 Defaults to @samp{""}.
19672
19673 @end deftypevr
19674
19675 @deftypevr {@code{libvirt-configuration} parameter} boolean tls-no-sanity-cert
19676 Disable verification of our own server certificates.
19677
19678 When libvirtd starts it performs some sanity checks against its own
19679 certificates.
19680
19681 Defaults to @samp{#f}.
19682
19683 @end deftypevr
19684
19685 @deftypevr {@code{libvirt-configuration} parameter} boolean tls-no-verify-cert
19686 Disable verification of client certificates.
19687
19688 Client certificate verification is the primary authentication mechanism.
19689 Any client which does not present a certificate signed by the CA will be
19690 rejected.
19691
19692 Defaults to @samp{#f}.
19693
19694 @end deftypevr
19695
19696 @deftypevr {@code{libvirt-configuration} parameter} optional-list tls-allowed-dn-list
19697 Whitelist of allowed x509 Distinguished Name.
19698
19699 Defaults to @samp{()}.
19700
19701 @end deftypevr
19702
19703 @deftypevr {@code{libvirt-configuration} parameter} optional-list sasl-allowed-usernames
19704 Whitelist of allowed SASL usernames. The format for username depends on
19705 the SASL authentication mechanism.
19706
19707 Defaults to @samp{()}.
19708
19709 @end deftypevr
19710
19711 @deftypevr {@code{libvirt-configuration} parameter} string tls-priority
19712 Override the compile time default TLS priority string. The default is
19713 usually "NORMAL" unless overridden at build time. Only set this is it
19714 is desired for libvirt to deviate from the global default settings.
19715
19716 Defaults to @samp{"NORMAL"}.
19717
19718 @end deftypevr
19719
19720 @deftypevr {@code{libvirt-configuration} parameter} integer max-clients
19721 Maximum number of concurrent client connections to allow over all
19722 sockets combined.
19723
19724 Defaults to @samp{5000}.
19725
19726 @end deftypevr
19727
19728 @deftypevr {@code{libvirt-configuration} parameter} integer max-queued-clients
19729 Maximum length of queue of connections waiting to be accepted by the
19730 daemon. Note, that some protocols supporting retransmission may obey
19731 this so that a later reattempt at connection succeeds.
19732
19733 Defaults to @samp{1000}.
19734
19735 @end deftypevr
19736
19737 @deftypevr {@code{libvirt-configuration} parameter} integer max-anonymous-clients
19738 Maximum length of queue of accepted but not yet authenticated clients.
19739 Set this to zero to turn this feature off
19740
19741 Defaults to @samp{20}.
19742
19743 @end deftypevr
19744
19745 @deftypevr {@code{libvirt-configuration} parameter} integer min-workers
19746 Number of workers to start up initially.
19747
19748 Defaults to @samp{5}.
19749
19750 @end deftypevr
19751
19752 @deftypevr {@code{libvirt-configuration} parameter} integer max-workers
19753 Maximum number of worker threads.
19754
19755 If the number of active clients exceeds @code{min-workers}, then more
19756 threads are spawned, up to max_workers limit. Typically you'd want
19757 max_workers to equal maximum number of clients allowed.
19758
19759 Defaults to @samp{20}.
19760
19761 @end deftypevr
19762
19763 @deftypevr {@code{libvirt-configuration} parameter} integer prio-workers
19764 Number of priority workers. If all workers from above pool are stuck,
19765 some calls marked as high priority (notably domainDestroy) can be
19766 executed in this pool.
19767
19768 Defaults to @samp{5}.
19769
19770 @end deftypevr
19771
19772 @deftypevr {@code{libvirt-configuration} parameter} integer max-requests
19773 Total global limit on concurrent RPC calls.
19774
19775 Defaults to @samp{20}.
19776
19777 @end deftypevr
19778
19779 @deftypevr {@code{libvirt-configuration} parameter} integer max-client-requests
19780 Limit on concurrent requests from a single client connection. To avoid
19781 one client monopolizing the server this should be a small fraction of
19782 the global max_requests and max_workers parameter.
19783
19784 Defaults to @samp{5}.
19785
19786 @end deftypevr
19787
19788 @deftypevr {@code{libvirt-configuration} parameter} integer admin-min-workers
19789 Same as @code{min-workers} but for the admin interface.
19790
19791 Defaults to @samp{1}.
19792
19793 @end deftypevr
19794
19795 @deftypevr {@code{libvirt-configuration} parameter} integer admin-max-workers
19796 Same as @code{max-workers} but for the admin interface.
19797
19798 Defaults to @samp{5}.
19799
19800 @end deftypevr
19801
19802 @deftypevr {@code{libvirt-configuration} parameter} integer admin-max-clients
19803 Same as @code{max-clients} but for the admin interface.
19804
19805 Defaults to @samp{5}.
19806
19807 @end deftypevr
19808
19809 @deftypevr {@code{libvirt-configuration} parameter} integer admin-max-queued-clients
19810 Same as @code{max-queued-clients} but for the admin interface.
19811
19812 Defaults to @samp{5}.
19813
19814 @end deftypevr
19815
19816 @deftypevr {@code{libvirt-configuration} parameter} integer admin-max-client-requests
19817 Same as @code{max-client-requests} but for the admin interface.
19818
19819 Defaults to @samp{5}.
19820
19821 @end deftypevr
19822
19823 @deftypevr {@code{libvirt-configuration} parameter} integer log-level
19824 Logging level. 4 errors, 3 warnings, 2 information, 1 debug.
19825
19826 Defaults to @samp{3}.
19827
19828 @end deftypevr
19829
19830 @deftypevr {@code{libvirt-configuration} parameter} string log-filters
19831 Logging filters.
19832
19833 A filter allows to select a different logging level for a given category
19834 of logs The format for a filter is one of:
19835
19836 @itemize @bullet
19837 @item
19838 x:name
19839
19840 @item
19841 x:+name
19842
19843 @end itemize
19844
19845 where @code{name} is a string which is matched against the category
19846 given in the @code{VIR_LOG_INIT()} at the top of each libvirt source
19847 file, e.g., "remote", "qemu", or "util.json" (the name in the filter can
19848 be a substring of the full category name, in order to match multiple
19849 similar categories), the optional "+" prefix tells libvirt to log stack
19850 trace for each message matching name, and @code{x} is the minimal level
19851 where matching messages should be logged:
19852
19853 @itemize @bullet
19854 @item
19855 1: DEBUG
19856
19857 @item
19858 2: INFO
19859
19860 @item
19861 3: WARNING
19862
19863 @item
19864 4: ERROR
19865
19866 @end itemize
19867
19868 Multiple filters can be defined in a single filters statement, they just
19869 need to be separated by spaces.
19870
19871 Defaults to @samp{"3:remote 4:event"}.
19872
19873 @end deftypevr
19874
19875 @deftypevr {@code{libvirt-configuration} parameter} string log-outputs
19876 Logging outputs.
19877
19878 An output is one of the places to save logging information The format
19879 for an output can be:
19880
19881 @table @code
19882 @item x:stderr
19883 output goes to stderr
19884
19885 @item x:syslog:name
19886 use syslog for the output and use the given name as the ident
19887
19888 @item x:file:file_path
19889 output to a file, with the given filepath
19890
19891 @item x:journald
19892 output to journald logging system
19893
19894 @end table
19895
19896 In all case the x prefix is the minimal level, acting as a filter
19897
19898 @itemize @bullet
19899 @item
19900 1: DEBUG
19901
19902 @item
19903 2: INFO
19904
19905 @item
19906 3: WARNING
19907
19908 @item
19909 4: ERROR
19910
19911 @end itemize
19912
19913 Multiple outputs can be defined, they just need to be separated by
19914 spaces.
19915
19916 Defaults to @samp{"3:stderr"}.
19917
19918 @end deftypevr
19919
19920 @deftypevr {@code{libvirt-configuration} parameter} integer audit-level
19921 Allows usage of the auditing subsystem to be altered
19922
19923 @itemize @bullet
19924 @item
19925 0: disable all auditing
19926
19927 @item
19928 1: enable auditing, only if enabled on host
19929
19930 @item
19931 2: enable auditing, and exit if disabled on host.
19932
19933 @end itemize
19934
19935 Defaults to @samp{1}.
19936
19937 @end deftypevr
19938
19939 @deftypevr {@code{libvirt-configuration} parameter} boolean audit-logging
19940 Send audit messages via libvirt logging infrastructure.
19941
19942 Defaults to @samp{#f}.
19943
19944 @end deftypevr
19945
19946 @deftypevr {@code{libvirt-configuration} parameter} optional-string host-uuid
19947 Host UUID. UUID must not have all digits be the same.
19948
19949 Defaults to @samp{""}.
19950
19951 @end deftypevr
19952
19953 @deftypevr {@code{libvirt-configuration} parameter} string host-uuid-source
19954 Source to read host UUID.
19955
19956 @itemize @bullet
19957 @item
19958 @code{smbios}: fetch the UUID from @code{dmidecode -s system-uuid}
19959
19960 @item
19961 @code{machine-id}: fetch the UUID from @code{/etc/machine-id}
19962
19963 @end itemize
19964
19965 If @code{dmidecode} does not provide a valid UUID a temporary UUID will
19966 be generated.
19967
19968 Defaults to @samp{"smbios"}.
19969
19970 @end deftypevr
19971
19972 @deftypevr {@code{libvirt-configuration} parameter} integer keepalive-interval
19973 A keepalive message is sent to a client after @code{keepalive_interval}
19974 seconds of inactivity to check if the client is still responding. If
19975 set to -1, libvirtd will never send keepalive requests; however clients
19976 can still send them and the daemon will send responses.
19977
19978 Defaults to @samp{5}.
19979
19980 @end deftypevr
19981
19982 @deftypevr {@code{libvirt-configuration} parameter} integer keepalive-count
19983 Maximum number of keepalive messages that are allowed to be sent to the
19984 client without getting any response before the connection is considered
19985 broken.
19986
19987 In other words, the connection is automatically closed approximately
19988 after @code{keepalive_interval * (keepalive_count + 1)} seconds since
19989 the last message received from the client. When @code{keepalive-count}
19990 is set to 0, connections will be automatically closed after
19991 @code{keepalive-interval} seconds of inactivity without sending any
19992 keepalive messages.
19993
19994 Defaults to @samp{5}.
19995
19996 @end deftypevr
19997
19998 @deftypevr {@code{libvirt-configuration} parameter} integer admin-keepalive-interval
19999 Same as above but for admin interface.
20000
20001 Defaults to @samp{5}.
20002
20003 @end deftypevr
20004
20005 @deftypevr {@code{libvirt-configuration} parameter} integer admin-keepalive-count
20006 Same as above but for admin interface.
20007
20008 Defaults to @samp{5}.
20009
20010 @end deftypevr
20011
20012 @deftypevr {@code{libvirt-configuration} parameter} integer ovs-timeout
20013 Timeout for Open vSwitch calls.
20014
20015 The @code{ovs-vsctl} utility is used for the configuration and its
20016 timeout option is set by default to 5 seconds to avoid potential
20017 infinite waits blocking libvirt.
20018
20019 Defaults to @samp{5}.
20020
20021 @end deftypevr
20022
20023 @c %end of autogenerated docs
20024
20025 @subsubheading Virtlog daemon
20026 The virtlogd service is a server side daemon component of libvirt that is
20027 used to manage logs from virtual machine consoles.
20028
20029 This daemon is not used directly by libvirt client applications, rather it
20030 is called on their behalf by @code{libvirtd}. By maintaining the logs in a
20031 standalone daemon, the main @code{libvirtd} daemon can be restarted without
20032 risk of losing logs. The @code{virtlogd} daemon has the ability to re-exec()
20033 itself upon receiving @code{SIGUSR1}, to allow live upgrades without downtime.
20034
20035 @deffn {Scheme Variable} virtlog-service-type
20036 This is the type of the virtlog daemon.
20037 Its value must be a @code{virtlog-configuration}.
20038
20039 @example
20040 (service virtlog-service-type
20041 (virtlog-configuration
20042 (max-clients 1000)))
20043 @end example
20044 @end deffn
20045
20046 @deftypevr {@code{virtlog-configuration} parameter} integer log-level
20047 Logging level. 4 errors, 3 warnings, 2 information, 1 debug.
20048
20049 Defaults to @samp{3}.
20050
20051 @end deftypevr
20052
20053 @deftypevr {@code{virtlog-configuration} parameter} string log-filters
20054 Logging filters.
20055
20056 A filter allows to select a different logging level for a given category
20057 of logs The format for a filter is one of:
20058
20059 @itemize @bullet
20060 @item
20061 x:name
20062
20063 @item
20064 x:+name
20065
20066 @end itemize
20067
20068 where @code{name} is a string which is matched against the category
20069 given in the @code{VIR_LOG_INIT()} at the top of each libvirt source
20070 file, e.g., "remote", "qemu", or "util.json" (the name in the filter can
20071 be a substring of the full category name, in order to match multiple
20072 similar categories), the optional "+" prefix tells libvirt to log stack
20073 trace for each message matching name, and @code{x} is the minimal level
20074 where matching messages should be logged:
20075
20076 @itemize @bullet
20077 @item
20078 1: DEBUG
20079
20080 @item
20081 2: INFO
20082
20083 @item
20084 3: WARNING
20085
20086 @item
20087 4: ERROR
20088
20089 @end itemize
20090
20091 Multiple filters can be defined in a single filters statement, they just
20092 need to be separated by spaces.
20093
20094 Defaults to @samp{"3:remote 4:event"}.
20095
20096 @end deftypevr
20097
20098 @deftypevr {@code{virtlog-configuration} parameter} string log-outputs
20099 Logging outputs.
20100
20101 An output is one of the places to save logging information The format
20102 for an output can be:
20103
20104 @table @code
20105 @item x:stderr
20106 output goes to stderr
20107
20108 @item x:syslog:name
20109 use syslog for the output and use the given name as the ident
20110
20111 @item x:file:file_path
20112 output to a file, with the given filepath
20113
20114 @item x:journald
20115 output to journald logging system
20116
20117 @end table
20118
20119 In all case the x prefix is the minimal level, acting as a filter
20120
20121 @itemize @bullet
20122 @item
20123 1: DEBUG
20124
20125 @item
20126 2: INFO
20127
20128 @item
20129 3: WARNING
20130
20131 @item
20132 4: ERROR
20133
20134 @end itemize
20135
20136 Multiple outputs can be defined, they just need to be separated by
20137 spaces.
20138
20139 Defaults to @samp{"3:stderr"}.
20140
20141 @end deftypevr
20142
20143 @deftypevr {@code{virtlog-configuration} parameter} integer max-clients
20144 Maximum number of concurrent client connections to allow over all
20145 sockets combined.
20146
20147 Defaults to @samp{1024}.
20148
20149 @end deftypevr
20150
20151 @deftypevr {@code{virtlog-configuration} parameter} integer max-size
20152 Maximum file size before rolling over.
20153
20154 Defaults to @samp{2MB}
20155
20156 @end deftypevr
20157
20158 @deftypevr {@code{virtlog-configuration} parameter} integer max-backups
20159 Maximum number of backup files to keep.
20160
20161 Defaults to @samp{3}
20162
20163 @end deftypevr
20164
20165 @subsubheading Transparent Emulation with QEMU
20166
20167 @cindex emulation
20168 @cindex @code{binfmt_misc}
20169 @code{qemu-binfmt-service-type} provides support for transparent
20170 emulation of program binaries built for different architectures---e.g.,
20171 it allows you to transparently execute an ARMv7 program on an x86_64
20172 machine. It achieves this by combining the @uref{https://www.qemu.org,
20173 QEMU} emulator and the @code{binfmt_misc} feature of the kernel Linux.
20174
20175 @defvr {Scheme Variable} qemu-binfmt-service-type
20176 This is the type of the QEMU/binfmt service for transparent emulation.
20177 Its value must be a @code{qemu-binfmt-configuration} object, which
20178 specifies the QEMU package to use as well as the architecture we want to
20179 emulated:
20180
20181 @example
20182 (service qemu-binfmt-service-type
20183 (qemu-binfmt-configuration
20184 (platforms (lookup-qemu-platforms "arm" "aarch64" "ppc"))))
20185 @end example
20186
20187 In this example, we enable transparent emulation for the ARM and aarch64
20188 platforms. Running @code{herd stop qemu-binfmt} turns it off, and
20189 running @code{herd start qemu-binfmt} turns it back on (@pxref{Invoking
20190 herd, the @command{herd} command,, shepherd, The GNU Shepherd Manual}).
20191 @end defvr
20192
20193 @deftp {Data Type} qemu-binfmt-configuration
20194 This is the configuration for the @code{qemu-binfmt} service.
20195
20196 @table @asis
20197 @item @code{platforms} (default: @code{'()})
20198 The list of emulated QEMU platforms. Each item must be a @dfn{platform
20199 object} as returned by @code{lookup-qemu-platforms} (see below).
20200
20201 @item @code{guix-support?} (default: @code{#f})
20202 When it is true, QEMU and all its dependencies are added to the build
20203 environment of @command{guix-daemon} (@pxref{Invoking guix-daemon,
20204 @code{--chroot-directory} option}). This allows the @code{binfmt_misc}
20205 handlers to be used within the build environment, which in turn means
20206 that you can transparently build programs for another architecture.
20207
20208 For example, let's suppose you're on an x86_64 machine and you have this
20209 service:
20210
20211 @example
20212 (service qemu-binfmt-service-type
20213 (qemu-binfmt-configuration
20214 (platforms (lookup-qemu-platforms "arm"))
20215 (guix-support? #t)))
20216 @end example
20217
20218 You can run:
20219
20220 @example
20221 guix build -s armhf-linux inkscape
20222 @end example
20223
20224 @noindent
20225 and it will build Inkscape for ARMv7 @emph{as if it were a native
20226 build}, transparently using QEMU to emulate the ARMv7 CPU. Pretty handy
20227 if you'd like to test a package build for an architecture you don't have
20228 access to!
20229
20230 @item @code{qemu} (default: @code{qemu})
20231 The QEMU package to use.
20232 @end table
20233 @end deftp
20234
20235 @deffn {Scheme Procedure} lookup-qemu-platforms @var{platforms}@dots{}
20236 Return the list of QEMU platform objects corresponding to
20237 @var{platforms}@dots{}. @var{platforms} must be a list of strings
20238 corresponding to platform names, such as @code{"arm"}, @code{"sparc"},
20239 @code{"mips64el"}, and so on.
20240 @end deffn
20241
20242 @deffn {Scheme Procedure} qemu-platform? @var{obj}
20243 Return true if @var{obj} is a platform object.
20244 @end deffn
20245
20246 @deffn {Scheme Procedure} qemu-platform-name @var{platform}
20247 Return the name of @var{platform}---a string such as @code{"arm"}.
20248 @end deffn
20249
20250 @node Version Control Services
20251 @subsubsection Version Control Services
20252
20253 The @code{(gnu services version-control)} module provides a service to
20254 allow remote access to local Git repositories. There are three options:
20255 the @code{git-daemon-service}, which provides access to repositories via
20256 the @code{git://} unsecured TCP-based protocol, extending the
20257 @code{nginx} web server to proxy some requests to
20258 @code{git-http-backend}, or providing a web interface with
20259 @code{cgit-service-type}.
20260
20261 @deffn {Scheme Procedure} git-daemon-service [#:config (git-daemon-configuration)]
20262
20263 Return a service that runs @command{git daemon}, a simple TCP server to
20264 expose repositories over the Git protocol for anonymous access.
20265
20266 The optional @var{config} argument should be a
20267 @code{<git-daemon-configuration>} object, by default it allows read-only
20268 access to exported@footnote{By creating the magic file
20269 "git-daemon-export-ok" in the repository directory.} repositories under
20270 @file{/srv/git}.
20271
20272 @end deffn
20273
20274 @deftp {Data Type} git-daemon-configuration
20275 Data type representing the configuration for @code{git-daemon-service}.
20276
20277 @table @asis
20278 @item @code{package} (default: @var{git})
20279 Package object of the Git distributed version control system.
20280
20281 @item @code{export-all?} (default: @var{#f})
20282 Whether to allow access for all Git repositories, even if they do not
20283 have the @file{git-daemon-export-ok} file.
20284
20285 @item @code{base-path} (default: @file{/srv/git})
20286 Whether to remap all the path requests as relative to the given path.
20287 If you run git daemon with @var{(base-path "/srv/git")} on example.com,
20288 then if you later try to pull @code{git://example.com/hello.git}, git
20289 daemon will interpret the path as @code{/srv/git/hello.git}.
20290
20291 @item @code{user-path} (default: @var{#f})
20292 Whether to allow @code{~user} notation to be used in requests. When
20293 specified with empty string, requests to @code{git://host/~alice/foo} is
20294 taken as a request to access @code{foo} repository in the home directory
20295 of user @code{alice}. If @var{(user-path "path")} is specified, the
20296 same request is taken as a request to access @code{path/foo} repository
20297 in the home directory of user @code{alice}.
20298
20299 @item @code{listen} (default: @var{'()})
20300 Whether to listen on specific IP addresses or hostnames, defaults to
20301 all.
20302
20303 @item @code{port} (default: @var{#f})
20304 Whether to listen on an alternative port, which defaults to 9418.
20305
20306 @item @code{whitelist} (default: @var{'()})
20307 If not empty, only allow access to this list of directories.
20308
20309 @item @code{extra-options} (default: @var{'()})
20310 Extra options will be passed to @code{git daemon}, please run
20311 @command{man git-daemon} for more information.
20312
20313 @end table
20314 @end deftp
20315
20316 The @code{git://} protocol lacks authentication. When you pull from a
20317 repository fetched via @code{git://}, you don't know that the data you
20318 receive was modified is really coming from the specified host, and you
20319 have your connection is subject to eavesdropping. It's better to use an
20320 authenticated and encrypted transport, such as @code{https}. Although Git allows you
20321 to serve repositories using unsophisticated file-based web servers,
20322 there is a faster protocol implemented by the @code{git-http-backend}
20323 program. This program is the back-end of a proper Git web service. It
20324 is designed to sit behind a FastCGI proxy. @xref{Web Services}, for more
20325 on running the necessary @code{fcgiwrap} daemon.
20326
20327 Guix has a separate configuration data type for serving Git repositories
20328 over HTTP.
20329
20330 @deftp {Data Type} git-http-configuration
20331 Data type representing the configuration for @code{git-http-service}.
20332
20333 @table @asis
20334 @item @code{package} (default: @var{git})
20335 Package object of the Git distributed version control system.
20336
20337 @item @code{git-root} (default: @file{/srv/git})
20338 Directory containing the Git repositories to expose to the world.
20339
20340 @item @code{export-all?} (default: @var{#f})
20341 Whether to expose access for all Git repositories in @var{git-root},
20342 even if they do not have the @file{git-daemon-export-ok} file.
20343
20344 @item @code{uri-path} (default: @file{/git/})
20345 Path prefix for Git access. With the default @code{/git/} prefix, this
20346 will map @code{http://@var{server}/git/@var{repo}.git} to
20347 @code{/srv/git/@var{repo}.git}. Requests whose URI paths do not begin
20348 with this prefix are not passed on to this Git instance.
20349
20350 @item @code{fcgiwrap-socket} (default: @code{127.0.0.1:9000})
20351 The socket on which the @code{fcgiwrap} daemon is listening. @xref{Web
20352 Services}.
20353 @end table
20354 @end deftp
20355
20356 There is no @code{git-http-service-type}, currently; instead you can
20357 create an @code{nginx-location-configuration} from a
20358 @code{git-http-configuration} and then add that location to a web
20359 server.
20360
20361 @deffn {Scheme Procedure} git-http-nginx-location-configuration @
20362 [config=(git-http-configuration)]
20363 Compute an @code{nginx-location-configuration} that corresponds to the
20364 given Git http configuration. An example nginx service definition to
20365 serve the default @file{/srv/git} over HTTPS might be:
20366
20367 @example
20368 (service nginx-service-type
20369 (nginx-configuration
20370 (server-blocks
20371 (list
20372 (nginx-server-configuration
20373 (listen '("443 ssl"))
20374 (server-name "git.my-host.org")
20375 (ssl-certificate
20376 "/etc/letsencrypt/live/git.my-host.org/fullchain.pem")
20377 (ssl-certificate-key
20378 "/etc/letsencrypt/live/git.my-host.org/privkey.pem")
20379 (locations
20380 (list
20381 (git-http-nginx-location-configuration
20382 (git-http-configuration (uri-path "/"))))))))))
20383 @end example
20384
20385 This example assumes that you are using Let's Encrypt to get your TLS
20386 certificate. @xref{Certificate Services}. The default @code{certbot}
20387 service will redirect all HTTP traffic on @code{git.my-host.org} to
20388 HTTPS. You will also need to add an @code{fcgiwrap} proxy to your
20389 system services. @xref{Web Services}.
20390 @end deffn
20391
20392 @subsubheading Cgit Service
20393
20394 @cindex Cgit service
20395 @cindex Git, web interface
20396 @uref{https://git.zx2c4.com/cgit/, Cgit} is a web frontend for Git
20397 repositories written in C.
20398
20399 The following example will configure the service with default values.
20400 By default, Cgit can be accessed on port 80 (@code{http://localhost:80}).
20401
20402 @example
20403 (service cgit-service-type)
20404 @end example
20405
20406 The @code{file-object} type designates either a file-like object
20407 (@pxref{G-Expressions, file-like objects}) or a string.
20408
20409 @c %start of fragment
20410
20411 Available @code{cgit-configuration} fields are:
20412
20413 @deftypevr {@code{cgit-configuration} parameter} package package
20414 The CGIT package.
20415
20416 @end deftypevr
20417
20418 @deftypevr {@code{cgit-configuration} parameter} nginx-server-configuration-list nginx
20419 NGINX configuration.
20420
20421 @end deftypevr
20422
20423 @deftypevr {@code{cgit-configuration} parameter} file-object about-filter
20424 Specifies a command which will be invoked to format the content of about
20425 pages (both top-level and for each repository).
20426
20427 Defaults to @samp{""}.
20428
20429 @end deftypevr
20430
20431 @deftypevr {@code{cgit-configuration} parameter} string agefile
20432 Specifies a path, relative to each repository path, which can be used to
20433 specify the date and time of the youngest commit in the repository.
20434
20435 Defaults to @samp{""}.
20436
20437 @end deftypevr
20438
20439 @deftypevr {@code{cgit-configuration} parameter} file-object auth-filter
20440 Specifies a command that will be invoked for authenticating repository
20441 access.
20442
20443 Defaults to @samp{""}.
20444
20445 @end deftypevr
20446
20447 @deftypevr {@code{cgit-configuration} parameter} string branch-sort
20448 Flag which, when set to @samp{age}, enables date ordering in the branch
20449 ref list, and when set @samp{name} enables ordering by branch name.
20450
20451 Defaults to @samp{"name"}.
20452
20453 @end deftypevr
20454
20455 @deftypevr {@code{cgit-configuration} parameter} string cache-root
20456 Path used to store the cgit cache entries.
20457
20458 Defaults to @samp{"/var/cache/cgit"}.
20459
20460 @end deftypevr
20461
20462 @deftypevr {@code{cgit-configuration} parameter} integer cache-static-ttl
20463 Number which specifies the time-to-live, in minutes, for the cached
20464 version of repository pages accessed with a fixed SHA1.
20465
20466 Defaults to @samp{-1}.
20467
20468 @end deftypevr
20469
20470 @deftypevr {@code{cgit-configuration} parameter} integer cache-dynamic-ttl
20471 Number which specifies the time-to-live, in minutes, for the cached
20472 version of repository pages accessed without a fixed SHA1.
20473
20474 Defaults to @samp{5}.
20475
20476 @end deftypevr
20477
20478 @deftypevr {@code{cgit-configuration} parameter} integer cache-repo-ttl
20479 Number which specifies the time-to-live, in minutes, for the cached
20480 version of the repository summary page.
20481
20482 Defaults to @samp{5}.
20483
20484 @end deftypevr
20485
20486 @deftypevr {@code{cgit-configuration} parameter} integer cache-root-ttl
20487 Number which specifies the time-to-live, in minutes, for the cached
20488 version of the repository index page.
20489
20490 Defaults to @samp{5}.
20491
20492 @end deftypevr
20493
20494 @deftypevr {@code{cgit-configuration} parameter} integer cache-scanrc-ttl
20495 Number which specifies the time-to-live, in minutes, for the result of
20496 scanning a path for Git repositories.
20497
20498 Defaults to @samp{15}.
20499
20500 @end deftypevr
20501
20502 @deftypevr {@code{cgit-configuration} parameter} integer cache-about-ttl
20503 Number which specifies the time-to-live, in minutes, for the cached
20504 version of the repository about page.
20505
20506 Defaults to @samp{15}.
20507
20508 @end deftypevr
20509
20510 @deftypevr {@code{cgit-configuration} parameter} integer cache-snapshot-ttl
20511 Number which specifies the time-to-live, in minutes, for the cached
20512 version of snapshots.
20513
20514 Defaults to @samp{5}.
20515
20516 @end deftypevr
20517
20518 @deftypevr {@code{cgit-configuration} parameter} integer cache-size
20519 The maximum number of entries in the cgit cache. When set to @samp{0},
20520 caching is disabled.
20521
20522 Defaults to @samp{0}.
20523
20524 @end deftypevr
20525
20526 @deftypevr {@code{cgit-configuration} parameter} boolean case-sensitive-sort?
20527 Sort items in the repo list case sensitively.
20528
20529 Defaults to @samp{#t}.
20530
20531 @end deftypevr
20532
20533 @deftypevr {@code{cgit-configuration} parameter} list clone-prefix
20534 List of common prefixes which, when combined with a repository URL,
20535 generates valid clone URLs for the repository.
20536
20537 Defaults to @samp{()}.
20538
20539 @end deftypevr
20540
20541 @deftypevr {@code{cgit-configuration} parameter} list clone-url
20542 List of @code{clone-url} templates.
20543
20544 Defaults to @samp{()}.
20545
20546 @end deftypevr
20547
20548 @deftypevr {@code{cgit-configuration} parameter} file-object commit-filter
20549 Command which will be invoked to format commit messages.
20550
20551 Defaults to @samp{""}.
20552
20553 @end deftypevr
20554
20555 @deftypevr {@code{cgit-configuration} parameter} string commit-sort
20556 Flag which, when set to @samp{date}, enables strict date ordering in the
20557 commit log, and when set to @samp{topo} enables strict topological
20558 ordering.
20559
20560 Defaults to @samp{"git log"}.
20561
20562 @end deftypevr
20563
20564 @deftypevr {@code{cgit-configuration} parameter} file-object css
20565 URL which specifies the css document to include in all cgit pages.
20566
20567 Defaults to @samp{"/share/cgit/cgit.css"}.
20568
20569 @end deftypevr
20570
20571 @deftypevr {@code{cgit-configuration} parameter} file-object email-filter
20572 Specifies a command which will be invoked to format names and email
20573 address of committers, authors, and taggers, as represented in various
20574 places throughout the cgit interface.
20575
20576 Defaults to @samp{""}.
20577
20578 @end deftypevr
20579
20580 @deftypevr {@code{cgit-configuration} parameter} boolean embedded?
20581 Flag which, when set to @samp{#t}, will make cgit generate a HTML
20582 fragment suitable for embedding in other HTML pages.
20583
20584 Defaults to @samp{#f}.
20585
20586 @end deftypevr
20587
20588 @deftypevr {@code{cgit-configuration} parameter} boolean enable-commit-graph?
20589 Flag which, when set to @samp{#t}, will make cgit print an ASCII-art
20590 commit history graph to the left of the commit messages in the
20591 repository log page.
20592
20593 Defaults to @samp{#f}.
20594
20595 @end deftypevr
20596
20597 @deftypevr {@code{cgit-configuration} parameter} boolean enable-filter-overrides?
20598 Flag which, when set to @samp{#t}, allows all filter settings to be
20599 overridden in repository-specific cgitrc files.
20600
20601 Defaults to @samp{#f}.
20602
20603 @end deftypevr
20604
20605 @deftypevr {@code{cgit-configuration} parameter} boolean enable-follow-links?
20606 Flag which, when set to @samp{#t}, allows users to follow a file in the
20607 log view.
20608
20609 Defaults to @samp{#f}.
20610
20611 @end deftypevr
20612
20613 @deftypevr {@code{cgit-configuration} parameter} boolean enable-http-clone?
20614 If set to @samp{#t}, cgit will act as an dumb HTTP endpoint for Git
20615 clones.
20616
20617 Defaults to @samp{#t}.
20618
20619 @end deftypevr
20620
20621 @deftypevr {@code{cgit-configuration} parameter} boolean enable-index-links?
20622 Flag which, when set to @samp{#t}, will make cgit generate extra links
20623 "summary", "commit", "tree" for each repo in the repository index.
20624
20625 Defaults to @samp{#f}.
20626
20627 @end deftypevr
20628
20629 @deftypevr {@code{cgit-configuration} parameter} boolean enable-index-owner?
20630 Flag which, when set to @samp{#t}, will make cgit display the owner of
20631 each repo in the repository index.
20632
20633 Defaults to @samp{#t}.
20634
20635 @end deftypevr
20636
20637 @deftypevr {@code{cgit-configuration} parameter} boolean enable-log-filecount?
20638 Flag which, when set to @samp{#t}, will make cgit print the number of
20639 modified files for each commit on the repository log page.
20640
20641 Defaults to @samp{#f}.
20642
20643 @end deftypevr
20644
20645 @deftypevr {@code{cgit-configuration} parameter} boolean enable-log-linecount?
20646 Flag which, when set to @samp{#t}, will make cgit print the number of
20647 added and removed lines for each commit on the repository log page.
20648
20649 Defaults to @samp{#f}.
20650
20651 @end deftypevr
20652
20653 @deftypevr {@code{cgit-configuration} parameter} boolean enable-remote-branches?
20654 Flag which, when set to @code{#t}, will make cgit display remote
20655 branches in the summary and refs views.
20656
20657 Defaults to @samp{#f}.
20658
20659 @end deftypevr
20660
20661 @deftypevr {@code{cgit-configuration} parameter} boolean enable-subject-links?
20662 Flag which, when set to @code{1}, will make cgit use the subject of the
20663 parent commit as link text when generating links to parent commits in
20664 commit view.
20665
20666 Defaults to @samp{#f}.
20667
20668 @end deftypevr
20669
20670 @deftypevr {@code{cgit-configuration} parameter} boolean enable-html-serving?
20671 Flag which, when set to @samp{#t}, will make cgit use the subject of the
20672 parent commit as link text when generating links to parent commits in
20673 commit view.
20674
20675 Defaults to @samp{#f}.
20676
20677 @end deftypevr
20678
20679 @deftypevr {@code{cgit-configuration} parameter} boolean enable-tree-linenumbers?
20680 Flag which, when set to @samp{#t}, will make cgit generate linenumber
20681 links for plaintext blobs printed in the tree view.
20682
20683 Defaults to @samp{#t}.
20684
20685 @end deftypevr
20686
20687 @deftypevr {@code{cgit-configuration} parameter} boolean enable-git-config?
20688 Flag which, when set to @samp{#f}, will allow cgit to use Git config to
20689 set any repo specific settings.
20690
20691 Defaults to @samp{#f}.
20692
20693 @end deftypevr
20694
20695 @deftypevr {@code{cgit-configuration} parameter} file-object favicon
20696 URL used as link to a shortcut icon for cgit.
20697
20698 Defaults to @samp{"/favicon.ico"}.
20699
20700 @end deftypevr
20701
20702 @deftypevr {@code{cgit-configuration} parameter} string footer
20703 The content of the file specified with this option will be included
20704 verbatim at the bottom of all pages (i.e. it replaces the standard
20705 "generated by..." message).
20706
20707 Defaults to @samp{""}.
20708
20709 @end deftypevr
20710
20711 @deftypevr {@code{cgit-configuration} parameter} string head-include
20712 The content of the file specified with this option will be included
20713 verbatim in the HTML HEAD section on all pages.
20714
20715 Defaults to @samp{""}.
20716
20717 @end deftypevr
20718
20719 @deftypevr {@code{cgit-configuration} parameter} string header
20720 The content of the file specified with this option will be included
20721 verbatim at the top of all pages.
20722
20723 Defaults to @samp{""}.
20724
20725 @end deftypevr
20726
20727 @deftypevr {@code{cgit-configuration} parameter} file-object include
20728 Name of a configfile to include before the rest of the current config-
20729 file is parsed.
20730
20731 Defaults to @samp{""}.
20732
20733 @end deftypevr
20734
20735 @deftypevr {@code{cgit-configuration} parameter} string index-header
20736 The content of the file specified with this option will be included
20737 verbatim above the repository index.
20738
20739 Defaults to @samp{""}.
20740
20741 @end deftypevr
20742
20743 @deftypevr {@code{cgit-configuration} parameter} string index-info
20744 The content of the file specified with this option will be included
20745 verbatim below the heading on the repository index page.
20746
20747 Defaults to @samp{""}.
20748
20749 @end deftypevr
20750
20751 @deftypevr {@code{cgit-configuration} parameter} boolean local-time?
20752 Flag which, if set to @samp{#t}, makes cgit print commit and tag times
20753 in the servers timezone.
20754
20755 Defaults to @samp{#f}.
20756
20757 @end deftypevr
20758
20759 @deftypevr {@code{cgit-configuration} parameter} file-object logo
20760 URL which specifies the source of an image which will be used as a logo
20761 on all cgit pages.
20762
20763 Defaults to @samp{"/share/cgit/cgit.png"}.
20764
20765 @end deftypevr
20766
20767 @deftypevr {@code{cgit-configuration} parameter} string logo-link
20768 URL loaded when clicking on the cgit logo image.
20769
20770 Defaults to @samp{""}.
20771
20772 @end deftypevr
20773
20774 @deftypevr {@code{cgit-configuration} parameter} file-object owner-filter
20775 Command which will be invoked to format the Owner column of the main
20776 page.
20777
20778 Defaults to @samp{""}.
20779
20780 @end deftypevr
20781
20782 @deftypevr {@code{cgit-configuration} parameter} integer max-atom-items
20783 Number of items to display in atom feeds view.
20784
20785 Defaults to @samp{10}.
20786
20787 @end deftypevr
20788
20789 @deftypevr {@code{cgit-configuration} parameter} integer max-commit-count
20790 Number of entries to list per page in "log" view.
20791
20792 Defaults to @samp{50}.
20793
20794 @end deftypevr
20795
20796 @deftypevr {@code{cgit-configuration} parameter} integer max-message-length
20797 Number of commit message characters to display in "log" view.
20798
20799 Defaults to @samp{80}.
20800
20801 @end deftypevr
20802
20803 @deftypevr {@code{cgit-configuration} parameter} integer max-repo-count
20804 Specifies the number of entries to list per page on the repository index
20805 page.
20806
20807 Defaults to @samp{50}.
20808
20809 @end deftypevr
20810
20811 @deftypevr {@code{cgit-configuration} parameter} integer max-repodesc-length
20812 Specifies the maximum number of repo description characters to display
20813 on the repository index page.
20814
20815 Defaults to @samp{80}.
20816
20817 @end deftypevr
20818
20819 @deftypevr {@code{cgit-configuration} parameter} integer max-blob-size
20820 Specifies the maximum size of a blob to display HTML for in KBytes.
20821
20822 Defaults to @samp{0}.
20823
20824 @end deftypevr
20825
20826 @deftypevr {@code{cgit-configuration} parameter} string max-stats
20827 Maximum statistics period. Valid values are @samp{week},@samp{month},
20828 @samp{quarter} and @samp{year}.
20829
20830 Defaults to @samp{""}.
20831
20832 @end deftypevr
20833
20834 @deftypevr {@code{cgit-configuration} parameter} mimetype-alist mimetype
20835 Mimetype for the specified filename extension.
20836
20837 Defaults to @samp{((gif "image/gif") (html "text/html") (jpg
20838 "image/jpeg") (jpeg "image/jpeg") (pdf "application/pdf") (png
20839 "image/png") (svg "image/svg+xml"))}.
20840
20841 @end deftypevr
20842
20843 @deftypevr {@code{cgit-configuration} parameter} file-object mimetype-file
20844 Specifies the file to use for automatic mimetype lookup.
20845
20846 Defaults to @samp{""}.
20847
20848 @end deftypevr
20849
20850 @deftypevr {@code{cgit-configuration} parameter} string module-link
20851 Text which will be used as the formatstring for a hyperlink when a
20852 submodule is printed in a directory listing.
20853
20854 Defaults to @samp{""}.
20855
20856 @end deftypevr
20857
20858 @deftypevr {@code{cgit-configuration} parameter} boolean nocache?
20859 If set to the value @samp{#t} caching will be disabled.
20860
20861 Defaults to @samp{#f}.
20862
20863 @end deftypevr
20864
20865 @deftypevr {@code{cgit-configuration} parameter} boolean noplainemail?
20866 If set to @samp{#t} showing full author email addresses will be
20867 disabled.
20868
20869 Defaults to @samp{#f}.
20870
20871 @end deftypevr
20872
20873 @deftypevr {@code{cgit-configuration} parameter} boolean noheader?
20874 Flag which, when set to @samp{#t}, will make cgit omit the standard
20875 header on all pages.
20876
20877 Defaults to @samp{#f}.
20878
20879 @end deftypevr
20880
20881 @deftypevr {@code{cgit-configuration} parameter} project-list project-list
20882 A list of subdirectories inside of @code{repository-directory}, relative
20883 to it, that should loaded as Git repositories. An empty list means that
20884 all subdirectories will be loaded.
20885
20886 Defaults to @samp{()}.
20887
20888 @end deftypevr
20889
20890 @deftypevr {@code{cgit-configuration} parameter} file-object readme
20891 Text which will be used as default value for @code{cgit-repo-readme}.
20892
20893 Defaults to @samp{""}.
20894
20895 @end deftypevr
20896
20897 @deftypevr {@code{cgit-configuration} parameter} boolean remove-suffix?
20898 If set to @code{#t} and @code{repository-directory} is enabled, if any
20899 repositories are found with a suffix of @code{.git}, this suffix will be
20900 removed for the URL and name.
20901
20902 Defaults to @samp{#f}.
20903
20904 @end deftypevr
20905
20906 @deftypevr {@code{cgit-configuration} parameter} integer renamelimit
20907 Maximum number of files to consider when detecting renames.
20908
20909 Defaults to @samp{-1}.
20910
20911 @end deftypevr
20912
20913 @deftypevr {@code{cgit-configuration} parameter} string repository-sort
20914 The way in which repositories in each section are sorted.
20915
20916 Defaults to @samp{""}.
20917
20918 @end deftypevr
20919
20920 @deftypevr {@code{cgit-configuration} parameter} robots-list robots
20921 Text used as content for the @code{robots} meta-tag.
20922
20923 Defaults to @samp{("noindex" "nofollow")}.
20924
20925 @end deftypevr
20926
20927 @deftypevr {@code{cgit-configuration} parameter} string root-desc
20928 Text printed below the heading on the repository index page.
20929
20930 Defaults to @samp{"a fast webinterface for the git dscm"}.
20931
20932 @end deftypevr
20933
20934 @deftypevr {@code{cgit-configuration} parameter} string root-readme
20935 The content of the file specified with this option will be included
20936 verbatim below thef "about" link on the repository index page.
20937
20938 Defaults to @samp{""}.
20939
20940 @end deftypevr
20941
20942 @deftypevr {@code{cgit-configuration} parameter} string root-title
20943 Text printed as heading on the repository index page.
20944
20945 Defaults to @samp{""}.
20946
20947 @end deftypevr
20948
20949 @deftypevr {@code{cgit-configuration} parameter} boolean scan-hidden-path
20950 If set to @samp{#t} and repository-directory is enabled,
20951 repository-directory will recurse into directories whose name starts
20952 with a period. Otherwise, repository-directory will stay away from such
20953 directories, considered as "hidden". Note that this does not apply to
20954 the ".git" directory in non-bare repos.
20955
20956 Defaults to @samp{#f}.
20957
20958 @end deftypevr
20959
20960 @deftypevr {@code{cgit-configuration} parameter} list snapshots
20961 Text which specifies the default set of snapshot formats that cgit
20962 generates links for.
20963
20964 Defaults to @samp{()}.
20965
20966 @end deftypevr
20967
20968 @deftypevr {@code{cgit-configuration} parameter} repository-directory repository-directory
20969 Name of the directory to scan for repositories (represents
20970 @code{scan-path}).
20971
20972 Defaults to @samp{"/srv/git"}.
20973
20974 @end deftypevr
20975
20976 @deftypevr {@code{cgit-configuration} parameter} string section
20977 The name of the current repository section - all repositories defined
20978 after this option will inherit the current section name.
20979
20980 Defaults to @samp{""}.
20981
20982 @end deftypevr
20983
20984 @deftypevr {@code{cgit-configuration} parameter} string section-sort
20985 Flag which, when set to @samp{1}, will sort the sections on the
20986 repository listing by name.
20987
20988 Defaults to @samp{""}.
20989
20990 @end deftypevr
20991
20992 @deftypevr {@code{cgit-configuration} parameter} integer section-from-path
20993 A number which, if defined prior to repository-directory, specifies how
20994 many path elements from each repo path to use as a default section name.
20995
20996 Defaults to @samp{0}.
20997
20998 @end deftypevr
20999
21000 @deftypevr {@code{cgit-configuration} parameter} boolean side-by-side-diffs?
21001 If set to @samp{#t} shows side-by-side diffs instead of unidiffs per
21002 default.
21003
21004 Defaults to @samp{#f}.
21005
21006 @end deftypevr
21007
21008 @deftypevr {@code{cgit-configuration} parameter} file-object source-filter
21009 Specifies a command which will be invoked to format plaintext blobs in
21010 the tree view.
21011
21012 Defaults to @samp{""}.
21013
21014 @end deftypevr
21015
21016 @deftypevr {@code{cgit-configuration} parameter} integer summary-branches
21017 Specifies the number of branches to display in the repository "summary"
21018 view.
21019
21020 Defaults to @samp{10}.
21021
21022 @end deftypevr
21023
21024 @deftypevr {@code{cgit-configuration} parameter} integer summary-log
21025 Specifies the number of log entries to display in the repository
21026 "summary" view.
21027
21028 Defaults to @samp{10}.
21029
21030 @end deftypevr
21031
21032 @deftypevr {@code{cgit-configuration} parameter} integer summary-tags
21033 Specifies the number of tags to display in the repository "summary"
21034 view.
21035
21036 Defaults to @samp{10}.
21037
21038 @end deftypevr
21039
21040 @deftypevr {@code{cgit-configuration} parameter} string strict-export
21041 Filename which, if specified, needs to be present within the repository
21042 for cgit to allow access to that repository.
21043
21044 Defaults to @samp{""}.
21045
21046 @end deftypevr
21047
21048 @deftypevr {@code{cgit-configuration} parameter} string virtual-root
21049 URL which, if specified, will be used as root for all cgit links.
21050
21051 Defaults to @samp{"/"}.
21052
21053 @end deftypevr
21054
21055 @deftypevr {@code{cgit-configuration} parameter} repository-cgit-configuration-list repositories
21056 A list of @dfn{cgit-repo} records to use with config.
21057
21058 Defaults to @samp{()}.
21059
21060 Available @code{repository-cgit-configuration} fields are:
21061
21062 @deftypevr {@code{repository-cgit-configuration} parameter} repo-list snapshots
21063 A mask of snapshot formats for this repo that cgit generates links for,
21064 restricted by the global @code{snapshots} setting.
21065
21066 Defaults to @samp{()}.
21067
21068 @end deftypevr
21069
21070 @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object source-filter
21071 Override the default @code{source-filter}.
21072
21073 Defaults to @samp{""}.
21074
21075 @end deftypevr
21076
21077 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string url
21078 The relative URL used to access the repository.
21079
21080 Defaults to @samp{""}.
21081
21082 @end deftypevr
21083
21084 @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object about-filter
21085 Override the default @code{about-filter}.
21086
21087 Defaults to @samp{""}.
21088
21089 @end deftypevr
21090
21091 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string branch-sort
21092 Flag which, when set to @samp{age}, enables date ordering in the branch
21093 ref list, and when set to @samp{name} enables ordering by branch name.
21094
21095 Defaults to @samp{""}.
21096
21097 @end deftypevr
21098
21099 @deftypevr {@code{repository-cgit-configuration} parameter} repo-list clone-url
21100 A list of URLs which can be used to clone repo.
21101
21102 Defaults to @samp{()}.
21103
21104 @end deftypevr
21105
21106 @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object commit-filter
21107 Override the default @code{commit-filter}.
21108
21109 Defaults to @samp{""}.
21110
21111 @end deftypevr
21112
21113 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string commit-sort
21114 Flag which, when set to @samp{date}, enables strict date ordering in the
21115 commit log, and when set to @samp{topo} enables strict topological
21116 ordering.
21117
21118 Defaults to @samp{""}.
21119
21120 @end deftypevr
21121
21122 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string defbranch
21123 The name of the default branch for this repository. If no such branch
21124 exists in the repository, the first branch name (when sorted) is used as
21125 default instead. By default branch pointed to by HEAD, or "master" if
21126 there is no suitable HEAD.
21127
21128 Defaults to @samp{""}.
21129
21130 @end deftypevr
21131
21132 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string desc
21133 The value to show as repository description.
21134
21135 Defaults to @samp{""}.
21136
21137 @end deftypevr
21138
21139 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string homepage
21140 The value to show as repository homepage.
21141
21142 Defaults to @samp{""}.
21143
21144 @end deftypevr
21145
21146 @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object email-filter
21147 Override the default @code{email-filter}.
21148
21149 Defaults to @samp{""}.
21150
21151 @end deftypevr
21152
21153 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-commit-graph?
21154 A flag which can be used to disable the global setting
21155 @code{enable-commit-graph?}.
21156
21157 Defaults to @samp{disabled}.
21158
21159 @end deftypevr
21160
21161 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-log-filecount?
21162 A flag which can be used to disable the global setting
21163 @code{enable-log-filecount?}.
21164
21165 Defaults to @samp{disabled}.
21166
21167 @end deftypevr
21168
21169 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-log-linecount?
21170 A flag which can be used to disable the global setting
21171 @code{enable-log-linecount?}.
21172
21173 Defaults to @samp{disabled}.
21174
21175 @end deftypevr
21176
21177 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-remote-branches?
21178 Flag which, when set to @code{#t}, will make cgit display remote
21179 branches in the summary and refs views.
21180
21181 Defaults to @samp{disabled}.
21182
21183 @end deftypevr
21184
21185 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-subject-links?
21186 A flag which can be used to override the global setting
21187 @code{enable-subject-links?}.
21188
21189 Defaults to @samp{disabled}.
21190
21191 @end deftypevr
21192
21193 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-html-serving?
21194 A flag which can be used to override the global setting
21195 @code{enable-html-serving?}.
21196
21197 Defaults to @samp{disabled}.
21198
21199 @end deftypevr
21200
21201 @deftypevr {@code{repository-cgit-configuration} parameter} repo-boolean hide?
21202 Flag which, when set to @code{#t}, hides the repository from the
21203 repository index.
21204
21205 Defaults to @samp{#f}.
21206
21207 @end deftypevr
21208
21209 @deftypevr {@code{repository-cgit-configuration} parameter} repo-boolean ignore?
21210 Flag which, when set to @samp{#t}, ignores the repository.
21211
21212 Defaults to @samp{#f}.
21213
21214 @end deftypevr
21215
21216 @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object logo
21217 URL which specifies the source of an image which will be used as a logo
21218 on this repo’s pages.
21219
21220 Defaults to @samp{""}.
21221
21222 @end deftypevr
21223
21224 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string logo-link
21225 URL loaded when clicking on the cgit logo image.
21226
21227 Defaults to @samp{""}.
21228
21229 @end deftypevr
21230
21231 @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object owner-filter
21232 Override the default @code{owner-filter}.
21233
21234 Defaults to @samp{""}.
21235
21236 @end deftypevr
21237
21238 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string module-link
21239 Text which will be used as the formatstring for a hyperlink when a
21240 submodule is printed in a directory listing. The arguments for the
21241 formatstring are the path and SHA1 of the submodule commit.
21242
21243 Defaults to @samp{""}.
21244
21245 @end deftypevr
21246
21247 @deftypevr {@code{repository-cgit-configuration} parameter} module-link-path module-link-path
21248 Text which will be used as the formatstring for a hyperlink when a
21249 submodule with the specified subdirectory path is printed in a directory
21250 listing.
21251
21252 Defaults to @samp{()}.
21253
21254 @end deftypevr
21255
21256 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string max-stats
21257 Override the default maximum statistics period.
21258
21259 Defaults to @samp{""}.
21260
21261 @end deftypevr
21262
21263 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string name
21264 The value to show as repository name.
21265
21266 Defaults to @samp{""}.
21267
21268 @end deftypevr
21269
21270 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string owner
21271 A value used to identify the owner of the repository.
21272
21273 Defaults to @samp{""}.
21274
21275 @end deftypevr
21276
21277 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string path
21278 An absolute path to the repository directory.
21279
21280 Defaults to @samp{""}.
21281
21282 @end deftypevr
21283
21284 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string readme
21285 A path (relative to repo) which specifies a file to include verbatim as
21286 the "About" page for this repo.
21287
21288 Defaults to @samp{""}.
21289
21290 @end deftypevr
21291
21292 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string section
21293 The name of the current repository section - all repositories defined
21294 after this option will inherit the current section name.
21295
21296 Defaults to @samp{""}.
21297
21298 @end deftypevr
21299
21300 @deftypevr {@code{repository-cgit-configuration} parameter} repo-list extra-options
21301 Extra options will be appended to cgitrc file.
21302
21303 Defaults to @samp{()}.
21304
21305 @end deftypevr
21306
21307 @end deftypevr
21308
21309 @deftypevr {@code{cgit-configuration} parameter} list extra-options
21310 Extra options will be appended to cgitrc file.
21311
21312 Defaults to @samp{()}.
21313
21314 @end deftypevr
21315
21316
21317 @c %end of fragment
21318
21319 However, it could be that you just want to get a @code{cgitrc} up and
21320 running. In that case, you can pass an @code{opaque-cgit-configuration}
21321 as a record to @code{cgit-service-type}. As its name indicates, an
21322 opaque configuration does not have easy reflective capabilities.
21323
21324 Available @code{opaque-cgit-configuration} fields are:
21325
21326 @deftypevr {@code{opaque-cgit-configuration} parameter} package cgit
21327 The cgit package.
21328 @end deftypevr
21329
21330 @deftypevr {@code{opaque-cgit-configuration} parameter} string string
21331 The contents of the @code{cgitrc}, as a string.
21332 @end deftypevr
21333
21334 For example, if your @code{cgitrc} is just the empty string, you
21335 could instantiate a cgit service like this:
21336
21337 @example
21338 (service cgit-service-type
21339 (opaque-cgit-configuration
21340 (cgitrc "")))
21341 @end example
21342
21343 @subsubheading Gitolite Service
21344
21345 @cindex Gitolite service
21346 @cindex Git, hosting
21347 @uref{http://gitolite.com/gitolite/, Gitolite} is a tool for hosting Git
21348 repositories on a central server.
21349
21350 Gitolite can handle multiple repositories and users, and supports flexible
21351 configuration of the permissions for the users on the repositories.
21352
21353 The following example will configure Gitolite using the default @code{git}
21354 user, and the provided SSH public key.
21355
21356 @example
21357 (service gitolite-service-type
21358 (gitolite-configuration
21359 (admin-pubkey (plain-file
21360 "yourname.pub"
21361 "ssh-rsa AAAA... guix@@example.com"))))
21362 @end example
21363
21364 Gitolite is configured through a special admin repository which you can clone,
21365 for example, if you setup Gitolite on @code{example.com}, you would run the
21366 following command to clone the admin repository.
21367
21368 @example
21369 git clone git@@example.com:gitolite-admin
21370 @end example
21371
21372 When the Gitolite service is activated, the provided @code{admin-pubkey} will
21373 be inserted in to the @file{keydir} directory in the gitolite-admin
21374 repository. If this results in a change in the repository, it will be
21375 committed using the message ``gitolite setup by GNU Guix''.
21376
21377 @deftp {Data Type} gitolite-configuration
21378 Data type representing the configuration for @code{gitolite-service-type}.
21379
21380 @table @asis
21381 @item @code{package} (default: @var{gitolite})
21382 Gitolite package to use.
21383
21384 @item @code{user} (default: @var{git})
21385 User to use for Gitolite. This will be user that you use when accessing
21386 Gitolite over SSH.
21387
21388 @item @code{group} (default: @var{git})
21389 Group to use for Gitolite.
21390
21391 @item @code{home-directory} (default: @var{"/var/lib/gitolite"})
21392 Directory in which to store the Gitolite configuration and repositories.
21393
21394 @item @code{rc-file} (default: @var{(gitolite-rc-file)})
21395 A ``file-like'' object (@pxref{G-Expressions, file-like objects}),
21396 representing the configuration for Gitolite.
21397
21398 @item @code{admin-pubkey} (default: @var{#f})
21399 A ``file-like'' object (@pxref{G-Expressions, file-like objects}) used to
21400 setup Gitolite. This will be inserted in to the @file{keydir} directory
21401 within the gitolite-admin repository.
21402
21403 To specify the SSH key as a string, use the @code{plain-file} function.
21404
21405 @example
21406 (plain-file "yourname.pub" "ssh-rsa AAAA... guix@@example.com")
21407 @end example
21408
21409 @end table
21410 @end deftp
21411
21412 @deftp {Data Type} gitolite-rc-file
21413 Data type representing the Gitolite RC file.
21414
21415 @table @asis
21416 @item @code{umask} (default: @code{#o0077})
21417 This controls the permissions Gitolite sets on the repositories and their
21418 contents.
21419
21420 A value like @code{#o0027} will give read access to the group used by Gitolite
21421 (by default: @code{git}). This is necessary when using Gitolite with software
21422 like cgit or gitweb.
21423
21424 @item @code{git-config-keys} (default: @code{""})
21425 Gitolite allows you to set git config values using the "config" keyword. This
21426 setting allows control over the config keys to accept.
21427
21428 @item @code{roles} (default: @code{'(("READERS" . 1) ("WRITERS" . ))})
21429 Set the role names allowed to be used by users running the perms command.
21430
21431 @item @code{enable} (default: @code{'("help" "desc" "info" "perms" "writable" "ssh-authkeys" "git-config" "daemon" "gitweb")})
21432 This setting controls the commands and features to enable within Gitolite.
21433
21434 @end table
21435 @end deftp
21436
21437
21438 @node Game Services
21439 @subsubsection Game Services
21440
21441 @subsubheading The Battle for Wesnoth Service
21442 @cindex wesnothd
21443 @uref{https://wesnoth.org, The Battle for Wesnoth} is a fantasy, turn
21444 based tactical strategy game, with several single player campaigns, and
21445 multiplayer games (both networked and local).
21446
21447 @defvar {Scheme Variable} wesnothd-service-type
21448 Service type for the wesnothd service. Its value must be a
21449 @code{wesnothd-configuration} object. To run wesnothd in the default
21450 configuration, instantiate it as:
21451
21452 @example
21453 (service wesnothd-service-type)
21454 @end example
21455 @end defvar
21456
21457 @deftp {Data Type} wesnothd-configuration
21458 Data type representing the configuration of @command{wesnothd}.
21459
21460 @table @asis
21461 @item @code{package} (default: @code{wesnoth-server})
21462 The wesnoth server package to use.
21463
21464 @item @code{port} (default: @code{15000})
21465 The port to bind the server to.
21466 @end table
21467 @end deftp
21468
21469 @node Miscellaneous Services
21470 @subsubsection Miscellaneous Services
21471
21472 @cindex fingerprint
21473 @subsubheading Fingerprint Service
21474
21475 The @code{(gnu services fingerprint)} module provides a DBus service to
21476 read and identify fingerprints via a fingerprint sensor.
21477
21478 @defvr {Scheme Variable} fprintd-service-type
21479 The service type for @command{fprintd}, which provides the fingerprint
21480 reading capability.
21481
21482 @example
21483 (service fprintd-service-type)
21484 @end example
21485 @end defvr
21486
21487 @cindex sysctl
21488 @subsubheading System Control Service
21489
21490 The @code{(gnu services sysctl)} provides a service to configure kernel
21491 parameters at boot.
21492
21493 @defvr {Scheme Variable} sysctl-service-type
21494 The service type for @command{sysctl}, which modifies kernel parameters
21495 under @file{/proc/sys/}. To enable IPv4 forwarding, it can be
21496 instantiated as:
21497
21498 @example
21499 (service sysctl-service-type
21500 (sysctl-configuration
21501 (settings '(("net.ipv4.ip_forward" . "1")))))
21502 @end example
21503 @end defvr
21504
21505 @deftp {Data Type} sysctl-configuration
21506 The data type representing the configuration of @command{sysctl}.
21507
21508 @table @asis
21509 @item @code{sysctl} (default: @code{(file-append procps "/sbin/sysctl"})
21510 The @command{sysctl} executable to use.
21511
21512 @item @code{settings} (default: @code{'()})
21513 An association list specifies kernel parameters and their values.
21514 @end table
21515 @end deftp
21516
21517 @cindex pcscd
21518 @subsubheading PC/SC Smart Card Daemon Service
21519
21520 The @code{(gnu services security-token)} module provides the following service
21521 to run @command{pcscd}, the PC/SC Smart Card Daemon. @command{pcscd} is the
21522 daemon program for pcsc-lite and the MuscleCard framework. It is a resource
21523 manager that coordinates communications with smart card readers, smart cards
21524 and cryptographic tokens that are connected to the system.
21525
21526 @defvr {Scheme Variable} pcscd-service-type
21527 Service type for the @command{pcscd} service. Its value must be a
21528 @code{pcscd-configuration} object. To run pcscd in the default
21529 configuration, instantiate it as:
21530
21531 @example
21532 (service pcscd-service-type)
21533 @end example
21534 @end defvr
21535
21536 @deftp {Data Type} pcscd-configuration
21537 The data type representing the configuration of @command{pcscd}.
21538
21539 @table @asis
21540 @item @code{pcsc-lite} (default: @code{pcsc-lite})
21541 The pcsc-lite package that provides pcscd.
21542 @item @code{usb-drivers} (default: @code{(list ccid)})
21543 List of packages that provide USB drivers to pcscd. Drivers are expected to be
21544 under @file{pcsc/drivers} in the store directory of the package.
21545 @end table
21546 @end deftp
21547
21548 @cindex lirc
21549 @subsubheading Lirc Service
21550
21551 The @code{(gnu services lirc)} module provides the following service.
21552
21553 @deffn {Scheme Procedure} lirc-service [#:lirc lirc] @
21554 [#:device #f] [#:driver #f] [#:config-file #f] @
21555 [#:extra-options '()]
21556 Return a service that runs @url{http://www.lirc.org,LIRC}, a daemon that
21557 decodes infrared signals from remote controls.
21558
21559 Optionally, @var{device}, @var{driver} and @var{config-file}
21560 (configuration file name) may be specified. See @command{lircd} manual
21561 for details.
21562
21563 Finally, @var{extra-options} is a list of additional command-line options
21564 passed to @command{lircd}.
21565 @end deffn
21566
21567 @cindex spice
21568 @subsubheading Spice Service
21569
21570 The @code{(gnu services spice)} module provides the following service.
21571
21572 @deffn {Scheme Procedure} spice-vdagent-service [#:spice-vdagent]
21573 Returns a service that runs @url{http://www.spice-space.org,VDAGENT}, a daemon
21574 that enables sharing the clipboard with a vm and setting the guest display
21575 resolution when the graphical console window resizes.
21576 @end deffn
21577
21578 @subsubsection Dictionary Services
21579 @cindex dictionary
21580 The @code{(gnu services dict)} module provides the following service:
21581
21582 @deffn {Scheme Procedure} dicod-service [#:config (dicod-configuration)]
21583 Return a service that runs the @command{dicod} daemon, an implementation
21584 of DICT server (@pxref{Dicod,,, dico, GNU Dico Manual}).
21585
21586 The optional @var{config} argument specifies the configuration for
21587 @command{dicod}, which should be a @code{<dicod-configuration>} object, by
21588 default it serves the GNU Collaborative International Dictonary of English.
21589
21590 You can add @command{open localhost} to your @file{~/.dico} file to make
21591 @code{localhost} the default server for @command{dico} client
21592 (@pxref{Initialization File,,, dico, GNU Dico Manual}).
21593 @end deffn
21594
21595 @deftp {Data Type} dicod-configuration
21596 Data type representing the configuration of dicod.
21597
21598 @table @asis
21599 @item @code{dico} (default: @var{dico})
21600 Package object of the GNU Dico dictionary server.
21601
21602 @item @code{interfaces} (default: @var{'("localhost")})
21603 This is the list of IP addresses and ports and possibly socket file
21604 names to listen to (@pxref{Server Settings, @code{listen} directive,,
21605 dico, GNU Dico Manual}).
21606
21607 @item @code{handlers} (default: @var{'()})
21608 List of @code{<dicod-handler>} objects denoting handlers (module instances).
21609
21610 @item @code{databases} (default: @var{(list %dicod-database:gcide)})
21611 List of @code{<dicod-database>} objects denoting dictionaries to be served.
21612 @end table
21613 @end deftp
21614
21615 @deftp {Data Type} dicod-handler
21616 Data type representing a dictionary handler (module instance).
21617
21618 @table @asis
21619 @item @code{name}
21620 Name of the handler (module instance).
21621
21622 @item @code{module} (default: @var{#f})
21623 Name of the dicod module of the handler (instance). If it is @code{#f},
21624 the module has the same name as the handler.
21625 (@pxref{Modules,,, dico, GNU Dico Manual}).
21626
21627 @item @code{options}
21628 List of strings or gexps representing the arguments for the module handler
21629 @end table
21630 @end deftp
21631
21632 @deftp {Data Type} dicod-database
21633 Data type representing a dictionary database.
21634
21635 @table @asis
21636 @item @code{name}
21637 Name of the database, will be used in DICT commands.
21638
21639 @item @code{handler}
21640 Name of the dicod handler (module instance) used by this database
21641 (@pxref{Handlers,,, dico, GNU Dico Manual}).
21642
21643 @item @code{complex?} (default: @var{#f})
21644 Whether the database configuration complex. The complex configuration
21645 will need a corresponding @code{<dicod-handler>} object, otherwise not.
21646
21647 @item @code{options}
21648 List of strings or gexps representing the arguments for the database
21649 (@pxref{Databases,,, dico, GNU Dico Manual}).
21650 @end table
21651 @end deftp
21652
21653 @defvr {Scheme Variable} %dicod-database:gcide
21654 A @code{<dicod-database>} object serving the GNU Collaborative International
21655 Dictionary of English using the @code{gcide} package.
21656 @end defvr
21657
21658 The following is an example @code{dicod-service} configuration.
21659
21660 @example
21661 (dicod-service #:config
21662 (dicod-configuration
21663 (handlers (list (dicod-handler
21664 (name "wordnet")
21665 (module "dictorg")
21666 (options
21667 (list #~(string-append "dbdir=" #$wordnet))))))
21668 (databases (list (dicod-database
21669 (name "wordnet")
21670 (complex? #t)
21671 (handler "wordnet")
21672 (options '("database=wn")))
21673 %dicod-database:gcide))))
21674 @end example
21675
21676 @node Setuid Programs
21677 @subsection Setuid Programs
21678
21679 @cindex setuid programs
21680 Some programs need to run with ``root'' privileges, even when they are
21681 launched by unprivileged users. A notorious example is the
21682 @command{passwd} program, which users can run to change their
21683 password, and which needs to access the @file{/etc/passwd} and
21684 @file{/etc/shadow} files---something normally restricted to root, for
21685 obvious security reasons. To address that, these executables are
21686 @dfn{setuid-root}, meaning that they always run with root privileges
21687 (@pxref{How Change Persona,,, libc, The GNU C Library Reference Manual},
21688 for more info about the setuid mechanism.)
21689
21690 The store itself @emph{cannot} contain setuid programs: that would be a
21691 security issue since any user on the system can write derivations that
21692 populate the store (@pxref{The Store}). Thus, a different mechanism is
21693 used: instead of changing the setuid bit directly on files that are in
21694 the store, we let the system administrator @emph{declare} which programs
21695 should be setuid root.
21696
21697 The @code{setuid-programs} field of an @code{operating-system}
21698 declaration contains a list of G-expressions denoting the names of
21699 programs to be setuid-root (@pxref{Using the Configuration System}).
21700 For instance, the @command{passwd} program, which is part of the Shadow
21701 package, can be designated by this G-expression (@pxref{G-Expressions}):
21702
21703 @example
21704 #~(string-append #$shadow "/bin/passwd")
21705 @end example
21706
21707 A default set of setuid programs is defined by the
21708 @code{%setuid-programs} variable of the @code{(gnu system)} module.
21709
21710 @defvr {Scheme Variable} %setuid-programs
21711 A list of G-expressions denoting common programs that are setuid-root.
21712
21713 The list includes commands such as @command{passwd}, @command{ping},
21714 @command{su}, and @command{sudo}.
21715 @end defvr
21716
21717 Under the hood, the actual setuid programs are created in the
21718 @file{/run/setuid-programs} directory at system activation time. The
21719 files in this directory refer to the ``real'' binaries, which are in the
21720 store.
21721
21722 @node X.509 Certificates
21723 @subsection X.509 Certificates
21724
21725 @cindex HTTPS, certificates
21726 @cindex X.509 certificates
21727 @cindex TLS
21728 Web servers available over HTTPS (that is, HTTP over the transport-layer
21729 security mechanism, TLS) send client programs an @dfn{X.509 certificate}
21730 that the client can then use to @emph{authenticate} the server. To do
21731 that, clients verify that the server's certificate is signed by a
21732 so-called @dfn{certificate authority} (CA). But to verify the CA's
21733 signature, clients must have first acquired the CA's certificate.
21734
21735 Web browsers such as GNU@tie{}IceCat include their own set of CA
21736 certificates, such that they are able to verify CA signatures
21737 out-of-the-box.
21738
21739 However, most other programs that can talk HTTPS---@command{wget},
21740 @command{git}, @command{w3m}, etc.---need to be told where CA
21741 certificates can be found.
21742
21743 @cindex @code{nss-certs}
21744 In GuixSD, this is done by adding a package that provides certificates
21745 to the @code{packages} field of the @code{operating-system} declaration
21746 (@pxref{operating-system Reference}). GuixSD includes one such package,
21747 @code{nss-certs}, which is a set of CA certificates provided as part of
21748 Mozilla's Network Security Services.
21749
21750 Note that it is @emph{not} part of @var{%base-packages}, so you need to
21751 explicitly add it. The @file{/etc/ssl/certs} directory, which is where
21752 most applications and libraries look for certificates by default, points
21753 to the certificates installed globally.
21754
21755 Unprivileged users, including users of Guix on a foreign distro,
21756 can also install their own certificate package in
21757 their profile. A number of environment variables need to be defined so
21758 that applications and libraries know where to find them. Namely, the
21759 OpenSSL library honors the @code{SSL_CERT_DIR} and @code{SSL_CERT_FILE}
21760 variables. Some applications add their own environment variables; for
21761 instance, the Git version control system honors the certificate bundle
21762 pointed to by the @code{GIT_SSL_CAINFO} environment variable. Thus, you
21763 would typically run something like:
21764
21765 @example
21766 $ guix package -i nss-certs
21767 $ export SSL_CERT_DIR="$HOME/.guix-profile/etc/ssl/certs"
21768 $ export SSL_CERT_FILE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
21769 $ export GIT_SSL_CAINFO="$SSL_CERT_FILE"
21770 @end example
21771
21772 As another example, R requires the @code{CURL_CA_BUNDLE} environment
21773 variable to point to a certificate bundle, so you would have to run
21774 something like this:
21775
21776 @example
21777 $ guix package -i nss-certs
21778 $ export CURL_CA_BUNDLE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
21779 @end example
21780
21781 For other applications you may want to look up the required environment
21782 variable in the relevant documentation.
21783
21784
21785 @node Name Service Switch
21786 @subsection Name Service Switch
21787
21788 @cindex name service switch
21789 @cindex NSS
21790 The @code{(gnu system nss)} module provides bindings to the
21791 configuration file of the libc @dfn{name service switch} or @dfn{NSS}
21792 (@pxref{NSS Configuration File,,, libc, The GNU C Library Reference
21793 Manual}). In a nutshell, the NSS is a mechanism that allows libc to be
21794 extended with new ``name'' lookup methods for system databases, which
21795 includes host names, service names, user accounts, and more (@pxref{Name
21796 Service Switch, System Databases and Name Service Switch,, libc, The GNU
21797 C Library Reference Manual}).
21798
21799 The NSS configuration specifies, for each system database, which lookup
21800 method is to be used, and how the various methods are chained
21801 together---for instance, under which circumstances NSS should try the
21802 next method in the list. The NSS configuration is given in the
21803 @code{name-service-switch} field of @code{operating-system} declarations
21804 (@pxref{operating-system Reference, @code{name-service-switch}}).
21805
21806 @cindex nss-mdns
21807 @cindex .local, host name lookup
21808 As an example, the declaration below configures the NSS to use the
21809 @uref{http://0pointer.de/lennart/projects/nss-mdns/, @code{nss-mdns}
21810 back-end}, which supports host name lookups over multicast DNS (mDNS)
21811 for host names ending in @code{.local}:
21812
21813 @example
21814 (name-service-switch
21815 (hosts (list %files ;first, check /etc/hosts
21816
21817 ;; If the above did not succeed, try
21818 ;; with 'mdns_minimal'.
21819 (name-service
21820 (name "mdns_minimal")
21821
21822 ;; 'mdns_minimal' is authoritative for
21823 ;; '.local'. When it returns "not found",
21824 ;; no need to try the next methods.
21825 (reaction (lookup-specification
21826 (not-found => return))))
21827
21828 ;; Then fall back to DNS.
21829 (name-service
21830 (name "dns"))
21831
21832 ;; Finally, try with the "full" 'mdns'.
21833 (name-service
21834 (name "mdns")))))
21835 @end example
21836
21837 Do not worry: the @code{%mdns-host-lookup-nss} variable (see below)
21838 contains this configuration, so you will not have to type it if all you
21839 want is to have @code{.local} host lookup working.
21840
21841 Note that, in this case, in addition to setting the
21842 @code{name-service-switch} of the @code{operating-system} declaration,
21843 you also need to use @code{avahi-service} (@pxref{Networking Services,
21844 @code{avahi-service}}), or @var{%desktop-services}, which includes it
21845 (@pxref{Desktop Services}). Doing this makes @code{nss-mdns} accessible
21846 to the name service cache daemon (@pxref{Base Services,
21847 @code{nscd-service}}).
21848
21849 For convenience, the following variables provide typical NSS
21850 configurations.
21851
21852 @defvr {Scheme Variable} %default-nss
21853 This is the default name service switch configuration, a
21854 @code{name-service-switch} object.
21855 @end defvr
21856
21857 @defvr {Scheme Variable} %mdns-host-lookup-nss
21858 This is the name service switch configuration with support for host name
21859 lookup over multicast DNS (mDNS) for host names ending in @code{.local}.
21860 @end defvr
21861
21862 The reference for name service switch configuration is given below. It
21863 is a direct mapping of the configuration file format of the C library , so
21864 please refer to the C library manual for more information (@pxref{NSS
21865 Configuration File,,, libc, The GNU C Library Reference Manual}).
21866 Compared to the configuration file format of libc NSS, it has the advantage
21867 not only of adding this warm parenthetic feel that we like, but also
21868 static checks: you will know about syntax errors and typos as soon as you
21869 run @command{guix system}.
21870
21871 @deftp {Data Type} name-service-switch
21872
21873 This is the data type representation the configuration of libc's name
21874 service switch (NSS). Each field below represents one of the supported
21875 system databases.
21876
21877 @table @code
21878 @item aliases
21879 @itemx ethers
21880 @itemx group
21881 @itemx gshadow
21882 @itemx hosts
21883 @itemx initgroups
21884 @itemx netgroup
21885 @itemx networks
21886 @itemx password
21887 @itemx public-key
21888 @itemx rpc
21889 @itemx services
21890 @itemx shadow
21891 The system databases handled by the NSS. Each of these fields must be a
21892 list of @code{<name-service>} objects (see below).
21893 @end table
21894 @end deftp
21895
21896 @deftp {Data Type} name-service
21897
21898 This is the data type representing an actual name service and the
21899 associated lookup action.
21900
21901 @table @code
21902 @item name
21903 A string denoting the name service (@pxref{Services in the NSS
21904 configuration,,, libc, The GNU C Library Reference Manual}).
21905
21906 Note that name services listed here must be visible to nscd. This is
21907 achieved by passing the @code{#:name-services} argument to
21908 @code{nscd-service} the list of packages providing the needed name
21909 services (@pxref{Base Services, @code{nscd-service}}).
21910
21911 @item reaction
21912 An action specified using the @code{lookup-specification} macro
21913 (@pxref{Actions in the NSS configuration,,, libc, The GNU C Library
21914 Reference Manual}). For example:
21915
21916 @example
21917 (lookup-specification (unavailable => continue)
21918 (success => return))
21919 @end example
21920 @end table
21921 @end deftp
21922
21923 @node Initial RAM Disk
21924 @subsection Initial RAM Disk
21925
21926 @cindex initrd
21927 @cindex initial RAM disk
21928 For bootstrapping purposes, the Linux-Libre kernel is passed an
21929 @dfn{initial RAM disk}, or @dfn{initrd}. An initrd contains a temporary
21930 root file system as well as an initialization script. The latter is
21931 responsible for mounting the real root file system, and for loading any
21932 kernel modules that may be needed to achieve that.
21933
21934 The @code{initrd-modules} field of an @code{operating-system}
21935 declaration allows you to specify Linux-libre kernel modules that must
21936 be available in the initrd. In particular, this is where you would list
21937 modules needed to actually drive the hard disk where your root partition
21938 is---although the default value of @code{initrd-modules} should cover
21939 most use cases. For example, assuming you need the @code{megaraid_sas}
21940 module in addition to the default modules to be able to access your root
21941 file system, you would write:
21942
21943 @example
21944 (operating-system
21945 ;; @dots{}
21946 (initrd-modules (cons "megaraid_sas" %base-initrd-modules)))
21947 @end example
21948
21949 @defvr {Scheme Variable} %base-initrd-modules
21950 This is the list of kernel modules included in the initrd by default.
21951 @end defvr
21952
21953 Furthermore, if you need lower-level customization, the @code{initrd}
21954 field of an @code{operating-system} declaration allows
21955 you to specify which initrd you would like to use. The @code{(gnu
21956 system linux-initrd)} module provides three ways to build an initrd: the
21957 high-level @code{base-initrd} procedure and the low-level
21958 @code{raw-initrd} and @code{expression->initrd} procedures.
21959
21960 The @code{base-initrd} procedure is intended to cover most common uses.
21961 For example, if you want to add a bunch of kernel modules to be loaded
21962 at boot time, you can define the @code{initrd} field of the operating
21963 system declaration like this:
21964
21965 @example
21966 (initrd (lambda (file-systems . rest)
21967 ;; Create a standard initrd but set up networking
21968 ;; with the parameters QEMU expects by default.
21969 (apply base-initrd file-systems
21970 #:qemu-networking? #t
21971 rest)))
21972 @end example
21973
21974 The @code{base-initrd} procedure also handles common use cases that
21975 involves using the system as a QEMU guest, or as a ``live'' system with
21976 volatile root file system.
21977
21978 The @code{base-initrd} procedure is built from @code{raw-initrd} procedure.
21979 Unlike @code{base-initrd}, @code{raw-initrd} doesn't do anything high-level,
21980 such as trying to guess which kernel modules and packages should be included
21981 to the initrd. An example use of @code{raw-initrd} is when a user has
21982 a custom Linux kernel configuration and default kernel modules included by
21983 @code{base-initrd} are not available.
21984
21985 The initial RAM disk produced by @code{base-initrd} or @code{raw-initrd}
21986 honors several options passed on the Linux kernel command line
21987 (that is, arguments passed @i{via} the @code{linux} command of GRUB, or the
21988 @code{-append} option of QEMU), notably:
21989
21990 @table @code
21991 @item --load=@var{boot}
21992 Tell the initial RAM disk to load @var{boot}, a file containing a Scheme
21993 program, once it has mounted the root file system.
21994
21995 GuixSD uses this option to yield control to a boot program that runs the
21996 service activation programs and then spawns the GNU@tie{}Shepherd, the
21997 initialization system.
21998
21999 @item --root=@var{root}
22000 Mount @var{root} as the root file system. @var{root} can be a
22001 device name like @code{/dev/sda1}, a file system label, or a file system
22002 UUID.
22003
22004 @item --system=@var{system}
22005 Have @file{/run/booted-system} and @file{/run/current-system} point to
22006 @var{system}.
22007
22008 @item modprobe.blacklist=@var{modules}@dots{}
22009 @cindex module, black-listing
22010 @cindex black list, of kernel modules
22011 Instruct the initial RAM disk as well as the @command{modprobe} command
22012 (from the kmod package) to refuse to load @var{modules}. @var{modules}
22013 must be a comma-separated list of module names---e.g.,
22014 @code{usbkbd,9pnet}.
22015
22016 @item --repl
22017 Start a read-eval-print loop (REPL) from the initial RAM disk before it
22018 tries to load kernel modules and to mount the root file system. Our
22019 marketing team calls it @dfn{boot-to-Guile}. The Schemer in you will
22020 love it. @xref{Using Guile Interactively,,, guile, GNU Guile Reference
22021 Manual}, for more information on Guile's REPL.
22022
22023 @end table
22024
22025 Now that you know all the features that initial RAM disks produced by
22026 @code{base-initrd} and @code{raw-initrd} provide,
22027 here is how to use it and customize it further.
22028
22029 @cindex initrd
22030 @cindex initial RAM disk
22031 @deffn {Scheme Procedure} raw-initrd @var{file-systems} @
22032 [#:linux-modules '()] [#:mapped-devices '()] @
22033 [#:helper-packages '()] [#:qemu-networking? #f] [#:volatile-root? #f]
22034 Return a derivation that builds a raw initrd. @var{file-systems} is
22035 a list of file systems to be mounted by the initrd, possibly in addition to
22036 the root file system specified on the kernel command line via @code{--root}.
22037 @var{linux-modules} is a list of kernel modules to be loaded at boot time.
22038 @var{mapped-devices} is a list of device mappings to realize before
22039 @var{file-systems} are mounted (@pxref{Mapped Devices}).
22040 @var{helper-packages} is a list of packages to be copied in the initrd. It may
22041 include @code{e2fsck/static} or other packages needed by the initrd to check
22042 the root file system.
22043
22044 When @var{qemu-networking?} is true, set up networking with the standard QEMU
22045 parameters. When @var{virtio?} is true, load additional modules so that the
22046 initrd can be used as a QEMU guest with para-virtualized I/O drivers.
22047
22048 When @var{volatile-root?} is true, the root file system is writable but any changes
22049 to it are lost.
22050 @end deffn
22051
22052 @deffn {Scheme Procedure} base-initrd @var{file-systems} @
22053 [#:mapped-devices '()] [#:qemu-networking? #f] [#:volatile-root? #f]@
22054 [#:linux-modules '()]
22055 Return as a file-like object a generic initrd, with kernel
22056 modules taken from @var{linux}. @var{file-systems} is a list of file-systems to be
22057 mounted by the initrd, possibly in addition to the root file system specified
22058 on the kernel command line via @code{--root}. @var{mapped-devices} is a list of device
22059 mappings to realize before @var{file-systems} are mounted.
22060
22061 @var{qemu-networking?} and @var{volatile-root?} behaves as in @code{raw-initrd}.
22062
22063 The initrd is automatically populated with all the kernel modules necessary
22064 for @var{file-systems} and for the given options. Additional kernel
22065 modules can be listed in @var{linux-modules}. They will be added to the initrd, and
22066 loaded at boot time in the order in which they appear.
22067 @end deffn
22068
22069 Needless to say, the initrds we produce and use embed a
22070 statically-linked Guile, and the initialization program is a Guile
22071 program. That gives a lot of flexibility. The
22072 @code{expression->initrd} procedure builds such an initrd, given the
22073 program to run in that initrd.
22074
22075 @deffn {Scheme Procedure} expression->initrd @var{exp} @
22076 [#:guile %guile-static-stripped] [#:name "guile-initrd"]
22077 Return as a file-like object a Linux initrd (a gzipped cpio archive)
22078 containing @var{guile} and that evaluates @var{exp}, a G-expression,
22079 upon booting. All the derivations referenced by @var{exp} are
22080 automatically copied to the initrd.
22081 @end deffn
22082
22083 @node Bootloader Configuration
22084 @subsection Bootloader Configuration
22085
22086 @cindex bootloader
22087 @cindex boot loader
22088
22089 The operating system supports multiple bootloaders. The bootloader is
22090 configured using @code{bootloader-configuration} declaration. All the
22091 fields of this structure are bootloader agnostic except for one field,
22092 @code{bootloader} that indicates the bootloader to be configured and
22093 installed.
22094
22095 Some of the bootloaders do not honor every field of
22096 @code{bootloader-configuration}. For instance, the extlinux
22097 bootloader does not support themes and thus ignores the @code{theme}
22098 field.
22099
22100 @deftp {Data Type} bootloader-configuration
22101 The type of a bootloader configuration declaration.
22102
22103 @table @asis
22104
22105 @item @code{bootloader}
22106 @cindex EFI, bootloader
22107 @cindex UEFI, bootloader
22108 @cindex BIOS, bootloader
22109 The bootloader to use, as a @code{bootloader} object. For now
22110 @code{grub-bootloader}, @code{grub-efi-bootloader},
22111 @code{extlinux-bootloader} and @code{u-boot-bootloader} are supported.
22112
22113 @vindex grub-efi-bootloader
22114 @code{grub-efi-bootloader} allows to boot on modern systems using the
22115 @dfn{Unified Extensible Firmware Interface} (UEFI). This is what you should
22116 use if the installation image contains a @file{/sys/firmware/efi} directory
22117 when you boot it on your system.
22118
22119 @vindex grub-bootloader
22120 @code{grub-bootloader} allows you to boot in particular Intel-based machines
22121 in ``legacy'' BIOS mode.
22122
22123 @cindex ARM, bootloaders
22124 @cindex AArch64, bootloaders
22125 Available bootloaders are described in @code{(gnu bootloader @dots{})}
22126 modules. In particular, @code{(gnu bootloader u-boot)} contains definitions
22127 of bootloaders for a wide range of ARM and AArch64 systems, using the
22128 @uref{http://www.denx.de/wiki/U-Boot/, U-Boot bootloader}.
22129
22130 @item @code{target}
22131 This is a string denoting the target onto which to install the
22132 bootloader.
22133
22134 The interpretation depends on the bootloader in question. For
22135 @code{grub-bootloader}, for example, it should be a device name understood by
22136 the bootloader @command{installer} command, such as @code{/dev/sda} or
22137 @code{(hd0)} (@pxref{Invoking grub-install,,, grub, GNU GRUB Manual}). For
22138 @code{grub-efi-bootloader}, it should be the mount point of the EFI file
22139 system, usually @file{/boot/efi}.
22140
22141 @item @code{menu-entries} (default: @code{()})
22142 A possibly empty list of @code{menu-entry} objects (see below), denoting
22143 entries to appear in the bootloader menu, in addition to the current
22144 system entry and the entry pointing to previous system generations.
22145
22146 @item @code{default-entry} (default: @code{0})
22147 The index of the default boot menu entry. Index 0 is for the entry of the
22148 current system.
22149
22150 @item @code{timeout} (default: @code{5})
22151 The number of seconds to wait for keyboard input before booting. Set to
22152 0 to boot immediately, and to -1 to wait indefinitely.
22153
22154 @item @code{theme} (default: @var{#f})
22155 The bootloader theme object describing the theme to use. If no theme
22156 is provided, some bootloaders might use a default theme, that's true
22157 for GRUB.
22158
22159 @item @code{terminal-outputs} (default: @code{'gfxterm})
22160 The output terminals used for the bootloader boot menu, as a list of
22161 symbols. GRUB accepts the values: @code{console}, @code{serial},
22162 @code{serial_@{0-3@}}, @code{gfxterm}, @code{vga_text},
22163 @code{mda_text}, @code{morse}, and @code{pkmodem}. This field
22164 corresponds to the GRUB variable @code{GRUB_TERMINAL_OUTPUT} (@pxref{Simple
22165 configuration,,, grub,GNU GRUB manual}).
22166
22167 @item @code{terminal-inputs} (default: @code{'()})
22168 The input terminals used for the bootloader boot menu, as a list of
22169 symbols. For GRUB, the default is the native platform terminal as
22170 determined at run-time. GRUB accepts the values: @code{console},
22171 @code{serial}, @code{serial_@{0-3@}}, @code{at_keyboard}, and
22172 @code{usb_keyboard}. This field corresponds to the GRUB variable
22173 @code{GRUB_TERMINAL_INPUT} (@pxref{Simple configuration,,, grub,GNU GRUB
22174 manual}).
22175
22176 @item @code{serial-unit} (default: @code{#f})
22177 The serial unit used by the bootloader, as an integer from 0 to 3.
22178 For GRUB, it is chosen at run-time; currently GRUB chooses 0, which
22179 corresponds to COM1 (@pxref{Serial terminal,,, grub,GNU GRUB manual}).
22180
22181 @item @code{serial-speed} (default: @code{#f})
22182 The speed of the serial interface, as an integer. For GRUB, the
22183 default value is chosen at run-time; currently GRUB chooses
22184 9600@tie{}bps (@pxref{Serial terminal,,, grub,GNU GRUB manual}).
22185 @end table
22186
22187 @end deftp
22188
22189 @cindex dual boot
22190 @cindex boot menu
22191 Should you want to list additional boot menu entries @i{via} the
22192 @code{menu-entries} field above, you will need to create them with the
22193 @code{menu-entry} form. For example, imagine you want to be able to
22194 boot another distro (hard to imagine!), you can define a menu entry
22195 along these lines:
22196
22197 @example
22198 (menu-entry
22199 (label "The Other Distro")
22200 (linux "/boot/old/vmlinux-2.6.32")
22201 (linux-arguments '("root=/dev/sda2"))
22202 (initrd "/boot/old/initrd"))
22203 @end example
22204
22205 Details below.
22206
22207 @deftp {Data Type} menu-entry
22208 The type of an entry in the bootloader menu.
22209
22210 @table @asis
22211
22212 @item @code{label}
22213 The label to show in the menu---e.g., @code{"GNU"}.
22214
22215 @item @code{linux}
22216 The Linux kernel image to boot, for example:
22217
22218 @example
22219 (file-append linux-libre "/bzImage")
22220 @end example
22221
22222 For GRUB, it is also possible to specify a device explicitly in the
22223 file path using GRUB's device naming convention (@pxref{Naming
22224 convention,,, grub, GNU GRUB manual}), for example:
22225
22226 @example
22227 "(hd0,msdos1)/boot/vmlinuz"
22228 @end example
22229
22230 If the device is specified explicitly as above, then the @code{device}
22231 field is ignored entirely.
22232
22233 @item @code{linux-arguments} (default: @code{()})
22234 The list of extra Linux kernel command-line arguments---e.g.,
22235 @code{("console=ttyS0")}.
22236
22237 @item @code{initrd}
22238 A G-Expression or string denoting the file name of the initial RAM disk
22239 to use (@pxref{G-Expressions}).
22240 @item @code{device} (default: @code{#f})
22241 The device where the kernel and initrd are to be found---i.e., for GRUB,
22242 @dfn{root} for this menu entry (@pxref{root,,, grub, GNU GRUB manual}).
22243
22244 This may be a file system label (a string), a file system UUID (a
22245 bytevector, @pxref{File Systems}), or @code{#f}, in which case
22246 the bootloader will search the device containing the file specified by
22247 the @code{linux} field (@pxref{search,,, grub, GNU GRUB manual}). It
22248 must @emph{not} be an OS device name such as @file{/dev/sda1}.
22249
22250 @end table
22251 @end deftp
22252
22253 @c FIXME: Write documentation once it's stable.
22254 Fow now only GRUB has theme support. GRUB themes are created using
22255 the @code{grub-theme} form, which is not documented yet.
22256
22257 @defvr {Scheme Variable} %default-theme
22258 This is the default GRUB theme used by the operating system if no
22259 @code{theme} field is specified in @code{bootloader-configuration}
22260 record.
22261
22262 It comes with a fancy background image displaying the GNU and Guix
22263 logos.
22264 @end defvr
22265
22266
22267 @node Invoking guix system
22268 @subsection Invoking @code{guix system}
22269
22270 Once you have written an operating system declaration as seen in the
22271 previous section, it can be @dfn{instantiated} using the @command{guix
22272 system} command. The synopsis is:
22273
22274 @example
22275 guix system @var{options}@dots{} @var{action} @var{file}
22276 @end example
22277
22278 @var{file} must be the name of a file containing an
22279 @code{operating-system} declaration. @var{action} specifies how the
22280 operating system is instantiated. Currently the following values are
22281 supported:
22282
22283 @table @code
22284 @item search
22285 Display available service type definitions that match the given regular
22286 expressions, sorted by relevance:
22287
22288 @example
22289 $ guix system search console font
22290 name: console-fonts
22291 location: gnu/services/base.scm:729:2
22292 extends: shepherd-root
22293 description: Install the given fonts on the specified ttys (fonts are
22294 + per virtual console on GNU/Linux). The value of this service is a list
22295 + of tty/font pairs like:
22296 +
22297 + '(("tty1" . "LatGrkCyr-8x16"))
22298 relevance: 20
22299
22300 name: mingetty
22301 location: gnu/services/base.scm:1048:2
22302 extends: shepherd-root
22303 description: Provide console login using the `mingetty' program.
22304 relevance: 2
22305
22306 name: login
22307 location: gnu/services/base.scm:775:2
22308 extends: pam
22309 description: Provide a console log-in service as specified by its
22310 + configuration value, a `login-configuration' object.
22311 relevance: 2
22312
22313 @dots{}
22314 @end example
22315
22316 As for @command{guix package --search}, the result is written in
22317 @code{recutils} format, which makes it easy to filter the output
22318 (@pxref{Top, GNU recutils databases,, recutils, GNU recutils manual}).
22319
22320 @item reconfigure
22321 Build the operating system described in @var{file}, activate it, and
22322 switch to it@footnote{This action (and the related actions
22323 @code{switch-generation} and @code{roll-back}) are usable only on
22324 systems already running GuixSD.}.
22325
22326 This effects all the configuration specified in @var{file}: user
22327 accounts, system services, global package list, setuid programs, etc.
22328 The command starts system services specified in @var{file} that are not
22329 currently running; if a service is currently running this command will
22330 arrange for it to be upgraded the next time it is stopped (eg. by
22331 @code{herd stop X} or @code{herd restart X}).
22332
22333 This command creates a new generation whose number is one greater than
22334 the current generation (as reported by @command{guix system
22335 list-generations}). If that generation already exists, it will be
22336 overwritten. This behavior mirrors that of @command{guix package}
22337 (@pxref{Invoking guix package}).
22338
22339 It also adds a bootloader menu entry for the new OS configuration,
22340 ---unless @option{--no-bootloader} is passed. For GRUB, it moves
22341 entries for older configurations to a submenu, allowing you to choose
22342 an older system generation at boot time should you need it.
22343
22344 @quotation Note
22345 @c The paragraph below refers to the problem discussed at
22346 @c <http://lists.gnu.org/archive/html/guix-devel/2014-08/msg00057.html>.
22347 It is highly recommended to run @command{guix pull} once before you run
22348 @command{guix system reconfigure} for the first time (@pxref{Invoking
22349 guix pull}). Failing to do that you would see an older version of Guix
22350 once @command{reconfigure} has completed.
22351 @end quotation
22352
22353 @item switch-generation
22354 @cindex generations
22355 Switch to an existing system generation. This action atomically
22356 switches the system profile to the specified system generation. It
22357 also rearranges the system's existing bootloader menu entries. It
22358 makes the menu entry for the specified system generation the default,
22359 and it moves the entries for the other generatiors to a submenu, if
22360 supported by the bootloader being used. The next time the system
22361 boots, it will use the specified system generation.
22362
22363 The bootloader itself is not being reinstalled when using this
22364 command. Thus, the installed bootloader is used with an updated
22365 configuration file.
22366
22367 The target generation can be specified explicitly by its generation
22368 number. For example, the following invocation would switch to system
22369 generation 7:
22370
22371 @example
22372 guix system switch-generation 7
22373 @end example
22374
22375 The target generation can also be specified relative to the current
22376 generation with the form @code{+N} or @code{-N}, where @code{+3} means
22377 ``3 generations ahead of the current generation,'' and @code{-1} means
22378 ``1 generation prior to the current generation.'' When specifying a
22379 negative value such as @code{-1}, you must precede it with @code{--} to
22380 prevent it from being parsed as an option. For example:
22381
22382 @example
22383 guix system switch-generation -- -1
22384 @end example
22385
22386 Currently, the effect of invoking this action is @emph{only} to switch
22387 the system profile to an existing generation and rearrange the
22388 bootloader menu entries. To actually start using the target system
22389 generation, you must reboot after running this action. In the future,
22390 it will be updated to do the same things as @command{reconfigure},
22391 like activating and deactivating services.
22392
22393 This action will fail if the specified generation does not exist.
22394
22395 @item roll-back
22396 @cindex rolling back
22397 Switch to the preceding system generation. The next time the system
22398 boots, it will use the preceding system generation. This is the inverse
22399 of @command{reconfigure}, and it is exactly the same as invoking
22400 @command{switch-generation} with an argument of @code{-1}.
22401
22402 Currently, as with @command{switch-generation}, you must reboot after
22403 running this action to actually start using the preceding system
22404 generation.
22405
22406 @item build
22407 Build the derivation of the operating system, which includes all the
22408 configuration files and programs needed to boot and run the system.
22409 This action does not actually install anything.
22410
22411 @item init
22412 Populate the given directory with all the files necessary to run the
22413 operating system specified in @var{file}. This is useful for first-time
22414 installations of GuixSD. For instance:
22415
22416 @example
22417 guix system init my-os-config.scm /mnt
22418 @end example
22419
22420 copies to @file{/mnt} all the store items required by the configuration
22421 specified in @file{my-os-config.scm}. This includes configuration
22422 files, packages, and so on. It also creates other essential files
22423 needed for the system to operate correctly---e.g., the @file{/etc},
22424 @file{/var}, and @file{/run} directories, and the @file{/bin/sh} file.
22425
22426 This command also installs bootloader on the target specified in
22427 @file{my-os-config}, unless the @option{--no-bootloader} option was
22428 passed.
22429
22430 @item vm
22431 @cindex virtual machine
22432 @cindex VM
22433 @anchor{guix system vm}
22434 Build a virtual machine that contains the operating system declared in
22435 @var{file}, and return a script to run that virtual machine (VM).
22436 Arguments given to the script are passed to QEMU as in the example
22437 below, which enables networking and requests 1@tie{}GiB of RAM for the
22438 emulated machine:
22439
22440 @example
22441 $ /gnu/store/@dots{}-run-vm.sh -m 1024 -net user
22442 @end example
22443
22444 The VM shares its store with the host system.
22445
22446 Additional file systems can be shared between the host and the VM using
22447 the @code{--share} and @code{--expose} command-line options: the former
22448 specifies a directory to be shared with write access, while the latter
22449 provides read-only access to the shared directory.
22450
22451 The example below creates a VM in which the user's home directory is
22452 accessible read-only, and where the @file{/exchange} directory is a
22453 read-write mapping of @file{$HOME/tmp} on the host:
22454
22455 @example
22456 guix system vm my-config.scm \
22457 --expose=$HOME --share=$HOME/tmp=/exchange
22458 @end example
22459
22460 On GNU/Linux, the default is to boot directly to the kernel; this has
22461 the advantage of requiring only a very tiny root disk image since the
22462 store of the host can then be mounted.
22463
22464 The @code{--full-boot} option forces a complete boot sequence, starting
22465 with the bootloader. This requires more disk space since a root image
22466 containing at least the kernel, initrd, and bootloader data files must
22467 be created. The @code{--image-size} option can be used to specify the
22468 size of the image.
22469
22470 @cindex System images, creation in various formats
22471 @cindex Creating system images in various formats
22472 @item vm-image
22473 @itemx disk-image
22474 @itemx docker-image
22475 Return a virtual machine, disk image, or Docker image of the operating
22476 system declared in @var{file} that stands alone. By default,
22477 @command{guix system} estimates the size of the image needed to store
22478 the system, but you can use the @option{--image-size} option to specify
22479 a value. Docker images are built to contain exactly what they need, so
22480 the @option{--image-size} option is ignored in the case of
22481 @code{docker-image}.
22482
22483 You can specify the root file system type by using the
22484 @option{--file-system-type} option. It defaults to @code{ext4}.
22485
22486 When using @code{vm-image}, the returned image is in qcow2 format, which
22487 the QEMU emulator can efficiently use. @xref{Running GuixSD in a VM},
22488 for more information on how to run the image in a virtual machine.
22489
22490 When using @code{disk-image}, a raw disk image is produced; it can be
22491 copied as is to a USB stick, for instance. Assuming @code{/dev/sdc} is
22492 the device corresponding to a USB stick, one can copy the image to it
22493 using the following command:
22494
22495 @example
22496 # dd if=$(guix system disk-image my-os.scm) of=/dev/sdc
22497 @end example
22498
22499 When using @code{docker-image}, a Docker image is produced. Guix builds
22500 the image from scratch, not from a pre-existing Docker base image. As a
22501 result, it contains @emph{exactly} what you define in the operating
22502 system configuration file. You can then load the image and launch a
22503 Docker container using commands like the following:
22504
22505 @example
22506 image_id="$(docker load < guixsd-docker-image.tar.gz)"
22507 docker run -e GUIX_NEW_SYSTEM=/var/guix/profiles/system \\
22508 --entrypoint /var/guix/profiles/system/profile/bin/guile \\
22509 $image_id /var/guix/profiles/system/boot
22510 @end example
22511
22512 This command starts a new Docker container from the specified image. It
22513 will boot the GuixSD system in the usual manner, which means it will
22514 start any services you have defined in the operating system
22515 configuration. Depending on what you run in the Docker container, it
22516 may be necessary to give the container additional permissions. For
22517 example, if you intend to build software using Guix inside of the Docker
22518 container, you may need to pass the @option{--privileged} option to
22519 @code{docker run}.
22520
22521 @item container
22522 Return a script to run the operating system declared in @var{file}
22523 within a container. Containers are a set of lightweight isolation
22524 mechanisms provided by the kernel Linux-libre. Containers are
22525 substantially less resource-demanding than full virtual machines since
22526 the kernel, shared objects, and other resources can be shared with the
22527 host system; this also means they provide thinner isolation.
22528
22529 Currently, the script must be run as root in order to support more than
22530 a single user and group. The container shares its store with the host
22531 system.
22532
22533 As with the @code{vm} action (@pxref{guix system vm}), additional file
22534 systems to be shared between the host and container can be specified
22535 using the @option{--share} and @option{--expose} options:
22536
22537 @example
22538 guix system container my-config.scm \
22539 --expose=$HOME --share=$HOME/tmp=/exchange
22540 @end example
22541
22542 @quotation Note
22543 This option requires Linux-libre 3.19 or newer.
22544 @end quotation
22545
22546 @end table
22547
22548 @var{options} can contain any of the common build options (@pxref{Common
22549 Build Options}). In addition, @var{options} can contain one of the
22550 following:
22551
22552 @table @option
22553 @item --expression=@var{expr}
22554 @itemx -e @var{expr}
22555 Consider the operating-system @var{expr} evaluates to.
22556 This is an alternative to specifying a file which evaluates to an
22557 operating system.
22558 This is used to generate the GuixSD installer @pxref{Building the
22559 Installation Image}).
22560
22561 @item --system=@var{system}
22562 @itemx -s @var{system}
22563 Attempt to build for @var{system} instead of the host system type.
22564 This works as per @command{guix build} (@pxref{Invoking guix build}).
22565
22566 @item --derivation
22567 @itemx -d
22568 Return the derivation file name of the given operating system without
22569 building anything.
22570
22571 @item --file-system-type=@var{type}
22572 @itemx -t @var{type}
22573 For the @code{disk-image} action, create a file system of the given
22574 @var{type} on the image.
22575
22576 When this option is omitted, @command{guix system} uses @code{ext4}.
22577
22578 @cindex ISO-9660 format
22579 @cindex CD image format
22580 @cindex DVD image format
22581 @code{--file-system-type=iso9660} produces an ISO-9660 image, suitable
22582 for burning on CDs and DVDs.
22583
22584 @item --image-size=@var{size}
22585 For the @code{vm-image} and @code{disk-image} actions, create an image
22586 of the given @var{size}. @var{size} may be a number of bytes, or it may
22587 include a unit as a suffix (@pxref{Block size, size specifications,,
22588 coreutils, GNU Coreutils}).
22589
22590 When this option is omitted, @command{guix system} computes an estimate
22591 of the image size as a function of the size of the system declared in
22592 @var{file}.
22593
22594 @item --root=@var{file}
22595 @itemx -r @var{file}
22596 Make @var{file} a symlink to the result, and register it as a garbage
22597 collector root.
22598
22599 @item --skip-checks
22600 Skip pre-installation safety checks.
22601
22602 By default, @command{guix system init} and @command{guix system
22603 reconfigure} perform safety checks: they make sure the file systems that
22604 appear in the @code{operating-system} declaration actually exist
22605 (@pxref{File Systems}), and that any Linux kernel modules that may be
22606 needed at boot time are listed in @code{initrd-modules} (@pxref{Initial
22607 RAM Disk}). Passing this option skips these tests altogether.
22608
22609 @item --on-error=@var{strategy}
22610 Apply @var{strategy} when an error occurs when reading @var{file}.
22611 @var{strategy} may be one of the following:
22612
22613 @table @code
22614 @item nothing-special
22615 Report the error concisely and exit. This is the default strategy.
22616
22617 @item backtrace
22618 Likewise, but also display a backtrace.
22619
22620 @item debug
22621 Report the error and enter Guile's debugger. From there, you can run
22622 commands such as @code{,bt} to get a backtrace, @code{,locals} to
22623 display local variable values, and more generally inspect the state of the
22624 program. @xref{Debug Commands,,, guile, GNU Guile Reference Manual}, for
22625 a list of available debugging commands.
22626 @end table
22627 @end table
22628
22629 @quotation Note
22630 All the actions above, except @code{build} and @code{init},
22631 can use KVM support in the Linux-libre kernel. Specifically, if the
22632 machine has hardware virtualization support, the corresponding
22633 KVM kernel module should be loaded, and the @file{/dev/kvm} device node
22634 must exist and be readable and writable by the user and by the
22635 build users of the daemon (@pxref{Build Environment Setup}).
22636 @end quotation
22637
22638 Once you have built, configured, re-configured, and re-re-configured
22639 your GuixSD installation, you may find it useful to list the operating
22640 system generations available on disk---and that you can choose from the
22641 bootloader boot menu:
22642
22643 @table @code
22644
22645 @item list-generations
22646 List a summary of each generation of the operating system available on
22647 disk, in a human-readable way. This is similar to the
22648 @option{--list-generations} option of @command{guix package}
22649 (@pxref{Invoking guix package}).
22650
22651 Optionally, one can specify a pattern, with the same syntax that is used
22652 in @command{guix package --list-generations}, to restrict the list of
22653 generations displayed. For instance, the following command displays
22654 generations that are up to 10 days old:
22655
22656 @example
22657 $ guix system list-generations 10d
22658 @end example
22659
22660 @end table
22661
22662 The @command{guix system} command has even more to offer! The following
22663 sub-commands allow you to visualize how your system services relate to
22664 each other:
22665
22666 @anchor{system-extension-graph}
22667 @table @code
22668
22669 @item extension-graph
22670 Emit in Dot/Graphviz format to standard output the @dfn{service
22671 extension graph} of the operating system defined in @var{file}
22672 (@pxref{Service Composition}, for more information on service
22673 extensions.)
22674
22675 The command:
22676
22677 @example
22678 $ guix system extension-graph @var{file} | dot -Tpdf > services.pdf
22679 @end example
22680
22681 produces a PDF file showing the extension relations among services.
22682
22683 @anchor{system-shepherd-graph}
22684 @item shepherd-graph
22685 Emit in Dot/Graphviz format to standard output the @dfn{dependency
22686 graph} of shepherd services of the operating system defined in
22687 @var{file}. @xref{Shepherd Services}, for more information and for an
22688 example graph.
22689
22690 @end table
22691
22692 @node Running GuixSD in a VM
22693 @subsection Running GuixSD in a Virtual Machine
22694
22695 @cindex virtual machine
22696 To run GuixSD in a virtual machine (VM), one can either use the
22697 pre-built GuixSD VM image distributed at
22698 @indicateurl{https://alpha.gnu.org/gnu/guix/guixsd-vm-image-@value{VERSION}.@var{system}.xz}
22699 , or build their own virtual machine image using @command{guix system
22700 vm-image} (@pxref{Invoking guix system}). The returned image is in
22701 qcow2 format, which the @uref{http://qemu.org/, QEMU emulator} can
22702 efficiently use.
22703
22704 @cindex QEMU
22705 If you built your own image, you must copy it out of the store
22706 (@pxref{The Store}) and give yourself permission to write to the copy
22707 before you can use it. When invoking QEMU, you must choose a system
22708 emulator that is suitable for your hardware platform. Here is a minimal
22709 QEMU invocation that will boot the result of @command{guix system
22710 vm-image} on x86_64 hardware:
22711
22712 @example
22713 $ qemu-system-x86_64 \
22714 -net user -net nic,model=virtio \
22715 -enable-kvm -m 256 /tmp/qemu-image
22716 @end example
22717
22718 Here is what each of these options means:
22719
22720 @table @code
22721 @item qemu-system-x86_64
22722 This specifies the hardware platform to emulate. This should match the
22723 host.
22724
22725 @item -net user
22726 Enable the unprivileged user-mode network stack. The guest OS can
22727 access the host but not vice versa. This is the simplest way to get the
22728 guest OS online.
22729
22730 @item -net nic,model=virtio
22731 You must create a network interface of a given model. If you do not
22732 create a NIC, the boot will fail. Assuming your hardware platform is
22733 x86_64, you can get a list of available NIC models by running
22734 @command{qemu-system-x86_64 -net nic,model=help}.
22735
22736 @item -enable-kvm
22737 If your system has hardware virtualization extensions, enabling the
22738 virtual machine support (KVM) of the Linux kernel will make things run
22739 faster.
22740
22741 @item -m 256
22742 RAM available to the guest OS, in mebibytes. Defaults to 128@tie{}MiB,
22743 which may be insufficient for some operations.
22744
22745 @item /tmp/qemu-image
22746 The file name of the qcow2 image.
22747 @end table
22748
22749 The default @command{run-vm.sh} script that is returned by an invocation of
22750 @command{guix system vm} does not add a @command{-net user} flag by default.
22751 To get network access from within the vm add the @code{(dhcp-client-service)}
22752 to your system definition and start the VM using
22753 @command{`guix system vm config.scm` -net user}. An important caveat of using
22754 @command{-net user} for networking is that @command{ping} will not work, because
22755 it uses the ICMP protocol. You'll have to use a different command to check for
22756 network connectivity, for example @command{guix download}.
22757
22758 @subsubsection Connecting Through SSH
22759
22760 @cindex SSH
22761 @cindex SSH server
22762 To enable SSH inside a VM you need to add a SSH server like @code{(dropbear-service)}
22763 or @code{(lsh-service)} to your VM. The @code{(lsh-service}) doesn't currently
22764 boot unsupervised. It requires you to type some characters to initialize the
22765 randomness generator. In addition you need to forward the SSH port, 22 by
22766 default, to the host. You can do this with
22767
22768 @example
22769 `guix system vm config.scm` -net user,hostfwd=tcp::10022-:22
22770 @end example
22771
22772 To connect to the VM you can run
22773
22774 @example
22775 ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 10022
22776 @end example
22777
22778 The @command{-p} tells @command{ssh} the port you want to connect to.
22779 @command{-o UserKnownHostsFile=/dev/null} prevents @command{ssh} from complaining
22780 every time you modify your @command{config.scm} file and the
22781 @command{-o StrictHostKeyChecking=no} prevents you from having to allow a
22782 connection to an unknown host every time you connect.
22783
22784 @subsubsection Using @command{virt-viewer} with Spice
22785
22786 As an alternative to the default @command{qemu} graphical client you can
22787 use the @command{remote-viewer} from the @command{virt-viewer} package. To
22788 connect pass the @command{-spice port=5930,disable-ticketing} flag to
22789 @command{qemu}. See previous section for further information on how to do this.
22790
22791 Spice also allows you to do some nice stuff like share your clipboard with your
22792 VM. To enable that you'll also have to pass the following flags to @command{qemu}:
22793
22794 @example
22795 -device virtio-serial-pci,id=virtio-serial0,max_ports=16,bus=pci.0,addr=0x5
22796 -chardev spicevmc,name=vdagent,id=vdagent
22797 -device virtserialport,nr=1,bus=virtio-serial0.0,chardev=vdagent,
22798 name=com.redhat.spice.0
22799 @end example
22800
22801 You'll also need to add the @pxref{Miscellaneous Services, Spice service}.
22802
22803 @node Defining Services
22804 @subsection Defining Services
22805
22806 The previous sections show the available services and how one can combine
22807 them in an @code{operating-system} declaration. But how do we define
22808 them in the first place? And what is a service anyway?
22809
22810 @menu
22811 * Service Composition:: The model for composing services.
22812 * Service Types and Services:: Types and services.
22813 * Service Reference:: API reference.
22814 * Shepherd Services:: A particular type of service.
22815 @end menu
22816
22817 @node Service Composition
22818 @subsubsection Service Composition
22819
22820 @cindex services
22821 @cindex daemons
22822 Here we define a @dfn{service} as, broadly, something that extends the
22823 functionality of the operating system. Often a service is a process---a
22824 @dfn{daemon}---started when the system boots: a secure shell server, a
22825 Web server, the Guix build daemon, etc. Sometimes a service is a daemon
22826 whose execution can be triggered by another daemon---e.g., an FTP server
22827 started by @command{inetd} or a D-Bus service activated by
22828 @command{dbus-daemon}. Occasionally, a service does not map to a
22829 daemon. For instance, the ``account'' service collects user accounts
22830 and makes sure they exist when the system runs; the ``udev'' service
22831 collects device management rules and makes them available to the eudev
22832 daemon; the @file{/etc} service populates the @file{/etc} directory
22833 of the system.
22834
22835 @cindex service extensions
22836 GuixSD services are connected by @dfn{extensions}. For instance, the
22837 secure shell service @emph{extends} the Shepherd---the GuixSD
22838 initialization system, running as PID@tie{}1---by giving it the command
22839 lines to start and stop the secure shell daemon (@pxref{Networking
22840 Services, @code{lsh-service}}); the UPower service extends the D-Bus
22841 service by passing it its @file{.service} specification, and extends the
22842 udev service by passing it device management rules (@pxref{Desktop
22843 Services, @code{upower-service}}); the Guix daemon service extends the
22844 Shepherd by passing it the command lines to start and stop the daemon,
22845 and extends the account service by passing it a list of required build
22846 user accounts (@pxref{Base Services}).
22847
22848 All in all, services and their ``extends'' relations form a directed
22849 acyclic graph (DAG). If we represent services as boxes and extensions
22850 as arrows, a typical system might provide something like this:
22851
22852 @image{images/service-graph,,5in,Typical service extension graph.}
22853
22854 @cindex system service
22855 At the bottom, we see the @dfn{system service}, which produces the
22856 directory containing everything to run and boot the system, as returned
22857 by the @command{guix system build} command. @xref{Service Reference},
22858 to learn about the other service types shown here.
22859 @xref{system-extension-graph, the @command{guix system extension-graph}
22860 command}, for information on how to generate this representation for a
22861 particular operating system definition.
22862
22863 @cindex service types
22864 Technically, developers can define @dfn{service types} to express these
22865 relations. There can be any number of services of a given type on the
22866 system---for instance, a system running two instances of the GNU secure
22867 shell server (lsh) has two instances of @var{lsh-service-type}, with
22868 different parameters.
22869
22870 The following section describes the programming interface for service
22871 types and services.
22872
22873 @node Service Types and Services
22874 @subsubsection Service Types and Services
22875
22876 A @dfn{service type} is a node in the DAG described above. Let us start
22877 with a simple example, the service type for the Guix build daemon
22878 (@pxref{Invoking guix-daemon}):
22879
22880 @example
22881 (define guix-service-type
22882 (service-type
22883 (name 'guix)
22884 (extensions
22885 (list (service-extension shepherd-root-service-type guix-shepherd-service)
22886 (service-extension account-service-type guix-accounts)
22887 (service-extension activation-service-type guix-activation)))
22888 (default-value (guix-configuration))))
22889 @end example
22890
22891 @noindent
22892 It defines three things:
22893
22894 @enumerate
22895 @item
22896 A name, whose sole purpose is to make inspection and debugging easier.
22897
22898 @item
22899 A list of @dfn{service extensions}, where each extension designates the
22900 target service type and a procedure that, given the parameters of the
22901 service, returns a list of objects to extend the service of that type.
22902
22903 Every service type has at least one service extension. The only
22904 exception is the @dfn{boot service type}, which is the ultimate service.
22905
22906 @item
22907 Optionally, a default value for instances of this type.
22908 @end enumerate
22909
22910 In this example, @var{guix-service-type} extends three services:
22911
22912 @table @var
22913 @item shepherd-root-service-type
22914 The @var{guix-shepherd-service} procedure defines how the Shepherd
22915 service is extended. Namely, it returns a @code{<shepherd-service>}
22916 object that defines how @command{guix-daemon} is started and stopped
22917 (@pxref{Shepherd Services}).
22918
22919 @item account-service-type
22920 This extension for this service is computed by @var{guix-accounts},
22921 which returns a list of @code{user-group} and @code{user-account}
22922 objects representing the build user accounts (@pxref{Invoking
22923 guix-daemon}).
22924
22925 @item activation-service-type
22926 Here @var{guix-activation} is a procedure that returns a gexp, which is
22927 a code snippet to run at ``activation time''---e.g., when the service is
22928 booted.
22929 @end table
22930
22931 A service of this type is instantiated like this:
22932
22933 @example
22934 (service guix-service-type
22935 (guix-configuration
22936 (build-accounts 5)
22937 (use-substitutes? #f)))
22938 @end example
22939
22940 The second argument to the @code{service} form is a value representing
22941 the parameters of this specific service instance.
22942 @xref{guix-configuration-type, @code{guix-configuration}}, for
22943 information about the @code{guix-configuration} data type. When the
22944 value is omitted, the default value specified by
22945 @code{guix-service-type} is used:
22946
22947 @example
22948 (service guix-service-type)
22949 @end example
22950
22951 @var{guix-service-type} is quite simple because it extends other
22952 services but is not extensible itself.
22953
22954 @c @subsubsubsection Extensible Service Types
22955
22956 The service type for an @emph{extensible} service looks like this:
22957
22958 @example
22959 (define udev-service-type
22960 (service-type (name 'udev)
22961 (extensions
22962 (list (service-extension shepherd-root-service-type
22963 udev-shepherd-service)))
22964
22965 (compose concatenate) ;concatenate the list of rules
22966 (extend (lambda (config rules)
22967 (match config
22968 (($ <udev-configuration> udev initial-rules)
22969 (udev-configuration
22970 (udev udev) ;the udev package to use
22971 (rules (append initial-rules rules)))))))))
22972 @end example
22973
22974 This is the service type for the
22975 @uref{https://wiki.gentoo.org/wiki/Project:Eudev, eudev device
22976 management daemon}. Compared to the previous example, in addition to an
22977 extension of @var{shepherd-root-service-type}, we see two new fields:
22978
22979 @table @code
22980 @item compose
22981 This is the procedure to @dfn{compose} the list of extensions to
22982 services of this type.
22983
22984 Services can extend the udev service by passing it lists of rules; we
22985 compose those extensions simply by concatenating them.
22986
22987 @item extend
22988 This procedure defines how the value of the service is @dfn{extended} with
22989 the composition of the extensions.
22990
22991 Udev extensions are composed into a list of rules, but the udev service
22992 value is itself a @code{<udev-configuration>} record. So here, we
22993 extend that record by appending the list of rules it contains to the
22994 list of contributed rules.
22995
22996 @item description
22997 This is a string giving an overview of the service type. The string can
22998 contain Texinfo markup (@pxref{Overview,,, texinfo, GNU Texinfo}). The
22999 @command{guix system search} command searches these strings and displays
23000 them (@pxref{Invoking guix system}).
23001 @end table
23002
23003 There can be only one instance of an extensible service type such as
23004 @var{udev-service-type}. If there were more, the
23005 @code{service-extension} specifications would be ambiguous.
23006
23007 Still here? The next section provides a reference of the programming
23008 interface for services.
23009
23010 @node Service Reference
23011 @subsubsection Service Reference
23012
23013 We have seen an overview of service types (@pxref{Service Types and
23014 Services}). This section provides a reference on how to manipulate
23015 services and service types. This interface is provided by the
23016 @code{(gnu services)} module.
23017
23018 @deffn {Scheme Procedure} service @var{type} [@var{value}]
23019 Return a new service of @var{type}, a @code{<service-type>} object (see
23020 below.) @var{value} can be any object; it represents the parameters of
23021 this particular service instance.
23022
23023 When @var{value} is omitted, the default value specified by @var{type}
23024 is used; if @var{type} does not specify a default value, an error is
23025 raised.
23026
23027 For instance, this:
23028
23029 @example
23030 (service openssh-service-type)
23031 @end example
23032
23033 @noindent
23034 is equivalent to this:
23035
23036 @example
23037 (service openssh-service-type
23038 (openssh-configuration))
23039 @end example
23040
23041 In both cases the result is an instance of @code{openssh-service-type}
23042 with the default configuration.
23043 @end deffn
23044
23045 @deffn {Scheme Procedure} service? @var{obj}
23046 Return true if @var{obj} is a service.
23047 @end deffn
23048
23049 @deffn {Scheme Procedure} service-kind @var{service}
23050 Return the type of @var{service}---i.e., a @code{<service-type>} object.
23051 @end deffn
23052
23053 @deffn {Scheme Procedure} service-value @var{service}
23054 Return the value associated with @var{service}. It represents its
23055 parameters.
23056 @end deffn
23057
23058 Here is an example of how a service is created and manipulated:
23059
23060 @example
23061 (define s
23062 (service nginx-service-type
23063 (nginx-configuration
23064 (nginx nginx)
23065 (log-directory log-directory)
23066 (run-directory run-directory)
23067 (file config-file))))
23068
23069 (service? s)
23070 @result{} #t
23071
23072 (eq? (service-kind s) nginx-service-type)
23073 @result{} #t
23074 @end example
23075
23076 The @code{modify-services} form provides a handy way to change the
23077 parameters of some of the services of a list such as
23078 @var{%base-services} (@pxref{Base Services, @code{%base-services}}). It
23079 evaluates to a list of services. Of course, you could always use
23080 standard list combinators such as @code{map} and @code{fold} to do that
23081 (@pxref{SRFI-1, List Library,, guile, GNU Guile Reference Manual});
23082 @code{modify-services} simply provides a more concise form for this
23083 common pattern.
23084
23085 @deffn {Scheme Syntax} modify-services @var{services} @
23086 (@var{type} @var{variable} => @var{body}) @dots{}
23087
23088 Modify the services listed in @var{services} according to the given
23089 clauses. Each clause has the form:
23090
23091 @example
23092 (@var{type} @var{variable} => @var{body})
23093 @end example
23094
23095 where @var{type} is a service type---e.g.,
23096 @code{guix-service-type}---and @var{variable} is an identifier that is
23097 bound within the @var{body} to the service parameters---e.g., a
23098 @code{guix-configuration} instance---of the original service of that
23099 @var{type}.
23100
23101 The @var{body} should evaluate to the new service parameters, which will
23102 be used to configure the new service. This new service will replace the
23103 original in the resulting list. Because a service's service parameters
23104 are created using @code{define-record-type*}, you can write a succinct
23105 @var{body} that evaluates to the new service parameters by using the
23106 @code{inherit} feature that @code{define-record-type*} provides.
23107
23108 @xref{Using the Configuration System}, for example usage.
23109
23110 @end deffn
23111
23112 Next comes the programming interface for service types. This is
23113 something you want to know when writing new service definitions, but not
23114 necessarily when simply looking for ways to customize your
23115 @code{operating-system} declaration.
23116
23117 @deftp {Data Type} service-type
23118 @cindex service type
23119 This is the representation of a @dfn{service type} (@pxref{Service Types
23120 and Services}).
23121
23122 @table @asis
23123 @item @code{name}
23124 This is a symbol, used only to simplify inspection and debugging.
23125
23126 @item @code{extensions}
23127 A non-empty list of @code{<service-extension>} objects (see below).
23128
23129 @item @code{compose} (default: @code{#f})
23130 If this is @code{#f}, then the service type denotes services that cannot
23131 be extended---i.e., services that do not receive ``values'' from other
23132 services.
23133
23134 Otherwise, it must be a one-argument procedure. The procedure is called
23135 by @code{fold-services} and is passed a list of values collected from
23136 extensions. It may return any single value.
23137
23138 @item @code{extend} (default: @code{#f})
23139 If this is @code{#f}, services of this type cannot be extended.
23140
23141 Otherwise, it must be a two-argument procedure: @code{fold-services}
23142 calls it, passing it the initial value of the service as the first
23143 argument and the result of applying @code{compose} to the extension
23144 values as the second argument. It must return a value that is a valid
23145 parameter value for the service instance.
23146 @end table
23147
23148 @xref{Service Types and Services}, for examples.
23149 @end deftp
23150
23151 @deffn {Scheme Procedure} service-extension @var{target-type} @
23152 @var{compute}
23153 Return a new extension for services of type @var{target-type}.
23154 @var{compute} must be a one-argument procedure: @code{fold-services}
23155 calls it, passing it the value associated with the service that provides
23156 the extension; it must return a valid value for the target service.
23157 @end deffn
23158
23159 @deffn {Scheme Procedure} service-extension? @var{obj}
23160 Return true if @var{obj} is a service extension.
23161 @end deffn
23162
23163 Occasionally, you might want to simply extend an existing service. This
23164 involves creating a new service type and specifying the extension of
23165 interest, which can be verbose; the @code{simple-service} procedure
23166 provides a shorthand for this.
23167
23168 @deffn {Scheme Procedure} simple-service @var{name} @var{target} @var{value}
23169 Return a service that extends @var{target} with @var{value}. This works
23170 by creating a singleton service type @var{name}, of which the returned
23171 service is an instance.
23172
23173 For example, this extends mcron (@pxref{Scheduled Job Execution}) with
23174 an additional job:
23175
23176 @example
23177 (simple-service 'my-mcron-job mcron-service-type
23178 #~(job '(next-hour (3)) "guix gc -F 2G"))
23179 @end example
23180 @end deffn
23181
23182 At the core of the service abstraction lies the @code{fold-services}
23183 procedure, which is responsible for ``compiling'' a list of services
23184 down to a single directory that contains everything needed to boot and
23185 run the system---the directory shown by the @command{guix system build}
23186 command (@pxref{Invoking guix system}). In essence, it propagates
23187 service extensions down the service graph, updating each node parameters
23188 on the way, until it reaches the root node.
23189
23190 @deffn {Scheme Procedure} fold-services @var{services} @
23191 [#:target-type @var{system-service-type}]
23192 Fold @var{services} by propagating their extensions down to the root of
23193 type @var{target-type}; return the root service adjusted accordingly.
23194 @end deffn
23195
23196 Lastly, the @code{(gnu services)} module also defines several essential
23197 service types, some of which are listed below.
23198
23199 @defvr {Scheme Variable} system-service-type
23200 This is the root of the service graph. It produces the system directory
23201 as returned by the @command{guix system build} command.
23202 @end defvr
23203
23204 @defvr {Scheme Variable} boot-service-type
23205 The type of the ``boot service'', which produces the @dfn{boot script}.
23206 The boot script is what the initial RAM disk runs when booting.
23207 @end defvr
23208
23209 @defvr {Scheme Variable} etc-service-type
23210 The type of the @file{/etc} service. This service is used to create
23211 files under @file{/etc} and can be extended by
23212 passing it name/file tuples such as:
23213
23214 @example
23215 (list `("issue" ,(plain-file "issue" "Welcome!\n")))
23216 @end example
23217
23218 In this example, the effect would be to add an @file{/etc/issue} file
23219 pointing to the given file.
23220 @end defvr
23221
23222 @defvr {Scheme Variable} setuid-program-service-type
23223 Type for the ``setuid-program service''. This service collects lists of
23224 executable file names, passed as gexps, and adds them to the set of
23225 setuid-root programs on the system (@pxref{Setuid Programs}).
23226 @end defvr
23227
23228 @defvr {Scheme Variable} profile-service-type
23229 Type of the service that populates the @dfn{system profile}---i.e., the
23230 programs under @file{/run/current-system/profile}. Other services can
23231 extend it by passing it lists of packages to add to the system profile.
23232 @end defvr
23233
23234
23235 @node Shepherd Services
23236 @subsubsection Shepherd Services
23237
23238 @cindex shepherd services
23239 @cindex PID 1
23240 @cindex init system
23241 The @code{(gnu services shepherd)} module provides a way to define
23242 services managed by the GNU@tie{}Shepherd, which is the GuixSD
23243 initialization system---the first process that is started when the
23244 system boots, also known as PID@tie{}1
23245 (@pxref{Introduction,,, shepherd, The GNU Shepherd Manual}).
23246
23247 Services in the Shepherd can depend on each other. For instance, the
23248 SSH daemon may need to be started after the syslog daemon has been
23249 started, which in turn can only happen once all the file systems have
23250 been mounted. The simple operating system defined earlier (@pxref{Using
23251 the Configuration System}) results in a service graph like this:
23252
23253 @image{images/shepherd-graph,,5in,Typical shepherd service graph.}
23254
23255 You can actually generate such a graph for any operating system
23256 definition using the @command{guix system shepherd-graph} command
23257 (@pxref{system-shepherd-graph, @command{guix system shepherd-graph}}).
23258
23259 The @var{%shepherd-root-service} is a service object representing
23260 PID@tie{}1, of type @var{shepherd-root-service-type}; it can be extended
23261 by passing it lists of @code{<shepherd-service>} objects.
23262
23263 @deftp {Data Type} shepherd-service
23264 The data type representing a service managed by the Shepherd.
23265
23266 @table @asis
23267 @item @code{provision}
23268 This is a list of symbols denoting what the service provides.
23269
23270 These are the names that may be passed to @command{herd start},
23271 @command{herd status}, and similar commands (@pxref{Invoking herd,,,
23272 shepherd, The GNU Shepherd Manual}). @xref{Slots of services, the
23273 @code{provides} slot,, shepherd, The GNU Shepherd Manual}, for details.
23274
23275 @item @code{requirements} (default: @code{'()})
23276 List of symbols denoting the Shepherd services this one depends on.
23277
23278 @item @code{respawn?} (default: @code{#t})
23279 Whether to restart the service when it stops, for instance when the
23280 underlying process dies.
23281
23282 @item @code{start}
23283 @itemx @code{stop} (default: @code{#~(const #f)})
23284 The @code{start} and @code{stop} fields refer to the Shepherd's
23285 facilities to start and stop processes (@pxref{Service De- and
23286 Constructors,,, shepherd, The GNU Shepherd Manual}). They are given as
23287 G-expressions that get expanded in the Shepherd configuration file
23288 (@pxref{G-Expressions}).
23289
23290 @item @code{actions} (default: @code{'()})
23291 @cindex actions, of Shepherd services
23292 This is a list of @code{shepherd-action} objects (see below) defining
23293 @dfn{actions} supported by the service, in addition to the standard
23294 @code{start} and @code{stop} actions. Actions listed here become available as
23295 @command{herd} sub-commands:
23296
23297 @example
23298 herd @var{action} @var{service} [@var{arguments}@dots{}]
23299 @end example
23300
23301 @item @code{documentation}
23302 A documentation string, as shown when running:
23303
23304 @example
23305 herd doc @var{service-name}
23306 @end example
23307
23308 where @var{service-name} is one of the symbols in @var{provision}
23309 (@pxref{Invoking herd,,, shepherd, The GNU Shepherd Manual}).
23310
23311 @item @code{modules} (default: @var{%default-modules})
23312 This is the list of modules that must be in scope when @code{start} and
23313 @code{stop} are evaluated.
23314
23315 @end table
23316 @end deftp
23317
23318 @deftp {Data Type} shepherd-action
23319 This is the data type that defines additional actions implemented by a
23320 Shepherd service (see above).
23321
23322 @table @code
23323 @item name
23324 Symbol naming the action.
23325
23326 @item documentation
23327 This is a documentation string for the action. It can be viewed by running:
23328
23329 @example
23330 herd doc @var{service} action @var{action}
23331 @end example
23332
23333 @item procedure
23334 This should be a gexp that evaluates to a procedure of at least one argument,
23335 which is the ``running value'' of the service (@pxref{Slots of services,,,
23336 shepherd, The GNU Shepherd Manual}).
23337 @end table
23338
23339 The following example defines an action called @code{say-hello} that kindly
23340 greets the user:
23341
23342 @example
23343 (shepherd-action
23344 (name 'say-hello)
23345 (documentation "Say hi!")
23346 (procedure #~(lambda (running . args)
23347 (format #t "Hello, friend! arguments: ~s\n"
23348 args)
23349 #t)))
23350 @end example
23351
23352 Assuming this action is added to the @code{example} service, then you can do:
23353
23354 @example
23355 # herd say-hello example
23356 Hello, friend! arguments: ()
23357 # herd say-hello example a b c
23358 Hello, friend! arguments: ("a" "b" "c")
23359 @end example
23360
23361 This, as you can see, is a fairly sophisticated way to say hello.
23362 @xref{Service Convenience,,, shepherd, The GNU Shepherd Manual}, for more
23363 info on actions.
23364 @end deftp
23365
23366 @defvr {Scheme Variable} shepherd-root-service-type
23367 The service type for the Shepherd ``root service''---i.e., PID@tie{}1.
23368
23369 This is the service type that extensions target when they want to create
23370 shepherd services (@pxref{Service Types and Services}, for an example).
23371 Each extension must pass a list of @code{<shepherd-service>}.
23372 @end defvr
23373
23374 @defvr {Scheme Variable} %shepherd-root-service
23375 This service represents PID@tie{}1.
23376 @end defvr
23377
23378
23379 @node Documentation
23380 @section Documentation
23381
23382 @cindex documentation, searching for
23383 @cindex searching for documentation
23384 @cindex Info, documentation format
23385 @cindex man pages
23386 @cindex manual pages
23387 In most cases packages installed with Guix come with documentation.
23388 There are two main documentation formats: ``Info'', a browseable
23389 hypertext format used for GNU software, and ``manual pages'' (or ``man
23390 pages''), the linear documentation format traditionally found on Unix.
23391 Info manuals are accessed with the @command{info} command or with Emacs,
23392 and man pages are accessed using @command{man}.
23393
23394 You can look for documentation of software installed on your system by
23395 keyword. For example, the following command searches for information
23396 about ``TLS'' in Info manuals:
23397
23398 @example
23399 $ info -k TLS
23400 "(emacs)Network Security" -- STARTTLS
23401 "(emacs)Network Security" -- TLS
23402 "(gnutls)Core TLS API" -- gnutls_certificate_set_verify_flags
23403 "(gnutls)Core TLS API" -- gnutls_certificate_set_verify_function
23404 @dots{}
23405 @end example
23406
23407 @noindent
23408 The command below searches for the same keyword in man pages:
23409
23410 @example
23411 $ man -k TLS
23412 SSL (7) - OpenSSL SSL/TLS library
23413 certtool (1) - GnuTLS certificate tool
23414 @dots {}
23415 @end example
23416
23417 These searches are purely local to your computer so you have the
23418 guarantee that documentation you find corresponds to what you have
23419 actually installed, you can access it off-line, and your privacy is
23420 respected.
23421
23422 Once you have these results, you can view the relevant documentation by
23423 running, say:
23424
23425 @example
23426 $ info "(gnutls)Core TLS API"
23427 @end example
23428
23429 @noindent
23430 or:
23431
23432 @example
23433 $ man certtool
23434 @end example
23435
23436 Info manuals contain sections and indices as well as hyperlinks like
23437 those found in Web pages. The @command{info} reader (@pxref{Top, Info
23438 reader,, info-stnd, Stand-alone GNU Info}) and its Emacs counterpart
23439 (@pxref{Misc Help,,, emacs, The GNU Emacs Manual}) provide intuitive key
23440 bindings to navigate manuals. @xref{Getting Started,,, info, Info: An
23441 Introduction}, for an introduction to Info navigation.
23442
23443 @node Installing Debugging Files
23444 @section Installing Debugging Files
23445
23446 @cindex debugging files
23447 Program binaries, as produced by the GCC compilers for instance, are
23448 typically written in the ELF format, with a section containing
23449 @dfn{debugging information}. Debugging information is what allows the
23450 debugger, GDB, to map binary code to source code; it is required to
23451 debug a compiled program in good conditions.
23452
23453 The problem with debugging information is that is takes up a fair amount
23454 of disk space. For example, debugging information for the GNU C Library
23455 weighs in at more than 60 MiB. Thus, as a user, keeping all the
23456 debugging info of all the installed programs is usually not an option.
23457 Yet, space savings should not come at the cost of an impediment to
23458 debugging---especially in the GNU system, which should make it easier
23459 for users to exert their computing freedom (@pxref{GNU Distribution}).
23460
23461 Thankfully, the GNU Binary Utilities (Binutils) and GDB provide a
23462 mechanism that allows users to get the best of both worlds: debugging
23463 information can be stripped from the binaries and stored in separate
23464 files. GDB is then able to load debugging information from those files,
23465 when they are available (@pxref{Separate Debug Files,,, gdb, Debugging
23466 with GDB}).
23467
23468 The GNU distribution takes advantage of this by storing debugging
23469 information in the @code{lib/debug} sub-directory of a separate package
23470 output unimaginatively called @code{debug} (@pxref{Packages with
23471 Multiple Outputs}). Users can choose to install the @code{debug} output
23472 of a package when they need it. For instance, the following command
23473 installs the debugging information for the GNU C Library and for GNU
23474 Guile:
23475
23476 @example
23477 guix package -i glibc:debug guile:debug
23478 @end example
23479
23480 GDB must then be told to look for debug files in the user's profile, by
23481 setting the @code{debug-file-directory} variable (consider setting it
23482 from the @file{~/.gdbinit} file, @pxref{Startup,,, gdb, Debugging with
23483 GDB}):
23484
23485 @example
23486 (gdb) set debug-file-directory ~/.guix-profile/lib/debug
23487 @end example
23488
23489 From there on, GDB will pick up debugging information from the
23490 @code{.debug} files under @file{~/.guix-profile/lib/debug}.
23491
23492 In addition, you will most likely want GDB to be able to show the source
23493 code being debugged. To do that, you will have to unpack the source
23494 code of the package of interest (obtained with @code{guix build
23495 --source}, @pxref{Invoking guix build}), and to point GDB to that source
23496 directory using the @code{directory} command (@pxref{Source Path,
23497 @code{directory},, gdb, Debugging with GDB}).
23498
23499 @c XXX: keep me up-to-date
23500 The @code{debug} output mechanism in Guix is implemented by the
23501 @code{gnu-build-system} (@pxref{Build Systems}). Currently, it is
23502 opt-in---debugging information is available only for the packages
23503 with definitions explicitly declaring a @code{debug} output. This may be
23504 changed to opt-out in the future if our build farm servers can handle
23505 the load. To check whether a package has a @code{debug} output, use
23506 @command{guix package --list-available} (@pxref{Invoking guix package}).
23507
23508
23509 @node Security Updates
23510 @section Security Updates
23511
23512 @cindex security updates
23513 @cindex security vulnerabilities
23514 Occasionally, important security vulnerabilities are discovered in software
23515 packages and must be patched. Guix developers try hard to keep track of
23516 known vulnerabilities and to apply fixes as soon as possible in the
23517 @code{master} branch of Guix (we do not yet provide a ``stable'' branch
23518 containing only security updates.) The @command{guix lint} tool helps
23519 developers find out about vulnerable versions of software packages in the
23520 distribution:
23521
23522 @smallexample
23523 $ guix lint -c cve
23524 gnu/packages/base.scm:652:2: glibc@@2.21: probably vulnerable to CVE-2015-1781, CVE-2015-7547
23525 gnu/packages/gcc.scm:334:2: gcc@@4.9.3: probably vulnerable to CVE-2015-5276
23526 gnu/packages/image.scm:312:2: openjpeg@@2.1.0: probably vulnerable to CVE-2016-1923, CVE-2016-1924
23527 @dots{}
23528 @end smallexample
23529
23530 @xref{Invoking guix lint}, for more information.
23531
23532 @quotation Note
23533 As of version @value{VERSION}, the feature described below is considered
23534 ``beta''.
23535 @end quotation
23536
23537 Guix follows a functional
23538 package management discipline (@pxref{Introduction}), which implies
23539 that, when a package is changed, @emph{every package that depends on it}
23540 must be rebuilt. This can significantly slow down the deployment of
23541 fixes in core packages such as libc or Bash, since basically the whole
23542 distribution would need to be rebuilt. Using pre-built binaries helps
23543 (@pxref{Substitutes}), but deployment may still take more time than
23544 desired.
23545
23546 @cindex grafts
23547 To address this, Guix implements @dfn{grafts}, a mechanism that allows
23548 for fast deployment of critical updates without the costs associated
23549 with a whole-distribution rebuild. The idea is to rebuild only the
23550 package that needs to be patched, and then to ``graft'' it onto packages
23551 explicitly installed by the user and that were previously referring to
23552 the original package. The cost of grafting is typically very low, and
23553 order of magnitudes lower than a full rebuild of the dependency chain.
23554
23555 @cindex replacements of packages, for grafts
23556 For instance, suppose a security update needs to be applied to Bash.
23557 Guix developers will provide a package definition for the ``fixed''
23558 Bash, say @var{bash-fixed}, in the usual way (@pxref{Defining
23559 Packages}). Then, the original package definition is augmented with a
23560 @code{replacement} field pointing to the package containing the bug fix:
23561
23562 @example
23563 (define bash
23564 (package
23565 (name "bash")
23566 ;; @dots{}
23567 (replacement bash-fixed)))
23568 @end example
23569
23570 From there on, any package depending directly or indirectly on Bash---as
23571 reported by @command{guix gc --requisites} (@pxref{Invoking guix
23572 gc})---that is installed is automatically ``rewritten'' to refer to
23573 @var{bash-fixed} instead of @var{bash}. This grafting process takes
23574 time proportional to the size of the package, usually less than a
23575 minute for an ``average'' package on a recent machine. Grafting is
23576 recursive: when an indirect dependency requires grafting, then grafting
23577 ``propagates'' up to the package that the user is installing.
23578
23579 Currently, the length of the name and version of the graft and that of
23580 the package it replaces (@var{bash-fixed} and @var{bash} in the example
23581 above) must be equal. This restriction mostly comes from the fact that
23582 grafting works by patching files, including binary files, directly.
23583 Other restrictions may apply: for instance, when adding a graft to a
23584 package providing a shared library, the original shared library and its
23585 replacement must have the same @code{SONAME} and be binary-compatible.
23586
23587 The @option{--no-grafts} command-line option allows you to forcefully
23588 avoid grafting (@pxref{Common Build Options, @option{--no-grafts}}).
23589 Thus, the command:
23590
23591 @example
23592 guix build bash --no-grafts
23593 @end example
23594
23595 @noindent
23596 returns the store file name of the original Bash, whereas:
23597
23598 @example
23599 guix build bash
23600 @end example
23601
23602 @noindent
23603 returns the store file name of the ``fixed'', replacement Bash. This
23604 allows you to distinguish between the two variants of Bash.
23605
23606 To verify which Bash your whole profile refers to, you can run
23607 (@pxref{Invoking guix gc}):
23608
23609 @example
23610 guix gc -R `readlink -f ~/.guix-profile` | grep bash
23611 @end example
23612
23613 @noindent
23614 @dots{} and compare the store file names that you get with those above.
23615 Likewise for a complete GuixSD system generation:
23616
23617 @example
23618 guix gc -R `guix system build my-config.scm` | grep bash
23619 @end example
23620
23621 Lastly, to check which Bash running processes are using, you can use the
23622 @command{lsof} command:
23623
23624 @example
23625 lsof | grep /gnu/store/.*bash
23626 @end example
23627
23628
23629 @node Package Modules
23630 @section Package Modules
23631
23632 From a programming viewpoint, the package definitions of the
23633 GNU distribution are provided by Guile modules in the @code{(gnu packages
23634 @dots{})} name space@footnote{Note that packages under the @code{(gnu
23635 packages @dots{})} module name space are not necessarily ``GNU
23636 packages''. This module naming scheme follows the usual Guile module
23637 naming convention: @code{gnu} means that these modules are distributed
23638 as part of the GNU system, and @code{packages} identifies modules that
23639 define packages.} (@pxref{Modules, Guile modules,, guile, GNU Guile
23640 Reference Manual}). For instance, the @code{(gnu packages emacs)}
23641 module exports a variable named @code{emacs}, which is bound to a
23642 @code{<package>} object (@pxref{Defining Packages}).
23643
23644 The @code{(gnu packages @dots{})} module name space is
23645 automatically scanned for packages by the command-line tools. For
23646 instance, when running @code{guix package -i emacs}, all the @code{(gnu
23647 packages @dots{})} modules are scanned until one that exports a package
23648 object whose name is @code{emacs} is found. This package search
23649 facility is implemented in the @code{(gnu packages)} module.
23650
23651 @cindex customization, of packages
23652 @cindex package module search path
23653 Users can store package definitions in modules with different
23654 names---e.g., @code{(my-packages emacs)}@footnote{Note that the file
23655 name and module name must match. For instance, the @code{(my-packages
23656 emacs)} module must be stored in a @file{my-packages/emacs.scm} file
23657 relative to the load path specified with @option{--load-path} or
23658 @code{GUIX_PACKAGE_PATH}. @xref{Modules and the File System,,,
23659 guile, GNU Guile Reference Manual}, for details.}. There are two ways to make
23660 these package definitions visible to the user interfaces:
23661
23662 @enumerate
23663 @item
23664 By adding the directory containing your package modules to the search path
23665 with the @code{-L} flag of @command{guix package} and other commands
23666 (@pxref{Common Build Options}), or by setting the @code{GUIX_PACKAGE_PATH}
23667 environment variable described below.
23668
23669 @item
23670 By defining a @dfn{channel} and configuring @command{guix pull} so that it
23671 pulls from it. A channel is essentially a Git repository containing package
23672 modules. @xref{Channels}, for more information on how to define and use
23673 channels.
23674 @end enumerate
23675
23676 @code{GUIX_PACKAGE_PATH} works similarly to other search path variables:
23677
23678 @defvr {Environment Variable} GUIX_PACKAGE_PATH
23679 This is a colon-separated list of directories to search for additional
23680 package modules. Directories listed in this variable take precedence
23681 over the own modules of the distribution.
23682 @end defvr
23683
23684 The distribution is fully @dfn{bootstrapped} and @dfn{self-contained}:
23685 each package is built based solely on other packages in the
23686 distribution. The root of this dependency graph is a small set of
23687 @dfn{bootstrap binaries}, provided by the @code{(gnu packages
23688 bootstrap)} module. For more information on bootstrapping,
23689 @pxref{Bootstrapping}.
23690
23691 @node Packaging Guidelines
23692 @section Packaging Guidelines
23693
23694 @cindex packages, creating
23695 The GNU distribution is nascent and may well lack some of your favorite
23696 packages. This section describes how you can help make the distribution
23697 grow. @xref{Contributing}, for additional information on how you can
23698 help.
23699
23700 Free software packages are usually distributed in the form of
23701 @dfn{source code tarballs}---typically @file{tar.gz} files that contain
23702 all the source files. Adding a package to the distribution means
23703 essentially two things: adding a @dfn{recipe} that describes how to
23704 build the package, including a list of other packages required to build
23705 it, and adding @dfn{package metadata} along with that recipe, such as a
23706 description and licensing information.
23707
23708 In Guix all this information is embodied in @dfn{package definitions}.
23709 Package definitions provide a high-level view of the package. They are
23710 written using the syntax of the Scheme programming language; in fact,
23711 for each package we define a variable bound to the package definition,
23712 and export that variable from a module (@pxref{Package Modules}).
23713 However, in-depth Scheme knowledge is @emph{not} a prerequisite for
23714 creating packages. For more information on package definitions,
23715 @pxref{Defining Packages}.
23716
23717 Once a package definition is in place, stored in a file in the Guix
23718 source tree, it can be tested using the @command{guix build} command
23719 (@pxref{Invoking guix build}). For example, assuming the new package is
23720 called @code{gnew}, you may run this command from the Guix build tree
23721 (@pxref{Running Guix Before It Is Installed}):
23722
23723 @example
23724 ./pre-inst-env guix build gnew --keep-failed
23725 @end example
23726
23727 Using @code{--keep-failed} makes it easier to debug build failures since
23728 it provides access to the failed build tree. Another useful
23729 command-line option when debugging is @code{--log-file}, to access the
23730 build log.
23731
23732 If the package is unknown to the @command{guix} command, it may be that
23733 the source file contains a syntax error, or lacks a @code{define-public}
23734 clause to export the package variable. To figure it out, you may load
23735 the module from Guile to get more information about the actual error:
23736
23737 @example
23738 ./pre-inst-env guile -c '(use-modules (gnu packages gnew))'
23739 @end example
23740
23741 Once your package builds correctly, please send us a patch
23742 (@pxref{Contributing}). Well, if you need help, we will be happy to
23743 help you too. Once the patch is committed in the Guix repository, the
23744 new package automatically gets built on the supported platforms by
23745 @url{http://hydra.gnu.org/jobset/gnu/master, our continuous integration
23746 system}.
23747
23748 @cindex substituter
23749 Users can obtain the new package definition simply by running
23750 @command{guix pull} (@pxref{Invoking guix pull}). When
23751 @code{hydra.gnu.org} is done building the package, installing the
23752 package automatically downloads binaries from there
23753 (@pxref{Substitutes}). The only place where human intervention is
23754 needed is to review and apply the patch.
23755
23756
23757 @menu
23758 * Software Freedom:: What may go into the distribution.
23759 * Package Naming:: What's in a name?
23760 * Version Numbers:: When the name is not enough.
23761 * Synopses and Descriptions:: Helping users find the right package.
23762 * Python Modules:: A touch of British comedy.
23763 * Perl Modules:: Little pearls.
23764 * Java Packages:: Coffee break.
23765 * Fonts:: Fond of fonts.
23766 @end menu
23767
23768 @node Software Freedom
23769 @subsection Software Freedom
23770
23771 @c Adapted from http://www.gnu.org/philosophy/philosophy.html.
23772 @cindex free software
23773 The GNU operating system has been developed so that users can have
23774 freedom in their computing. GNU is @dfn{free software}, meaning that
23775 users have the @url{http://www.gnu.org/philosophy/free-sw.html,four
23776 essential freedoms}: to run the program, to study and change the program
23777 in source code form, to redistribute exact copies, and to distribute
23778 modified versions. Packages found in the GNU distribution provide only
23779 software that conveys these four freedoms.
23780
23781 In addition, the GNU distribution follow the
23782 @url{http://www.gnu.org/distros/free-system-distribution-guidelines.html,free
23783 software distribution guidelines}. Among other things, these guidelines
23784 reject non-free firmware, recommendations of non-free software, and
23785 discuss ways to deal with trademarks and patents.
23786
23787 Some otherwise free upstream package sources contain a small and optional
23788 subset that violates the above guidelines, for instance because this subset
23789 is itself non-free code. When that happens, the offending items are removed
23790 with appropriate patches or code snippets in the @code{origin} form of the
23791 package (@pxref{Defining Packages}). This way, @code{guix
23792 build --source} returns the ``freed'' source rather than the unmodified
23793 upstream source.
23794
23795
23796 @node Package Naming
23797 @subsection Package Naming
23798
23799 @cindex package name
23800 A package has actually two names associated with it:
23801 First, there is the name of the @emph{Scheme variable}, the one following
23802 @code{define-public}. By this name, the package can be made known in the
23803 Scheme code, for instance as input to another package. Second, there is
23804 the string in the @code{name} field of a package definition. This name
23805 is used by package management commands such as
23806 @command{guix package} and @command{guix build}.
23807
23808 Both are usually the same and correspond to the lowercase conversion of
23809 the project name chosen upstream, with underscores replaced with
23810 hyphens. For instance, GNUnet is available as @code{gnunet}, and
23811 SDL_net as @code{sdl-net}.
23812
23813 We do not add @code{lib} prefixes for library packages, unless these are
23814 already part of the official project name. But @pxref{Python
23815 Modules} and @ref{Perl Modules} for special rules concerning modules for
23816 the Python and Perl languages.
23817
23818 Font package names are handled differently, @pxref{Fonts}.
23819
23820
23821 @node Version Numbers
23822 @subsection Version Numbers
23823
23824 @cindex package version
23825 We usually package only the latest version of a given free software
23826 project. But sometimes, for instance for incompatible library versions,
23827 two (or more) versions of the same package are needed. These require
23828 different Scheme variable names. We use the name as defined
23829 in @ref{Package Naming}
23830 for the most recent version; previous versions use the same name, suffixed
23831 by @code{-} and the smallest prefix of the version number that may
23832 distinguish the two versions.
23833
23834 The name inside the package definition is the same for all versions of a
23835 package and does not contain any version number.
23836
23837 For instance, the versions 2.24.20 and 3.9.12 of GTK+ may be packaged as follows:
23838
23839 @example
23840 (define-public gtk+
23841 (package
23842 (name "gtk+")
23843 (version "3.9.12")
23844 ...))
23845 (define-public gtk+-2
23846 (package
23847 (name "gtk+")
23848 (version "2.24.20")
23849 ...))
23850 @end example
23851 If we also wanted GTK+ 3.8.2, this would be packaged as
23852 @example
23853 (define-public gtk+-3.8
23854 (package
23855 (name "gtk+")
23856 (version "3.8.2")
23857 ...))
23858 @end example
23859
23860 @c See <https://lists.gnu.org/archive/html/guix-devel/2016-01/msg00425.html>,
23861 @c for a discussion of what follows.
23862 @cindex version number, for VCS snapshots
23863 Occasionally, we package snapshots of upstream's version control system
23864 (VCS) instead of formal releases. This should remain exceptional,
23865 because it is up to upstream developers to clarify what the stable
23866 release is. Yet, it is sometimes necessary. So, what should we put in
23867 the @code{version} field?
23868
23869 Clearly, we need to make the commit identifier of the VCS snapshot
23870 visible in the version string, but we also need to make sure that the
23871 version string is monotonically increasing so that @command{guix package
23872 --upgrade} can determine which version is newer. Since commit
23873 identifiers, notably with Git, are not monotonically increasing, we add
23874 a revision number that we increase each time we upgrade to a newer
23875 snapshot. The resulting version string looks like this:
23876
23877 @example
23878 2.0.11-3.cabba9e
23879 ^ ^ ^
23880 | | `-- upstream commit ID
23881 | |
23882 | `--- Guix package revision
23883 |
23884 latest upstream version
23885 @end example
23886
23887 It is a good idea to strip commit identifiers in the @code{version}
23888 field to, say, 7 digits. It avoids an aesthetic annoyance (assuming
23889 aesthetics have a role to play here) as well as problems related to OS
23890 limits such as the maximum shebang length (127 bytes for the Linux
23891 kernel.) It is best to use the full commit identifiers in
23892 @code{origin}s, though, to avoid ambiguities. A typical package
23893 definition may look like this:
23894
23895 @example
23896 (define my-package
23897 (let ((commit "c3f29bc928d5900971f65965feaae59e1272a3f7")
23898 (revision "1")) ;Guix package revision
23899 (package
23900 (version (git-version "0.9" revision commit))
23901 (source (origin
23902 (method git-fetch)
23903 (uri (git-reference
23904 (url "git://example.org/my-package.git")
23905 (commit commit)))
23906 (sha256 (base32 "1mbikn@dots{}"))
23907 (file-name (git-file-name name version))))
23908 ;; @dots{}
23909 )))
23910 @end example
23911
23912 @node Synopses and Descriptions
23913 @subsection Synopses and Descriptions
23914
23915 @cindex package description
23916 @cindex package synopsis
23917 As we have seen before, each package in GNU@tie{}Guix includes a
23918 synopsis and a description (@pxref{Defining Packages}). Synopses and
23919 descriptions are important: They are what @command{guix package
23920 --search} searches, and a crucial piece of information to help users
23921 determine whether a given package suits their needs. Consequently,
23922 packagers should pay attention to what goes into them.
23923
23924 Synopses must start with a capital letter and must not end with a
23925 period. They must not start with ``a'' or ``the'', which usually does
23926 not bring anything; for instance, prefer ``File-frobbing tool'' over ``A
23927 tool that frobs files''. The synopsis should say what the package
23928 is---e.g., ``Core GNU utilities (file, text, shell)''---or what it is
23929 used for---e.g., the synopsis for GNU@tie{}grep is ``Print lines
23930 matching a pattern''.
23931
23932 Keep in mind that the synopsis must be meaningful for a very wide
23933 audience. For example, ``Manipulate alignments in the SAM format''
23934 might make sense for a seasoned bioinformatics researcher, but might be
23935 fairly unhelpful or even misleading to a non-specialized audience. It
23936 is a good idea to come up with a synopsis that gives an idea of the
23937 application domain of the package. In this example, this might give
23938 something like ``Manipulate nucleotide sequence alignments'', which
23939 hopefully gives the user a better idea of whether this is what they are
23940 looking for.
23941
23942 Descriptions should take between five and ten lines. Use full
23943 sentences, and avoid using acronyms without first introducing them.
23944 Please avoid marketing phrases such as ``world-leading'',
23945 ``industrial-strength'', and ``next-generation'', and avoid superlatives
23946 like ``the most advanced''---they are not helpful to users looking for a
23947 package and may even sound suspicious. Instead, try to be factual,
23948 mentioning use cases and features.
23949
23950 @cindex Texinfo markup, in package descriptions
23951 Descriptions can include Texinfo markup, which is useful to introduce
23952 ornaments such as @code{@@code} or @code{@@dfn}, bullet lists, or
23953 hyperlinks (@pxref{Overview,,, texinfo, GNU Texinfo}). However you
23954 should be careful when using some characters for example @samp{@@} and
23955 curly braces which are the basic special characters in Texinfo
23956 (@pxref{Special Characters,,, texinfo, GNU Texinfo}). User interfaces
23957 such as @command{guix package --show} take care of rendering it
23958 appropriately.
23959
23960 Synopses and descriptions are translated by volunteers
23961 @uref{http://translationproject.org/domain/guix-packages.html, at the
23962 Translation Project} so that as many users as possible can read them in
23963 their native language. User interfaces search them and display them in
23964 the language specified by the current locale.
23965
23966 To allow @command{xgettext} to extract them as translatable strings,
23967 synopses and descriptions @emph{must be literal strings}. This means
23968 that you cannot use @code{string-append} or @code{format} to construct
23969 these strings:
23970
23971 @lisp
23972 (package
23973 ;; @dots{}
23974 (synopsis "This is translatable")
23975 (description (string-append "This is " "*not*" " translatable.")))
23976 @end lisp
23977
23978 Translation is a lot of work so, as a packager, please pay even more
23979 attention to your synopses and descriptions as every change may entail
23980 additional work for translators. In order to help them, it is possible
23981 to make recommendations or instructions visible to them by inserting
23982 special comments like this (@pxref{xgettext Invocation,,, gettext, GNU
23983 Gettext}):
23984
23985 @example
23986 ;; TRANSLATORS: "X11 resize-and-rotate" should not be translated.
23987 (description "ARandR is designed to provide a simple visual front end
23988 for the X11 resize-and-rotate (RandR) extension. @dots{}")
23989 @end example
23990
23991
23992 @node Python Modules
23993 @subsection Python Modules
23994
23995 @cindex python
23996 We currently package Python 2 and Python 3, under the Scheme variable names
23997 @code{python-2} and @code{python} as explained in @ref{Version Numbers}.
23998 To avoid confusion and naming clashes with other programming languages, it
23999 seems desirable that the name of a package for a Python module contains
24000 the word @code{python}.
24001
24002 Some modules are compatible with only one version of Python, others with both.
24003 If the package Foo compiles only with Python 3, we name it
24004 @code{python-foo}; if it compiles only with Python 2, we name it
24005 @code{python2-foo}. If it is compatible with both versions, we create two
24006 packages with the corresponding names.
24007
24008 If a project already contains the word @code{python}, we drop this;
24009 for instance, the module python-dateutil is packaged under the names
24010 @code{python-dateutil} and @code{python2-dateutil}. If the project name
24011 starts with @code{py} (e.g. @code{pytz}), we keep it and prefix it as
24012 described above.
24013
24014 @subsubsection Specifying Dependencies
24015 @cindex inputs, for Python packages
24016
24017 Dependency information for Python packages is usually available in the
24018 package source tree, with varying degrees of accuracy: in the
24019 @file{setup.py} file, in @file{requirements.txt}, or in @file{tox.ini}.
24020
24021 Your mission, when writing a recipe for a Python package, is to map
24022 these dependencies to the appropriate type of ``input'' (@pxref{package
24023 Reference, inputs}). Although the @code{pypi} importer normally does a
24024 good job (@pxref{Invoking guix import}), you may want to check the
24025 following check list to determine which dependency goes where.
24026
24027 @itemize
24028
24029 @item
24030 We currently package Python 2 with @code{setuptools} and @code{pip}
24031 installed like Python 3.4 has per default. Thus you don't need to
24032 specify either of these as an input. @command{guix lint} will warn you
24033 if you do.
24034
24035 @item
24036 Python dependencies required at run time go into
24037 @code{propagated-inputs}. They are typically defined with the
24038 @code{install_requires} keyword in @file{setup.py}, or in the
24039 @file{requirements.txt} file.
24040
24041 @item
24042 Python packages required only at build time---e.g., those listed with
24043 the @code{setup_requires} keyword in @file{setup.py}---or only for
24044 testing---e.g., those in @code{tests_require}---go into
24045 @code{native-inputs}. The rationale is that (1) they do not need to be
24046 propagated because they are not needed at run time, and (2) in a
24047 cross-compilation context, it's the ``native'' input that we'd want.
24048
24049 Examples are the @code{pytest}, @code{mock}, and @code{nose} test
24050 frameworks. Of course if any of these packages is also required at
24051 run-time, it needs to go to @code{propagated-inputs}.
24052
24053 @item
24054 Anything that does not fall in the previous categories goes to
24055 @code{inputs}, for example programs or C libraries required for building
24056 Python packages containing C extensions.
24057
24058 @item
24059 If a Python package has optional dependencies (@code{extras_require}),
24060 it is up to you to decide whether to add them or not, based on their
24061 usefulness/overhead ratio (@pxref{Submitting Patches, @command{guix
24062 size}}).
24063
24064 @end itemize
24065
24066
24067 @node Perl Modules
24068 @subsection Perl Modules
24069
24070 @cindex perl
24071 Perl programs standing for themselves are named as any other package,
24072 using the lowercase upstream name.
24073 For Perl packages containing a single class, we use the lowercase class name,
24074 replace all occurrences of @code{::} by dashes and prepend the prefix
24075 @code{perl-}.
24076 So the class @code{XML::Parser} becomes @code{perl-xml-parser}.
24077 Modules containing several classes keep their lowercase upstream name and
24078 are also prepended by @code{perl-}. Such modules tend to have the word
24079 @code{perl} somewhere in their name, which gets dropped in favor of the
24080 prefix. For instance, @code{libwww-perl} becomes @code{perl-libwww}.
24081
24082
24083 @node Java Packages
24084 @subsection Java Packages
24085
24086 @cindex java
24087 Java programs standing for themselves are named as any other package,
24088 using the lowercase upstream name.
24089
24090 To avoid confusion and naming clashes with other programming languages,
24091 it is desirable that the name of a package for a Java package is
24092 prefixed with @code{java-}. If a project already contains the word
24093 @code{java}, we drop this; for instance, the package @code{ngsjava} is
24094 packaged under the name @code{java-ngs}.
24095
24096 For Java packages containing a single class or a small class hierarchy,
24097 we use the lowercase class name, replace all occurrences of @code{.} by
24098 dashes and prepend the prefix @code{java-}. So the class
24099 @code{apache.commons.cli} becomes package
24100 @code{java-apache-commons-cli}.
24101
24102
24103 @node Fonts
24104 @subsection Fonts
24105
24106 @cindex fonts
24107 For fonts that are in general not installed by a user for typesetting
24108 purposes, or that are distributed as part of a larger software package,
24109 we rely on the general packaging rules for software; for instance, this
24110 applies to the fonts delivered as part of the X.Org system or fonts that
24111 are part of TeX Live.
24112
24113 To make it easier for a user to search for fonts, names for other packages
24114 containing only fonts are constructed as follows, independently of the
24115 upstream package name.
24116
24117 The name of a package containing only one font family starts with
24118 @code{font-}; it is followed by the foundry name and a dash @code{-}
24119 if the foundry is known, and the font family name, in which spaces are
24120 replaced by dashes (and as usual, all upper case letters are transformed
24121 to lower case).
24122 For example, the Gentium font family by SIL is packaged under the name
24123 @code{font-sil-gentium}.
24124
24125 For a package containing several font families, the name of the collection
24126 is used in the place of the font family name.
24127 For instance, the Liberation fonts consist of three families,
24128 Liberation Sans, Liberation Serif and Liberation Mono.
24129 These could be packaged separately under the names
24130 @code{font-liberation-sans} and so on; but as they are distributed together
24131 under a common name, we prefer to package them together as
24132 @code{font-liberation}.
24133
24134 In the case where several formats of the same font family or font collection
24135 are packaged separately, a short form of the format, prepended by a dash,
24136 is added to the package name. We use @code{-ttf} for TrueType fonts,
24137 @code{-otf} for OpenType fonts and @code{-type1} for PostScript Type 1
24138 fonts.
24139
24140
24141
24142 @node Bootstrapping
24143 @section Bootstrapping
24144
24145 @c Adapted from the ELS 2013 paper.
24146
24147 @cindex bootstrapping
24148
24149 Bootstrapping in our context refers to how the distribution gets built
24150 ``from nothing''. Remember that the build environment of a derivation
24151 contains nothing but its declared inputs (@pxref{Introduction}). So
24152 there's an obvious chicken-and-egg problem: how does the first package
24153 get built? How does the first compiler get compiled? Note that this is
24154 a question of interest only to the curious hacker, not to the regular
24155 user, so you can shamelessly skip this section if you consider yourself
24156 a ``regular user''.
24157
24158 @cindex bootstrap binaries
24159 The GNU system is primarily made of C code, with libc at its core. The
24160 GNU build system itself assumes the availability of a Bourne shell and
24161 command-line tools provided by GNU Coreutils, Awk, Findutils, `sed', and
24162 `grep'. Furthermore, build programs---programs that run
24163 @code{./configure}, @code{make}, etc.---are written in Guile Scheme
24164 (@pxref{Derivations}). Consequently, to be able to build anything at
24165 all, from scratch, Guix relies on pre-built binaries of Guile, GCC,
24166 Binutils, libc, and the other packages mentioned above---the
24167 @dfn{bootstrap binaries}.
24168
24169 These bootstrap binaries are ``taken for granted'', though we can also
24170 re-create them if needed (more on that later).
24171
24172 @unnumberedsubsec Preparing to Use the Bootstrap Binaries
24173
24174 @c As of Emacs 24.3, Info-mode displays the image, but since it's a
24175 @c large image, it's hard to scroll. Oh well.
24176 @image{images/bootstrap-graph,6in,,Dependency graph of the early bootstrap derivations}
24177
24178 The figure above shows the very beginning of the dependency graph of the
24179 distribution, corresponding to the package definitions of the @code{(gnu
24180 packages bootstrap)} module. A similar figure can be generated with
24181 @command{guix graph} (@pxref{Invoking guix graph}), along the lines of:
24182
24183 @example
24184 guix graph -t derivation \
24185 -e '(@@@@ (gnu packages bootstrap) %bootstrap-gcc)' \
24186 | dot -Tps > t.ps
24187 @end example
24188
24189 At this level of detail, things are
24190 slightly complex. First, Guile itself consists of an ELF executable,
24191 along with many source and compiled Scheme files that are dynamically
24192 loaded when it runs. This gets stored in the @file{guile-2.0.7.tar.xz}
24193 tarball shown in this graph. This tarball is part of Guix's ``source''
24194 distribution, and gets inserted into the store with @code{add-to-store}
24195 (@pxref{The Store}).
24196
24197 But how do we write a derivation that unpacks this tarball and adds it
24198 to the store? To solve this problem, the @code{guile-bootstrap-2.0.drv}
24199 derivation---the first one that gets built---uses @code{bash} as its
24200 builder, which runs @code{build-bootstrap-guile.sh}, which in turn calls
24201 @code{tar} to unpack the tarball. Thus, @file{bash}, @file{tar},
24202 @file{xz}, and @file{mkdir} are statically-linked binaries, also part of
24203 the Guix source distribution, whose sole purpose is to allow the Guile
24204 tarball to be unpacked.
24205
24206 Once @code{guile-bootstrap-2.0.drv} is built, we have a functioning
24207 Guile that can be used to run subsequent build programs. Its first task
24208 is to download tarballs containing the other pre-built binaries---this
24209 is what the @code{.tar.xz.drv} derivations do. Guix modules such as
24210 @code{ftp-client.scm} are used for this purpose. The
24211 @code{module-import.drv} derivations import those modules in a directory
24212 in the store, using the original layout. The
24213 @code{module-import-compiled.drv} derivations compile those modules, and
24214 write them in an output directory with the right layout. This
24215 corresponds to the @code{#:modules} argument of
24216 @code{build-expression->derivation} (@pxref{Derivations}).
24217
24218 Finally, the various tarballs are unpacked by the
24219 derivations @code{gcc-bootstrap-0.drv}, @code{glibc-bootstrap-0.drv},
24220 etc., at which point we have a working C tool chain.
24221
24222
24223 @unnumberedsubsec Building the Build Tools
24224
24225 Bootstrapping is complete when we have a full tool chain that does not
24226 depend on the pre-built bootstrap tools discussed above. This
24227 no-dependency requirement is verified by checking whether the files of
24228 the final tool chain contain references to the @file{/gnu/store}
24229 directories of the bootstrap inputs. The process that leads to this
24230 ``final'' tool chain is described by the package definitions found in
24231 the @code{(gnu packages commencement)} module.
24232
24233 The @command{guix graph} command allows us to ``zoom out'' compared to
24234 the graph above, by looking at the level of package objects instead of
24235 individual derivations---remember that a package may translate to
24236 several derivations, typically one derivation to download its source,
24237 one to build the Guile modules it needs, and one to actually build the
24238 package from source. The command:
24239
24240 @example
24241 guix graph -t bag \
24242 -e '(@@@@ (gnu packages commencement)
24243 glibc-final-with-bootstrap-bash)' | dot -Tps > t.ps
24244 @end example
24245
24246 @noindent
24247 produces the dependency graph leading to the ``final'' C
24248 library@footnote{You may notice the @code{glibc-intermediate} label,
24249 suggesting that it is not @emph{quite} final, but as a good
24250 approximation, we will consider it final.}, depicted below.
24251
24252 @image{images/bootstrap-packages,6in,,Dependency graph of the early packages}
24253
24254 @c See <http://lists.gnu.org/archive/html/gnu-system-discuss/2012-10/msg00000.html>.
24255 The first tool that gets built with the bootstrap binaries is
24256 GNU@tie{}Make---noted @code{make-boot0} above---which is a prerequisite
24257 for all the following packages. From there Findutils and Diffutils get
24258 built.
24259
24260 Then come the first-stage Binutils and GCC, built as pseudo cross
24261 tools---i.e., with @code{--target} equal to @code{--host}. They are
24262 used to build libc. Thanks to this cross-build trick, this libc is
24263 guaranteed not to hold any reference to the initial tool chain.
24264
24265 From there the final Binutils and GCC (not shown above) are built.
24266 GCC uses @code{ld}
24267 from the final Binutils, and links programs against the just-built libc.
24268 This tool chain is used to build the other packages used by Guix and by
24269 the GNU Build System: Guile, Bash, Coreutils, etc.
24270
24271 And voilà! At this point we have the complete set of build tools that
24272 the GNU Build System expects. These are in the @code{%final-inputs}
24273 variable of the @code{(gnu packages commencement)} module, and are
24274 implicitly used by any package that uses @code{gnu-build-system}
24275 (@pxref{Build Systems, @code{gnu-build-system}}).
24276
24277
24278 @unnumberedsubsec Building the Bootstrap Binaries
24279
24280 @cindex bootstrap binaries
24281 Because the final tool chain does not depend on the bootstrap binaries,
24282 those rarely need to be updated. Nevertheless, it is useful to have an
24283 automated way to produce them, should an update occur, and this is what
24284 the @code{(gnu packages make-bootstrap)} module provides.
24285
24286 The following command builds the tarballs containing the bootstrap
24287 binaries (Guile, Binutils, GCC, libc, and a tarball containing a mixture
24288 of Coreutils and other basic command-line tools):
24289
24290 @example
24291 guix build bootstrap-tarballs
24292 @end example
24293
24294 The generated tarballs are those that should be referred to in the
24295 @code{(gnu packages bootstrap)} module mentioned at the beginning of
24296 this section.
24297
24298 Still here? Then perhaps by now you've started to wonder: when do we
24299 reach a fixed point? That is an interesting question! The answer is
24300 unknown, but if you would like to investigate further (and have
24301 significant computational and storage resources to do so), then let us
24302 know.
24303
24304 @unnumberedsubsec Reducing the Set of Bootstrap Binaries
24305
24306 Our bootstrap binaries currently include GCC, Guile, etc. That's a lot
24307 of binary code! Why is that a problem? It's a problem because these
24308 big chunks of binary code are practically non-auditable, which makes it
24309 hard to establish what source code produced them. Every unauditable
24310 binary also leaves us vulnerable to compiler backdoors as described by
24311 Ken Thompson in the 1984 paper @emph{Reflections on Trusting Trust}.
24312
24313 This is mitigated by the fact that our bootstrap binaries were generated
24314 from an earlier Guix revision. Nevertheless it lacks the level of
24315 transparency that we get in the rest of the package dependency graph,
24316 where Guix always gives us a source-to-binary mapping. Thus, our goal
24317 is to reduce the set of bootstrap binaries to the bare minimum.
24318
24319 The @uref{http://bootstrappable.org, Bootstrappable.org web site} lists
24320 on-going projects to do that. One of these is about replacing the
24321 bootstrap GCC with a sequence of assemblers, interpreters, and compilers
24322 of increasing complexity, which could be built from source starting from
24323 a simple and auditable assembler. Your help is welcome!
24324
24325
24326 @node Porting
24327 @section Porting to a New Platform
24328
24329 As discussed above, the GNU distribution is self-contained, and
24330 self-containment is achieved by relying on pre-built ``bootstrap
24331 binaries'' (@pxref{Bootstrapping}). These binaries are specific to an
24332 operating system kernel, CPU architecture, and application binary
24333 interface (ABI). Thus, to port the distribution to a platform that is
24334 not yet supported, one must build those bootstrap binaries, and update
24335 the @code{(gnu packages bootstrap)} module to use them on that platform.
24336
24337 Fortunately, Guix can @emph{cross compile} those bootstrap binaries.
24338 When everything goes well, and assuming the GNU tool chain supports the
24339 target platform, this can be as simple as running a command like this
24340 one:
24341
24342 @example
24343 guix build --target=armv5tel-linux-gnueabi bootstrap-tarballs
24344 @end example
24345
24346 For this to work, the @code{glibc-dynamic-linker} procedure in
24347 @code{(gnu packages bootstrap)} must be augmented to return the right
24348 file name for libc's dynamic linker on that platform; likewise,
24349 @code{system->linux-architecture} in @code{(gnu packages linux)} must be
24350 taught about the new platform.
24351
24352 Once these are built, the @code{(gnu packages bootstrap)} module needs
24353 to be updated to refer to these binaries on the target platform. That
24354 is, the hashes and URLs of the bootstrap tarballs for the new platform
24355 must be added alongside those of the currently supported platforms. The
24356 bootstrap Guile tarball is treated specially: it is expected to be
24357 available locally, and @file{gnu/local.mk} has rules to download it for
24358 the supported architectures; a rule for the new platform must be added
24359 as well.
24360
24361 In practice, there may be some complications. First, it may be that the
24362 extended GNU triplet that specifies an ABI (like the @code{eabi} suffix
24363 above) is not recognized by all the GNU tools. Typically, glibc
24364 recognizes some of these, whereas GCC uses an extra @code{--with-abi}
24365 configure flag (see @code{gcc.scm} for examples of how to handle this).
24366 Second, some of the required packages could fail to build for that
24367 platform. Lastly, the generated binaries could be broken for some
24368 reason.
24369
24370 @c *********************************************************************
24371 @include contributing.texi
24372
24373 @c *********************************************************************
24374 @node Acknowledgments
24375 @chapter Acknowledgments
24376
24377 Guix is based on the @uref{http://nixos.org/nix/, Nix package manager},
24378 which was designed and
24379 implemented by Eelco Dolstra, with contributions from other people (see
24380 the @file{nix/AUTHORS} file in Guix.) Nix pioneered functional package
24381 management, and promoted unprecedented features, such as transactional
24382 package upgrades and rollbacks, per-user profiles, and referentially
24383 transparent build processes. Without this work, Guix would not exist.
24384
24385 The Nix-based software distributions, Nixpkgs and NixOS, have also been
24386 an inspiration for Guix.
24387
24388 GNU@tie{}Guix itself is a collective work with contributions from a
24389 number of people. See the @file{AUTHORS} file in Guix for more
24390 information on these fine people. The @file{THANKS} file lists people
24391 who have helped by reporting bugs, taking care of the infrastructure,
24392 providing artwork and themes, making suggestions, and more---thank you!
24393
24394
24395 @c *********************************************************************
24396 @node GNU Free Documentation License
24397 @appendix GNU Free Documentation License
24398 @cindex license, GNU Free Documentation License
24399 @include fdl-1.3.texi
24400
24401 @c *********************************************************************
24402 @node Concept Index
24403 @unnumbered Concept Index
24404 @printindex cp
24405
24406 @node Programming Index
24407 @unnumbered Programming Index
24408 @syncodeindex tp fn
24409 @syncodeindex vr fn
24410 @printindex fn
24411
24412 @bye
24413
24414 @c Local Variables:
24415 @c ispell-local-dictionary: "american";
24416 @c End: