gnu: racket: Don't inject store paths into Racket files.
[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 OPENPGP-SIGNING-KEY-URL https://sv.gnu.org/people/viewgpg.php?user_id=15145
15
16 @c Base URL for downloads.
17 @set BASE-URL https://ftp.gnu.org/gnu/guix
18
19 @c The official substitute server used by default.
20 @set SUBSTITUTE-SERVER ci.guix.gnu.org
21 @set SUBSTITUTE-URL https://@value{SUBSTITUTE-SERVER}
22
23 @copying
24 Copyright @copyright{} 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès@*
25 Copyright @copyright{} 2013, 2014, 2016 Andreas Enge@*
26 Copyright @copyright{} 2013 Nikita Karetnikov@*
27 Copyright @copyright{} 2014, 2015, 2016 Alex Kost@*
28 Copyright @copyright{} 2015, 2016 Mathieu Lirzin@*
29 Copyright @copyright{} 2014 Pierre-Antoine Rault@*
30 Copyright @copyright{} 2015 Taylan Ulrich Bayırlı/Kammer@*
31 Copyright @copyright{} 2015, 2016, 2017, 2019, 2020, 2021 Leo Famulari@*
32 Copyright @copyright{} 2015, 2016, 2017, 2018, 2019, 2020 Ricardo Wurmus@*
33 Copyright @copyright{} 2016 Ben Woodcroft@*
34 Copyright @copyright{} 2016, 2017, 2018, 2021 Chris Marusich@*
35 Copyright @copyright{} 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner@*
36 Copyright @copyright{} 2016 John Darrington@*
37 Copyright @copyright{} 2016, 2017 Nikita Gillmann@*
38 Copyright @copyright{} 2016, 2017, 2018, 2019, 2020 Jan Nieuwenhuizen@*
39 Copyright @copyright{} 2016, 2017, 2018, 2019, 2020 Julien Lepiller@*
40 Copyright @copyright{} 2016 Alex ter Weele@*
41 Copyright @copyright{} 2016, 2017, 2018, 2019, 2020, 2021 Christopher Baines@*
42 Copyright @copyright{} 2017, 2018, 2019 Clément Lassieur@*
43 Copyright @copyright{} 2017, 2018, 2020, 2021 Mathieu Othacehe@*
44 Copyright @copyright{} 2017 Federico Beffa@*
45 Copyright @copyright{} 2017, 2018 Carlo Zancanaro@*
46 Copyright @copyright{} 2017 Thomas Danckaert@*
47 Copyright @copyright{} 2017 humanitiesNerd@*
48 Copyright @copyright{} 2017, 2021 Christopher Lemmer Webber@*
49 Copyright @copyright{} 2017, 2018, 2019, 2020 Marius Bakke@*
50 Copyright @copyright{} 2017, 2019, 2020 Hartmut Goebel@*
51 Copyright @copyright{} 2017, 2019, 2020, 2021 Maxim Cournoyer@*
52 Copyright @copyright{} 2017, 2018, 2019, 2020, 2021 Tobias Geerinckx-Rice@*
53 Copyright @copyright{} 2017 George Clemmer@*
54 Copyright @copyright{} 2017 Andy Wingo@*
55 Copyright @copyright{} 2017, 2018, 2019, 2020 Arun Isaac@*
56 Copyright @copyright{} 2017 nee@*
57 Copyright @copyright{} 2018 Rutger Helling@*
58 Copyright @copyright{} 2018, 2021 Oleg Pykhalov@*
59 Copyright @copyright{} 2018 Mike Gerwitz@*
60 Copyright @copyright{} 2018 Pierre-Antoine Rouby@*
61 Copyright @copyright{} 2018, 2019 Gábor Boskovits@*
62 Copyright @copyright{} 2018, 2019, 2020 Florian Pelz@*
63 Copyright @copyright{} 2018 Laura Lazzati@*
64 Copyright @copyright{} 2018 Alex Vong@*
65 Copyright @copyright{} 2019 Josh Holland@*
66 Copyright @copyright{} 2019, 2020 Diego Nicola Barbato@*
67 Copyright @copyright{} 2019 Ivan Petkov@*
68 Copyright @copyright{} 2019 Jakob L. Kreuze@*
69 Copyright @copyright{} 2019 Kyle Andrews@*
70 Copyright @copyright{} 2019 Alex Griffin@*
71 Copyright @copyright{} 2019, 2020 Guillaume Le Vaillant@*
72 Copyright @copyright{} 2020 Leo Prikler@*
73 Copyright @copyright{} 2019, 2020 Simon Tournier@*
74 Copyright @copyright{} 2020 Wiktor Żelazny@*
75 Copyright @copyright{} 2020 Damien Cassou@*
76 Copyright @copyright{} 2020 Jakub Kądziołka@*
77 Copyright @copyright{} 2020 Jack Hill@*
78 Copyright @copyright{} 2020 Naga Malleswari@*
79 Copyright @copyright{} 2020 Brice Waegeneire@*
80 Copyright @copyright{} 2020 R Veera Kumar@*
81 Copyright @copyright{} 2020 Pierre Langlois@*
82 Copyright @copyright{} 2020 pinoaffe@*
83 Copyright @copyright{} 2020 André Batista@*
84 Copyright @copyright{} 2020, 2021 Alexandru-Sergiu Marton@*
85 Copyright @copyright{} 2020 raingloom@*
86 Copyright @copyright{} 2020 Daniel Brooks@*
87 Copyright @copyright{} 2020 John Soo@*
88 Copyright @copyright{} 2020 Jonathan Brielmaier@*
89 Copyright @copyright{} 2020 Edgar Vincent@*
90
91 Permission is granted to copy, distribute and/or modify this document
92 under the terms of the GNU Free Documentation License, Version 1.3 or
93 any later version published by the Free Software Foundation; with no
94 Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
95 copy of the license is included in the section entitled ``GNU Free
96 Documentation License''.
97 @end copying
98
99 @dircategory System administration
100 @direntry
101 * Guix: (guix). Manage installed software and system configuration.
102 * guix package: (guix)Invoking guix package. Installing, removing, and upgrading packages.
103 * guix gc: (guix)Invoking guix gc. Reclaiming unused disk space.
104 * guix pull: (guix)Invoking guix pull. Update the list of available packages.
105 * guix system: (guix)Invoking guix system. Manage the operating system configuration.
106 * guix deploy: (guix)Invoking guix deploy. Manage operating system configurations for remote hosts.
107 @end direntry
108
109 @dircategory Software development
110 @direntry
111 * guix environment: (guix)Invoking guix environment. Building development environments with Guix.
112 * guix build: (guix)Invoking guix build. Building packages.
113 * guix pack: (guix)Invoking guix pack. Creating binary bundles.
114 @end direntry
115
116 @titlepage
117 @title GNU Guix Reference Manual
118 @subtitle Using the GNU Guix Functional Package Manager
119 @author The GNU Guix Developers
120
121 @page
122 @vskip 0pt plus 1filll
123 Edition @value{EDITION} @*
124 @value{UPDATED} @*
125
126 @insertcopying
127 @end titlepage
128
129 @contents
130
131 @c *********************************************************************
132 @node Top
133 @top GNU Guix
134
135 This document describes GNU Guix version @value{VERSION}, a functional
136 package management tool written for the GNU system.
137
138 @c TRANSLATORS: You can replace the following paragraph with information on
139 @c how to join your own translation team and how to report issues with the
140 @c translation.
141 This manual is also available in Simplified Chinese (@pxref{Top,,, guix.zh_CN,
142 GNU Guix参考手册}), French (@pxref{Top,,, guix.fr, Manuel de référence de GNU
143 Guix}), German (@pxref{Top,,, guix.de, Referenzhandbuch zu GNU Guix}),
144 Spanish (@pxref{Top,,, guix.es, Manual de referencia de GNU Guix}), and
145 Russian (@pxref{Top,,, guix.ru, Руководство GNU Guix}). If you
146 would like to translate it in your native language, consider joining
147 @uref{https://translate.fedoraproject.org/projects/guix/documentation-manual,
148 Weblate}.
149
150 @menu
151 * Introduction:: What is Guix about?
152 * Installation:: Installing Guix.
153 * System Installation:: Installing the whole operating system.
154 * Getting Started:: Your first steps.
155 * Package Management:: Package installation, upgrade, etc.
156 * Channels:: Customizing the package collection.
157 * Development:: Guix-aided software development.
158 * Programming Interface:: Using Guix in Scheme.
159 * Utilities:: Package management commands.
160 * System Configuration:: Configuring the operating system.
161 * Documentation:: Browsing software user manuals.
162 * Installing Debugging Files:: Feeding the debugger.
163 * Security Updates:: Deploying security fixes quickly.
164 * Bootstrapping:: GNU/Linux built from scratch.
165 * Porting:: Targeting another platform or kernel.
166 * Contributing:: Your help needed!
167
168 * Acknowledgments:: Thanks!
169 * GNU Free Documentation License:: The license of this manual.
170 * Concept Index:: Concepts.
171 * Programming Index:: Data types, functions, and variables.
172
173 @detailmenu
174 --- The Detailed Node Listing ---
175
176 Introduction
177
178 * Managing Software the Guix Way:: What's special.
179 * GNU Distribution:: The packages and tools.
180
181 Installation
182
183 * Binary Installation:: Getting Guix running in no time!
184 * Requirements:: Software needed to build and run Guix.
185 * Running the Test Suite:: Testing Guix.
186 * Setting Up the Daemon:: Preparing the build daemon's environment.
187 * Invoking guix-daemon:: Running the build daemon.
188 * Application Setup:: Application-specific setup.
189 * Upgrading Guix:: Upgrading Guix and its build daemon.
190
191 Setting Up the Daemon
192
193 * Build Environment Setup:: Preparing the isolated build environment.
194 * Daemon Offload Setup:: Offloading builds to remote machines.
195 * SELinux Support:: Using an SELinux policy for the daemon.
196
197 System Installation
198
199 * Limitations:: What you can expect.
200 * Hardware Considerations:: Supported hardware.
201 * USB Stick and DVD Installation:: Preparing the installation medium.
202 * Preparing for Installation:: Networking, partitioning, etc.
203 * Guided Graphical Installation:: Easy graphical installation.
204 * Manual Installation:: Manual installation for wizards.
205 * After System Installation:: When installation succeeded.
206 * Installing Guix in a VM:: Guix System playground.
207 * Building the Installation Image:: How this comes to be.
208
209 Manual Installation
210
211 * Keyboard Layout and Networking and Partitioning:: Initial setup.
212 * Proceeding with the Installation:: Installing.
213
214 Package Management
215
216 * Features:: How Guix will make your life brighter.
217 * Invoking guix package:: Package installation, removal, etc.
218 * Substitutes:: Downloading pre-built binaries.
219 * Packages with Multiple Outputs:: Single source package, multiple outputs.
220 * Invoking guix gc:: Running the garbage collector.
221 * Invoking guix pull:: Fetching the latest Guix and distribution.
222 * Invoking guix time-machine:: Running an older revision of Guix.
223 * Inferiors:: Interacting with another revision of Guix.
224 * Invoking guix describe:: Display information about your Guix revision.
225 * Invoking guix archive:: Exporting and importing store files.
226
227 Substitutes
228
229 * Official Substitute Server:: One particular source of substitutes.
230 * Substitute Server Authorization:: How to enable or disable substitutes.
231 * Getting Substitutes from Other Servers:: Substitute diversity.
232 * Substitute Authentication:: How Guix verifies substitutes.
233 * Proxy Settings:: How to get substitutes via proxy.
234 * Substitution Failure:: What happens when substitution fails.
235 * On Trusting Binaries:: How can you trust that binary blob?
236
237 Channels
238
239 * Specifying Additional Channels:: Extending the package collection.
240 * Using a Custom Guix Channel:: Using a customized Guix.
241 * Replicating Guix:: Running the @emph{exact same} Guix.
242 * Channel Authentication:: How Guix verifies what it fetches.
243 * Channels with Substitutes:: Using channels with available substitutes.
244 * Creating a Channel:: How to write your custom channel.
245 * Package Modules in a Sub-directory:: Specifying the channel's package modules location.
246 * Declaring Channel Dependencies:: How to depend on other channels.
247 * Specifying Channel Authorizations:: Defining channel authors authorizations.
248 * Primary URL:: Distinguishing mirror to original.
249 * Writing Channel News:: Communicating information to channel's users.
250
251 Development
252
253 * Invoking guix environment:: Setting up development environments.
254 * Invoking guix pack:: Creating software bundles.
255 * The GCC toolchain:: Working with languages supported by GCC.
256 * Invoking guix git authenticate:: Authenticating Git repositories.
257
258 Programming Interface
259
260 * Package Modules:: Packages from the programmer's viewpoint.
261 * Defining Packages:: Defining new packages.
262 * Defining Package Variants:: Customizing packages.
263 * Build Systems:: Specifying how packages are built.
264 * Build Phases:: Phases of the build process of a package.
265 * Build Utilities:: Helpers for your package definitions and more.
266 * The Store:: Manipulating the package store.
267 * Derivations:: Low-level interface to package derivations.
268 * The Store Monad:: Purely functional interface to the store.
269 * G-Expressions:: Manipulating build expressions.
270 * Invoking guix repl:: Programming Guix in Guile.
271
272 Defining Packages
273
274 * package Reference:: The package data type.
275 * origin Reference:: The origin data type.
276
277 Utilities
278
279 * Invoking guix build:: Building packages from the command line.
280 * Invoking guix edit:: Editing package definitions.
281 * Invoking guix download:: Downloading a file and printing its hash.
282 * Invoking guix hash:: Computing the cryptographic hash of a file.
283 * Invoking guix import:: Importing package definitions.
284 * Invoking guix refresh:: Updating package definitions.
285 * Invoking guix lint:: Finding errors in package definitions.
286 * Invoking guix size:: Profiling disk usage.
287 * Invoking guix graph:: Visualizing the graph of packages.
288 * Invoking guix publish:: Sharing substitutes.
289 * Invoking guix challenge:: Challenging substitute servers.
290 * Invoking guix copy:: Copying to and from a remote store.
291 * Invoking guix container:: Process isolation.
292 * Invoking guix weather:: Assessing substitute availability.
293 * Invoking guix processes:: Listing client processes.
294
295 Invoking @command{guix build}
296
297 * Common Build Options:: Build options for most commands.
298 * Package Transformation Options:: Creating variants of packages.
299 * Additional Build Options:: Options specific to 'guix build'.
300 * Debugging Build Failures:: Real life packaging experience.
301
302 System Configuration
303
304 * Using the Configuration System:: Customizing your GNU system.
305 * operating-system Reference:: Detail of operating-system declarations.
306 * File Systems:: Configuring file system mounts.
307 * Mapped Devices:: Block device extra processing.
308 * User Accounts:: Specifying user accounts.
309 * Keyboard Layout:: How the system interprets key strokes.
310 * Locales:: Language and cultural convention settings.
311 * Services:: Specifying system services.
312 * Setuid Programs:: Programs running with root privileges.
313 * X.509 Certificates:: Authenticating HTTPS servers.
314 * Name Service Switch:: Configuring libc's name service switch.
315 * Initial RAM Disk:: Linux-Libre bootstrapping.
316 * Bootloader Configuration:: Configuring the boot loader.
317 * Invoking guix system:: Instantiating a system configuration.
318 * Invoking guix deploy:: Deploying a system configuration to a remote host.
319 * Running Guix in a VM:: How to run Guix System in a virtual machine.
320 * Defining Services:: Adding new service definitions.
321
322 Services
323
324 * Base Services:: Essential system services.
325 * Scheduled Job Execution:: The mcron service.
326 * Log Rotation:: The rottlog service.
327 * Networking Services:: Network setup, SSH daemon, etc.
328 * Unattended Upgrades:: Automated system upgrades.
329 * X Window:: Graphical display.
330 * Printing Services:: Local and remote printer support.
331 * Desktop Services:: D-Bus and desktop services.
332 * Sound Services:: ALSA and Pulseaudio services.
333 * Database Services:: SQL databases, key-value stores, etc.
334 * Mail Services:: IMAP, POP3, SMTP, and all that.
335 * Messaging Services:: Messaging services.
336 * Telephony Services:: Telephony services.
337 * Monitoring Services:: Monitoring services.
338 * Kerberos Services:: Kerberos services.
339 * LDAP Services:: LDAP services.
340 * Web Services:: Web servers.
341 * Certificate Services:: TLS certificates via Let's Encrypt.
342 * DNS Services:: DNS daemons.
343 * VPN Services:: VPN daemons.
344 * Network File System:: NFS related services.
345 * Continuous Integration:: Cuirass and Laminar services.
346 * Power Management Services:: Extending battery life.
347 * Audio Services:: The MPD.
348 * Virtualization Services:: Virtualization services.
349 * Version Control Services:: Providing remote access to Git repositories.
350 * Game Services:: Game servers.
351 * PAM Mount Service:: Service to mount volumes when logging in.
352 * Guix Services:: Services relating specifically to Guix.
353 * Linux Services:: Services tied to the Linux kernel.
354 * Hurd Services:: Services specific for a Hurd System.
355 * Miscellaneous Services:: Other services.
356
357 Defining Services
358
359 * Service Composition:: The model for composing services.
360 * Service Types and Services:: Types and services.
361 * Service Reference:: API reference.
362 * Shepherd Services:: A particular type of service.
363
364 Installing Debugging Files
365
366 * Separate Debug Info:: Installing 'debug' outputs.
367 * Rebuilding Debug Info:: Building missing debug info.
368
369 Bootstrapping
370
371 * Reduced Binary Seed Bootstrap:: A Bootstrap worthy of GNU.
372 * Preparing to Use the Bootstrap Binaries:: Building that what matters most.
373
374 @end detailmenu
375 @end menu
376
377 @c *********************************************************************
378 @node Introduction
379 @chapter Introduction
380
381 @cindex purpose
382 GNU Guix@footnote{``Guix'' is pronounced like ``geeks'', or ``ɡiːks''
383 using the international phonetic alphabet (IPA).} is a package
384 management tool for and distribution of the GNU system.
385 Guix makes it easy for unprivileged
386 users to install, upgrade, or remove software packages, to roll back to a
387 previous package set, to build packages from source, and generally
388 assists with the creation and maintenance of software environments.
389
390 @cindex Guix System
391 @cindex GuixSD, now Guix System
392 @cindex Guix System Distribution, now Guix System
393 You can install GNU@tie{}Guix on top of an existing GNU/Linux system where it
394 complements the available tools without interference (@pxref{Installation}),
395 or you can use it as a standalone operating system distribution,
396 @dfn{Guix@tie{}System}@footnote{We used to refer to Guix System as ``Guix
397 System Distribution'' or ``GuixSD''. We now consider it makes more sense to
398 group everything under the ``Guix'' banner since, after all, Guix System is
399 readily available through the @command{guix system} command, even if you're
400 using a different distro underneath!}. @xref{GNU Distribution}.
401
402 @menu
403 * Managing Software the Guix Way:: What's special.
404 * GNU Distribution:: The packages and tools.
405 @end menu
406
407 @node Managing Software the Guix Way
408 @section Managing Software the Guix Way
409
410 @cindex user interfaces
411 Guix provides a command-line package management interface
412 (@pxref{Package Management}), tools to help with software development
413 (@pxref{Development}), command-line utilities for more advanced usage
414 (@pxref{Utilities}), as well as Scheme programming interfaces
415 (@pxref{Programming Interface}).
416 @cindex build daemon
417 Its @dfn{build daemon} is responsible for building packages on behalf of
418 users (@pxref{Setting Up the Daemon}) and for downloading pre-built
419 binaries from authorized sources (@pxref{Substitutes}).
420
421 @cindex extensibility of the distribution
422 @cindex customization, of packages
423 Guix includes package definitions for many GNU and non-GNU packages, all
424 of which @uref{https://www.gnu.org/philosophy/free-sw.html, respect the
425 user's computing freedom}. It is @emph{extensible}: users can write
426 their own package definitions (@pxref{Defining Packages}) and make them
427 available as independent package modules (@pxref{Package Modules}). It
428 is also @emph{customizable}: users can @emph{derive} specialized package
429 definitions from existing ones, including from the command line
430 (@pxref{Package Transformation Options}).
431
432 @cindex functional package management
433 @cindex isolation
434 Under the hood, Guix implements the @dfn{functional package management}
435 discipline pioneered by Nix (@pxref{Acknowledgments}).
436 In Guix, the package build and installation process is seen
437 as a @emph{function}, in the mathematical sense. That function takes inputs,
438 such as build scripts, a compiler, and libraries, and
439 returns an installed package. As a pure function, its result depends
440 solely on its inputs---for instance, it cannot refer to software or
441 scripts that were not explicitly passed as inputs. A build function
442 always produces the same result when passed a given set of inputs. It
443 cannot alter the environment of the running system in
444 any way; for instance, it cannot create, modify, or delete files outside
445 of its build and installation directories. This is achieved by running
446 build processes in isolated environments (or @dfn{containers}), where only their
447 explicit inputs are visible.
448
449 @cindex store
450 The result of package build functions is @dfn{cached} in the file
451 system, in a special directory called @dfn{the store} (@pxref{The
452 Store}). Each package is installed in a directory of its own in the
453 store---by default under @file{/gnu/store}. The directory name contains
454 a hash of all the inputs used to build that package; thus, changing an
455 input yields a different directory name.
456
457 This approach is the foundation for the salient features of Guix: support
458 for transactional package upgrade and rollback, per-user installation, and
459 garbage collection of packages (@pxref{Features}).
460
461
462 @node GNU Distribution
463 @section GNU Distribution
464
465 @cindex Guix System
466 Guix comes with a distribution of the GNU system consisting entirely of
467 free software@footnote{The term ``free'' here refers to the
468 @url{https://www.gnu.org/philosophy/free-sw.html,freedom provided to
469 users of that software}.}. The
470 distribution can be installed on its own (@pxref{System Installation}),
471 but it is also possible to install Guix as a package manager on top of
472 an installed GNU/Linux system (@pxref{Installation}). When we need to
473 distinguish between the two, we refer to the standalone distribution as
474 Guix@tie{}System.
475
476 The distribution provides core GNU packages such as GNU libc, GCC, and
477 Binutils, as well as many GNU and non-GNU applications. The complete
478 list of available packages can be browsed
479 @url{https://www.gnu.org/software/guix/packages,on-line} or by
480 running @command{guix package} (@pxref{Invoking guix package}):
481
482 @example
483 guix package --list-available
484 @end example
485
486 Our goal is to provide a practical 100% free software distribution of
487 Linux-based and other variants of GNU, with a focus on the promotion and
488 tight integration of GNU components, and an emphasis on programs and
489 tools that help users exert that freedom.
490
491 Packages are currently available on the following platforms:
492
493 @table @code
494
495 @item x86_64-linux
496 Intel/AMD @code{x86_64} architecture, Linux-Libre kernel.
497
498 @item i686-linux
499 Intel 32-bit architecture (IA32), Linux-Libre kernel.
500
501 @item armhf-linux
502 ARMv7-A architecture with hard float, Thumb-2 and NEON,
503 using the EABI hard-float application binary interface (ABI),
504 and Linux-Libre kernel.
505
506 @item aarch64-linux
507 little-endian 64-bit ARMv8-A processors, Linux-Libre kernel.
508
509 @item i586-gnu
510 @uref{https://hurd.gnu.org, GNU/Hurd} on the Intel 32-bit architecture
511 (IA32).
512
513 This configuration is experimental and under development. The easiest
514 way for you to give it a try is by setting up an instance of
515 @code{hurd-vm-service-type} on your GNU/Linux machine
516 (@pxref{transparent-emulation-qemu, @code{hurd-vm-service-type}}).
517 @xref{Contributing}, on how to help!
518
519 @item mips64el-linux (deprecated)
520 little-endian 64-bit MIPS processors, specifically the Loongson series,
521 n32 ABI, and Linux-Libre kernel. This configuration is no longer fully
522 supported; in particular, there is no ongoing work to ensure that this
523 architecture still works. Should someone decide they wish to revive this
524 architecture then the code is still available.
525
526 @item powerpc64le-linux
527 little-endian 64-bit Power ISA processors, Linux-Libre kernel. This
528 includes POWER9 systems such as the
529 @uref{https://www.fsf.org/news/talos-ii-mainboard-and-talos-ii-lite-mainboard-now-fsf-certified-to-respect-your-freedom,
530 RYF Talos II mainboard}. This platform is available as a "technology
531 preview": although it is supported, substitutes are not yet available
532 from the build farm (@pxref{Substitutes}), and some packages may fail to
533 build (@pxref{Tracking Bugs and Patches}). That said, the Guix
534 community is actively working on improving this support, and now is a
535 great time to try it and get involved!
536
537 @end table
538
539 With Guix@tie{}System, you @emph{declare} all aspects of the operating system
540 configuration and Guix takes care of instantiating the configuration in a
541 transactional, reproducible, and stateless fashion (@pxref{System
542 Configuration}). Guix System uses the Linux-libre kernel, the Shepherd
543 initialization system (@pxref{Introduction,,, shepherd, The GNU Shepherd
544 Manual}), the well-known GNU utilities and tool chain, as well as the
545 graphical environment or system services of your choice.
546
547 Guix System is available on all the above platforms except
548 @code{mips64el-linux} and @code{powerpc64le-linux}.
549
550 @noindent
551 For information on porting to other architectures or kernels,
552 @pxref{Porting}.
553
554 Building this distribution is a cooperative effort, and you are invited
555 to join! @xref{Contributing}, for information about how you can help.
556
557
558 @c *********************************************************************
559 @node Installation
560 @chapter Installation
561
562 @cindex installing Guix
563
564 @quotation Note
565 We recommend the use of this
566 @uref{https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh,
567 shell installer script} to install Guix on top of a running GNU/Linux system,
568 thereafter called a @dfn{foreign distro}.@footnote{This section is concerned
569 with the installation of the package manager, which can be done on top of a
570 running GNU/Linux system. If, instead, you want to install the complete GNU
571 operating system, @pxref{System Installation}.} The script automates the
572 download, installation, and initial configuration of Guix. It should be run
573 as the root user.
574 @end quotation
575
576 @cindex foreign distro
577 @cindex directories related to foreign distro
578 When installed on a foreign distro, GNU@tie{}Guix complements the available
579 tools without interference. Its data lives exclusively in two directories,
580 usually @file{/gnu/store} and @file{/var/guix}; other files on your system,
581 such as @file{/etc}, are left untouched.
582
583 Once installed, Guix can be updated by running @command{guix pull}
584 (@pxref{Invoking guix pull}).
585
586 If you prefer to perform the installation steps manually or want to tweak
587 them, you may find the following subsections useful. They describe the
588 software requirements of Guix, as well as how to install it manually and get
589 ready to use it.
590
591 @menu
592 * Binary Installation:: Getting Guix running in no time!
593 * Requirements:: Software needed to build and run Guix.
594 * Running the Test Suite:: Testing Guix.
595 * Setting Up the Daemon:: Preparing the build daemon's environment.
596 * Invoking guix-daemon:: Running the build daemon.
597 * Application Setup:: Application-specific setup.
598 * Upgrading Guix:: Upgrading Guix and its build daemon.
599 @end menu
600
601 @node Binary Installation
602 @section Binary Installation
603
604 @cindex installing Guix from binaries
605 @cindex installer script
606 This section describes how to install Guix on an arbitrary system from a
607 self-contained tarball providing binaries for Guix and for all its
608 dependencies. This is often quicker than installing from source, which
609 is described in the next sections. The only requirement is to have
610 GNU@tie{}tar and Xz.
611
612 @c Note duplicated from the ``Installation'' node.
613 @quotation Note
614 We recommend the use of this
615 @uref{https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh,
616 shell installer script}. The script automates the download, installation, and
617 initial configuration steps described below. It should be run as the root
618 user. As root, you can thus run this:
619
620 @example
621 cd /tmp
622 wget https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh
623 chmod +x guix-install.sh
624 ./guix-install.sh
625 @end example
626
627 When you're done, @pxref{Application Setup} for extra configuration you
628 might need, and @ref{Getting Started} for your first steps!
629 @end quotation
630
631 Installing goes along these lines:
632
633 @enumerate
634 @item
635 @cindex downloading Guix binary
636 Download the binary tarball from
637 @indicateurl{@value{BASE-URL}/guix-binary-@value{VERSION}.x86_64-linux.tar.xz},
638 where @code{x86_64-linux} can be replaced with @code{i686-linux} for an
639 @code{i686} (32-bits) machine already running the kernel Linux, and so on
640 (@pxref{GNU Distribution}).
641
642 @c The following is somewhat duplicated in ``System Installation''.
643 Make sure to download the associated @file{.sig} file and to verify the
644 authenticity of the tarball against it, along these lines:
645
646 @example
647 $ wget @value{BASE-URL}/guix-binary-@value{VERSION}.x86_64-linux.tar.xz.sig
648 $ gpg --verify guix-binary-@value{VERSION}.x86_64-linux.tar.xz.sig
649 @end example
650
651 If that command fails because you do not have the required public key,
652 then run this command to import it:
653
654 @example
655 $ wget '@value{OPENPGP-SIGNING-KEY-URL}' \
656 -qO - | gpg --import -
657 @end example
658
659 @noindent
660 and rerun the @code{gpg --verify} command.
661
662 Take note that a warning like ``This key is not certified with a trusted
663 signature!'' is normal.
664
665 @c end authentication part
666
667 @item
668 Now, you need to become the @code{root} user. Depending on your distribution,
669 you may have to run @code{su -} or @code{sudo -i}. As @code{root}, run:
670
671 @example
672 # cd /tmp
673 # tar --warning=no-timestamp -xf \
674 /path/to/guix-binary-@value{VERSION}.x86_64-linux.tar.xz
675 # mv var/guix /var/ && mv gnu /
676 @end example
677
678 This creates @file{/gnu/store} (@pxref{The Store}) and @file{/var/guix}.
679 The latter contains a ready-to-use profile for @code{root} (see next
680 step).
681
682 Do @emph{not} unpack the tarball on a working Guix system since that
683 would overwrite its own essential files.
684
685 The @option{--warning=no-timestamp} option makes sure GNU@tie{}tar does
686 not emit warnings about ``implausibly old time stamps'' (such
687 warnings were triggered by GNU@tie{}tar 1.26 and older; recent
688 versions are fine).
689 They stem from the fact that all the
690 files in the archive have their modification time set to 1 (which
691 means January 1st, 1970). This is done on purpose to make sure the
692 archive content is independent of its creation time, thus making it
693 reproducible.
694
695 @item
696 Make the profile available under @file{~root/.config/guix/current}, which is
697 where @command{guix pull} will install updates (@pxref{Invoking guix pull}):
698
699 @example
700 # mkdir -p ~root/.config/guix
701 # ln -sf /var/guix/profiles/per-user/root/current-guix \
702 ~root/.config/guix/current
703 @end example
704
705 Source @file{etc/profile} to augment @env{PATH} and other relevant
706 environment variables:
707
708 @example
709 # GUIX_PROFILE="`echo ~root`/.config/guix/current" ; \
710 source $GUIX_PROFILE/etc/profile
711 @end example
712
713 @item
714 Create the group and user accounts for build users as explained below
715 (@pxref{Build Environment Setup}).
716
717 @item
718 Run the daemon, and set it to automatically start on boot.
719
720 If your host distro uses the systemd init system, this can be achieved
721 with these commands:
722
723 @c Versions of systemd that supported symlinked service files are not
724 @c yet widely deployed, so we should suggest that users copy the service
725 @c files into place.
726 @c
727 @c See this thread for more information:
728 @c https://lists.gnu.org/archive/html/guix-devel/2017-01/msg01199.html
729
730 @example
731 # cp ~root/.config/guix/current/lib/systemd/system/gnu-store.mount \
732 ~root/.config/guix/current/lib/systemd/system/guix-daemon.service \
733 /etc/systemd/system/
734 # systemctl enable --now gnu-store.mount guix-daemon
735 @end example
736
737 If your host distro uses the Upstart init system:
738
739 @example
740 # initctl reload-configuration
741 # cp ~root/.config/guix/current/lib/upstart/system/guix-daemon.conf \
742 /etc/init/
743 # start guix-daemon
744 @end example
745
746 Otherwise, you can still start the daemon manually with:
747
748 @example
749 # ~root/.config/guix/current/bin/guix-daemon \
750 --build-users-group=guixbuild
751 @end example
752
753 @item
754 Make the @command{guix} command available to other users on the machine,
755 for instance with:
756
757 @example
758 # mkdir -p /usr/local/bin
759 # cd /usr/local/bin
760 # ln -s /var/guix/profiles/per-user/root/current-guix/bin/guix
761 @end example
762
763 It is also a good idea to make the Info version of this manual available
764 there:
765
766 @example
767 # mkdir -p /usr/local/share/info
768 # cd /usr/local/share/info
769 # for i in /var/guix/profiles/per-user/root/current-guix/share/info/* ;
770 do ln -s $i ; done
771 @end example
772
773 That way, assuming @file{/usr/local/share/info} is in the search path,
774 running @command{info guix} will open this manual (@pxref{Other Info
775 Directories,,, texinfo, GNU Texinfo}, for more details on changing the
776 Info search path).
777
778 @item
779 @cindex substitutes, authorization thereof
780 To use substitutes from @code{@value{SUBSTITUTE-SERVER}} or one of its mirrors
781 (@pxref{Substitutes}), authorize them:
782
783 @example
784 # guix archive --authorize < \
785 ~root/.config/guix/current/share/guix/@value{SUBSTITUTE-SERVER}.pub
786 @end example
787
788 @item
789 Each user may need to perform a few additional steps to make their Guix
790 environment ready for use, @pxref{Application Setup}.
791 @end enumerate
792
793 Voilà, the installation is complete!
794
795 You can confirm that Guix is working by installing a sample package into
796 the root profile:
797
798 @example
799 # guix install hello
800 @end example
801
802 The binary installation tarball can be (re)produced and verified simply
803 by running the following command in the Guix source tree:
804
805 @example
806 make guix-binary.@var{system}.tar.xz
807 @end example
808
809 @noindent
810 ...@: which, in turn, runs:
811
812 @example
813 guix pack -s @var{system} --localstatedir \
814 --profile-name=current-guix guix
815 @end example
816
817 @xref{Invoking guix pack}, for more info on this handy tool.
818
819 @node Requirements
820 @section Requirements
821
822 This section lists requirements when building Guix from source. The
823 build procedure for Guix is the same as for other GNU software, and is
824 not covered here. Please see the files @file{README} and @file{INSTALL}
825 in the Guix source tree for additional details.
826
827 @cindex official website
828 GNU Guix is available for download from its website at
829 @url{https://www.gnu.org/software/guix/}.
830
831 GNU Guix depends on the following packages:
832
833 @itemize
834 @item @url{https://gnu.org/software/guile/, GNU Guile}, version 3.0.x or
835 2.2.x;
836 @item @url{https://notabug.org/cwebber/guile-gcrypt, Guile-Gcrypt}, version
837 0.1.0 or later;
838 @item
839 @uref{https://gnutls.org/, GnuTLS}, specifically its Guile bindings
840 (@pxref{Guile Preparations, how to install the GnuTLS bindings for
841 Guile,, gnutls-guile, GnuTLS-Guile});
842 @item
843 @uref{https://notabug.org/guile-sqlite3/guile-sqlite3, Guile-SQLite3}, version 0.1.0
844 or later;
845 @item @uref{https://notabug.org/guile-zlib/guile-zlib, Guile-zlib},
846 version 0.1.0 or later;
847 @item @uref{https://notabug.org/guile-lzlib/guile-lzlib, Guile-lzlib};
848 @item @uref{https://www.nongnu.org/guile-avahi/, Guile-Avahi};
849 @item
850 @c FIXME: Specify a version number once a release has been made.
851 @uref{https://gitlab.com/guile-git/guile-git, Guile-Git}, version 0.3.0
852 or later;
853 @item @uref{https://savannah.nongnu.org/projects/guile-json/, Guile-JSON}
854 4.3.0 or later;
855 @item @url{https://www.gnu.org/software/make/, GNU Make}.
856 @end itemize
857
858 The following dependencies are optional:
859
860 @itemize
861 @item
862 @c Note: We need at least 0.13.0 for #:nodelay.
863 Support for build offloading (@pxref{Daemon Offload Setup}) and
864 @command{guix copy} (@pxref{Invoking guix copy}) depends on
865 @uref{https://github.com/artyom-poptsov/guile-ssh, Guile-SSH},
866 version 0.13.0 or later.
867
868 @item
869 @uref{https://notabug.org/guile-zstd/guile-zstd, Guile-zstd}, for zstd
870 compression and decompression in @command{guix publish} and for
871 substitutes (@pxref{Invoking guix publish}).
872
873 @item
874 @uref{https://ngyro.com/software/guile-semver.html, Guile-Semver} for
875 the @code{crate} importer (@pxref{Invoking guix import}).
876
877 @item
878 @uref{https://www.nongnu.org/guile-lib/doc/ref/htmlprag/, Guile-Lib} for
879 the @code{go} importer (@pxref{Invoking guix import}) and for some of
880 the ``updaters'' (@pxref{Invoking guix refresh}).
881
882 @item
883 When @url{http://www.bzip.org, libbz2} is available,
884 @command{guix-daemon} can use it to compress build logs.
885 @end itemize
886
887 Unless @option{--disable-daemon} was passed to @command{configure}, the
888 following packages are also needed:
889
890 @itemize
891 @item @url{https://gnupg.org/, GNU libgcrypt};
892 @item @url{https://sqlite.org, SQLite 3};
893 @item @url{https://gcc.gnu.org, GCC's g++}, with support for the
894 C++11 standard.
895 @end itemize
896
897 @cindex state directory
898 When configuring Guix on a system that already has a Guix installation,
899 be sure to specify the same state directory as the existing installation
900 using the @option{--localstatedir} option of the @command{configure}
901 script (@pxref{Directory Variables, @code{localstatedir},, standards,
902 GNU Coding Standards}). Usually, this @var{localstatedir} option is
903 set to the value @file{/var}. The @command{configure} script protects
904 against unintended misconfiguration of @var{localstatedir} so you do not
905 inadvertently corrupt your store (@pxref{The Store}).
906
907 @node Running the Test Suite
908 @section Running the Test Suite
909
910 @cindex test suite
911 After a successful @command{configure} and @code{make} run, it is a good
912 idea to run the test suite. It can help catch issues with the setup or
913 environment, or bugs in Guix itself---and really, reporting test
914 failures is a good way to help improve the software. To run the test
915 suite, type:
916
917 @example
918 make check
919 @end example
920
921 Test cases can run in parallel: you can use the @code{-j} option of
922 GNU@tie{}make to speed things up. The first run may take a few minutes
923 on a recent machine; subsequent runs will be faster because the store
924 that is created for test purposes will already have various things in
925 cache.
926
927 It is also possible to run a subset of the tests by defining the
928 @code{TESTS} makefile variable as in this example:
929
930 @example
931 make check TESTS="tests/store.scm tests/cpio.scm"
932 @end example
933
934 By default, tests results are displayed at a file level. In order to
935 see the details of every individual test cases, it is possible to define
936 the @code{SCM_LOG_DRIVER_FLAGS} makefile variable as in this example:
937
938 @example
939 make check TESTS="tests/base64.scm" SCM_LOG_DRIVER_FLAGS="--brief=no"
940 @end example
941
942 The underlying SRFI 64 custom Automake test driver used for the 'check'
943 test suite (located at @file{build-aux/test-driver.scm}) also allows
944 selecting which test cases to run at a finer level, via its
945 @option{--select} and @option{--exclude} options. Here's an example, to
946 run all the test cases from the @file{tests/packages.scm} test file
947 whose names start with ``transaction-upgrade-entry'':
948
949 @example
950 export SCM_LOG_DRIVER_FLAGS="--select=^transaction-upgrade-entry"
951 make check TESTS="tests/packages.scm"
952 @end example
953
954 Those wishing to inspect the results of failed tests directly from the
955 command line can add the @option{--errors-only=yes} option to the
956 @code{SCM_LOG_DRIVER_FLAGS} makefile variable and set the @code{VERBOSE}
957 Automake makefile variable, as in:
958
959 @example
960 make check SCM_LOG_DRIVER_FLAGS="--brief=no --errors-only=yes" VERBOSE=1
961 @end example
962
963 The @option{--show-duration=yes} option can be used to print the
964 duration of the individual test cases, when used in combination with
965 @option{--brief=no}:
966
967 @example
968 make check SCM_LOG_DRIVER_FLAGS="--brief=no --show-duration=yes"
969 @end example
970
971 @xref{Parallel Test Harness,,,automake,GNU Automake} for more
972 information about the Automake Parallel Test Harness.
973
974 Upon failure, please email @email{bug-guix@@gnu.org} and attach the
975 @file{test-suite.log} file. Please specify the Guix version being used
976 as well as version numbers of the dependencies (@pxref{Requirements}) in
977 your message.
978
979 Guix also comes with a whole-system test suite that tests complete
980 Guix System instances. It can only run on systems where
981 Guix is already installed, using:
982
983 @example
984 make check-system
985 @end example
986
987 @noindent
988 or, again, by defining @code{TESTS} to select a subset of tests to run:
989
990 @example
991 make check-system TESTS="basic mcron"
992 @end example
993
994 These system tests are defined in the @code{(gnu tests @dots{})}
995 modules. They work by running the operating systems under test with
996 lightweight instrumentation in a virtual machine (VM). They can be
997 computationally intensive or rather cheap, depending on whether
998 substitutes are available for their dependencies (@pxref{Substitutes}).
999 Some of them require a lot of storage space to hold VM images.
1000
1001 Again in case of test failures, please send @email{bug-guix@@gnu.org}
1002 all the details.
1003
1004 @node Setting Up the Daemon
1005 @section Setting Up the Daemon
1006
1007 @cindex daemon
1008 Operations such as building a package or running the garbage collector
1009 are all performed by a specialized process, the @dfn{build daemon}, on
1010 behalf of clients. Only the daemon may access the store and its
1011 associated database. Thus, any operation that manipulates the store
1012 goes through the daemon. For instance, command-line tools such as
1013 @command{guix package} and @command{guix build} communicate with the
1014 daemon (@i{via} remote procedure calls) to instruct it what to do.
1015
1016 The following sections explain how to prepare the build daemon's
1017 environment. See also @ref{Substitutes}, for information on how to allow
1018 the daemon to download pre-built binaries.
1019
1020 @menu
1021 * Build Environment Setup:: Preparing the isolated build environment.
1022 * Daemon Offload Setup:: Offloading builds to remote machines.
1023 * SELinux Support:: Using an SELinux policy for the daemon.
1024 @end menu
1025
1026 @node Build Environment Setup
1027 @subsection Build Environment Setup
1028
1029 @cindex build environment
1030 In a standard multi-user setup, Guix and its daemon---the
1031 @command{guix-daemon} program---are installed by the system
1032 administrator; @file{/gnu/store} is owned by @code{root} and
1033 @command{guix-daemon} runs as @code{root}. Unprivileged users may use
1034 Guix tools to build packages or otherwise access the store, and the
1035 daemon will do it on their behalf, ensuring that the store is kept in a
1036 consistent state, and allowing built packages to be shared among users.
1037
1038 @cindex build users
1039 When @command{guix-daemon} runs as @code{root}, you may not want package
1040 build processes themselves to run as @code{root} too, for obvious
1041 security reasons. To avoid that, a special pool of @dfn{build users}
1042 should be created for use by build processes started by the daemon.
1043 These build users need not have a shell and a home directory: they will
1044 just be used when the daemon drops @code{root} privileges in build
1045 processes. Having several such users allows the daemon to launch
1046 distinct build processes under separate UIDs, which guarantees that they
1047 do not interfere with each other---an essential feature since builds are
1048 regarded as pure functions (@pxref{Introduction}).
1049
1050 On a GNU/Linux system, a build user pool may be created like this (using
1051 Bash syntax and the @code{shadow} commands):
1052
1053 @c See https://lists.gnu.org/archive/html/bug-guix/2013-01/msg00239.html
1054 @c for why `-G' is needed.
1055 @example
1056 # groupadd --system guixbuild
1057 # for i in $(seq -w 1 10);
1058 do
1059 useradd -g guixbuild -G guixbuild \
1060 -d /var/empty -s $(which nologin) \
1061 -c "Guix build user $i" --system \
1062 guixbuilder$i;
1063 done
1064 @end example
1065
1066 @noindent
1067 The number of build users determines how many build jobs may run in
1068 parallel, as specified by the @option{--max-jobs} option
1069 (@pxref{Invoking guix-daemon, @option{--max-jobs}}). To use
1070 @command{guix system vm} and related commands, you may need to add the
1071 build users to the @code{kvm} group so they can access @file{/dev/kvm},
1072 using @code{-G guixbuild,kvm} instead of @code{-G guixbuild}
1073 (@pxref{Invoking guix system}).
1074
1075 The @code{guix-daemon} program may then be run as @code{root} with the
1076 following command@footnote{If your machine uses the systemd init system,
1077 dropping the @file{@var{prefix}/lib/systemd/system/guix-daemon.service}
1078 file in @file{/etc/systemd/system} will ensure that
1079 @command{guix-daemon} is automatically started. Similarly, if your
1080 machine uses the Upstart init system, drop the
1081 @file{@var{prefix}/lib/upstart/system/guix-daemon.conf}
1082 file in @file{/etc/init}.}:
1083
1084 @example
1085 # guix-daemon --build-users-group=guixbuild
1086 @end example
1087
1088 @cindex chroot
1089 @noindent
1090 This way, the daemon starts build processes in a chroot, under one of
1091 the @code{guixbuilder} users. On GNU/Linux, by default, the chroot
1092 environment contains nothing but:
1093
1094 @c Keep this list in sync with libstore/build.cc! -----------------------
1095 @itemize
1096 @item
1097 a minimal @code{/dev} directory, created mostly independently from the
1098 host @code{/dev}@footnote{``Mostly'', because while the set of files
1099 that appear in the chroot's @code{/dev} is fixed, most of these files
1100 can only be created if the host has them.};
1101
1102 @item
1103 the @code{/proc} directory; it only shows the processes of the container
1104 since a separate PID name space is used;
1105
1106 @item
1107 @file{/etc/passwd} with an entry for the current user and an entry for
1108 user @file{nobody};
1109
1110 @item
1111 @file{/etc/group} with an entry for the user's group;
1112
1113 @item
1114 @file{/etc/hosts} with an entry that maps @code{localhost} to
1115 @code{127.0.0.1};
1116
1117 @item
1118 a writable @file{/tmp} directory.
1119 @end itemize
1120
1121 You can influence the directory where the daemon stores build trees
1122 @i{via} the @env{TMPDIR} environment variable. However, the build tree
1123 within the chroot is always called @file{/tmp/guix-build-@var{name}.drv-0},
1124 where @var{name} is the derivation name---e.g., @code{coreutils-8.24}.
1125 This way, the value of @env{TMPDIR} does not leak inside build
1126 environments, which avoids discrepancies in cases where build processes
1127 capture the name of their build tree.
1128
1129 @vindex http_proxy
1130 @vindex https_proxy
1131 The daemon also honors the @env{http_proxy} and @env{https_proxy}
1132 environment variables for HTTP and HTTPS downloads it performs, be it
1133 for fixed-output derivations (@pxref{Derivations}) or for substitutes
1134 (@pxref{Substitutes}).
1135
1136 If you are installing Guix as an unprivileged user, it is still possible
1137 to run @command{guix-daemon} provided you pass @option{--disable-chroot}.
1138 However, build processes will not be isolated from one another, and not
1139 from the rest of the system. Thus, build processes may interfere with
1140 each other, and may access programs, libraries, and other files
1141 available on the system---making it much harder to view them as
1142 @emph{pure} functions.
1143
1144
1145 @node Daemon Offload Setup
1146 @subsection Using the Offload Facility
1147
1148 @cindex offloading
1149 @cindex build hook
1150 When desired, the build daemon can @dfn{offload} derivation builds to
1151 other machines running Guix, using the @code{offload} @dfn{build
1152 hook}@footnote{This feature is available only when
1153 @uref{https://github.com/artyom-poptsov/guile-ssh, Guile-SSH} is
1154 present.}. When that feature is enabled, a list of user-specified build
1155 machines is read from @file{/etc/guix/machines.scm}; every time a build
1156 is requested, for instance via @code{guix build}, the daemon attempts to
1157 offload it to one of the machines that satisfy the constraints of the
1158 derivation, in particular its system types---e.g., @code{x86_64-linux}.
1159 A single machine can have multiple system types, either because its
1160 architecture natively supports it, via emulation
1161 (@pxref{transparent-emulation-qemu, Transparent Emulation with QEMU}),
1162 or both. Missing prerequisites for the build are
1163 copied over SSH to the target machine, which then proceeds with the
1164 build; upon success the output(s) of the build are copied back to the
1165 initial machine. The offload facility comes with a basic scheduler that
1166 attempts to select the best machine. The best machine is chosen among
1167 the available machines based on criteria such as:
1168
1169 @enumerate
1170 @item
1171 The availability of a build slot. A build machine can have as many
1172 build slots (connections) as the value of the @code{parallel-builds}
1173 field of its @code{build-machine} object.
1174
1175 @item
1176 Its relative speed, as defined via the @code{speed} field of its
1177 @code{build-machine} object.
1178
1179 @item
1180 Its load. The normalized machine load must be lower than a threshold
1181 value, configurable via the @code{overload-threshold} field of its
1182 @code{build-machine} object.
1183
1184 @item
1185 Disk space availability. More than a 100 MiB must be available.
1186 @end enumerate
1187
1188 The @file{/etc/guix/machines.scm} file typically looks like this:
1189
1190 @lisp
1191 (list (build-machine
1192 (name "eightysix.example.org")
1193 (systems (list "x86_64-linux" "i686-linux"))
1194 (host-key "ssh-ed25519 AAAAC3Nza@dots{}")
1195 (user "bob")
1196 (speed 2.)) ;incredibly fast!
1197
1198 (build-machine
1199 (name "armeight.example.org")
1200 (systems (list "aarch64-linux"))
1201 (host-key "ssh-rsa AAAAB3Nza@dots{}")
1202 (user "alice")
1203 (private-key
1204 (string-append (getenv "HOME")
1205 "/.ssh/identity-for-guix"))))
1206 @end lisp
1207
1208 @noindent
1209 In the example above we specify a list of two build machines, one for
1210 the @code{x86_64} and @code{i686} architectures and one for the
1211 @code{aarch64} architecture.
1212
1213 In fact, this file is---not surprisingly!---a Scheme file that is
1214 evaluated when the @code{offload} hook is started. Its return value
1215 must be a list of @code{build-machine} objects. While this example
1216 shows a fixed list of build machines, one could imagine, say, using
1217 DNS-SD to return a list of potential build machines discovered in the
1218 local network (@pxref{Introduction, Guile-Avahi,, guile-avahi, Using
1219 Avahi in Guile Scheme Programs}). The @code{build-machine} data type is
1220 detailed below.
1221
1222 @deftp {Data Type} build-machine
1223 This data type represents build machines to which the daemon may offload
1224 builds. The important fields are:
1225
1226 @table @code
1227
1228 @item name
1229 The host name of the remote machine.
1230
1231 @item systems
1232 The system types the remote machine supports---e.g., @code{(list
1233 "x86_64-linux" "i686-linux")}.
1234
1235 @item user
1236 The user account to use when connecting to the remote machine over SSH.
1237 Note that the SSH key pair must @emph{not} be passphrase-protected, to
1238 allow non-interactive logins.
1239
1240 @item host-key
1241 This must be the machine's SSH @dfn{public host key} in OpenSSH format.
1242 This is used to authenticate the machine when we connect to it. It is a
1243 long string that looks like this:
1244
1245 @example
1246 ssh-ed25519 AAAAC3NzaC@dots{}mde+UhL hint@@example.org
1247 @end example
1248
1249 If the machine is running the OpenSSH daemon, @command{sshd}, the host
1250 key can be found in a file such as
1251 @file{/etc/ssh/ssh_host_ed25519_key.pub}.
1252
1253 If the machine is running the SSH daemon of GNU@tie{}lsh,
1254 @command{lshd}, the host key is in @file{/etc/lsh/host-key.pub} or a
1255 similar file. It can be converted to the OpenSSH format using
1256 @command{lsh-export-key} (@pxref{Converting keys,,, lsh, LSH Manual}):
1257
1258 @example
1259 $ lsh-export-key --openssh < /etc/lsh/host-key.pub
1260 ssh-rsa AAAAB3NzaC1yc2EAAAAEOp8FoQAAAQEAs1eB46LV@dots{}
1261 @end example
1262
1263 @end table
1264
1265 A number of optional fields may be specified:
1266
1267 @table @asis
1268
1269 @item @code{port} (default: @code{22})
1270 Port number of SSH server on the machine.
1271
1272 @item @code{private-key} (default: @file{~root/.ssh/id_rsa})
1273 The SSH private key file to use when connecting to the machine, in
1274 OpenSSH format. This key must not be protected with a passphrase.
1275
1276 Note that the default value is the private key @emph{of the root
1277 account}. Make sure it exists if you use the default.
1278
1279 @item @code{compression} (default: @code{"zlib@@openssh.com,zlib"})
1280 @itemx @code{compression-level} (default: @code{3})
1281 The SSH-level compression methods and compression level requested.
1282
1283 Note that offloading relies on SSH compression to reduce bandwidth usage
1284 when transferring files to and from build machines.
1285
1286 @item @code{daemon-socket} (default: @code{"/var/guix/daemon-socket/socket"})
1287 File name of the Unix-domain socket @command{guix-daemon} is listening
1288 to on that machine.
1289
1290 @item @code{overload-threshold} (default: @code{0.6})
1291 The load threshold above which a potential offload machine is
1292 disregarded by the offload scheduler. The value roughly translates to
1293 the total processor usage of the build machine, ranging from 0.0 (0%) to
1294 1.0 (100%). It can also be disabled by setting
1295 @code{overload-threshold} to @code{#f}.
1296
1297 @item @code{parallel-builds} (default: @code{1})
1298 The number of builds that may run in parallel on the machine.
1299
1300 @item @code{speed} (default: @code{1.0})
1301 A ``relative speed factor''. The offload scheduler will tend to prefer
1302 machines with a higher speed factor.
1303
1304 @item @code{features} (default: @code{'()})
1305 A list of strings denoting specific features supported by the machine.
1306 An example is @code{"kvm"} for machines that have the KVM Linux modules
1307 and corresponding hardware support. Derivations can request features by
1308 name, and they will be scheduled on matching build machines.
1309
1310 @end table
1311 @end deftp
1312
1313 The @command{guix} command must be in the search path on the build
1314 machines. You can check whether this is the case by running:
1315
1316 @example
1317 ssh build-machine guix repl --version
1318 @end example
1319
1320 There is one last thing to do once @file{machines.scm} is in place. As
1321 explained above, when offloading, files are transferred back and forth
1322 between the machine stores. For this to work, you first need to
1323 generate a key pair on each machine to allow the daemon to export signed
1324 archives of files from the store (@pxref{Invoking guix archive}):
1325
1326 @example
1327 # guix archive --generate-key
1328 @end example
1329
1330 @noindent
1331 Each build machine must authorize the key of the master machine so that
1332 it accepts store items it receives from the master:
1333
1334 @example
1335 # guix archive --authorize < master-public-key.txt
1336 @end example
1337
1338 @noindent
1339 Likewise, the master machine must authorize the key of each build machine.
1340
1341 All the fuss with keys is here to express pairwise mutual trust
1342 relations between the master and the build machines. Concretely, when
1343 the master receives files from a build machine (and @i{vice versa}), its
1344 build daemon can make sure they are genuine, have not been tampered
1345 with, and that they are signed by an authorized key.
1346
1347 @cindex offload test
1348 To test whether your setup is operational, run this command on the
1349 master node:
1350
1351 @example
1352 # guix offload test
1353 @end example
1354
1355 This will attempt to connect to each of the build machines specified in
1356 @file{/etc/guix/machines.scm}, make sure Guix is
1357 available on each machine, attempt to export to the machine and import
1358 from it, and report any error in the process.
1359
1360 If you want to test a different machine file, just specify it on the
1361 command line:
1362
1363 @example
1364 # guix offload test machines-qualif.scm
1365 @end example
1366
1367 Last, you can test the subset of the machines whose name matches a
1368 regular expression like this:
1369
1370 @example
1371 # guix offload test machines.scm '\.gnu\.org$'
1372 @end example
1373
1374 @cindex offload status
1375 To display the current load of all build hosts, run this command on the
1376 main node:
1377
1378 @example
1379 # guix offload status
1380 @end example
1381
1382
1383 @node SELinux Support
1384 @subsection SELinux Support
1385
1386 @cindex SELinux, daemon policy
1387 @cindex mandatory access control, SELinux
1388 @cindex security, guix-daemon
1389 Guix includes an SELinux policy file at @file{etc/guix-daemon.cil} that
1390 can be installed on a system where SELinux is enabled, in order to label
1391 Guix files and to specify the expected behavior of the daemon. Since
1392 Guix System does not provide an SELinux base policy, the daemon policy cannot
1393 be used on Guix System.
1394
1395 @subsubsection Installing the SELinux policy
1396 @cindex SELinux, policy installation
1397 To install the policy run this command as root:
1398
1399 @example
1400 semodule -i etc/guix-daemon.cil
1401 @end example
1402
1403 Then relabel the file system with @code{restorecon} or by a different
1404 mechanism provided by your system.
1405
1406 Once the policy is installed, the file system has been relabeled, and
1407 the daemon has been restarted, it should be running in the
1408 @code{guix_daemon_t} context. You can confirm this with the following
1409 command:
1410
1411 @example
1412 ps -Zax | grep guix-daemon
1413 @end example
1414
1415 Monitor the SELinux log files as you run a command like @code{guix build
1416 hello} to convince yourself that SELinux permits all necessary
1417 operations.
1418
1419 @subsubsection Limitations
1420 @cindex SELinux, limitations
1421
1422 This policy is not perfect. Here is a list of limitations or quirks
1423 that should be considered when deploying the provided SELinux policy for
1424 the Guix daemon.
1425
1426 @enumerate
1427 @item
1428 @code{guix_daemon_socket_t} isn’t actually used. None of the socket
1429 operations involve contexts that have anything to do with
1430 @code{guix_daemon_socket_t}. It doesn’t hurt to have this unused label,
1431 but it would be preferable to define socket rules for only this label.
1432
1433 @item
1434 @code{guix gc} cannot access arbitrary links to profiles. By design,
1435 the file label of the destination of a symlink is independent of the
1436 file label of the link itself. Although all profiles under
1437 $localstatedir are labelled, the links to these profiles inherit the
1438 label of the directory they are in. For links in the user’s home
1439 directory this will be @code{user_home_t}. But for links from the root
1440 user’s home directory, or @file{/tmp}, or the HTTP server’s working
1441 directory, etc, this won’t work. @code{guix gc} would be prevented from
1442 reading and following these links.
1443
1444 @item
1445 The daemon’s feature to listen for TCP connections might no longer work.
1446 This might require extra rules, because SELinux treats network sockets
1447 differently from files.
1448
1449 @item
1450 Currently all files with a name matching the regular expression
1451 @code{/gnu/store/.+-(guix-.+|profile)/bin/guix-daemon} are assigned the
1452 label @code{guix_daemon_exec_t}; this means that @emph{any} file with
1453 that name in any profile would be permitted to run in the
1454 @code{guix_daemon_t} domain. This is not ideal. An attacker could
1455 build a package that provides this executable and convince a user to
1456 install and run it, which lifts it into the @code{guix_daemon_t} domain.
1457 At that point SELinux could not prevent it from accessing files that are
1458 allowed for processes in that domain.
1459
1460 You will need to relabel the store directory after all upgrades to
1461 @file{guix-daemon}, such as after running @code{guix pull}. Assuming the
1462 store is in @file{/gnu}, you can do this with @code{restorecon -vR /gnu},
1463 or by other means provided by your operating system.
1464
1465 We could generate a much more restrictive policy at installation time,
1466 so that only the @emph{exact} file name of the currently installed
1467 @code{guix-daemon} executable would be labelled with
1468 @code{guix_daemon_exec_t}, instead of using a broad regular expression.
1469 The downside is that root would have to install or upgrade the policy at
1470 installation time whenever the Guix package that provides the
1471 effectively running @code{guix-daemon} executable is upgraded.
1472 @end enumerate
1473
1474 @node Invoking guix-daemon
1475 @section Invoking @command{guix-daemon}
1476
1477 The @command{guix-daemon} program implements all the functionality to
1478 access the store. This includes launching build processes, running the
1479 garbage collector, querying the availability of a build result, etc. It
1480 is normally run as @code{root} like this:
1481
1482 @example
1483 # guix-daemon --build-users-group=guixbuild
1484 @end example
1485
1486 @noindent
1487 For details on how to set it up, @pxref{Setting Up the Daemon}.
1488
1489 @cindex chroot
1490 @cindex container, build environment
1491 @cindex build environment
1492 @cindex reproducible builds
1493 By default, @command{guix-daemon} launches build processes under
1494 different UIDs, taken from the build group specified with
1495 @option{--build-users-group}. In addition, each build process is run in a
1496 chroot environment that only contains the subset of the store that the
1497 build process depends on, as specified by its derivation
1498 (@pxref{Programming Interface, derivation}), plus a set of specific
1499 system directories. By default, the latter contains @file{/dev} and
1500 @file{/dev/pts}. Furthermore, on GNU/Linux, the build environment is a
1501 @dfn{container}: in addition to having its own file system tree, it has
1502 a separate mount name space, its own PID name space, network name space,
1503 etc. This helps achieve reproducible builds (@pxref{Features}).
1504
1505 When the daemon performs a build on behalf of the user, it creates a
1506 build directory under @file{/tmp} or under the directory specified by
1507 its @env{TMPDIR} environment variable. This directory is shared with
1508 the container for the duration of the build, though within the container,
1509 the build tree is always called @file{/tmp/guix-build-@var{name}.drv-0}.
1510
1511 The build directory is automatically deleted upon completion, unless the
1512 build failed and the client specified @option{--keep-failed}
1513 (@pxref{Common Build Options, @option{--keep-failed}}).
1514
1515 The daemon listens for connections and spawns one sub-process for each session
1516 started by a client (one of the @command{guix} sub-commands). The
1517 @command{guix processes} command allows you to get an overview of the activity
1518 on your system by viewing each of the active sessions and clients.
1519 @xref{Invoking guix processes}, for more information.
1520
1521 The following command-line options are supported:
1522
1523 @table @code
1524 @item --build-users-group=@var{group}
1525 Take users from @var{group} to run build processes (@pxref{Setting Up
1526 the Daemon, build users}).
1527
1528 @item --no-substitutes
1529 @cindex substitutes
1530 Do not use substitutes for build products. That is, always build things
1531 locally instead of allowing downloads of pre-built binaries
1532 (@pxref{Substitutes}).
1533
1534 When the daemon runs with @option{--no-substitutes}, clients can still
1535 explicitly enable substitution @i{via} the @code{set-build-options}
1536 remote procedure call (@pxref{The Store}).
1537
1538 @anchor{daemon-substitute-urls}
1539 @item --substitute-urls=@var{urls}
1540 Consider @var{urls} the default whitespace-separated list of substitute
1541 source URLs. When this option is omitted,
1542 @indicateurl{https://@value{SUBSTITUTE-SERVER}} is used.
1543
1544 This means that substitutes may be downloaded from @var{urls}, as long
1545 as they are signed by a trusted signature (@pxref{Substitutes}).
1546
1547 @xref{Getting Substitutes from Other Servers}, for more information on
1548 how to configure the daemon to get substitutes from other servers.
1549
1550 @cindex offloading
1551 @item --no-offload
1552 Do not use offload builds to other machines (@pxref{Daemon Offload
1553 Setup}). That is, always build things locally instead of offloading
1554 builds to remote machines.
1555
1556 @item --cache-failures
1557 Cache build failures. By default, only successful builds are cached.
1558
1559 When this option is used, @command{guix gc --list-failures} can be used
1560 to query the set of store items marked as failed; @command{guix gc
1561 --clear-failures} removes store items from the set of cached failures.
1562 @xref{Invoking guix gc}.
1563
1564 @item --cores=@var{n}
1565 @itemx -c @var{n}
1566 Use @var{n} CPU cores to build each derivation; @code{0} means as many
1567 as available.
1568
1569 The default value is @code{0}, but it may be overridden by clients, such
1570 as the @option{--cores} option of @command{guix build} (@pxref{Invoking
1571 guix build}).
1572
1573 The effect is to define the @env{NIX_BUILD_CORES} environment variable
1574 in the build process, which can then use it to exploit internal
1575 parallelism---for instance, by running @code{make -j$NIX_BUILD_CORES}.
1576
1577 @item --max-jobs=@var{n}
1578 @itemx -M @var{n}
1579 Allow at most @var{n} build jobs in parallel. The default value is
1580 @code{1}. Setting it to @code{0} means that no builds will be performed
1581 locally; instead, the daemon will offload builds (@pxref{Daemon Offload
1582 Setup}), or simply fail.
1583
1584 @item --max-silent-time=@var{seconds}
1585 When the build or substitution process remains silent for more than
1586 @var{seconds}, terminate it and report a build failure.
1587
1588 The default value is @code{0}, which disables the timeout.
1589
1590 The value specified here can be overridden by clients (@pxref{Common
1591 Build Options, @option{--max-silent-time}}).
1592
1593 @item --timeout=@var{seconds}
1594 Likewise, when the build or substitution process lasts for more than
1595 @var{seconds}, terminate it and report a build failure.
1596
1597 The default value is @code{0}, which disables the timeout.
1598
1599 The value specified here can be overridden by clients (@pxref{Common
1600 Build Options, @option{--timeout}}).
1601
1602 @item --rounds=@var{N}
1603 Build each derivation @var{n} times in a row, and raise an error if
1604 consecutive build results are not bit-for-bit identical. Note that this
1605 setting can be overridden by clients such as @command{guix build}
1606 (@pxref{Invoking guix build}).
1607
1608 When used in conjunction with @option{--keep-failed}, the differing
1609 output is kept in the store, under @file{/gnu/store/@dots{}-check}.
1610 This makes it easy to look for differences between the two results.
1611
1612 @item --debug
1613 Produce debugging output.
1614
1615 This is useful to debug daemon start-up issues, but then it may be
1616 overridden by clients, for example the @option{--verbosity} option of
1617 @command{guix build} (@pxref{Invoking guix build}).
1618
1619 @item --chroot-directory=@var{dir}
1620 Add @var{dir} to the build chroot.
1621
1622 Doing this may change the result of build processes---for instance if
1623 they use optional dependencies found in @var{dir} when it is available,
1624 and not otherwise. For that reason, it is not recommended to do so.
1625 Instead, make sure that each derivation declares all the inputs that it
1626 needs.
1627
1628 @item --disable-chroot
1629 Disable chroot builds.
1630
1631 Using this option is not recommended since, again, it would allow build
1632 processes to gain access to undeclared dependencies. It is necessary,
1633 though, when @command{guix-daemon} is running under an unprivileged user
1634 account.
1635
1636 @item --log-compression=@var{type}
1637 Compress build logs according to @var{type}, one of @code{gzip},
1638 @code{bzip2}, or @code{none}.
1639
1640 Unless @option{--lose-logs} is used, all the build logs are kept in the
1641 @var{localstatedir}. To save space, the daemon automatically compresses
1642 them with Bzip2 by default.
1643
1644 @item --discover[=yes|no]
1645 Whether to discover substitute servers on the local network using mDNS
1646 and DNS-SD.
1647
1648 This feature is still experimental. However, here are a few
1649 considerations.
1650
1651 @enumerate
1652 @item
1653 It might be faster/less expensive than fetching from remote servers;
1654 @item
1655 There are no security risks, only genuine substitutes will be used
1656 (@pxref{Substitute Authentication});
1657 @item
1658 An attacker advertising @command{guix publish} on your LAN cannot serve
1659 you malicious binaries, but they can learn what software you’re
1660 installing;
1661 @item
1662 Servers may serve substitute over HTTP, unencrypted, so anyone on the
1663 LAN can see what software you’re installing.
1664 @end enumerate
1665
1666 It is also possible to enable or disable substitute server discovery at
1667 run-time by running:
1668
1669 @example
1670 herd discover guix-daemon on
1671 herd discover guix-daemon off
1672 @end example
1673
1674 @item --disable-deduplication
1675 @cindex deduplication
1676 Disable automatic file ``deduplication'' in the store.
1677
1678 By default, files added to the store are automatically ``deduplicated'':
1679 if a newly added file is identical to another one found in the store,
1680 the daemon makes the new file a hard link to the other file. This can
1681 noticeably reduce disk usage, at the expense of slightly increased
1682 input/output load at the end of a build process. This option disables
1683 this optimization.
1684
1685 @item --gc-keep-outputs[=yes|no]
1686 Tell whether the garbage collector (GC) must keep outputs of live
1687 derivations.
1688
1689 @cindex GC roots
1690 @cindex garbage collector roots
1691 When set to @code{yes}, the GC will keep the outputs of any live
1692 derivation available in the store---the @file{.drv} files. The default
1693 is @code{no}, meaning that derivation outputs are kept only if they are
1694 reachable from a GC root. @xref{Invoking guix gc}, for more on GC
1695 roots.
1696
1697 @item --gc-keep-derivations[=yes|no]
1698 Tell whether the garbage collector (GC) must keep derivations
1699 corresponding to live outputs.
1700
1701 When set to @code{yes}, as is the case by default, the GC keeps
1702 derivations---i.e., @file{.drv} files---as long as at least one of their
1703 outputs is live. This allows users to keep track of the origins of
1704 items in their store. Setting it to @code{no} saves a bit of disk
1705 space.
1706
1707 In this way, setting @option{--gc-keep-derivations} to @code{yes} causes
1708 liveness to flow from outputs to derivations, and setting
1709 @option{--gc-keep-outputs} to @code{yes} causes liveness to flow from
1710 derivations to outputs. When both are set to @code{yes}, the effect is
1711 to keep all the build prerequisites (the sources, compiler, libraries,
1712 and other build-time tools) of live objects in the store, regardless of
1713 whether these prerequisites are reachable from a GC root. This is
1714 convenient for developers since it saves rebuilds or downloads.
1715
1716 @item --impersonate-linux-2.6
1717 On Linux-based systems, impersonate Linux 2.6. This means that the
1718 kernel's @command{uname} system call will report 2.6 as the release number.
1719
1720 This might be helpful to build programs that (usually wrongfully) depend
1721 on the kernel version number.
1722
1723 @item --lose-logs
1724 Do not keep build logs. By default they are kept under
1725 @file{@var{localstatedir}/guix/log}.
1726
1727 @item --system=@var{system}
1728 Assume @var{system} as the current system type. By default it is the
1729 architecture/kernel pair found at configure time, such as
1730 @code{x86_64-linux}.
1731
1732 @item --listen=@var{endpoint}
1733 Listen for connections on @var{endpoint}. @var{endpoint} is interpreted
1734 as the file name of a Unix-domain socket if it starts with
1735 @code{/} (slash sign). Otherwise, @var{endpoint} is interpreted as a
1736 host name or host name and port to listen to. Here are a few examples:
1737
1738 @table @code
1739 @item --listen=/gnu/var/daemon
1740 Listen for connections on the @file{/gnu/var/daemon} Unix-domain socket,
1741 creating it if needed.
1742
1743 @item --listen=localhost
1744 @cindex daemon, remote access
1745 @cindex remote access to the daemon
1746 @cindex daemon, cluster setup
1747 @cindex clusters, daemon setup
1748 Listen for TCP connections on the network interface corresponding to
1749 @code{localhost}, on port 44146.
1750
1751 @item --listen=128.0.0.42:1234
1752 Listen for TCP connections on the network interface corresponding to
1753 @code{128.0.0.42}, on port 1234.
1754 @end table
1755
1756 This option can be repeated multiple times, in which case
1757 @command{guix-daemon} accepts connections on all the specified
1758 endpoints. Users can tell client commands what endpoint to connect to
1759 by setting the @env{GUIX_DAEMON_SOCKET} environment variable
1760 (@pxref{The Store, @env{GUIX_DAEMON_SOCKET}}).
1761
1762 @quotation Note
1763 The daemon protocol is @emph{unauthenticated and unencrypted}. Using
1764 @option{--listen=@var{host}} is suitable on local networks, such as
1765 clusters, where only trusted nodes may connect to the build daemon. In
1766 other cases where remote access to the daemon is needed, we recommend
1767 using Unix-domain sockets along with SSH.
1768 @end quotation
1769
1770 When @option{--listen} is omitted, @command{guix-daemon} listens for
1771 connections on the Unix-domain socket located at
1772 @file{@var{localstatedir}/guix/daemon-socket/socket}.
1773 @end table
1774
1775
1776 @node Application Setup
1777 @section Application Setup
1778
1779 @cindex foreign distro
1780 When using Guix on top of GNU/Linux distribution other than Guix System---a
1781 so-called @dfn{foreign distro}---a few additional steps are needed to
1782 get everything in place. Here are some of them.
1783
1784 @subsection Locales
1785
1786 @anchor{locales-and-locpath}
1787 @cindex locales, when not on Guix System
1788 @vindex LOCPATH
1789 @vindex GUIX_LOCPATH
1790 Packages installed @i{via} Guix will not use the locale data of the
1791 host system. Instead, you must first install one of the locale packages
1792 available with Guix and then define the @env{GUIX_LOCPATH} environment
1793 variable:
1794
1795 @example
1796 $ guix install glibc-locales
1797 $ export GUIX_LOCPATH=$HOME/.guix-profile/lib/locale
1798 @end example
1799
1800 Note that the @code{glibc-locales} package contains data for all the
1801 locales supported by the GNU@tie{}libc and weighs in at around
1802 917@tie{}MiB@. Alternatively, the @code{glibc-utf8-locales} is smaller but
1803 limited to a few UTF-8 locales.
1804
1805 The @env{GUIX_LOCPATH} variable plays a role similar to @env{LOCPATH}
1806 (@pxref{Locale Names, @env{LOCPATH},, libc, The GNU C Library Reference
1807 Manual}). There are two important differences though:
1808
1809 @enumerate
1810 @item
1811 @env{GUIX_LOCPATH} is honored only by the libc in Guix, and not by the libc
1812 provided by foreign distros. Thus, using @env{GUIX_LOCPATH} allows you
1813 to make sure the programs of the foreign distro will not end up loading
1814 incompatible locale data.
1815
1816 @item
1817 libc suffixes each entry of @env{GUIX_LOCPATH} with @code{/X.Y}, where
1818 @code{X.Y} is the libc version---e.g., @code{2.22}. This means that,
1819 should your Guix profile contain a mixture of programs linked against
1820 different libc version, each libc version will only try to load locale
1821 data in the right format.
1822 @end enumerate
1823
1824 This is important because the locale data format used by different libc
1825 versions may be incompatible.
1826
1827 @subsection Name Service Switch
1828
1829 @cindex name service switch, glibc
1830 @cindex NSS (name service switch), glibc
1831 @cindex nscd (name service caching daemon)
1832 @cindex name service caching daemon (nscd)
1833 When using Guix on a foreign distro, we @emph{strongly recommend} that
1834 the system run the GNU C library's @dfn{name service cache daemon},
1835 @command{nscd}, which should be listening on the
1836 @file{/var/run/nscd/socket} socket. Failing to do that, applications
1837 installed with Guix may fail to look up host names or user accounts, or
1838 may even crash. The next paragraphs explain why.
1839
1840 @cindex @file{nsswitch.conf}
1841 The GNU C library implements a @dfn{name service switch} (NSS), which is
1842 an extensible mechanism for ``name lookups'' in general: host name
1843 resolution, user accounts, and more (@pxref{Name Service Switch,,, libc,
1844 The GNU C Library Reference Manual}).
1845
1846 @cindex Network information service (NIS)
1847 @cindex NIS (Network information service)
1848 Being extensible, the NSS supports @dfn{plugins}, which provide new name
1849 lookup implementations: for example, the @code{nss-mdns} plugin allow
1850 resolution of @code{.local} host names, the @code{nis} plugin allows
1851 user account lookup using the Network information service (NIS), and so
1852 on. These extra ``lookup services'' are configured system-wide in
1853 @file{/etc/nsswitch.conf}, and all the programs running on the system
1854 honor those settings (@pxref{NSS Configuration File,,, libc, The GNU C
1855 Reference Manual}).
1856
1857 When they perform a name lookup---for instance by calling the
1858 @code{getaddrinfo} function in C---applications first try to connect to
1859 the nscd; on success, nscd performs name lookups on their behalf. If
1860 the nscd is not running, then they perform the name lookup by
1861 themselves, by loading the name lookup services into their own address
1862 space and running it. These name lookup services---the
1863 @file{libnss_*.so} files---are @code{dlopen}'d, but they may come from
1864 the host system's C library, rather than from the C library the
1865 application is linked against (the C library coming from Guix).
1866
1867 And this is where the problem is: if your application is linked against
1868 Guix's C library (say, glibc 2.24) and tries to load NSS plugins from
1869 another C library (say, @code{libnss_mdns.so} for glibc 2.22), it will
1870 likely crash or have its name lookups fail unexpectedly.
1871
1872 Running @command{nscd} on the system, among other advantages, eliminates
1873 this binary incompatibility problem because those @code{libnss_*.so}
1874 files are loaded in the @command{nscd} process, not in applications
1875 themselves.
1876
1877 @subsection X11 Fonts
1878
1879 @cindex fonts
1880 The majority of graphical applications use Fontconfig to locate and
1881 load fonts and perform X11-client-side rendering. The @code{fontconfig}
1882 package in Guix looks for fonts in @file{$HOME/.guix-profile}
1883 by default. Thus, to allow graphical applications installed with Guix
1884 to display fonts, you have to install fonts with Guix as well.
1885 Essential font packages include @code{gs-fonts}, @code{font-dejavu}, and
1886 @code{font-gnu-freefont}.
1887
1888 @cindex @code{fc-cache}
1889 @cindex font cache
1890 Once you have installed or removed fonts, or when you notice an
1891 application that does not find fonts, you may need to install Fontconfig
1892 and to force an update of its font cache by running:
1893
1894 @example
1895 guix install fontconfig
1896 fc-cache -rv
1897 @end example
1898
1899 To display text written in Chinese languages, Japanese, or Korean in
1900 graphical applications, consider installing
1901 @code{font-adobe-source-han-sans} or @code{font-wqy-zenhei}. The former
1902 has multiple outputs, one per language family (@pxref{Packages with
1903 Multiple Outputs}). For instance, the following command installs fonts
1904 for Chinese languages:
1905
1906 @example
1907 guix install font-adobe-source-han-sans:cn
1908 @end example
1909
1910 @cindex @code{xterm}
1911 Older programs such as @command{xterm} do not use Fontconfig and instead
1912 rely on server-side font rendering. Such programs require to specify a
1913 full name of a font using XLFD (X Logical Font Description), like this:
1914
1915 @example
1916 -*-dejavu sans-medium-r-normal-*-*-100-*-*-*-*-*-1
1917 @end example
1918
1919 To be able to use such full names for the TrueType fonts installed in
1920 your Guix profile, you need to extend the font path of the X server:
1921
1922 @c Note: 'xset' does not accept symlinks so the trick below arranges to
1923 @c get at the real directory. See <https://bugs.gnu.org/30655>.
1924 @example
1925 xset +fp $(dirname $(readlink -f ~/.guix-profile/share/fonts/truetype/fonts.dir))
1926 @end example
1927
1928 @cindex @code{xlsfonts}
1929 After that, you can run @code{xlsfonts} (from @code{xlsfonts} package)
1930 to make sure your TrueType fonts are listed there.
1931
1932
1933 @subsection X.509 Certificates
1934
1935 @cindex @code{nss-certs}
1936 The @code{nss-certs} package provides X.509 certificates, which allow
1937 programs to authenticate Web servers accessed over HTTPS.
1938
1939 When using Guix on a foreign distro, you can install this package and
1940 define the relevant environment variables so that packages know where to
1941 look for certificates. @xref{X.509 Certificates}, for detailed
1942 information.
1943
1944 @subsection Emacs Packages
1945
1946 @cindex @code{emacs}
1947 When you install Emacs packages with Guix, the Elisp files are placed
1948 under the @file{share/emacs/site-lisp/} directory of the profile in
1949 which they are installed. The Elisp libraries are made available to
1950 Emacs through the @env{EMACSLOADPATH} environment variable, which is
1951 set when installing Emacs itself.
1952
1953 Additionally, autoload definitions are automatically evaluated at the
1954 initialization of Emacs, by the Guix-specific
1955 @code{guix-emacs-autoload-packages} procedure. If, for some reason, you
1956 want to avoid auto-loading the Emacs packages installed with Guix, you
1957 can do so by running Emacs with the @option{--no-site-file} option
1958 (@pxref{Init File,,, emacs, The GNU Emacs Manual}).
1959
1960
1961 @node Upgrading Guix
1962 @section Upgrading Guix
1963
1964 @cindex Upgrading Guix, on a foreign distro
1965
1966 To upgrade Guix, run:
1967
1968 @example
1969 guix pull
1970 @end example
1971
1972 @xref{Invoking guix pull}, for more information.
1973
1974 @cindex upgrading Guix for the root user, on a foreign distro
1975 @cindex upgrading the Guix daemon, on a foreign distro
1976 @cindex @command{guix pull} for the root user, on a foreign distro
1977
1978 On a foreign distro, you can upgrade the build daemon by running:
1979
1980 @example
1981 sudo -i guix pull
1982 @end example
1983
1984 @noindent
1985 followed by (assuming your distro uses the systemd service management
1986 tool):
1987
1988 @example
1989 systemctl restart guix-daemon.service
1990 @end example
1991
1992 On Guix System, upgrading the daemon is achieved by reconfiguring the
1993 system (@pxref{Invoking guix system, @code{guix system reconfigure}}).
1994
1995 @c TODO What else?
1996
1997 @c *********************************************************************
1998 @node System Installation
1999 @chapter System Installation
2000
2001 @cindex installing Guix System
2002 @cindex Guix System, installation
2003 This section explains how to install Guix System
2004 on a machine. Guix, as a package manager, can
2005 also be installed on top of a running GNU/Linux system,
2006 @pxref{Installation}.
2007
2008 @ifinfo
2009 @quotation Note
2010 @c This paragraph is for people reading this from tty2 of the
2011 @c installation image.
2012 You are reading this documentation with an Info reader. For details on
2013 how to use it, hit the @key{RET} key (``return'' or ``enter'') on the
2014 link that follows: @pxref{Top, Info reader,, info-stnd, Stand-alone GNU
2015 Info}. Hit @kbd{l} afterwards to come back here.
2016
2017 Alternatively, run @command{info info} in another tty to keep the manual
2018 available.
2019 @end quotation
2020 @end ifinfo
2021
2022 @menu
2023 * Limitations:: What you can expect.
2024 * Hardware Considerations:: Supported hardware.
2025 * USB Stick and DVD Installation:: Preparing the installation medium.
2026 * Preparing for Installation:: Networking, partitioning, etc.
2027 * Guided Graphical Installation:: Easy graphical installation.
2028 * Manual Installation:: Manual installation for wizards.
2029 * After System Installation:: When installation succeeded.
2030 * Installing Guix in a VM:: Guix System playground.
2031 * Building the Installation Image:: How this comes to be.
2032 @end menu
2033
2034 @node Limitations
2035 @section Limitations
2036
2037 We consider Guix System to be ready for a wide range of ``desktop'' and server
2038 use cases. The reliability guarantees it provides---transactional upgrades
2039 and rollbacks, reproducibility---make it a solid foundation.
2040
2041 Nevertheless, before you proceed with the installation, be aware of the
2042 following noteworthy limitations applicable to version @value{VERSION}:
2043
2044 @itemize
2045 @item
2046 More and more system services are provided (@pxref{Services}), but some
2047 may be missing.
2048
2049 @item
2050 GNOME, Xfce, LXDE, and Enlightenment are available (@pxref{Desktop Services}),
2051 as well as a number of X11 window managers. However, KDE is currently
2052 missing.
2053 @end itemize
2054
2055 More than a disclaimer, this is an invitation to report issues (and success
2056 stories!), and to join us in improving it. @xref{Contributing}, for more
2057 info.
2058
2059
2060 @node Hardware Considerations
2061 @section Hardware Considerations
2062
2063 @cindex hardware support on Guix System
2064 GNU@tie{}Guix focuses on respecting the user's computing freedom. It
2065 builds around the kernel Linux-libre, which means that only hardware for
2066 which free software drivers and firmware exist is supported. Nowadays,
2067 a wide range of off-the-shelf hardware is supported on
2068 GNU/Linux-libre---from keyboards to graphics cards to scanners and
2069 Ethernet controllers. Unfortunately, there are still areas where
2070 hardware vendors deny users control over their own computing, and such
2071 hardware is not supported on Guix System.
2072
2073 @cindex WiFi, hardware support
2074 One of the main areas where free drivers or firmware are lacking is WiFi
2075 devices. WiFi devices known to work include those using Atheros chips
2076 (AR9271 and AR7010), which corresponds to the @code{ath9k} Linux-libre
2077 driver, and those using Broadcom/AirForce chips (BCM43xx with
2078 Wireless-Core Revision 5), which corresponds to the @code{b43-open}
2079 Linux-libre driver. Free firmware exists for both and is available
2080 out-of-the-box on Guix System, as part of @code{%base-firmware}
2081 (@pxref{operating-system Reference, @code{firmware}}).
2082
2083 @cindex RYF, Respects Your Freedom
2084 The @uref{https://www.fsf.org/, Free Software Foundation} runs
2085 @uref{https://www.fsf.org/ryf, @dfn{Respects Your Freedom}} (RYF), a
2086 certification program for hardware products that respect your freedom
2087 and your privacy and ensure that you have control over your device. We
2088 encourage you to check the list of RYF-certified devices.
2089
2090 Another useful resource is the @uref{https://www.h-node.org/, H-Node}
2091 web site. It contains a catalog of hardware devices with information
2092 about their support in GNU/Linux.
2093
2094
2095 @node USB Stick and DVD Installation
2096 @section USB Stick and DVD Installation
2097
2098 An ISO-9660 installation image that can be written to a USB stick or
2099 burnt to a DVD can be downloaded from
2100 @indicateurl{@value{BASE-URL}/guix-system-install-@value{VERSION}.x86_64-linux.iso.xz},
2101 where you can replace @code{x86_64-linux} with one of:
2102
2103 @table @code
2104 @item x86_64-linux
2105 for a GNU/Linux system on Intel/AMD-compatible 64-bit CPUs;
2106
2107 @item i686-linux
2108 for a 32-bit GNU/Linux system on Intel-compatible CPUs.
2109 @end table
2110
2111 @c start duplication of authentication part from ``Binary Installation''
2112 Make sure to download the associated @file{.sig} file and to verify the
2113 authenticity of the image against it, along these lines:
2114
2115 @example
2116 $ wget @value{BASE-URL}/guix-system-install-@value{VERSION}.x86_64-linux.iso.xz.sig
2117 $ gpg --verify guix-system-install-@value{VERSION}.x86_64-linux.iso.xz.sig
2118 @end example
2119
2120 If that command fails because you do not have the required public key,
2121 then run this command to import it:
2122
2123 @example
2124 $ wget @value{OPENPGP-SIGNING-KEY-URL} \
2125 -qO - | gpg --import -
2126 @end example
2127
2128 @noindent
2129 and rerun the @code{gpg --verify} command.
2130
2131 Take note that a warning like ``This key is not certified with a trusted
2132 signature!'' is normal.
2133
2134 @c end duplication
2135
2136 This image contains the tools necessary for an installation.
2137 It is meant to be copied @emph{as is} to a large-enough USB stick or DVD.
2138
2139 @unnumberedsubsec Copying to a USB Stick
2140
2141 To copy the image to a USB stick, follow these steps:
2142
2143 @enumerate
2144 @item
2145 Decompress the image using the @command{xz} command:
2146
2147 @example
2148 xz -d guix-system-install-@value{VERSION}.x86_64-linux.iso.xz
2149 @end example
2150
2151 @item
2152 Insert a USB stick of 1@tie{}GiB or more into your machine, and determine
2153 its device name. Assuming that the USB stick is known as @file{/dev/sdX},
2154 copy the image with:
2155
2156 @example
2157 dd if=guix-system-install-@value{VERSION}.x86_64-linux.iso of=/dev/sdX status=progress
2158 sync
2159 @end example
2160
2161 Access to @file{/dev/sdX} usually requires root privileges.
2162 @end enumerate
2163
2164 @unnumberedsubsec Burning on a DVD
2165
2166 To copy the image to a DVD, follow these steps:
2167
2168 @enumerate
2169 @item
2170 Decompress the image using the @command{xz} command:
2171
2172 @example
2173 xz -d guix-system-install-@value{VERSION}.x86_64-linux.iso.xz
2174 @end example
2175
2176 @item
2177 Insert a blank DVD into your machine, and determine
2178 its device name. Assuming that the DVD drive is known as @file{/dev/srX},
2179 copy the image with:
2180
2181 @example
2182 growisofs -dvd-compat -Z /dev/srX=guix-system-install-@value{VERSION}.x86_64-linux.iso
2183 @end example
2184
2185 Access to @file{/dev/srX} usually requires root privileges.
2186 @end enumerate
2187
2188 @unnumberedsubsec Booting
2189
2190 Once this is done, you should be able to reboot the system and boot from
2191 the USB stick or DVD@. The latter usually requires you to get in the
2192 BIOS or UEFI boot menu, where you can choose to boot from the USB stick.
2193 In order to boot from Libreboot, switch to the command mode by pressing
2194 the @kbd{c} key and type @command{search_grub usb}.
2195
2196 @xref{Installing Guix in a VM}, if, instead, you would like to install
2197 Guix System in a virtual machine (VM).
2198
2199
2200 @node Preparing for Installation
2201 @section Preparing for Installation
2202
2203 Once you have booted, you can use the guided graphical installer, which makes
2204 it easy to get started (@pxref{Guided Graphical Installation}). Alternatively,
2205 if you are already familiar with GNU/Linux and if you want more control than
2206 what the graphical installer provides, you can choose the ``manual''
2207 installation process (@pxref{Manual Installation}).
2208
2209 The graphical installer is available on TTY1. You can obtain root shells on
2210 TTYs 3 to 6 by hitting @kbd{ctrl-alt-f3}, @kbd{ctrl-alt-f4}, etc. TTY2 shows
2211 this documentation and you can reach it with @kbd{ctrl-alt-f2}. Documentation
2212 is browsable using the Info reader commands (@pxref{Top,,, info-stnd,
2213 Stand-alone GNU Info}). The installation system runs the GPM mouse daemon,
2214 which allows you to select text with the left mouse button and to paste it
2215 with the middle button.
2216
2217 @quotation Note
2218 Installation requires access to the Internet so that any missing
2219 dependencies of your system configuration can be downloaded. See the
2220 ``Networking'' section below.
2221 @end quotation
2222
2223 @node Guided Graphical Installation
2224 @section Guided Graphical Installation
2225
2226 The graphical installer is a text-based user interface. It will guide you,
2227 with dialog boxes, through the steps needed to install GNU@tie{}Guix System.
2228
2229 The first dialog boxes allow you to set up the system as you use it during the
2230 installation: you can choose the language, keyboard layout, and set up
2231 networking, which will be used during the installation. The image below shows
2232 the networking dialog.
2233
2234 @image{images/installer-network,5in,, networking setup with the graphical installer}
2235
2236 Later steps allow you to partition your hard disk, as shown in the image
2237 below, to choose whether or not to use encrypted file systems, to enter the
2238 host name and root password, and to create an additional account, among other
2239 things.
2240
2241 @image{images/installer-partitions,5in,, partitioning with the graphical installer}
2242
2243 Note that, at any time, the installer allows you to exit the current
2244 installation step and resume at a previous step, as show in the image below.
2245
2246 @image{images/installer-resume,5in,, resuming the installation process}
2247
2248 Once you're done, the installer produces an operating system configuration and
2249 displays it (@pxref{Using the Configuration System}). At that point you can
2250 hit ``OK'' and installation will proceed. On success, you can reboot into the
2251 new system and enjoy. @xref{After System Installation}, for what's next!
2252
2253
2254 @node Manual Installation
2255 @section Manual Installation
2256
2257 This section describes how you would ``manually'' install GNU@tie{}Guix System
2258 on your machine. This option requires familiarity with GNU/Linux, with the
2259 shell, and with common administration tools. If you think this is not for
2260 you, consider using the guided graphical installer (@pxref{Guided Graphical
2261 Installation}).
2262
2263 The installation system provides root shells on TTYs 3 to 6; press
2264 @kbd{ctrl-alt-f3}, @kbd{ctrl-alt-f4}, and so on to reach them. It includes
2265 many common tools needed to install the system. But it is also a full-blown
2266 Guix System, which means that you can install additional packages, should you
2267 need it, using @command{guix package} (@pxref{Invoking guix package}).
2268
2269 @menu
2270 * Keyboard Layout and Networking and Partitioning:: Initial setup.
2271 * Proceeding with the Installation:: Installing.
2272 @end menu
2273
2274 @node Keyboard Layout and Networking and Partitioning
2275 @subsection Keyboard Layout, Networking, and Partitioning
2276
2277 Before you can install the system, you may want to adjust the keyboard layout,
2278 set up networking, and partition your target hard disk. This section will
2279 guide you through this.
2280
2281 @subsubsection Keyboard Layout
2282
2283 @cindex keyboard layout
2284 The installation image uses the US qwerty keyboard layout. If you want
2285 to change it, you can use the @command{loadkeys} command. For example,
2286 the following command selects the Dvorak keyboard layout:
2287
2288 @example
2289 loadkeys dvorak
2290 @end example
2291
2292 See the files under @file{/run/current-system/profile/share/keymaps} for
2293 a list of available keyboard layouts. Run @command{man loadkeys} for
2294 more information.
2295
2296 @subsubsection Networking
2297
2298 Run the following command to see what your network interfaces are called:
2299
2300 @example
2301 ifconfig -a
2302 @end example
2303
2304 @noindent
2305 @dots{} or, using the GNU/Linux-specific @command{ip} command:
2306
2307 @example
2308 ip address
2309 @end example
2310
2311 @c https://cgit.freedesktop.org/systemd/systemd/tree/src/udev/udev-builtin-net_id.c#n20
2312 Wired interfaces have a name starting with @samp{e}; for example, the
2313 interface corresponding to the first on-board Ethernet controller is
2314 called @samp{eno1}. Wireless interfaces have a name starting with
2315 @samp{w}, like @samp{w1p2s0}.
2316
2317 @table @asis
2318 @item Wired connection
2319 To configure a wired network run the following command, substituting
2320 @var{interface} with the name of the wired interface you want to use.
2321
2322 @example
2323 ifconfig @var{interface} up
2324 @end example
2325
2326 @noindent
2327 @dots{} or, using the GNU/Linux-specific @command{ip} command:
2328
2329 @example
2330 ip link set @var{interface} up
2331 @end example
2332
2333 @item Wireless connection
2334 @cindex wireless
2335 @cindex WiFi
2336 To configure wireless networking, you can create a configuration file
2337 for the @command{wpa_supplicant} configuration tool (its location is not
2338 important) using one of the available text editors such as
2339 @command{nano}:
2340
2341 @example
2342 nano wpa_supplicant.conf
2343 @end example
2344
2345 As an example, the following stanza can go to this file and will work
2346 for many wireless networks, provided you give the actual SSID and
2347 passphrase for the network you are connecting to:
2348
2349 @example
2350 network=@{
2351 ssid="@var{my-ssid}"
2352 key_mgmt=WPA-PSK
2353 psk="the network's secret passphrase"
2354 @}
2355 @end example
2356
2357 Start the wireless service and run it in the background with the
2358 following command (substitute @var{interface} with the name of the
2359 network interface you want to use):
2360
2361 @example
2362 wpa_supplicant -c wpa_supplicant.conf -i @var{interface} -B
2363 @end example
2364
2365 Run @command{man wpa_supplicant} for more information.
2366 @end table
2367
2368 @cindex DHCP
2369 At this point, you need to acquire an IP address. On a network where IP
2370 addresses are automatically assigned @i{via} DHCP, you can run:
2371
2372 @example
2373 dhclient -v @var{interface}
2374 @end example
2375
2376 Try to ping a server to see if networking is up and running:
2377
2378 @example
2379 ping -c 3 gnu.org
2380 @end example
2381
2382 Setting up network access is almost always a requirement because the
2383 image does not contain all the software and tools that may be needed.
2384
2385 @cindex proxy, during system installation
2386 If you need HTTP and HTTPS access to go through a proxy, run the
2387 following command:
2388
2389 @example
2390 herd set-http-proxy guix-daemon @var{URL}
2391 @end example
2392
2393 @noindent
2394 where @var{URL} is the proxy URL, for example
2395 @code{http://example.org:8118}.
2396
2397 @cindex installing over SSH
2398 If you want to, you can continue the installation remotely by starting
2399 an SSH server:
2400
2401 @example
2402 herd start ssh-daemon
2403 @end example
2404
2405 Make sure to either set a password with @command{passwd}, or configure
2406 OpenSSH public key authentication before logging in.
2407
2408 @subsubsection Disk Partitioning
2409
2410 Unless this has already been done, the next step is to partition, and
2411 then format the target partition(s).
2412
2413 The installation image includes several partitioning tools, including
2414 Parted (@pxref{Overview,,, parted, GNU Parted User Manual}),
2415 @command{fdisk}, and @command{cfdisk}. Run it and set up your disk with
2416 the partition layout you want:
2417
2418 @example
2419 cfdisk
2420 @end example
2421
2422 If your disk uses the GUID Partition Table (GPT) format and you plan to
2423 install BIOS-based GRUB (which is the default), make sure a BIOS Boot
2424 Partition is available (@pxref{BIOS installation,,, grub, GNU GRUB
2425 manual}).
2426
2427 @cindex EFI, installation
2428 @cindex UEFI, installation
2429 @cindex ESP, EFI system partition
2430 If you instead wish to use EFI-based GRUB, a FAT32 @dfn{EFI System Partition}
2431 (ESP) is required. This partition can be mounted at @file{/boot/efi} for
2432 instance and must have the @code{esp} flag set. E.g., for @command{parted}:
2433
2434 @example
2435 parted /dev/sda set 1 esp on
2436 @end example
2437
2438 @quotation Note
2439 @vindex grub-bootloader
2440 @vindex grub-efi-bootloader
2441 Unsure whether to use EFI- or BIOS-based GRUB? If the directory
2442 @file{/sys/firmware/efi} exists in the installation image, then you should
2443 probably perform an EFI installation, using @code{grub-efi-bootloader}.
2444 Otherwise you should use the BIOS-based GRUB, known as
2445 @code{grub-bootloader}. @xref{Bootloader Configuration}, for more info on
2446 bootloaders.
2447 @end quotation
2448
2449 Once you are done partitioning the target hard disk drive, you have to
2450 create a file system on the relevant partition(s)@footnote{Currently
2451 Guix System only supports ext4, btrfs, JFS, and F2FS file systems. In
2452 particular, code that reads file system UUIDs and labels only works for these
2453 file system types.}. For the ESP, if you have one and assuming it is
2454 @file{/dev/sda1}, run:
2455
2456 @example
2457 mkfs.fat -F32 /dev/sda1
2458 @end example
2459
2460 For the root file system, ext4 is the most widely used format. Other
2461 file systems, such as Btrfs, support compression, which is reported to
2462 nicely complement file deduplication that the daemon performs
2463 independently of the file system (@pxref{Invoking guix-daemon,
2464 deduplication}).
2465
2466 Preferably, assign file systems a label so that you can easily and
2467 reliably refer to them in @code{file-system} declarations (@pxref{File
2468 Systems}). This is typically done using the @code{-L} option of
2469 @command{mkfs.ext4} and related commands. So, assuming the target root
2470 partition lives at @file{/dev/sda2}, a file system with the label
2471 @code{my-root} can be created with:
2472
2473 @example
2474 mkfs.ext4 -L my-root /dev/sda2
2475 @end example
2476
2477 @cindex encrypted disk
2478 If you are instead planning to encrypt the root partition, you can use
2479 the Cryptsetup/LUKS utilities to do that (see @inlinefmtifelse{html,
2480 @uref{https://linux.die.net/man/8/cryptsetup, @code{man cryptsetup}},
2481 @code{man cryptsetup}} for more information). Assuming you want to
2482 store the root partition on @file{/dev/sda2}, the command sequence would
2483 be along these lines:
2484
2485 @example
2486 cryptsetup luksFormat /dev/sda2
2487 cryptsetup open --type luks /dev/sda2 my-partition
2488 mkfs.ext4 -L my-root /dev/mapper/my-partition
2489 @end example
2490
2491 Once that is done, mount the target file system under @file{/mnt}
2492 with a command like (again, assuming @code{my-root} is the label of the
2493 root file system):
2494
2495 @example
2496 mount LABEL=my-root /mnt
2497 @end example
2498
2499 Also mount any other file systems you would like to use on the target
2500 system relative to this path. If you have opted for @file{/boot/efi} as an
2501 EFI mount point for example, mount it at @file{/mnt/boot/efi} now so it is
2502 found by @code{guix system init} afterwards.
2503
2504 Finally, if you plan to use one or more swap partitions (@pxref{Memory
2505 Concepts, swap space,, libc, The GNU C Library Reference Manual}), make
2506 sure to initialize them with @command{mkswap}. Assuming you have one
2507 swap partition on @file{/dev/sda3}, you would run:
2508
2509 @example
2510 mkswap /dev/sda3
2511 swapon /dev/sda3
2512 @end example
2513
2514 Alternatively, you may use a swap file. For example, assuming that in
2515 the new system you want to use the file @file{/swapfile} as a swap file,
2516 you would run@footnote{This example will work for many types of file
2517 systems (e.g., ext4). However, for copy-on-write file systems (e.g.,
2518 btrfs), the required steps may be different. For details, see the
2519 manual pages for @command{mkswap} and @command{swapon}.}:
2520
2521 @example
2522 # This is 10 GiB of swap space. Adjust "count" to change the size.
2523 dd if=/dev/zero of=/mnt/swapfile bs=1MiB count=10240
2524 # For security, make the file readable and writable only by root.
2525 chmod 600 /mnt/swapfile
2526 mkswap /mnt/swapfile
2527 swapon /mnt/swapfile
2528 @end example
2529
2530 Note that if you have encrypted the root partition and created a swap
2531 file in its file system as described above, then the encryption also
2532 protects the swap file, just like any other file in that file system.
2533
2534 @node Proceeding with the Installation
2535 @subsection Proceeding with the Installation
2536
2537 With the target partitions ready and the target root mounted on
2538 @file{/mnt}, we're ready to go. First, run:
2539
2540 @example
2541 herd start cow-store /mnt
2542 @end example
2543
2544 This makes @file{/gnu/store} copy-on-write, such that packages added to it
2545 during the installation phase are written to the target disk on @file{/mnt}
2546 rather than kept in memory. This is necessary because the first phase of
2547 the @command{guix system init} command (see below) entails downloads or
2548 builds to @file{/gnu/store} which, initially, is an in-memory file system.
2549
2550 Next, you have to edit a file and
2551 provide the declaration of the operating system to be installed. To
2552 that end, the installation system comes with three text editors. We
2553 recommend GNU nano (@pxref{Top,,, nano, GNU nano Manual}), which
2554 supports syntax highlighting and parentheses matching; other editors
2555 include GNU Zile (an Emacs clone), and
2556 nvi (a clone of the original BSD @command{vi} editor).
2557 We strongly recommend storing that file on the target root file system, say,
2558 as @file{/mnt/etc/config.scm}. Failing to do that, you will have lost your
2559 configuration file once you have rebooted into the newly-installed system.
2560
2561 @xref{Using the Configuration System}, for an overview of the
2562 configuration file. The example configurations discussed in that
2563 section are available under @file{/etc/configuration} in the
2564 installation image. Thus, to get started with a system configuration
2565 providing a graphical display server (a ``desktop'' system), you can run
2566 something along these lines:
2567
2568 @example
2569 # mkdir /mnt/etc
2570 # cp /etc/configuration/desktop.scm /mnt/etc/config.scm
2571 # nano /mnt/etc/config.scm
2572 @end example
2573
2574 You should pay attention to what your configuration file contains, and
2575 in particular:
2576
2577 @itemize
2578 @item
2579 Make sure the @code{bootloader-configuration} form refers to the target
2580 you want to install GRUB on. It should mention @code{grub-bootloader} if
2581 you are installing GRUB in the legacy way, or @code{grub-efi-bootloader}
2582 for newer UEFI systems. For legacy systems, the @code{target} field
2583 names a device, like @code{/dev/sda}; for UEFI systems it names a path
2584 to a mounted EFI partition, like @code{/boot/efi}; do make sure the path is
2585 currently mounted and a @code{file-system} entry is specified in your
2586 configuration.
2587
2588 @item
2589 Be sure that your file system labels match the value of their respective
2590 @code{device} fields in your @code{file-system} configuration, assuming
2591 your @code{file-system} configuration uses the @code{file-system-label}
2592 procedure in its @code{device} field.
2593
2594 @item
2595 If there are encrypted or RAID partitions, make sure to add a
2596 @code{mapped-devices} field to describe them (@pxref{Mapped Devices}).
2597 @end itemize
2598
2599 Once you are done preparing the configuration file, the new system must
2600 be initialized (remember that the target root file system is mounted
2601 under @file{/mnt}):
2602
2603 @example
2604 guix system init /mnt/etc/config.scm /mnt
2605 @end example
2606
2607 @noindent
2608 This copies all the necessary files and installs GRUB on
2609 @file{/dev/sdX}, unless you pass the @option{--no-bootloader} option. For
2610 more information, @pxref{Invoking guix system}. This command may trigger
2611 downloads or builds of missing packages, which can take some time.
2612
2613 Once that command has completed---and hopefully succeeded!---you can run
2614 @command{reboot} and boot into the new system. The @code{root} password
2615 in the new system is initially empty; other users' passwords need to be
2616 initialized by running the @command{passwd} command as @code{root},
2617 unless your configuration specifies otherwise
2618 (@pxref{user-account-password, user account passwords}).
2619 @xref{After System Installation}, for what's next!
2620
2621
2622 @node After System Installation
2623 @section After System Installation
2624
2625 Success, you've now booted into Guix System! From then on, you can update the
2626 system whenever you want by running, say:
2627
2628 @example
2629 guix pull
2630 sudo guix system reconfigure /etc/config.scm
2631 @end example
2632
2633 @noindent
2634 This builds a new system generation with the latest packages and services
2635 (@pxref{Invoking guix system}). We recommend doing that regularly so that
2636 your system includes the latest security updates (@pxref{Security Updates}).
2637
2638 @c See <https://lists.gnu.org/archive/html/guix-devel/2019-01/msg00268.html>.
2639 @quotation Note
2640 @cindex sudo vs. @command{guix pull}
2641 Note that @command{sudo guix} runs your user's @command{guix} command and
2642 @emph{not} root's, because @command{sudo} leaves @env{PATH} unchanged. To
2643 explicitly run root's @command{guix}, type @command{sudo -i guix @dots{}}.
2644
2645 The difference matters here, because @command{guix pull} updates
2646 the @command{guix} command and package definitions only for the user it is run
2647 as. This means that if you choose to use @command{guix system reconfigure} in
2648 root's login shell, you'll need to @command{guix pull} separately.
2649 @end quotation
2650
2651 Now, @pxref{Getting Started}, and
2652 join us on @code{#guix} on the Freenode IRC network or on
2653 @email{guix-devel@@gnu.org} to share your experience!
2654
2655
2656 @node Installing Guix in a VM
2657 @section Installing Guix in a Virtual Machine
2658
2659 @cindex virtual machine, Guix System installation
2660 @cindex virtual private server (VPS)
2661 @cindex VPS (virtual private server)
2662 If you'd like to install Guix System in a virtual machine (VM) or on a
2663 virtual private server (VPS) rather than on your beloved machine, this
2664 section is for you.
2665
2666 To boot a @uref{https://qemu.org/,QEMU} VM for installing Guix System in a
2667 disk image, follow these steps:
2668
2669 @enumerate
2670 @item
2671 First, retrieve and decompress the Guix system installation image as
2672 described previously (@pxref{USB Stick and DVD Installation}).
2673
2674 @item
2675 Create a disk image that will hold the installed system. To make a
2676 qcow2-formatted disk image, use the @command{qemu-img} command:
2677
2678 @example
2679 qemu-img create -f qcow2 guix-system.img 50G
2680 @end example
2681
2682 The resulting file will be much smaller than 50 GB (typically less than
2683 1 MB), but it will grow as the virtualized storage device is filled up.
2684
2685 @item
2686 Boot the USB installation image in an VM:
2687
2688 @example
2689 qemu-system-x86_64 -m 1024 -smp 1 -enable-kvm \
2690 -nic user,model=virtio-net-pci -boot menu=on,order=d \
2691 -drive file=guix-system.img \
2692 -drive media=cdrom,file=guix-system-install-@value{VERSION}.@var{system}.iso
2693 @end example
2694
2695 @code{-enable-kvm} is optional, but significantly improves performance,
2696 @pxref{Running Guix in a VM}.
2697
2698 @item
2699 You're now root in the VM, proceed with the installation process.
2700 @xref{Preparing for Installation}, and follow the instructions.
2701 @end enumerate
2702
2703 Once installation is complete, you can boot the system that's on your
2704 @file{guix-system.img} image. @xref{Running Guix in a VM}, for how to do
2705 that.
2706
2707 @node Building the Installation Image
2708 @section Building the Installation Image
2709
2710 @cindex installation image
2711 The installation image described above was built using the @command{guix
2712 system} command, specifically:
2713
2714 @example
2715 guix system image -t iso9660 gnu/system/install.scm
2716 @end example
2717
2718 Have a look at @file{gnu/system/install.scm} in the source tree,
2719 and see also @ref{Invoking guix system} for more information
2720 about the installation image.
2721
2722 @section Building the Installation Image for ARM Boards
2723
2724 Many ARM boards require a specific variant of the
2725 @uref{https://www.denx.de/wiki/U-Boot/, U-Boot} bootloader.
2726
2727 If you build a disk image and the bootloader is not available otherwise
2728 (on another boot drive etc), it's advisable to build an image that
2729 includes the bootloader, specifically:
2730
2731 @example
2732 guix system image --system=armhf-linux -e '((@@ (gnu system install) os-with-u-boot) (@@ (gnu system install) installation-os) "A20-OLinuXino-Lime2")'
2733 @end example
2734
2735 @code{A20-OLinuXino-Lime2} is the name of the board. If you specify an invalid
2736 board, a list of possible boards will be printed.
2737
2738 @c *********************************************************************
2739 @node Getting Started
2740 @chapter Getting Started
2741
2742 Presumably, you've reached this section because either you have
2743 installed Guix on top of another distribution (@pxref{Installation}), or
2744 you've installed the standalone Guix System (@pxref{System
2745 Installation}). It's time for you to get started using Guix and this
2746 section aims to help you do that and give you a feel of what it's like.
2747
2748 Guix is about installing software, so probably the first thing you'll
2749 want to do is to actually look for software. Let's say you're looking
2750 for a text editor, you can run:
2751
2752 @example
2753 guix search text editor
2754 @end example
2755
2756 This command shows you a number of matching @dfn{packages}, each time
2757 showing the package's name, version, a description, and additional info.
2758 Once you've found out the one you want to use, let's say Emacs (ah ha!),
2759 you can go ahead and install it (run this command as a regular user,
2760 @emph{no need for root privileges}!):
2761
2762 @example
2763 guix install emacs
2764 @end example
2765
2766 @cindex profile
2767 You've installed your first package, congrats! The package is now
2768 visible in your default @dfn{profile}, @file{$HOME/.guix-profile}---a
2769 profile is a directory containing installed packages.
2770 In the process, you've
2771 probably noticed that Guix downloaded pre-built binaries; or, if you
2772 explicitly chose to @emph{not} use pre-built binaries, then probably
2773 Guix is still building software (@pxref{Substitutes}, for more info).
2774
2775 Unless you're using Guix System, the @command{guix install} command must
2776 have printed this hint:
2777
2778 @example
2779 hint: Consider setting the necessary environment variables by running:
2780
2781 GUIX_PROFILE="$HOME/.guix-profile"
2782 . "$GUIX_PROFILE/etc/profile"
2783
2784 Alternately, see `guix package --search-paths -p "$HOME/.guix-profile"'.
2785 @end example
2786
2787 Indeed, you must now tell your shell where @command{emacs} and other
2788 programs installed with Guix are to be found. Pasting the two lines
2789 above will do just that: it will add
2790 @code{$HOME/.guix-profile/bin}---which is where the installed package
2791 is---to the @code{PATH} environment variable. You can paste these two
2792 lines in your shell so they take effect right away, but more importantly
2793 you should add them to @file{~/.bash_profile} (or equivalent file if you
2794 do not use Bash) so that environment variables are set next time you
2795 spawn a shell. You only need to do this once and other search paths
2796 environment variables will be taken care of similarly---e.g., if you
2797 eventually install @code{python} and Python libraries, @code{PYTHONPATH}
2798 will be defined.
2799
2800 You can go on installing packages at your will. To list installed
2801 packages, run:
2802
2803 @example
2804 guix package --list-installed
2805 @end example
2806
2807 To remove a package, you would unsurprisingly run @command{guix remove}.
2808 A distinguishing feature is the ability to @dfn{roll back} any operation
2809 you made---installation, removal, upgrade---by simply typing:
2810
2811 @example
2812 guix package --roll-back
2813 @end example
2814
2815 This is because each operation is in fact a @dfn{transaction} that
2816 creates a new @dfn{generation}. These generations and the difference
2817 between them can be displayed by running:
2818
2819 @example
2820 guix package --list-generations
2821 @end example
2822
2823 Now you know the basics of package management!
2824
2825 @quotation Going further
2826 @xref{Package Management}, for more about package management. You may
2827 like @dfn{declarative} package management with @command{guix package
2828 --manifest}, managing separate @dfn{profiles} with @option{--profile},
2829 deleting old generations, collecting garbage, and other nifty features
2830 that will come in handy as you become more familiar with Guix. If you
2831 are a developer, @pxref{Development} for additional tools. And if
2832 you're curious, @pxref{Features}, to peek under the hood.
2833 @end quotation
2834
2835 Once you've installed a set of packages, you will want to periodically
2836 @emph{upgrade} them to the latest and greatest version. To do that, you
2837 will first pull the latest revision of Guix and its package collection:
2838
2839 @example
2840 guix pull
2841 @end example
2842
2843 The end result is a new @command{guix} command, under
2844 @file{~/.config/guix/current/bin}. Unless you're on Guix System, the
2845 first time you run @command{guix pull}, be sure to follow the hint that
2846 the command prints and, similar to what we saw above, paste these two
2847 lines in your terminal and @file{.bash_profile}:
2848
2849 @example
2850 GUIX_PROFILE="$HOME/.config/guix/current"
2851 . "$GUIX_PROFILE/etc/profile"
2852 @end example
2853
2854 @noindent
2855 You must also instruct your shell to point to this new @command{guix}:
2856
2857 @example
2858 hash guix
2859 @end example
2860
2861 At this point, you're running a brand new Guix. You can thus go ahead
2862 and actually upgrade all the packages you previously installed:
2863
2864 @example
2865 guix upgrade
2866 @end example
2867
2868 As you run this command, you will see that binaries are downloaded (or
2869 perhaps some packages are built), and eventually you end up with the
2870 upgraded packages. Should one of these upgraded packages not be to your
2871 liking, remember you can always roll back!
2872
2873 You can display the exact revision of Guix you're currently using by
2874 running:
2875
2876 @example
2877 guix describe
2878 @end example
2879
2880 The information it displays is @emph{all it takes to reproduce the exact
2881 same Guix}, be it at a different point in time or on a different
2882 machine.
2883
2884 @quotation Going further
2885 @xref{Invoking guix pull}, for more information. @xref{Channels}, on
2886 how to specify additional @dfn{channels} to pull packages from, how to
2887 replicate Guix, and more. You may also find @command{time-machine}
2888 handy (@pxref{Invoking guix time-machine}).
2889 @end quotation
2890
2891 If you installed Guix System, one of the first things you'll want to do
2892 is to upgrade your system. Once you've run @command{guix pull} to get
2893 the latest Guix, you can upgrade the system like this:
2894
2895 @example
2896 sudo guix system reconfigure /etc/config.scm
2897 @end example
2898
2899 Upon completion, the system runs the latest versions of its software
2900 packages. When you eventually reboot, you'll notice a sub-menu in the
2901 bootloader that reads ``Old system generations'': it's what allows you
2902 to boot @emph{an older generation of your system}, should the latest
2903 generation be ``broken'' or otherwise unsatisfying. Just like for
2904 packages, you can always @emph{roll back} to a previous generation
2905 @emph{of the whole system}:
2906
2907 @example
2908 sudo guix system roll-back
2909 @end example
2910
2911 There are many things you'll probably want to tweak on your system:
2912 adding new user accounts, adding new system services, fiddling with the
2913 configuration of those services, etc. The system configuration is
2914 @emph{entirely} described in the @file{/etc/config.scm} file.
2915 @xref{Using the Configuration System}, to learn how to change it.
2916
2917 Now you know enough to get started!
2918
2919 @quotation Resources
2920 The rest of this manual provides a reference for all things Guix. Here
2921 are some additional resources you may find useful:
2922
2923 @itemize
2924 @item
2925 @xref{Top,,, guix-cookbook, The GNU Guix Cookbook}, for a list of
2926 ``how-to'' style of recipes for a variety of applications.
2927
2928 @item
2929 The @uref{https://guix.gnu.org/guix-refcard.pdf, GNU Guix Reference
2930 Card} lists in two pages most of the commands and options you'll ever
2931 need.
2932
2933 @item
2934 The web site contains @uref{https://guix.gnu.org/en/videos/,
2935 instructional videos} covering topics such as everyday use of Guix, how
2936 to get help, and how to become a contributor.
2937
2938 @item
2939 @xref{Documentation}, to learn how to access documentation on your
2940 computer.
2941 @end itemize
2942
2943 We hope you will enjoy Guix as much as the community enjoys building it!
2944 @end quotation
2945
2946 @c *********************************************************************
2947 @node Package Management
2948 @chapter Package Management
2949
2950 @cindex packages
2951 The purpose of GNU Guix is to allow users to easily install, upgrade, and
2952 remove software packages, without having to know about their build
2953 procedures or dependencies. Guix also goes beyond this obvious set of
2954 features.
2955
2956 This chapter describes the main features of Guix, as well as the
2957 package management tools it provides. Along with the command-line
2958 interface described below (@pxref{Invoking guix package, @code{guix
2959 package}}), you may also use the Emacs-Guix interface (@pxref{Top,,,
2960 emacs-guix, The Emacs-Guix Reference Manual}), after installing
2961 @code{emacs-guix} package (run @kbd{M-x guix-help} command to start
2962 with it):
2963
2964 @example
2965 guix install emacs-guix
2966 @end example
2967
2968 @menu
2969 * Features:: How Guix will make your life brighter.
2970 * Invoking guix package:: Package installation, removal, etc.
2971 * Substitutes:: Downloading pre-built binaries.
2972 * Packages with Multiple Outputs:: Single source package, multiple outputs.
2973 * Invoking guix gc:: Running the garbage collector.
2974 * Invoking guix pull:: Fetching the latest Guix and distribution.
2975 * Invoking guix time-machine:: Running an older revision of Guix.
2976 * Inferiors:: Interacting with another revision of Guix.
2977 * Invoking guix describe:: Display information about your Guix revision.
2978 * Invoking guix archive:: Exporting and importing store files.
2979 @end menu
2980
2981 @node Features
2982 @section Features
2983
2984 Here we assume you've already made your first steps with Guix
2985 (@pxref{Getting Started}) and would like to get an overview about what's
2986 going on under the hood.
2987
2988 When using Guix, each package ends up in the @dfn{package store}, in its
2989 own directory---something that resembles
2990 @file{/gnu/store/xxx-package-1.2}, where @code{xxx} is a base32 string.
2991
2992 Instead of referring to these directories, users have their own
2993 @dfn{profile}, which points to the packages that they actually want to
2994 use. These profiles are stored within each user's home directory, at
2995 @code{$HOME/.guix-profile}.
2996
2997 For example, @code{alice} installs GCC 4.7.2. As a result,
2998 @file{/home/alice/.guix-profile/bin/gcc} points to
2999 @file{/gnu/store/@dots{}-gcc-4.7.2/bin/gcc}. Now, on the same machine,
3000 @code{bob} had already installed GCC 4.8.0. The profile of @code{bob}
3001 simply continues to point to
3002 @file{/gnu/store/@dots{}-gcc-4.8.0/bin/gcc}---i.e., both versions of GCC
3003 coexist on the same system without any interference.
3004
3005 The @command{guix package} command is the central tool to manage
3006 packages (@pxref{Invoking guix package}). It operates on the per-user
3007 profiles, and can be used @emph{with normal user privileges}.
3008
3009 @cindex transactions
3010 The command provides the obvious install, remove, and upgrade
3011 operations. Each invocation is actually a @emph{transaction}: either
3012 the specified operation succeeds, or nothing happens. Thus, if the
3013 @command{guix package} process is terminated during the transaction,
3014 or if a power outage occurs during the transaction, then the user's
3015 profile remains in its previous state, and remains usable.
3016
3017 In addition, any package transaction may be @emph{rolled back}. So, if,
3018 for example, an upgrade installs a new version of a package that turns
3019 out to have a serious bug, users may roll back to the previous instance
3020 of their profile, which was known to work well. Similarly, the global
3021 system configuration on Guix is subject to
3022 transactional upgrades and roll-back
3023 (@pxref{Using the Configuration System}).
3024
3025 All packages in the package store may be @emph{garbage-collected}.
3026 Guix can determine which packages are still referenced by user
3027 profiles, and remove those that are provably no longer referenced
3028 (@pxref{Invoking guix gc}). Users may also explicitly remove old
3029 generations of their profile so that the packages they refer to can be
3030 collected.
3031
3032 @cindex reproducibility
3033 @cindex reproducible builds
3034 Guix takes a @dfn{purely functional} approach to package
3035 management, as described in the introduction (@pxref{Introduction}).
3036 Each @file{/gnu/store} package directory name contains a hash of all the
3037 inputs that were used to build that package---compiler, libraries, build
3038 scripts, etc. This direct correspondence allows users to make sure a
3039 given package installation matches the current state of their
3040 distribution. It also helps maximize @dfn{build reproducibility}:
3041 thanks to the isolated build environments that are used, a given build
3042 is likely to yield bit-identical files when performed on different
3043 machines (@pxref{Invoking guix-daemon, container}).
3044
3045 @cindex substitutes
3046 This foundation allows Guix to support @dfn{transparent binary/source
3047 deployment}. When a pre-built binary for a @file{/gnu/store} item is
3048 available from an external source---a @dfn{substitute}, Guix just
3049 downloads it and unpacks it;
3050 otherwise, it builds the package from source, locally
3051 (@pxref{Substitutes}). Because build results are usually bit-for-bit
3052 reproducible, users do not have to trust servers that provide
3053 substitutes: they can force a local build and @emph{challenge} providers
3054 (@pxref{Invoking guix challenge}).
3055
3056 Control over the build environment is a feature that is also useful for
3057 developers. The @command{guix environment} command allows developers of
3058 a package to quickly set up the right development environment for their
3059 package, without having to manually install the dependencies of the
3060 package into their profile (@pxref{Invoking guix environment}).
3061
3062 @cindex replication, of software environments
3063 @cindex provenance tracking, of software artifacts
3064 All of Guix and its package definitions is version-controlled, and
3065 @command{guix pull} allows you to ``travel in time'' on the history of Guix
3066 itself (@pxref{Invoking guix pull}). This makes it possible to replicate a
3067 Guix instance on a different machine or at a later point in time, which in
3068 turn allows you to @emph{replicate complete software environments}, while
3069 retaining precise @dfn{provenance tracking} of the software.
3070
3071 @node Invoking guix package
3072 @section Invoking @command{guix package}
3073
3074 @cindex installing packages
3075 @cindex removing packages
3076 @cindex package installation
3077 @cindex package removal
3078 @cindex profile
3079 The @command{guix package} command is the tool that allows users to
3080 install, upgrade, and remove packages, as well as rolling back to
3081 previous configurations. These operations work on a user
3082 @dfn{profile}---a directory of installed packages. Each user has a
3083 default profile in @file{$HOME/.guix-profile}.
3084 The command operates only on the user's own profile,
3085 and works with normal user privileges (@pxref{Features}). Its syntax
3086 is:
3087
3088 @example
3089 guix package @var{options}
3090 @end example
3091
3092 @cindex transactions
3093 Primarily, @var{options} specifies the operations to be performed during
3094 the transaction. Upon completion, a new profile is created, but
3095 previous @dfn{generations} of the profile remain available, should the user
3096 want to roll back.
3097
3098 For example, to remove @code{lua} and install @code{guile} and
3099 @code{guile-cairo} in a single transaction:
3100
3101 @example
3102 guix package -r lua -i guile guile-cairo
3103 @end example
3104
3105 @cindex aliases, for @command{guix package}
3106 For your convenience, we also provide the following aliases:
3107
3108 @itemize
3109 @item
3110 @command{guix search} is an alias for @command{guix package -s},
3111 @item
3112 @command{guix install} is an alias for @command{guix package -i},
3113 @item
3114 @command{guix remove} is an alias for @command{guix package -r},
3115 @item
3116 @command{guix upgrade} is an alias for @command{guix package -u},
3117 @item
3118 and @command{guix show} is an alias for @command{guix package --show=}.
3119 @end itemize
3120
3121 These aliases are less expressive than @command{guix package} and provide
3122 fewer options, so in some cases you'll probably want to use @command{guix
3123 package} directly.
3124
3125 @command{guix package} also supports a @dfn{declarative approach}
3126 whereby the user specifies the exact set of packages to be available and
3127 passes it @i{via} the @option{--manifest} option
3128 (@pxref{profile-manifest, @option{--manifest}}).
3129
3130 @cindex profile
3131 For each user, a symlink to the user's default profile is automatically
3132 created in @file{$HOME/.guix-profile}. This symlink always points to the
3133 current generation of the user's default profile. Thus, users can add
3134 @file{$HOME/.guix-profile/bin} to their @env{PATH} environment
3135 variable, and so on.
3136 @cindex search paths
3137 If you are not using Guix System, consider adding the
3138 following lines to your @file{~/.bash_profile} (@pxref{Bash Startup
3139 Files,,, bash, The GNU Bash Reference Manual}) so that newly-spawned
3140 shells get all the right environment variable definitions:
3141
3142 @example
3143 GUIX_PROFILE="$HOME/.guix-profile" ; \
3144 source "$GUIX_PROFILE/etc/profile"
3145 @end example
3146
3147 In a multi-user setup, user profiles are stored in a place registered as
3148 a @dfn{garbage-collector root}, which @file{$HOME/.guix-profile} points
3149 to (@pxref{Invoking guix gc}). That directory is normally
3150 @code{@var{localstatedir}/guix/profiles/per-user/@var{user}}, where
3151 @var{localstatedir} is the value passed to @code{configure} as
3152 @option{--localstatedir}, and @var{user} is the user name. The
3153 @file{per-user} directory is created when @command{guix-daemon} is
3154 started, and the @var{user} sub-directory is created by @command{guix
3155 package}.
3156
3157 The @var{options} can be among the following:
3158
3159 @table @code
3160
3161 @item --install=@var{package} @dots{}
3162 @itemx -i @var{package} @dots{}
3163 Install the specified @var{package}s.
3164
3165 Each @var{package} may specify either a simple package name, such as
3166 @code{guile}, or a package name followed by an at-sign and version number,
3167 such as @code{guile@@1.8.8} or simply @code{guile@@1.8} (in the latter
3168 case, the newest version prefixed by @code{1.8} is selected).
3169
3170 If no version number is specified, the
3171 newest available version will be selected. In addition, @var{package}
3172 may contain a colon, followed by the name of one of the outputs of the
3173 package, as in @code{gcc:doc} or @code{binutils@@2.22:lib}
3174 (@pxref{Packages with Multiple Outputs}). Packages with a corresponding
3175 name (and optionally version) are searched for among the GNU
3176 distribution modules (@pxref{Package Modules}).
3177
3178 @cindex propagated inputs
3179 Sometimes packages have @dfn{propagated inputs}: these are dependencies
3180 that automatically get installed along with the required package
3181 (@pxref{package-propagated-inputs, @code{propagated-inputs} in
3182 @code{package} objects}, for information about propagated inputs in
3183 package definitions).
3184
3185 @anchor{package-cmd-propagated-inputs}
3186 An example is the GNU MPC library: its C header files refer to those of
3187 the GNU MPFR library, which in turn refer to those of the GMP library.
3188 Thus, when installing MPC, the MPFR and GMP libraries also get installed
3189 in the profile; removing MPC also removes MPFR and GMP---unless they had
3190 also been explicitly installed by the user.
3191
3192 Besides, packages sometimes rely on the definition of environment
3193 variables for their search paths (see explanation of
3194 @option{--search-paths} below). Any missing or possibly incorrect
3195 environment variable definitions are reported here.
3196
3197 @item --install-from-expression=@var{exp}
3198 @itemx -e @var{exp}
3199 Install the package @var{exp} evaluates to.
3200
3201 @var{exp} must be a Scheme expression that evaluates to a
3202 @code{<package>} object. This option is notably useful to disambiguate
3203 between same-named variants of a package, with expressions such as
3204 @code{(@@ (gnu packages base) guile-final)}.
3205
3206 Note that this option installs the first output of the specified
3207 package, which may be insufficient when needing a specific output of a
3208 multiple-output package.
3209
3210 @item --install-from-file=@var{file}
3211 @itemx -f @var{file}
3212 Install the package that the code within @var{file} evaluates to.
3213
3214 As an example, @var{file} might contain a definition like this
3215 (@pxref{Defining Packages}):
3216
3217 @lisp
3218 @include package-hello.scm
3219 @end lisp
3220
3221 Developers may find it useful to include such a @file{guix.scm} file
3222 in the root of their project source tree that can be used to test
3223 development snapshots and create reproducible development environments
3224 (@pxref{Invoking guix environment}).
3225
3226 The @var{file} may also contain a JSON representation of one or more
3227 package definitions. Running @code{guix package -f} on
3228 @file{hello.json} with the following contents would result in installing
3229 the package @code{greeter} after building @code{myhello}:
3230
3231 @example
3232 @verbatiminclude package-hello.json
3233 @end example
3234
3235 @item --remove=@var{package} @dots{}
3236 @itemx -r @var{package} @dots{}
3237 Remove the specified @var{package}s.
3238
3239 As for @option{--install}, each @var{package} may specify a version number
3240 and/or output name in addition to the package name. For instance,
3241 @samp{-r glibc:debug} would remove the @code{debug} output of
3242 @code{glibc}.
3243
3244 @item --upgrade[=@var{regexp} @dots{}]
3245 @itemx -u [@var{regexp} @dots{}]
3246 @cindex upgrading packages
3247 Upgrade all the installed packages. If one or more @var{regexp}s are
3248 specified, upgrade only installed packages whose name matches a
3249 @var{regexp}. Also see the @option{--do-not-upgrade} option below.
3250
3251 Note that this upgrades package to the latest version of packages found
3252 in the distribution currently installed. To update your distribution,
3253 you should regularly run @command{guix pull} (@pxref{Invoking guix
3254 pull}).
3255
3256 @cindex package transformations, upgrades
3257 When upgrading, package transformations that were originally applied
3258 when creating the profile are automatically re-applied (@pxref{Package
3259 Transformation Options}). For example, assume you first installed Emacs
3260 from the tip of its development branch with:
3261
3262 @example
3263 guix install emacs-next --with-branch=emacs-next=master
3264 @end example
3265
3266 Next time you run @command{guix upgrade}, Guix will again pull the tip
3267 of the Emacs development branch and build @code{emacs-next} from that
3268 checkout.
3269
3270 Note that transformation options such as @option{--with-branch} and
3271 @option{--with-source} depend on external state; it is up to you to
3272 ensure that they work as expected. You can also discard a
3273 transformations that apply to a package by running:
3274
3275 @example
3276 guix install @var{package}
3277 @end example
3278
3279 @item --do-not-upgrade[=@var{regexp} @dots{}]
3280 When used together with the @option{--upgrade} option, do @emph{not}
3281 upgrade any packages whose name matches a @var{regexp}. For example, to
3282 upgrade all packages in the current profile except those containing the
3283 substring ``emacs'':
3284
3285 @example
3286 $ guix package --upgrade . --do-not-upgrade emacs
3287 @end example
3288
3289 @item @anchor{profile-manifest}--manifest=@var{file}
3290 @itemx -m @var{file}
3291 @cindex profile declaration
3292 @cindex profile manifest
3293 Create a new generation of the profile from the manifest object
3294 returned by the Scheme code in @var{file}. This option can be repeated
3295 several times, in which case the manifests are concatenated.
3296
3297 This allows you to @emph{declare} the profile's contents rather than
3298 constructing it through a sequence of @option{--install} and similar
3299 commands. The advantage is that @var{file} can be put under version
3300 control, copied to different machines to reproduce the same profile, and
3301 so on.
3302
3303 @c FIXME: Add reference to (guix profile) documentation when available.
3304 @var{file} must return a @dfn{manifest} object, which is roughly a list
3305 of packages:
3306
3307 @findex packages->manifest
3308 @lisp
3309 (use-package-modules guile emacs)
3310
3311 (packages->manifest
3312 (list emacs
3313 guile-2.0
3314 ;; Use a specific package output.
3315 (list guile-2.0 "debug")))
3316 @end lisp
3317
3318 @findex specifications->manifest
3319 In this example we have to know which modules define the @code{emacs}
3320 and @code{guile-2.0} variables to provide the right
3321 @code{use-package-modules} line, which can be cumbersome. We can
3322 instead provide regular package specifications and let
3323 @code{specifications->manifest} look up the corresponding package
3324 objects, like this:
3325
3326 @lisp
3327 (specifications->manifest
3328 '("emacs" "guile@@2.2" "guile@@2.2:debug"))
3329 @end lisp
3330
3331 @xref{export-manifest, @option{--export-manifest}}, to learn how to
3332 obtain a manifest file from an existing profile.
3333
3334 @item --roll-back
3335 @cindex rolling back
3336 @cindex undoing transactions
3337 @cindex transactions, undoing
3338 Roll back to the previous @dfn{generation} of the profile---i.e., undo
3339 the last transaction.
3340
3341 When combined with options such as @option{--install}, roll back occurs
3342 before any other actions.
3343
3344 When rolling back from the first generation that actually contains
3345 installed packages, the profile is made to point to the @dfn{zeroth
3346 generation}, which contains no files apart from its own metadata.
3347
3348 After having rolled back, installing, removing, or upgrading packages
3349 overwrites previous future generations. Thus, the history of the
3350 generations in a profile is always linear.
3351
3352 @item --switch-generation=@var{pattern}
3353 @itemx -S @var{pattern}
3354 @cindex generations
3355 Switch to a particular generation defined by @var{pattern}.
3356
3357 @var{pattern} may be either a generation number or a number prefixed
3358 with ``+'' or ``-''. The latter means: move forward/backward by a
3359 specified number of generations. For example, if you want to return to
3360 the latest generation after @option{--roll-back}, use
3361 @option{--switch-generation=+1}.
3362
3363 The difference between @option{--roll-back} and
3364 @option{--switch-generation=-1} is that @option{--switch-generation} will
3365 not make a zeroth generation, so if a specified generation does not
3366 exist, the current generation will not be changed.
3367
3368 @item --search-paths[=@var{kind}]
3369 @cindex search paths
3370 Report environment variable definitions, in Bash syntax, that may be
3371 needed in order to use the set of installed packages. These environment
3372 variables are used to specify @dfn{search paths} for files used by some
3373 of the installed packages.
3374
3375 For example, GCC needs the @env{CPATH} and @env{LIBRARY_PATH}
3376 environment variables to be defined so it can look for headers and
3377 libraries in the user's profile (@pxref{Environment Variables,,, gcc,
3378 Using the GNU Compiler Collection (GCC)}). If GCC and, say, the C
3379 library are installed in the profile, then @option{--search-paths} will
3380 suggest setting these variables to @file{@var{profile}/include} and
3381 @file{@var{profile}/lib}, respectively.
3382
3383 The typical use case is to define these environment variables in the
3384 shell:
3385
3386 @example
3387 $ eval `guix package --search-paths`
3388 @end example
3389
3390 @var{kind} may be one of @code{exact}, @code{prefix}, or @code{suffix},
3391 meaning that the returned environment variable definitions will either
3392 be exact settings, or prefixes or suffixes of the current value of these
3393 variables. When omitted, @var{kind} defaults to @code{exact}.
3394
3395 This option can also be used to compute the @emph{combined} search paths
3396 of several profiles. Consider this example:
3397
3398 @example
3399 $ guix package -p foo -i guile
3400 $ guix package -p bar -i guile-json
3401 $ guix package -p foo -p bar --search-paths
3402 @end example
3403
3404 The last command above reports about the @env{GUILE_LOAD_PATH}
3405 variable, even though, taken individually, neither @file{foo} nor
3406 @file{bar} would lead to that recommendation.
3407
3408
3409 @cindex profile, choosing
3410 @item --profile=@var{profile}
3411 @itemx -p @var{profile}
3412 Use @var{profile} instead of the user's default profile.
3413
3414 @var{profile} must be the name of a file that will be created upon
3415 completion. Concretely, @var{profile} will be a mere symbolic link
3416 (``symlink'') pointing to the actual profile where packages are
3417 installed:
3418
3419 @example
3420 $ guix install hello -p ~/code/my-profile
3421 @dots{}
3422 $ ~/code/my-profile/bin/hello
3423 Hello, world!
3424 @end example
3425
3426 All it takes to get rid of the profile is to remove this symlink and its
3427 siblings that point to specific generations:
3428
3429 @example
3430 $ rm ~/code/my-profile ~/code/my-profile-*-link
3431 @end example
3432
3433 @item --list-profiles
3434 List all the user's profiles:
3435
3436 @example
3437 $ guix package --list-profiles
3438 /home/charlie/.guix-profile
3439 /home/charlie/code/my-profile
3440 /home/charlie/code/devel-profile
3441 /home/charlie/tmp/test
3442 @end example
3443
3444 When running as root, list all the profiles of all the users.
3445
3446 @cindex collisions, in a profile
3447 @cindex colliding packages in profiles
3448 @cindex profile collisions
3449 @item --allow-collisions
3450 Allow colliding packages in the new profile. Use at your own risk!
3451
3452 By default, @command{guix package} reports as an error @dfn{collisions}
3453 in the profile. Collisions happen when two or more different versions
3454 or variants of a given package end up in the profile.
3455
3456 @item --bootstrap
3457 Use the bootstrap Guile to build the profile. This option is only
3458 useful to distribution developers.
3459
3460 @end table
3461
3462 In addition to these actions, @command{guix package} supports the
3463 following options to query the current state of a profile, or the
3464 availability of packages:
3465
3466 @table @option
3467
3468 @item --search=@var{regexp}
3469 @itemx -s @var{regexp}
3470 @anchor{guix-search}
3471 @cindex searching for packages
3472 List the available packages whose name, synopsis, or description matches
3473 @var{regexp} (in a case-insensitive fashion), sorted by relevance.
3474 Print all the metadata of matching packages in
3475 @code{recutils} format (@pxref{Top, GNU recutils databases,, recutils,
3476 GNU recutils manual}).
3477
3478 This allows specific fields to be extracted using the @command{recsel}
3479 command, for instance:
3480
3481 @example
3482 $ guix package -s malloc | recsel -p name,version,relevance
3483 name: jemalloc
3484 version: 4.5.0
3485 relevance: 6
3486
3487 name: glibc
3488 version: 2.25
3489 relevance: 1
3490
3491 name: libgc
3492 version: 7.6.0
3493 relevance: 1
3494 @end example
3495
3496 Similarly, to show the name of all the packages available under the
3497 terms of the GNU@tie{}LGPL version 3:
3498
3499 @example
3500 $ guix package -s "" | recsel -p name -e 'license ~ "LGPL 3"'
3501 name: elfutils
3502
3503 name: gmp
3504 @dots{}
3505 @end example
3506
3507 It is also possible to refine search results using several @code{-s} flags to
3508 @command{guix package}, or several arguments to @command{guix search}. For
3509 example, the following command returns a list of board games (this time using
3510 the @command{guix search} alias):
3511
3512 @example
3513 $ guix search '\<board\>' game | recsel -p name
3514 name: gnubg
3515 @dots{}
3516 @end example
3517
3518 If we were to omit @code{-s game}, we would also get software packages
3519 that deal with printed circuit boards; removing the angle brackets
3520 around @code{board} would further add packages that have to do with
3521 keyboards.
3522
3523 And now for a more elaborate example. The following command searches
3524 for cryptographic libraries, filters out Haskell, Perl, Python, and Ruby
3525 libraries, and prints the name and synopsis of the matching packages:
3526
3527 @example
3528 $ guix search crypto library | \
3529 recsel -e '! (name ~ "^(ghc|perl|python|ruby)")' -p name,synopsis
3530 @end example
3531
3532 @noindent
3533 @xref{Selection Expressions,,, recutils, GNU recutils manual}, for more
3534 information on @dfn{selection expressions} for @code{recsel -e}.
3535
3536 @item --show=@var{package}
3537 Show details about @var{package}, taken from the list of available packages, in
3538 @code{recutils} format (@pxref{Top, GNU recutils databases,, recutils, GNU
3539 recutils manual}).
3540
3541 @example
3542 $ guix package --show=python | recsel -p name,version
3543 name: python
3544 version: 2.7.6
3545
3546 name: python
3547 version: 3.3.5
3548 @end example
3549
3550 You may also specify the full name of a package to only get details about a
3551 specific version of it (this time using the @command{guix show} alias):
3552 @example
3553 $ guix show python@@3.4 | recsel -p name,version
3554 name: python
3555 version: 3.4.3
3556 @end example
3557
3558
3559
3560 @item --list-installed[=@var{regexp}]
3561 @itemx -I [@var{regexp}]
3562 List the currently installed packages in the specified profile, with the
3563 most recently installed packages shown last. When @var{regexp} is
3564 specified, list only installed packages whose name matches @var{regexp}.
3565
3566 For each installed package, print the following items, separated by
3567 tabs: the package name, its version string, the part of the package that
3568 is installed (for instance, @code{out} for the default output,
3569 @code{include} for its headers, etc.), and the path of this package in
3570 the store.
3571
3572 @item --list-available[=@var{regexp}]
3573 @itemx -A [@var{regexp}]
3574 List packages currently available in the distribution for this system
3575 (@pxref{GNU Distribution}). When @var{regexp} is specified, list only
3576 available packages whose name matches @var{regexp}.
3577
3578 For each package, print the following items separated by tabs: its name,
3579 its version string, the parts of the package (@pxref{Packages with
3580 Multiple Outputs}), and the source location of its definition.
3581
3582 @item --list-generations[=@var{pattern}]
3583 @itemx -l [@var{pattern}]
3584 @cindex generations
3585 Return a list of generations along with their creation dates; for each
3586 generation, show the installed packages, with the most recently
3587 installed packages shown last. Note that the zeroth generation is never
3588 shown.
3589
3590 For each installed package, print the following items, separated by
3591 tabs: the name of a package, its version string, the part of the package
3592 that is installed (@pxref{Packages with Multiple Outputs}), and the
3593 location of this package in the store.
3594
3595 When @var{pattern} is used, the command returns only matching
3596 generations. Valid patterns include:
3597
3598 @itemize
3599 @item @emph{Integers and comma-separated integers}. Both patterns denote
3600 generation numbers. For instance, @option{--list-generations=1} returns
3601 the first one.
3602
3603 And @option{--list-generations=1,8,2} outputs three generations in the
3604 specified order. Neither spaces nor trailing commas are allowed.
3605
3606 @item @emph{Ranges}. @option{--list-generations=2..9} prints the
3607 specified generations and everything in between. Note that the start of
3608 a range must be smaller than its end.
3609
3610 It is also possible to omit the endpoint. For example,
3611 @option{--list-generations=2..}, returns all generations starting from the
3612 second one.
3613
3614 @item @emph{Durations}. You can also get the last @emph{N}@tie{}days, weeks,
3615 or months by passing an integer along with the first letter of the
3616 duration. For example, @option{--list-generations=20d} lists generations
3617 that are up to 20 days old.
3618 @end itemize
3619
3620 @item --delete-generations[=@var{pattern}]
3621 @itemx -d [@var{pattern}]
3622 When @var{pattern} is omitted, delete all generations except the current
3623 one.
3624
3625 This command accepts the same patterns as @option{--list-generations}.
3626 When @var{pattern} is specified, delete the matching generations. When
3627 @var{pattern} specifies a duration, generations @emph{older} than the
3628 specified duration match. For instance, @option{--delete-generations=1m}
3629 deletes generations that are more than one month old.
3630
3631 If the current generation matches, it is @emph{not} deleted. Also, the
3632 zeroth generation is never deleted.
3633
3634 Note that deleting generations prevents rolling back to them.
3635 Consequently, this command must be used with care.
3636
3637 @cindex manifest, exporting
3638 @anchor{export-manifest}
3639 @item --export-manifest
3640 Write to standard output a manifest suitable for @option{--manifest}
3641 corresponding to the chosen profile(s).
3642
3643 This option is meant to help you migrate from the ``imperative''
3644 operating mode---running @command{guix install}, @command{guix upgrade},
3645 etc.---to the declarative mode that @option{--manifest} offers.
3646
3647 Be aware that the resulting manifest @emph{approximates} what your
3648 profile actually contains; for instance, depending on how your profile
3649 was created, it can refer to packages or package versions that are not
3650 exactly what you specified.
3651
3652 Keep in mind that a manifest is purely symbolic: it only contains
3653 package names and possibly versions, and their meaning varies over time.
3654 If you wish to ``pin'' channels to the revisions that were used to build
3655 the profile(s), see @option{--export-channels} below.
3656
3657 @cindex pinning, channel revisions of a profile
3658 @item --export-channels
3659 Write to standard output the list of channels used by the chosen
3660 profile(s), in a format suitable for @command{guix pull --channels} or
3661 @command{guix time-machine --channels} (@pxref{Channels}).
3662
3663 Together with @option{--export-manifest}, this option provides
3664 information allowing you to replicate the current profile
3665 (@pxref{Replicating Guix}).
3666
3667 However, note that the output of this command @emph{approximates} what
3668 was actually used to build this profile. In particular, a single
3669 profile might have been built from several different revisions of the
3670 same channel. In that case, @option{--export-manifest} chooses the last
3671 one and writes the list of other revisions in a comment. If you really
3672 need to pick packages from different channel revisions, you can use
3673 inferiors in your manifest to do so (@pxref{Inferiors}).
3674
3675 Together with @option{--export-manifest}, this is a good starting point
3676 if you are willing to migrate from the ``imperative'' model to the fully
3677 declarative model consisting of a manifest file along with a channels
3678 file pinning the exact channel revision(s) you want.
3679 @end table
3680
3681 Finally, since @command{guix package} may actually start build
3682 processes, it supports all the common build options (@pxref{Common Build
3683 Options}). It also supports package transformation options, such as
3684 @option{--with-source}, and preserves them across upgrades
3685 (@pxref{Package Transformation Options}).
3686
3687 @node Substitutes
3688 @section Substitutes
3689
3690 @cindex substitutes
3691 @cindex pre-built binaries
3692 Guix supports transparent source/binary deployment, which means that it
3693 can either build things locally, or download pre-built items from a
3694 server, or both. We call these pre-built items @dfn{substitutes}---they
3695 are substitutes for local build results. In many cases, downloading a
3696 substitute is much faster than building things locally.
3697
3698 Substitutes can be anything resulting from a derivation build
3699 (@pxref{Derivations}). Of course, in the common case, they are
3700 pre-built package binaries, but source tarballs, for instance, which
3701 also result from derivation builds, can be available as substitutes.
3702
3703 @menu
3704 * Official Substitute Server:: One particular source of substitutes.
3705 * Substitute Server Authorization:: How to enable or disable substitutes.
3706 * Getting Substitutes from Other Servers:: Substitute diversity.
3707 * Substitute Authentication:: How Guix verifies substitutes.
3708 * Proxy Settings:: How to get substitutes via proxy.
3709 * Substitution Failure:: What happens when substitution fails.
3710 * On Trusting Binaries:: How can you trust that binary blob?
3711 @end menu
3712
3713 @node Official Substitute Server
3714 @subsection Official Substitute Server
3715
3716 @cindex build farm
3717 The @code{@value{SUBSTITUTE-SERVER}} server is a front-end to an official build farm
3718 that builds packages from Guix continuously for some
3719 architectures, and makes them available as substitutes. This is the
3720 default source of substitutes; it can be overridden by passing the
3721 @option{--substitute-urls} option either to @command{guix-daemon}
3722 (@pxref{daemon-substitute-urls,, @code{guix-daemon --substitute-urls}})
3723 or to client tools such as @command{guix package}
3724 (@pxref{client-substitute-urls,, client @option{--substitute-urls}
3725 option}).
3726
3727 Substitute URLs can be either HTTP or HTTPS.
3728 HTTPS is recommended because communications are encrypted; conversely,
3729 using HTTP makes all communications visible to an eavesdropper, who
3730 could use the information gathered to determine, for instance, whether
3731 your system has unpatched security vulnerabilities.
3732
3733 Substitutes from the official build farm are enabled by default when
3734 using Guix System (@pxref{GNU Distribution}). However,
3735 they are disabled by default when using Guix on a foreign distribution,
3736 unless you have explicitly enabled them via one of the recommended
3737 installation steps (@pxref{Installation}). The following paragraphs
3738 describe how to enable or disable substitutes for the official build
3739 farm; the same procedure can also be used to enable substitutes for any
3740 other substitute server.
3741
3742 @node Substitute Server Authorization
3743 @subsection Substitute Server Authorization
3744
3745 @cindex security
3746 @cindex substitutes, authorization thereof
3747 @cindex access control list (ACL), for substitutes
3748 @cindex ACL (access control list), for substitutes
3749 To allow Guix to download substitutes from @code{@value{SUBSTITUTE-SERVER}} or a
3750 mirror thereof, you
3751 must add its public key to the access control list (ACL) of archive
3752 imports, using the @command{guix archive} command (@pxref{Invoking guix
3753 archive}). Doing so implies that you trust @code{@value{SUBSTITUTE-SERVER}} to not
3754 be compromised and to serve genuine substitutes.
3755
3756 @quotation Note
3757 If you are using Guix System, you can skip this section: Guix System
3758 authorizes substitutes from @code{@value{SUBSTITUTE-SERVER}} by default.
3759 @end quotation
3760
3761 The public key for @code{@value{SUBSTITUTE-SERVER}} is installed along with Guix, in
3762 @code{@var{prefix}/share/guix/@value{SUBSTITUTE-SERVER}.pub}, where @var{prefix} is
3763 the installation prefix of Guix. If you installed Guix from source,
3764 make sure you checked the GPG signature of
3765 @file{guix-@value{VERSION}.tar.gz}, which contains this public key file.
3766 Then, you can run something like this:
3767
3768 @example
3769 # guix archive --authorize < @var{prefix}/share/guix/@value{SUBSTITUTE-SERVER}.pub
3770 @end example
3771
3772 Once this is in place, the output of a command like @code{guix build}
3773 should change from something like:
3774
3775 @example
3776 $ guix build emacs --dry-run
3777 The following derivations would be built:
3778 /gnu/store/yr7bnx8xwcayd6j95r2clmkdl1qh688w-emacs-24.3.drv
3779 /gnu/store/x8qsh1hlhgjx6cwsjyvybnfv2i37z23w-dbus-1.6.4.tar.gz.drv
3780 /gnu/store/1ixwp12fl950d15h2cj11c73733jay0z-alsa-lib-1.0.27.1.tar.bz2.drv
3781 /gnu/store/nlma1pw0p603fpfiqy7kn4zm105r5dmw-util-linux-2.21.drv
3782 @dots{}
3783 @end example
3784
3785 @noindent
3786 to something like:
3787
3788 @example
3789 $ guix build emacs --dry-run
3790 112.3 MB would be downloaded:
3791 /gnu/store/pk3n22lbq6ydamyymqkkz7i69wiwjiwi-emacs-24.3
3792 /gnu/store/2ygn4ncnhrpr61rssa6z0d9x22si0va3-libjpeg-8d
3793 /gnu/store/71yz6lgx4dazma9dwn2mcjxaah9w77jq-cairo-1.12.16
3794 /gnu/store/7zdhgp0n1518lvfn8mb96sxqfmvqrl7v-libxrender-0.9.7
3795 @dots{}
3796 @end example
3797
3798 @noindent
3799 The text changed from ``The following derivations would be built'' to
3800 ``112.3 MB would be downloaded''. This indicates that substitutes from
3801 @code{@value{SUBSTITUTE-SERVER}} are usable and will be downloaded, when
3802 possible, for future builds.
3803
3804 @cindex substitutes, how to disable
3805 The substitute mechanism can be disabled globally by running
3806 @code{guix-daemon} with @option{--no-substitutes} (@pxref{Invoking
3807 guix-daemon}). It can also be disabled temporarily by passing the
3808 @option{--no-substitutes} option to @command{guix package},
3809 @command{guix build}, and other command-line tools.
3810
3811 @node Getting Substitutes from Other Servers
3812 @subsection Getting Substitutes from Other Servers
3813
3814 @cindex substitute servers, adding more
3815 Guix can look up and fetch substitutes from several servers. This is
3816 useful when you are using packages from additional channels for which
3817 the official server does not have substitutes but another server
3818 provides them. Another situation where this is useful is when you would
3819 prefer to download from your organization's substitute server, resorting
3820 to the official server only as a fallback or dismissing it altogether.
3821
3822 You can give Guix a list of substitute server URLs and it will check
3823 them in the specified order. You also need to explicitly authorize the
3824 public keys of substitute servers to instruct Guix to accept the
3825 substitutes they sign.
3826
3827 On Guix System, this is achieved by modifying the configuration of the
3828 @code{guix} service. Since the @code{guix} service is part of the
3829 default lists of services, @code{%base-services} and
3830 @code{%desktop-services}, you can use @code{modify-services} to change
3831 its configuration and add the URLs and substitute keys that you want
3832 (@pxref{Service Reference, @code{modify-services}}).
3833
3834 As an example, suppose you want to fetch substitutes from
3835 @code{guix.example.org} and to authorize the signing key of that server,
3836 in addition to the default @code{@value{SUBSTITUTE-SERVER}}. The
3837 resulting operating system configuration will look something like:
3838
3839 @lisp
3840 (operating-system
3841 ;; @dots{}
3842 (services
3843 ;; Assume we're starting from '%desktop-services'. Replace it
3844 ;; with the list of services you're actually using.
3845 (modify-services %desktop-services
3846 (guix-service-type config =>
3847 (guix-configuration
3848 (inherit config)
3849 (substitute-urls
3850 (append (list "https://guix.example.org")
3851 %default-substitute-urls))
3852 (authorized-keys
3853 (append (list (local-file "./key.pub"))
3854 %default-authorized-guix-keys)))))))
3855 @end lisp
3856
3857 This assumes that the file @file{key.pub} contains the signing key of
3858 @code{guix.example.org}. With this change in place in your operating
3859 system configuration file (say @file{/etc/config.scm}), you can
3860 reconfigure and restart the @code{guix-daemon} service or reboot so the
3861 changes take effect:
3862
3863 @example
3864 $ sudo guix system reconfigure /etc/config.scm
3865 $ sudo herd restart guix-daemon
3866 @end example
3867
3868 If you're running Guix on a ``foreign distro'', you would instead take
3869 the following steps to get substitutes from additional servers:
3870
3871 @enumerate
3872 @item
3873 Edit the service configuration file for @code{guix-daemon}; when using
3874 systemd, this is normally
3875 @file{/etc/systemd/system/guix-daemon.service}. Add the
3876 @option{--substitute-urls} option on the @command{guix-daemon} command
3877 line and list the URLs of interest (@pxref{daemon-substitute-urls,
3878 @code{guix-daemon --substitute-urls}}):
3879
3880 @example
3881 @dots{} --substitute-urls='https://guix.example.org https://@value{SUBSTITUTE-SERVER}'
3882 @end example
3883
3884 @item
3885 Restart the daemon. For systemd, it goes like this:
3886
3887 @example
3888 systemctl daemon-reload
3889 systemctl restart guix-daemon.service
3890 @end example
3891
3892 @item
3893 Authorize the key of the new server (@pxref{Invoking guix archive}):
3894
3895 @example
3896 guix archive --authorize < key.pub
3897 @end example
3898
3899 Again this assumes @file{key.pub} contains the public key that
3900 @code{guix.example.org} uses to sign substitutes.
3901 @end enumerate
3902
3903 Now you're all set! Substitutes will be preferably taken from
3904 @code{https://guix.example.org}, using @code{@value{SUBSTITUTE-SERVER}}
3905 as a fallback. Of course you can list as many substitute servers as you
3906 like, with the caveat that substitute lookup can be slowed down if too
3907 many servers need to be contacted.
3908
3909 Note that there are also situations where one may want to add the URL of
3910 a substitute server @emph{without} authorizing its key.
3911 @xref{Substitute Authentication}, to understand this fine point.
3912
3913 @node Substitute Authentication
3914 @subsection Substitute Authentication
3915
3916 @cindex digital signatures
3917 Guix detects and raises an error when attempting to use a substitute
3918 that has been tampered with. Likewise, it ignores substitutes that are
3919 not signed, or that are not signed by one of the keys listed in the ACL.
3920
3921 There is one exception though: if an unauthorized server provides
3922 substitutes that are @emph{bit-for-bit identical} to those provided by
3923 an authorized server, then the unauthorized server becomes eligible for
3924 downloads. For example, assume we have chosen two substitute servers
3925 with this option:
3926
3927 @example
3928 --substitute-urls="https://a.example.org https://b.example.org"
3929 @end example
3930
3931 @noindent
3932 @cindex reproducible builds
3933 If the ACL contains only the key for @samp{b.example.org}, and if
3934 @samp{a.example.org} happens to serve the @emph{exact same} substitutes,
3935 then Guix will download substitutes from @samp{a.example.org} because it
3936 comes first in the list and can be considered a mirror of
3937 @samp{b.example.org}. In practice, independent build machines usually
3938 produce the same binaries, thanks to bit-reproducible builds (see
3939 below).
3940
3941 When using HTTPS, the server's X.509 certificate is @emph{not} validated
3942 (in other words, the server is not authenticated), contrary to what
3943 HTTPS clients such as Web browsers usually do. This is because Guix
3944 authenticates substitute information itself, as explained above, which
3945 is what we care about (whereas X.509 certificates are about
3946 authenticating bindings between domain names and public keys).
3947
3948 @node Proxy Settings
3949 @subsection Proxy Settings
3950
3951 @vindex http_proxy
3952 @vindex https_proxy
3953 Substitutes are downloaded over HTTP or HTTPS@. The @env{http_proxy} and
3954 @env{https_proxy} environment variables can be set in the environment of
3955 @command{guix-daemon} and are honored for downloads of substitutes.
3956 Note that the value of those environment variables in the environment
3957 where @command{guix build}, @command{guix package}, and other client
3958 commands are run has @emph{absolutely no effect}.
3959
3960 @node Substitution Failure
3961 @subsection Substitution Failure
3962
3963 Even when a substitute for a derivation is available, sometimes the
3964 substitution attempt will fail. This can happen for a variety of
3965 reasons: the substitute server might be offline, the substitute may
3966 recently have been deleted, the connection might have been interrupted,
3967 etc.
3968
3969 When substitutes are enabled and a substitute for a derivation is
3970 available, but the substitution attempt fails, Guix will attempt to
3971 build the derivation locally depending on whether or not
3972 @option{--fallback} was given (@pxref{fallback-option,, common build
3973 option @option{--fallback}}). Specifically, if @option{--fallback} was
3974 omitted, then no local build will be performed, and the derivation is
3975 considered to have failed. However, if @option{--fallback} was given,
3976 then Guix will attempt to build the derivation locally, and the success
3977 or failure of the derivation depends on the success or failure of the
3978 local build. Note that when substitutes are disabled or no substitute
3979 is available for the derivation in question, a local build will
3980 @emph{always} be performed, regardless of whether or not
3981 @option{--fallback} was given.
3982
3983 To get an idea of how many substitutes are available right now, you can
3984 try running the @command{guix weather} command (@pxref{Invoking guix
3985 weather}). This command provides statistics on the substitutes provided
3986 by a server.
3987
3988 @node On Trusting Binaries
3989 @subsection On Trusting Binaries
3990
3991 @cindex trust, of pre-built binaries
3992 Today, each individual's control over their own computing is at the
3993 mercy of institutions, corporations, and groups with enough power and
3994 determination to subvert the computing infrastructure and exploit its
3995 weaknesses. While using @code{@value{SUBSTITUTE-SERVER}} substitutes can be
3996 convenient, we encourage users to also build on their own, or even run
3997 their own build farm, such that @code{@value{SUBSTITUTE-SERVER}} is less of an
3998 interesting target. One way to help is by publishing the software you
3999 build using @command{guix publish} so that others have one more choice
4000 of server to download substitutes from (@pxref{Invoking guix publish}).
4001
4002 Guix has the foundations to maximize build reproducibility
4003 (@pxref{Features}). In most cases, independent builds of a given
4004 package or derivation should yield bit-identical results. Thus, through
4005 a diverse set of independent package builds, we can strengthen the
4006 integrity of our systems. The @command{guix challenge} command aims to
4007 help users assess substitute servers, and to assist developers in
4008 finding out about non-deterministic package builds (@pxref{Invoking guix
4009 challenge}). Similarly, the @option{--check} option of @command{guix
4010 build} allows users to check whether previously-installed substitutes
4011 are genuine by rebuilding them locally (@pxref{build-check,
4012 @command{guix build --check}}).
4013
4014 In the future, we want Guix to have support to publish and retrieve
4015 binaries to/from other users, in a peer-to-peer fashion. If you would
4016 like to discuss this project, join us on @email{guix-devel@@gnu.org}.
4017
4018 @node Packages with Multiple Outputs
4019 @section Packages with Multiple Outputs
4020
4021 @cindex multiple-output packages
4022 @cindex package outputs
4023 @cindex outputs
4024
4025 Often, packages defined in Guix have a single @dfn{output}---i.e., the
4026 source package leads to exactly one directory in the store. When running
4027 @command{guix install glibc}, one installs the default output of the
4028 GNU libc package; the default output is called @code{out}, but its name
4029 can be omitted as shown in this command. In this particular case, the
4030 default output of @code{glibc} contains all the C header files, shared
4031 libraries, static libraries, Info documentation, and other supporting
4032 files.
4033
4034 Sometimes it is more appropriate to separate the various types of files
4035 produced from a single source package into separate outputs. For
4036 instance, the GLib C library (used by GTK+ and related packages)
4037 installs more than 20 MiB of reference documentation as HTML pages.
4038 To save space for users who do not need it, the documentation goes to a
4039 separate output, called @code{doc}. To install the main GLib output,
4040 which contains everything but the documentation, one would run:
4041
4042 @example
4043 guix install glib
4044 @end example
4045
4046 @cindex documentation
4047 The command to install its documentation is:
4048
4049 @example
4050 guix install glib:doc
4051 @end example
4052
4053 Some packages install programs with different ``dependency footprints''.
4054 For instance, the WordNet package installs both command-line tools and
4055 graphical user interfaces (GUIs). The former depend solely on the C
4056 library, whereas the latter depend on Tcl/Tk and the underlying X
4057 libraries. In this case, we leave the command-line tools in the default
4058 output, whereas the GUIs are in a separate output. This allows users
4059 who do not need the GUIs to save space. The @command{guix size} command
4060 can help find out about such situations (@pxref{Invoking guix size}).
4061 @command{guix graph} can also be helpful (@pxref{Invoking guix graph}).
4062
4063 There are several such multiple-output packages in the GNU distribution.
4064 Other conventional output names include @code{lib} for libraries and
4065 possibly header files, @code{bin} for stand-alone programs, and
4066 @code{debug} for debugging information (@pxref{Installing Debugging
4067 Files}). The outputs of a packages are listed in the third column of
4068 the output of @command{guix package --list-available} (@pxref{Invoking
4069 guix package}).
4070
4071
4072 @node Invoking guix gc
4073 @section Invoking @command{guix gc}
4074
4075 @cindex garbage collector
4076 @cindex disk space
4077 Packages that are installed, but not used, may be @dfn{garbage-collected}.
4078 The @command{guix gc} command allows users to explicitly run the garbage
4079 collector to reclaim space from the @file{/gnu/store} directory. It is
4080 the @emph{only} way to remove files from @file{/gnu/store}---removing
4081 files or directories manually may break it beyond repair!
4082
4083 @cindex GC roots
4084 @cindex garbage collector roots
4085 The garbage collector has a set of known @dfn{roots}: any file under
4086 @file{/gnu/store} reachable from a root is considered @dfn{live} and
4087 cannot be deleted; any other file is considered @dfn{dead} and may be
4088 deleted. The set of garbage collector roots (``GC roots'' for short)
4089 includes default user profiles; by default, the symlinks under
4090 @file{/var/guix/gcroots} represent these GC roots. New GC roots can be
4091 added with @command{guix build --root}, for example (@pxref{Invoking
4092 guix build}). The @command{guix gc --list-roots} command lists them.
4093
4094 Prior to running @code{guix gc --collect-garbage} to make space, it is
4095 often useful to remove old generations from user profiles; that way, old
4096 package builds referenced by those generations can be reclaimed. This
4097 is achieved by running @code{guix package --delete-generations}
4098 (@pxref{Invoking guix package}).
4099
4100 Our recommendation is to run a garbage collection periodically, or when
4101 you are short on disk space. For instance, to guarantee that at least
4102 5@tie{}GB are available on your disk, simply run:
4103
4104 @example
4105 guix gc -F 5G
4106 @end example
4107
4108 It is perfectly safe to run as a non-interactive periodic job
4109 (@pxref{Scheduled Job Execution}, for how to set up such a job).
4110 Running @command{guix gc} with no arguments will collect as
4111 much garbage as it can, but that is often inconvenient: you may find
4112 yourself having to rebuild or re-download software that is ``dead'' from
4113 the GC viewpoint but that is necessary to build other pieces of
4114 software---e.g., the compiler tool chain.
4115
4116 The @command{guix gc} command has three modes of operation: it can be
4117 used to garbage-collect any dead files (the default), to delete specific
4118 files (the @option{--delete} option), to print garbage-collector
4119 information, or for more advanced queries. The garbage collection
4120 options are as follows:
4121
4122 @table @code
4123 @item --collect-garbage[=@var{min}]
4124 @itemx -C [@var{min}]
4125 Collect garbage---i.e., unreachable @file{/gnu/store} files and
4126 sub-directories. This is the default operation when no option is
4127 specified.
4128
4129 When @var{min} is given, stop once @var{min} bytes have been collected.
4130 @var{min} may be a number of bytes, or it may include a unit as a
4131 suffix, such as @code{MiB} for mebibytes and @code{GB} for gigabytes
4132 (@pxref{Block size, size specifications,, coreutils, GNU Coreutils}).
4133
4134 When @var{min} is omitted, collect all the garbage.
4135
4136 @item --free-space=@var{free}
4137 @itemx -F @var{free}
4138 Collect garbage until @var{free} space is available under
4139 @file{/gnu/store}, if possible; @var{free} denotes storage space, such
4140 as @code{500MiB}, as described above.
4141
4142 When @var{free} or more is already available in @file{/gnu/store}, do
4143 nothing and exit immediately.
4144
4145 @item --delete-generations[=@var{duration}]
4146 @itemx -d [@var{duration}]
4147 Before starting the garbage collection process, delete all the generations
4148 older than @var{duration}, for all the user profiles; when run as root, this
4149 applies to all the profiles @emph{of all the users}.
4150
4151 For example, this command deletes all the generations of all your profiles
4152 that are older than 2 months (except generations that are current), and then
4153 proceeds to free space until at least 10 GiB are available:
4154
4155 @example
4156 guix gc -d 2m -F 10G
4157 @end example
4158
4159 @item --delete
4160 @itemx -D
4161 Attempt to delete all the store files and directories specified as
4162 arguments. This fails if some of the files are not in the store, or if
4163 they are still live.
4164
4165 @item --list-failures
4166 List store items corresponding to cached build failures.
4167
4168 This prints nothing unless the daemon was started with
4169 @option{--cache-failures} (@pxref{Invoking guix-daemon,
4170 @option{--cache-failures}}).
4171
4172 @item --list-roots
4173 List the GC roots owned by the user; when run as root, list @emph{all} the GC
4174 roots.
4175
4176 @item --list-busy
4177 List store items in use by currently running processes. These store
4178 items are effectively considered GC roots: they cannot be deleted.
4179
4180 @item --clear-failures
4181 Remove the specified store items from the failed-build cache.
4182
4183 Again, this option only makes sense when the daemon is started with
4184 @option{--cache-failures}. Otherwise, it does nothing.
4185
4186 @item --list-dead
4187 Show the list of dead files and directories still present in the
4188 store---i.e., files and directories no longer reachable from any root.
4189
4190 @item --list-live
4191 Show the list of live store files and directories.
4192
4193 @end table
4194
4195 In addition, the references among existing store files can be queried:
4196
4197 @table @code
4198
4199 @item --references
4200 @itemx --referrers
4201 @cindex package dependencies
4202 List the references (respectively, the referrers) of store files given
4203 as arguments.
4204
4205 @item --requisites
4206 @itemx -R
4207 @cindex closure
4208 List the requisites of the store files passed as arguments. Requisites
4209 include the store files themselves, their references, and the references
4210 of these, recursively. In other words, the returned list is the
4211 @dfn{transitive closure} of the store files.
4212
4213 @xref{Invoking guix size}, for a tool to profile the size of the closure
4214 of an element. @xref{Invoking guix graph}, for a tool to visualize
4215 the graph of references.
4216
4217 @item --derivers
4218 @cindex derivation
4219 Return the derivation(s) leading to the given store items
4220 (@pxref{Derivations}).
4221
4222 For example, this command:
4223
4224 @example
4225 guix gc --derivers $(guix package -I ^emacs$ | cut -f4)
4226 @end example
4227
4228 @noindent
4229 returns the @file{.drv} file(s) leading to the @code{emacs} package
4230 installed in your profile.
4231
4232 Note that there may be zero matching @file{.drv} files, for instance
4233 because these files have been garbage-collected. There can also be more
4234 than one matching @file{.drv} due to fixed-output derivations.
4235 @end table
4236
4237 Lastly, the following options allow you to check the integrity of the
4238 store and to control disk usage.
4239
4240 @table @option
4241
4242 @item --verify[=@var{options}]
4243 @cindex integrity, of the store
4244 @cindex integrity checking
4245 Verify the integrity of the store.
4246
4247 By default, make sure that all the store items marked as valid in the
4248 database of the daemon actually exist in @file{/gnu/store}.
4249
4250 When provided, @var{options} must be a comma-separated list containing one
4251 or more of @code{contents} and @code{repair}.
4252
4253 When passing @option{--verify=contents}, the daemon computes the
4254 content hash of each store item and compares it against its hash in the
4255 database. Hash mismatches are reported as data corruptions. Because it
4256 traverses @emph{all the files in the store}, this command can take a
4257 long time, especially on systems with a slow disk drive.
4258
4259 @cindex repairing the store
4260 @cindex corruption, recovering from
4261 Using @option{--verify=repair} or @option{--verify=contents,repair}
4262 causes the daemon to try to repair corrupt store items by fetching
4263 substitutes for them (@pxref{Substitutes}). Because repairing is not
4264 atomic, and thus potentially dangerous, it is available only to the
4265 system administrator. A lightweight alternative, when you know exactly
4266 which items in the store are corrupt, is @command{guix build --repair}
4267 (@pxref{Invoking guix build}).
4268
4269 @item --optimize
4270 @cindex deduplication
4271 Optimize the store by hard-linking identical files---this is
4272 @dfn{deduplication}.
4273
4274 The daemon performs deduplication after each successful build or archive
4275 import, unless it was started with @option{--disable-deduplication}
4276 (@pxref{Invoking guix-daemon, @option{--disable-deduplication}}). Thus,
4277 this option is primarily useful when the daemon was running with
4278 @option{--disable-deduplication}.
4279
4280 @end table
4281
4282 @node Invoking guix pull
4283 @section Invoking @command{guix pull}
4284
4285 @cindex upgrading Guix
4286 @cindex updating Guix
4287 @cindex @command{guix pull}
4288 @cindex pull
4289 @cindex security, @command{guix pull}
4290 @cindex authenticity, of code obtained with @command{guix pull}
4291 Packages are installed or upgraded to the latest version available in
4292 the distribution currently available on your local machine. To update
4293 that distribution, along with the Guix tools, you must run @command{guix
4294 pull}: the command downloads the latest Guix source code and package
4295 descriptions, and deploys it. Source code is downloaded from a
4296 @uref{https://git-scm.com, Git} repository, by default the official
4297 GNU@tie{}Guix repository, though this can be customized. @command{guix
4298 pull} ensures that the code it downloads is @emph{authentic} by
4299 verifying that commits are signed by Guix developers.
4300
4301 Specifically, @command{guix pull} downloads code from the @dfn{channels}
4302 (@pxref{Channels}) specified by one of the followings, in this order:
4303
4304 @enumerate
4305 @item
4306 the @option{--channels} option;
4307 @item
4308 the user's @file{~/.config/guix/channels.scm} file;
4309 @item
4310 the system-wide @file{/etc/guix/channels.scm} file;
4311 @item
4312 the built-in default channels specified in the @code{%default-channels}
4313 variable.
4314 @end enumerate
4315
4316 On completion, @command{guix package} will use packages and package
4317 versions from this just-retrieved copy of Guix. Not only that, but all
4318 the Guix commands and Scheme modules will also be taken from that latest
4319 version. New @command{guix} sub-commands added by the update also
4320 become available.
4321
4322 Any user can update their Guix copy using @command{guix pull}, and the
4323 effect is limited to the user who ran @command{guix pull}. For
4324 instance, when user @code{root} runs @command{guix pull}, this has no
4325 effect on the version of Guix that user @code{alice} sees, and vice
4326 versa.
4327
4328 The result of running @command{guix pull} is a @dfn{profile} available
4329 under @file{~/.config/guix/current} containing the latest Guix. Thus,
4330 make sure to add it to the beginning of your search path so that you use
4331 the latest version, and similarly for the Info manual
4332 (@pxref{Documentation}):
4333
4334 @example
4335 export PATH="$HOME/.config/guix/current/bin:$PATH"
4336 export INFOPATH="$HOME/.config/guix/current/share/info:$INFOPATH"
4337 @end example
4338
4339 The @option{--list-generations} or @option{-l} option lists past generations
4340 produced by @command{guix pull}, along with details about their provenance:
4341
4342 @example
4343 $ guix pull -l
4344 Generation 1 Jun 10 2018 00:18:18
4345 guix 65956ad
4346 repository URL: https://git.savannah.gnu.org/git/guix.git
4347 branch: origin/master
4348 commit: 65956ad3526ba09e1f7a40722c96c6ef7c0936fe
4349
4350 Generation 2 Jun 11 2018 11:02:49
4351 guix e0cc7f6
4352 repository URL: https://git.savannah.gnu.org/git/guix.git
4353 branch: origin/master
4354 commit: e0cc7f669bec22c37481dd03a7941c7d11a64f1d
4355 2 new packages: keepalived, libnfnetlink
4356 6 packages upgraded: emacs-nix-mode@@2.0.4,
4357 guile2.0-guix@@0.14.0-12.77a1aac, guix@@0.14.0-12.77a1aac,
4358 heimdal@@7.5.0, milkytracker@@1.02.00, nix@@2.0.4
4359
4360 Generation 3 Jun 13 2018 23:31:07 (current)
4361 guix 844cc1c
4362 repository URL: https://git.savannah.gnu.org/git/guix.git
4363 branch: origin/master
4364 commit: 844cc1c8f394f03b404c5bb3aee086922373490c
4365 28 new packages: emacs-helm-ls-git, emacs-helm-mu, @dots{}
4366 69 packages upgraded: borg@@1.1.6, cheese@@3.28.0, @dots{}
4367 @end example
4368
4369 @xref{Invoking guix describe, @command{guix describe}}, for other ways to
4370 describe the current status of Guix.
4371
4372 This @code{~/.config/guix/current} profile works exactly like the profiles
4373 created by @command{guix package} (@pxref{Invoking guix package}). That
4374 is, you can list generations, roll back to the previous
4375 generation---i.e., the previous Guix---and so on:
4376
4377 @example
4378 $ guix pull --roll-back
4379 switched from generation 3 to 2
4380 $ guix pull --delete-generations=1
4381 deleting /var/guix/profiles/per-user/charlie/current-guix-1-link
4382 @end example
4383
4384 You can also use @command{guix package} (@pxref{Invoking guix package})
4385 to manage the profile by naming it explicitly:
4386 @example
4387 $ guix package -p ~/.config/guix/current --roll-back
4388 switched from generation 3 to 2
4389 $ guix package -p ~/.config/guix/current --delete-generations=1
4390 deleting /var/guix/profiles/per-user/charlie/current-guix-1-link
4391 @end example
4392
4393 The @command{guix pull} command is usually invoked with no arguments,
4394 but it supports the following options:
4395
4396 @table @code
4397 @item --url=@var{url}
4398 @itemx --commit=@var{commit}
4399 @itemx --branch=@var{branch}
4400 Download code for the @code{guix} channel from the specified @var{url}, at the
4401 given @var{commit} (a valid Git commit ID represented as a hexadecimal
4402 string), or @var{branch}.
4403
4404 @cindex @file{channels.scm}, configuration file
4405 @cindex configuration file for channels
4406 These options are provided for convenience, but you can also specify your
4407 configuration in the @file{~/.config/guix/channels.scm} file or using the
4408 @option{--channels} option (see below).
4409
4410 @item --channels=@var{file}
4411 @itemx -C @var{file}
4412 Read the list of channels from @var{file} instead of
4413 @file{~/.config/guix/channels.scm} or @file{/etc/guix/channels.scm}.
4414 @var{file} must contain Scheme code that
4415 evaluates to a list of channel objects. @xref{Channels}, for more
4416 information.
4417
4418 @cindex channel news
4419 @item --news
4420 @itemx -N
4421 Display the list of packages added or upgraded since the previous
4422 generation, as well as, occasionally, news written by channel authors
4423 for their users (@pxref{Channels, Writing Channel News}).
4424
4425 The package information is the same as displayed upon @command{guix
4426 pull} completion, but without ellipses; it is also similar to the output
4427 of @command{guix pull -l} for the last generation (see below).
4428
4429 @item --list-generations[=@var{pattern}]
4430 @itemx -l [@var{pattern}]
4431 List all the generations of @file{~/.config/guix/current} or, if @var{pattern}
4432 is provided, the subset of generations that match @var{pattern}.
4433 The syntax of @var{pattern} is the same as with @code{guix package
4434 --list-generations} (@pxref{Invoking guix package}).
4435
4436 @item --roll-back
4437 @cindex rolling back
4438 @cindex undoing transactions
4439 @cindex transactions, undoing
4440 Roll back to the previous @dfn{generation} of @file{~/.config/guix/current}---i.e.,
4441 undo the last transaction.
4442
4443 @item --switch-generation=@var{pattern}
4444 @itemx -S @var{pattern}
4445 @cindex generations
4446 Switch to a particular generation defined by @var{pattern}.
4447
4448 @var{pattern} may be either a generation number or a number prefixed
4449 with ``+'' or ``-''. The latter means: move forward/backward by a
4450 specified number of generations. For example, if you want to return to
4451 the latest generation after @option{--roll-back}, use
4452 @option{--switch-generation=+1}.
4453
4454 @item --delete-generations[=@var{pattern}]
4455 @itemx -d [@var{pattern}]
4456 When @var{pattern} is omitted, delete all generations except the current
4457 one.
4458
4459 This command accepts the same patterns as @option{--list-generations}.
4460 When @var{pattern} is specified, delete the matching generations. When
4461 @var{pattern} specifies a duration, generations @emph{older} than the
4462 specified duration match. For instance, @option{--delete-generations=1m}
4463 deletes generations that are more than one month old.
4464
4465 If the current generation matches, it is @emph{not} deleted.
4466
4467 Note that deleting generations prevents rolling back to them.
4468 Consequently, this command must be used with care.
4469
4470 @xref{Invoking guix describe}, for a way to display information about the
4471 current generation only.
4472
4473 @item --profile=@var{profile}
4474 @itemx -p @var{profile}
4475 Use @var{profile} instead of @file{~/.config/guix/current}.
4476
4477 @item --dry-run
4478 @itemx -n
4479 Show which channel commit(s) would be used and what would be built or
4480 substituted but do not actually do it.
4481
4482 @item --allow-downgrades
4483 Allow pulling older or unrelated revisions of channels than those
4484 currently in use.
4485
4486 @cindex downgrade attacks, protection against
4487 By default, @command{guix pull} protects against so-called ``downgrade
4488 attacks'' whereby the Git repository of a channel would be reset to an
4489 earlier or unrelated revision of itself, potentially leading you to
4490 install older, known-vulnerable versions of software packages.
4491
4492 @quotation Note
4493 Make sure you understand its security implications before using
4494 @option{--allow-downgrades}.
4495 @end quotation
4496
4497 @item --disable-authentication
4498 Allow pulling channel code without authenticating it.
4499
4500 @cindex authentication, of channel code
4501 By default, @command{guix pull} authenticates code downloaded from
4502 channels by verifying that its commits are signed by authorized
4503 developers, and raises an error if this is not the case. This option
4504 instructs it to not perform any such verification.
4505
4506 @quotation Note
4507 Make sure you understand its security implications before using
4508 @option{--disable-authentication}.
4509 @end quotation
4510
4511 @item --system=@var{system}
4512 @itemx -s @var{system}
4513 Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of
4514 the system type of the build host.
4515
4516 @item --bootstrap
4517 Use the bootstrap Guile to build the latest Guix. This option is only
4518 useful to Guix developers.
4519 @end table
4520
4521 The @dfn{channel} mechanism allows you to instruct @command{guix pull} which
4522 repository and branch to pull from, as well as @emph{additional} repositories
4523 containing package modules that should be deployed. @xref{Channels}, for more
4524 information.
4525
4526 In addition, @command{guix pull} supports all the common build options
4527 (@pxref{Common Build Options}).
4528
4529 @node Invoking guix time-machine
4530 @section Invoking @command{guix time-machine}
4531
4532 @cindex @command{guix time-machine}
4533 @cindex pinning, channels
4534 @cindex replicating Guix
4535 @cindex reproducibility, of Guix
4536
4537 The @command{guix time-machine} command provides access to other
4538 revisions of Guix, for example to install older versions of packages,
4539 or to reproduce a computation in an identical environment. The revision
4540 of Guix to be used is defined by a commit or by a channel
4541 description file created by @command{guix describe}
4542 (@pxref{Invoking guix describe}).
4543
4544 The general syntax is:
4545
4546 @example
4547 guix time-machine @var{options}@dots{} -- @var{command} @var {arg}@dots{}
4548 @end example
4549
4550 where @var{command} and @var{arg}@dots{} are passed unmodified to the
4551 @command{guix} command of the specified revision. The @var{options} that define
4552 this revision are the same as for @command{guix pull} (@pxref{Invoking guix pull}):
4553
4554 @table @code
4555 @item --url=@var{url}
4556 @itemx --commit=@var{commit}
4557 @itemx --branch=@var{branch}
4558 Use the @code{guix} channel from the specified @var{url}, at the
4559 given @var{commit} (a valid Git commit ID represented as a hexadecimal
4560 string), or @var{branch}.
4561
4562 @item --channels=@var{file}
4563 @itemx -C @var{file}
4564 Read the list of channels from @var{file}. @var{file} must contain
4565 Scheme code that evaluates to a list of channel objects.
4566 @xref{Channels} for more information.
4567 @end table
4568
4569 As for @command{guix pull}, the absence of any options means that the
4570 latest commit on the master branch will be used. The command
4571
4572 @example
4573 guix time-machine -- build hello
4574 @end example
4575
4576 will thus build the package @code{hello} as defined in the master branch,
4577 which is in general a newer revision of Guix than you have installed.
4578 Time travel works in both directions!
4579
4580 Note that @command{guix time-machine} can trigger builds of channels and
4581 their dependencies, and these are controlled by the standard build
4582 options (@pxref{Common Build Options}).
4583
4584 @node Inferiors
4585 @section Inferiors
4586
4587 @c TODO: Remove this once we're more confident about API stability.
4588 @quotation Note
4589 The functionality described here is a ``technology preview'' as of version
4590 @value{VERSION}. As such, the interface is subject to change.
4591 @end quotation
4592
4593 @cindex inferiors
4594 @cindex composition of Guix revisions
4595 Sometimes you might need to mix packages from the revision of Guix you're
4596 currently running with packages available in a different revision of Guix.
4597 Guix @dfn{inferiors} allow you to achieve that by composing different Guix
4598 revisions in arbitrary ways.
4599
4600 @cindex inferior packages
4601 Technically, an ``inferior'' is essentially a separate Guix process connected
4602 to your main Guix process through a REPL (@pxref{Invoking guix repl}). The
4603 @code{(guix inferior)} module allows you to create inferiors and to
4604 communicate with them. It also provides a high-level interface to browse and
4605 manipulate the packages that an inferior provides---@dfn{inferior packages}.
4606
4607 When combined with channels (@pxref{Channels}), inferiors provide a simple way
4608 to interact with a separate revision of Guix. For example, let's assume you
4609 want to install in your profile the current @code{guile} package, along with
4610 the @code{guile-json} as it existed in an older revision of Guix---perhaps
4611 because the newer @code{guile-json} has an incompatible API and you want to
4612 run your code against the old API@. To do that, you could write a manifest for
4613 use by @code{guix package --manifest} (@pxref{Invoking guix package}); in that
4614 manifest, you would create an inferior for that old Guix revision you care
4615 about, and you would look up the @code{guile-json} package in the inferior:
4616
4617 @lisp
4618 (use-modules (guix inferior) (guix channels)
4619 (srfi srfi-1)) ;for 'first'
4620
4621 (define channels
4622 ;; This is the old revision from which we want to
4623 ;; extract guile-json.
4624 (list (channel
4625 (name 'guix)
4626 (url "https://git.savannah.gnu.org/git/guix.git")
4627 (commit
4628 "65956ad3526ba09e1f7a40722c96c6ef7c0936fe"))))
4629
4630 (define inferior
4631 ;; An inferior representing the above revision.
4632 (inferior-for-channels channels))
4633
4634 ;; Now create a manifest with the current "guile" package
4635 ;; and the old "guile-json" package.
4636 (packages->manifest
4637 (list (first (lookup-inferior-packages inferior "guile-json"))
4638 (specification->package "guile")))
4639 @end lisp
4640
4641 On its first run, @command{guix package --manifest} might have to build the
4642 channel you specified before it can create the inferior; subsequent runs will
4643 be much faster because the Guix revision will be cached.
4644
4645 The @code{(guix inferior)} module provides the following procedures to open an
4646 inferior:
4647
4648 @deffn {Scheme Procedure} inferior-for-channels @var{channels} @
4649 [#:cache-directory] [#:ttl]
4650 Return an inferior for @var{channels}, a list of channels. Use the cache at
4651 @var{cache-directory}, where entries can be reclaimed after @var{ttl} seconds.
4652 This procedure opens a new connection to the build daemon.
4653
4654 As a side effect, this procedure may build or substitute binaries for
4655 @var{channels}, which can take time.
4656 @end deffn
4657
4658 @deffn {Scheme Procedure} open-inferior @var{directory} @
4659 [#:command "bin/guix"]
4660 Open the inferior Guix in @var{directory}, running
4661 @code{@var{directory}/@var{command} repl} or equivalent. Return @code{#f} if
4662 the inferior could not be launched.
4663 @end deffn
4664
4665 @cindex inferior packages
4666 The procedures listed below allow you to obtain and manipulate inferior
4667 packages.
4668
4669 @deffn {Scheme Procedure} inferior-packages @var{inferior}
4670 Return the list of packages known to @var{inferior}.
4671 @end deffn
4672
4673 @deffn {Scheme Procedure} lookup-inferior-packages @var{inferior} @var{name} @
4674 [@var{version}]
4675 Return the sorted list of inferior packages matching @var{name} in
4676 @var{inferior}, with highest version numbers first. If @var{version} is true,
4677 return only packages with a version number prefixed by @var{version}.
4678 @end deffn
4679
4680 @deffn {Scheme Procedure} inferior-package? @var{obj}
4681 Return true if @var{obj} is an inferior package.
4682 @end deffn
4683
4684 @deffn {Scheme Procedure} inferior-package-name @var{package}
4685 @deffnx {Scheme Procedure} inferior-package-version @var{package}
4686 @deffnx {Scheme Procedure} inferior-package-synopsis @var{package}
4687 @deffnx {Scheme Procedure} inferior-package-description @var{package}
4688 @deffnx {Scheme Procedure} inferior-package-home-page @var{package}
4689 @deffnx {Scheme Procedure} inferior-package-location @var{package}
4690 @deffnx {Scheme Procedure} inferior-package-inputs @var{package}
4691 @deffnx {Scheme Procedure} inferior-package-native-inputs @var{package}
4692 @deffnx {Scheme Procedure} inferior-package-propagated-inputs @var{package}
4693 @deffnx {Scheme Procedure} inferior-package-transitive-propagated-inputs @var{package}
4694 @deffnx {Scheme Procedure} inferior-package-native-search-paths @var{package}
4695 @deffnx {Scheme Procedure} inferior-package-transitive-native-search-paths @var{package}
4696 @deffnx {Scheme Procedure} inferior-package-search-paths @var{package}
4697 These procedures are the counterpart of package record accessors
4698 (@pxref{package Reference}). Most of them work by querying the inferior
4699 @var{package} comes from, so the inferior must still be live when you call
4700 these procedures.
4701 @end deffn
4702
4703 Inferior packages can be used transparently like any other package or
4704 file-like object in G-expressions (@pxref{G-Expressions}). They are also
4705 transparently handled by the @code{packages->manifest} procedure, which is
4706 commonly used in manifests (@pxref{Invoking guix package, the
4707 @option{--manifest} option of @command{guix package}}). Thus you can insert
4708 an inferior package pretty much anywhere you would insert a regular package:
4709 in manifests, in the @code{packages} field of your @code{operating-system}
4710 declaration, and so on.
4711
4712 @node Invoking guix describe
4713 @section Invoking @command{guix describe}
4714
4715 @cindex reproducibility
4716 @cindex replicating Guix
4717 Often you may want to answer questions like: ``Which revision of Guix am I
4718 using?'' or ``Which channels am I using?'' This is useful information in many
4719 situations: if you want to @emph{replicate} an environment on a different
4720 machine or user account, if you want to report a bug or to determine what
4721 change in the channels you are using caused it, or if you want to record your
4722 system state for reproducibility purposes. The @command{guix describe}
4723 command answers these questions.
4724
4725 When run from a @command{guix pull}ed @command{guix}, @command{guix describe}
4726 displays the channel(s) that it was built from, including their repository URL
4727 and commit IDs (@pxref{Channels}):
4728
4729 @example
4730 $ guix describe
4731 Generation 10 Sep 03 2018 17:32:44 (current)
4732 guix e0fa68c
4733 repository URL: https://git.savannah.gnu.org/git/guix.git
4734 branch: master
4735 commit: e0fa68c7718fffd33d81af415279d6ddb518f727
4736 @end example
4737
4738 If you're familiar with the Git version control system, this is similar in
4739 spirit to @command{git describe}; the output is also similar to that of
4740 @command{guix pull --list-generations}, but limited to the current generation
4741 (@pxref{Invoking guix pull, the @option{--list-generations} option}). Because
4742 the Git commit ID shown above unambiguously refers to a snapshot of Guix, this
4743 information is all it takes to describe the revision of Guix you're using, and
4744 also to replicate it.
4745
4746 To make it easier to replicate Guix, @command{guix describe} can also be asked
4747 to return a list of channels instead of the human-readable description above:
4748
4749 @example
4750 $ guix describe -f channels
4751 (list (channel
4752 (name 'guix)
4753 (url "https://git.savannah.gnu.org/git/guix.git")
4754 (commit
4755 "e0fa68c7718fffd33d81af415279d6ddb518f727")
4756 (introduction
4757 (make-channel-introduction
4758 "9edb3f66fd807b096b48283debdcddccfea34bad"
4759 (openpgp-fingerprint
4760 "BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA")))))
4761 @end example
4762
4763 @noindent
4764 You can save this to a file and feed it to @command{guix pull -C} on some
4765 other machine or at a later point in time, which will instantiate @emph{this
4766 exact Guix revision} (@pxref{Invoking guix pull, the @option{-C} option}).
4767 From there on, since you're able to deploy the same revision of Guix, you can
4768 just as well @emph{replicate a complete software environment}. We humbly
4769 think that this is @emph{awesome}, and we hope you'll like it too!
4770
4771 The details of the options supported by @command{guix describe} are as
4772 follows:
4773
4774 @table @code
4775 @item --format=@var{format}
4776 @itemx -f @var{format}
4777 Produce output in the specified @var{format}, one of:
4778
4779 @table @code
4780 @item human
4781 produce human-readable output;
4782 @item channels
4783 produce a list of channel specifications that can be passed to @command{guix
4784 pull -C} or installed as @file{~/.config/guix/channels.scm} (@pxref{Invoking
4785 guix pull});
4786 @item channels-sans-intro
4787 like @code{channels}, but omit the @code{introduction} field; use it to
4788 produce a channel specification suitable for Guix version 1.1.0 or
4789 earlier---the @code{introduction} field has to do with channel
4790 authentication (@pxref{Channels, Channel Authentication}) and is not
4791 supported by these older versions;
4792 @item json
4793 @cindex JSON
4794 produce a list of channel specifications in JSON format;
4795 @item recutils
4796 produce a list of channel specifications in Recutils format.
4797 @end table
4798
4799 @item --list-formats
4800 Display available formats for @option{--format} option.
4801
4802 @item --profile=@var{profile}
4803 @itemx -p @var{profile}
4804 Display information about @var{profile}.
4805 @end table
4806
4807 @node Invoking guix archive
4808 @section Invoking @command{guix archive}
4809
4810 @cindex @command{guix archive}
4811 @cindex archive
4812 The @command{guix archive} command allows users to @dfn{export} files
4813 from the store into a single archive, and to later @dfn{import} them on
4814 a machine that runs Guix.
4815 In particular, it allows store files to be transferred from one machine
4816 to the store on another machine.
4817
4818 @quotation Note
4819 If you're looking for a way to produce archives in a format suitable for
4820 tools other than Guix, @pxref{Invoking guix pack}.
4821 @end quotation
4822
4823 @cindex exporting store items
4824 To export store files as an archive to standard output, run:
4825
4826 @example
4827 guix archive --export @var{options} @var{specifications}...
4828 @end example
4829
4830 @var{specifications} may be either store file names or package
4831 specifications, as for @command{guix package} (@pxref{Invoking guix
4832 package}). For instance, the following command creates an archive
4833 containing the @code{gui} output of the @code{git} package and the main
4834 output of @code{emacs}:
4835
4836 @example
4837 guix archive --export git:gui /gnu/store/...-emacs-24.3 > great.nar
4838 @end example
4839
4840 If the specified packages are not built yet, @command{guix archive}
4841 automatically builds them. The build process may be controlled with the
4842 common build options (@pxref{Common Build Options}).
4843
4844 To transfer the @code{emacs} package to a machine connected over SSH,
4845 one would run:
4846
4847 @example
4848 guix archive --export -r emacs | ssh the-machine guix archive --import
4849 @end example
4850
4851 @noindent
4852 Similarly, a complete user profile may be transferred from one machine
4853 to another like this:
4854
4855 @example
4856 guix archive --export -r $(readlink -f ~/.guix-profile) | \
4857 ssh the-machine guix archive --import
4858 @end example
4859
4860 @noindent
4861 However, note that, in both examples, all of @code{emacs} and the
4862 profile as well as all of their dependencies are transferred (due to
4863 @option{-r}), regardless of what is already available in the store on
4864 the target machine. The @option{--missing} option can help figure out
4865 which items are missing from the target store. The @command{guix copy}
4866 command simplifies and optimizes this whole process, so this is probably
4867 what you should use in this case (@pxref{Invoking guix copy}).
4868
4869 @cindex nar, archive format
4870 @cindex normalized archive (nar)
4871 @cindex nar bundle, archive format
4872 Each store item is written in the @dfn{normalized archive} or @dfn{nar}
4873 format (described below), and the output of @command{guix archive
4874 --export} (and input of @command{guix archive --import}) is a @dfn{nar
4875 bundle}.
4876
4877 The nar format is
4878 comparable in spirit to `tar', but with differences
4879 that make it more appropriate for our purposes. First, rather than
4880 recording all Unix metadata for each file, the nar format only mentions
4881 the file type (regular, directory, or symbolic link); Unix permissions
4882 and owner/group are dismissed. Second, the order in which directory
4883 entries are stored always follows the order of file names according to
4884 the C locale collation order. This makes archive production fully
4885 deterministic.
4886
4887 That nar bundle format is essentially the concatenation of zero or more
4888 nars along with metadata for each store item it contains: its file name,
4889 references, corresponding derivation, and a digital signature.
4890
4891 When exporting, the daemon digitally signs the contents of the archive,
4892 and that digital signature is appended. When importing, the daemon
4893 verifies the signature and rejects the import in case of an invalid
4894 signature or if the signing key is not authorized.
4895 @c FIXME: Add xref to daemon doc about signatures.
4896
4897 The main options are:
4898
4899 @table @code
4900 @item --export
4901 Export the specified store files or packages (see below). Write the
4902 resulting archive to the standard output.
4903
4904 Dependencies are @emph{not} included in the output, unless
4905 @option{--recursive} is passed.
4906
4907 @item -r
4908 @itemx --recursive
4909 When combined with @option{--export}, this instructs @command{guix archive}
4910 to include dependencies of the given items in the archive. Thus, the
4911 resulting archive is self-contained: it contains the closure of the
4912 exported store items.
4913
4914 @item --import
4915 Read an archive from the standard input, and import the files listed
4916 therein into the store. Abort if the archive has an invalid digital
4917 signature, or if it is signed by a public key not among the authorized
4918 keys (see @option{--authorize} below).
4919
4920 @item --missing
4921 Read a list of store file names from the standard input, one per line,
4922 and write on the standard output the subset of these files missing from
4923 the store.
4924
4925 @item --generate-key[=@var{parameters}]
4926 @cindex signing, archives
4927 Generate a new key pair for the daemon. This is a prerequisite before
4928 archives can be exported with @option{--export}. This
4929 operation is usually instantaneous but it can take time if the system's
4930 entropy pool needs to be refilled. On Guix System,
4931 @code{guix-service-type} takes care of generating this key pair the
4932 first boot.
4933
4934 The generated key pair is typically stored under @file{/etc/guix}, in
4935 @file{signing-key.pub} (public key) and @file{signing-key.sec} (private
4936 key, which must be kept secret). When @var{parameters} is omitted,
4937 an ECDSA key using the Ed25519 curve is generated, or, for Libgcrypt
4938 versions before 1.6.0, it is a 4096-bit RSA key.
4939 Alternatively, @var{parameters} can specify
4940 @code{genkey} parameters suitable for Libgcrypt (@pxref{General
4941 public-key related Functions, @code{gcry_pk_genkey},, gcrypt, The
4942 Libgcrypt Reference Manual}).
4943
4944 @item --authorize
4945 @cindex authorizing, archives
4946 Authorize imports signed by the public key passed on standard input.
4947 The public key must be in ``s-expression advanced format''---i.e., the
4948 same format as the @file{signing-key.pub} file.
4949
4950 The list of authorized keys is kept in the human-editable file
4951 @file{/etc/guix/acl}. The file contains
4952 @url{https://people.csail.mit.edu/rivest/Sexp.txt, ``advanced-format
4953 s-expressions''} and is structured as an access-control list in the
4954 @url{https://theworld.com/~cme/spki.txt, Simple Public-Key Infrastructure
4955 (SPKI)}.
4956
4957 @item --extract=@var{directory}
4958 @itemx -x @var{directory}
4959 Read a single-item archive as served by substitute servers
4960 (@pxref{Substitutes}) and extract it to @var{directory}. This is a
4961 low-level operation needed in only very narrow use cases; see below.
4962
4963 For example, the following command extracts the substitute for Emacs
4964 served by @code{@value{SUBSTITUTE-SERVER}} to @file{/tmp/emacs}:
4965
4966 @example
4967 $ wget -O - \
4968 https://@value{SUBSTITUTE-SERVER}/nar/gzip/@dots{}-emacs-24.5 \
4969 | gunzip | guix archive -x /tmp/emacs
4970 @end example
4971
4972 Single-item archives are different from multiple-item archives produced
4973 by @command{guix archive --export}; they contain a single store item,
4974 and they do @emph{not} embed a signature. Thus this operation does
4975 @emph{no} signature verification and its output should be considered
4976 unsafe.
4977
4978 The primary purpose of this operation is to facilitate inspection of
4979 archive contents coming from possibly untrusted substitute servers
4980 (@pxref{Invoking guix challenge}).
4981
4982 @item --list
4983 @itemx -t
4984 Read a single-item archive as served by substitute servers
4985 (@pxref{Substitutes}) and print the list of files it contains, as in
4986 this example:
4987
4988 @example
4989 $ wget -O - \
4990 https://@value{SUBSTITUTE-SERVER}/nar/lzip/@dots{}-emacs-26.3 \
4991 | lzip -d | guix archive -t
4992 @end example
4993
4994 @end table
4995
4996 @c *********************************************************************
4997 @node Channels
4998 @chapter Channels
4999
5000 @cindex channels
5001 @cindex @file{channels.scm}, configuration file
5002 @cindex configuration file for channels
5003 @cindex @command{guix pull}, configuration file
5004 @cindex configuration of @command{guix pull}
5005 Guix and its package collection are updated by running @command{guix pull}
5006 (@pxref{Invoking guix pull}). By default @command{guix pull} downloads and
5007 deploys Guix itself from the official GNU@tie{}Guix repository. This can be
5008 customized by defining @dfn{channels} in the
5009 @file{~/.config/guix/channels.scm} file. A channel specifies a URL and branch
5010 of a Git repository to be deployed, and @command{guix pull} can be instructed
5011 to pull from one or more channels. In other words, channels can be used
5012 to @emph{customize} and to @emph{extend} Guix, as we will see below.
5013 Guix is able to take into account security concerns and deal with authenticated
5014 updates.
5015
5016 @menu
5017 * Specifying Additional Channels:: Extending the package collection.
5018 * Using a Custom Guix Channel:: Using a customized Guix.
5019 * Replicating Guix:: Running the @emph{exact same} Guix.
5020 * Channel Authentication:: How Guix verifies what it fetches.
5021 * Channels with Substitutes:: Using channels with available substitutes.
5022 * Creating a Channel:: How to write your custom channel.
5023 * Package Modules in a Sub-directory:: Specifying the channel's package modules location.
5024 * Declaring Channel Dependencies:: How to depend on other channels.
5025 * Specifying Channel Authorizations:: Defining channel authors authorizations.
5026 * Primary URL:: Distinguishing mirror to original.
5027 * Writing Channel News:: Communicating information to channel's users.
5028 @end menu
5029
5030 @node Specifying Additional Channels
5031 @section Specifying Additional Channels
5032
5033 @cindex extending the package collection (channels)
5034 @cindex variant packages (channels)
5035 You can specify @emph{additional channels} to pull from. To use a channel, write
5036 @code{~/.config/guix/channels.scm} to instruct @command{guix pull} to pull from it
5037 @emph{in addition} to the default Guix channel(s):
5038
5039 @vindex %default-channels
5040 @lisp
5041 ;; Add variant packages to those Guix provides.
5042 (cons (channel
5043 (name 'variant-packages)
5044 (url "https://example.org/variant-packages.git"))
5045 %default-channels)
5046 @end lisp
5047
5048 @noindent
5049 Note that the snippet above is (as always!)@: Scheme code; we use @code{cons} to
5050 add a channel the list of channels that the variable @code{%default-channels}
5051 is bound to (@pxref{Pairs, @code{cons} and lists,, guile, GNU Guile Reference
5052 Manual}). With this file in place, @command{guix pull} builds not only Guix
5053 but also the package modules from your own repository. The result in
5054 @file{~/.config/guix/current} is the union of Guix with your own package
5055 modules:
5056
5057 @example
5058 $ guix pull --list-generations
5059 @dots{}
5060 Generation 19 Aug 27 2018 16:20:48
5061 guix d894ab8
5062 repository URL: https://git.savannah.gnu.org/git/guix.git
5063 branch: master
5064 commit: d894ab8e9bfabcefa6c49d9ba2e834dd5a73a300
5065 variant-packages dd3df5e
5066 repository URL: https://example.org/variant-packages.git
5067 branch: master
5068 commit: dd3df5e2c8818760a8fc0bd699e55d3b69fef2bb
5069 11 new packages: variant-gimp, variant-emacs-with-cool-features, @dots{}
5070 4 packages upgraded: emacs-racket-mode@@0.0.2-2.1b78827, @dots{}
5071 @end example
5072
5073 @noindent
5074 The output of @command{guix pull} above shows that Generation@tie{}19 includes
5075 both Guix and packages from the @code{variant-personal-packages} channel. Among
5076 the new and upgraded packages that are listed, some like @code{variant-gimp} and
5077 @code{variant-emacs-with-cool-features} might come from
5078 @code{variant-packages}, while others come from the Guix default channel.
5079
5080 @node Using a Custom Guix Channel
5081 @section Using a Custom Guix Channel
5082
5083 The channel called @code{guix} specifies where Guix itself---its command-line
5084 tools as well as its package collection---should be downloaded. For instance,
5085 suppose you want to update from another copy of the Guix repository at
5086 @code{example.org}, and specifically the @code{super-hacks} branch, you can
5087 write in @code{~/.config/guix/channels.scm} this specification:
5088
5089 @lisp
5090 ;; Tell 'guix pull' to use another repo.
5091 (list (channel
5092 (name 'guix)
5093 (url "https://example.org/another-guix.git")
5094 (branch "super-hacks")))
5095 @end lisp
5096
5097 @noindent
5098 From there on, @command{guix pull} will fetch code from the @code{super-hacks}
5099 branch of the repository at @code{example.org}. The authentication concern is
5100 addressed below ((@pxref{Channel Authentication}).
5101
5102 @node Replicating Guix
5103 @section Replicating Guix
5104
5105 @cindex pinning, channels
5106 @cindex replicating Guix
5107 @cindex reproducibility, of Guix
5108 The @command{guix pull --list-generations} output above shows precisely which
5109 commits were used to build this instance of Guix. We can thus replicate it,
5110 say, on another machine, by providing a channel specification in
5111 @file{~/.config/guix/channels.scm} that is ``pinned'' to these commits:
5112
5113 @lisp
5114 ;; Deploy specific commits of my channels of interest.
5115 (list (channel
5116 (name 'guix)
5117 (url "https://git.savannah.gnu.org/git/guix.git")
5118 (commit "6298c3ffd9654d3231a6f25390b056483e8f407c"))
5119 (channel
5120 (name 'variant-packages)
5121 (url "https://example.org/variant-packages.git")
5122 (commit "dd3df5e2c8818760a8fc0bd699e55d3b69fef2bb")))
5123 @end lisp
5124
5125 The @command{guix describe --format=channels} command can even generate this
5126 list of channels directly (@pxref{Invoking guix describe}). The resulting
5127 file can be used with the -C options of @command{guix pull}
5128 (@pxref{Invoking guix pull}) or @command{guix time-machine}
5129 (@pxref{Invoking guix time-machine}).
5130
5131 At this point the two machines run the @emph{exact same Guix}, with access to
5132 the @emph{exact same packages}. The output of @command{guix build gimp} on
5133 one machine will be exactly the same, bit for bit, as the output of the same
5134 command on the other machine. It also means both machines have access to all
5135 the source code of Guix and, transitively, to all the source code of every
5136 package it defines.
5137
5138 This gives you super powers, allowing you to track the provenance of binary
5139 artifacts with very fine grain, and to reproduce software environments at
5140 will---some sort of ``meta reproducibility'' capabilities, if you will.
5141 @xref{Inferiors}, for another way to take advantage of these super powers.
5142
5143 @node Channel Authentication
5144 @section Channel Authentication
5145
5146 @anchor{channel-authentication}
5147 @cindex authentication, of channel code
5148 The @command{guix pull} and @command{guix time-machine} commands
5149 @dfn{authenticate} the code retrieved from channels: they make sure each
5150 commit that is fetched is signed by an authorized developer. The goal
5151 is to protect from unauthorized modifications to the channel that would
5152 lead users to run malicious code.
5153
5154 As a user, you must provide a @dfn{channel introduction} in your
5155 channels file so that Guix knows how to authenticate its first commit.
5156 A channel specification, including its introduction, looks something
5157 along these lines:
5158
5159 @lisp
5160 (channel
5161 (name 'some-channel)
5162 (url "https://example.org/some-channel.git")
5163 (introduction
5164 (make-channel-introduction
5165 "6f0d8cc0d88abb59c324b2990bfee2876016bb86"
5166 (openpgp-fingerprint
5167 "CABB A931 C0FF EEC6 900D 0CFB 090B 1199 3D9A EBB5"))))
5168 @end lisp
5169
5170 The specification above shows the name and URL of the channel. The call
5171 to @code{make-channel-introduction} above specifies that authentication
5172 of this channel starts at commit @code{6f0d8cc@dots{}}, which is signed
5173 by the OpenPGP key with fingerprint @code{CABB A931@dots{}}.
5174
5175 For the main channel, called @code{guix}, you automatically get that
5176 information from your Guix installation. For other channels, include
5177 the channel introduction provided by the channel authors in your
5178 @file{channels.scm} file. Make sure you retrieve the channel
5179 introduction from a trusted source since that is the root of your trust.
5180
5181 If you're curious about the authentication mechanics, read on!
5182
5183 @node Channels with Substitutes
5184 @section Channels with Substitutes
5185
5186 When running @command{guix pull}, Guix will first compile the
5187 definitions of every available package. This is an expensive operation
5188 for which substitutes (@pxref{Substitutes}) may be available. The
5189 following snippet in @file{channels.scm} will ensure that @command{guix
5190 pull} uses the latest commit with available substitutes for the package
5191 definitions: this is done by querying the continuous integration
5192 server at @url{https://ci.guix.gnu.org}.
5193
5194 @lisp
5195 (use-modules (guix ci))
5196
5197 (list (channel-with-substitutes-available
5198 %default-guix-channel
5199 "https://ci.guix.gnu.org"))
5200 @end lisp
5201
5202 Note that this does not mean that all the packages that you will
5203 install after running @command{guix pull} will have available
5204 substitutes. It only ensures that @command{guix pull} will not try to
5205 compile package definitions. This is particularly useful when using
5206 machines with limited resources.
5207
5208 @node Creating a Channel
5209 @section Creating a Channel
5210
5211 @cindex personal packages (channels)
5212 @cindex channels, for personal packages
5213 Let's say you have a bunch of custom package variants or personal packages
5214 that you think would make little sense to contribute to the Guix project, but
5215 would like to have these packages transparently available to you at the
5216 command line. You would first write modules containing those package
5217 definitions (@pxref{Package Modules}), maintain them in a Git repository, and
5218 then you and anyone else can use it as an additional channel to get packages
5219 from. Neat, no?
5220
5221 @c What follows stems from discussions at
5222 @c <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=22629#134> as well as
5223 @c earlier discussions on guix-devel@gnu.org.
5224 @quotation Warning
5225 Before you, dear user, shout---``woow this is @emph{soooo coool}!''---and
5226 publish your personal channel to the world, we would like to share a few words
5227 of caution:
5228
5229 @itemize
5230 @item
5231 Before publishing a channel, please consider contributing your package
5232 definitions to Guix proper (@pxref{Contributing}). Guix as a project is open
5233 to free software of all sorts, and packages in Guix proper are readily
5234 available to all Guix users and benefit from the project's quality assurance
5235 process.
5236
5237 @item
5238 When you maintain package definitions outside Guix, we, Guix developers,
5239 consider that @emph{the compatibility burden is on you}. Remember that
5240 package modules and package definitions are just Scheme code that uses various
5241 programming interfaces (APIs). We want to remain free to change these APIs to
5242 keep improving Guix, possibly in ways that break your channel. We never
5243 change APIs gratuitously, but we will @emph{not} commit to freezing APIs
5244 either.
5245
5246 @item
5247 Corollary: if you're using an external channel and that channel breaks, please
5248 @emph{report the issue to the channel authors}, not to the Guix project.
5249 @end itemize
5250
5251 You've been warned! Having said this, we believe external channels are a
5252 practical way to exert your freedom to augment Guix' package collection and to
5253 share your improvements, which are basic tenets of
5254 @uref{https://www.gnu.org/philosophy/free-sw.html, free software}. Please
5255 email us at @email{guix-devel@@gnu.org} if you'd like to discuss this.
5256 @end quotation
5257
5258 To create a channel, create a Git repository containing your own package
5259 modules and make it available. The repository can contain anything, but a
5260 useful channel will contain Guile modules that export packages. Once you
5261 start using a channel, Guix will behave as if the root directory of that
5262 channel's Git repository has been added to the Guile load path (@pxref{Load
5263 Paths,,, guile, GNU Guile Reference Manual}). For example, if your channel
5264 contains a file at @file{my-packages/my-tools.scm} that defines a Guile
5265 module, then the module will be available under the name @code{(my-packages
5266 my-tools)}, and you will be able to use it like any other module
5267 (@pxref{Modules,,, guile, GNU Guile Reference Manual}).
5268
5269 As a channel author, consider bundling authentication material with your
5270 channel so that users can authenticate it. @xref{Channel
5271 Authentication}, and @ref{Specifying Channel Authorizations}, for info
5272 on how to do it.
5273
5274
5275 @node Package Modules in a Sub-directory
5276 @section Package Modules in a Sub-directory
5277
5278 @cindex subdirectory, channels
5279 As a channel author, you may want to keep your channel modules in a
5280 sub-directory. If your modules are in the sub-directory @file{guix}, you must
5281 add a meta-data file @file{.guix-channel} that contains:
5282
5283 @lisp
5284 (channel
5285 (version 0)
5286 (directory "guix"))
5287 @end lisp
5288
5289 @node Declaring Channel Dependencies
5290 @section Declaring Channel Dependencies
5291
5292 @cindex dependencies, channels
5293 @cindex meta-data, channels
5294 Channel authors may decide to augment a package collection provided by other
5295 channels. They can declare their channel to be dependent on other channels in
5296 a meta-data file @file{.guix-channel}, which is to be placed in the root of
5297 the channel repository.
5298
5299 The meta-data file should contain a simple S-expression like this:
5300
5301 @lisp
5302 (channel
5303 (version 0)
5304 (dependencies
5305 (channel
5306 (name some-collection)
5307 (url "https://example.org/first-collection.git")
5308
5309 ;; The 'introduction' bit below is optional: you would
5310 ;; provide it for dependencies that can be authenticated.
5311 (introduction
5312 (channel-introduction
5313 (version 0)
5314 (commit "a8883b58dc82e167c96506cf05095f37c2c2c6cd")
5315 (signer "CABB A931 C0FF EEC6 900D 0CFB 090B 1199 3D9A EBB5"))))
5316 (channel
5317 (name some-other-collection)
5318 (url "https://example.org/second-collection.git")
5319 (branch "testing"))))
5320 @end lisp
5321
5322 In the above example this channel is declared to depend on two other channels,
5323 which will both be fetched automatically. The modules provided by the channel
5324 will be compiled in an environment where the modules of all these declared
5325 channels are available.
5326
5327 For the sake of reliability and maintainability, you should avoid dependencies
5328 on channels that you don't control, and you should aim to keep the number of
5329 dependencies to a minimum.
5330
5331 @node Specifying Channel Authorizations
5332 @section Specifying Channel Authorizations
5333
5334 @cindex channel authorizations
5335 @anchor{channel-authorizations}
5336 As we saw above, Guix ensures the source code it pulls from channels
5337 comes from authorized developers. As a channel author, you need to
5338 specify the list of authorized developers in the
5339 @file{.guix-authorizations} file in the channel's Git repository. The
5340 authentication rule is simple: each commit must be signed by a key
5341 listed in the @file{.guix-authorizations} file of its parent
5342 commit(s)@footnote{Git commits form a @dfn{directed acyclic graph}
5343 (DAG). Each commit can have zero or more parents; ``regular'' commits
5344 have one parent and merge commits have two parent commits. Read
5345 @uref{https://eagain.net/articles/git-for-computer-scientists/, @i{Git
5346 for Computer Scientists}} for a great overview.} The
5347 @file{.guix-authorizations} file looks like this:
5348
5349 @lisp
5350 ;; Example '.guix-authorizations' file.
5351
5352 (authorizations
5353 (version 0) ;current file format version
5354
5355 (("AD17 A21E F8AE D8F1 CC02 DBD9 F8AE D8F1 765C 61E3"
5356 (name "alice"))
5357 ("2A39 3FFF 68F4 EF7A 3D29 12AF 68F4 EF7A 22FB B2D5"
5358 (name "bob"))
5359 ("CABB A931 C0FF EEC6 900D 0CFB 090B 1199 3D9A EBB5"
5360 (name "charlie"))))
5361 @end lisp
5362
5363 Each fingerprint is followed by optional key/value pairs, as in the
5364 example above. Currently these key/value pairs are ignored.
5365
5366 This authentication rule creates a chicken-and-egg issue: how do we
5367 authenticate the first commit? Related to that: how do we deal with
5368 channels whose repository history contains unsigned commits and lack
5369 @file{.guix-authorizations}? And how do we fork existing channels?
5370
5371 @cindex channel introduction
5372 Channel introductions answer these questions by describing the first
5373 commit of a channel that should be authenticated. The first time a
5374 channel is fetched with @command{guix pull} or @command{guix
5375 time-machine}, the command looks up the introductory commit and verifies
5376 that it is signed by the specified OpenPGP key. From then on, it
5377 authenticates commits according to the rule above.
5378
5379 Additionally, your channel must provide all the OpenPGP keys that were
5380 ever mentioned in @file{.guix-authorizations}, stored as @file{.key}
5381 files, which can be either binary or ``ASCII-armored''. By default,
5382 those @file{.key} files are searched for in the branch named
5383 @code{keyring} but you can specify a different branch name in
5384 @code{.guix-channel} like so:
5385
5386 @lisp
5387 (channel
5388 (version 0)
5389 (keyring-reference "my-keyring-branch"))
5390 @end lisp
5391
5392 To summarize, as the author of a channel, there are three things you have
5393 to do to allow users to authenticate your code:
5394
5395 @enumerate
5396 @item
5397 Export the OpenPGP keys of past and present committers with @command{gpg
5398 --export} and store them in @file{.key} files, by default in a branch
5399 named @code{keyring} (we recommend making it an @dfn{orphan branch}).
5400
5401 @item
5402 Introduce an initial @file{.guix-authorizations} in the channel's
5403 repository. Do that in a signed commit (@pxref{Commit Access}, for
5404 information on how to sign Git commits.)
5405
5406 @item
5407 Advertise the channel introduction, for instance on your channel's web
5408 page. The channel introduction, as we saw above, is the commit/key
5409 pair---i.e., the commit that introduced @file{.guix-authorizations}, and
5410 the fingerprint of the OpenPGP used to sign it.
5411 @end enumerate
5412
5413 Before pushing to your public Git repository, you can run @command{guix
5414 git-authenticate} to verify that you did sign all the commits you are
5415 about to push with an authorized key:
5416
5417 @example
5418 guix git authenticate @var{commit} @var{signer}
5419 @end example
5420
5421 @noindent
5422 where @var{commit} and @var{signer} are your channel introduction.
5423 @xref{Invoking guix git authenticate}, for details.
5424
5425 Publishing a signed channel requires discipline: any mistake, such as an
5426 unsigned commit or a commit signed by an unauthorized key, will prevent
5427 users from pulling from your channel---well, that's the whole point of
5428 authentication! Pay attention to merges in particular: merge commits
5429 are considered authentic if and only if they are signed by a key present
5430 in the @file{.guix-authorizations} file of @emph{both} branches.
5431
5432 @node Primary URL
5433 @section Primary URL
5434
5435 @cindex primary URL, channels
5436 Channel authors can indicate the primary URL of their channel's Git
5437 repository in the @file{.guix-channel} file, like so:
5438
5439 @lisp
5440 (channel
5441 (version 0)
5442 (url "https://example.org/guix.git"))
5443 @end lisp
5444
5445 This allows @command{guix pull} to determine whether it is pulling code
5446 from a mirror of the channel; when that is the case, it warns the user
5447 that the mirror might be stale and displays the primary URL@. That way,
5448 users cannot be tricked into fetching code from a stale mirror that does
5449 not receive security updates.
5450
5451 This feature only makes sense for authenticated repositories, such as
5452 the official @code{guix} channel, for which @command{guix pull} ensures
5453 the code it fetches is authentic.
5454
5455 @node Writing Channel News
5456 @section Writing Channel News
5457
5458 @cindex news, for channels
5459 Channel authors may occasionally want to communicate to their users
5460 information about important changes in the channel. You'd send them all
5461 an email, but that's not convenient.
5462
5463 Instead, channels can provide a @dfn{news file}; when the channel users
5464 run @command{guix pull}, that news file is automatically read and
5465 @command{guix pull --news} can display the announcements that correspond
5466 to the new commits that have been pulled, if any.
5467
5468 To do that, channel authors must first declare the name of the news file
5469 in their @file{.guix-channel} file:
5470
5471 @lisp
5472 (channel
5473 (version 0)
5474 (news-file "etc/news.txt"))
5475 @end lisp
5476
5477 The news file itself, @file{etc/news.txt} in this example, must look
5478 something like this:
5479
5480 @lisp
5481 (channel-news
5482 (version 0)
5483 (entry (tag "the-bug-fix")
5484 (title (en "Fixed terrible bug")
5485 (fr "Oh la la"))
5486 (body (en "@@emph@{Good news@}! It's fixed!")
5487 (eo "Certe ĝi pli bone funkcias nun!")))
5488 (entry (commit "bdcabe815cd28144a2d2b4bc3c5057b051fa9906")
5489 (title (en "Added a great package")
5490 (ca "Què vol dir guix?"))
5491 (body (en "Don't miss the @@code@{hello@} package!"))))
5492 @end lisp
5493
5494 While the news file is using the Scheme syntax, avoid naming it with a
5495 @file{.scm} extension or else it will get picked up when building the
5496 channel and yield an error since it is not a valid module.
5497 Alternatively, you can move the channel module to a subdirectory and
5498 store the news file in another directory.
5499
5500 The file consists of a list of @dfn{news entries}. Each entry is
5501 associated with a commit or tag: it describes changes made in this
5502 commit, possibly in preceding commits as well. Users see entries only
5503 the first time they obtain the commit the entry refers to.
5504
5505 The @code{title} field should be a one-line summary while @code{body}
5506 can be arbitrarily long, and both can contain Texinfo markup
5507 (@pxref{Overview,,, texinfo, GNU Texinfo}). Both the title and body are
5508 a list of language tag/message tuples, which allows @command{guix pull}
5509 to display news in the language that corresponds to the user's locale.
5510
5511 If you want to translate news using a gettext-based workflow, you can
5512 extract translatable strings with @command{xgettext} (@pxref{xgettext
5513 Invocation,,, gettext, GNU Gettext Utilities}). For example, assuming
5514 you write news entries in English first, the command below creates a PO
5515 file containing the strings to translate:
5516
5517 @example
5518 xgettext -o news.po -l scheme -ken etc/news.txt
5519 @end example
5520
5521 To sum up, yes, you could use your channel as a blog. But beware, this
5522 is @emph{not quite} what your users might expect.
5523
5524 @c *********************************************************************
5525 @node Development
5526 @chapter Development
5527
5528 @cindex software development
5529 If you are a software developer, Guix provides tools that you should find
5530 helpful---independently of the language you're developing in. This is what
5531 this chapter is about.
5532
5533 The @command{guix environment} command provides a convenient way to set up
5534 @dfn{development environments} containing all the dependencies and tools
5535 necessary to work on the software package of your choice. The @command{guix
5536 pack} command allows you to create @dfn{application bundles} that can be
5537 easily distributed to users who do not run Guix.
5538
5539 @menu
5540 * Invoking guix environment:: Setting up development environments.
5541 * Invoking guix pack:: Creating software bundles.
5542 * The GCC toolchain:: Working with languages supported by GCC.
5543 * Invoking guix git authenticate:: Authenticating Git repositories.
5544 @end menu
5545
5546 @node Invoking guix environment
5547 @section Invoking @command{guix environment}
5548
5549 @cindex reproducible build environments
5550 @cindex development environments
5551 @cindex @command{guix environment}
5552 @cindex environment, package build environment
5553 The purpose of @command{guix environment} is to assist hackers in
5554 creating reproducible development environments without polluting their
5555 package profile. The @command{guix environment} tool takes one or more
5556 packages, builds all of their inputs, and creates a shell
5557 environment to use them.
5558
5559 The general syntax is:
5560
5561 @example
5562 guix environment @var{options} @var{package}@dots{}
5563 @end example
5564
5565 The following example spawns a new shell set up for the development of
5566 GNU@tie{}Guile:
5567
5568 @example
5569 guix environment guile
5570 @end example
5571
5572 If the needed dependencies are not built yet, @command{guix environment}
5573 automatically builds them. The environment of the new shell is an
5574 augmented version of the environment that @command{guix environment} was
5575 run in. It contains the necessary search paths for building the given
5576 package added to the existing environment variables. To create
5577 a ``pure'' environment, in which the original environment variables have
5578 been unset, use the @option{--pure} option@footnote{Users sometimes
5579 wrongfully augment environment variables such as @env{PATH} in their
5580 @file{~/.bashrc} file. As a consequence, when @command{guix
5581 environment} launches it, Bash may read @file{~/.bashrc}, thereby
5582 introducing ``impurities'' in these environment variables. It is an
5583 error to define such environment variables in @file{.bashrc}; instead,
5584 they should be defined in @file{.bash_profile}, which is sourced only by
5585 log-in shells. @xref{Bash Startup Files,,, bash, The GNU Bash Reference
5586 Manual}, for details on Bash start-up files.}.
5587
5588 Exiting from a Guix environment is the same as exiting from the shell,
5589 and will place the user back in the old environment before @command{guix
5590 environment} was invoked. The next garbage collection (@pxref{Invoking
5591 guix gc}) will clean up packages that were installed from within the
5592 environment and are no longer used outside of it.
5593
5594 @vindex GUIX_ENVIRONMENT
5595 @command{guix environment} defines the @env{GUIX_ENVIRONMENT}
5596 variable in the shell it spawns; its value is the file name of the
5597 profile of this environment. This allows users to, say, define a
5598 specific prompt for development environments in their @file{.bashrc}
5599 (@pxref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}):
5600
5601 @example
5602 if [ -n "$GUIX_ENVIRONMENT" ]
5603 then
5604 export PS1="\u@@\h \w [dev]\$ "
5605 fi
5606 @end example
5607
5608 @noindent
5609 ...@: or to browse the profile:
5610
5611 @example
5612 $ ls "$GUIX_ENVIRONMENT/bin"
5613 @end example
5614
5615 Additionally, more than one package may be specified, in which case the
5616 union of the inputs for the given packages are used. For example, the
5617 command below spawns a shell where all of the dependencies of both Guile
5618 and Emacs are available:
5619
5620 @example
5621 guix environment guile emacs
5622 @end example
5623
5624 Sometimes an interactive shell session is not desired. An arbitrary
5625 command may be invoked by placing the @code{--} token to separate the
5626 command from the rest of the arguments:
5627
5628 @example
5629 guix environment guile -- make -j4
5630 @end example
5631
5632 In other situations, it is more convenient to specify the list of
5633 packages needed in the environment. For example, the following command
5634 runs @command{python} from an environment containing Python@tie{}2.7 and
5635 NumPy:
5636
5637 @example
5638 guix environment --ad-hoc python2-numpy python-2.7 -- python
5639 @end example
5640
5641 Furthermore, one might want the dependencies of a package and also some
5642 additional packages that are not build-time or runtime dependencies, but
5643 are useful when developing nonetheless. Because of this, the
5644 @option{--ad-hoc} flag is positional. Packages appearing before
5645 @option{--ad-hoc} are interpreted as packages whose dependencies will be
5646 added to the environment. Packages appearing after are interpreted as
5647 packages that will be added to the environment directly. For example,
5648 the following command creates a Guix development environment that
5649 additionally includes Git and strace:
5650
5651 @example
5652 guix environment --pure guix --ad-hoc git strace
5653 @end example
5654
5655 @cindex container
5656 Sometimes it is desirable to isolate the environment as much as
5657 possible, for maximal purity and reproducibility. In particular, when
5658 using Guix on a host distro that is not Guix System, it is desirable to
5659 prevent access to @file{/usr/bin} and other system-wide resources from
5660 the development environment. For example, the following command spawns
5661 a Guile REPL in a ``container'' where only the store and the current
5662 working directory are mounted:
5663
5664 @example
5665 guix environment --ad-hoc --container guile -- guile
5666 @end example
5667
5668 @quotation Note
5669 The @option{--container} option requires Linux-libre 3.19 or newer.
5670 @end quotation
5671
5672 @cindex certificates
5673 Another typical use case for containers is to run security-sensitive
5674 applications such as a web browser. To run Eolie, we must expose and
5675 share some files and directories; we include @code{nss-certs} and expose
5676 @file{/etc/ssl/certs/} for HTTPS authentication; finally we preserve the
5677 @env{DISPLAY} environment variable since containerized graphical
5678 applications won't display without it.
5679
5680 @example
5681 guix environment --preserve='^DISPLAY$' --container --network \
5682 --expose=/etc/machine-id \
5683 --expose=/etc/ssl/certs/ \
5684 --share=$HOME/.local/share/eolie/=$HOME/.local/share/eolie/ \
5685 --ad-hoc eolie nss-certs dbus -- eolie
5686 @end example
5687
5688 The available options are summarized below.
5689
5690 @table @code
5691 @item --root=@var{file}
5692 @itemx -r @var{file}
5693 @cindex persistent environment
5694 @cindex garbage collector root, for environments
5695 Make @var{file} a symlink to the profile for this environment, and
5696 register it as a garbage collector root.
5697
5698 This is useful if you want to protect your environment from garbage
5699 collection, to make it ``persistent''.
5700
5701 When this option is omitted, the environment is protected from garbage
5702 collection only for the duration of the @command{guix environment}
5703 session. This means that next time you recreate the same environment,
5704 you could have to rebuild or re-download packages. @xref{Invoking guix
5705 gc}, for more on GC roots.
5706
5707 @item --expression=@var{expr}
5708 @itemx -e @var{expr}
5709 Create an environment for the package or list of packages that
5710 @var{expr} evaluates to.
5711
5712 For example, running:
5713
5714 @example
5715 guix environment -e '(@@ (gnu packages maths) petsc-openmpi)'
5716 @end example
5717
5718 starts a shell with the environment for this specific variant of the
5719 PETSc package.
5720
5721 Running:
5722
5723 @example
5724 guix environment --ad-hoc -e '(@@ (gnu) %base-packages)'
5725 @end example
5726
5727 starts a shell with all the base system packages available.
5728
5729 The above commands only use the default output of the given packages.
5730 To select other outputs, two element tuples can be specified:
5731
5732 @example
5733 guix environment --ad-hoc -e '(list (@@ (gnu packages bash) bash) "include")'
5734 @end example
5735
5736 @item --load=@var{file}
5737 @itemx -l @var{file}
5738 Create an environment for the package or list of packages that the code
5739 within @var{file} evaluates to.
5740
5741 As an example, @var{file} might contain a definition like this
5742 (@pxref{Defining Packages}):
5743
5744 @lisp
5745 @verbatiminclude environment-gdb.scm
5746 @end lisp
5747
5748 @item --manifest=@var{file}
5749 @itemx -m @var{file}
5750 Create an environment for the packages contained in the manifest object
5751 returned by the Scheme code in @var{file}. This option can be repeated
5752 several times, in which case the manifests are concatenated.
5753
5754 This is similar to the same-named option in @command{guix package}
5755 (@pxref{profile-manifest, @option{--manifest}}) and uses the same
5756 manifest files.
5757
5758 @item --ad-hoc
5759 Include all specified packages in the resulting environment, as if an
5760 @i{ad hoc} package were defined with them as inputs. This option is
5761 useful for quickly creating an environment without having to write a
5762 package expression to contain the desired inputs.
5763
5764 For instance, the command:
5765
5766 @example
5767 guix environment --ad-hoc guile guile-sdl -- guile
5768 @end example
5769
5770 runs @command{guile} in an environment where Guile and Guile-SDL are
5771 available.
5772
5773 Note that this example implicitly asks for the default output of
5774 @code{guile} and @code{guile-sdl}, but it is possible to ask for a
5775 specific output---e.g., @code{glib:bin} asks for the @code{bin} output
5776 of @code{glib} (@pxref{Packages with Multiple Outputs}).
5777
5778 This option may be composed with the default behavior of @command{guix
5779 environment}. Packages appearing before @option{--ad-hoc} are
5780 interpreted as packages whose dependencies will be added to the
5781 environment, the default behavior. Packages appearing after are
5782 interpreted as packages that will be added to the environment directly.
5783
5784 @item --pure
5785 Unset existing environment variables when building the new environment, except
5786 those specified with @option{--preserve} (see below). This has the effect of
5787 creating an environment in which search paths only contain package inputs.
5788
5789 @item --preserve=@var{regexp}
5790 @itemx -E @var{regexp}
5791 When used alongside @option{--pure}, preserve the environment variables
5792 matching @var{regexp}---in other words, put them on a ``white list'' of
5793 environment variables that must be preserved. This option can be repeated
5794 several times.
5795
5796 @example
5797 guix environment --pure --preserve=^SLURM --ad-hoc openmpi @dots{} \
5798 -- mpirun @dots{}
5799 @end example
5800
5801 This example runs @command{mpirun} in a context where the only environment
5802 variables defined are @env{PATH}, environment variables whose name starts
5803 with @samp{SLURM}, as well as the usual ``precious'' variables (@env{HOME},
5804 @env{USER}, etc.).
5805
5806 @item --search-paths
5807 Display the environment variable definitions that make up the
5808 environment.
5809
5810 @item --system=@var{system}
5811 @itemx -s @var{system}
5812 Attempt to build for @var{system}---e.g., @code{i686-linux}.
5813
5814 @item --container
5815 @itemx -C
5816 @cindex container
5817 Run @var{command} within an isolated container. The current working
5818 directory outside the container is mapped inside the container.
5819 Additionally, unless overridden with @option{--user}, a dummy home
5820 directory is created that matches the current user's home directory, and
5821 @file{/etc/passwd} is configured accordingly.
5822
5823 The spawned process runs as the current user outside the container. Inside
5824 the container, it has the same UID and GID as the current user, unless
5825 @option{--user} is passed (see below).
5826
5827 @item --network
5828 @itemx -N
5829 For containers, share the network namespace with the host system.
5830 Containers created without this flag only have access to the loopback
5831 device.
5832
5833 @item --link-profile
5834 @itemx -P
5835 For containers, link the environment profile to @file{~/.guix-profile}
5836 within the container and set @code{GUIX_ENVIRONMENT} to that.
5837 This is equivalent to making @file{~/.guix-profile} a symlink to the
5838 actual profile within the container.
5839 Linking will fail and abort the environment if the directory already
5840 exists, which will certainly be the case if @command{guix environment}
5841 was invoked in the user's home directory.
5842
5843 Certain packages are configured to look in @file{~/.guix-profile} for
5844 configuration files and data;@footnote{For example, the
5845 @code{fontconfig} package inspects @file{~/.guix-profile/share/fonts}
5846 for additional fonts.} @option{--link-profile} allows these programs to
5847 behave as expected within the environment.
5848
5849 @item --user=@var{user}
5850 @itemx -u @var{user}
5851 For containers, use the username @var{user} in place of the current
5852 user. The generated @file{/etc/passwd} entry within the container will
5853 contain the name @var{user}, the home directory will be
5854 @file{/home/@var{user}}, and no user GECOS data will be copied. Furthermore,
5855 the UID and GID inside the container are 1000. @var{user}
5856 need not exist on the system.
5857
5858 Additionally, any shared or exposed path (see @option{--share} and
5859 @option{--expose} respectively) whose target is within the current user's
5860 home directory will be remapped relative to @file{/home/USER}; this
5861 includes the automatic mapping of the current working directory.
5862
5863 @example
5864 # will expose paths as /home/foo/wd, /home/foo/test, and /home/foo/target
5865 cd $HOME/wd
5866 guix environment --container --user=foo \
5867 --expose=$HOME/test \
5868 --expose=/tmp/target=$HOME/target
5869 @end example
5870
5871 While this will limit the leaking of user identity through home paths
5872 and each of the user fields, this is only one useful component of a
5873 broader privacy/anonymity solution---not one in and of itself.
5874
5875 @item --no-cwd
5876 For containers, the default behavior is to share the current working
5877 directory with the isolated container and immediately change to that
5878 directory within the container. If this is undesirable,
5879 @option{--no-cwd} will cause the current working directory to @emph{not}
5880 be automatically shared and will change to the user's home directory
5881 within the container instead. See also @option{--user}.
5882
5883 @item --expose=@var{source}[=@var{target}]
5884 @itemx --share=@var{source}[=@var{target}]
5885 For containers, @option{--expose} (resp. @option{--share}) exposes the
5886 file system @var{source} from the host system as the read-only
5887 (resp. writable) file system @var{target} within the container. If
5888 @var{target} is not specified, @var{source} is used as the target mount
5889 point in the container.
5890
5891 The example below spawns a Guile REPL in a container in which the user's
5892 home directory is accessible read-only via the @file{/exchange}
5893 directory:
5894
5895 @example
5896 guix environment --container --expose=$HOME=/exchange --ad-hoc guile -- guile
5897 @end example
5898
5899 @end table
5900
5901 @command{guix environment}
5902 also supports all of the common build options that @command{guix
5903 build} supports (@pxref{Common Build Options}) as well as package
5904 transformation options (@pxref{Package Transformation Options}).
5905
5906 @node Invoking guix pack
5907 @section Invoking @command{guix pack}
5908
5909 Occasionally you want to pass software to people who are not (yet!)
5910 lucky enough to be using Guix. You'd tell them to run @command{guix
5911 package -i @var{something}}, but that's not possible in this case. This
5912 is where @command{guix pack} comes in.
5913
5914 @quotation Note
5915 If you are looking for ways to exchange binaries among machines that
5916 already run Guix, @pxref{Invoking guix copy}, @ref{Invoking guix
5917 publish}, and @ref{Invoking guix archive}.
5918 @end quotation
5919
5920 @cindex pack
5921 @cindex bundle
5922 @cindex application bundle
5923 @cindex software bundle
5924 The @command{guix pack} command creates a shrink-wrapped @dfn{pack} or
5925 @dfn{software bundle}: it creates a tarball or some other archive
5926 containing the binaries of the software you're interested in, and all
5927 its dependencies. The resulting archive can be used on any machine that
5928 does not have Guix, and people can run the exact same binaries as those
5929 you have with Guix. The pack itself is created in a bit-reproducible
5930 fashion, so anyone can verify that it really contains the build results
5931 that you pretend to be shipping.
5932
5933 For example, to create a bundle containing Guile, Emacs, Geiser, and all
5934 their dependencies, you can run:
5935
5936 @example
5937 $ guix pack guile emacs geiser
5938 @dots{}
5939 /gnu/store/@dots{}-pack.tar.gz
5940 @end example
5941
5942 The result here is a tarball containing a @file{/gnu/store} directory
5943 with all the relevant packages. The resulting tarball contains a
5944 @dfn{profile} with the three packages of interest; the profile is the
5945 same as would be created by @command{guix package -i}. It is this
5946 mechanism that is used to create Guix's own standalone binary tarball
5947 (@pxref{Binary Installation}).
5948
5949 Users of this pack would have to run
5950 @file{/gnu/store/@dots{}-profile/bin/guile} to run Guile, which you may
5951 find inconvenient. To work around it, you can create, say, a
5952 @file{/opt/gnu/bin} symlink to the profile:
5953
5954 @example
5955 guix pack -S /opt/gnu/bin=bin guile emacs geiser
5956 @end example
5957
5958 @noindent
5959 That way, users can happily type @file{/opt/gnu/bin/guile} and enjoy.
5960
5961 @cindex relocatable binaries, with @command{guix pack}
5962 What if the recipient of your pack does not have root privileges on
5963 their machine, and thus cannot unpack it in the root file system? In
5964 that case, you will want to use the @option{--relocatable} option (see
5965 below). This option produces @dfn{relocatable binaries}, meaning they
5966 they can be placed anywhere in the file system hierarchy: in the example
5967 above, users can unpack your tarball in their home directory and
5968 directly run @file{./opt/gnu/bin/guile}.
5969
5970 @cindex Docker, build an image with guix pack
5971 Alternatively, you can produce a pack in the Docker image format using
5972 the following command:
5973
5974 @example
5975 guix pack -f docker -S /bin=bin guile guile-readline
5976 @end example
5977
5978 @noindent
5979 The result is a tarball that can be passed to the @command{docker load}
5980 command, followed by @code{docker run}:
5981
5982 @example
5983 docker load < @var{file}
5984 docker run -ti guile-guile-readline /bin/guile
5985 @end example
5986
5987 @noindent
5988 where @var{file} is the image returned by @var{guix pack}, and
5989 @code{guile-guile-readline} is its ``image tag''. See the
5990 @uref{https://docs.docker.com/engine/reference/commandline/load/, Docker
5991 documentation} for more information.
5992
5993 @cindex Singularity, build an image with guix pack
5994 @cindex SquashFS, build an image with guix pack
5995 Yet another option is to produce a SquashFS image with the following
5996 command:
5997
5998 @example
5999 guix pack -f squashfs bash guile emacs geiser
6000 @end example
6001
6002 @noindent
6003 The result is a SquashFS file system image that can either be mounted or
6004 directly be used as a file system container image with the
6005 @uref{https://www.sylabs.io/docs/, Singularity container execution
6006 environment}, using commands like @command{singularity shell} or
6007 @command{singularity exec}.
6008
6009 Several command-line options allow you to customize your pack:
6010
6011 @table @code
6012 @item --format=@var{format}
6013 @itemx -f @var{format}
6014 Produce a pack in the given @var{format}.
6015
6016 The available formats are:
6017
6018 @table @code
6019 @item tarball
6020 This is the default format. It produces a tarball containing all the
6021 specified binaries and symlinks.
6022
6023 @item docker
6024 This produces a tarball that follows the
6025 @uref{https://github.com/docker/docker/blob/master/image/spec/v1.2.md,
6026 Docker Image Specification}. The ``repository name'' as it appears in
6027 the output of the @command{docker images} command is computed from
6028 package names passed on the command line or in the manifest file.
6029
6030 @item squashfs
6031 This produces a SquashFS image containing all the specified binaries and
6032 symlinks, as well as empty mount points for virtual file systems like
6033 procfs.
6034
6035 @quotation Note
6036 Singularity @emph{requires} you to provide @file{/bin/sh} in the image.
6037 For that reason, @command{guix pack -f squashfs} always implies @code{-S
6038 /bin=bin}. Thus, your @command{guix pack} invocation must always start
6039 with something like:
6040
6041 @example
6042 guix pack -f squashfs bash @dots{}
6043 @end example
6044
6045 If you forget the @code{bash} (or similar) package, @command{singularity
6046 run} and @command{singularity exec} will fail with an unhelpful ``no
6047 such file or directory'' message.
6048 @end quotation
6049 @end table
6050
6051 @cindex relocatable binaries
6052 @item --relocatable
6053 @itemx -R
6054 Produce @dfn{relocatable binaries}---i.e., binaries that can be placed
6055 anywhere in the file system hierarchy and run from there.
6056
6057 When this option is passed once, the resulting binaries require support for
6058 @dfn{user namespaces} in the kernel Linux; when passed
6059 @emph{twice}@footnote{Here's a trick to memorize it: @code{-RR}, which adds
6060 PRoot support, can be thought of as the abbreviation of ``Really
6061 Relocatable''. Neat, isn't it?}, relocatable binaries fall to back to
6062 other techniques if user namespaces are unavailable, and essentially
6063 work anywhere---see below for the implications.
6064
6065 For example, if you create a pack containing Bash with:
6066
6067 @example
6068 guix pack -RR -S /mybin=bin bash
6069 @end example
6070
6071 @noindent
6072 ...@: you can copy that pack to a machine that lacks Guix, and from your
6073 home directory as a normal user, run:
6074
6075 @example
6076 tar xf pack.tar.gz
6077 ./mybin/sh
6078 @end example
6079
6080 @noindent
6081 In that shell, if you type @code{ls /gnu/store}, you'll notice that
6082 @file{/gnu/store} shows up and contains all the dependencies of
6083 @code{bash}, even though the machine actually lacks @file{/gnu/store}
6084 altogether! That is probably the simplest way to deploy Guix-built
6085 software on a non-Guix machine.
6086
6087 @quotation Note
6088 By default, relocatable binaries rely on the @dfn{user namespace} feature of
6089 the kernel Linux, which allows unprivileged users to mount or change root.
6090 Old versions of Linux did not support it, and some GNU/Linux distributions
6091 turn it off.
6092
6093 To produce relocatable binaries that work even in the absence of user
6094 namespaces, pass @option{--relocatable} or @option{-R} @emph{twice}. In that
6095 case, binaries will try user namespace support and fall back to another
6096 @dfn{execution engine} if user namespaces are not supported. The
6097 following execution engines are supported:
6098
6099 @table @code
6100 @item default
6101 Try user namespaces and fall back to PRoot if user namespaces are not
6102 supported (see below).
6103
6104 @item performance
6105 Try user namespaces and fall back to Fakechroot if user namespaces are
6106 not supported (see below).
6107
6108 @item userns
6109 Run the program through user namespaces and abort if they are not
6110 supported.
6111
6112 @item proot
6113 Run through PRoot. The @uref{https://proot-me.github.io/, PRoot} program
6114 provides the necessary
6115 support for file system virtualization. It achieves that by using the
6116 @code{ptrace} system call on the running program. This approach has the
6117 advantage to work without requiring special kernel support, but it incurs
6118 run-time overhead every time a system call is made.
6119
6120 @item fakechroot
6121 Run through Fakechroot. @uref{https://github.com/dex4er/fakechroot/,
6122 Fakechroot} virtualizes file system accesses by intercepting calls to C
6123 library functions such as @code{open}, @code{stat}, @code{exec}, and so
6124 on. Unlike PRoot, it incurs very little overhead. However, it does not
6125 always work: for example, some file system accesses made from within the
6126 C library are not intercepted, and file system accesses made @i{via}
6127 direct syscalls are not intercepted either, leading to erratic behavior.
6128 @end table
6129
6130 @vindex GUIX_EXECUTION_ENGINE
6131 When running a wrapped program, you can explicitly request one of the
6132 execution engines listed above by setting the
6133 @env{GUIX_EXECUTION_ENGINE} environment variable accordingly.
6134 @end quotation
6135
6136 @cindex entry point, for Docker images
6137 @item --entry-point=@var{command}
6138 Use @var{command} as the @dfn{entry point} of the resulting pack, if the pack
6139 format supports it---currently @code{docker} and @code{squashfs} (Singularity)
6140 support it. @var{command} must be relative to the profile contained in the
6141 pack.
6142
6143 The entry point specifies the command that tools like @code{docker run} or
6144 @code{singularity run} automatically start by default. For example, you can
6145 do:
6146
6147 @example
6148 guix pack -f docker --entry-point=bin/guile guile
6149 @end example
6150
6151 The resulting pack can easily be loaded and @code{docker run} with no extra
6152 arguments will spawn @code{bin/guile}:
6153
6154 @example
6155 docker load -i pack.tar.gz
6156 docker run @var{image-id}
6157 @end example
6158
6159 @item --expression=@var{expr}
6160 @itemx -e @var{expr}
6161 Consider the package @var{expr} evaluates to.
6162
6163 This has the same purpose as the same-named option in @command{guix
6164 build} (@pxref{Additional Build Options, @option{--expression} in
6165 @command{guix build}}).
6166
6167 @item --manifest=@var{file}
6168 @itemx -m @var{file}
6169 Use the packages contained in the manifest object returned by the Scheme
6170 code in @var{file}. This option can be repeated several times, in which
6171 case the manifests are concatenated.
6172
6173 This has a similar purpose as the same-named option in @command{guix
6174 package} (@pxref{profile-manifest, @option{--manifest}}) and uses the
6175 same manifest files. It allows you to define a collection of packages
6176 once and use it both for creating profiles and for creating archives
6177 for use on machines that do not have Guix installed. Note that you can
6178 specify @emph{either} a manifest file @emph{or} a list of packages,
6179 but not both.
6180
6181 @item --system=@var{system}
6182 @itemx -s @var{system}
6183 Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of
6184 the system type of the build host.
6185
6186 @item --target=@var{triplet}
6187 @cindex cross-compilation
6188 Cross-build for @var{triplet}, which must be a valid GNU triplet, such
6189 as @code{"aarch64-linux-gnu"} (@pxref{Specifying target triplets, GNU
6190 configuration triplets,, autoconf, Autoconf}).
6191
6192 @item --compression=@var{tool}
6193 @itemx -C @var{tool}
6194 Compress the resulting tarball using @var{tool}---one of @code{gzip},
6195 @code{zstd}, @code{bzip2}, @code{xz}, @code{lzip}, or @code{none} for no
6196 compression.
6197
6198 @item --symlink=@var{spec}
6199 @itemx -S @var{spec}
6200 Add the symlinks specified by @var{spec} to the pack. This option can
6201 appear several times.
6202
6203 @var{spec} has the form @code{@var{source}=@var{target}}, where
6204 @var{source} is the symlink that will be created and @var{target} is the
6205 symlink target.
6206
6207 For instance, @code{-S /opt/gnu/bin=bin} creates a @file{/opt/gnu/bin}
6208 symlink pointing to the @file{bin} sub-directory of the profile.
6209
6210 @item --save-provenance
6211 Save provenance information for the packages passed on the command line.
6212 Provenance information includes the URL and commit of the channels in use
6213 (@pxref{Channels}).
6214
6215 Provenance information is saved in the
6216 @file{/gnu/store/@dots{}-profile/manifest} file in the pack, along with the
6217 usual package metadata---the name and version of each package, their
6218 propagated inputs, and so on. It is useful information to the recipient of
6219 the pack, who then knows how the pack was (supposedly) obtained.
6220
6221 This option is not enabled by default because, like timestamps, provenance
6222 information contributes nothing to the build process. In other words, there
6223 is an infinity of channel URLs and commit IDs that can lead to the same pack.
6224 Recording such ``silent'' metadata in the output thus potentially breaks the
6225 source-to-binary bitwise reproducibility property.
6226
6227 @item --root=@var{file}
6228 @itemx -r @var{file}
6229 @cindex garbage collector root, for packs
6230 Make @var{file} a symlink to the resulting pack, and register it as a garbage
6231 collector root.
6232
6233 @item --localstatedir
6234 @itemx --profile-name=@var{name}
6235 Include the ``local state directory'', @file{/var/guix}, in the resulting
6236 pack, and notably the @file{/var/guix/profiles/per-user/root/@var{name}}
6237 profile---by default @var{name} is @code{guix-profile}, which corresponds to
6238 @file{~root/.guix-profile}.
6239
6240 @file{/var/guix} contains the store database (@pxref{The Store}) as well
6241 as garbage-collector roots (@pxref{Invoking guix gc}). Providing it in
6242 the pack means that the store is ``complete'' and manageable by Guix;
6243 not providing it pack means that the store is ``dead'': items cannot be
6244 added to it or removed from it after extraction of the pack.
6245
6246 One use case for this is the Guix self-contained binary tarball
6247 (@pxref{Binary Installation}).
6248
6249 @item --derivation
6250 @itemx -d
6251 Print the name of the derivation that builds the pack.
6252
6253 @item --bootstrap
6254 Use the bootstrap binaries to build the pack. This option is only
6255 useful to Guix developers.
6256 @end table
6257
6258 In addition, @command{guix pack} supports all the common build options
6259 (@pxref{Common Build Options}) and all the package transformation
6260 options (@pxref{Package Transformation Options}).
6261
6262
6263 @node The GCC toolchain
6264 @section The GCC toolchain
6265
6266 @cindex GCC
6267 @cindex ld-wrapper
6268 @cindex linker wrapper
6269 @cindex toolchain, for C development
6270 @cindex toolchain, for Fortran development
6271
6272 If you need a complete toolchain for compiling and linking C or C++
6273 source code, use the @code{gcc-toolchain} package. This package
6274 provides a complete GCC toolchain for C/C++ development, including GCC
6275 itself, the GNU C Library (headers and binaries, plus debugging symbols
6276 in the @code{debug} output), Binutils, and a linker wrapper.
6277
6278 The wrapper's purpose is to inspect the @code{-L} and @code{-l} switches
6279 passed to the linker, add corresponding @code{-rpath} arguments, and
6280 invoke the actual linker with this new set of arguments. You can instruct the
6281 wrapper to refuse to link against libraries not in the store by setting the
6282 @env{GUIX_LD_WRAPPER_ALLOW_IMPURITIES} environment variable to @code{no}.
6283
6284 The package @code{gfortran-toolchain} provides a complete GCC toolchain
6285 for Fortran development. For other languages, please use
6286 @samp{guix search gcc toolchain} (@pxref{guix-search,, Invoking guix package}).
6287
6288
6289 @node Invoking guix git authenticate
6290 @section Invoking @command{guix git authenticate}
6291
6292 The @command{guix git authenticate} command authenticates a Git checkout
6293 following the same rule as for channels (@pxref{channel-authentication,
6294 channel authentication}). That is, starting from a given commit, it
6295 ensures that all subsequent commits are signed by an OpenPGP key whose
6296 fingerprint appears in the @file{.guix-authorizations} file of its
6297 parent commit(s).
6298
6299 You will find this command useful if you maintain a channel. But in
6300 fact, this authentication mechanism is useful in a broader context, so
6301 you might want to use it for Git repositories that have nothing to do
6302 with Guix.
6303
6304 The general syntax is:
6305
6306 @example
6307 guix git authenticate @var{commit} @var{signer} [@var{options}@dots{}]
6308 @end example
6309
6310 By default, this command authenticates the Git checkout in the current
6311 directory; it outputs nothing and exits with exit code zero on success
6312 and non-zero on failure. @var{commit} above denotes the first commit
6313 where authentication takes place, and @var{signer} is the OpenPGP
6314 fingerprint of public key used to sign @var{commit}. Together, they
6315 form a ``channel introduction'' (@pxref{channel-authentication, channel
6316 introduction}). The options below allow you to fine-tune the process.
6317
6318 @table @code
6319 @item --repository=@var{directory}
6320 @itemx -r @var{directory}
6321 Open the Git repository in @var{directory} instead of the current
6322 directory.
6323
6324 @item --keyring=@var{reference}
6325 @itemx -k @var{reference}
6326 Load OpenPGP keyring from @var{reference}, the reference of a branch
6327 such as @code{origin/keyring} or @code{my-keyring}. The branch must
6328 contain OpenPGP public keys in @file{.key} files, either in binary form
6329 or ``ASCII-armored''. By default the keyring is loaded from the branch
6330 named @code{keyring}.
6331
6332 @item --stats
6333 Display commit signing statistics upon completion.
6334
6335 @item --cache-key=@var{key}
6336 Previously-authenticated commits are cached in a file under
6337 @file{~/.cache/guix/authentication}. This option forces the cache to be
6338 stored in file @var{key} in that directory.
6339
6340 @item --historical-authorizations=@var{file}
6341 By default, any commit whose parent commit(s) lack the
6342 @file{.guix-authorizations} file is considered inauthentic. In
6343 contrast, this option considers the authorizations in @var{file} for any
6344 commit that lacks @file{.guix-authorizations}. The format of @var{file}
6345 is the same as that of @file{.guix-authorizations}
6346 (@pxref{channel-authorizations, @file{.guix-authorizations} format}).
6347 @end table
6348
6349
6350 @c *********************************************************************
6351 @node Programming Interface
6352 @chapter Programming Interface
6353
6354 GNU Guix provides several Scheme programming interfaces (APIs) to
6355 define, build, and query packages. The first interface allows users to
6356 write high-level package definitions. These definitions refer to
6357 familiar packaging concepts, such as the name and version of a package,
6358 its build system, and its dependencies. These definitions can then be
6359 turned into concrete build actions.
6360
6361 Build actions are performed by the Guix daemon, on behalf of users. In a
6362 standard setup, the daemon has write access to the store---the
6363 @file{/gnu/store} directory---whereas users do not. The recommended
6364 setup also has the daemon perform builds in chroots, under specific
6365 build users, to minimize interference with the rest of the system.
6366
6367 @cindex derivation
6368 Lower-level APIs are available to interact with the daemon and the
6369 store. To instruct the daemon to perform a build action, users actually
6370 provide it with a @dfn{derivation}. A derivation is a low-level
6371 representation of the build actions to be taken, and the environment in
6372 which they should occur---derivations are to package definitions what
6373 assembly is to C programs. The term ``derivation'' comes from the fact
6374 that build results @emph{derive} from them.
6375
6376 This chapter describes all these APIs in turn, starting from high-level
6377 package definitions.
6378
6379 @menu
6380 * Package Modules:: Packages from the programmer's viewpoint.
6381 * Defining Packages:: Defining new packages.
6382 * Defining Package Variants:: Customizing packages.
6383 * Build Systems:: Specifying how packages are built.
6384 * Build Phases:: Phases of the build process of a package.
6385 * Build Utilities:: Helpers for your package definitions and more.
6386 * The Store:: Manipulating the package store.
6387 * Derivations:: Low-level interface to package derivations.
6388 * The Store Monad:: Purely functional interface to the store.
6389 * G-Expressions:: Manipulating build expressions.
6390 * Invoking guix repl:: Programming Guix in Guile
6391 @end menu
6392
6393 @node Package Modules
6394 @section Package Modules
6395
6396 From a programming viewpoint, the package definitions of the
6397 GNU distribution are provided by Guile modules in the @code{(gnu packages
6398 @dots{})} name space@footnote{Note that packages under the @code{(gnu
6399 packages @dots{})} module name space are not necessarily ``GNU
6400 packages''. This module naming scheme follows the usual Guile module
6401 naming convention: @code{gnu} means that these modules are distributed
6402 as part of the GNU system, and @code{packages} identifies modules that
6403 define packages.} (@pxref{Modules, Guile modules,, guile, GNU Guile
6404 Reference Manual}). For instance, the @code{(gnu packages emacs)}
6405 module exports a variable named @code{emacs}, which is bound to a
6406 @code{<package>} object (@pxref{Defining Packages}).
6407
6408 The @code{(gnu packages @dots{})} module name space is
6409 automatically scanned for packages by the command-line tools. For
6410 instance, when running @code{guix install emacs}, all the @code{(gnu
6411 packages @dots{})} modules are scanned until one that exports a package
6412 object whose name is @code{emacs} is found. This package search
6413 facility is implemented in the @code{(gnu packages)} module.
6414
6415 @cindex customization, of packages
6416 @cindex package module search path
6417 Users can store package definitions in modules with different
6418 names---e.g., @code{(my-packages emacs)}@footnote{Note that the file
6419 name and module name must match. For instance, the @code{(my-packages
6420 emacs)} module must be stored in a @file{my-packages/emacs.scm} file
6421 relative to the load path specified with @option{--load-path} or
6422 @env{GUIX_PACKAGE_PATH}. @xref{Modules and the File System,,,
6423 guile, GNU Guile Reference Manual}, for details.}. There are two ways to make
6424 these package definitions visible to the user interfaces:
6425
6426 @enumerate
6427 @item
6428 By adding the directory containing your package modules to the search path
6429 with the @code{-L} flag of @command{guix package} and other commands
6430 (@pxref{Common Build Options}), or by setting the @env{GUIX_PACKAGE_PATH}
6431 environment variable described below.
6432
6433 @item
6434 By defining a @dfn{channel} and configuring @command{guix pull} so that it
6435 pulls from it. A channel is essentially a Git repository containing package
6436 modules. @xref{Channels}, for more information on how to define and use
6437 channels.
6438 @end enumerate
6439
6440 @env{GUIX_PACKAGE_PATH} works similarly to other search path variables:
6441
6442 @defvr {Environment Variable} GUIX_PACKAGE_PATH
6443 This is a colon-separated list of directories to search for additional
6444 package modules. Directories listed in this variable take precedence
6445 over the own modules of the distribution.
6446 @end defvr
6447
6448 The distribution is fully @dfn{bootstrapped} and @dfn{self-contained}:
6449 each package is built based solely on other packages in the
6450 distribution. The root of this dependency graph is a small set of
6451 @dfn{bootstrap binaries}, provided by the @code{(gnu packages
6452 bootstrap)} module. For more information on bootstrapping,
6453 @pxref{Bootstrapping}.
6454
6455 @node Defining Packages
6456 @section Defining Packages
6457
6458 The high-level interface to package definitions is implemented in the
6459 @code{(guix packages)} and @code{(guix build-system)} modules. As an
6460 example, the package definition, or @dfn{recipe}, for the GNU Hello
6461 package looks like this:
6462
6463 @lisp
6464 (define-module (gnu packages hello)
6465 #:use-module (guix packages)
6466 #:use-module (guix download)
6467 #:use-module (guix build-system gnu)
6468 #:use-module (guix licenses)
6469 #:use-module (gnu packages gawk))
6470
6471 (define-public hello
6472 (package
6473 (name "hello")
6474 (version "2.10")
6475 (source (origin
6476 (method url-fetch)
6477 (uri (string-append "mirror://gnu/hello/hello-" version
6478 ".tar.gz"))
6479 (sha256
6480 (base32
6481 "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
6482 (build-system gnu-build-system)
6483 (arguments '(#:configure-flags '("--enable-silent-rules")))
6484 (inputs `(("gawk" ,gawk)))
6485 (synopsis "Hello, GNU world: An example GNU package")
6486 (description "Guess what GNU Hello prints!")
6487 (home-page "https://www.gnu.org/software/hello/")
6488 (license gpl3+)))
6489 @end lisp
6490
6491 @noindent
6492 Without being a Scheme expert, the reader may have guessed the meaning
6493 of the various fields here. This expression binds the variable
6494 @code{hello} to a @code{<package>} object, which is essentially a record
6495 (@pxref{SRFI-9, Scheme records,, guile, GNU Guile Reference Manual}).
6496 This package object can be inspected using procedures found in the
6497 @code{(guix packages)} module; for instance, @code{(package-name hello)}
6498 returns---surprise!---@code{"hello"}.
6499
6500 With luck, you may be able to import part or all of the definition of
6501 the package you are interested in from another repository, using the
6502 @code{guix import} command (@pxref{Invoking guix import}).
6503
6504 In the example above, @code{hello} is defined in a module of its own,
6505 @code{(gnu packages hello)}. Technically, this is not strictly
6506 necessary, but it is convenient to do so: all the packages defined in
6507 modules under @code{(gnu packages @dots{})} are automatically known to
6508 the command-line tools (@pxref{Package Modules}).
6509
6510 There are a few points worth noting in the above package definition:
6511
6512 @itemize
6513 @item
6514 The @code{source} field of the package is an @code{<origin>} object
6515 (@pxref{origin Reference}, for the complete reference).
6516 Here, the @code{url-fetch} method from @code{(guix download)} is used,
6517 meaning that the source is a file to be downloaded over FTP or HTTP.
6518
6519 The @code{mirror://gnu} prefix instructs @code{url-fetch} to use one of
6520 the GNU mirrors defined in @code{(guix download)}.
6521
6522 The @code{sha256} field specifies the expected SHA256 hash of the file
6523 being downloaded. It is mandatory, and allows Guix to check the
6524 integrity of the file. The @code{(base32 @dots{})} form introduces the
6525 base32 representation of the hash. You can obtain this information with
6526 @code{guix download} (@pxref{Invoking guix download}) and @code{guix
6527 hash} (@pxref{Invoking guix hash}).
6528
6529 @cindex patches
6530 When needed, the @code{origin} form can also have a @code{patches} field
6531 listing patches to be applied, and a @code{snippet} field giving a
6532 Scheme expression to modify the source code.
6533
6534 @item
6535 @cindex GNU Build System
6536 The @code{build-system} field specifies the procedure to build the
6537 package (@pxref{Build Systems}). Here, @code{gnu-build-system}
6538 represents the familiar GNU Build System, where packages may be
6539 configured, built, and installed with the usual @code{./configure &&
6540 make && make check && make install} command sequence.
6541
6542 When you start packaging non-trivial software, you may need tools to
6543 manipulate those build phases, manipulate files, and so on. @xref{Build
6544 Utilities}, for more on this.
6545
6546 @item
6547 The @code{arguments} field specifies options for the build system
6548 (@pxref{Build Systems}). Here it is interpreted by
6549 @code{gnu-build-system} as a request run @file{configure} with the
6550 @option{--enable-silent-rules} flag.
6551
6552 @cindex quote
6553 @cindex quoting
6554 @findex '
6555 @findex quote
6556 What about these quote (@code{'}) characters? They are Scheme syntax to
6557 introduce a literal list; @code{'} is synonymous with @code{quote}.
6558 @xref{Expression Syntax, quoting,, guile, GNU Guile Reference Manual},
6559 for details. Here the value of the @code{arguments} field is a list of
6560 arguments passed to the build system down the road, as with @code{apply}
6561 (@pxref{Fly Evaluation, @code{apply},, guile, GNU Guile Reference
6562 Manual}).
6563
6564 The hash-colon (@code{#:}) sequence defines a Scheme @dfn{keyword}
6565 (@pxref{Keywords,,, guile, GNU Guile Reference Manual}), and
6566 @code{#:configure-flags} is a keyword used to pass a keyword argument
6567 to the build system (@pxref{Coding With Keywords,,, guile, GNU Guile
6568 Reference Manual}).
6569
6570 @item
6571 The @code{inputs} field specifies inputs to the build process---i.e.,
6572 build-time or run-time dependencies of the package. Here, we define an
6573 input called @code{"gawk"} whose value is that of the @code{gawk}
6574 variable; @code{gawk} is itself bound to a @code{<package>} object.
6575
6576 @cindex backquote (quasiquote)
6577 @findex `
6578 @findex quasiquote
6579 @cindex comma (unquote)
6580 @findex ,
6581 @findex unquote
6582 @findex ,@@
6583 @findex unquote-splicing
6584 Again, @code{`} (a backquote, synonymous with @code{quasiquote}) allows
6585 us to introduce a literal list in the @code{inputs} field, while
6586 @code{,} (a comma, synonymous with @code{unquote}) allows us to insert a
6587 value in that list (@pxref{Expression Syntax, unquote,, guile, GNU Guile
6588 Reference Manual}).
6589
6590 Note that GCC, Coreutils, Bash, and other essential tools do not need to
6591 be specified as inputs here. Instead, @code{gnu-build-system} takes care
6592 of ensuring that they are present (@pxref{Build Systems}).
6593
6594 However, any other dependencies need to be specified in the
6595 @code{inputs} field. Any dependency not specified here will simply be
6596 unavailable to the build process, possibly leading to a build failure.
6597 @end itemize
6598
6599 @xref{package Reference}, for a full description of possible fields.
6600
6601 Once a package definition is in place, the
6602 package may actually be built using the @code{guix build} command-line
6603 tool (@pxref{Invoking guix build}), troubleshooting any build failures
6604 you encounter (@pxref{Debugging Build Failures}). You can easily jump back to the
6605 package definition using the @command{guix edit} command
6606 (@pxref{Invoking guix edit}).
6607 @xref{Packaging Guidelines}, for
6608 more information on how to test package definitions, and
6609 @ref{Invoking guix lint}, for information on how to check a definition
6610 for style conformance.
6611 @vindex GUIX_PACKAGE_PATH
6612 Lastly, @pxref{Channels}, for information
6613 on how to extend the distribution by adding your own package definitions
6614 in a ``channel''.
6615
6616 Finally, updating the package definition to a new upstream version
6617 can be partly automated by the @command{guix refresh} command
6618 (@pxref{Invoking guix refresh}).
6619
6620 Behind the scenes, a derivation corresponding to the @code{<package>}
6621 object is first computed by the @code{package-derivation} procedure.
6622 That derivation is stored in a @file{.drv} file under @file{/gnu/store}.
6623 The build actions it prescribes may then be realized by using the
6624 @code{build-derivations} procedure (@pxref{The Store}).
6625
6626 @deffn {Scheme Procedure} package-derivation @var{store} @var{package} [@var{system}]
6627 Return the @code{<derivation>} object of @var{package} for @var{system}
6628 (@pxref{Derivations}).
6629
6630 @var{package} must be a valid @code{<package>} object, and @var{system}
6631 must be a string denoting the target system type---e.g.,
6632 @code{"x86_64-linux"} for an x86_64 Linux-based GNU system. @var{store}
6633 must be a connection to the daemon, which operates on the store
6634 (@pxref{The Store}).
6635 @end deffn
6636
6637 @noindent
6638 @cindex cross-compilation
6639 Similarly, it is possible to compute a derivation that cross-builds a
6640 package for some other system:
6641
6642 @deffn {Scheme Procedure} package-cross-derivation @var{store} @
6643 @var{package} @var{target} [@var{system}]
6644 Return the @code{<derivation>} object of @var{package} cross-built from
6645 @var{system} to @var{target}.
6646
6647 @var{target} must be a valid GNU triplet denoting the target hardware
6648 and operating system, such as @code{"aarch64-linux-gnu"}
6649 (@pxref{Specifying Target Triplets,,, autoconf, Autoconf}).
6650 @end deffn
6651
6652 Once you have package definitions, you can easily define @emph{variants}
6653 of those packages. @xref{Defining Package Variants}, for more on that.
6654
6655 @menu
6656 * package Reference:: The package data type.
6657 * origin Reference:: The origin data type.
6658 @end menu
6659
6660
6661 @node package Reference
6662 @subsection @code{package} Reference
6663
6664 This section summarizes all the options available in @code{package}
6665 declarations (@pxref{Defining Packages}).
6666
6667 @deftp {Data Type} package
6668 This is the data type representing a package recipe.
6669
6670 @table @asis
6671 @item @code{name}
6672 The name of the package, as a string.
6673
6674 @item @code{version}
6675 The version of the package, as a string.
6676
6677 @item @code{source}
6678 An object telling how the source code for the package should be
6679 acquired. Most of the time, this is an @code{origin} object, which
6680 denotes a file fetched from the Internet (@pxref{origin Reference}). It
6681 can also be any other ``file-like'' object such as a @code{local-file},
6682 which denotes a file from the local file system (@pxref{G-Expressions,
6683 @code{local-file}}).
6684
6685 @item @code{build-system}
6686 The build system that should be used to build the package (@pxref{Build
6687 Systems}).
6688
6689 @item @code{arguments} (default: @code{'()})
6690 The arguments that should be passed to the build system. This is a
6691 list, typically containing sequential keyword-value pairs.
6692
6693 @item @code{inputs} (default: @code{'()})
6694 @itemx @code{native-inputs} (default: @code{'()})
6695 @itemx @code{propagated-inputs} (default: @code{'()})
6696 @cindex inputs, of packages
6697 These fields list dependencies of the package. Each one is a list of
6698 tuples, where each tuple has a label for the input (a string) as its
6699 first element, a package, origin, or derivation as its second element,
6700 and optionally the name of the output thereof that should be used, which
6701 defaults to @code{"out"} (@pxref{Packages with Multiple Outputs}, for
6702 more on package outputs). For example, the list below specifies three
6703 inputs:
6704
6705 @lisp
6706 `(("libffi" ,libffi)
6707 ("libunistring" ,libunistring)
6708 ("glib:bin" ,glib "bin")) ;the "bin" output of Glib
6709 @end lisp
6710
6711 @cindex cross compilation, package dependencies
6712 The distinction between @code{native-inputs} and @code{inputs} is
6713 necessary when considering cross-compilation. When cross-compiling,
6714 dependencies listed in @code{inputs} are built for the @emph{target}
6715 architecture; conversely, dependencies listed in @code{native-inputs}
6716 are built for the architecture of the @emph{build} machine.
6717
6718 @code{native-inputs} is typically used to list tools needed at
6719 build time, but not at run time, such as Autoconf, Automake, pkg-config,
6720 Gettext, or Bison. @command{guix lint} can report likely mistakes in
6721 this area (@pxref{Invoking guix lint}).
6722
6723 @anchor{package-propagated-inputs}
6724 Lastly, @code{propagated-inputs} is similar to @code{inputs}, but the
6725 specified packages will be automatically installed to profiles
6726 (@pxref{Features, the role of profiles in Guix}) alongside the package
6727 they belong to (@pxref{package-cmd-propagated-inputs, @command{guix
6728 package}}, for information on how @command{guix package} deals with
6729 propagated inputs).
6730
6731 For example this is necessary when packaging a C/C++ library that needs
6732 headers of another library to compile, or when a pkg-config file refers
6733 to another one @i{via} its @code{Requires} field.
6734
6735 Another example where @code{propagated-inputs} is useful is for languages
6736 that lack a facility to record the run-time search path akin to the
6737 @code{RUNPATH} of ELF files; this includes Guile, Python, Perl, and
6738 more. When packaging libraries written in those languages, ensure they
6739 can find library code they depend on at run time by listing run-time
6740 dependencies in @code{propagated-inputs} rather than @code{inputs}.
6741
6742 @item @code{outputs} (default: @code{'("out")})
6743 The list of output names of the package. @xref{Packages with Multiple
6744 Outputs}, for typical uses of additional outputs.
6745
6746 @item @code{native-search-paths} (default: @code{'()})
6747 @itemx @code{search-paths} (default: @code{'()})
6748 A list of @code{search-path-specification} objects describing
6749 search-path environment variables honored by the package.
6750
6751 @item @code{replacement} (default: @code{#f})
6752 This must be either @code{#f} or a package object that will be used as a
6753 @dfn{replacement} for this package. @xref{Security Updates, grafts},
6754 for details.
6755
6756 @item @code{synopsis}
6757 A one-line description of the package.
6758
6759 @item @code{description}
6760 A more elaborate description of the package.
6761
6762 @item @code{license}
6763 @cindex license, of packages
6764 The license of the package; a value from @code{(guix licenses)},
6765 or a list of such values.
6766
6767 @item @code{home-page}
6768 The URL to the home-page of the package, as a string.
6769
6770 @item @code{supported-systems} (default: @code{%supported-systems})
6771 The list of systems supported by the package, as strings of the form
6772 @code{architecture-kernel}, for example @code{"x86_64-linux"}.
6773
6774 @item @code{location} (default: source location of the @code{package} form)
6775 The source location of the package. It is useful to override this when
6776 inheriting from another package, in which case this field is not
6777 automatically corrected.
6778 @end table
6779 @end deftp
6780
6781 @deffn {Scheme Syntax} this-package
6782 When used in the @emph{lexical scope} of a package field definition, this
6783 identifier resolves to the package being defined.
6784
6785 The example below shows how to add a package as a native input of itself when
6786 cross-compiling:
6787
6788 @lisp
6789 (package
6790 (name "guile")
6791 ;; ...
6792
6793 ;; When cross-compiled, Guile, for example, depends on
6794 ;; a native version of itself. Add it here.
6795 (native-inputs (if (%current-target-system)
6796 `(("self" ,this-package))
6797 '())))
6798 @end lisp
6799
6800 It is an error to refer to @code{this-package} outside a package definition.
6801 @end deffn
6802
6803 Because packages are regular Scheme objects that capture a complete
6804 dependency graph and associated build procedures, it is often useful to
6805 write procedures that take a package and return a modified version
6806 thereof according to some parameters. Below are a few examples.
6807
6808 @cindex tool chain, choosing a package's tool chain
6809 @deffn {Scheme Procedure} package-with-c-toolchain @var{package} @var{toolchain}
6810 Return a variant of @var{package} that uses @var{toolchain} instead of
6811 the default GNU C/C++ toolchain. @var{toolchain} must be a list of
6812 inputs (label/package tuples) providing equivalent functionality, such
6813 as the @code{gcc-toolchain} package.
6814
6815 The example below returns a variant of the @code{hello} package built
6816 with GCC@tie{}10.x and the rest of the GNU tool chain (Binutils and the
6817 GNU C Library) instead of the default tool chain:
6818
6819 @lisp
6820 (let ((toolchain (specification->package "gcc-toolchain@@10")))
6821 (package-with-c-toolchain hello `(("toolchain" ,toolchain))))
6822 @end lisp
6823
6824 The build tool chain is part of the @dfn{implicit inputs} of
6825 packages---it's usually not listed as part of the various ``inputs''
6826 fields and is instead pulled in by the build system. Consequently, this
6827 procedure works by changing the build system of @var{package} so that it
6828 pulls in @var{toolchain} instead of the defaults. @ref{Build Systems},
6829 for more on build systems.
6830 @end deffn
6831
6832 @node origin Reference
6833 @subsection @code{origin} Reference
6834
6835 This section documents @dfn{origins}. An @code{origin} declaration
6836 specifies data that must be ``produced''---downloaded, usually---and
6837 whose content hash is known in advance. Origins are primarily used to
6838 represent the source code of packages (@pxref{Defining Packages}). For
6839 that reason, the @code{origin} form allows you to declare patches to
6840 apply to the original source code as well as code snippets to modify it.
6841
6842 @deftp {Data Type} origin
6843 This is the data type representing a source code origin.
6844
6845 @table @asis
6846 @item @code{uri}
6847 An object containing the URI of the source. The object type depends on
6848 the @code{method} (see below). For example, when using the
6849 @var{url-fetch} method of @code{(guix download)}, the valid @code{uri}
6850 values are: a URL represented as a string, or a list thereof.
6851
6852 @cindex fixed-output derivations, for download
6853 @item @code{method}
6854 A monadic procedure that handles the given URI@. The procedure must
6855 accept at least three arguments: the value of the @code{uri} field and
6856 the hash algorithm and hash value specified by the @code{hash} field.
6857 It must return a store item or a derivation in the store monad
6858 (@pxref{The Store Monad}); most methods return a fixed-output derivation
6859 (@pxref{Derivations}).
6860
6861 Commonly used methods include @code{url-fetch}, which fetches data from
6862 a URL, and @code{git-fetch}, which fetches data from a Git repository
6863 (see below).
6864
6865 @item @code{sha256}
6866 A bytevector containing the SHA-256 hash of the source. This is
6867 equivalent to providing a @code{content-hash} SHA256 object in the
6868 @code{hash} field described below.
6869
6870 @item @code{hash}
6871 The @code{content-hash} object of the source---see below for how to use
6872 @code{content-hash}.
6873
6874 You can obtain this information using @code{guix download}
6875 (@pxref{Invoking guix download}) or @code{guix hash} (@pxref{Invoking
6876 guix hash}).
6877
6878 @item @code{file-name} (default: @code{#f})
6879 The file name under which the source code should be saved. When this is
6880 @code{#f}, a sensible default value will be used in most cases. In case
6881 the source is fetched from a URL, the file name from the URL will be
6882 used. For version control checkouts, it is recommended to provide the
6883 file name explicitly because the default is not very descriptive.
6884
6885 @item @code{patches} (default: @code{'()})
6886 A list of file names, origins, or file-like objects (@pxref{G-Expressions,
6887 file-like objects}) pointing to patches to be applied to the source.
6888
6889 This list of patches must be unconditional. In particular, it cannot
6890 depend on the value of @code{%current-system} or
6891 @code{%current-target-system}.
6892
6893 @item @code{snippet} (default: @code{#f})
6894 A G-expression (@pxref{G-Expressions}) or S-expression that will be run
6895 in the source directory. This is a convenient way to modify the source,
6896 sometimes more convenient than a patch.
6897
6898 @item @code{patch-flags} (default: @code{'("-p1")})
6899 A list of command-line flags that should be passed to the @code{patch}
6900 command.
6901
6902 @item @code{patch-inputs} (default: @code{#f})
6903 Input packages or derivations to the patching process. When this is
6904 @code{#f}, the usual set of inputs necessary for patching are provided,
6905 such as GNU@tie{}Patch.
6906
6907 @item @code{modules} (default: @code{'()})
6908 A list of Guile modules that should be loaded during the patching
6909 process and while running the code in the @code{snippet} field.
6910
6911 @item @code{patch-guile} (default: @code{#f})
6912 The Guile package that should be used in the patching process. When
6913 this is @code{#f}, a sensible default is used.
6914 @end table
6915 @end deftp
6916
6917 @deftp {Data Type} content-hash @var{value} [@var{algorithm}]
6918 Construct a content hash object for the given @var{algorithm}, and with
6919 @var{value} as its hash value. When @var{algorithm} is omitted, assume
6920 it is @code{sha256}.
6921
6922 @var{value} can be a literal string, in which case it is base32-decoded,
6923 or it can be a bytevector.
6924
6925 The following forms are all equivalent:
6926
6927 @lisp
6928 (content-hash "05zxkyz9bv3j9h0xyid1rhvh3klhsmrpkf3bcs6frvlgyr2gwilj")
6929 (content-hash "05zxkyz9bv3j9h0xyid1rhvh3klhsmrpkf3bcs6frvlgyr2gwilj"
6930 sha256)
6931 (content-hash (base32
6932 "05zxkyz9bv3j9h0xyid1rhvh3klhsmrpkf3bcs6frvlgyr2gwilj"))
6933 (content-hash (base64 "kkb+RPaP7uyMZmu4eXPVkM4BN8yhRd8BTHLslb6f/Rc=")
6934 sha256)
6935 @end lisp
6936
6937 Technically, @code{content-hash} is currently implemented as a macro.
6938 It performs sanity checks at macro-expansion time, when possible, such
6939 as ensuring that @var{value} has the right size for @var{algorithm}.
6940 @end deftp
6941
6942 As we have seen above, how exactly the data an origin refers to is
6943 retrieved is determined by its @code{method} field. The @code{(guix
6944 download)} module provides the most common method, @code{url-fetch},
6945 described below.
6946
6947 @deffn {Scheme Procedure} url-fetch @var{url} @var{hash-algo} @var{hash} @
6948 [name] [#:executable? #f]
6949 Return a fixed-output derivation that fetches data from @var{url} (a
6950 string, or a list of strings denoting alternate URLs), which is expected
6951 to have hash @var{hash} of type @var{hash-algo} (a symbol). By default,
6952 the file name is the base name of URL; optionally, @var{name} can
6953 specify a different file name. When @var{executable?} is true, make the
6954 downloaded file executable.
6955
6956 When one of the URL starts with @code{mirror://}, then its host part is
6957 interpreted as the name of a mirror scheme, taken from @file{%mirror-file}.
6958
6959 Alternatively, when URL starts with @code{file://}, return the
6960 corresponding file name in the store.
6961 @end deffn
6962
6963 Likewise, the @code{(guix git-download)} module defines the
6964 @code{git-fetch} origin method, which fetches data from a Git version
6965 control repository, and the @code{git-reference} data type to describe
6966 the repository and revision to fetch.
6967
6968 @deffn {Scheme Procedure} git-fetch @var{ref} @var{hash-algo} @var{hash}
6969 Return a fixed-output derivation that fetches @var{ref}, a
6970 @code{<git-reference>} object. The output is expected to have recursive
6971 hash @var{hash} of type @var{hash-algo} (a symbol). Use @var{name} as
6972 the file name, or a generic name if @code{#f}.
6973 @end deffn
6974
6975 @deftp {Data Type} git-reference
6976 This data type represents a Git reference for @code{git-fetch} to
6977 retrieve.
6978
6979 @table @asis
6980 @item @code{url}
6981 The URL of the Git repository to clone.
6982
6983 @item @code{commit}
6984 This string denotes either the commit to fetch (a hexadecimal string,
6985 either the full SHA1 commit or a ``short'' commit string; the latter is
6986 not recommended) or the tag to fetch.
6987
6988 @item @code{recursive?} (default: @code{#f})
6989 This Boolean indicates whether to recursively fetch Git sub-modules.
6990 @end table
6991
6992 The example below denotes the @code{v2.10} tag of the GNU@tie{}Hello
6993 repository:
6994
6995 @lisp
6996 (git-reference
6997 (url "https://git.savannah.gnu.org/git/hello.git")
6998 (commit "v2.10"))
6999 @end lisp
7000
7001 This is equivalent to the reference below, which explicitly names the
7002 commit:
7003
7004 @lisp
7005 (git-reference
7006 (url "https://git.savannah.gnu.org/git/hello.git")
7007 (commit "dc7dc56a00e48fe6f231a58f6537139fe2908fb9"))
7008 @end lisp
7009 @end deftp
7010
7011 For Mercurial repositories, the module @code{(guix hg-download)} defines
7012 the @code{hg-fetch} origin method and @code{hg-reference} data type for
7013 support of the Mercurial version control system.
7014
7015 @deffn {Scheme Procedure} hg-fetch @var{ref} @var{hash-algo} @var{hash} @
7016 [name]
7017 Return a fixed-output derivation that fetches @var{ref}, a
7018 @code{<hg-reference>} object. The output is expected to have recursive
7019 hash @var{hash} of type @var{hash-algo} (a symbol). Use @var{name} as
7020 the file name, or a generic name if @code{#false}.
7021 @end deffn
7022
7023 @node Defining Package Variants
7024 @section Defining Package Variants
7025
7026 @cindex customizing packages
7027 @cindex variants, of packages
7028 One of the nice things with Guix is that, given a package definition,
7029 you can easily @emph{derive} variants of that package---for a different
7030 upstream version, with different dependencies, different compilation
7031 options, and so on. Some of these custom packages can be defined
7032 straight from the command line (@pxref{Package Transformation Options}).
7033 This section describes how to define package variants in code. This can
7034 be useful in ``manifests'' (@pxref{profile-manifest,
7035 @option{--manifest}}) and in your own package collection
7036 (@pxref{Creating a Channel}), among others!
7037
7038 @cindex inherit, for package definitions
7039 As discussed earlier, packages are first-class objects in the Scheme
7040 language. The @code{(guix packages)} module provides the @code{package}
7041 construct to define new package objects (@pxref{package Reference}).
7042 The easiest way to define a package variant is using the @code{inherit}
7043 keyword together with @code{package}. This allows you to inherit from a
7044 package definition while overriding the fields you want.
7045
7046 For example, given the @code{hello} variable, which contains a
7047 definition for the current version of GNU@tie{}Hello, here's how you
7048 would define a variant for version 2.2 (released in 2006, it's
7049 vintage!):
7050
7051 @lisp
7052 (use-modules (gnu packages base)) ;for 'hello'
7053
7054 (define hello-2.2
7055 (package
7056 (inherit hello)
7057 (version "2.2")
7058 (source (origin
7059 (method url-fetch)
7060 (uri (string-append "mirror://gnu/hello/hello-" version
7061 ".tar.gz"))
7062 (sha256
7063 (base32
7064 "0lappv4slgb5spyqbh6yl5r013zv72yqg2pcl30mginf3wdqd8k9"))))))
7065 @end lisp
7066
7067 The example above corresponds to what the @option{--with-source} package
7068 transformation option does. Essentially @code{hello-2.2} preserves all
7069 the fields of @code{hello}, except @code{version} and @code{source},
7070 which it overrides. Note that the original @code{hello} variable is
7071 still there, in the @code{(gnu packages base)} module, unchanged. When
7072 you define a custom package like this, you are really @emph{adding} a
7073 new package definition; the original one remains available.
7074
7075 You can just as well define variants with a different set of
7076 dependencies than the original package. For example, the default
7077 @code{gdb} package depends on @code{guile}, but since that is an
7078 optional dependency, you can define a variant that removes that
7079 dependency like so:
7080
7081 @lisp
7082 (use-modules (gnu packages gdb) ;for 'gdb'
7083 (srfi srfi-1)) ;for 'alist-delete'
7084
7085 (define gdb-sans-guile
7086 (package
7087 (inherit gdb)
7088 (inputs (alist-delete "guile"
7089 (package-inputs gdb)))))
7090 @end lisp
7091
7092 The @code{alist-delete} call above removes the tuple from the
7093 @code{inputs} field that has @code{"guile"} as its first element
7094 (@pxref{SRFI-1 Association Lists,,, guile, GNU Guile Reference
7095 Manual}).
7096
7097 In some cases, you may find it useful to write functions
7098 (``procedures'', in Scheme parlance) that return a package based on some
7099 parameters. For example, consider the @code{luasocket} library for the
7100 Lua programming language. We want to create @code{luasocket} packages
7101 for major versions of Lua. One way to do that is to define a procedure
7102 that takes a Lua package and returns a @code{luasocket} package that
7103 depends on it:
7104
7105 @lisp
7106 (define (make-lua-socket name lua)
7107 ;; Return a luasocket package built with LUA.
7108 (package
7109 (name name)
7110 (version "3.0")
7111 ;; several fields omitted
7112 (inputs
7113 `(("lua" ,lua)))
7114 (synopsis "Socket library for Lua")))
7115
7116 (define-public lua5.1-socket
7117 (make-lua-socket "lua5.1-socket" lua-5.1))
7118
7119 (define-public lua5.2-socket
7120 (make-lua-socket "lua5.2-socket" lua-5.2))
7121 @end lisp
7122
7123 Here we have defined packages @code{lua5.1-socket} and
7124 @code{lua5.2-socket} by calling @code{make-lua-socket} with different
7125 arguments. @xref{Procedures,,, guile, GNU Guile Reference Manual}, for
7126 more info on procedures. Having top-level public definitions for these
7127 two packages means that they can be referred to from the command line
7128 (@pxref{Package Modules}).
7129
7130 @cindex package transformations
7131 These are pretty simple package variants. As a convenience, the
7132 @code{(guix transformations)} module provides a high-level interface
7133 that directly maps to the more sophisticated package transformation
7134 options (@pxref{Package Transformation Options}):
7135
7136 @deffn {Scheme Procedure} options->transformation @var{opts}
7137 Return a procedure that, when passed an object to build (package,
7138 derivation, etc.), applies the transformations specified by @var{opts} and returns
7139 the resulting objects. @var{opts} must be a list of symbol/string pairs such as:
7140
7141 @lisp
7142 ((with-branch . "guile-gcrypt=master")
7143 (without-tests . "libgcrypt"))
7144 @end lisp
7145
7146 Each symbol names a transformation and the corresponding string is an argument
7147 to that transformation.
7148 @end deffn
7149
7150 For instance, a manifest equivalent to this command:
7151
7152 @example
7153 guix build guix \
7154 --with-branch=guile-gcrypt=master \
7155 --with-debug-info=zlib
7156 @end example
7157
7158 @noindent
7159 ... would look like this:
7160
7161 @lisp
7162 (use-modules (guix transformations))
7163
7164 (define transform
7165 ;; The package transformation procedure.
7166 (options->transformation
7167 '((with-branch . "guile-gcrypt=master")
7168 (with-debug-info . "zlib"))))
7169
7170 (packages->manifest
7171 (list (transform (specification->package "guix"))))
7172 @end lisp
7173
7174 @cindex input rewriting
7175 @cindex dependency graph rewriting
7176 The @code{options->transformation} procedure is convenient, but it's
7177 perhaps also not as flexible as you may like. How is it implemented?
7178 The astute reader probably noticed that most package transformation
7179 options go beyond the superficial changes shown in the first examples of
7180 this section: they involve @dfn{input rewriting}, whereby the dependency
7181 graph of a package is rewritten by replacing specific inputs by others.
7182
7183 Dependency graph rewriting, for the purposes of swapping packages in the
7184 graph, is what the @code{package-input-rewriting} procedure in
7185 @code{(guix packages)} implements.
7186
7187 @deffn {Scheme Procedure} package-input-rewriting @var{replacements} @
7188 [@var{rewrite-name}] [#:deep? #t]
7189 Return a procedure that, when passed a package, replaces its direct and
7190 indirect dependencies, including implicit inputs when @var{deep?} is
7191 true, according to @var{replacements}. @var{replacements} is a list of
7192 package pairs; the first element of each pair is the package to replace,
7193 and the second one is the replacement.
7194
7195 Optionally, @var{rewrite-name} is a one-argument procedure that takes
7196 the name of a package and returns its new name after rewrite.
7197 @end deffn
7198
7199 @noindent
7200 Consider this example:
7201
7202 @lisp
7203 (define libressl-instead-of-openssl
7204 ;; This is a procedure to replace OPENSSL by LIBRESSL,
7205 ;; recursively.
7206 (package-input-rewriting `((,openssl . ,libressl))))
7207
7208 (define git-with-libressl
7209 (libressl-instead-of-openssl git))
7210 @end lisp
7211
7212 @noindent
7213 Here we first define a rewriting procedure that replaces @var{openssl}
7214 with @var{libressl}. Then we use it to define a @dfn{variant} of the
7215 @var{git} package that uses @var{libressl} instead of @var{openssl}.
7216 This is exactly what the @option{--with-input} command-line option does
7217 (@pxref{Package Transformation Options, @option{--with-input}}).
7218
7219 The following variant of @code{package-input-rewriting} can match packages to
7220 be replaced by name rather than by identity.
7221
7222 @deffn {Scheme Procedure} package-input-rewriting/spec @var{replacements} [#:deep? #t]
7223 Return a procedure that, given a package, applies the given
7224 @var{replacements} to all the package graph, including implicit inputs
7225 unless @var{deep?} is false. @var{replacements} is a list of
7226 spec/procedures pair; each spec is a package specification such as
7227 @code{"gcc"} or @code{"guile@@2"}, and each procedure takes a matching
7228 package and returns a replacement for that package.
7229 @end deffn
7230
7231 The example above could be rewritten this way:
7232
7233 @lisp
7234 (define libressl-instead-of-openssl
7235 ;; Replace all the packages called "openssl" with LibreSSL.
7236 (package-input-rewriting/spec `(("openssl" . ,(const libressl)))))
7237 @end lisp
7238
7239 The key difference here is that, this time, packages are matched by spec and
7240 not by identity. In other words, any package in the graph that is called
7241 @code{openssl} will be replaced.
7242
7243 A more generic procedure to rewrite a package dependency graph is
7244 @code{package-mapping}: it supports arbitrary changes to nodes in the
7245 graph.
7246
7247 @deffn {Scheme Procedure} package-mapping @var{proc} [@var{cut?}] [#:deep? #f]
7248 Return a procedure that, given a package, applies @var{proc} to all the packages
7249 depended on and returns the resulting package. The procedure stops recursion
7250 when @var{cut?} returns true for a given package. When @var{deep?} is true, @var{proc} is
7251 applied to implicit inputs as well.
7252 @end deffn
7253
7254
7255 @node Build Systems
7256 @section Build Systems
7257
7258 @cindex build system
7259 Each package definition specifies a @dfn{build system} and arguments for
7260 that build system (@pxref{Defining Packages}). This @code{build-system}
7261 field represents the build procedure of the package, as well as implicit
7262 dependencies of that build procedure.
7263
7264 Build systems are @code{<build-system>} objects. The interface to
7265 create and manipulate them is provided by the @code{(guix build-system)}
7266 module, and actual build systems are exported by specific modules.
7267
7268 @cindex bag (low-level package representation)
7269 Under the hood, build systems first compile package objects to
7270 @dfn{bags}. A @dfn{bag} is like a package, but with less
7271 ornamentation---in other words, a bag is a lower-level representation of
7272 a package, which includes all the inputs of that package, including some
7273 that were implicitly added by the build system. This intermediate
7274 representation is then compiled to a derivation (@pxref{Derivations}).
7275 The @code{package-with-c-toolchain} is an example of a way to change the
7276 implicit inputs that a package's build system pulls in (@pxref{package
7277 Reference, @code{package-with-c-toolchain}}).
7278
7279 Build systems accept an optional list of @dfn{arguments}. In package
7280 definitions, these are passed @i{via} the @code{arguments} field
7281 (@pxref{Defining Packages}). They are typically keyword arguments
7282 (@pxref{Optional Arguments, keyword arguments in Guile,, guile, GNU
7283 Guile Reference Manual}). The value of these arguments is usually
7284 evaluated in the @dfn{build stratum}---i.e., by a Guile process launched
7285 by the daemon (@pxref{Derivations}).
7286
7287 The main build system is @code{gnu-build-system}, which implements the
7288 standard build procedure for GNU and many other packages. It
7289 is provided by the @code{(guix build-system gnu)} module.
7290
7291 @defvr {Scheme Variable} gnu-build-system
7292 @code{gnu-build-system} represents the GNU Build System, and variants
7293 thereof (@pxref{Configuration, configuration and makefile conventions,,
7294 standards, GNU Coding Standards}).
7295
7296 @cindex build phases
7297 In a nutshell, packages using it are configured, built, and installed with
7298 the usual @code{./configure && make && make check && make install}
7299 command sequence. In practice, a few additional steps are often needed.
7300 All these steps are split up in separate @dfn{phases},
7301 notably@footnote{Please see the @code{(guix build gnu-build-system)}
7302 modules for more details about the build phases.}:
7303
7304 @table @code
7305 @item unpack
7306 Unpack the source tarball, and change the current directory to the
7307 extracted source tree. If the source is actually a directory, copy it
7308 to the build tree, and enter that directory.
7309
7310 @item patch-source-shebangs
7311 Patch shebangs encountered in source files so they refer to the right
7312 store file names. For instance, this changes @code{#!/bin/sh} to
7313 @code{#!/gnu/store/@dots{}-bash-4.3/bin/sh}.
7314
7315 @item configure
7316 Run the @file{configure} script with a number of default options, such
7317 as @option{--prefix=/gnu/store/@dots{}}, as well as the options specified
7318 by the @code{#:configure-flags} argument.
7319
7320 @item build
7321 Run @code{make} with the list of flags specified with
7322 @code{#:make-flags}. If the @code{#:parallel-build?} argument is true
7323 (the default), build with @code{make -j}.
7324
7325 @item check
7326 Run @code{make check}, or some other target specified with
7327 @code{#:test-target}, unless @code{#:tests? #f} is passed. If the
7328 @code{#:parallel-tests?} argument is true (the default), run @code{make
7329 check -j}.
7330
7331 @item install
7332 Run @code{make install} with the flags listed in @code{#:make-flags}.
7333
7334 @item patch-shebangs
7335 Patch shebangs on the installed executable files.
7336
7337 @item strip
7338 Strip debugging symbols from ELF files (unless @code{#:strip-binaries?}
7339 is false), copying them to the @code{debug} output when available
7340 (@pxref{Installing Debugging Files}).
7341 @end table
7342
7343 @vindex %standard-phases
7344 The build-side module @code{(guix build gnu-build-system)} defines
7345 @code{%standard-phases} as the default list of build phases.
7346 @code{%standard-phases} is a list of symbol/procedure pairs, where the
7347 procedure implements the actual phase.
7348
7349 @xref{Build Phases}, for more info on build phases and ways to customize
7350 them.
7351
7352 In addition, this build system ensures that the ``standard'' environment
7353 for GNU packages is available. This includes tools such as GCC, libc,
7354 Coreutils, Bash, Make, Diffutils, grep, and sed (see the @code{(guix
7355 build-system gnu)} module for a complete list). We call these the
7356 @dfn{implicit inputs} of a package, because package definitions do not
7357 have to mention them.
7358 @end defvr
7359
7360 Other @code{<build-system>} objects are defined to support other
7361 conventions and tools used by free software packages. They inherit most
7362 of @code{gnu-build-system}, and differ mainly in the set of inputs
7363 implicitly added to the build process, and in the list of phases
7364 executed. Some of these build systems are listed below.
7365
7366 @defvr {Scheme Variable} ant-build-system
7367 This variable is exported by @code{(guix build-system ant)}. It
7368 implements the build procedure for Java packages that can be built with
7369 @url{https://ant.apache.org/, Ant build tool}.
7370
7371 It adds both @code{ant} and the @dfn{Java Development Kit} (JDK) as
7372 provided by the @code{icedtea} package to the set of inputs. Different
7373 packages can be specified with the @code{#:ant} and @code{#:jdk}
7374 parameters, respectively.
7375
7376 When the original package does not provide a suitable Ant build file,
7377 the parameter @code{#:jar-name} can be used to generate a minimal Ant
7378 build file @file{build.xml} with tasks to build the specified jar
7379 archive. In this case the parameter @code{#:source-dir} can be used to
7380 specify the source sub-directory, defaulting to ``src''.
7381
7382 The @code{#:main-class} parameter can be used with the minimal ant
7383 buildfile to specify the main class of the resulting jar. This makes the
7384 jar file executable. The @code{#:test-include} parameter can be used to
7385 specify the list of junit tests to run. It defaults to
7386 @code{(list "**/*Test.java")}. The @code{#:test-exclude} can be used to
7387 disable some tests. It defaults to @code{(list "**/Abstract*.java")},
7388 because abstract classes cannot be run as tests.
7389
7390 The parameter @code{#:build-target} can be used to specify the Ant task
7391 that should be run during the @code{build} phase. By default the
7392 ``jar'' task will be run.
7393
7394 @end defvr
7395
7396 @defvr {Scheme Variable} android-ndk-build-system
7397 @cindex Android distribution
7398 @cindex Android NDK build system
7399 This variable is exported by @code{(guix build-system android-ndk)}. It
7400 implements a build procedure for Android NDK (native development kit)
7401 packages using a Guix-specific build process.
7402
7403 The build system assumes that packages install their public interface
7404 (header) files to the subdirectory @file{include} of the @code{out} output and
7405 their libraries to the subdirectory @file{lib} the @code{out} output.
7406
7407 It's also assumed that the union of all the dependencies of a package
7408 has no conflicting files.
7409
7410 For the time being, cross-compilation is not supported - so right now
7411 the libraries and header files are assumed to be host tools.
7412
7413 @end defvr
7414
7415 @defvr {Scheme Variable} asdf-build-system/source
7416 @defvrx {Scheme Variable} asdf-build-system/sbcl
7417 @defvrx {Scheme Variable} asdf-build-system/ecl
7418
7419 These variables, exported by @code{(guix build-system asdf)}, implement
7420 build procedures for Common Lisp packages using
7421 @url{https://common-lisp.net/project/asdf/, ``ASDF''}. ASDF is a system
7422 definition facility for Common Lisp programs and libraries.
7423
7424 The @code{asdf-build-system/source} system installs the packages in
7425 source form, and can be loaded using any common lisp implementation, via
7426 ASDF@. The others, such as @code{asdf-build-system/sbcl}, install binary
7427 systems in the format which a particular implementation understands.
7428 These build systems can also be used to produce executable programs, or
7429 lisp images which contain a set of packages pre-loaded.
7430
7431 The build system uses naming conventions. For binary packages, the
7432 package name should be prefixed with the lisp implementation, such as
7433 @code{sbcl-} for @code{asdf-build-system/sbcl}.
7434
7435 Additionally, the corresponding source package should be labeled using
7436 the same convention as python packages (see @ref{Python Modules}), using
7437 the @code{cl-} prefix.
7438
7439 In order to create executable programs and images, the build-side
7440 procedures @code{build-program} and @code{build-image} can be used.
7441 They should be called in a build phase after the
7442 @code{create-asdf-configuration} phase, so that the system which was
7443 just built can be used within the resulting image. @code{build-program}
7444 requires a list of Common Lisp expressions to be passed as the
7445 @code{#:entry-program} argument.
7446
7447 By default, all the @file{.asd} files present in the sources are read to
7448 find system definitions. The @code{#:asd-files} parameter can be used
7449 to specify the list of @file{.asd} files to read. Furthermore, if the
7450 package defines a system for its tests in a separate file, it will be
7451 loaded before the tests are run if it is specified by the
7452 @code{#:test-asd-file} parameter. If it is not set, the files
7453 @code{<system>-tests.asd}, @code{<system>-test.asd}, @code{tests.asd},
7454 and @code{test.asd} will be tried if they exist.
7455
7456 If for some reason the package must be named in a different way than the
7457 naming conventions suggest, or if several systems must be compiled, the
7458 @code{#:asd-systems} parameter can be used to specify the list of system
7459 names.
7460
7461 @end defvr
7462
7463 @defvr {Scheme Variable} cargo-build-system
7464 @cindex Rust programming language
7465 @cindex Cargo (Rust build system)
7466 This variable is exported by @code{(guix build-system cargo)}. It
7467 supports builds of packages using Cargo, the build tool of the
7468 @uref{https://www.rust-lang.org, Rust programming language}.
7469
7470 It adds @code{rustc} and @code{cargo} to the set of inputs.
7471 A different Rust package can be specified with the @code{#:rust} parameter.
7472
7473 Regular cargo dependencies should be added to the package definition similarly
7474 to other packages; those needed only at build time to native-inputs, others to
7475 inputs. If you need to add source-only crates then you should add them to via
7476 the @code{#:cargo-inputs} parameter as a list of name and spec pairs, where the
7477 spec can be a package or a source definition. Note that the spec must
7478 evaluate to a path to a gzipped tarball which includes a @code{Cargo.toml}
7479 file at its root, or it will be ignored. Similarly, cargo dev-dependencies
7480 should be added to the package definition via the
7481 @code{#:cargo-development-inputs} parameter.
7482
7483 In its @code{configure} phase, this build system will make any source inputs
7484 specified in the @code{#:cargo-inputs} and @code{#:cargo-development-inputs}
7485 parameters available to cargo. It will also remove an included
7486 @code{Cargo.lock} file to be recreated by @code{cargo} during the
7487 @code{build} phase. The @code{package} phase will run @code{cargo package}
7488 to create a source crate for future use. The @code{install} phase installs
7489 the binaries defined by the crate. Unless @code{install-source? #f} is
7490 defined it will also install a source crate repository of itself and unpacked
7491 sources, to ease in future hacking on rust packages.
7492 @end defvr
7493
7494 @defvr {Scheme Variable} chicken-build-system
7495 This variable is exported by @code{(guix build-system chicken)}. It
7496 builds @uref{https://call-cc.org/, CHICKEN Scheme} modules, also called
7497 ``eggs'' or ``extensions''. CHICKEN generates C source code, which then
7498 gets compiled by a C compiler, in this case GCC.
7499
7500 This build system adds @code{chicken} to the package inputs, as well as
7501 the packages of @code{gnu-build-system}.
7502
7503 The build system can't (yet) deduce the egg's name automatically, so just like
7504 with @code{go-build-system} and its @code{#:import-path}, you should define
7505 @code{#:egg-name} in the package's @code{arguments} field.
7506
7507 For example, if you are packaging the @code{srfi-1} egg:
7508
7509 @lisp
7510 (arguments '(#:egg-name "srfi-1"))
7511 @end lisp
7512
7513 Egg dependencies must be defined in @code{propagated-inputs}, not @code{inputs}
7514 because CHICKEN doesn't embed absolute references in compiled eggs.
7515 Test dependencies should go to @code{native-inputs}, as usual.
7516 @end defvr
7517
7518 @defvr {Scheme Variable} copy-build-system
7519 This variable is exported by @code{(guix build-system copy)}. It
7520 supports builds of simple packages that don't require much compiling,
7521 mostly just moving files around.
7522
7523 It adds much of the @code{gnu-build-system} packages to the set of
7524 inputs. Because of this, the @code{copy-build-system} does not require
7525 all the boilerplate code often needed for the
7526 @code{trivial-build-system}.
7527
7528 To further simplify the file installation process, an
7529 @code{#:install-plan} argument is exposed to let the packager specify
7530 which files go where. The install plan is a list of @code{(@var{source}
7531 @var{target} [@var{filters}])}. @var{filters} are optional.
7532
7533 @itemize
7534 @item When @var{source} matches a file or directory without trailing slash, install it to @var{target}.
7535 @itemize
7536 @item If @var{target} has a trailing slash, install @var{source} basename beneath @var{target}.
7537 @item Otherwise install @var{source} as @var{target}.
7538 @end itemize
7539
7540 @item When @var{source} is a directory with a trailing slash, or when @var{filters} are used,
7541 the trailing slash of @var{target} is implied with the same meaning
7542 as above.
7543 @itemize
7544 @item Without @var{filters}, install the full @var{source} @emph{content} to @var{target}.
7545 @item With @var{filters} among @code{#:include}, @code{#:include-regexp}, @code{#:exclude},
7546 @code{#:exclude-regexp}, only select files are installed depending on
7547 the filters. Each filters is specified by a list of strings.
7548 @itemize
7549 @item With @code{#:include}, install all the files which the path suffix matches
7550 at least one of the elements in the given list.
7551 @item With @code{#:include-regexp}, install all the files which the
7552 subpaths match at least one of the regular expressions in the given
7553 list.
7554 @item The @code{#:exclude} and @code{#:exclude-regexp} filters
7555 are the complement of their inclusion counterpart. Without @code{#:include} flags,
7556 install all files but those matching the exclusion filters.
7557 If both inclusions and exclusions are specified, the exclusions are done
7558 on top of the inclusions.
7559 @end itemize
7560 @end itemize
7561 In all cases, the paths relative to @var{source} are preserved within
7562 @var{target}.
7563 @end itemize
7564
7565 Examples:
7566
7567 @itemize
7568 @item @code{("foo/bar" "share/my-app/")}: Install @file{bar} to @file{share/my-app/bar}.
7569 @item @code{("foo/bar" "share/my-app/baz")}: Install @file{bar} to @file{share/my-app/baz}.
7570 @item @code{("foo/" "share/my-app")}: Install the content of @file{foo} inside @file{share/my-app},
7571 e.g., install @file{foo/sub/file} to @file{share/my-app/sub/file}.
7572 @item @code{("foo/" "share/my-app" #:include ("sub/file"))}: Install only @file{foo/sub/file} to
7573 @file{share/my-app/sub/file}.
7574 @item @code{("foo/sub" "share/my-app" #:include ("file"))}: Install @file{foo/sub/file} to
7575 @file{share/my-app/file}.
7576 @end itemize
7577 @end defvr
7578
7579
7580 @cindex Clojure (programming language)
7581 @cindex simple Clojure build system
7582 @defvr {Scheme Variable} clojure-build-system
7583 This variable is exported by @code{(guix build-system clojure)}. It implements
7584 a simple build procedure for @uref{https://clojure.org/, Clojure} packages
7585 using plain old @code{compile} in Clojure. Cross-compilation is not supported
7586 yet.
7587
7588 It adds @code{clojure}, @code{icedtea} and @code{zip} to the set of inputs.
7589 Different packages can be specified with the @code{#:clojure}, @code{#:jdk} and
7590 @code{#:zip} parameters, respectively.
7591
7592 A list of source directories, test directories and jar names can be specified
7593 with the @code{#:source-dirs}, @code{#:test-dirs} and @code{#:jar-names}
7594 parameters, respectively. Compile directory and main class can be specified
7595 with the @code{#:compile-dir} and @code{#:main-class} parameters, respectively.
7596 Other parameters are documented below.
7597
7598 This build system is an extension of @code{ant-build-system}, but with the
7599 following phases changed:
7600
7601 @table @code
7602
7603 @item build
7604 This phase calls @code{compile} in Clojure to compile source files and runs
7605 @command{jar} to create jars from both source files and compiled files
7606 according to the include list and exclude list specified in
7607 @code{#:aot-include} and @code{#:aot-exclude}, respectively. The exclude list
7608 has priority over the include list. These lists consist of symbols
7609 representing Clojure libraries or the special keyword @code{#:all} representing
7610 all Clojure libraries found under the source directories. The parameter
7611 @code{#:omit-source?} decides if source should be included into the jars.
7612
7613 @item check
7614 This phase runs tests according to the include list and exclude list specified
7615 in @code{#:test-include} and @code{#:test-exclude}, respectively. Their
7616 meanings are analogous to that of @code{#:aot-include} and
7617 @code{#:aot-exclude}, except that the special keyword @code{#:all} now
7618 stands for all Clojure libraries found under the test directories. The
7619 parameter @code{#:tests?} decides if tests should be run.
7620
7621 @item install
7622 This phase installs all jars built previously.
7623 @end table
7624
7625 Apart from the above, this build system also contains an additional phase:
7626
7627 @table @code
7628
7629 @item install-doc
7630 This phase installs all top-level files with base name matching
7631 @code{%doc-regex}. A different regex can be specified with the
7632 @code{#:doc-regex} parameter. All files (recursively) inside the documentation
7633 directories specified in @code{#:doc-dirs} are installed as well.
7634 @end table
7635 @end defvr
7636
7637 @defvr {Scheme Variable} cmake-build-system
7638 This variable is exported by @code{(guix build-system cmake)}. It
7639 implements the build procedure for packages using the
7640 @url{https://www.cmake.org, CMake build tool}.
7641
7642 It automatically adds the @code{cmake} package to the set of inputs.
7643 Which package is used can be specified with the @code{#:cmake}
7644 parameter.
7645
7646 The @code{#:configure-flags} parameter is taken as a list of flags
7647 passed to the @command{cmake} command. The @code{#:build-type}
7648 parameter specifies in abstract terms the flags passed to the compiler;
7649 it defaults to @code{"RelWithDebInfo"} (short for ``release mode with
7650 debugging information''), which roughly means that code is compiled with
7651 @code{-O2 -g}, as is the case for Autoconf-based packages by default.
7652 @end defvr
7653
7654 @defvr {Scheme Variable} dune-build-system
7655 This variable is exported by @code{(guix build-system dune)}. It
7656 supports builds of packages using @uref{https://dune.build/, Dune}, a build
7657 tool for the OCaml programming language. It is implemented as an extension
7658 of the @code{ocaml-build-system} which is described below. As such, the
7659 @code{#:ocaml} and @code{#:findlib} parameters can be passed to this build
7660 system.
7661
7662 It automatically adds the @code{dune} package to the set of inputs.
7663 Which package is used can be specified with the @code{#:dune}
7664 parameter.
7665
7666 There is no @code{configure} phase because dune packages typically don't
7667 need to be configured. The @code{#:build-flags} parameter is taken as a
7668 list of flags passed to the @code{dune} command during the build.
7669
7670 The @code{#:jbuild?} parameter can be passed to use the @code{jbuild}
7671 command instead of the more recent @code{dune} command while building
7672 a package. Its default value is @code{#f}.
7673
7674 The @code{#:package} parameter can be passed to specify a package name, which
7675 is useful when a package contains multiple packages and you want to build
7676 only one of them. This is equivalent to passing the @code{-p} argument to
7677 @code{dune}.
7678 @end defvr
7679
7680 @defvr {Scheme Variable} go-build-system
7681 This variable is exported by @code{(guix build-system go)}. It
7682 implements a build procedure for Go packages using the standard
7683 @url{https://golang.org/cmd/go/#hdr-Compile_packages_and_dependencies,
7684 Go build mechanisms}.
7685
7686 The user is expected to provide a value for the key @code{#:import-path}
7687 and, in some cases, @code{#:unpack-path}. The
7688 @url{https://golang.org/doc/code.html#ImportPaths, import path}
7689 corresponds to the file system path expected by the package's build
7690 scripts and any referring packages, and provides a unique way to
7691 refer to a Go package. It is typically based on a combination of the
7692 package source code's remote URI and file system hierarchy structure. In
7693 some cases, you will need to unpack the package's source code to a
7694 different directory structure than the one indicated by the import path,
7695 and @code{#:unpack-path} should be used in such cases.
7696
7697 Packages that provide Go libraries should install their source code into
7698 the built output. The key @code{#:install-source?}, which defaults to
7699 @code{#t}, controls whether or not the source code is installed. It can
7700 be set to @code{#f} for packages that only provide executable files.
7701 @end defvr
7702
7703 @defvr {Scheme Variable} glib-or-gtk-build-system
7704 This variable is exported by @code{(guix build-system glib-or-gtk)}. It
7705 is intended for use with packages making use of GLib or GTK+.
7706
7707 This build system adds the following two phases to the ones defined by
7708 @code{gnu-build-system}:
7709
7710 @table @code
7711 @item glib-or-gtk-wrap
7712 The phase @code{glib-or-gtk-wrap} ensures that programs in
7713 @file{bin/} are able to find GLib ``schemas'' and
7714 @uref{https://developer.gnome.org/gtk3/stable/gtk-running.html, GTK+
7715 modules}. This is achieved by wrapping the programs in launch scripts
7716 that appropriately set the @env{XDG_DATA_DIRS} and @env{GTK_PATH}
7717 environment variables.
7718
7719 It is possible to exclude specific package outputs from that wrapping
7720 process by listing their names in the
7721 @code{#:glib-or-gtk-wrap-excluded-outputs} parameter. This is useful
7722 when an output is known not to contain any GLib or GTK+ binaries, and
7723 where wrapping would gratuitously add a dependency of that output on
7724 GLib and GTK+.
7725
7726 @item glib-or-gtk-compile-schemas
7727 The phase @code{glib-or-gtk-compile-schemas} makes sure that all
7728 @uref{https://developer.gnome.org/gio/stable/glib-compile-schemas.html,
7729 GSettings schemas} of GLib are compiled. Compilation is performed by the
7730 @command{glib-compile-schemas} program. It is provided by the package
7731 @code{glib:bin} which is automatically imported by the build system.
7732 The @code{glib} package providing @command{glib-compile-schemas} can be
7733 specified with the @code{#:glib} parameter.
7734 @end table
7735
7736 Both phases are executed after the @code{install} phase.
7737 @end defvr
7738
7739 @defvr {Scheme Variable} guile-build-system
7740 This build system is for Guile packages that consist exclusively of Scheme
7741 code and that are so lean that they don't even have a makefile, let alone a
7742 @file{configure} script. It compiles Scheme code using @command{guild
7743 compile} (@pxref{Compilation,,, guile, GNU Guile Reference Manual}) and
7744 installs the @file{.scm} and @file{.go} files in the right place. It also
7745 installs documentation.
7746
7747 This build system supports cross-compilation by using the
7748 @option{--target} option of @samp{guild compile}.
7749
7750 Packages built with @code{guile-build-system} must provide a Guile package in
7751 their @code{native-inputs} field.
7752 @end defvr
7753
7754 @defvr {Scheme Variable} julia-build-system
7755 This variable is exported by @code{(guix build-system julia)}. It
7756 implements the build procedure used by @uref{https://julialang.org/,
7757 julia} packages, which essentially is similar to running @samp{julia -e
7758 'using Pkg; Pkg.add(package)'} in an environment where
7759 @env{JULIA_LOAD_PATH} contains the paths to all Julia package inputs.
7760 Tests are run by calling @code{/test/runtests.jl}.
7761
7762 The Julia package name is read from the file @file{Project.toml}. This
7763 value can be overridden by passing the argument @code{#:julia-package-name}
7764 (which must be correctly capitalized).
7765
7766 Julia packages usually manage their binary dependencies via
7767 @code{JLLWrappers.jl}, a Julia package that creates a module (named
7768 after the wrapped library followed by @code{_jll.jl}.
7769
7770 To add the binary path @code{_jll.jl} packages, you need to patch the
7771 files under @file{src/wrappers/}, replacing the call to the macro
7772 @code{JLLWrappers.@@generate_wrapper_header}, adding as a second
7773 argument containing the store path the binary.
7774
7775 As an example, in the MbedTLS Julia package, we add a build phase
7776 (@pxref{Build Phases}) to insert the absolute file name of the wrapped
7777 MbedTLS package:
7778
7779 @lisp
7780 (add-after 'unpack 'override-binary-path
7781 (lambda* (#:key inputs #:allow-other-keys)
7782 (for-each (lambda (wrapper)
7783 (substitute* wrapper
7784 (("generate_wrapper_header.*")
7785 (string-append
7786 "generate_wrapper_header(\"MbedTLS\", \""
7787 (assoc-ref inputs "mbedtls-apache") "\")\n"))))
7788 ;; There's a Julia file for each platform, override them all.
7789 (find-files "src/wrappers/" "\\.jl$"))))
7790 @end lisp
7791
7792 Some older packages that aren't using @file{Package.toml} yet, will require
7793 this file to be created, too. The function @code{julia-create-package-toml}
7794 helps creating the file. You need to pass the outputs and the source of the
7795 package, it's name (the same as the @code{file-name} parameter), the package
7796 uuid, the package version, and a list of dependencies specified by their name
7797 and their uuid.
7798 @end defvr
7799
7800 @defvr {Scheme Variable} maven-build-system
7801 This variable is exported by @code{(guix build-system maven)}. It implements
7802 a build procedure for @uref{https://maven.apache.org, Maven} packages. Maven
7803 is a dependency and lifecycle management tool for Java. A user of Maven
7804 specifies dependencies and plugins in a @file{pom.xml} file that Maven reads.
7805 When Maven does not have one of the dependencies or plugins in its repository,
7806 it will download them and use them to build the package.
7807
7808 The maven build system ensures that maven will not try to download any
7809 dependency by running in offline mode. Maven will fail if a dependency is
7810 missing. Before running Maven, the @file{pom.xml} (and subprojects) are
7811 modified to specify the version of dependencies and plugins that match the
7812 versions available in the guix build environment. Dependencies and plugins
7813 must be installed in the fake maven repository at @file{lib/m2}, and are
7814 symlinked into a proper repository before maven is run. Maven is instructed
7815 to use that repository for the build and installs built artifacts there.
7816 Changed files are copied to the @file{lib/m2} directory of the package output.
7817
7818 You can specify a @file{pom.xml} file with the @code{#:pom-file} argument,
7819 or let the build system use the default @file{pom.xml} file in the sources.
7820
7821 In case you need to specify a dependency's version manually, you can use the
7822 @code{#:local-packages} argument. It takes an association list where the key
7823 is the groupId of the package and its value is an association list where the
7824 key is the artifactId of the package and its value is the version you want to
7825 override in the @file{pom.xml}.
7826
7827 Some packages use dependencies or plugins that are not useful at runtime nor
7828 at build time in Guix. You can alter the @file{pom.xml} file to remove them
7829 using the @code{#:exclude} argument. Its value is an association list where
7830 the key is the groupId of the plugin or dependency you want to remove, and
7831 the value is a list of artifactId you want to remove.
7832
7833 You can override the default @code{jdk} and @code{maven} packages with the
7834 corresponding argument, @code{#:jdk} and @code{#:maven}.
7835
7836 The @code{#:maven-plugins} argument is a list of maven plugins used during
7837 the build, with the same format as the @code{inputs} fields of the package
7838 declaration. Its default value is @code{(default-maven-plugins)} which is
7839 also exported.
7840 @end defvr
7841
7842 @defvr {Scheme Variable} minify-build-system
7843 This variable is exported by @code{(guix build-system minify)}. It
7844 implements a minification procedure for simple JavaScript packages.
7845
7846 It adds @code{uglify-js} to the set of inputs and uses it to compress
7847 all JavaScript files in the @file{src} directory. A different minifier
7848 package can be specified with the @code{#:uglify-js} parameter, but it
7849 is expected that the package writes the minified code to the standard
7850 output.
7851
7852 When the input JavaScript files are not all located in the @file{src}
7853 directory, the parameter @code{#:javascript-files} can be used to
7854 specify a list of file names to feed to the minifier.
7855 @end defvr
7856
7857 @defvr {Scheme Variable} ocaml-build-system
7858 This variable is exported by @code{(guix build-system ocaml)}. It implements
7859 a build procedure for @uref{https://ocaml.org, OCaml} packages, which consists
7860 of choosing the correct set of commands to run for each package. OCaml
7861 packages can expect many different commands to be run. This build system will
7862 try some of them.
7863
7864 When the package has a @file{setup.ml} file present at the top-level, it will
7865 run @code{ocaml setup.ml -configure}, @code{ocaml setup.ml -build} and
7866 @code{ocaml setup.ml -install}. The build system will assume that this file
7867 was generated by @uref{http://oasis.forge.ocamlcore.org/, OASIS} and will take
7868 care of setting the prefix and enabling tests if they are not disabled. You
7869 can pass configure and build flags with the @code{#:configure-flags} and
7870 @code{#:build-flags}. The @code{#:test-flags} key can be passed to change the
7871 set of flags used to enable tests. The @code{#:use-make?} key can be used to
7872 bypass this system in the build and install phases.
7873
7874 When the package has a @file{configure} file, it is assumed that it is a
7875 hand-made configure script that requires a different argument format than
7876 in the @code{gnu-build-system}. You can add more flags with the
7877 @code{#:configure-flags} key.
7878
7879 When the package has a @file{Makefile} file (or @code{#:use-make?} is
7880 @code{#t}), it will be used and more flags can be passed to the build and
7881 install phases with the @code{#:make-flags} key.
7882
7883 Finally, some packages do not have these files and use a somewhat standard
7884 location for its build system. In that case, the build system will run
7885 @code{ocaml pkg/pkg.ml} or @code{ocaml pkg/build.ml} and take care of
7886 providing the path to the required findlib module. Additional flags can
7887 be passed via the @code{#:build-flags} key. Install is taken care of by
7888 @command{opam-installer}. In this case, the @code{opam} package must
7889 be added to the @code{native-inputs} field of the package definition.
7890
7891 Note that most OCaml packages assume they will be installed in the same
7892 directory as OCaml, which is not what we want in guix. In particular, they
7893 will install @file{.so} files in their module's directory, which is usually
7894 fine because it is in the OCaml compiler directory. In guix though, these
7895 libraries cannot be found and we use @env{CAML_LD_LIBRARY_PATH}. This
7896 variable points to @file{lib/ocaml/site-lib/stubslibs} and this is where
7897 @file{.so} libraries should be installed.
7898 @end defvr
7899
7900 @defvr {Scheme Variable} python-build-system
7901 This variable is exported by @code{(guix build-system python)}. It
7902 implements the more or less standard build procedure used by Python
7903 packages, which consists in running @code{python setup.py build} and
7904 then @code{python setup.py install --prefix=/gnu/store/@dots{}}.
7905
7906 For packages that install stand-alone Python programs under @code{bin/},
7907 it takes care of wrapping these programs so that their @env{PYTHONPATH}
7908 environment variable points to all the Python libraries they depend on.
7909
7910 Which Python package is used to perform the build can be specified with
7911 the @code{#:python} parameter. This is a useful way to force a package
7912 to be built for a specific version of the Python interpreter, which
7913 might be necessary if the package is only compatible with a single
7914 interpreter version.
7915
7916 By default guix calls @code{setup.py} under control of
7917 @code{setuptools}, much like @command{pip} does. Some packages are not
7918 compatible with setuptools (and pip), thus you can disable this by
7919 setting the @code{#:use-setuptools?} parameter to @code{#f}.
7920 @end defvr
7921
7922 @defvr {Scheme Variable} perl-build-system
7923 This variable is exported by @code{(guix build-system perl)}. It
7924 implements the standard build procedure for Perl packages, which either
7925 consists in running @code{perl Build.PL --prefix=/gnu/store/@dots{}},
7926 followed by @code{Build} and @code{Build install}; or in running
7927 @code{perl Makefile.PL PREFIX=/gnu/store/@dots{}}, followed by
7928 @code{make} and @code{make install}, depending on which of
7929 @code{Build.PL} or @code{Makefile.PL} is present in the package
7930 distribution. Preference is given to the former if both @code{Build.PL}
7931 and @code{Makefile.PL} exist in the package distribution. This
7932 preference can be reversed by specifying @code{#t} for the
7933 @code{#:make-maker?} parameter.
7934
7935 The initial @code{perl Makefile.PL} or @code{perl Build.PL} invocation
7936 passes flags specified by the @code{#:make-maker-flags} or
7937 @code{#:module-build-flags} parameter, respectively.
7938
7939 Which Perl package is used can be specified with @code{#:perl}.
7940 @end defvr
7941
7942 @defvr {Scheme Variable} renpy-build-system
7943 This variable is exported by @code{(guix build-system renpy)}. It implements
7944 the more or less standard build procedure used by Ren'py games, which consists
7945 of loading @code{#:game} once, thereby creating bytecode for it.
7946
7947 It further creates a wrapper script in @code{bin/} and a desktop entry in
7948 @code{share/applications}, both of which can be used to launch the game.
7949
7950 Which Ren'py package is used can be specified with @code{#:renpy}.
7951 Games can also be installed in outputs other than ``out'' by using
7952 @code{#:output}.
7953 @end defvr
7954
7955 @defvr {Scheme Variable} qt-build-system
7956 This variable is exported by @code{(guix build-system qt)}. It
7957 is intended for use with applications using Qt or KDE.
7958
7959 This build system adds the following two phases to the ones defined by
7960 @code{cmake-build-system}:
7961
7962 @table @code
7963 @item check-setup
7964 The phase @code{check-setup} prepares the environment for running
7965 the checks as commonly used by Qt test programs.
7966 For now this only sets some environment variables:
7967 @code{QT_QPA_PLATFORM=offscreen},
7968 @code{DBUS_FATAL_WARNINGS=0} and
7969 @code{CTEST_OUTPUT_ON_FAILURE=1}.
7970
7971 This phase is added before the @code{check} phase.
7972 It's a separate phase to ease adjusting if necessary.
7973
7974 @item qt-wrap
7975 The phase @code{qt-wrap}
7976 searches for Qt5 plugin paths, QML paths and some XDG in the inputs
7977 and output. In case some path is found, all programs in the output's
7978 @file{bin/}, @file{sbin/}, @file{libexec/} and @file{lib/libexec/} directories
7979 are wrapped in scripts defining the necessary environment variables.
7980
7981 It is possible to exclude specific package outputs from that wrapping process
7982 by listing their names in the @code{#:qt-wrap-excluded-outputs} parameter.
7983 This is useful when an output is known not to contain any Qt binaries, and
7984 where wrapping would gratuitously add a dependency of that output on Qt, KDE,
7985 or such.
7986
7987 This phase is added after the @code{install} phase.
7988 @end table
7989 @end defvr
7990
7991 @defvr {Scheme Variable} r-build-system
7992 This variable is exported by @code{(guix build-system r)}. It
7993 implements the build procedure used by @uref{https://r-project.org, R}
7994 packages, which essentially is little more than running @samp{R CMD
7995 INSTALL --library=/gnu/store/@dots{}} in an environment where
7996 @env{R_LIBS_SITE} contains the paths to all R package inputs. Tests are
7997 run after installation using the R function
7998 @code{tools::testInstalledPackage}.
7999 @end defvr
8000
8001 @defvr {Scheme Variable} rakudo-build-system
8002 This variable is exported by @code{(guix build-system rakudo)}. It
8003 implements the build procedure used by @uref{https://rakudo.org/,
8004 Rakudo} for @uref{https://perl6.org/, Perl6} packages. It installs the
8005 package to @code{/gnu/store/@dots{}/NAME-VERSION/share/perl6} and
8006 installs the binaries, library files and the resources, as well as wrap
8007 the files under the @code{bin/} directory. Tests can be skipped by
8008 passing @code{#f} to the @code{tests?} parameter.
8009
8010 Which rakudo package is used can be specified with @code{rakudo}.
8011 Which perl6-tap-harness package used for the tests can be specified with
8012 @code{#:prove6} or removed by passing @code{#f} to the
8013 @code{with-prove6?} parameter.
8014 Which perl6-zef package used for tests and installing can be specified
8015 with @code{#:zef} or removed by passing @code{#f} to the
8016 @code{with-zef?} parameter.
8017 @end defvr
8018
8019 @defvr {Scheme Variable} texlive-build-system
8020 This variable is exported by @code{(guix build-system texlive)}. It is
8021 used to build TeX packages in batch mode with a specified engine. The
8022 build system sets the @env{TEXINPUTS} variable to find all TeX source
8023 files in the inputs.
8024
8025 By default it runs @code{luatex} on all files ending on @code{ins}. A
8026 different engine and format can be specified with the
8027 @code{#:tex-format} argument. Different build targets can be specified
8028 with the @code{#:build-targets} argument, which expects a list of file
8029 names. The build system adds only @code{texlive-bin} and
8030 @code{texlive-latex-base} (both from @code{(gnu packages tex}) to the
8031 inputs. Both can be overridden with the arguments @code{#:texlive-bin}
8032 and @code{#:texlive-latex-base}, respectively.
8033
8034 The @code{#:tex-directory} parameter tells the build system where to
8035 install the built files under the texmf tree.
8036 @end defvr
8037
8038 @defvr {Scheme Variable} ruby-build-system
8039 This variable is exported by @code{(guix build-system ruby)}. It
8040 implements the RubyGems build procedure used by Ruby packages, which
8041 involves running @code{gem build} followed by @code{gem install}.
8042
8043 The @code{source} field of a package that uses this build system
8044 typically references a gem archive, since this is the format that Ruby
8045 developers use when releasing their software. The build system unpacks
8046 the gem archive, potentially patches the source, runs the test suite,
8047 repackages the gem, and installs it. Additionally, directories and
8048 tarballs may be referenced to allow building unreleased gems from Git or
8049 a traditional source release tarball.
8050
8051 Which Ruby package is used can be specified with the @code{#:ruby}
8052 parameter. A list of additional flags to be passed to the @command{gem}
8053 command can be specified with the @code{#:gem-flags} parameter.
8054 @end defvr
8055
8056 @defvr {Scheme Variable} waf-build-system
8057 This variable is exported by @code{(guix build-system waf)}. It
8058 implements a build procedure around the @code{waf} script. The common
8059 phases---@code{configure}, @code{build}, and @code{install}---are
8060 implemented by passing their names as arguments to the @code{waf}
8061 script.
8062
8063 The @code{waf} script is executed by the Python interpreter. Which
8064 Python package is used to run the script can be specified with the
8065 @code{#:python} parameter.
8066 @end defvr
8067
8068 @defvr {Scheme Variable} scons-build-system
8069 This variable is exported by @code{(guix build-system scons)}. It
8070 implements the build procedure used by the SCons software construction
8071 tool. This build system runs @code{scons} to build the package,
8072 @code{scons test} to run tests, and then @code{scons install} to install
8073 the package.
8074
8075 Additional flags to be passed to @code{scons} can be specified with the
8076 @code{#:scons-flags} parameter. The default build and install targets
8077 can be overridden with @code{#:build-targets} and
8078 @code{#:install-targets} respectively. The version of Python used to
8079 run SCons can be specified by selecting the appropriate SCons package
8080 with the @code{#:scons} parameter.
8081 @end defvr
8082
8083 @defvr {Scheme Variable} haskell-build-system
8084 This variable is exported by @code{(guix build-system haskell)}. It
8085 implements the Cabal build procedure used by Haskell packages, which
8086 involves running @code{runhaskell Setup.hs configure
8087 --prefix=/gnu/store/@dots{}} and @code{runhaskell Setup.hs build}.
8088 Instead of installing the package by running @code{runhaskell Setup.hs
8089 install}, to avoid trying to register libraries in the read-only
8090 compiler store directory, the build system uses @code{runhaskell
8091 Setup.hs copy}, followed by @code{runhaskell Setup.hs register}. In
8092 addition, the build system generates the package documentation by
8093 running @code{runhaskell Setup.hs haddock}, unless @code{#:haddock? #f}
8094 is passed. Optional Haddock parameters can be passed with the help of
8095 the @code{#:haddock-flags} parameter. If the file @code{Setup.hs} is
8096 not found, the build system looks for @code{Setup.lhs} instead.
8097
8098 Which Haskell compiler is used can be specified with the @code{#:haskell}
8099 parameter which defaults to @code{ghc}.
8100 @end defvr
8101
8102 @defvr {Scheme Variable} dub-build-system
8103 This variable is exported by @code{(guix build-system dub)}. It
8104 implements the Dub build procedure used by D packages, which
8105 involves running @code{dub build} and @code{dub run}.
8106 Installation is done by copying the files manually.
8107
8108 Which D compiler is used can be specified with the @code{#:ldc}
8109 parameter which defaults to @code{ldc}.
8110 @end defvr
8111
8112 @anchor{emacs-build-system}
8113 @defvr {Scheme Variable} emacs-build-system
8114 This variable is exported by @code{(guix build-system emacs)}. It
8115 implements an installation procedure similar to the packaging system
8116 of Emacs itself (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
8117
8118 It first creates the @code{@code{package}-autoloads.el} file, then it
8119 byte compiles all Emacs Lisp files. Differently from the Emacs
8120 packaging system, the Info documentation files are moved to the standard
8121 documentation directory and the @file{dir} file is deleted. The Elisp
8122 package files are installed directly under @file{share/emacs/site-lisp}.
8123 @end defvr
8124
8125 @defvr {Scheme Variable} font-build-system
8126 This variable is exported by @code{(guix build-system font)}. It
8127 implements an installation procedure for font packages where upstream
8128 provides pre-compiled TrueType, OpenType, etc.@: font files that merely
8129 need to be copied into place. It copies font files to standard
8130 locations in the output directory.
8131 @end defvr
8132
8133 @defvr {Scheme Variable} meson-build-system
8134 This variable is exported by @code{(guix build-system meson)}. It
8135 implements the build procedure for packages that use
8136 @url{https://mesonbuild.com, Meson} as their build system.
8137
8138 It adds both Meson and @uref{https://ninja-build.org/, Ninja} to the set
8139 of inputs, and they can be changed with the parameters @code{#:meson}
8140 and @code{#:ninja} if needed. The default Meson is
8141 @code{meson-for-build}, which is special because it doesn't clear the
8142 @code{RUNPATH} of binaries and libraries when they are installed.
8143
8144 This build system is an extension of @code{gnu-build-system}, but with the
8145 following phases changed to some specific for Meson:
8146
8147 @table @code
8148
8149 @item configure
8150 The phase runs @code{meson} with the flags specified in
8151 @code{#:configure-flags}. The flag @option{--buildtype} is always set to
8152 @code{debugoptimized} unless something else is specified in
8153 @code{#:build-type}.
8154
8155 @item build
8156 The phase runs @code{ninja} to build the package in parallel by default, but
8157 this can be changed with @code{#:parallel-build?}.
8158
8159 @item check
8160 The phase runs @code{ninja} with the target specified in @code{#:test-target},
8161 which is @code{"test"} by default.
8162
8163 @item install
8164 The phase runs @code{ninja install} and can not be changed.
8165 @end table
8166
8167 Apart from that, the build system also adds the following phases:
8168
8169 @table @code
8170
8171 @item fix-runpath
8172 This phase ensures that all binaries can find the libraries they need.
8173 It searches for required libraries in subdirectories of the package being
8174 built, and adds those to @code{RUNPATH} where needed. It also removes
8175 references to libraries left over from the build phase by
8176 @code{meson-for-build}, such as test dependencies, that aren't actually
8177 required for the program to run.
8178
8179 @item glib-or-gtk-wrap
8180 This phase is the phase provided by @code{glib-or-gtk-build-system}, and it
8181 is not enabled by default. It can be enabled with @code{#:glib-or-gtk?}.
8182
8183 @item glib-or-gtk-compile-schemas
8184 This phase is the phase provided by @code{glib-or-gtk-build-system}, and it
8185 is not enabled by default. It can be enabled with @code{#:glib-or-gtk?}.
8186 @end table
8187 @end defvr
8188
8189 @defvr {Scheme Variable} linux-module-build-system
8190 @code{linux-module-build-system} allows building Linux kernel modules.
8191
8192 @cindex build phases
8193 This build system is an extension of @code{gnu-build-system}, but with the
8194 following phases changed:
8195
8196 @table @code
8197
8198 @item configure
8199 This phase configures the environment so that the Linux kernel's Makefile
8200 can be used to build the external kernel module.
8201
8202 @item build
8203 This phase uses the Linux kernel's Makefile in order to build the external
8204 kernel module.
8205
8206 @item install
8207 This phase uses the Linux kernel's Makefile in order to install the external
8208 kernel module.
8209 @end table
8210
8211 It is possible and useful to specify the Linux kernel to use for building
8212 the module (in the @code{arguments} form of a package using the
8213 @code{linux-module-build-system}, use the key @code{#:linux} to specify it).
8214 @end defvr
8215
8216 @defvr {Scheme Variable} node-build-system
8217 This variable is exported by @code{(guix build-system node)}. It
8218 implements the build procedure used by @uref{https://nodejs.org,
8219 Node.js}, which implements an approximation of the @code{npm install}
8220 command, followed by an @code{npm test} command.
8221
8222 Which Node.js package is used to interpret the @code{npm} commands can
8223 be specified with the @code{#:node} parameter which defaults to
8224 @code{node}.
8225 @end defvr
8226
8227 Lastly, for packages that do not need anything as sophisticated, a
8228 ``trivial'' build system is provided. It is trivial in the sense that
8229 it provides basically no support: it does not pull any implicit inputs,
8230 and does not have a notion of build phases.
8231
8232 @defvr {Scheme Variable} trivial-build-system
8233 This variable is exported by @code{(guix build-system trivial)}.
8234
8235 This build system requires a @code{#:builder} argument. This argument
8236 must be a Scheme expression that builds the package output(s)---as
8237 with @code{build-expression->derivation} (@pxref{Derivations,
8238 @code{build-expression->derivation}}).
8239 @end defvr
8240
8241 @node Build Phases
8242 @section Build Phases
8243
8244 @cindex build phases, for packages
8245 Almost all package build systems implement a notion @dfn{build phases}:
8246 a sequence of actions that the build system executes, when you build the
8247 package, leading to the installed byproducts in the store. A notable
8248 exception is the ``bare-bones'' @code{trivial-build-system}
8249 (@pxref{Build Systems}).
8250
8251 As discussed in the previous section, those build systems provide a
8252 standard list of phases. For @code{gnu-build-system}, the standard
8253 phases include an @code{unpack} phase to unpack the source code tarball,
8254 a @command{configure} phase to run @code{./configure}, a @code{build}
8255 phase to run @command{make}, and (among others) an @code{install} phase
8256 to run @command{make install}; @pxref{Build Systems}, for a more
8257 detailed view of these phases. Likewise, @code{cmake-build-system}
8258 inherits these phases, but its @code{configure} phase runs
8259 @command{cmake} instead of @command{./configure}. Other build systems,
8260 such as @code{python-build-system}, have a wholly different list of
8261 standard phases. All this code runs on the @dfn{build side}: it is
8262 evaluated when you actually build the package, in a dedicated build
8263 process spawned by the build daemon (@pxref{Invoking guix-daemon}).
8264
8265 Build phases are represented as association lists or ``alists''
8266 (@pxref{Association Lists,,, guile, GNU Guile Reference Manual}) where
8267 each key is a symbol for the name of the phase and the associated value
8268 is a procedure that accepts an arbitrary number of arguments. By
8269 convention, those procedures receive information about the build in the
8270 form of @dfn{keyword parameters}, which they can use or ignore.
8271
8272 For example, here is how @code{(guix build gnu-build-system)} defines
8273 @code{%standard-phases}, the variable holding its alist of build
8274 phases@footnote{We present a simplified view of those build phases, but
8275 do take a look at @code{(guix build gnu-build-system)} to see all the
8276 details!}:
8277
8278 @lisp
8279 ;; The build phases of 'gnu-build-system'.
8280
8281 (define* (unpack #:key source #:allow-other-keys)
8282 ;; Extract the source tarball.
8283 (invoke "tar" "xvf" source))
8284
8285 (define* (configure #:key outputs #:allow-other-keys)
8286 ;; Run the 'configure' script. Install to output "out".
8287 (let ((out (assoc-ref outputs "out")))
8288 (invoke "./configure"
8289 (string-append "--prefix=" out))))
8290
8291 (define* (build #:allow-other-keys)
8292 ;; Compile.
8293 (invoke "make"))
8294
8295 (define* (check #:key (test-target "check") (tests? #true)
8296 #:allow-other-keys)
8297 ;; Run the test suite.
8298 (if tests?
8299 (invoke "make" test-target)
8300 (display "test suite not run\n")))
8301
8302 (define* (install #:allow-other-keys)
8303 ;; Install files to the prefix 'configure' specified.
8304 (invoke "make" "install"))
8305
8306 (define %standard-phases
8307 ;; The list of standard phases (quite a few are omitted
8308 ;; for brevity). Each element is a symbol/procedure pair.
8309 (list (cons 'unpack unpack)
8310 (cons 'configure configure)
8311 (cons 'build build)
8312 (cons 'check check)
8313 (cons 'install install)))
8314 @end lisp
8315
8316 This shows how @code{%standard-phases} is defined as a list of
8317 symbol/procedure pairs (@pxref{Pairs,,, guile, GNU Guile Reference
8318 Manual}). The first pair associates the @code{unpack} procedure with
8319 the @code{unpack} symbol---a name; the second pair defines the
8320 @code{configure} phase similarly, and so on. When building a package
8321 that uses @code{gnu-build-system} with its default list of phases, those
8322 phases are executed sequentially. You can see the name of each phase
8323 started and completed in the build log of packages that you build.
8324
8325 Let's now look at the procedures themselves. Each one is defined with
8326 @code{define*}: @code{#:key} lists keyword parameters the procedure
8327 accepts, possibly with a default value, and @code{#:allow-other-keys}
8328 specifies that other keyword parameters are ignored (@pxref{Optional
8329 Arguments,,, guile, GNU Guile Reference Manual}).
8330
8331 The @code{unpack} procedure honors the @code{source} parameter, which
8332 the build system uses to pass the file name of the source tarball (or
8333 version control checkout), and it ignores other parameters. The
8334 @code{configure} phase only cares about the @code{outputs} parameter, an
8335 alist mapping package output names to their store file name
8336 (@pxref{Packages with Multiple Outputs}). It extracts the file name of
8337 for @code{out}, the default output, and passes it to
8338 @command{./configure} as the installation prefix, meaning that
8339 @command{make install} will eventually copy all the files in that
8340 directory (@pxref{Configuration, configuration and makefile
8341 conventions,, standards, GNU Coding Standards}). @code{build} and
8342 @code{install} ignore all their arguments. @code{check} honors the
8343 @code{test-target} argument, which specifies the name of the Makefile
8344 target to run tests; it prints a message and skips tests when
8345 @code{tests?} is false.
8346
8347 @cindex build phases, customizing
8348 The list of phases used for a particular package can be changed with the
8349 @code{#:phases} parameter of the build system. Changing the set of
8350 build phases boils down to building a new alist of phases based on the
8351 @code{%standard-phases} alist described above. This can be done with
8352 standard alist procedures such as @code{alist-delete} (@pxref{SRFI-1
8353 Association Lists,,, guile, GNU Guile Reference Manual}); however, it is
8354 more convenient to do so with @code{modify-phases} (@pxref{Build
8355 Utilities, @code{modify-phases}}).
8356
8357 Here is an example of a package definition that removes the
8358 @code{configure} phase of @code{%standard-phases} and inserts a new
8359 phase before the @code{build} phase, called
8360 @code{set-prefix-in-makefile}:
8361
8362 @lisp
8363 (define-public example
8364 (package
8365 (name "example")
8366 ;; other fields omitted
8367 (build-system gnu-build-system)
8368 (arguments
8369 '(#:phases (modify-phases %standard-phases
8370 (delete 'configure)
8371 (add-before 'build 'set-prefix-in-makefile
8372 (lambda* (#:key outputs #:allow-other-keys)
8373 ;; Modify the makefile so that its
8374 ;; 'PREFIX' variable points to "out".
8375 (let ((out (assoc-ref outputs "out")))
8376 (substitute* "Makefile"
8377 (("PREFIX =.*")
8378 (string-append "PREFIX = "
8379 out "\n")))
8380 #true))))))))
8381 @end lisp
8382
8383 The new phase that is inserted is written as an anonymous procedure,
8384 introduced with @code{lambda*}; it honors the @code{outputs} parameter
8385 we have seen before. @xref{Build Utilities}, for more about the helpers
8386 used by this phase, and for more examples of @code{modify-phases}.
8387
8388 @cindex code staging
8389 @cindex staging, of code
8390 Keep in mind that build phases are code evaluated at the time the
8391 package is actually built. This explains why the whole
8392 @code{modify-phases} expression above is quoted (it comes after the
8393 @code{'} or apostrophe): it is @dfn{staged} for later execution.
8394 @xref{G-Expressions}, for an explanation of code staging and the
8395 @dfn{code strata} involved.
8396
8397 @node Build Utilities
8398 @section Build Utilities
8399
8400 As soon as you start writing non-trivial package definitions
8401 (@pxref{Defining Packages}) or other build actions
8402 (@pxref{G-Expressions}), you will likely start looking for helpers for
8403 ``shell-like'' actions---creating directories, copying and deleting
8404 files recursively, manipulating build phases, and so on. The
8405 @code{(guix build utils)} module provides such utility procedures.
8406
8407 Most build systems load @code{(guix build utils)} (@pxref{Build
8408 Systems}). Thus, when writing custom build phases for your package
8409 definitions, you can usually assume those procedures are in scope.
8410
8411 When writing G-expressions, you can import @code{(guix build utils)} on
8412 the ``build side'' using @code{with-imported-modules} and then put it in
8413 scope with the @code{use-modules} form (@pxref{Using Guile Modules,,,
8414 guile, GNU Guile Reference Manual}):
8415
8416 @lisp
8417 (with-imported-modules '((guix build utils)) ;import it
8418 (computed-file "empty-tree"
8419 #~(begin
8420 ;; Put it in scope.
8421 (use-modules (guix build utils))
8422
8423 ;; Happily use its 'mkdir-p' procedure.
8424 (mkdir-p (string-append #$output "/a/b/c")))))
8425 @end lisp
8426
8427 The remainder of this section is the reference for most of the utility
8428 procedures provided by @code{(guix build utils)}.
8429
8430 @c TODO Document what's missing.
8431
8432 @subsection Dealing with Store File Names
8433
8434 This section documents procedures that deal with store file names.
8435
8436 @deffn {Scheme Procedure} %store-directory
8437 Return the directory name of the store.
8438 @end deffn
8439
8440 @deffn {Scheme Procedure} store-file-name? @var{file}
8441 Return true if @var{file} is in the store.
8442 @end deffn
8443
8444 @deffn {Scheme Procedure} strip-store-file-name @var{file}
8445 Strip the @file{/gnu/store} and hash from @var{file}, a store file name.
8446 The result is typically a @code{"@var{package}-@var{version}"} string.
8447 @end deffn
8448
8449 @deffn {Scheme Procedure} package-name->name+version @var{name}
8450 Given @var{name}, a package name like @code{"foo-0.9.1b"}, return two
8451 values: @code{"foo"} and @code{"0.9.1b"}. When the version part is
8452 unavailable, @var{name} and @code{#f} are returned. The first hyphen
8453 followed by a digit is considered to introduce the version part.
8454 @end deffn
8455
8456 @subsection File Types
8457
8458 The procedures below deal with files and file types.
8459
8460 @deffn {Scheme Procedure} directory-exists? @var{dir}
8461 Return @code{#t} if @var{dir} exists and is a directory.
8462 @end deffn
8463
8464 @deffn {Scheme Procedure} executable-file? @var{file}
8465 Return @code{#t} if @var{file} exists and is executable.
8466 @end deffn
8467
8468 @deffn {Scheme Procedure} symbolic-link? @var{file}
8469 Return @code{#t} if @var{file} is a symbolic link (aka. a ``symlink'').
8470 @end deffn
8471
8472 @deffn {Scheme Procedure} elf-file? @var{file}
8473 @deffnx {Scheme Procedure} ar-file? @var{file}
8474 @deffnx {Scheme Procedure} gzip-file? @var{file}
8475 Return @code{#t} if @var{file} is, respectively, an ELF file, an
8476 @code{ar} archive (such as a @file{.a} static library), or a gzip file.
8477 @end deffn
8478
8479 @deffn {Scheme Procedure} reset-gzip-timestamp @var{file} [#:keep-mtime? #t]
8480 If @var{file} is a gzip file, reset its embedded timestamp (as with
8481 @command{gzip --no-name}) and return true. Otherwise return @code{#f}.
8482 When @var{keep-mtime?} is true, preserve @var{file}'s modification time.
8483 @end deffn
8484
8485 @subsection File Manipulation
8486
8487 The following procedures and macros help create, modify, and delete
8488 files. They provide functionality comparable to common shell utilities
8489 such as @command{mkdir -p}, @command{cp -r}, @command{rm -r}, and
8490 @command{sed}. They complement Guile's extensive, but low-level, file
8491 system interface (@pxref{POSIX,,, guile, GNU Guile Reference Manual}).
8492
8493 @deffn {Scheme Syntax} with-directory-excursion @var{directory} @var{body}@dots{}
8494 Run @var{body} with @var{directory} as the process's current directory.
8495
8496 Essentially, this macro changes the current directory to @var{directory}
8497 before evaluating @var{body}, using @code{chdir} (@pxref{Processes,,,
8498 guile, GNU Guile Reference Manual}). It changes back to the initial
8499 directory when the dynamic extent of @var{body} is left, be it @i{via}
8500 normal procedure return or @i{via} a non-local exit such as an
8501 exception.
8502 @end deffn
8503
8504 @deffn {Scheme Procedure} mkdir-p @var{dir}
8505 Create directory @var{dir} and all its ancestors.
8506 @end deffn
8507
8508 @deffn {Scheme Procedure} install-file @var{file} @var{directory}
8509 Create @var{directory} if it does not exist and copy @var{file} in there
8510 under the same name.
8511 @end deffn
8512
8513 @deffn {Scheme Procedure} make-file-writable @var{file}
8514 Make @var{file} writable for its owner.
8515 @end deffn
8516
8517 @deffn {Scheme Procedure} copy-recursively @var{source} @var{destination} @
8518 [#:log (current-output-port)] [#:follow-symlinks? #f] [#:keep-mtime? #f]
8519 Copy @var{source} directory to @var{destination}. Follow symlinks if
8520 @var{follow-symlinks?} is true; otherwise, just preserve them. When
8521 @var{keep-mtime?} is true, keep the modification time of the files in
8522 @var{source} on those of @var{destination}. Write verbose output to the
8523 @var{log} port.
8524 @end deffn
8525
8526 @deffn {Scheme Procedure} delete-file-recursively @var{dir} @
8527 [#:follow-mounts? #f]
8528 Delete @var{dir} recursively, like @command{rm -rf}, without following
8529 symlinks. Don't follow mount points either, unless @var{follow-mounts?}
8530 is true. Report but ignore errors.
8531 @end deffn
8532
8533 @deffn {Scheme Syntax} substitute* @var{file} @
8534 ((@var{regexp} @var{match-var}@dots{}) @var{body}@dots{}) @dots{}
8535 Substitute @var{regexp} in @var{file} by the string returned by
8536 @var{body}. @var{body} is evaluated with each @var{match-var} bound to
8537 the corresponding positional regexp sub-expression. For example:
8538
8539 @lisp
8540 (substitute* file
8541 (("hello")
8542 "good morning\n")
8543 (("foo([a-z]+)bar(.*)$" all letters end)
8544 (string-append "baz" letter end)))
8545 @end lisp
8546
8547 Here, anytime a line of @var{file} contains @code{hello}, it is replaced
8548 by @code{good morning}. Anytime a line of @var{file} matches the second
8549 regexp, @code{all} is bound to the complete match, @code{letters} is bound
8550 to the first sub-expression, and @code{end} is bound to the last one.
8551
8552 When one of the @var{match-var} is @code{_}, no variable is bound to the
8553 corresponding match substring.
8554
8555 Alternatively, @var{file} may be a list of file names, in which case
8556 they are all subject to the substitutions.
8557
8558 Be careful about using @code{$} to match the end of a line; by itself it
8559 won't match the terminating newline of a line.
8560 @end deffn
8561
8562 @subsection File Search
8563
8564 @cindex file, searching
8565 This section documents procedures to search and filter files.
8566
8567 @deffn {Scheme Procedure} file-name-predicate @var{regexp}
8568 Return a predicate that returns true when passed a file name whose base
8569 name matches @var{regexp}.
8570 @end deffn
8571
8572 @deffn {Scheme Procedure} find-files @var{dir} [@var{pred}] @
8573 [#:stat lstat] [#:directories? #f] [#:fail-on-error? #f]
8574 Return the lexicographically sorted list of files under @var{dir} for
8575 which @var{pred} returns true. @var{pred} is passed two arguments: the
8576 absolute file name, and its stat buffer; the default predicate always
8577 returns true. @var{pred} can also be a regular expression, in which
8578 case it is equivalent to @code{(file-name-predicate @var{pred})}.
8579 @var{stat} is used to obtain file information; using @code{lstat} means
8580 that symlinks are not followed. If @var{directories?} is true, then
8581 directories will also be included. If @var{fail-on-error?} is true,
8582 raise an exception upon error.
8583 @end deffn
8584
8585 Here are a few examples where we assume that the current directory is
8586 the root of the Guix source tree:
8587
8588 @lisp
8589 ;; List all the regular files in the current directory.
8590 (find-files ".")
8591 @result{} ("./.dir-locals.el" "./.gitignore" @dots{})
8592
8593 ;; List all the .scm files under gnu/services.
8594 (find-files "gnu/services" "\\.scm$")
8595 @result{} ("gnu/services/admin.scm" "gnu/services/audio.scm" @dots{})
8596
8597 ;; List ar files in the current directory.
8598 (find-files "." (lambda (file stat) (ar-file? file)))
8599 @result{} ("./libformat.a" "./libstore.a" @dots{})
8600 @end lisp
8601
8602 @deffn {Scheme Procedure} which @var{program}
8603 Return the complete file name for @var{program} as found in
8604 @code{$PATH}, or @code{#f} if @var{program} could not be found.
8605 @end deffn
8606
8607 @subsection Build Phases
8608
8609 @cindex build phases
8610 The @code{(guix build utils)} also contains tools to manipulate build
8611 phases as used by build systems (@pxref{Build Systems}). Build phases
8612 are represented as association lists or ``alists'' (@pxref{Association
8613 Lists,,, guile, GNU Guile Reference Manual}) where each key is a symbol
8614 naming the phase and the associated value is a procedure (@pxref{Build
8615 Phases}).
8616
8617 Guile core and the @code{(srfi srfi-1)} module both provide tools to
8618 manipulate alists. The @code{(guix build utils)} module complements
8619 those with tools written with build phases in mind.
8620
8621 @cindex build phases, modifying
8622 @deffn {Scheme Syntax} modify-phases @var{phases} @var{clause}@dots{}
8623 Modify @var{phases} sequentially as per each @var{clause}, which may
8624 have one of the following forms:
8625
8626 @lisp
8627 (delete @var{old-phase-name})
8628 (replace @var{old-phase-name} @var{new-phase})
8629 (add-before @var{old-phase-name} @var{new-phase-name} @var{new-phase})
8630 (add-after @var{old-phase-name} @var{new-phase-name} @var{new-phase})
8631 @end lisp
8632
8633 Where every @var{phase-name} above is an expression evaluating to a
8634 symbol, and @var{new-phase} an expression evaluating to a procedure.
8635 @end deffn
8636
8637 The example below is taken from the definition of the @code{grep}
8638 package. It adds a phase to run after the @code{install} phase, called
8639 @code{fix-egrep-and-fgrep}. That phase is a procedure (@code{lambda*}
8640 is for anonymous procedures) that takes a @code{#:outputs} keyword
8641 argument and ignores extra keyword arguments (@pxref{Optional
8642 Arguments,,, guile, GNU Guile Reference Manual}, for more on
8643 @code{lambda*} and optional and keyword arguments.) The phase uses
8644 @code{substitute*} to modify the installed @file{egrep} and @file{fgrep}
8645 scripts so that they refer to @code{grep} by its absolute file name:
8646
8647 @lisp
8648 (modify-phases %standard-phases
8649 (add-after 'install 'fix-egrep-and-fgrep
8650 ;; Patch 'egrep' and 'fgrep' to execute 'grep' via its
8651 ;; absolute file name instead of searching for it in $PATH.
8652 (lambda* (#:key outputs #:allow-other-keys)
8653 (let* ((out (assoc-ref outputs "out"))
8654 (bin (string-append out "/bin")))
8655 (substitute* (list (string-append bin "/egrep")
8656 (string-append bin "/fgrep"))
8657 (("^exec grep")
8658 (string-append "exec " bin "/grep")))
8659 #t))))
8660 @end lisp
8661
8662 In the example below, phases are modified in two ways: the standard
8663 @code{configure} phase is deleted, presumably because the package does
8664 not have a @file{configure} script or anything similar, and the default
8665 @code{install} phase is replaced by one that manually copies the
8666 executable files to be installed:
8667
8668 @lisp
8669 (modify-phases %standard-phases
8670 (delete 'configure) ;no 'configure' script
8671 (replace 'install
8672 (lambda* (#:key outputs #:allow-other-keys)
8673 ;; The package's Makefile doesn't provide an "install"
8674 ;; rule so do it by ourselves.
8675 (let ((bin (string-append (assoc-ref outputs "out")
8676 "/bin")))
8677 (install-file "footswitch" bin)
8678 (install-file "scythe" bin)
8679 #t))))
8680 @end lisp
8681
8682 @c TODO: Add more examples.
8683
8684 @node The Store
8685 @section The Store
8686
8687 @cindex store
8688 @cindex store items
8689 @cindex store paths
8690
8691 Conceptually, the @dfn{store} is the place where derivations that have
8692 been built successfully are stored---by default, @file{/gnu/store}.
8693 Sub-directories in the store are referred to as @dfn{store items} or
8694 sometimes @dfn{store paths}. The store has an associated database that
8695 contains information such as the store paths referred to by each store
8696 path, and the list of @emph{valid} store items---results of successful
8697 builds. This database resides in @file{@var{localstatedir}/guix/db},
8698 where @var{localstatedir} is the state directory specified @i{via}
8699 @option{--localstatedir} at configure time, usually @file{/var}.
8700
8701 The store is @emph{always} accessed by the daemon on behalf of its clients
8702 (@pxref{Invoking guix-daemon}). To manipulate the store, clients
8703 connect to the daemon over a Unix-domain socket, send requests to it,
8704 and read the result---these are remote procedure calls, or RPCs.
8705
8706 @quotation Note
8707 Users must @emph{never} modify files under @file{/gnu/store} directly.
8708 This would lead to inconsistencies and break the immutability
8709 assumptions of Guix's functional model (@pxref{Introduction}).
8710
8711 @xref{Invoking guix gc, @command{guix gc --verify}}, for information on
8712 how to check the integrity of the store and attempt recovery from
8713 accidental modifications.
8714 @end quotation
8715
8716 The @code{(guix store)} module provides procedures to connect to the
8717 daemon, and to perform RPCs. These are described below. By default,
8718 @code{open-connection}, and thus all the @command{guix} commands,
8719 connect to the local daemon or to the URI specified by the
8720 @env{GUIX_DAEMON_SOCKET} environment variable.
8721
8722 @defvr {Environment Variable} GUIX_DAEMON_SOCKET
8723 When set, the value of this variable should be a file name or a URI
8724 designating the daemon endpoint. When it is a file name, it denotes a
8725 Unix-domain socket to connect to. In addition to file names, the
8726 supported URI schemes are:
8727
8728 @table @code
8729 @item file
8730 @itemx unix
8731 These are for Unix-domain sockets.
8732 @code{file:///var/guix/daemon-socket/socket} is equivalent to
8733 @file{/var/guix/daemon-socket/socket}.
8734
8735 @item guix
8736 @cindex daemon, remote access
8737 @cindex remote access to the daemon
8738 @cindex daemon, cluster setup
8739 @cindex clusters, daemon setup
8740 These URIs denote connections over TCP/IP, without encryption nor
8741 authentication of the remote host. The URI must specify the host name
8742 and optionally a port number (by default port 44146 is used):
8743
8744 @example
8745 guix://master.guix.example.org:1234
8746 @end example
8747
8748 This setup is suitable on local networks, such as clusters, where only
8749 trusted nodes may connect to the build daemon at
8750 @code{master.guix.example.org}.
8751
8752 The @option{--listen} option of @command{guix-daemon} can be used to
8753 instruct it to listen for TCP connections (@pxref{Invoking guix-daemon,
8754 @option{--listen}}).
8755
8756 @item ssh
8757 @cindex SSH access to build daemons
8758 These URIs allow you to connect to a remote daemon over SSH@. This
8759 feature requires Guile-SSH (@pxref{Requirements}) and a working
8760 @command{guile} binary in @env{PATH} on the destination machine. It
8761 supports public key and GSSAPI authentication. A typical URL might look
8762 like this:
8763
8764 @example
8765 ssh://charlie@@guix.example.org:22
8766 @end example
8767
8768 As for @command{guix copy}, the usual OpenSSH client configuration files
8769 are honored (@pxref{Invoking guix copy}).
8770 @end table
8771
8772 Additional URI schemes may be supported in the future.
8773
8774 @c XXX: Remove this note when the protocol incurs fewer round trips
8775 @c and when (guix derivations) no longer relies on file system access.
8776 @quotation Note
8777 The ability to connect to remote build daemons is considered
8778 experimental as of @value{VERSION}. Please get in touch with us to
8779 share any problems or suggestions you may have (@pxref{Contributing}).
8780 @end quotation
8781 @end defvr
8782
8783 @deffn {Scheme Procedure} open-connection [@var{uri}] [#:reserve-space? #t]
8784 Connect to the daemon over the Unix-domain socket at @var{uri} (a string). When
8785 @var{reserve-space?} is true, instruct it to reserve a little bit of
8786 extra space on the file system so that the garbage collector can still
8787 operate should the disk become full. Return a server object.
8788
8789 @var{file} defaults to @code{%default-socket-path}, which is the normal
8790 location given the options that were passed to @command{configure}.
8791 @end deffn
8792
8793 @deffn {Scheme Procedure} close-connection @var{server}
8794 Close the connection to @var{server}.
8795 @end deffn
8796
8797 @defvr {Scheme Variable} current-build-output-port
8798 This variable is bound to a SRFI-39 parameter, which refers to the port
8799 where build and error logs sent by the daemon should be written.
8800 @end defvr
8801
8802 Procedures that make RPCs all take a server object as their first
8803 argument.
8804
8805 @deffn {Scheme Procedure} valid-path? @var{server} @var{path}
8806 @cindex invalid store items
8807 Return @code{#t} when @var{path} designates a valid store item and
8808 @code{#f} otherwise (an invalid item may exist on disk but still be
8809 invalid, for instance because it is the result of an aborted or failed
8810 build).
8811
8812 A @code{&store-protocol-error} condition is raised if @var{path} is not
8813 prefixed by the store directory (@file{/gnu/store}).
8814 @end deffn
8815
8816 @deffn {Scheme Procedure} add-text-to-store @var{server} @var{name} @var{text} [@var{references}]
8817 Add @var{text} under file @var{name} in the store, and return its store
8818 path. @var{references} is the list of store paths referred to by the
8819 resulting store path.
8820 @end deffn
8821
8822 @deffn {Scheme Procedure} build-derivations @var{store} @var{derivations} @
8823 [@var{mode}]
8824 Build @var{derivations}, a list of @code{<derivation>} objects, @file{.drv}
8825 file names, or derivation/output pairs, using the specified
8826 @var{mode}---@code{(build-mode normal)} by default.
8827 @end deffn
8828
8829 Note that the @code{(guix monads)} module provides a monad as well as
8830 monadic versions of the above procedures, with the goal of making it
8831 more convenient to work with code that accesses the store (@pxref{The
8832 Store Monad}).
8833
8834 @c FIXME
8835 @i{This section is currently incomplete.}
8836
8837 @node Derivations
8838 @section Derivations
8839
8840 @cindex derivations
8841 Low-level build actions and the environment in which they are performed
8842 are represented by @dfn{derivations}. A derivation contains the
8843 following pieces of information:
8844
8845 @itemize
8846 @item
8847 The outputs of the derivation---derivations produce at least one file or
8848 directory in the store, but may produce more.
8849
8850 @item
8851 @cindex build-time dependencies
8852 @cindex dependencies, build-time
8853 The inputs of the derivations---i.e., its build-time dependencies---which may
8854 be other derivations or plain files in the store (patches, build scripts,
8855 etc.).
8856
8857 @item
8858 The system type targeted by the derivation---e.g., @code{x86_64-linux}.
8859
8860 @item
8861 The file name of a build script in the store, along with the arguments
8862 to be passed.
8863
8864 @item
8865 A list of environment variables to be defined.
8866
8867 @end itemize
8868
8869 @cindex derivation path
8870 Derivations allow clients of the daemon to communicate build actions to
8871 the store. They exist in two forms: as an in-memory representation,
8872 both on the client- and daemon-side, and as files in the store whose
8873 name end in @file{.drv}---these files are referred to as @dfn{derivation
8874 paths}. Derivations paths can be passed to the @code{build-derivations}
8875 procedure to perform the build actions they prescribe (@pxref{The
8876 Store}).
8877
8878 @cindex fixed-output derivations
8879 Operations such as file downloads and version-control checkouts for
8880 which the expected content hash is known in advance are modeled as
8881 @dfn{fixed-output derivations}. Unlike regular derivations, the outputs
8882 of a fixed-output derivation are independent of its inputs---e.g., a
8883 source code download produces the same result regardless of the download
8884 method and tools being used.
8885
8886 @cindex references
8887 @cindex run-time dependencies
8888 @cindex dependencies, run-time
8889 The outputs of derivations---i.e., the build results---have a set of
8890 @dfn{references}, as reported by the @code{references} RPC or the
8891 @command{guix gc --references} command (@pxref{Invoking guix gc}). References
8892 are the set of run-time dependencies of the build results. References are a
8893 subset of the inputs of the derivation; this subset is automatically computed
8894 by the build daemon by scanning all the files in the outputs.
8895
8896 The @code{(guix derivations)} module provides a representation of
8897 derivations as Scheme objects, along with procedures to create and
8898 otherwise manipulate derivations. The lowest-level primitive to create
8899 a derivation is the @code{derivation} procedure:
8900
8901 @deffn {Scheme Procedure} derivation @var{store} @var{name} @var{builder} @
8902 @var{args} [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
8903 [#:recursive? #f] [#:inputs '()] [#:env-vars '()] @
8904 [#:system (%current-system)] [#:references-graphs #f] @
8905 [#:allowed-references #f] [#:disallowed-references #f] @
8906 [#:leaked-env-vars #f] [#:local-build? #f] @
8907 [#:substitutable? #t] [#:properties '()]
8908 Build a derivation with the given arguments, and return the resulting
8909 @code{<derivation>} object.
8910
8911 When @var{hash} and @var{hash-algo} are given, a
8912 @dfn{fixed-output derivation} is created---i.e., one whose result is
8913 known in advance, such as a file download. If, in addition,
8914 @var{recursive?} is true, then that fixed output may be an executable
8915 file or a directory and @var{hash} must be the hash of an archive
8916 containing this output.
8917
8918 When @var{references-graphs} is true, it must be a list of file
8919 name/store path pairs. In that case, the reference graph of each store
8920 path is exported in the build environment in the corresponding file, in
8921 a simple text format.
8922
8923 When @var{allowed-references} is true, it must be a list of store items
8924 or outputs that the derivation's output may refer to. Likewise,
8925 @var{disallowed-references}, if true, must be a list of things the
8926 outputs may @emph{not} refer to.
8927
8928 When @var{leaked-env-vars} is true, it must be a list of strings
8929 denoting environment variables that are allowed to ``leak'' from the
8930 daemon's environment to the build environment. This is only applicable
8931 to fixed-output derivations---i.e., when @var{hash} is true. The main
8932 use is to allow variables such as @code{http_proxy} to be passed to
8933 derivations that download files.
8934
8935 When @var{local-build?} is true, declare that the derivation is not a
8936 good candidate for offloading and should rather be built locally
8937 (@pxref{Daemon Offload Setup}). This is the case for small derivations
8938 where the costs of data transfers would outweigh the benefits.
8939
8940 When @var{substitutable?} is false, declare that substitutes of the
8941 derivation's output should not be used (@pxref{Substitutes}). This is
8942 useful, for instance, when building packages that capture details of the
8943 host CPU instruction set.
8944
8945 @var{properties} must be an association list describing ``properties'' of the
8946 derivation. It is kept as-is, uninterpreted, in the derivation.
8947 @end deffn
8948
8949 @noindent
8950 Here's an example with a shell script as its builder, assuming
8951 @var{store} is an open connection to the daemon, and @var{bash} points
8952 to a Bash executable in the store:
8953
8954 @lisp
8955 (use-modules (guix utils)
8956 (guix store)
8957 (guix derivations))
8958
8959 (let ((builder ; add the Bash script to the store
8960 (add-text-to-store store "my-builder.sh"
8961 "echo hello world > $out\n" '())))
8962 (derivation store "foo"
8963 bash `("-e" ,builder)
8964 #:inputs `((,bash) (,builder))
8965 #:env-vars '(("HOME" . "/homeless"))))
8966 @result{} #<derivation /gnu/store/@dots{}-foo.drv => /gnu/store/@dots{}-foo>
8967 @end lisp
8968
8969 As can be guessed, this primitive is cumbersome to use directly. A
8970 better approach is to write build scripts in Scheme, of course! The
8971 best course of action for that is to write the build code as a
8972 ``G-expression'', and to pass it to @code{gexp->derivation}. For more
8973 information, @pxref{G-Expressions}.
8974
8975 Once upon a time, @code{gexp->derivation} did not exist and constructing
8976 derivations with build code written in Scheme was achieved with
8977 @code{build-expression->derivation}, documented below. This procedure
8978 is now deprecated in favor of the much nicer @code{gexp->derivation}.
8979
8980 @deffn {Scheme Procedure} build-expression->derivation @var{store} @
8981 @var{name} @var{exp} @
8982 [#:system (%current-system)] [#:inputs '()] @
8983 [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
8984 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
8985 [#:references-graphs #f] [#:allowed-references #f] @
8986 [#:disallowed-references #f] @
8987 [#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
8988 Return a derivation that executes Scheme expression @var{exp} as a
8989 builder for derivation @var{name}. @var{inputs} must be a list of
8990 @code{(name drv-path sub-drv)} tuples; when @var{sub-drv} is omitted,
8991 @code{"out"} is assumed. @var{modules} is a list of names of Guile
8992 modules from the current search path to be copied in the store,
8993 compiled, and made available in the load path during the execution of
8994 @var{exp}---e.g., @code{((guix build utils) (guix build
8995 gnu-build-system))}.
8996
8997 @var{exp} is evaluated in an environment where @code{%outputs} is bound
8998 to a list of output/path pairs, and where @code{%build-inputs} is bound
8999 to a list of string/output-path pairs made from @var{inputs}.
9000 Optionally, @var{env-vars} is a list of string pairs specifying the name
9001 and value of environment variables visible to the builder. The builder
9002 terminates by passing the result of @var{exp} to @code{exit}; thus, when
9003 @var{exp} returns @code{#f}, the build is considered to have failed.
9004
9005 @var{exp} is built using @var{guile-for-build} (a derivation). When
9006 @var{guile-for-build} is omitted or is @code{#f}, the value of the
9007 @code{%guile-for-build} fluid is used instead.
9008
9009 See the @code{derivation} procedure for the meaning of
9010 @var{references-graphs}, @var{allowed-references},
9011 @var{disallowed-references}, @var{local-build?}, and
9012 @var{substitutable?}.
9013 @end deffn
9014
9015 @noindent
9016 Here's an example of a single-output derivation that creates a directory
9017 containing one file:
9018
9019 @lisp
9020 (let ((builder '(let ((out (assoc-ref %outputs "out")))
9021 (mkdir out) ; create /gnu/store/@dots{}-goo
9022 (call-with-output-file (string-append out "/test")
9023 (lambda (p)
9024 (display '(hello guix) p))))))
9025 (build-expression->derivation store "goo" builder))
9026
9027 @result{} #<derivation /gnu/store/@dots{}-goo.drv => @dots{}>
9028 @end lisp
9029
9030
9031 @node The Store Monad
9032 @section The Store Monad
9033
9034 @cindex monad
9035
9036 The procedures that operate on the store described in the previous
9037 sections all take an open connection to the build daemon as their first
9038 argument. Although the underlying model is functional, they either have
9039 side effects or depend on the current state of the store.
9040
9041 The former is inconvenient: the connection to the build daemon has to be
9042 carried around in all those functions, making it impossible to compose
9043 functions that do not take that parameter with functions that do. The
9044 latter can be problematic: since store operations have side effects
9045 and/or depend on external state, they have to be properly sequenced.
9046
9047 @cindex monadic values
9048 @cindex monadic functions
9049 This is where the @code{(guix monads)} module comes in. This module
9050 provides a framework for working with @dfn{monads}, and a particularly
9051 useful monad for our uses, the @dfn{store monad}. Monads are a
9052 construct that allows two things: associating ``context'' with values
9053 (in our case, the context is the store), and building sequences of
9054 computations (here computations include accesses to the store). Values
9055 in a monad---values that carry this additional context---are called
9056 @dfn{monadic values}; procedures that return such values are called
9057 @dfn{monadic procedures}.
9058
9059 Consider this ``normal'' procedure:
9060
9061 @lisp
9062 (define (sh-symlink store)
9063 ;; Return a derivation that symlinks the 'bash' executable.
9064 (let* ((drv (package-derivation store bash))
9065 (out (derivation->output-path drv))
9066 (sh (string-append out "/bin/bash")))
9067 (build-expression->derivation store "sh"
9068 `(symlink ,sh %output))))
9069 @end lisp
9070
9071 Using @code{(guix monads)} and @code{(guix gexp)}, it may be rewritten
9072 as a monadic function:
9073
9074 @lisp
9075 (define (sh-symlink)
9076 ;; Same, but return a monadic value.
9077 (mlet %store-monad ((drv (package->derivation bash)))
9078 (gexp->derivation "sh"
9079 #~(symlink (string-append #$drv "/bin/bash")
9080 #$output))))
9081 @end lisp
9082
9083 There are several things to note in the second version: the @code{store}
9084 parameter is now implicit and is ``threaded'' in the calls to the
9085 @code{package->derivation} and @code{gexp->derivation} monadic
9086 procedures, and the monadic value returned by @code{package->derivation}
9087 is @dfn{bound} using @code{mlet} instead of plain @code{let}.
9088
9089 As it turns out, the call to @code{package->derivation} can even be
9090 omitted since it will take place implicitly, as we will see later
9091 (@pxref{G-Expressions}):
9092
9093 @lisp
9094 (define (sh-symlink)
9095 (gexp->derivation "sh"
9096 #~(symlink (string-append #$bash "/bin/bash")
9097 #$output)))
9098 @end lisp
9099
9100 @c See
9101 @c <https://syntaxexclamation.wordpress.com/2014/06/26/escaping-continuations/>
9102 @c for the funny quote.
9103 Calling the monadic @code{sh-symlink} has no effect. As someone once
9104 said, ``you exit a monad like you exit a building on fire: by running''.
9105 So, to exit the monad and get the desired effect, one must use
9106 @code{run-with-store}:
9107
9108 @lisp
9109 (run-with-store (open-connection) (sh-symlink))
9110 @result{} /gnu/store/...-sh-symlink
9111 @end lisp
9112
9113 Note that the @code{(guix monad-repl)} module extends the Guile REPL with
9114 new ``meta-commands'' to make it easier to deal with monadic procedures:
9115 @code{run-in-store}, and @code{enter-store-monad}. The former is used
9116 to ``run'' a single monadic value through the store:
9117
9118 @example
9119 scheme@@(guile-user)> ,run-in-store (package->derivation hello)
9120 $1 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
9121 @end example
9122
9123 The latter enters a recursive REPL, where all the return values are
9124 automatically run through the store:
9125
9126 @example
9127 scheme@@(guile-user)> ,enter-store-monad
9128 store-monad@@(guile-user) [1]> (package->derivation hello)
9129 $2 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
9130 store-monad@@(guile-user) [1]> (text-file "foo" "Hello!")
9131 $3 = "/gnu/store/@dots{}-foo"
9132 store-monad@@(guile-user) [1]> ,q
9133 scheme@@(guile-user)>
9134 @end example
9135
9136 @noindent
9137 Note that non-monadic values cannot be returned in the
9138 @code{store-monad} REPL.
9139
9140 The main syntactic forms to deal with monads in general are provided by
9141 the @code{(guix monads)} module and are described below.
9142
9143 @deffn {Scheme Syntax} with-monad @var{monad} @var{body} ...
9144 Evaluate any @code{>>=} or @code{return} forms in @var{body} as being
9145 in @var{monad}.
9146 @end deffn
9147
9148 @deffn {Scheme Syntax} return @var{val}
9149 Return a monadic value that encapsulates @var{val}.
9150 @end deffn
9151
9152 @deffn {Scheme Syntax} >>= @var{mval} @var{mproc} ...
9153 @dfn{Bind} monadic value @var{mval}, passing its ``contents'' to monadic
9154 procedures @var{mproc}@dots{}@footnote{This operation is commonly
9155 referred to as ``bind'', but that name denotes an unrelated procedure in
9156 Guile. Thus we use this somewhat cryptic symbol inherited from the
9157 Haskell language.}. There can be one @var{mproc} or several of them, as
9158 in this example:
9159
9160 @lisp
9161 (run-with-state
9162 (with-monad %state-monad
9163 (>>= (return 1)
9164 (lambda (x) (return (+ 1 x)))
9165 (lambda (x) (return (* 2 x)))))
9166 'some-state)
9167
9168 @result{} 4
9169 @result{} some-state
9170 @end lisp
9171 @end deffn
9172
9173 @deffn {Scheme Syntax} mlet @var{monad} ((@var{var} @var{mval}) ...) @
9174 @var{body} ...
9175 @deffnx {Scheme Syntax} mlet* @var{monad} ((@var{var} @var{mval}) ...) @
9176 @var{body} ...
9177 Bind the variables @var{var} to the monadic values @var{mval} in
9178 @var{body}, which is a sequence of expressions. As with the bind
9179 operator, this can be thought of as ``unpacking'' the raw, non-monadic
9180 value ``contained'' in @var{mval} and making @var{var} refer to that
9181 raw, non-monadic value within the scope of the @var{body}. The form
9182 (@var{var} -> @var{val}) binds @var{var} to the ``normal'' value
9183 @var{val}, as per @code{let}. The binding operations occur in sequence
9184 from left to right. The last expression of @var{body} must be a monadic
9185 expression, and its result will become the result of the @code{mlet} or
9186 @code{mlet*} when run in the @var{monad}.
9187
9188 @code{mlet*} is to @code{mlet} what @code{let*} is to @code{let}
9189 (@pxref{Local Bindings,,, guile, GNU Guile Reference Manual}).
9190 @end deffn
9191
9192 @deffn {Scheme System} mbegin @var{monad} @var{mexp} ...
9193 Bind @var{mexp} and the following monadic expressions in sequence,
9194 returning the result of the last expression. Every expression in the
9195 sequence must be a monadic expression.
9196
9197 This is akin to @code{mlet}, except that the return values of the
9198 monadic expressions are ignored. In that sense, it is analogous to
9199 @code{begin}, but applied to monadic expressions.
9200 @end deffn
9201
9202 @deffn {Scheme System} mwhen @var{condition} @var{mexp0} @var{mexp*} ...
9203 When @var{condition} is true, evaluate the sequence of monadic
9204 expressions @var{mexp0}..@var{mexp*} as in an @code{mbegin}. When
9205 @var{condition} is false, return @code{*unspecified*} in the current
9206 monad. Every expression in the sequence must be a monadic expression.
9207 @end deffn
9208
9209 @deffn {Scheme System} munless @var{condition} @var{mexp0} @var{mexp*} ...
9210 When @var{condition} is false, evaluate the sequence of monadic
9211 expressions @var{mexp0}..@var{mexp*} as in an @code{mbegin}. When
9212 @var{condition} is true, return @code{*unspecified*} in the current
9213 monad. Every expression in the sequence must be a monadic expression.
9214 @end deffn
9215
9216 @cindex state monad
9217 The @code{(guix monads)} module provides the @dfn{state monad}, which
9218 allows an additional value---the state---to be @emph{threaded} through
9219 monadic procedure calls.
9220
9221 @defvr {Scheme Variable} %state-monad
9222 The state monad. Procedures in the state monad can access and change
9223 the state that is threaded.
9224
9225 Consider the example below. The @code{square} procedure returns a value
9226 in the state monad. It returns the square of its argument, but also
9227 increments the current state value:
9228
9229 @lisp
9230 (define (square x)
9231 (mlet %state-monad ((count (current-state)))
9232 (mbegin %state-monad
9233 (set-current-state (+ 1 count))
9234 (return (* x x)))))
9235
9236 (run-with-state (sequence %state-monad (map square (iota 3))) 0)
9237 @result{} (0 1 4)
9238 @result{} 3
9239 @end lisp
9240
9241 When ``run'' through @code{%state-monad}, we obtain that additional state
9242 value, which is the number of @code{square} calls.
9243 @end defvr
9244
9245 @deffn {Monadic Procedure} current-state
9246 Return the current state as a monadic value.
9247 @end deffn
9248
9249 @deffn {Monadic Procedure} set-current-state @var{value}
9250 Set the current state to @var{value} and return the previous state as a
9251 monadic value.
9252 @end deffn
9253
9254 @deffn {Monadic Procedure} state-push @var{value}
9255 Push @var{value} to the current state, which is assumed to be a list,
9256 and return the previous state as a monadic value.
9257 @end deffn
9258
9259 @deffn {Monadic Procedure} state-pop
9260 Pop a value from the current state and return it as a monadic value.
9261 The state is assumed to be a list.
9262 @end deffn
9263
9264 @deffn {Scheme Procedure} run-with-state @var{mval} [@var{state}]
9265 Run monadic value @var{mval} starting with @var{state} as the initial
9266 state. Return two values: the resulting value, and the resulting state.
9267 @end deffn
9268
9269 The main interface to the store monad, provided by the @code{(guix
9270 store)} module, is as follows.
9271
9272 @defvr {Scheme Variable} %store-monad
9273 The store monad---an alias for @code{%state-monad}.
9274
9275 Values in the store monad encapsulate accesses to the store. When its
9276 effect is needed, a value of the store monad must be ``evaluated'' by
9277 passing it to the @code{run-with-store} procedure (see below).
9278 @end defvr
9279
9280 @deffn {Scheme Procedure} run-with-store @var{store} @var{mval} [#:guile-for-build] [#:system (%current-system)]
9281 Run @var{mval}, a monadic value in the store monad, in @var{store}, an
9282 open store connection.
9283 @end deffn
9284
9285 @deffn {Monadic Procedure} text-file @var{name} @var{text} [@var{references}]
9286 Return as a monadic value the absolute file name in the store of the file
9287 containing @var{text}, a string. @var{references} is a list of store items that the
9288 resulting text file refers to; it defaults to the empty list.
9289 @end deffn
9290
9291 @deffn {Monadic Procedure} binary-file @var{name} @var{data} [@var{references}]
9292 Return as a monadic value the absolute file name in the store of the file
9293 containing @var{data}, a bytevector. @var{references} is a list of store
9294 items that the resulting binary file refers to; it defaults to the empty list.
9295 @end deffn
9296
9297 @deffn {Monadic Procedure} interned-file @var{file} [@var{name}] @
9298 [#:recursive? #t] [#:select? (const #t)]
9299 Return the name of @var{file} once interned in the store. Use
9300 @var{name} as its store name, or the basename of @var{file} if
9301 @var{name} is omitted.
9302
9303 When @var{recursive?} is true, the contents of @var{file} are added
9304 recursively; if @var{file} designates a flat file and @var{recursive?}
9305 is true, its contents are added, and its permission bits are kept.
9306
9307 When @var{recursive?} is true, call @code{(@var{select?} @var{file}
9308 @var{stat})} for each directory entry, where @var{file} is the entry's
9309 absolute file name and @var{stat} is the result of @code{lstat}; exclude
9310 entries for which @var{select?} does not return true.
9311
9312 The example below adds a file to the store, under two different names:
9313
9314 @lisp
9315 (run-with-store (open-connection)
9316 (mlet %store-monad ((a (interned-file "README"))
9317 (b (interned-file "README" "LEGU-MIN")))
9318 (return (list a b))))
9319
9320 @result{} ("/gnu/store/rwm@dots{}-README" "/gnu/store/44i@dots{}-LEGU-MIN")
9321 @end lisp
9322
9323 @end deffn
9324
9325 The @code{(guix packages)} module exports the following package-related
9326 monadic procedures:
9327
9328 @deffn {Monadic Procedure} package-file @var{package} [@var{file}] @
9329 [#:system (%current-system)] [#:target #f] @
9330 [#:output "out"]
9331 Return as a monadic
9332 value in the absolute file name of @var{file} within the @var{output}
9333 directory of @var{package}. When @var{file} is omitted, return the name
9334 of the @var{output} directory of @var{package}. When @var{target} is
9335 true, use it as a cross-compilation target triplet.
9336
9337 Note that this procedure does @emph{not} build @var{package}. Thus, the
9338 result might or might not designate an existing file. We recommend not
9339 using this procedure unless you know what you are doing.
9340 @end deffn
9341
9342 @deffn {Monadic Procedure} package->derivation @var{package} [@var{system}]
9343 @deffnx {Monadic Procedure} package->cross-derivation @var{package} @
9344 @var{target} [@var{system}]
9345 Monadic version of @code{package-derivation} and
9346 @code{package-cross-derivation} (@pxref{Defining Packages}).
9347 @end deffn
9348
9349
9350 @node G-Expressions
9351 @section G-Expressions
9352
9353 @cindex G-expression
9354 @cindex build code quoting
9355 So we have ``derivations'', which represent a sequence of build actions
9356 to be performed to produce an item in the store (@pxref{Derivations}).
9357 These build actions are performed when asking the daemon to actually
9358 build the derivations; they are run by the daemon in a container
9359 (@pxref{Invoking guix-daemon}).
9360
9361 @cindex code staging
9362 @cindex staging, of code
9363 @cindex strata of code
9364 It should come as no surprise that we like to write these build actions
9365 in Scheme. When we do that, we end up with two @dfn{strata} of Scheme
9366 code@footnote{The term @dfn{stratum} in this context was coined by
9367 Manuel Serrano et al.@: in the context of their work on Hop. Oleg
9368 Kiselyov, who has written insightful
9369 @url{http://okmij.org/ftp/meta-programming/#meta-scheme, essays and code
9370 on this topic}, refers to this kind of code generation as
9371 @dfn{staging}.}: the ``host code''---code that defines packages, talks
9372 to the daemon, etc.---and the ``build code''---code that actually
9373 performs build actions, such as making directories, invoking
9374 @command{make}, and so on (@pxref{Build Phases}).
9375
9376 To describe a derivation and its build actions, one typically needs to
9377 embed build code inside host code. It boils down to manipulating build
9378 code as data, and the homoiconicity of Scheme---code has a direct
9379 representation as data---comes in handy for that. But we need more than
9380 the normal @code{quasiquote} mechanism in Scheme to construct build
9381 expressions.
9382
9383 The @code{(guix gexp)} module implements @dfn{G-expressions}, a form of
9384 S-expressions adapted to build expressions. G-expressions, or
9385 @dfn{gexps}, consist essentially of three syntactic forms: @code{gexp},
9386 @code{ungexp}, and @code{ungexp-splicing} (or simply: @code{#~},
9387 @code{#$}, and @code{#$@@}), which are comparable to
9388 @code{quasiquote}, @code{unquote}, and @code{unquote-splicing},
9389 respectively (@pxref{Expression Syntax, @code{quasiquote},, guile,
9390 GNU Guile Reference Manual}). However, there are major differences:
9391
9392 @itemize
9393 @item
9394 Gexps are meant to be written to a file and run or manipulated by other
9395 processes.
9396
9397 @item
9398 When a high-level object such as a package or derivation is unquoted
9399 inside a gexp, the result is as if its output file name had been
9400 introduced.
9401
9402 @item
9403 Gexps carry information about the packages or derivations they refer to,
9404 and these dependencies are automatically added as inputs to the build
9405 processes that use them.
9406 @end itemize
9407
9408 @cindex lowering, of high-level objects in gexps
9409 This mechanism is not limited to package and derivation
9410 objects: @dfn{compilers} able to ``lower'' other high-level objects to
9411 derivations or files in the store can be defined,
9412 such that these objects can also be inserted
9413 into gexps. For example, a useful type of high-level objects that can be
9414 inserted in a gexp is ``file-like objects'', which make it easy to
9415 add files to the store and to refer to them in
9416 derivations and such (see @code{local-file} and @code{plain-file}
9417 below).
9418
9419 To illustrate the idea, here is an example of a gexp:
9420
9421 @lisp
9422 (define build-exp
9423 #~(begin
9424 (mkdir #$output)
9425 (chdir #$output)
9426 (symlink (string-append #$coreutils "/bin/ls")
9427 "list-files")))
9428 @end lisp
9429
9430 This gexp can be passed to @code{gexp->derivation}; we obtain a
9431 derivation that builds a directory containing exactly one symlink to
9432 @file{/gnu/store/@dots{}-coreutils-8.22/bin/ls}:
9433
9434 @lisp
9435 (gexp->derivation "the-thing" build-exp)
9436 @end lisp
9437
9438 As one would expect, the @code{"/gnu/store/@dots{}-coreutils-8.22"} string is
9439 substituted to the reference to the @var{coreutils} package in the
9440 actual build code, and @var{coreutils} is automatically made an input to
9441 the derivation. Likewise, @code{#$output} (equivalent to @code{(ungexp
9442 output)}) is replaced by a string containing the directory name of the
9443 output of the derivation.
9444
9445 @cindex cross compilation
9446 In a cross-compilation context, it is useful to distinguish between
9447 references to the @emph{native} build of a package---that can run on the
9448 host---versus references to cross builds of a package. To that end, the
9449 @code{#+} plays the same role as @code{#$}, but is a reference to a
9450 native package build:
9451
9452 @lisp
9453 (gexp->derivation "vi"
9454 #~(begin
9455 (mkdir #$output)
9456 (mkdir (string-append #$output "/bin"))
9457 (system* (string-append #+coreutils "/bin/ln")
9458 "-s"
9459 (string-append #$emacs "/bin/emacs")
9460 (string-append #$output "/bin/vi")))
9461 #:target "aarch64-linux-gnu")
9462 @end lisp
9463
9464 @noindent
9465 In the example above, the native build of @var{coreutils} is used, so
9466 that @command{ln} can actually run on the host; but then the
9467 cross-compiled build of @var{emacs} is referenced.
9468
9469 @cindex imported modules, for gexps
9470 @findex with-imported-modules
9471 Another gexp feature is @dfn{imported modules}: sometimes you want to be
9472 able to use certain Guile modules from the ``host environment'' in the
9473 gexp, so those modules should be imported in the ``build environment''.
9474 The @code{with-imported-modules} form allows you to express that:
9475
9476 @lisp
9477 (let ((build (with-imported-modules '((guix build utils))
9478 #~(begin
9479 (use-modules (guix build utils))
9480 (mkdir-p (string-append #$output "/bin"))))))
9481 (gexp->derivation "empty-dir"
9482 #~(begin
9483 #$build
9484 (display "success!\n")
9485 #t)))
9486 @end lisp
9487
9488 @noindent
9489 In this example, the @code{(guix build utils)} module is automatically
9490 pulled into the isolated build environment of our gexp, such that
9491 @code{(use-modules (guix build utils))} works as expected.
9492
9493 @cindex module closure
9494 @findex source-module-closure
9495 Usually you want the @emph{closure} of the module to be imported---i.e.,
9496 the module itself and all the modules it depends on---rather than just
9497 the module; failing to do that, attempts to use the module will fail
9498 because of missing dependent modules. The @code{source-module-closure}
9499 procedure computes the closure of a module by looking at its source file
9500 headers, which comes in handy in this case:
9501
9502 @lisp
9503 (use-modules (guix modules)) ;for 'source-module-closure'
9504
9505 (with-imported-modules (source-module-closure
9506 '((guix build utils)
9507 (gnu build vm)))
9508 (gexp->derivation "something-with-vms"
9509 #~(begin
9510 (use-modules (guix build utils)
9511 (gnu build vm))
9512 @dots{})))
9513 @end lisp
9514
9515 @cindex extensions, for gexps
9516 @findex with-extensions
9517 In the same vein, sometimes you want to import not just pure-Scheme
9518 modules, but also ``extensions'' such as Guile bindings to C libraries
9519 or other ``full-blown'' packages. Say you need the @code{guile-json}
9520 package available on the build side, here's how you would do it:
9521
9522 @lisp
9523 (use-modules (gnu packages guile)) ;for 'guile-json'
9524
9525 (with-extensions (list guile-json)
9526 (gexp->derivation "something-with-json"
9527 #~(begin
9528 (use-modules (json))
9529 @dots{})))
9530 @end lisp
9531
9532 The syntactic form to construct gexps is summarized below.
9533
9534 @deffn {Scheme Syntax} #~@var{exp}
9535 @deffnx {Scheme Syntax} (gexp @var{exp})
9536 Return a G-expression containing @var{exp}. @var{exp} may contain one
9537 or more of the following forms:
9538
9539 @table @code
9540 @item #$@var{obj}
9541 @itemx (ungexp @var{obj})
9542 Introduce a reference to @var{obj}. @var{obj} may have one of the
9543 supported types, for example a package or a
9544 derivation, in which case the @code{ungexp} form is replaced by its
9545 output file name---e.g., @code{"/gnu/store/@dots{}-coreutils-8.22}.
9546
9547 If @var{obj} is a list, it is traversed and references to supported
9548 objects are substituted similarly.
9549
9550 If @var{obj} is another gexp, its contents are inserted and its
9551 dependencies are added to those of the containing gexp.
9552
9553 If @var{obj} is another kind of object, it is inserted as is.
9554
9555 @item #$@var{obj}:@var{output}
9556 @itemx (ungexp @var{obj} @var{output})
9557 This is like the form above, but referring explicitly to the
9558 @var{output} of @var{obj}---this is useful when @var{obj} produces
9559 multiple outputs (@pxref{Packages with Multiple Outputs}).
9560
9561 @item #+@var{obj}
9562 @itemx #+@var{obj}:output
9563 @itemx (ungexp-native @var{obj})
9564 @itemx (ungexp-native @var{obj} @var{output})
9565 Same as @code{ungexp}, but produces a reference to the @emph{native}
9566 build of @var{obj} when used in a cross compilation context.
9567
9568 @item #$output[:@var{output}]
9569 @itemx (ungexp output [@var{output}])
9570 Insert a reference to derivation output @var{output}, or to the main
9571 output when @var{output} is omitted.
9572
9573 This only makes sense for gexps passed to @code{gexp->derivation}.
9574
9575 @item #$@@@var{lst}
9576 @itemx (ungexp-splicing @var{lst})
9577 Like the above, but splices the contents of @var{lst} inside the
9578 containing list.
9579
9580 @item #+@@@var{lst}
9581 @itemx (ungexp-native-splicing @var{lst})
9582 Like the above, but refers to native builds of the objects listed in
9583 @var{lst}.
9584
9585 @end table
9586
9587 G-expressions created by @code{gexp} or @code{#~} are run-time objects
9588 of the @code{gexp?} type (see below).
9589 @end deffn
9590
9591 @deffn {Scheme Syntax} with-imported-modules @var{modules} @var{body}@dots{}
9592 Mark the gexps defined in @var{body}@dots{} as requiring @var{modules}
9593 in their execution environment.
9594
9595 Each item in @var{modules} can be the name of a module, such as
9596 @code{(guix build utils)}, or it can be a module name, followed by an
9597 arrow, followed by a file-like object:
9598
9599 @lisp
9600 `((guix build utils)
9601 (guix gcrypt)
9602 ((guix config) => ,(scheme-file "config.scm"
9603 #~(define-module @dots{}))))
9604 @end lisp
9605
9606 @noindent
9607 In the example above, the first two modules are taken from the search
9608 path, and the last one is created from the given file-like object.
9609
9610 This form has @emph{lexical} scope: it has an effect on the gexps
9611 directly defined in @var{body}@dots{}, but not on those defined, say, in
9612 procedures called from @var{body}@dots{}.
9613 @end deffn
9614
9615 @deffn {Scheme Syntax} with-extensions @var{extensions} @var{body}@dots{}
9616 Mark the gexps defined in @var{body}@dots{} as requiring
9617 @var{extensions} in their build and execution environment.
9618 @var{extensions} is typically a list of package objects such as those
9619 defined in the @code{(gnu packages guile)} module.
9620
9621 Concretely, the packages listed in @var{extensions} are added to the
9622 load path while compiling imported modules in @var{body}@dots{}; they
9623 are also added to the load path of the gexp returned by
9624 @var{body}@dots{}.
9625 @end deffn
9626
9627 @deffn {Scheme Procedure} gexp? @var{obj}
9628 Return @code{#t} if @var{obj} is a G-expression.
9629 @end deffn
9630
9631 G-expressions are meant to be written to disk, either as code building
9632 some derivation, or as plain files in the store. The monadic procedures
9633 below allow you to do that (@pxref{The Store Monad}, for more
9634 information about monads).
9635
9636 @deffn {Monadic Procedure} gexp->derivation @var{name} @var{exp} @
9637 [#:system (%current-system)] [#:target #f] [#:graft? #t] @
9638 [#:hash #f] [#:hash-algo #f] @
9639 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
9640 [#:module-path @code{%load-path}] @
9641 [#:effective-version "2.2"] @
9642 [#:references-graphs #f] [#:allowed-references #f] @
9643 [#:disallowed-references #f] @
9644 [#:leaked-env-vars #f] @
9645 [#:script-name (string-append @var{name} "-builder")] @
9646 [#:deprecation-warnings #f] @
9647 [#:local-build? #f] [#:substitutable? #t] @
9648 [#:properties '()] [#:guile-for-build #f]
9649 Return a derivation @var{name} that runs @var{exp} (a gexp) with
9650 @var{guile-for-build} (a derivation) on @var{system}; @var{exp} is
9651 stored in a file called @var{script-name}. When @var{target} is true,
9652 it is used as the cross-compilation target triplet for packages referred
9653 to by @var{exp}.
9654
9655 @var{modules} is deprecated in favor of @code{with-imported-modules}.
9656 Its meaning is to
9657 make @var{modules} available in the evaluation context of @var{exp};
9658 @var{modules} is a list of names of Guile modules searched in
9659 @var{module-path} to be copied in the store, compiled, and made available in
9660 the load path during the execution of @var{exp}---e.g., @code{((guix
9661 build utils) (guix build gnu-build-system))}.
9662
9663 @var{effective-version} determines the string to use when adding extensions of
9664 @var{exp} (see @code{with-extensions}) to the search path---e.g., @code{"2.2"}.
9665
9666 @var{graft?} determines whether packages referred to by @var{exp} should be grafted when
9667 applicable.
9668
9669 When @var{references-graphs} is true, it must be a list of tuples of one of the
9670 following forms:
9671
9672 @example
9673 (@var{file-name} @var{package})
9674 (@var{file-name} @var{package} @var{output})
9675 (@var{file-name} @var{derivation})
9676 (@var{file-name} @var{derivation} @var{output})
9677 (@var{file-name} @var{store-item})
9678 @end example
9679
9680 The right-hand-side of each element of @var{references-graphs} is automatically made
9681 an input of the build process of @var{exp}. In the build environment, each
9682 @var{file-name} contains the reference graph of the corresponding item, in a simple
9683 text format.
9684
9685 @var{allowed-references} must be either @code{#f} or a list of output names and packages.
9686 In the latter case, the list denotes store items that the result is allowed to
9687 refer to. Any reference to another store item will lead to a build error.
9688 Similarly for @var{disallowed-references}, which can list items that must not be
9689 referenced by the outputs.
9690
9691 @var{deprecation-warnings} determines whether to show deprecation warnings while
9692 compiling modules. It can be @code{#f}, @code{#t}, or @code{'detailed}.
9693
9694 The other arguments are as for @code{derivation} (@pxref{Derivations}).
9695 @end deffn
9696
9697 @cindex file-like objects
9698 The @code{local-file}, @code{plain-file}, @code{computed-file},
9699 @code{program-file}, and @code{scheme-file} procedures below return
9700 @dfn{file-like objects}. That is, when unquoted in a G-expression,
9701 these objects lead to a file in the store. Consider this G-expression:
9702
9703 @lisp
9704 #~(system* #$(file-append glibc "/sbin/nscd") "-f"
9705 #$(local-file "/tmp/my-nscd.conf"))
9706 @end lisp
9707
9708 The effect here is to ``intern'' @file{/tmp/my-nscd.conf} by copying it
9709 to the store. Once expanded, for instance @i{via}
9710 @code{gexp->derivation}, the G-expression refers to that copy under
9711 @file{/gnu/store}; thus, modifying or removing the file in @file{/tmp}
9712 does not have any effect on what the G-expression does.
9713 @code{plain-file} can be used similarly; it differs in that the file
9714 content is directly passed as a string.
9715
9716 @deffn {Scheme Procedure} local-file @var{file} [@var{name}] @
9717 [#:recursive? #f] [#:select? (const #t)]
9718 Return an object representing local file @var{file} to add to the store;
9719 this object can be used in a gexp. If @var{file} is a literal string
9720 denoting a relative file name, it is looked up relative to the source
9721 file where it appears; if @var{file} is not a literal string, it is
9722 looked up relative to the current working directory at run time.
9723 @var{file} will be added to the store under @var{name}--by default the
9724 base name of @var{file}.
9725
9726 When @var{recursive?} is true, the contents of @var{file} are added recursively; if @var{file}
9727 designates a flat file and @var{recursive?} is true, its contents are added, and its
9728 permission bits are kept.
9729
9730 When @var{recursive?} is true, call @code{(@var{select?} @var{file}
9731 @var{stat})} for each directory entry, where @var{file} is the entry's
9732 absolute file name and @var{stat} is the result of @code{lstat}; exclude
9733 entries for which @var{select?} does not return true.
9734
9735 This is the declarative counterpart of the @code{interned-file} monadic
9736 procedure (@pxref{The Store Monad, @code{interned-file}}).
9737 @end deffn
9738
9739 @deffn {Scheme Procedure} plain-file @var{name} @var{content}
9740 Return an object representing a text file called @var{name} with the given
9741 @var{content} (a string or a bytevector) to be added to the store.
9742
9743 This is the declarative counterpart of @code{text-file}.
9744 @end deffn
9745
9746 @deffn {Scheme Procedure} computed-file @var{name} @var{gexp} @
9747 [#:local-build? #t]
9748 [#:options '()]
9749 Return an object representing the store item @var{name}, a file or
9750 directory computed by @var{gexp}. When @var{local-build?} is true (the
9751 default), the derivation is built locally. @var{options} is a list of
9752 additional arguments to pass to @code{gexp->derivation}.
9753
9754 This is the declarative counterpart of @code{gexp->derivation}.
9755 @end deffn
9756
9757 @deffn {Monadic Procedure} gexp->script @var{name} @var{exp} @
9758 [#:guile (default-guile)] [#:module-path %load-path] @
9759 [#:system (%current-system)] [#:target #f]
9760 Return an executable script @var{name} that runs @var{exp} using
9761 @var{guile}, with @var{exp}'s imported modules in its search path.
9762 Look up @var{exp}'s modules in @var{module-path}.
9763
9764 The example below builds a script that simply invokes the @command{ls}
9765 command:
9766
9767 @lisp
9768 (use-modules (guix gexp) (gnu packages base))
9769
9770 (gexp->script "list-files"
9771 #~(execl #$(file-append coreutils "/bin/ls")
9772 "ls"))
9773 @end lisp
9774
9775 When ``running'' it through the store (@pxref{The Store Monad,
9776 @code{run-with-store}}), we obtain a derivation that produces an
9777 executable file @file{/gnu/store/@dots{}-list-files} along these lines:
9778
9779 @example
9780 #!/gnu/store/@dots{}-guile-2.0.11/bin/guile -ds
9781 !#
9782 (execl "/gnu/store/@dots{}-coreutils-8.22"/bin/ls" "ls")
9783 @end example
9784 @end deffn
9785
9786 @deffn {Scheme Procedure} program-file @var{name} @var{exp} @
9787 [#:guile #f] [#:module-path %load-path]
9788 Return an object representing the executable store item @var{name} that
9789 runs @var{gexp}. @var{guile} is the Guile package used to execute that
9790 script. Imported modules of @var{gexp} are looked up in @var{module-path}.
9791
9792 This is the declarative counterpart of @code{gexp->script}.
9793 @end deffn
9794
9795 @deffn {Monadic Procedure} gexp->file @var{name} @var{exp} @
9796 [#:set-load-path? #t] [#:module-path %load-path] @
9797 [#:splice? #f] @
9798 [#:guile (default-guile)]
9799 Return a derivation that builds a file @var{name} containing @var{exp}.
9800 When @var{splice?} is true, @var{exp} is considered to be a list of
9801 expressions that will be spliced in the resulting file.
9802
9803 When @var{set-load-path?} is true, emit code in the resulting file to
9804 set @code{%load-path} and @code{%load-compiled-path} to honor
9805 @var{exp}'s imported modules. Look up @var{exp}'s modules in
9806 @var{module-path}.
9807
9808 The resulting file holds references to all the dependencies of @var{exp}
9809 or a subset thereof.
9810 @end deffn
9811
9812 @deffn {Scheme Procedure} scheme-file @var{name} @var{exp} @
9813 [#:splice? #f] [#:set-load-path? #t]
9814 Return an object representing the Scheme file @var{name} that contains
9815 @var{exp}.
9816
9817 This is the declarative counterpart of @code{gexp->file}.
9818 @end deffn
9819
9820 @deffn {Monadic Procedure} text-file* @var{name} @var{text} @dots{}
9821 Return as a monadic value a derivation that builds a text file
9822 containing all of @var{text}. @var{text} may list, in addition to
9823 strings, objects of any type that can be used in a gexp: packages,
9824 derivations, local file objects, etc. The resulting store file holds
9825 references to all these.
9826
9827 This variant should be preferred over @code{text-file} anytime the file
9828 to create will reference items from the store. This is typically the
9829 case when building a configuration file that embeds store file names,
9830 like this:
9831
9832 @lisp
9833 (define (profile.sh)
9834 ;; Return the name of a shell script in the store that
9835 ;; initializes the 'PATH' environment variable.
9836 (text-file* "profile.sh"
9837 "export PATH=" coreutils "/bin:"
9838 grep "/bin:" sed "/bin\n"))
9839 @end lisp
9840
9841 In this example, the resulting @file{/gnu/store/@dots{}-profile.sh} file
9842 will reference @var{coreutils}, @var{grep}, and @var{sed}, thereby
9843 preventing them from being garbage-collected during its lifetime.
9844 @end deffn
9845
9846 @deffn {Scheme Procedure} mixed-text-file @var{name} @var{text} @dots{}
9847 Return an object representing store file @var{name} containing
9848 @var{text}. @var{text} is a sequence of strings and file-like objects,
9849 as in:
9850
9851 @lisp
9852 (mixed-text-file "profile"
9853 "export PATH=" coreutils "/bin:" grep "/bin")
9854 @end lisp
9855
9856 This is the declarative counterpart of @code{text-file*}.
9857 @end deffn
9858
9859 @deffn {Scheme Procedure} file-union @var{name} @var{files}
9860 Return a @code{<computed-file>} that builds a directory containing all of @var{files}.
9861 Each item in @var{files} must be a two-element list where the first element is the
9862 file name to use in the new directory, and the second element is a gexp
9863 denoting the target file. Here's an example:
9864
9865 @lisp
9866 (file-union "etc"
9867 `(("hosts" ,(plain-file "hosts"
9868 "127.0.0.1 localhost"))
9869 ("bashrc" ,(plain-file "bashrc"
9870 "alias ls='ls --color=auto'"))))
9871 @end lisp
9872
9873 This yields an @code{etc} directory containing these two files.
9874 @end deffn
9875
9876 @deffn {Scheme Procedure} directory-union @var{name} @var{things}
9877 Return a directory that is the union of @var{things}, where @var{things} is a list of
9878 file-like objects denoting directories. For example:
9879
9880 @lisp
9881 (directory-union "guile+emacs" (list guile emacs))
9882 @end lisp
9883
9884 yields a directory that is the union of the @code{guile} and @code{emacs} packages.
9885 @end deffn
9886
9887 @deffn {Scheme Procedure} file-append @var{obj} @var{suffix} @dots{}
9888 Return a file-like object that expands to the concatenation of @var{obj}
9889 and @var{suffix}, where @var{obj} is a lowerable object and each
9890 @var{suffix} is a string.
9891
9892 As an example, consider this gexp:
9893
9894 @lisp
9895 (gexp->script "run-uname"
9896 #~(system* #$(file-append coreutils
9897 "/bin/uname")))
9898 @end lisp
9899
9900 The same effect could be achieved with:
9901
9902 @lisp
9903 (gexp->script "run-uname"
9904 #~(system* (string-append #$coreutils
9905 "/bin/uname")))
9906 @end lisp
9907
9908 There is one difference though: in the @code{file-append} case, the
9909 resulting script contains the absolute file name as a string, whereas in
9910 the second case, the resulting script contains a @code{(string-append
9911 @dots{})} expression to construct the file name @emph{at run time}.
9912 @end deffn
9913
9914 @deffn {Scheme Syntax} let-system @var{system} @var{body}@dots{}
9915 @deffnx {Scheme Syntax} let-system (@var{system} @var{target}) @var{body}@dots{}
9916 Bind @var{system} to the currently targeted system---e.g.,
9917 @code{"x86_64-linux"}---within @var{body}.
9918
9919 In the second case, additionally bind @var{target} to the current
9920 cross-compilation target---a GNU triplet such as
9921 @code{"arm-linux-gnueabihf"}---or @code{#f} if we are not
9922 cross-compiling.
9923
9924 @code{let-system} is useful in the occasional case where the object
9925 spliced into the gexp depends on the target system, as in this example:
9926
9927 @lisp
9928 #~(system*
9929 #+(let-system system
9930 (cond ((string-prefix? "armhf-" system)
9931 (file-append qemu "/bin/qemu-system-arm"))
9932 ((string-prefix? "x86_64-" system)
9933 (file-append qemu "/bin/qemu-system-x86_64"))
9934 (else
9935 (error "dunno!"))))
9936 "-net" "user" #$image)
9937 @end lisp
9938 @end deffn
9939
9940 @deffn {Scheme Syntax} with-parameters ((@var{parameter} @var{value}) @dots{}) @var{exp}
9941 This macro is similar to the @code{parameterize} form for
9942 dynamically-bound @dfn{parameters} (@pxref{Parameters,,, guile, GNU
9943 Guile Reference Manual}). The key difference is that it takes effect
9944 when the file-like object returned by @var{exp} is lowered to a
9945 derivation or store item.
9946
9947 A typical use of @code{with-parameters} is to force the system in effect
9948 for a given object:
9949
9950 @lisp
9951 (with-parameters ((%current-system "i686-linux"))
9952 coreutils)
9953 @end lisp
9954
9955 The example above returns an object that corresponds to the i686 build
9956 of Coreutils, regardless of the current value of @code{%current-system}.
9957 @end deffn
9958
9959
9960 Of course, in addition to gexps embedded in ``host'' code, there are
9961 also modules containing build tools. To make it clear that they are
9962 meant to be used in the build stratum, these modules are kept in the
9963 @code{(guix build @dots{})} name space.
9964
9965 @cindex lowering, of high-level objects in gexps
9966 Internally, high-level objects are @dfn{lowered}, using their compiler,
9967 to either derivations or store items. For instance, lowering a package
9968 yields a derivation, and lowering a @code{plain-file} yields a store
9969 item. This is achieved using the @code{lower-object} monadic procedure.
9970
9971 @deffn {Monadic Procedure} lower-object @var{obj} [@var{system}] @
9972 [#:target #f]
9973 Return as a value in @code{%store-monad} the derivation or store item
9974 corresponding to @var{obj} for @var{system}, cross-compiling for
9975 @var{target} if @var{target} is true. @var{obj} must be an object that
9976 has an associated gexp compiler, such as a @code{<package>}.
9977 @end deffn
9978
9979 @node Invoking guix repl
9980 @section Invoking @command{guix repl}
9981
9982 @cindex REPL, read-eval-print loop, script
9983 The @command{guix repl} command makes it easier to program Guix in Guile
9984 by launching a Guile @dfn{read-eval-print loop} (REPL) for interactive
9985 programming (@pxref{Using Guile Interactively,,, guile,
9986 GNU Guile Reference Manual}), or by running Guile scripts
9987 (@pxref{Running Guile Scripts,,, guile,
9988 GNU Guile Reference Manual}).
9989 Compared to just launching the @command{guile}
9990 command, @command{guix repl} guarantees that all the Guix modules and all its
9991 dependencies are available in the search path.
9992
9993 The general syntax is:
9994
9995 @example
9996 guix repl @var{options} [@var{file} @var{args}]
9997 @end example
9998
9999 When a @var{file} argument is provided, @var{file} is
10000 executed as a Guile scripts:
10001
10002 @example
10003 guix repl my-script.scm
10004 @end example
10005
10006 To pass arguments to the script, use @code{--} to prevent them from
10007 being interpreted as arguments to @command{guix repl} itself:
10008
10009 @example
10010 guix repl -- my-script.scm --input=foo.txt
10011 @end example
10012
10013 To make a script executable directly from the shell, using the guix
10014 executable that is on the user's search path, add the following two
10015 lines at the top of the script:
10016
10017 @example
10018 @code{#!/usr/bin/env -S guix repl --}
10019 @code{!#}
10020 @end example
10021
10022 Without a file name argument, a Guile REPL is started:
10023
10024 @example
10025 $ guix repl
10026 scheme@@(guile-user)> ,use (gnu packages base)
10027 scheme@@(guile-user)> coreutils
10028 $1 = #<package coreutils@@8.29 gnu/packages/base.scm:327 3e28300>
10029 @end example
10030
10031 @cindex inferiors
10032 In addition, @command{guix repl} implements a simple machine-readable REPL
10033 protocol for use by @code{(guix inferior)}, a facility to interact with
10034 @dfn{inferiors}, separate processes running a potentially different revision
10035 of Guix.
10036
10037 The available options are as follows:
10038
10039 @table @code
10040 @item --type=@var{type}
10041 @itemx -t @var{type}
10042 Start a REPL of the given @var{TYPE}, which can be one of the following:
10043
10044 @table @code
10045 @item guile
10046 This is default, and it spawns a standard full-featured Guile REPL.
10047 @item machine
10048 Spawn a REPL that uses the machine-readable protocol. This is the protocol
10049 that the @code{(guix inferior)} module speaks.
10050 @end table
10051
10052 @item --listen=@var{endpoint}
10053 By default, @command{guix repl} reads from standard input and writes to
10054 standard output. When this option is passed, it will instead listen for
10055 connections on @var{endpoint}. Here are examples of valid options:
10056
10057 @table @code
10058 @item --listen=tcp:37146
10059 Accept connections on localhost on port 37146.
10060
10061 @item --listen=unix:/tmp/socket
10062 Accept connections on the Unix-domain socket @file{/tmp/socket}.
10063 @end table
10064
10065 @item --load-path=@var{directory}
10066 @itemx -L @var{directory}
10067 Add @var{directory} to the front of the package module search path
10068 (@pxref{Package Modules}).
10069
10070 This allows users to define their own packages and make them visible to
10071 the script or REPL.
10072
10073 @item -q
10074 Inhibit loading of the @file{~/.guile} file. By default, that
10075 configuration file is loaded when spawning a @code{guile} REPL.
10076 @end table
10077
10078 @c *********************************************************************
10079 @node Utilities
10080 @chapter Utilities
10081
10082 This section describes Guix command-line utilities. Some of them are
10083 primarily targeted at developers and users who write new package
10084 definitions, while others are more generally useful. They complement
10085 the Scheme programming interface of Guix in a convenient way.
10086
10087 @menu
10088 * Invoking guix build:: Building packages from the command line.
10089 * Invoking guix edit:: Editing package definitions.
10090 * Invoking guix download:: Downloading a file and printing its hash.
10091 * Invoking guix hash:: Computing the cryptographic hash of a file.
10092 * Invoking guix import:: Importing package definitions.
10093 * Invoking guix refresh:: Updating package definitions.
10094 * Invoking guix lint:: Finding errors in package definitions.
10095 * Invoking guix size:: Profiling disk usage.
10096 * Invoking guix graph:: Visualizing the graph of packages.
10097 * Invoking guix publish:: Sharing substitutes.
10098 * Invoking guix challenge:: Challenging substitute servers.
10099 * Invoking guix copy:: Copying to and from a remote store.
10100 * Invoking guix container:: Process isolation.
10101 * Invoking guix weather:: Assessing substitute availability.
10102 * Invoking guix processes:: Listing client processes.
10103 @end menu
10104
10105 @node Invoking guix build
10106 @section Invoking @command{guix build}
10107
10108 @cindex package building
10109 @cindex @command{guix build}
10110 The @command{guix build} command builds packages or derivations and
10111 their dependencies, and prints the resulting store paths. Note that it
10112 does not modify the user's profile---this is the job of the
10113 @command{guix package} command (@pxref{Invoking guix package}). Thus,
10114 it is mainly useful for distribution developers.
10115
10116 The general syntax is:
10117
10118 @example
10119 guix build @var{options} @var{package-or-derivation}@dots{}
10120 @end example
10121
10122 As an example, the following command builds the latest versions of Emacs
10123 and of Guile, displays their build logs, and finally displays the
10124 resulting directories:
10125
10126 @example
10127 guix build emacs guile
10128 @end example
10129
10130 Similarly, the following command builds all the available packages:
10131
10132 @example
10133 guix build --quiet --keep-going \
10134 $(guix package -A | cut -f1,2 --output-delimiter=@@)
10135 @end example
10136
10137 @var{package-or-derivation} may be either the name of a package found in
10138 the software distribution such as @code{coreutils} or
10139 @code{coreutils@@8.20}, or a derivation such as
10140 @file{/gnu/store/@dots{}-coreutils-8.19.drv}. In the former case, a
10141 package with the corresponding name (and optionally version) is searched
10142 for among the GNU distribution modules (@pxref{Package Modules}).
10143
10144 Alternatively, the @option{--expression} option may be used to specify a
10145 Scheme expression that evaluates to a package; this is useful when
10146 disambiguating among several same-named packages or package variants is
10147 needed.
10148
10149 There may be zero or more @var{options}. The available options are
10150 described in the subsections below.
10151
10152 @menu
10153 * Common Build Options:: Build options for most commands.
10154 * Package Transformation Options:: Creating variants of packages.
10155 * Additional Build Options:: Options specific to 'guix build'.
10156 * Debugging Build Failures:: Real life packaging experience.
10157 @end menu
10158
10159 @node Common Build Options
10160 @subsection Common Build Options
10161
10162 A number of options that control the build process are common to
10163 @command{guix build} and other commands that can spawn builds, such as
10164 @command{guix package} or @command{guix archive}. These are the
10165 following:
10166
10167 @table @code
10168
10169 @item --load-path=@var{directory}
10170 @itemx -L @var{directory}
10171 Add @var{directory} to the front of the package module search path
10172 (@pxref{Package Modules}).
10173
10174 This allows users to define their own packages and make them visible to
10175 the command-line tools.
10176
10177 @item --keep-failed
10178 @itemx -K
10179 Keep the build tree of failed builds. Thus, if a build fails, its build
10180 tree is kept under @file{/tmp}, in a directory whose name is shown at
10181 the end of the build log. This is useful when debugging build issues.
10182 @xref{Debugging Build Failures}, for tips and tricks on how to debug
10183 build issues.
10184
10185 This option implies @option{--no-offload}, and it has no effect when
10186 connecting to a remote daemon with a @code{guix://} URI (@pxref{The
10187 Store, the @env{GUIX_DAEMON_SOCKET} variable}).
10188
10189 @item --keep-going
10190 @itemx -k
10191 Keep going when some of the derivations fail to build; return only once
10192 all the builds have either completed or failed.
10193
10194 The default behavior is to stop as soon as one of the specified
10195 derivations has failed.
10196
10197 @item --dry-run
10198 @itemx -n
10199 Do not build the derivations.
10200
10201 @anchor{fallback-option}
10202 @item --fallback
10203 When substituting a pre-built binary fails, fall back to building
10204 packages locally (@pxref{Substitution Failure}).
10205
10206 @item --substitute-urls=@var{urls}
10207 @anchor{client-substitute-urls}
10208 Consider @var{urls} the whitespace-separated list of substitute source
10209 URLs, overriding the default list of URLs of @command{guix-daemon}
10210 (@pxref{daemon-substitute-urls,, @command{guix-daemon} URLs}).
10211
10212 This means that substitutes may be downloaded from @var{urls}, provided
10213 they are signed by a key authorized by the system administrator
10214 (@pxref{Substitutes}).
10215
10216 When @var{urls} is the empty string, substitutes are effectively
10217 disabled.
10218
10219 @item --no-substitutes
10220 Do not use substitutes for build products. That is, always build things
10221 locally instead of allowing downloads of pre-built binaries
10222 (@pxref{Substitutes}).
10223
10224 @item --no-grafts
10225 Do not ``graft'' packages. In practice, this means that package updates
10226 available as grafts are not applied. @xref{Security Updates}, for more
10227 information on grafts.
10228
10229 @item --rounds=@var{n}
10230 Build each derivation @var{n} times in a row, and raise an error if
10231 consecutive build results are not bit-for-bit identical.
10232
10233 This is a useful way to detect non-deterministic builds processes.
10234 Non-deterministic build processes are a problem because they make it
10235 practically impossible for users to @emph{verify} whether third-party
10236 binaries are genuine. @xref{Invoking guix challenge}, for more.
10237
10238 When used in conjunction with @option{--keep-failed}, the differing
10239 output is kept in the store, under @file{/gnu/store/@dots{}-check}.
10240 This makes it easy to look for differences between the two results.
10241
10242 @item --no-offload
10243 Do not use offload builds to other machines (@pxref{Daemon Offload
10244 Setup}). That is, always build things locally instead of offloading
10245 builds to remote machines.
10246
10247 @item --max-silent-time=@var{seconds}
10248 When the build or substitution process remains silent for more than
10249 @var{seconds}, terminate it and report a build failure.
10250
10251 By default, the daemon's setting is honored (@pxref{Invoking
10252 guix-daemon, @option{--max-silent-time}}).
10253
10254 @item --timeout=@var{seconds}
10255 Likewise, when the build or substitution process lasts for more than
10256 @var{seconds}, terminate it and report a build failure.
10257
10258 By default, the daemon's setting is honored (@pxref{Invoking
10259 guix-daemon, @option{--timeout}}).
10260
10261 @c Note: This option is actually not part of %standard-build-options but
10262 @c most programs honor it.
10263 @cindex verbosity, of the command-line tools
10264 @cindex build logs, verbosity
10265 @item -v @var{level}
10266 @itemx --verbosity=@var{level}
10267 Use the given verbosity @var{level}, an integer. Choosing 0 means that
10268 no output is produced, 1 is for quiet output; 2 is similar to 1 but it
10269 additionally displays download URLs; 3 shows all the build log output on
10270 standard error.
10271
10272 @item --cores=@var{n}
10273 @itemx -c @var{n}
10274 Allow the use of up to @var{n} CPU cores for the build. The special
10275 value @code{0} means to use as many CPU cores as available.
10276
10277 @item --max-jobs=@var{n}
10278 @itemx -M @var{n}
10279 Allow at most @var{n} build jobs in parallel. @xref{Invoking
10280 guix-daemon, @option{--max-jobs}}, for details about this option and the
10281 equivalent @command{guix-daemon} option.
10282
10283 @item --debug=@var{level}
10284 Produce debugging output coming from the build daemon. @var{level} must be an
10285 integer between 0 and 5; higher means more verbose output. Setting a level of
10286 4 or more may be helpful when debugging setup issues with the build daemon.
10287
10288 @end table
10289
10290 Behind the scenes, @command{guix build} is essentially an interface to
10291 the @code{package-derivation} procedure of the @code{(guix packages)}
10292 module, and to the @code{build-derivations} procedure of the @code{(guix
10293 derivations)} module.
10294
10295 In addition to options explicitly passed on the command line,
10296 @command{guix build} and other @command{guix} commands that support
10297 building honor the @env{GUIX_BUILD_OPTIONS} environment variable.
10298
10299 @defvr {Environment Variable} GUIX_BUILD_OPTIONS
10300 Users can define this variable to a list of command line options that
10301 will automatically be used by @command{guix build} and other
10302 @command{guix} commands that can perform builds, as in the example
10303 below:
10304
10305 @example
10306 $ export GUIX_BUILD_OPTIONS="--no-substitutes -c 2 -L /foo/bar"
10307 @end example
10308
10309 These options are parsed independently, and the result is appended to
10310 the parsed command-line options.
10311 @end defvr
10312
10313
10314 @node Package Transformation Options
10315 @subsection Package Transformation Options
10316
10317 @cindex package variants
10318 Another set of command-line options supported by @command{guix build}
10319 and also @command{guix package} are @dfn{package transformation
10320 options}. These are options that make it possible to define @dfn{package
10321 variants}---for instance, packages built from different source code.
10322 This is a convenient way to create customized packages on the fly
10323 without having to type in the definitions of package variants
10324 (@pxref{Defining Packages}).
10325
10326 Package transformation options are preserved across upgrades:
10327 @command{guix upgrade} attempts to apply transformation options
10328 initially used when creating the profile to the upgraded packages.
10329
10330 The available options are listed below. Most commands support them and
10331 also support a @option{--help-transform} option that lists all the
10332 available options and a synopsis (these options are not shown in the
10333 @option{--help} output for brevity).
10334
10335 @table @code
10336
10337 @item --with-source=@var{source}
10338 @itemx --with-source=@var{package}=@var{source}
10339 @itemx --with-source=@var{package}@@@var{version}=@var{source}
10340 Use @var{source} as the source of @var{package}, and @var{version} as
10341 its version number.
10342 @var{source} must be a file name or a URL, as for @command{guix
10343 download} (@pxref{Invoking guix download}).
10344
10345 When @var{package} is omitted,
10346 it is taken to be the package name specified on the
10347 command line that matches the base of @var{source}---e.g.,
10348 if @var{source} is @code{/src/guile-2.0.10.tar.gz}, the corresponding
10349 package is @code{guile}.
10350
10351 Likewise, when @var{version} is omitted, the version string is inferred from
10352 @var{source}; in the previous example, it is @code{2.0.10}.
10353
10354 This option allows users to try out versions of packages other than the
10355 one provided by the distribution. The example below downloads
10356 @file{ed-1.7.tar.gz} from a GNU mirror and uses that as the source for
10357 the @code{ed} package:
10358
10359 @example
10360 guix build ed --with-source=mirror://gnu/ed/ed-1.7.tar.gz
10361 @end example
10362
10363 As a developer, @option{--with-source} makes it easy to test release
10364 candidates:
10365
10366 @example
10367 guix build guile --with-source=../guile-2.0.9.219-e1bb7.tar.xz
10368 @end example
10369
10370 @dots{} or to build from a checkout in a pristine environment:
10371
10372 @example
10373 $ git clone git://git.sv.gnu.org/guix.git
10374 $ guix build guix --with-source=guix@@1.0=./guix
10375 @end example
10376
10377 @item --with-input=@var{package}=@var{replacement}
10378 Replace dependency on @var{package} by a dependency on
10379 @var{replacement}. @var{package} must be a package name, and
10380 @var{replacement} must be a package specification such as @code{guile}
10381 or @code{guile@@1.8}.
10382
10383 For instance, the following command builds Guix, but replaces its
10384 dependency on the current stable version of Guile with a dependency on
10385 the legacy version of Guile, @code{guile@@2.0}:
10386
10387 @example
10388 guix build --with-input=guile=guile@@2.0 guix
10389 @end example
10390
10391 This is a recursive, deep replacement. So in this example, both
10392 @code{guix} and its dependency @code{guile-json} (which also depends on
10393 @code{guile}) get rebuilt against @code{guile@@2.0}.
10394
10395 This is implemented using the @code{package-input-rewriting} Scheme
10396 procedure (@pxref{Defining Packages, @code{package-input-rewriting}}).
10397
10398 @item --with-graft=@var{package}=@var{replacement}
10399 This is similar to @option{--with-input} but with an important difference:
10400 instead of rebuilding the whole dependency chain, @var{replacement} is
10401 built and then @dfn{grafted} onto the binaries that were initially
10402 referring to @var{package}. @xref{Security Updates}, for more
10403 information on grafts.
10404
10405 For example, the command below grafts version 3.5.4 of GnuTLS onto Wget
10406 and all its dependencies, replacing references to the version of GnuTLS
10407 they currently refer to:
10408
10409 @example
10410 guix build --with-graft=gnutls=gnutls@@3.5.4 wget
10411 @end example
10412
10413 This has the advantage of being much faster than rebuilding everything.
10414 But there is a caveat: it works if and only if @var{package} and
10415 @var{replacement} are strictly compatible---for example, if they provide
10416 a library, the application binary interface (ABI) of those libraries
10417 must be compatible. If @var{replacement} is somehow incompatible with
10418 @var{package}, then the resulting package may be unusable. Use with
10419 care!
10420
10421 @cindex debugging info, rebuilding
10422 @item --with-debug-info=@var{package}
10423 Build @var{package} in a way that preserves its debugging info and graft
10424 it onto packages that depend on it. This is useful if @var{package}
10425 does not already provide debugging info as a @code{debug} output
10426 (@pxref{Installing Debugging Files}).
10427
10428 For example, suppose you're experiencing a crash in Inkscape and would
10429 like to see what's up in GLib, a library deep down in Inkscape's
10430 dependency graph. GLib lacks a @code{debug} output, so debugging is
10431 tough. Fortunately, you rebuild GLib with debugging info and tack it on
10432 Inkscape:
10433
10434 @example
10435 guix install inkscape --with-debug-info=glib
10436 @end example
10437
10438 Only GLib needs to be recompiled so this takes a reasonable amount of
10439 time. @xref{Installing Debugging Files}, for more info.
10440
10441 @quotation Note
10442 Under the hood, this option works by passing the @samp{#:strip-binaries?
10443 #f} to the build system of the package of interest (@pxref{Build
10444 Systems}). Most build systems support that option but some do not. In
10445 that case, an error is raised.
10446
10447 Likewise, if a C/C++ package is built without @code{-g} (which is rarely
10448 the case), debugging info will remain unavailable even when
10449 @code{#:strip-binaries?} is false.
10450 @end quotation
10451
10452 @cindex tool chain, changing the build tool chain of a package
10453 @item --with-c-toolchain=@var{package}=@var{toolchain}
10454 This option changes the compilation of @var{package} and everything that
10455 depends on it so that they get built with @var{toolchain} instead of the
10456 default GNU tool chain for C/C++.
10457
10458 Consider this example:
10459
10460 @example
10461 guix build octave-cli \
10462 --with-c-toolchain=fftw=gcc-toolchain@@10 \
10463 --with-c-toolchain=fftwf=gcc-toolchain@@10
10464 @end example
10465
10466 The command above builds a variant of the @code{fftw} and @code{fftwf}
10467 packages using version 10 of @code{gcc-toolchain} instead of the default
10468 tool chain, and then builds a variant of the GNU@tie{}Octave
10469 command-line interface using them. GNU@tie{}Octave itself is also built
10470 with @code{gcc-toolchain@@10}.
10471
10472 This other example builds the Hardware Locality (@code{hwloc}) library
10473 and its dependents up to @code{intel-mpi-benchmarks} with the Clang C
10474 compiler:
10475
10476 @example
10477 guix build --with-c-toolchain=hwloc=clang-toolchain \
10478 intel-mpi-benchmarks
10479 @end example
10480
10481 @quotation Note
10482 There can be application binary interface (ABI) incompatibilities among
10483 tool chains. This is particularly true of the C++ standard library and
10484 run-time support libraries such as that of OpenMP@. By rebuilding all
10485 dependents with the same tool chain, @option{--with-c-toolchain} minimizes
10486 the risks of incompatibility but cannot entirely eliminate them. Choose
10487 @var{package} wisely.
10488 @end quotation
10489
10490 @item --with-git-url=@var{package}=@var{url}
10491 @cindex Git, using the latest commit
10492 @cindex latest commit, building
10493 Build @var{package} from the latest commit of the @code{master} branch of the
10494 Git repository at @var{url}. Git sub-modules of the repository are fetched,
10495 recursively.
10496
10497 For example, the following command builds the NumPy Python library against the
10498 latest commit of the master branch of Python itself:
10499
10500 @example
10501 guix build python-numpy \
10502 --with-git-url=python=https://github.com/python/cpython
10503 @end example
10504
10505 This option can also be combined with @option{--with-branch} or
10506 @option{--with-commit} (see below).
10507
10508 @cindex continuous integration
10509 Obviously, since it uses the latest commit of the given branch, the result of
10510 such a command varies over time. Nevertheless it is a convenient way to
10511 rebuild entire software stacks against the latest commit of one or more
10512 packages. This is particularly useful in the context of continuous
10513 integration (CI).
10514
10515 Checkouts are kept in a cache under @file{~/.cache/guix/checkouts} to speed up
10516 consecutive accesses to the same repository. You may want to clean it up once
10517 in a while to save disk space.
10518
10519 @item --with-branch=@var{package}=@var{branch}
10520 Build @var{package} from the latest commit of @var{branch}. If the
10521 @code{source} field of @var{package} is an origin with the @code{git-fetch}
10522 method (@pxref{origin Reference}) or a @code{git-checkout} object, the
10523 repository URL is taken from that @code{source}. Otherwise you have to use
10524 @option{--with-git-url} to specify the URL of the Git repository.
10525
10526 For instance, the following command builds @code{guile-sqlite3} from the
10527 latest commit of its @code{master} branch, and then builds @code{guix} (which
10528 depends on it) and @code{cuirass} (which depends on @code{guix}) against this
10529 specific @code{guile-sqlite3} build:
10530
10531 @example
10532 guix build --with-branch=guile-sqlite3=master cuirass
10533 @end example
10534
10535 @item --with-commit=@var{package}=@var{commit}
10536 This is similar to @option{--with-branch}, except that it builds from
10537 @var{commit} rather than the tip of a branch. @var{commit} must be a valid
10538 Git commit SHA1 identifier or a tag.
10539
10540 @item --with-patch=@var{package}=@var{file}
10541 Add @var{file} to the list of patches applied to @var{package}, where
10542 @var{package} is a spec such as @code{python@@3.8} or @code{glibc}.
10543 @var{file} must contain a patch; it is applied with the flags specified
10544 in the @code{origin} of @var{package} (@pxref{origin Reference}), which
10545 by default includes @code{-p1} (@pxref{patch Directories,,, diffutils,
10546 Comparing and Merging Files}).
10547
10548 As an example, the command below rebuilds Coreutils with the GNU C
10549 Library (glibc) patched with the given patch:
10550
10551 @example
10552 guix build coreutils --with-patch=glibc=./glibc-frob.patch
10553 @end example
10554
10555 In this example, glibc itself as well as everything that leads to
10556 Coreutils in the dependency graph is rebuilt.
10557
10558 @cindex upstream, latest version
10559 @item --with-latest=@var{package}
10560 So you like living on the bleeding edge? This option is for you! It
10561 replaces occurrences of @var{package} in the dependency graph with its
10562 latest upstream version, as reported by @command{guix refresh}
10563 (@pxref{Invoking guix refresh}).
10564
10565 It does so by determining the latest upstream release of @var{package}
10566 (if possible), downloading it, and authenticating it @emph{if} it comes
10567 with an OpenPGP signature.
10568
10569 As an example, the command below builds Guix against the latest version
10570 of Guile-JSON:
10571
10572 @example
10573 guix build guix --with-latest=guile-json
10574 @end example
10575
10576 There are limitations. First, in cases where the tool cannot or does
10577 not know how to authenticate source code, you are at risk of running
10578 malicious code; a warning is emitted in this case. Second, this option
10579 simply changes the source used in the existing package definitions,
10580 which is not always sufficient: there might be additional dependencies
10581 that need to be added, patches to apply, and more generally the quality
10582 assurance work that Guix developers normally do will be missing.
10583
10584 You've been warned! In all the other cases, it's a snappy way to stay
10585 on top. We encourage you to submit patches updating the actual package
10586 definitions once you have successfully tested an upgrade
10587 (@pxref{Contributing}).
10588
10589 @cindex test suite, skipping
10590 @item --without-tests=@var{package}
10591 Build @var{package} without running its tests. This can be useful in
10592 situations where you want to skip the lengthy test suite of a
10593 intermediate package, or if a package's test suite fails in a
10594 non-deterministic fashion. It should be used with care because running
10595 the test suite is a good way to ensure a package is working as intended.
10596
10597 Turning off tests leads to a different store item. Consequently, when
10598 using this option, anything that depends on @var{package} must be
10599 rebuilt, as in this example:
10600
10601 @example
10602 guix install --without-tests=python python-notebook
10603 @end example
10604
10605 The command above installs @code{python-notebook} on top of
10606 @code{python} built without running its test suite. To do so, it also
10607 rebuilds everything that depends on @code{python}, including
10608 @code{python-notebook} itself.
10609
10610 Internally, @option{--without-tests} relies on changing the
10611 @code{#:tests?} option of a package's @code{check} phase (@pxref{Build
10612 Systems}). Note that some packages use a customized @code{check} phase
10613 that does not respect a @code{#:tests? #f} setting. Therefore,
10614 @option{--without-tests} has no effect on these packages.
10615
10616 @end table
10617
10618 Wondering how to achieve the same effect using Scheme code, for example
10619 in your manifest, or how to write your own package transformation?
10620 @xref{Defining Package Variants}, for an overview of the programming
10621 interfaces available.
10622
10623 @node Additional Build Options
10624 @subsection Additional Build Options
10625
10626 The command-line options presented below are specific to @command{guix
10627 build}.
10628
10629 @table @code
10630
10631 @item --quiet
10632 @itemx -q
10633 Build quietly, without displaying the build log; this is equivalent to
10634 @option{--verbosity=0}. Upon completion, the build log is kept in @file{/var}
10635 (or similar) and can always be retrieved using the @option{--log-file} option.
10636
10637 @item --file=@var{file}
10638 @itemx -f @var{file}
10639 Build the package, derivation, or other file-like object that the code within
10640 @var{file} evaluates to (@pxref{G-Expressions, file-like objects}).
10641
10642 As an example, @var{file} might contain a package definition like this
10643 (@pxref{Defining Packages}):
10644
10645 @lisp
10646 @include package-hello.scm
10647 @end lisp
10648
10649 The @var{file} may also contain a JSON representation of one or more
10650 package definitions. Running @code{guix build -f} on @file{hello.json}
10651 with the following contents would result in building the packages
10652 @code{myhello} and @code{greeter}:
10653
10654 @example
10655 @verbatiminclude package-hello.json
10656 @end example
10657
10658 @item --manifest=@var{manifest}
10659 @itemx -m @var{manifest}
10660 Build all packages listed in the given @var{manifest}
10661 (@pxref{profile-manifest, @option{--manifest}}).
10662
10663 @item --expression=@var{expr}
10664 @itemx -e @var{expr}
10665 Build the package or derivation @var{expr} evaluates to.
10666
10667 For example, @var{expr} may be @code{(@@ (gnu packages guile)
10668 guile-1.8)}, which unambiguously designates this specific variant of
10669 version 1.8 of Guile.
10670
10671 Alternatively, @var{expr} may be a G-expression, in which case it is used
10672 as a build program passed to @code{gexp->derivation}
10673 (@pxref{G-Expressions}).
10674
10675 Lastly, @var{expr} may refer to a zero-argument monadic procedure
10676 (@pxref{The Store Monad}). The procedure must return a derivation as a
10677 monadic value, which is then passed through @code{run-with-store}.
10678
10679 @item --source
10680 @itemx -S
10681 Build the source derivations of the packages, rather than the packages
10682 themselves.
10683
10684 For instance, @code{guix build -S gcc} returns something like
10685 @file{/gnu/store/@dots{}-gcc-4.7.2.tar.bz2}, which is the GCC
10686 source tarball.
10687
10688 The returned source tarball is the result of applying any patches and
10689 code snippets specified in the package @code{origin} (@pxref{Defining
10690 Packages}).
10691
10692 @cindex source, verification
10693 As with other derivations, the result of building a source derivation
10694 can be verified using the @option{--check} option (@pxref{build-check}).
10695 This is useful to validate that a (potentially already built or
10696 substituted, thus cached) package source matches against its declared
10697 hash.
10698
10699 Note that @command{guix build -S} compiles the sources only of the
10700 specified packages. They do not include the sources of statically
10701 linked dependencies and by themselves are insufficient for reproducing
10702 the packages.
10703
10704 @item --sources
10705 Fetch and return the source of @var{package-or-derivation} and all their
10706 dependencies, recursively. This is a handy way to obtain a local copy
10707 of all the source code needed to build @var{packages}, allowing you to
10708 eventually build them even without network access. It is an extension
10709 of the @option{--source} option and can accept one of the following
10710 optional argument values:
10711
10712 @table @code
10713 @item package
10714 This value causes the @option{--sources} option to behave in the same way
10715 as the @option{--source} option.
10716
10717 @item all
10718 Build the source derivations of all packages, including any source that
10719 might be listed as @code{inputs}. This is the default value.
10720
10721 @example
10722 $ guix build --sources tzdata
10723 The following derivations will be built:
10724 /gnu/store/@dots{}-tzdata2015b.tar.gz.drv
10725 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
10726 @end example
10727
10728 @item transitive
10729 Build the source derivations of all packages, as well of all transitive
10730 inputs to the packages. This can be used e.g.@: to
10731 prefetch package source for later offline building.
10732
10733 @example
10734 $ guix build --sources=transitive tzdata
10735 The following derivations will be built:
10736 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
10737 /gnu/store/@dots{}-findutils-4.4.2.tar.xz.drv
10738 /gnu/store/@dots{}-grep-2.21.tar.xz.drv
10739 /gnu/store/@dots{}-coreutils-8.23.tar.xz.drv
10740 /gnu/store/@dots{}-make-4.1.tar.xz.drv
10741 /gnu/store/@dots{}-bash-4.3.tar.xz.drv
10742 @dots{}
10743 @end example
10744
10745 @end table
10746
10747 @item --system=@var{system}
10748 @itemx -s @var{system}
10749 Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of
10750 the system type of the build host. The @command{guix build} command allows
10751 you to repeat this option several times, in which case it builds for all the
10752 specified systems; other commands ignore extraneous @option{-s} options.
10753
10754 @quotation Note
10755 The @option{--system} flag is for @emph{native} compilation and must not
10756 be confused with cross-compilation. See @option{--target} below for
10757 information on cross-compilation.
10758 @end quotation
10759
10760 An example use of this is on Linux-based systems, which can emulate
10761 different personalities. For instance, passing
10762 @option{--system=i686-linux} on an @code{x86_64-linux} system or
10763 @option{--system=armhf-linux} on an @code{aarch64-linux} system allows
10764 you to build packages in a complete 32-bit environment.
10765
10766 @quotation Note
10767 Building for an @code{armhf-linux} system is unconditionally enabled on
10768 @code{aarch64-linux} machines, although certain aarch64 chipsets do not
10769 allow for this functionality, notably the ThunderX.
10770 @end quotation
10771
10772 Similarly, when transparent emulation with QEMU and @code{binfmt_misc}
10773 is enabled (@pxref{Virtualization Services,
10774 @code{qemu-binfmt-service-type}}), you can build for any system for
10775 which a QEMU @code{binfmt_misc} handler is installed.
10776
10777 Builds for a system other than that of the machine you are using can
10778 also be offloaded to a remote machine of the right architecture.
10779 @xref{Daemon Offload Setup}, for more information on offloading.
10780
10781 @item --target=@var{triplet}
10782 @cindex cross-compilation
10783 Cross-build for @var{triplet}, which must be a valid GNU triplet, such
10784 as @code{"aarch64-linux-gnu"} (@pxref{Specifying Target Triplets, GNU
10785 configuration triplets,, autoconf, Autoconf}).
10786
10787 @anchor{build-check}
10788 @item --check
10789 @cindex determinism, checking
10790 @cindex reproducibility, checking
10791 Rebuild @var{package-or-derivation}, which are already available in the
10792 store, and raise an error if the build results are not bit-for-bit
10793 identical.
10794
10795 This mechanism allows you to check whether previously installed
10796 substitutes are genuine (@pxref{Substitutes}), or whether the build result
10797 of a package is deterministic. @xref{Invoking guix challenge}, for more
10798 background information and tools.
10799
10800 When used in conjunction with @option{--keep-failed}, the differing
10801 output is kept in the store, under @file{/gnu/store/@dots{}-check}.
10802 This makes it easy to look for differences between the two results.
10803
10804 @item --repair
10805 @cindex repairing store items
10806 @cindex corruption, recovering from
10807 Attempt to repair the specified store items, if they are corrupt, by
10808 re-downloading or rebuilding them.
10809
10810 This operation is not atomic and thus restricted to @code{root}.
10811
10812 @item --derivations
10813 @itemx -d
10814 Return the derivation paths, not the output paths, of the given
10815 packages.
10816
10817 @item --root=@var{file}
10818 @itemx -r @var{file}
10819 @cindex GC roots, adding
10820 @cindex garbage collector roots, adding
10821 Make @var{file} a symlink to the result, and register it as a garbage
10822 collector root.
10823
10824 Consequently, the results of this @command{guix build} invocation are
10825 protected from garbage collection until @var{file} is removed. When
10826 that option is omitted, build results are eligible for garbage
10827 collection as soon as the build completes. @xref{Invoking guix gc}, for
10828 more on GC roots.
10829
10830 @item --log-file
10831 @cindex build logs, access
10832 Return the build log file names or URLs for the given
10833 @var{package-or-derivation}, or raise an error if build logs are
10834 missing.
10835
10836 This works regardless of how packages or derivations are specified. For
10837 instance, the following invocations are equivalent:
10838
10839 @example
10840 guix build --log-file $(guix build -d guile)
10841 guix build --log-file $(guix build guile)
10842 guix build --log-file guile
10843 guix build --log-file -e '(@@ (gnu packages guile) guile-2.0)'
10844 @end example
10845
10846 If a log is unavailable locally, and unless @option{--no-substitutes} is
10847 passed, the command looks for a corresponding log on one of the
10848 substitute servers (as specified with @option{--substitute-urls}).
10849
10850 So for instance, imagine you want to see the build log of GDB on MIPS,
10851 but you are actually on an @code{x86_64} machine:
10852
10853 @example
10854 $ guix build --log-file gdb -s aarch64-linux
10855 https://@value{SUBSTITUTE-SERVER}/log/@dots{}-gdb-7.10
10856 @end example
10857
10858 You can freely access a huge library of build logs!
10859 @end table
10860
10861 @node Debugging Build Failures
10862 @subsection Debugging Build Failures
10863
10864 @cindex build failures, debugging
10865 When defining a new package (@pxref{Defining Packages}), you will
10866 probably find yourself spending some time debugging and tweaking the
10867 build until it succeeds. To do that, you need to operate the build
10868 commands yourself in an environment as close as possible to the one the
10869 build daemon uses.
10870
10871 To that end, the first thing to do is to use the @option{--keep-failed}
10872 or @option{-K} option of @command{guix build}, which will keep the
10873 failed build tree in @file{/tmp} or whatever directory you specified as
10874 @env{TMPDIR} (@pxref{Common Build Options, @option{--keep-failed}}).
10875
10876 From there on, you can @command{cd} to the failed build tree and source
10877 the @file{environment-variables} file, which contains all the
10878 environment variable definitions that were in place when the build
10879 failed. So let's say you're debugging a build failure in package
10880 @code{foo}; a typical session would look like this:
10881
10882 @example
10883 $ guix build foo -K
10884 @dots{} @i{build fails}
10885 $ cd /tmp/guix-build-foo.drv-0
10886 $ source ./environment-variables
10887 $ cd foo-1.2
10888 @end example
10889
10890 Now, you can invoke commands as if you were the daemon (almost) and
10891 troubleshoot your build process.
10892
10893 Sometimes it happens that, for example, a package's tests pass when you
10894 run them manually but they fail when the daemon runs them. This can
10895 happen because the daemon runs builds in containers where, unlike in our
10896 environment above, network access is missing, @file{/bin/sh} does not
10897 exist, etc. (@pxref{Build Environment Setup}).
10898
10899 In such cases, you may need to run inspect the build process from within
10900 a container similar to the one the build daemon creates:
10901
10902 @example
10903 $ guix build -K foo
10904 @dots{}
10905 $ cd /tmp/guix-build-foo.drv-0
10906 $ guix environment --no-grafts -C foo --ad-hoc strace gdb
10907 [env]# source ./environment-variables
10908 [env]# cd foo-1.2
10909 @end example
10910
10911 Here, @command{guix environment -C} creates a container and spawns a new
10912 shell in it (@pxref{Invoking guix environment}). The @command{--ad-hoc
10913 strace gdb} part adds the @command{strace} and @command{gdb} commands to
10914 the container, which you may find handy while debugging. The
10915 @option{--no-grafts} option makes sure we get the exact same
10916 environment, with ungrafted packages (@pxref{Security Updates}, for more
10917 info on grafts).
10918
10919 To get closer to a container like that used by the build daemon, we can
10920 remove @file{/bin/sh}:
10921
10922 @example
10923 [env]# rm /bin/sh
10924 @end example
10925
10926 (Don't worry, this is harmless: this is all happening in the throw-away
10927 container created by @command{guix environment}.)
10928
10929 The @command{strace} command is probably not in the search path, but we
10930 can run:
10931
10932 @example
10933 [env]# $GUIX_ENVIRONMENT/bin/strace -f -o log make check
10934 @end example
10935
10936 In this way, not only you will have reproduced the environment variables
10937 the daemon uses, you will also be running the build process in a container
10938 similar to the one the daemon uses.
10939
10940
10941 @node Invoking guix edit
10942 @section Invoking @command{guix edit}
10943
10944 @cindex @command{guix edit}
10945 @cindex package definition, editing
10946 So many packages, so many source files! The @command{guix edit} command
10947 facilitates the life of users and packagers by pointing their editor at
10948 the source file containing the definition of the specified packages.
10949 For instance:
10950
10951 @example
10952 guix edit gcc@@4.9 vim
10953 @end example
10954
10955 @noindent
10956 launches the program specified in the @env{VISUAL} or in the
10957 @env{EDITOR} environment variable to view the recipe of GCC@tie{}4.9.3
10958 and that of Vim.
10959
10960 If you are using a Guix Git checkout (@pxref{Building from Git}), or
10961 have created your own packages on @env{GUIX_PACKAGE_PATH}
10962 (@pxref{Package Modules}), you will be able to edit the package
10963 recipes. In other cases, you will be able to examine the read-only recipes
10964 for packages currently in the store.
10965
10966 Instead of @env{GUIX_PACKAGE_PATH}, the command-line option
10967 @option{--load-path=@var{directory}} (or in short @option{-L
10968 @var{directory}}) allows you to add @var{directory} to the front of the
10969 package module search path and so make your own packages visible.
10970
10971 @node Invoking guix download
10972 @section Invoking @command{guix download}
10973
10974 @cindex @command{guix download}
10975 @cindex downloading package sources
10976 When writing a package definition, developers typically need to download
10977 a source tarball, compute its SHA256 hash, and write that
10978 hash in the package definition (@pxref{Defining Packages}). The
10979 @command{guix download} tool helps with this task: it downloads a file
10980 from the given URI, adds it to the store, and prints both its file name
10981 in the store and its SHA256 hash.
10982
10983 The fact that the downloaded file is added to the store saves bandwidth:
10984 when the developer eventually tries to build the newly defined package
10985 with @command{guix build}, the source tarball will not have to be
10986 downloaded again because it is already in the store. It is also a
10987 convenient way to temporarily stash files, which may be deleted
10988 eventually (@pxref{Invoking guix gc}).
10989
10990 The @command{guix download} command supports the same URIs as used in
10991 package definitions. In particular, it supports @code{mirror://} URIs.
10992 @code{https} URIs (HTTP over TLS) are supported @emph{provided} the
10993 Guile bindings for GnuTLS are available in the user's environment; when
10994 they are not available, an error is raised. @xref{Guile Preparations,
10995 how to install the GnuTLS bindings for Guile,, gnutls-guile,
10996 GnuTLS-Guile}, for more information.
10997
10998 @command{guix download} verifies HTTPS server certificates by loading
10999 the certificates of X.509 authorities from the directory pointed to by
11000 the @env{SSL_CERT_DIR} environment variable (@pxref{X.509
11001 Certificates}), unless @option{--no-check-certificate} is used.
11002
11003 The following options are available:
11004
11005 @table @code
11006 @item --hash=@var{algorithm}
11007 @itemx -H @var{algorithm}
11008 Compute a hash using the specified @var{algorithm}. @xref{Invoking guix
11009 hash}, for more information.
11010
11011 @item --format=@var{fmt}
11012 @itemx -f @var{fmt}
11013 Write the hash in the format specified by @var{fmt}. For more
11014 information on the valid values for @var{fmt}, @pxref{Invoking guix hash}.
11015
11016 @item --no-check-certificate
11017 Do not validate the X.509 certificates of HTTPS servers.
11018
11019 When using this option, you have @emph{absolutely no guarantee} that you
11020 are communicating with the authentic server responsible for the given
11021 URL, which makes you vulnerable to ``man-in-the-middle'' attacks.
11022
11023 @item --output=@var{file}
11024 @itemx -o @var{file}
11025 Save the downloaded file to @var{file} instead of adding it to the
11026 store.
11027 @end table
11028
11029 @node Invoking guix hash
11030 @section Invoking @command{guix hash}
11031
11032 @cindex @command{guix hash}
11033 The @command{guix hash} command computes the hash of a file.
11034 It is primarily a convenience tool for anyone contributing to the
11035 distribution: it computes the cryptographic hash of a file, which can be
11036 used in the definition of a package (@pxref{Defining Packages}).
11037
11038 The general syntax is:
11039
11040 @example
11041 guix hash @var{option} @var{file}
11042 @end example
11043
11044 When @var{file} is @code{-} (a hyphen), @command{guix hash} computes the
11045 hash of data read from standard input. @command{guix hash} has the
11046 following options:
11047
11048 @table @code
11049
11050 @item --hash=@var{algorithm}
11051 @itemx -H @var{algorithm}
11052 Compute a hash using the specified @var{algorithm}, @code{sha256} by
11053 default.
11054
11055 @var{algorithm} must the name of a cryptographic hash algorithm
11056 supported by Libgcrypt @i{via} Guile-Gcrypt---e.g., @code{sha512} or
11057 @code{sha3-256} (@pxref{Hash Functions,,, guile-gcrypt, Guile-Gcrypt
11058 Reference Manual}).
11059
11060 @item --format=@var{fmt}
11061 @itemx -f @var{fmt}
11062 Write the hash in the format specified by @var{fmt}.
11063
11064 Supported formats: @code{base64}, @code{nix-base32}, @code{base32}, @code{base16}
11065 (@code{hex} and @code{hexadecimal} can be used as well).
11066
11067 If the @option{--format} option is not specified, @command{guix hash}
11068 will output the hash in @code{nix-base32}. This representation is used
11069 in the definitions of packages.
11070
11071 @item --recursive
11072 @itemx -r
11073 Compute the hash on @var{file} recursively.
11074
11075 In this case, the hash is computed on an archive containing @var{file},
11076 including its children if it is a directory. Some of the metadata of
11077 @var{file} is part of the archive; for instance, when @var{file} is a
11078 regular file, the hash is different depending on whether @var{file} is
11079 executable or not. Metadata such as time stamps has no impact on the
11080 hash (@pxref{Invoking guix archive}).
11081 @c FIXME: Replace xref above with xref to an ``Archive'' section when
11082 @c it exists.
11083
11084 @item --exclude-vcs
11085 @itemx -x
11086 When combined with @option{--recursive}, exclude version control system
11087 directories (@file{.bzr}, @file{.git}, @file{.hg}, etc.).
11088
11089 @vindex git-fetch
11090 As an example, here is how you would compute the hash of a Git checkout,
11091 which is useful when using the @code{git-fetch} method (@pxref{origin
11092 Reference}):
11093
11094 @example
11095 $ git clone http://example.org/foo.git
11096 $ cd foo
11097 $ guix hash -rx .
11098 @end example
11099 @end table
11100
11101 @node Invoking guix import
11102 @section Invoking @command{guix import}
11103
11104 @cindex importing packages
11105 @cindex package import
11106 @cindex package conversion
11107 @cindex Invoking @command{guix import}
11108 The @command{guix import} command is useful for people who would like to
11109 add a package to the distribution with as little work as
11110 possible---a legitimate demand. The command knows of a few
11111 repositories from which it can ``import'' package metadata. The result
11112 is a package definition, or a template thereof, in the format we know
11113 (@pxref{Defining Packages}).
11114
11115 The general syntax is:
11116
11117 @example
11118 guix import @var{importer} @var{options}@dots{}
11119 @end example
11120
11121 @var{importer} specifies the source from which to import package
11122 metadata, and @var{options} specifies a package identifier and other
11123 options specific to @var{importer}.
11124
11125 Some of the importers rely on the ability to run the @command{gpgv} command.
11126 For these, GnuPG must be installed and in @code{$PATH}; run @code{guix install
11127 gnupg} if needed.
11128
11129 Currently, the available ``importers'' are:
11130
11131 @table @code
11132 @item gnu
11133 Import metadata for the given GNU package. This provides a template
11134 for the latest version of that GNU package, including the hash of its
11135 source tarball, and its canonical synopsis and description.
11136
11137 Additional information such as the package dependencies and its
11138 license needs to be figured out manually.
11139
11140 For example, the following command returns a package definition for
11141 GNU@tie{}Hello:
11142
11143 @example
11144 guix import gnu hello
11145 @end example
11146
11147 Specific command-line options are:
11148
11149 @table @code
11150 @item --key-download=@var{policy}
11151 As for @command{guix refresh}, specify the policy to handle missing
11152 OpenPGP keys when verifying the package signature. @xref{Invoking guix
11153 refresh, @option{--key-download}}.
11154 @end table
11155
11156 @item pypi
11157 @cindex pypi
11158 Import metadata from the @uref{https://pypi.python.org/, Python Package
11159 Index}. Information is taken from the JSON-formatted description
11160 available at @code{pypi.python.org} and usually includes all the relevant
11161 information, including package dependencies. For maximum efficiency, it
11162 is recommended to install the @command{unzip} utility, so that the
11163 importer can unzip Python wheels and gather data from them.
11164
11165 The command below imports metadata for the @code{itsdangerous} Python
11166 package:
11167
11168 @example
11169 guix import pypi itsdangerous
11170 @end example
11171
11172 @table @code
11173 @item --recursive
11174 @itemx -r
11175 Traverse the dependency graph of the given upstream package recursively
11176 and generate package expressions for all those packages that are not yet
11177 in Guix.
11178 @end table
11179
11180 @item gem
11181 @cindex gem
11182 Import metadata from @uref{https://rubygems.org/, RubyGems}. Information
11183 is taken from the JSON-formatted description available at
11184 @code{rubygems.org} and includes most relevant information, including
11185 runtime dependencies. There are some caveats, however. The metadata
11186 doesn't distinguish between synopses and descriptions, so the same string
11187 is used for both fields. Additionally, the details of non-Ruby
11188 dependencies required to build native extensions is unavailable and left
11189 as an exercise to the packager.
11190
11191 The command below imports metadata for the @code{rails} Ruby package:
11192
11193 @example
11194 guix import gem rails
11195 @end example
11196
11197 @table @code
11198 @item --recursive
11199 @itemx -r
11200 Traverse the dependency graph of the given upstream package recursively
11201 and generate package expressions for all those packages that are not yet
11202 in Guix.
11203 @end table
11204
11205 @item cpan
11206 @cindex CPAN
11207 Import metadata from @uref{https://www.metacpan.org/, MetaCPAN}.
11208 Information is taken from the JSON-formatted metadata provided through
11209 @uref{https://fastapi.metacpan.org/, MetaCPAN's API} and includes most
11210 relevant information, such as module dependencies. License information
11211 should be checked closely. If Perl is available in the store, then the
11212 @code{corelist} utility will be used to filter core modules out of the
11213 list of dependencies.
11214
11215 The command command below imports metadata for the Acme::Boolean Perl
11216 module:
11217
11218 @example
11219 guix import cpan Acme::Boolean
11220 @end example
11221
11222 @item cran
11223 @cindex CRAN
11224 @cindex Bioconductor
11225 Import metadata from @uref{https://cran.r-project.org/, CRAN}, the
11226 central repository for the @uref{https://r-project.org, GNU@tie{}R
11227 statistical and graphical environment}.
11228
11229 Information is extracted from the @file{DESCRIPTION} file of the package.
11230
11231 The command command below imports metadata for the Cairo R package:
11232
11233 @example
11234 guix import cran Cairo
11235 @end example
11236
11237 When @option{--recursive} is added, the importer will traverse the
11238 dependency graph of the given upstream package recursively and generate
11239 package expressions for all those packages that are not yet in Guix.
11240
11241 When @option{--style=specification} is added, the importer will generate
11242 package definitions whose inputs are package specifications instead of
11243 references to package variables. This is useful when generated package
11244 definitions are to be appended to existing user modules, as the list of
11245 used package modules need not be changed. The default is
11246 @option{--style=variable}.
11247
11248 When @option{--archive=bioconductor} is added, metadata is imported from
11249 @uref{https://www.bioconductor.org/, Bioconductor}, a repository of R
11250 packages for the analysis and comprehension of high-throughput
11251 genomic data in bioinformatics.
11252
11253 Information is extracted from the @file{DESCRIPTION} file contained in the
11254 package archive.
11255
11256 The command below imports metadata for the GenomicRanges R package:
11257
11258 @example
11259 guix import cran --archive=bioconductor GenomicRanges
11260 @end example
11261
11262 Finally, you can also import R packages that have not yet been published on
11263 CRAN or Bioconductor as long as they are in a git repository. Use
11264 @option{--archive=git} followed by the URL of the git repository:
11265
11266 @example
11267 guix import cran --archive=git https://github.com/immunogenomics/harmony
11268 @end example
11269
11270 @item texlive
11271 @cindex TeX Live
11272 @cindex CTAN
11273 Import metadata from @uref{https://www.ctan.org/, CTAN}, the
11274 comprehensive TeX archive network for TeX packages that are part of the
11275 @uref{https://www.tug.org/texlive/, TeX Live distribution}.
11276
11277 Information about the package is obtained through the XML API provided
11278 by CTAN, while the source code is downloaded from the SVN repository of
11279 the Tex Live project. This is done because the CTAN does not keep
11280 versioned archives.
11281
11282 The command command below imports metadata for the @code{fontspec}
11283 TeX package:
11284
11285 @example
11286 guix import texlive fontspec
11287 @end example
11288
11289 When @option{--archive=@var{directory}} is added, the source code is
11290 downloaded not from the @file{latex} sub-directory of the
11291 @file{texmf-dist/source} tree in the TeX Live SVN repository, but from
11292 the specified sibling @var{directory} under the same root.
11293
11294 The command below imports metadata for the @code{ifxetex} package from
11295 CTAN while fetching the sources from the directory
11296 @file{texmf/source/generic}:
11297
11298 @example
11299 guix import texlive --archive=generic ifxetex
11300 @end example
11301
11302 @item json
11303 @cindex JSON, import
11304 Import package metadata from a local JSON file. Consider the following
11305 example package definition in JSON format:
11306
11307 @example
11308 @{
11309 "name": "hello",
11310 "version": "2.10",
11311 "source": "mirror://gnu/hello/hello-2.10.tar.gz",
11312 "build-system": "gnu",
11313 "home-page": "https://www.gnu.org/software/hello/",
11314 "synopsis": "Hello, GNU world: An example GNU package",
11315 "description": "GNU Hello prints a greeting.",
11316 "license": "GPL-3.0+",
11317 "native-inputs": ["gettext"]
11318 @}
11319 @end example
11320
11321 The field names are the same as for the @code{<package>} record
11322 (@xref{Defining Packages}). References to other packages are provided
11323 as JSON lists of quoted package specification strings such as
11324 @code{guile} or @code{guile@@2.0}.
11325
11326 The importer also supports a more explicit source definition using the
11327 common fields for @code{<origin>} records:
11328
11329 @example
11330 @{
11331 @dots{}
11332 "source": @{
11333 "method": "url-fetch",
11334 "uri": "mirror://gnu/hello/hello-2.10.tar.gz",
11335 "sha256": @{
11336 "base32": "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"
11337 @}
11338 @}
11339 @dots{}
11340 @}
11341 @end example
11342
11343 The command below reads metadata from the JSON file @code{hello.json}
11344 and outputs a package expression:
11345
11346 @example
11347 guix import json hello.json
11348 @end example
11349
11350 @item nix
11351 Import metadata from a local copy of the source of the
11352 @uref{https://nixos.org/nixpkgs/, Nixpkgs distribution}@footnote{This
11353 relies on the @command{nix-instantiate} command of
11354 @uref{https://nixos.org/nix/, Nix}.}. Package definitions in Nixpkgs are
11355 typically written in a mixture of Nix-language and Bash code. This
11356 command only imports the high-level package structure that is written in
11357 the Nix language. It normally includes all the basic fields of a
11358 package definition.
11359
11360 When importing a GNU package, the synopsis and descriptions are replaced
11361 by their canonical upstream variant.
11362
11363 Usually, you will first need to do:
11364
11365 @example
11366 export NIX_REMOTE=daemon
11367 @end example
11368
11369 @noindent
11370 so that @command{nix-instantiate} does not try to open the Nix database.
11371
11372 As an example, the command below imports the package definition of
11373 LibreOffice (more precisely, it imports the definition of the package
11374 bound to the @code{libreoffice} top-level attribute):
11375
11376 @example
11377 guix import nix ~/path/to/nixpkgs libreoffice
11378 @end example
11379
11380 @item hackage
11381 @cindex hackage
11382 Import metadata from the Haskell community's central package archive
11383 @uref{https://hackage.haskell.org/, Hackage}. Information is taken from
11384 Cabal files and includes all the relevant information, including package
11385 dependencies.
11386
11387 Specific command-line options are:
11388
11389 @table @code
11390 @item --stdin
11391 @itemx -s
11392 Read a Cabal file from standard input.
11393 @item --no-test-dependencies
11394 @itemx -t
11395 Do not include dependencies required only by the test suites.
11396 @item --cabal-environment=@var{alist}
11397 @itemx -e @var{alist}
11398 @var{alist} is a Scheme alist defining the environment in which the
11399 Cabal conditionals are evaluated. The accepted keys are: @code{os},
11400 @code{arch}, @code{impl} and a string representing the name of a flag.
11401 The value associated with a flag has to be either the symbol
11402 @code{true} or @code{false}. The value associated with other keys
11403 has to conform to the Cabal file format definition. The default value
11404 associated with the keys @code{os}, @code{arch} and @code{impl} is
11405 @samp{linux}, @samp{x86_64} and @samp{ghc}, respectively.
11406 @item --recursive
11407 @itemx -r
11408 Traverse the dependency graph of the given upstream package recursively
11409 and generate package expressions for all those packages that are not yet
11410 in Guix.
11411 @end table
11412
11413 The command below imports metadata for the latest version of the
11414 HTTP Haskell package without including test dependencies and
11415 specifying the value of the flag @samp{network-uri} as @code{false}:
11416
11417 @example
11418 guix import hackage -t -e "'((\"network-uri\" . false))" HTTP
11419 @end example
11420
11421 A specific package version may optionally be specified by following the
11422 package name by an at-sign and a version number as in the following example:
11423
11424 @example
11425 guix import hackage mtl@@2.1.3.1
11426 @end example
11427
11428 @item stackage
11429 @cindex stackage
11430 The @code{stackage} importer is a wrapper around the @code{hackage} one.
11431 It takes a package name, looks up the package version included in a
11432 long-term support (LTS) @uref{https://www.stackage.org, Stackage}
11433 release and uses the @code{hackage} importer to retrieve its metadata.
11434 Note that it is up to you to select an LTS release compatible with the
11435 GHC compiler used by Guix.
11436
11437 Specific command-line options are:
11438
11439 @table @code
11440 @item --no-test-dependencies
11441 @itemx -t
11442 Do not include dependencies required only by the test suites.
11443 @item --lts-version=@var{version}
11444 @itemx -l @var{version}
11445 @var{version} is the desired LTS release version. If omitted the latest
11446 release is used.
11447 @item --recursive
11448 @itemx -r
11449 Traverse the dependency graph of the given upstream package recursively
11450 and generate package expressions for all those packages that are not yet
11451 in Guix.
11452 @end table
11453
11454 The command below imports metadata for the HTTP Haskell package
11455 included in the LTS Stackage release version 7.18:
11456
11457 @example
11458 guix import stackage --lts-version=7.18 HTTP
11459 @end example
11460
11461 @item elpa
11462 @cindex elpa
11463 Import metadata from an Emacs Lisp Package Archive (ELPA) package
11464 repository (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
11465
11466 Specific command-line options are:
11467
11468 @table @code
11469 @item --archive=@var{repo}
11470 @itemx -a @var{repo}
11471 @var{repo} identifies the archive repository from which to retrieve the
11472 information. Currently the supported repositories and their identifiers
11473 are:
11474 @itemize -
11475 @item
11476 @uref{https://elpa.gnu.org/packages, GNU}, selected by the @code{gnu}
11477 identifier. This is the default.
11478
11479 Packages from @code{elpa.gnu.org} are signed with one of the keys
11480 contained in the GnuPG keyring at
11481 @file{share/emacs/25.1/etc/package-keyring.gpg} (or similar) in the
11482 @code{emacs} package (@pxref{Package Installation, ELPA package
11483 signatures,, emacs, The GNU Emacs Manual}).
11484
11485 @item
11486 @uref{https://stable.melpa.org/packages, MELPA-Stable}, selected by the
11487 @code{melpa-stable} identifier.
11488
11489 @item
11490 @uref{https://melpa.org/packages, MELPA}, selected by the @code{melpa}
11491 identifier.
11492 @end itemize
11493
11494 @item --recursive
11495 @itemx -r
11496 Traverse the dependency graph of the given upstream package recursively
11497 and generate package expressions for all those packages that are not yet
11498 in Guix.
11499 @end table
11500
11501 @item crate
11502 @cindex crate
11503 Import metadata from the crates.io Rust package repository
11504 @uref{https://crates.io, crates.io}, as in this example:
11505
11506 @example
11507 guix import crate blake2-rfc
11508 @end example
11509
11510 The crate importer also allows you to specify a version string:
11511
11512 @example
11513 guix import crate constant-time-eq@@0.1.0
11514 @end example
11515
11516 Additional options include:
11517
11518 @table @code
11519 @item --recursive
11520 @itemx -r
11521 Traverse the dependency graph of the given upstream package recursively
11522 and generate package expressions for all those packages that are not yet
11523 in Guix.
11524 @end table
11525
11526 @item opam
11527 @cindex OPAM
11528 @cindex OCaml
11529 Import metadata from the @uref{https://opam.ocaml.org/, OPAM} package
11530 repository used by the OCaml community.
11531
11532 Additional options include:
11533
11534 @table @code
11535 @item --recursive
11536 @itemx -r
11537 Traverse the dependency graph of the given upstream package recursively
11538 and generate package expressions for all those packages that are not yet
11539 in Guix.
11540 @item --repo
11541 Select the given repository (a repository name). Possible values include:
11542 @itemize
11543 @item @code{opam}, the default opam repository,
11544 @item @code{coq} or @code{coq-released}, the stable repository for coq packages,
11545 @item @code{coq-core-dev}, the repository that contains development versions of coq,
11546 @item @code{coq-extra-dev}, the repository that contains development versions
11547 of coq packages.
11548 @end itemize
11549 @end table
11550
11551 @item go
11552 @cindex go
11553 Import metadata for a Go module using
11554 @uref{https://proxy.golang.org, proxy.golang.org}.
11555
11556 @example
11557 guix import go gopkg.in/yaml.v2
11558 @end example
11559
11560 It is possible to use a package specification with a @code{@@VERSION}
11561 suffix to import a specific version.
11562
11563 Additional options include:
11564
11565 @table @code
11566 @item --recursive
11567 @itemx -r
11568 Traverse the dependency graph of the given upstream package recursively
11569 and generate package expressions for all those packages that are not yet
11570 in Guix.
11571 @item --pin-versions
11572 When using this option, the importer preserves the exact versions of the
11573 Go modules dependencies instead of using their latest available
11574 versions. This can be useful when attempting to import packages that
11575 recursively depend on former versions of themselves to build. When
11576 using this mode, the symbol of the package is made by appending the
11577 version to its name, so that multiple versions of the same package can
11578 coexist.
11579 @end table
11580 @end table
11581
11582 The structure of the @command{guix import} code is modular. It would be
11583 useful to have more importers for other package formats, and your help
11584 is welcome here (@pxref{Contributing}).
11585
11586 @node Invoking guix refresh
11587 @section Invoking @command{guix refresh}
11588
11589 @cindex @command {guix refresh}
11590 The primary audience of the @command{guix refresh} command is packagers.
11591 As a user, you may be interested in the @option{--with-latest} option,
11592 which can bring you package update superpowers built upon @command{guix
11593 refresh} (@pxref{Package Transformation Options,
11594 @option{--with-latest}}). By default, @command{guix refresh} reports
11595 any packages provided by the distribution that are outdated compared to
11596 the latest upstream version, like this:
11597
11598 @example
11599 $ guix refresh
11600 gnu/packages/gettext.scm:29:13: gettext would be upgraded from 0.18.1.1 to 0.18.2.1
11601 gnu/packages/glib.scm:77:12: glib would be upgraded from 2.34.3 to 2.37.0
11602 @end example
11603
11604 Alternatively, one can specify packages to consider, in which case a
11605 warning is emitted for packages that lack an updater:
11606
11607 @example
11608 $ guix refresh coreutils guile guile-ssh
11609 gnu/packages/ssh.scm:205:2: warning: no updater for guile-ssh
11610 gnu/packages/guile.scm:136:12: guile would be upgraded from 2.0.12 to 2.0.13
11611 @end example
11612
11613 @command{guix refresh} browses the upstream repository of each package and determines
11614 the highest version number of the releases therein. The command
11615 knows how to update specific types of packages: GNU packages, ELPA
11616 packages, etc.---see the documentation for @option{--type} below. There
11617 are many packages, though, for which it lacks a method to determine
11618 whether a new upstream release is available. However, the mechanism is
11619 extensible, so feel free to get in touch with us to add a new method!
11620
11621 @table @code
11622
11623 @item --recursive
11624 Consider the packages specified, and all the packages upon which they depend.
11625
11626 @example
11627 $ guix refresh --recursive coreutils
11628 gnu/packages/acl.scm:40:13: acl would be upgraded from 2.2.53 to 2.3.1
11629 gnu/packages/m4.scm:30:12: 1.4.18 is already the latest version of m4
11630 gnu/packages/xml.scm:68:2: warning: no updater for expat
11631 gnu/packages/multiprecision.scm:40:12: 6.1.2 is already the latest version of gmp
11632 @dots{}
11633 @end example
11634
11635 @end table
11636
11637 Sometimes the upstream name differs from the package name used in Guix,
11638 and @command{guix refresh} needs a little help. Most updaters honor the
11639 @code{upstream-name} property in package definitions, which can be used
11640 to that effect:
11641
11642 @lisp
11643 (define-public network-manager
11644 (package
11645 (name "network-manager")
11646 ;; @dots{}
11647 (properties '((upstream-name . "NetworkManager")))))
11648 @end lisp
11649
11650 When passed @option{--update}, it modifies distribution source files to
11651 update the version numbers and source tarball hashes of those package
11652 recipes (@pxref{Defining Packages}). This is achieved by downloading
11653 each package's latest source tarball and its associated OpenPGP
11654 signature, authenticating the downloaded tarball against its signature
11655 using @command{gpgv}, and finally computing its hash---note that GnuPG must be
11656 installed and in @code{$PATH}; run @code{guix install gnupg} if needed.
11657
11658 When the public
11659 key used to sign the tarball is missing from the user's keyring, an
11660 attempt is made to automatically retrieve it from a public key server;
11661 when this is successful, the key is added to the user's keyring; otherwise,
11662 @command{guix refresh} reports an error.
11663
11664 The following options are supported:
11665
11666 @table @code
11667
11668 @item --expression=@var{expr}
11669 @itemx -e @var{expr}
11670 Consider the package @var{expr} evaluates to.
11671
11672 This is useful to precisely refer to a package, as in this example:
11673
11674 @example
11675 guix refresh -l -e '(@@@@ (gnu packages commencement) glibc-final)'
11676 @end example
11677
11678 This command lists the dependents of the ``final'' libc (essentially all
11679 the packages).
11680
11681 @item --update
11682 @itemx -u
11683 Update distribution source files (package recipes) in place. This is
11684 usually run from a checkout of the Guix source tree (@pxref{Running
11685 Guix Before It Is Installed}):
11686
11687 @example
11688 $ ./pre-inst-env guix refresh -s non-core -u
11689 @end example
11690
11691 @xref{Defining Packages}, for more information on package definitions.
11692
11693 @item --select=[@var{subset}]
11694 @itemx -s @var{subset}
11695 Select all the packages in @var{subset}, one of @code{core} or
11696 @code{non-core}.
11697
11698 The @code{core} subset refers to all the packages at the core of the
11699 distribution---i.e., packages that are used to build ``everything
11700 else''. This includes GCC, libc, Binutils, Bash, etc. Usually,
11701 changing one of these packages in the distribution entails a rebuild of
11702 all the others. Thus, such updates are an inconvenience to users in
11703 terms of build time or bandwidth used to achieve the upgrade.
11704
11705 The @code{non-core} subset refers to the remaining packages. It is
11706 typically useful in cases where an update of the core packages would be
11707 inconvenient.
11708
11709 @item --manifest=@var{file}
11710 @itemx -m @var{file}
11711 Select all the packages from the manifest in @var{file}. This is useful to
11712 check if any packages of the user manifest can be updated.
11713
11714 @item --type=@var{updater}
11715 @itemx -t @var{updater}
11716 Select only packages handled by @var{updater} (may be a comma-separated
11717 list of updaters). Currently, @var{updater} may be one of:
11718
11719 @table @code
11720 @item gnu
11721 the updater for GNU packages;
11722 @item savannah
11723 the updater for packages hosted at @uref{https://savannah.gnu.org, Savannah};
11724 @item sourceforge
11725 the updater for packages hosted at @uref{https://sourceforge.net, SourceForge};
11726 @item gnome
11727 the updater for GNOME packages;
11728 @item kde
11729 the updater for KDE packages;
11730 @item xorg
11731 the updater for X.org packages;
11732 @item kernel.org
11733 the updater for packages hosted on kernel.org;
11734 @item elpa
11735 the updater for @uref{https://elpa.gnu.org/, ELPA} packages;
11736 @item cran
11737 the updater for @uref{https://cran.r-project.org/, CRAN} packages;
11738 @item bioconductor
11739 the updater for @uref{https://www.bioconductor.org/, Bioconductor} R packages;
11740 @item cpan
11741 the updater for @uref{https://www.cpan.org/, CPAN} packages;
11742 @item pypi
11743 the updater for @uref{https://pypi.python.org, PyPI} packages.
11744 @item gem
11745 the updater for @uref{https://rubygems.org, RubyGems} packages.
11746 @item github
11747 the updater for @uref{https://github.com, GitHub} packages.
11748 @item hackage
11749 the updater for @uref{https://hackage.haskell.org, Hackage} packages.
11750 @item stackage
11751 the updater for @uref{https://www.stackage.org, Stackage} packages.
11752 @item crate
11753 the updater for @uref{https://crates.io, Crates} packages.
11754 @item launchpad
11755 the updater for @uref{https://launchpad.net, Launchpad} packages.
11756 @item generic-html
11757 a generic updater that crawls the HTML page where the source tarball of
11758 the package is hosted, when applicable.
11759 @end table
11760
11761 For instance, the following command only checks for updates of Emacs
11762 packages hosted at @code{elpa.gnu.org} and for updates of CRAN packages:
11763
11764 @example
11765 $ guix refresh --type=elpa,cran
11766 gnu/packages/statistics.scm:819:13: r-testthat would be upgraded from 0.10.0 to 0.11.0
11767 gnu/packages/emacs.scm:856:13: emacs-auctex would be upgraded from 11.88.6 to 11.88.9
11768 @end example
11769
11770 @item --list-updaters
11771 @itemx -L
11772 List available updaters and exit (see @option{--type} above).
11773
11774 For each updater, display the fraction of packages it covers; at the
11775 end, display the fraction of packages covered by all these updaters.
11776 @end table
11777
11778 In addition, @command{guix refresh} can be passed one or more package
11779 names, as in this example:
11780
11781 @example
11782 $ ./pre-inst-env guix refresh -u emacs idutils gcc@@4.8
11783 @end example
11784
11785 @noindent
11786 The command above specifically updates the @code{emacs} and
11787 @code{idutils} packages. The @option{--select} option would have no
11788 effect in this case. You might also want to update definitions that
11789 correspond to the packages installed in your profile:
11790
11791 @example
11792 $ ./pre-inst-env guix refresh -u \
11793 $(guix package --list-installed | cut -f1)
11794 @end example
11795
11796 When considering whether to upgrade a package, it is sometimes
11797 convenient to know which packages would be affected by the upgrade and
11798 should be checked for compatibility. For this the following option may
11799 be used when passing @command{guix refresh} one or more package names:
11800
11801 @table @code
11802
11803 @item --list-dependent
11804 @itemx -l
11805 List top-level dependent packages that would need to be rebuilt as a
11806 result of upgrading one or more packages.
11807
11808 @xref{Invoking guix graph, the @code{reverse-package} type of
11809 @command{guix graph}}, for information on how to visualize the list of
11810 dependents of a package.
11811
11812 @end table
11813
11814 Be aware that the @option{--list-dependent} option only
11815 @emph{approximates} the rebuilds that would be required as a result of
11816 an upgrade. More rebuilds might be required under some circumstances.
11817
11818 @example
11819 $ guix refresh --list-dependent flex
11820 Building the following 120 packages would ensure 213 dependent packages are rebuilt:
11821 hop@@2.4.0 geiser@@0.4 notmuch@@0.18 mu@@0.9.9.5 cflow@@1.4 idutils@@4.6 @dots{}
11822 @end example
11823
11824 The command above lists a set of packages that could be built to check
11825 for compatibility with an upgraded @code{flex} package.
11826
11827 @table @code
11828
11829 @item --list-transitive
11830 List all the packages which one or more packages depend upon.
11831
11832 @example
11833 $ guix refresh --list-transitive flex
11834 flex@@2.6.4 depends on the following 25 packages: perl@@5.28.0 help2man@@1.47.6
11835 bison@@3.0.5 indent@@2.2.10 tar@@1.30 gzip@@1.9 bzip2@@1.0.6 xz@@5.2.4 file@@5.33 @dots{}
11836 @end example
11837
11838 @end table
11839
11840 The command above lists a set of packages which, when changed, would cause
11841 @code{flex} to be rebuilt.
11842
11843 The following options can be used to customize GnuPG operation:
11844
11845 @table @code
11846
11847 @item --gpg=@var{command}
11848 Use @var{command} as the GnuPG 2.x command. @var{command} is searched
11849 for in @code{$PATH}.
11850
11851 @item --keyring=@var{file}
11852 Use @var{file} as the keyring for upstream keys. @var{file} must be in the
11853 @dfn{keybox format}. Keybox files usually have a name ending in @file{.kbx}
11854 and the GNU@tie{}Privacy Guard (GPG) can manipulate these files
11855 (@pxref{kbxutil, @command{kbxutil},, gnupg, Using the GNU Privacy Guard}, for
11856 information on a tool to manipulate keybox files).
11857
11858 When this option is omitted, @command{guix refresh} uses
11859 @file{~/.config/guix/upstream/trustedkeys.kbx} as the keyring for upstream
11860 signing keys. OpenPGP signatures are checked against keys from this keyring;
11861 missing keys are downloaded to this keyring as well (see
11862 @option{--key-download} below).
11863
11864 You can export keys from your default GPG keyring into a keybox file using
11865 commands like this one:
11866
11867 @example
11868 gpg --export rms@@gnu.org | kbxutil --import-openpgp >> mykeyring.kbx
11869 @end example
11870
11871 Likewise, you can fetch keys to a specific keybox file like this:
11872
11873 @example
11874 gpg --no-default-keyring --keyring mykeyring.kbx \
11875 --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
11876 @end example
11877
11878 @xref{GPG Configuration Options, @option{--keyring},, gnupg, Using the GNU
11879 Privacy Guard}, for more information on GPG's @option{--keyring} option.
11880
11881 @item --key-download=@var{policy}
11882 Handle missing OpenPGP keys according to @var{policy}, which may be one
11883 of:
11884
11885 @table @code
11886 @item always
11887 Always download missing OpenPGP keys from the key server, and add them
11888 to the user's GnuPG keyring.
11889
11890 @item never
11891 Never try to download missing OpenPGP keys. Instead just bail out.
11892
11893 @item interactive
11894 When a package signed with an unknown OpenPGP key is encountered, ask
11895 the user whether to download it or not. This is the default behavior.
11896 @end table
11897
11898 @item --key-server=@var{host}
11899 Use @var{host} as the OpenPGP key server when importing a public key.
11900
11901 @item --load-path=@var{directory}
11902 Add @var{directory} to the front of the package module search path
11903 (@pxref{Package Modules}).
11904
11905 This allows users to define their own packages and make them visible to
11906 the command-line tools.
11907
11908 @end table
11909
11910 The @code{github} updater uses the
11911 @uref{https://developer.github.com/v3/, GitHub API} to query for new
11912 releases. When used repeatedly e.g.@: when refreshing all packages,
11913 GitHub will eventually refuse to answer any further API requests. By
11914 default 60 API requests per hour are allowed, and a full refresh on all
11915 GitHub packages in Guix requires more than this. Authentication with
11916 GitHub through the use of an API token alleviates these limits. To use
11917 an API token, set the environment variable @env{GUIX_GITHUB_TOKEN} to a
11918 token procured from @uref{https://github.com/settings/tokens} or
11919 otherwise.
11920
11921
11922 @node Invoking guix lint
11923 @section Invoking @command{guix lint}
11924
11925 @cindex @command{guix lint}
11926 @cindex package, checking for errors
11927 The @command{guix lint} command is meant to help package developers avoid
11928 common errors and use a consistent style. It runs a number of checks on
11929 a given set of packages in order to find common mistakes in their
11930 definitions. Available @dfn{checkers} include (see
11931 @option{--list-checkers} for a complete list):
11932
11933 @table @code
11934 @item synopsis
11935 @itemx description
11936 Validate certain typographical and stylistic rules about package
11937 descriptions and synopses.
11938
11939 @item inputs-should-be-native
11940 Identify inputs that should most likely be native inputs.
11941
11942 @item source
11943 @itemx home-page
11944 @itemx mirror-url
11945 @itemx github-url
11946 @itemx source-file-name
11947 Probe @code{home-page} and @code{source} URLs and report those that are
11948 invalid. Suggest a @code{mirror://} URL when applicable. If the
11949 @code{source} URL redirects to a GitHub URL, recommend usage of the GitHub
11950 URL@. Check that the source file name is meaningful, e.g.@: is not just a
11951 version number or ``git-checkout'', without a declared @code{file-name}
11952 (@pxref{origin Reference}).
11953
11954 @item source-unstable-tarball
11955 Parse the @code{source} URL to determine if a tarball from GitHub is
11956 autogenerated or if it is a release tarball. Unfortunately GitHub's
11957 autogenerated tarballs are sometimes regenerated.
11958
11959 @item derivation
11960 Check that the derivation of the given packages can be successfully
11961 computed for all the supported systems (@pxref{Derivations}).
11962
11963 @item profile-collisions
11964 Check whether installing the given packages in a profile would lead to
11965 collisions. Collisions occur when several packages with the same name
11966 but a different version or a different store file name are propagated.
11967 @xref{package Reference, @code{propagated-inputs}}, for more information
11968 on propagated inputs.
11969
11970 @item archival
11971 @cindex Software Heritage, source code archive
11972 @cindex archival of source code, Software Heritage
11973 Checks whether the package's source code is archived at
11974 @uref{https://www.softwareheritage.org, Software Heritage}.
11975
11976 When the source code that is not archived comes from a version-control system
11977 (VCS)---e.g., it's obtained with @code{git-fetch}, send Software Heritage a
11978 ``save'' request so that it eventually archives it. This ensures that the
11979 source will remain available in the long term, and that Guix can fall back to
11980 Software Heritage should the source code disappear from its original host.
11981 The status of recent ``save'' requests can be
11982 @uref{https://archive.softwareheritage.org/save/#requests, viewed on-line}.
11983
11984 When source code is a tarball obtained with @code{url-fetch}, simply print a
11985 message when it is not archived. As of this writing, Software Heritage does
11986 not allow requests to save arbitrary tarballs; we are working on ways to
11987 ensure that non-VCS source code is also archived.
11988
11989 Software Heritage
11990 @uref{https://archive.softwareheritage.org/api/#rate-limiting, limits the
11991 request rate per IP address}. When the limit is reached, @command{guix lint}
11992 prints a message and the @code{archival} checker stops doing anything until
11993 that limit has been reset.
11994
11995 @item cve
11996 @cindex security vulnerabilities
11997 @cindex CVE, Common Vulnerabilities and Exposures
11998 Report known vulnerabilities found in the Common Vulnerabilities and
11999 Exposures (CVE) databases of the current and past year
12000 @uref{https://nvd.nist.gov/vuln/data-feeds, published by the US
12001 NIST}.
12002
12003 To view information about a particular vulnerability, visit pages such as:
12004
12005 @itemize
12006 @item
12007 @indicateurl{https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-YYYY-ABCD}
12008 @item
12009 @indicateurl{https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-YYYY-ABCD}
12010 @end itemize
12011
12012 @noindent
12013 where @code{CVE-YYYY-ABCD} is the CVE identifier---e.g.,
12014 @code{CVE-2015-7554}.
12015
12016 Package developers can specify in package recipes the
12017 @uref{https://nvd.nist.gov/products/cpe,Common Platform Enumeration (CPE)}
12018 name and version of the package when they differ from the name or version
12019 that Guix uses, as in this example:
12020
12021 @lisp
12022 (package
12023 (name "grub")
12024 ;; @dots{}
12025 ;; CPE calls this package "grub2".
12026 (properties '((cpe-name . "grub2")
12027 (cpe-version . "2.3"))))
12028 @end lisp
12029
12030 @c See <https://www.openwall.com/lists/oss-security/2017/03/15/3>.
12031 Some entries in the CVE database do not specify which version of a
12032 package they apply to, and would thus ``stick around'' forever. Package
12033 developers who found CVE alerts and verified they can be ignored can
12034 declare them as in this example:
12035
12036 @lisp
12037 (package
12038 (name "t1lib")
12039 ;; @dots{}
12040 ;; These CVEs no longer apply and can be safely ignored.
12041 (properties `((lint-hidden-cve . ("CVE-2011-0433"
12042 "CVE-2011-1553"
12043 "CVE-2011-1554"
12044 "CVE-2011-5244")))))
12045 @end lisp
12046
12047 @item formatting
12048 Warn about obvious source code formatting issues: trailing white space,
12049 use of tabulations, etc.
12050 @end table
12051
12052 The general syntax is:
12053
12054 @example
12055 guix lint @var{options} @var{package}@dots{}
12056 @end example
12057
12058 If no package is given on the command line, then all packages are checked.
12059 The @var{options} may be zero or more of the following:
12060
12061 @table @code
12062 @item --list-checkers
12063 @itemx -l
12064 List and describe all the available checkers that will be run on packages
12065 and exit.
12066
12067 @item --checkers
12068 @itemx -c
12069 Only enable the checkers specified in a comma-separated list using the
12070 names returned by @option{--list-checkers}.
12071
12072 @item --exclude
12073 @itemx -x
12074 Only disable the checkers specified in a comma-separated list using the
12075 names returned by @option{--list-checkers}.
12076
12077 @item --no-network
12078 @itemx -n
12079 Only enable the checkers that do not depend on Internet access.
12080
12081 @item --load-path=@var{directory}
12082 @itemx -L @var{directory}
12083 Add @var{directory} to the front of the package module search path
12084 (@pxref{Package Modules}).
12085
12086 This allows users to define their own packages and make them visible to
12087 the command-line tools.
12088
12089 @end table
12090
12091 @node Invoking guix size
12092 @section Invoking @command{guix size}
12093
12094 @cindex size
12095 @cindex package size
12096 @cindex closure
12097 @cindex @command{guix size}
12098 The @command{guix size} command helps package developers profile the
12099 disk usage of packages. It is easy to overlook the impact of an
12100 additional dependency added to a package, or the impact of using a
12101 single output for a package that could easily be split (@pxref{Packages
12102 with Multiple Outputs}). Such are the typical issues that
12103 @command{guix size} can highlight.
12104
12105 The command can be passed one or more package specifications
12106 such as @code{gcc@@4.8}
12107 or @code{guile:debug}, or a file name in the store. Consider this
12108 example:
12109
12110 @example
12111 $ guix size coreutils
12112 store item total self
12113 /gnu/store/@dots{}-gcc-5.5.0-lib 60.4 30.1 38.1%
12114 /gnu/store/@dots{}-glibc-2.27 30.3 28.8 36.6%
12115 /gnu/store/@dots{}-coreutils-8.28 78.9 15.0 19.0%
12116 /gnu/store/@dots{}-gmp-6.1.2 63.1 2.7 3.4%
12117 /gnu/store/@dots{}-bash-static-4.4.12 1.5 1.5 1.9%
12118 /gnu/store/@dots{}-acl-2.2.52 61.1 0.4 0.5%
12119 /gnu/store/@dots{}-attr-2.4.47 60.6 0.2 0.3%
12120 /gnu/store/@dots{}-libcap-2.25 60.5 0.2 0.2%
12121 total: 78.9 MiB
12122 @end example
12123
12124 @cindex closure
12125 The store items listed here constitute the @dfn{transitive closure} of
12126 Coreutils---i.e., Coreutils and all its dependencies, recursively---as
12127 would be returned by:
12128
12129 @example
12130 $ guix gc -R /gnu/store/@dots{}-coreutils-8.23
12131 @end example
12132
12133 Here the output shows three columns next to store items. The first column,
12134 labeled ``total'', shows the size in mebibytes (MiB) of the closure of
12135 the store item---that is, its own size plus the size of all its
12136 dependencies. The next column, labeled ``self'', shows the size of the
12137 item itself. The last column shows the ratio of the size of the item
12138 itself to the space occupied by all the items listed here.
12139
12140 In this example, we see that the closure of Coreutils weighs in at
12141 79@tie{}MiB, most of which is taken by libc and GCC's run-time support
12142 libraries. (That libc and GCC's libraries represent a large fraction of
12143 the closure is not a problem @i{per se} because they are always available
12144 on the system anyway.)
12145
12146 Since the command also accepts store file names, assessing the size of
12147 a build result is straightforward:
12148
12149 @example
12150 guix size $(guix system build config.scm)
12151 @end example
12152
12153 When the package(s) passed to @command{guix size} are available in the
12154 store@footnote{More precisely, @command{guix size} looks for the
12155 @emph{ungrafted} variant of the given package(s), as returned by
12156 @code{guix build @var{package} --no-grafts}. @xref{Security Updates},
12157 for information on grafts.}, @command{guix size} queries the daemon to determine its
12158 dependencies, and measures its size in the store, similar to @command{du
12159 -ms --apparent-size} (@pxref{du invocation,,, coreutils, GNU
12160 Coreutils}).
12161
12162 When the given packages are @emph{not} in the store, @command{guix size}
12163 reports information based on the available substitutes
12164 (@pxref{Substitutes}). This makes it possible it to profile disk usage of
12165 store items that are not even on disk, only available remotely.
12166
12167 You can also specify several package names:
12168
12169 @example
12170 $ guix size coreutils grep sed bash
12171 store item total self
12172 /gnu/store/@dots{}-coreutils-8.24 77.8 13.8 13.4%
12173 /gnu/store/@dots{}-grep-2.22 73.1 0.8 0.8%
12174 /gnu/store/@dots{}-bash-4.3.42 72.3 4.7 4.6%
12175 /gnu/store/@dots{}-readline-6.3 67.6 1.2 1.2%
12176 @dots{}
12177 total: 102.3 MiB
12178 @end example
12179
12180 @noindent
12181 In this example we see that the combination of the four packages takes
12182 102.3@tie{}MiB in total, which is much less than the sum of each closure
12183 since they have a lot of dependencies in common.
12184
12185 When looking at the profile returned by @command{guix size}, you may
12186 find yourself wondering why a given package shows up in the profile at
12187 all. To understand it, you can use @command{guix graph --path -t
12188 references} to display the shortest path between the two packages
12189 (@pxref{Invoking guix graph}).
12190
12191 The available options are:
12192
12193 @table @option
12194
12195 @item --substitute-urls=@var{urls}
12196 Use substitute information from @var{urls}.
12197 @xref{client-substitute-urls, the same option for @code{guix build}}.
12198
12199 @item --sort=@var{key}
12200 Sort lines according to @var{key}, one of the following options:
12201
12202 @table @code
12203 @item self
12204 the size of each item (the default);
12205 @item closure
12206 the total size of the item's closure.
12207 @end table
12208
12209 @item --map-file=@var{file}
12210 Write a graphical map of disk usage in PNG format to @var{file}.
12211
12212 For the example above, the map looks like this:
12213
12214 @image{images/coreutils-size-map,5in,, map of Coreutils disk usage
12215 produced by @command{guix size}}
12216
12217 This option requires that
12218 @uref{https://wingolog.org/software/guile-charting/, Guile-Charting} be
12219 installed and visible in Guile's module search path. When that is not
12220 the case, @command{guix size} fails as it tries to load it.
12221
12222 @item --system=@var{system}
12223 @itemx -s @var{system}
12224 Consider packages for @var{system}---e.g., @code{x86_64-linux}.
12225
12226 @item --load-path=@var{directory}
12227 @itemx -L @var{directory}
12228 Add @var{directory} to the front of the package module search path
12229 (@pxref{Package Modules}).
12230
12231 This allows users to define their own packages and make them visible to
12232 the command-line tools.
12233 @end table
12234
12235 @node Invoking guix graph
12236 @section Invoking @command{guix graph}
12237
12238 @cindex DAG
12239 @cindex @command{guix graph}
12240 @cindex package dependencies
12241 Packages and their dependencies form a @dfn{graph}, specifically a
12242 directed acyclic graph (DAG). It can quickly become difficult to have a
12243 mental model of the package DAG, so the @command{guix graph} command
12244 provides a visual representation of the DAG@. By default,
12245 @command{guix graph} emits a DAG representation in the input format of
12246 @uref{https://www.graphviz.org/, Graphviz}, so its output can be passed
12247 directly to the @command{dot} command of Graphviz. It can also emit an
12248 HTML page with embedded JavaScript code to display a ``chord diagram''
12249 in a Web browser, using the @uref{https://d3js.org/, d3.js} library, or
12250 emit Cypher queries to construct a graph in a graph database supporting
12251 the @uref{https://www.opencypher.org/, openCypher} query language. With
12252 @option{--path}, it simply displays the shortest path between two
12253 packages. The general syntax is:
12254
12255 @example
12256 guix graph @var{options} @var{package}@dots{}
12257 @end example
12258
12259 For example, the following command generates a PDF file representing the
12260 package DAG for the GNU@tie{}Core Utilities, showing its build-time
12261 dependencies:
12262
12263 @example
12264 guix graph coreutils | dot -Tpdf > dag.pdf
12265 @end example
12266
12267 The output looks like this:
12268
12269 @image{images/coreutils-graph,2in,,Dependency graph of the GNU Coreutils}
12270
12271 Nice little graph, no?
12272
12273 You may find it more pleasant to navigate the graph interactively with
12274 @command{xdot} (from the @code{xdot} package):
12275
12276 @example
12277 guix graph coreutils | xdot -
12278 @end example
12279
12280 But there is more than one graph! The one above is concise: it is the
12281 graph of package objects, omitting implicit inputs such as GCC, libc,
12282 grep, etc. It is often useful to have such a concise graph, but
12283 sometimes one may want to see more details. @command{guix graph} supports
12284 several types of graphs, allowing you to choose the level of detail:
12285
12286 @table @code
12287 @item package
12288 This is the default type used in the example above. It shows the DAG of
12289 package objects, excluding implicit dependencies. It is concise, but
12290 filters out many details.
12291
12292 @item reverse-package
12293 This shows the @emph{reverse} DAG of packages. For example:
12294
12295 @example
12296 guix graph --type=reverse-package ocaml
12297 @end example
12298
12299 ...@: yields the graph of packages that @emph{explicitly} depend on OCaml (if
12300 you are also interested in cases where OCaml is an implicit dependency, see
12301 @code{reverse-bag} below).
12302
12303 Note that for core packages this can yield huge graphs. If all you want
12304 is to know the number of packages that depend on a given package, use
12305 @command{guix refresh --list-dependent} (@pxref{Invoking guix refresh,
12306 @option{--list-dependent}}).
12307
12308 @item bag-emerged
12309 This is the package DAG, @emph{including} implicit inputs.
12310
12311 For instance, the following command:
12312
12313 @example
12314 guix graph --type=bag-emerged coreutils
12315 @end example
12316
12317 ...@: yields this bigger graph:
12318
12319 @image{images/coreutils-bag-graph,,5in,Detailed dependency graph of the GNU Coreutils}
12320
12321 At the bottom of the graph, we see all the implicit inputs of
12322 @var{gnu-build-system} (@pxref{Build Systems, @code{gnu-build-system}}).
12323
12324 Now, note that the dependencies of these implicit inputs---that is, the
12325 @dfn{bootstrap dependencies} (@pxref{Bootstrapping})---are not shown
12326 here, for conciseness.
12327
12328 @item bag
12329 Similar to @code{bag-emerged}, but this time including all the bootstrap
12330 dependencies.
12331
12332 @item bag-with-origins
12333 Similar to @code{bag}, but also showing origins and their dependencies.
12334
12335 @item reverse-bag
12336 This shows the @emph{reverse} DAG of packages. Unlike @code{reverse-package},
12337 it also takes implicit dependencies into account. For example:
12338
12339 @example
12340 guix graph -t reverse-bag dune
12341 @end example
12342
12343 @noindent
12344 ...@: yields the graph of all packages that depend on Dune, directly or
12345 indirectly. Since Dune is an @emph{implicit} dependency of many packages
12346 @i{via} @code{dune-build-system}, this shows a large number of packages,
12347 whereas @code{reverse-package} would show very few if any.
12348
12349 @item derivation
12350 This is the most detailed representation: It shows the DAG of
12351 derivations (@pxref{Derivations}) and plain store items. Compared to
12352 the above representation, many additional nodes are visible, including
12353 build scripts, patches, Guile modules, etc.
12354
12355 For this type of graph, it is also possible to pass a @file{.drv} file
12356 name instead of a package name, as in:
12357
12358 @example
12359 guix graph -t derivation $(guix system build -d my-config.scm)
12360 @end example
12361
12362 @item module
12363 This is the graph of @dfn{package modules} (@pxref{Package Modules}).
12364 For example, the following command shows the graph for the package
12365 module that defines the @code{guile} package:
12366
12367 @example
12368 guix graph -t module guile | xdot -
12369 @end example
12370 @end table
12371
12372 All the types above correspond to @emph{build-time dependencies}. The
12373 following graph type represents the @emph{run-time dependencies}:
12374
12375 @table @code
12376 @item references
12377 This is the graph of @dfn{references} of a package output, as returned
12378 by @command{guix gc --references} (@pxref{Invoking guix gc}).
12379
12380 If the given package output is not available in the store, @command{guix
12381 graph} attempts to obtain dependency information from substitutes.
12382
12383 Here you can also pass a store file name instead of a package name. For
12384 example, the command below produces the reference graph of your profile
12385 (which can be big!):
12386
12387 @example
12388 guix graph -t references $(readlink -f ~/.guix-profile)
12389 @end example
12390
12391 @item referrers
12392 This is the graph of the @dfn{referrers} of a store item, as returned by
12393 @command{guix gc --referrers} (@pxref{Invoking guix gc}).
12394
12395 This relies exclusively on local information from your store. For
12396 instance, let us suppose that the current Inkscape is available in 10
12397 profiles on your machine; @command{guix graph -t referrers inkscape}
12398 will show a graph rooted at Inkscape and with those 10 profiles linked
12399 to it.
12400
12401 It can help determine what is preventing a store item from being garbage
12402 collected.
12403
12404 @end table
12405
12406 @cindex shortest path, between packages
12407 Often, the graph of the package you are interested in does not fit on
12408 your screen, and anyway all you want to know is @emph{why} that package
12409 actually depends on some seemingly unrelated package. The
12410 @option{--path} option instructs @command{guix graph} to display the
12411 shortest path between two packages (or derivations, or store items,
12412 etc.):
12413
12414 @example
12415 $ guix graph --path emacs libunistring
12416 emacs@@26.3
12417 mailutils@@3.9
12418 libunistring@@0.9.10
12419 $ guix graph --path -t derivation emacs libunistring
12420 /gnu/store/@dots{}-emacs-26.3.drv
12421 /gnu/store/@dots{}-mailutils-3.9.drv
12422 /gnu/store/@dots{}-libunistring-0.9.10.drv
12423 $ guix graph --path -t references emacs libunistring
12424 /gnu/store/@dots{}-emacs-26.3
12425 /gnu/store/@dots{}-libidn2-2.2.0
12426 /gnu/store/@dots{}-libunistring-0.9.10
12427 @end example
12428
12429 The available options are the following:
12430
12431 @table @option
12432 @item --type=@var{type}
12433 @itemx -t @var{type}
12434 Produce a graph output of @var{type}, where @var{type} must be one of
12435 the values listed above.
12436
12437 @item --list-types
12438 List the supported graph types.
12439
12440 @item --backend=@var{backend}
12441 @itemx -b @var{backend}
12442 Produce a graph using the selected @var{backend}.
12443
12444 @item --list-backends
12445 List the supported graph backends.
12446
12447 Currently, the available backends are Graphviz and d3.js.
12448
12449 @item --path
12450 Display the shortest path between two nodes of the type specified by
12451 @option{--type}. The example below shows the shortest path between
12452 @code{libreoffice} and @code{llvm} according to the references of
12453 @code{libreoffice}:
12454
12455 @example
12456 $ guix graph --path -t references libreoffice llvm
12457 /gnu/store/@dots{}-libreoffice-6.4.2.2
12458 /gnu/store/@dots{}-libepoxy-1.5.4
12459 /gnu/store/@dots{}-mesa-19.3.4
12460 /gnu/store/@dots{}-llvm-9.0.1
12461 @end example
12462
12463 @item --expression=@var{expr}
12464 @itemx -e @var{expr}
12465 Consider the package @var{expr} evaluates to.
12466
12467 This is useful to precisely refer to a package, as in this example:
12468
12469 @example
12470 guix graph -e '(@@@@ (gnu packages commencement) gnu-make-final)'
12471 @end example
12472
12473 @item --system=@var{system}
12474 @itemx -s @var{system}
12475 Display the graph for @var{system}---e.g., @code{i686-linux}.
12476
12477 The package dependency graph is largely architecture-independent, but there
12478 are some architecture-dependent bits that this option allows you to visualize.
12479
12480 @item --load-path=@var{directory}
12481 @itemx -L @var{directory}
12482 Add @var{directory} to the front of the package module search path
12483 (@pxref{Package Modules}).
12484
12485 This allows users to define their own packages and make them visible to
12486 the command-line tools.
12487 @end table
12488
12489 On top of that, @command{guix graph} supports all the usual package
12490 transformation options (@pxref{Package Transformation Options}). This
12491 makes it easy to view the effect of a graph-rewriting transformation
12492 such as @option{--with-input}. For example, the command below outputs
12493 the graph of @code{git} once @code{openssl} has been replaced by
12494 @code{libressl} everywhere in the graph:
12495
12496 @example
12497 guix graph git --with-input=openssl=libressl
12498 @end example
12499
12500 So many possibilities, so much fun!
12501
12502 @node Invoking guix publish
12503 @section Invoking @command{guix publish}
12504
12505 @cindex @command{guix publish}
12506 The purpose of @command{guix publish} is to enable users to easily share
12507 their store with others, who can then use it as a substitute server
12508 (@pxref{Substitutes}).
12509
12510 When @command{guix publish} runs, it spawns an HTTP server which allows
12511 anyone with network access to obtain substitutes from it. This means
12512 that any machine running Guix can also act as if it were a build farm,
12513 since the HTTP interface is compatible with Cuirass, the software behind
12514 the @code{@value{SUBSTITUTE-SERVER}} build farm.
12515
12516 For security, each substitute is signed, allowing recipients to check
12517 their authenticity and integrity (@pxref{Substitutes}). Because
12518 @command{guix publish} uses the signing key of the system, which is only
12519 readable by the system administrator, it must be started as root; the
12520 @option{--user} option makes it drop root privileges early on.
12521
12522 The signing key pair must be generated before @command{guix publish} is
12523 launched, using @command{guix archive --generate-key} (@pxref{Invoking
12524 guix archive}).
12525
12526 When the @option{--advertise} option is passed, the server advertises
12527 its availability on the local network using multicast DNS (mDNS) and DNS
12528 service discovery (DNS-SD), currently @i{via} Guile-Avahi (@pxref{Top,,,
12529 guile-avahi, Using Avahi in Guile Scheme Programs}).
12530
12531 The general syntax is:
12532
12533 @example
12534 guix publish @var{options}@dots{}
12535 @end example
12536
12537 Running @command{guix publish} without any additional arguments will
12538 spawn an HTTP server on port 8080:
12539
12540 @example
12541 guix publish
12542 @end example
12543
12544 Once a publishing server has been authorized, the daemon may download
12545 substitutes from it. @xref{Getting Substitutes from Other Servers}.
12546
12547 By default, @command{guix publish} compresses archives on the fly as it
12548 serves them. This ``on-the-fly'' mode is convenient in that it requires
12549 no setup and is immediately available. However, when serving lots of
12550 clients, we recommend using the @option{--cache} option, which enables
12551 caching of the archives before they are sent to clients---see below for
12552 details. The @command{guix weather} command provides a handy way to
12553 check what a server provides (@pxref{Invoking guix weather}).
12554
12555 As a bonus, @command{guix publish} also serves as a content-addressed
12556 mirror for source files referenced in @code{origin} records
12557 (@pxref{origin Reference}). For instance, assuming @command{guix
12558 publish} is running on @code{example.org}, the following URL returns the
12559 raw @file{hello-2.10.tar.gz} file with the given SHA256 hash
12560 (represented in @code{nix-base32} format, @pxref{Invoking guix hash}):
12561
12562 @example
12563 http://example.org/file/hello-2.10.tar.gz/sha256/0ssi1@dots{}ndq1i
12564 @end example
12565
12566 Obviously, these URLs only work for files that are in the store; in
12567 other cases, they return 404 (``Not Found'').
12568
12569 @cindex build logs, publication
12570 Build logs are available from @code{/log} URLs like:
12571
12572 @example
12573 http://example.org/log/gwspk@dots{}-guile-2.2.3
12574 @end example
12575
12576 @noindent
12577 When @command{guix-daemon} is configured to save compressed build logs,
12578 as is the case by default (@pxref{Invoking guix-daemon}), @code{/log}
12579 URLs return the compressed log as-is, with an appropriate
12580 @code{Content-Type} and/or @code{Content-Encoding} header. We recommend
12581 running @command{guix-daemon} with @option{--log-compression=gzip} since
12582 Web browsers can automatically decompress it, which is not the case with
12583 Bzip2 compression.
12584
12585 The following options are available:
12586
12587 @table @code
12588 @item --port=@var{port}
12589 @itemx -p @var{port}
12590 Listen for HTTP requests on @var{port}.
12591
12592 @item --listen=@var{host}
12593 Listen on the network interface for @var{host}. The default is to
12594 accept connections from any interface.
12595
12596 @item --user=@var{user}
12597 @itemx -u @var{user}
12598 Change privileges to @var{user} as soon as possible---i.e., once the
12599 server socket is open and the signing key has been read.
12600
12601 @item --compression[=@var{method}[:@var{level}]]
12602 @itemx -C [@var{method}[:@var{level}]]
12603 Compress data using the given @var{method} and @var{level}. @var{method} is
12604 one of @code{lzip}, @code{zstd}, and @code{gzip}; when @var{method} is
12605 omitted, @code{gzip} is used.
12606
12607 When @var{level} is zero, disable compression. The range 1 to 9 corresponds
12608 to different compression levels: 1 is the fastest, and 9 is the best
12609 (CPU-intensive). The default is 3.
12610
12611 Usually, @code{lzip} compresses noticeably better than @code{gzip} for a
12612 small increase in CPU usage; see
12613 @uref{https://nongnu.org/lzip/lzip_benchmark.html,benchmarks on the lzip
12614 Web page}. However, @code{lzip} achieves low decompression throughput
12615 (on the order of 50@tie{}MiB/s on modern hardware), which can be a
12616 bottleneck for someone who downloads over a fast network connection.
12617
12618 The compression ratio of @code{zstd} is between that of @code{lzip} and
12619 that of @code{gzip}; its main advantage is a
12620 @uref{https://facebook.github.io/zstd/,high decompression speed}.
12621
12622 Unless @option{--cache} is used, compression occurs on the fly and
12623 the compressed streams are not
12624 cached. Thus, to reduce load on the machine that runs @command{guix
12625 publish}, it may be a good idea to choose a low compression level, to
12626 run @command{guix publish} behind a caching proxy, or to use
12627 @option{--cache}. Using @option{--cache} has the advantage that it
12628 allows @command{guix publish} to add @code{Content-Length} HTTP header
12629 to its responses.
12630
12631 This option can be repeated, in which case every substitute gets compressed
12632 using all the selected methods, and all of them are advertised. This is
12633 useful when users may not support all the compression methods: they can select
12634 the one they support.
12635
12636 @item --cache=@var{directory}
12637 @itemx -c @var{directory}
12638 Cache archives and meta-data (@code{.narinfo} URLs) to @var{directory}
12639 and only serve archives that are in cache.
12640
12641 When this option is omitted, archives and meta-data are created
12642 on-the-fly. This can reduce the available bandwidth, especially when
12643 compression is enabled, since this may become CPU-bound. Another
12644 drawback of the default mode is that the length of archives is not known
12645 in advance, so @command{guix publish} does not add a
12646 @code{Content-Length} HTTP header to its responses, which in turn
12647 prevents clients from knowing the amount of data being downloaded.
12648
12649 Conversely, when @option{--cache} is used, the first request for a store
12650 item (@i{via} a @code{.narinfo} URL) triggers a
12651 background process to @dfn{bake} the archive---computing its
12652 @code{.narinfo} and compressing the archive, if needed. Once the
12653 archive is cached in @var{directory}, subsequent requests succeed and
12654 are served directly from the cache, which guarantees that clients get
12655 the best possible bandwidth.
12656
12657 That first @code{.narinfo} request nonetheless returns 200, provided the
12658 requested store item is ``small enough'', below the cache bypass
12659 threshold---see @option{--cache-bypass-threshold} below. That way,
12660 clients do not have to wait until the archive is baked. For larger
12661 store items, the first @code{.narinfo} request returns 404, meaning that
12662 clients have to wait until the archive is baked.
12663
12664 The ``baking'' process is performed by worker threads. By default, one
12665 thread per CPU core is created, but this can be customized. See
12666 @option{--workers} below.
12667
12668 When @option{--ttl} is used, cached entries are automatically deleted
12669 when they have expired.
12670
12671 @item --workers=@var{N}
12672 When @option{--cache} is used, request the allocation of @var{N} worker
12673 threads to ``bake'' archives.
12674
12675 @item --ttl=@var{ttl}
12676 Produce @code{Cache-Control} HTTP headers that advertise a time-to-live
12677 (TTL) of @var{ttl}. @var{ttl} must denote a duration: @code{5d} means 5
12678 days, @code{1m} means 1 month, and so on.
12679
12680 This allows the user's Guix to keep substitute information in cache for
12681 @var{ttl}. However, note that @code{guix publish} does not itself
12682 guarantee that the store items it provides will indeed remain available
12683 for as long as @var{ttl}.
12684
12685 Additionally, when @option{--cache} is used, cached entries that have
12686 not been accessed for @var{ttl} and that no longer have a corresponding
12687 item in the store, may be deleted.
12688
12689 @item --cache-bypass-threshold=@var{size}
12690 When used in conjunction with @option{--cache}, store items smaller than
12691 @var{size} are immediately available, even when they are not yet in
12692 cache. @var{size} is a size in bytes, or it can be suffixed by @code{M}
12693 for megabytes and so on. The default is @code{10M}.
12694
12695 ``Cache bypass'' allows you to reduce the publication delay for clients
12696 at the expense of possibly additional I/O and CPU use on the server
12697 side: depending on the client access patterns, those store items can end
12698 up being baked several times until a copy is available in cache.
12699
12700 Increasing the threshold may be useful for sites that have few users, or
12701 to guarantee that users get substitutes even for store items that are
12702 not popular.
12703
12704 @item --nar-path=@var{path}
12705 Use @var{path} as the prefix for the URLs of ``nar'' files
12706 (@pxref{Invoking guix archive, normalized archives}).
12707
12708 By default, nars are served at a URL such as
12709 @code{/nar/gzip/@dots{}-coreutils-8.25}. This option allows you to
12710 change the @code{/nar} part to @var{path}.
12711
12712 @item --public-key=@var{file}
12713 @itemx --private-key=@var{file}
12714 Use the specific @var{file}s as the public/private key pair used to sign
12715 the store items being published.
12716
12717 The files must correspond to the same key pair (the private key is used
12718 for signing and the public key is merely advertised in the signature
12719 metadata). They must contain keys in the canonical s-expression format
12720 as produced by @command{guix archive --generate-key} (@pxref{Invoking
12721 guix archive}). By default, @file{/etc/guix/signing-key.pub} and
12722 @file{/etc/guix/signing-key.sec} are used.
12723
12724 @item --repl[=@var{port}]
12725 @itemx -r [@var{port}]
12726 Spawn a Guile REPL server (@pxref{REPL Servers,,, guile, GNU Guile
12727 Reference Manual}) on @var{port} (37146 by default). This is used
12728 primarily for debugging a running @command{guix publish} server.
12729 @end table
12730
12731 Enabling @command{guix publish} on Guix System is a one-liner: just
12732 instantiate a @code{guix-publish-service-type} service in the @code{services} field
12733 of the @code{operating-system} declaration (@pxref{guix-publish-service-type,
12734 @code{guix-publish-service-type}}).
12735
12736 If you are instead running Guix on a ``foreign distro'', follow these
12737 instructions:
12738
12739 @itemize
12740 @item
12741 If your host distro uses the systemd init system:
12742
12743 @example
12744 # ln -s ~root/.guix-profile/lib/systemd/system/guix-publish.service \
12745 /etc/systemd/system/
12746 # systemctl start guix-publish && systemctl enable guix-publish
12747 @end example
12748
12749 @item
12750 If your host distro uses the Upstart init system:
12751
12752 @example
12753 # ln -s ~root/.guix-profile/lib/upstart/system/guix-publish.conf /etc/init/
12754 # start guix-publish
12755 @end example
12756
12757 @item
12758 Otherwise, proceed similarly with your distro's init system.
12759 @end itemize
12760
12761 @node Invoking guix challenge
12762 @section Invoking @command{guix challenge}
12763
12764 @cindex reproducible builds
12765 @cindex verifiable builds
12766 @cindex @command{guix challenge}
12767 @cindex challenge
12768 Do the binaries provided by this server really correspond to the source
12769 code it claims to build? Is a package build process deterministic?
12770 These are the questions the @command{guix challenge} command attempts to
12771 answer.
12772
12773 The former is obviously an important question: Before using a substitute
12774 server (@pxref{Substitutes}), one had better @emph{verify} that it
12775 provides the right binaries, and thus @emph{challenge} it. The latter
12776 is what enables the former: If package builds are deterministic, then
12777 independent builds of the package should yield the exact same result,
12778 bit for bit; if a server provides a binary different from the one
12779 obtained locally, it may be either corrupt or malicious.
12780
12781 We know that the hash that shows up in @file{/gnu/store} file names is
12782 the hash of all the inputs of the process that built the file or
12783 directory---compilers, libraries, build scripts,
12784 etc. (@pxref{Introduction}). Assuming deterministic build processes,
12785 one store file name should map to exactly one build output.
12786 @command{guix challenge} checks whether there is, indeed, a single
12787 mapping by comparing the build outputs of several independent builds of
12788 any given store item.
12789
12790 The command output looks like this:
12791
12792 @smallexample
12793 $ guix challenge --substitute-urls="https://@value{SUBSTITUTE-SERVER} https://guix.example.org"
12794 updating list of substitutes from 'https://@value{SUBSTITUTE-SERVER}'... 100.0%
12795 updating list of substitutes from 'https://guix.example.org'... 100.0%
12796 /gnu/store/@dots{}-openssl-1.0.2d contents differ:
12797 local hash: 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
12798 https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-openssl-1.0.2d: 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
12799 https://guix.example.org/nar/@dots{}-openssl-1.0.2d: 1zy4fmaaqcnjrzzajkdn3f5gmjk754b43qkq47llbyak9z0qjyim
12800 differing files:
12801 /lib/libcrypto.so.1.1
12802 /lib/libssl.so.1.1
12803
12804 /gnu/store/@dots{}-git-2.5.0 contents differ:
12805 local hash: 00p3bmryhjxrhpn2gxs2fy0a15lnip05l97205pgbk5ra395hyha
12806 https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-git-2.5.0: 069nb85bv4d4a6slrwjdy8v1cn4cwspm3kdbmyb81d6zckj3nq9f
12807 https://guix.example.org/nar/@dots{}-git-2.5.0: 0mdqa9w1p6cmli6976v4wi0sw9r4p5prkj7lzfd1877wk11c9c73
12808 differing file:
12809 /libexec/git-core/git-fsck
12810
12811 /gnu/store/@dots{}-pius-2.1.1 contents differ:
12812 local hash: 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
12813 https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-pius-2.1.1: 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
12814 https://guix.example.org/nar/@dots{}-pius-2.1.1: 1cy25x1a4fzq5rk0pmvc8xhwyffnqz95h2bpvqsz2mpvlbccy0gs
12815 differing file:
12816 /share/man/man1/pius.1.gz
12817
12818 @dots{}
12819
12820 6,406 store items were analyzed:
12821 - 4,749 (74.1%) were identical
12822 - 525 (8.2%) differed
12823 - 1,132 (17.7%) were inconclusive
12824 @end smallexample
12825
12826 @noindent
12827 In this example, @command{guix challenge} first scans the store to
12828 determine the set of locally-built derivations---as opposed to store
12829 items that were downloaded from a substitute server---and then queries
12830 all the substitute servers. It then reports those store items for which
12831 the servers obtained a result different from the local build.
12832
12833 @cindex non-determinism, in package builds
12834 As an example, @code{guix.example.org} always gets a different answer.
12835 Conversely, @code{@value{SUBSTITUTE-SERVER}} agrees with local builds, except in the
12836 case of Git. This might indicate that the build process of Git is
12837 non-deterministic, meaning that its output varies as a function of
12838 various things that Guix does not fully control, in spite of building
12839 packages in isolated environments (@pxref{Features}). Most common
12840 sources of non-determinism include the addition of timestamps in build
12841 results, the inclusion of random numbers, and directory listings sorted
12842 by inode number. See @uref{https://reproducible-builds.org/docs/}, for
12843 more information.
12844
12845 To find out what is wrong with this Git binary, the easiest approach is
12846 to run:
12847
12848 @example
12849 guix challenge git \
12850 --diff=diffoscope \
12851 --substitute-urls="https://@value{SUBSTITUTE-SERVER} https://guix.example.org"
12852 @end example
12853
12854 This automatically invokes @command{diffoscope}, which displays detailed
12855 information about files that differ.
12856
12857 Alternatively, we can do something along these lines (@pxref{Invoking guix
12858 archive}):
12859
12860 @example
12861 $ wget -q -O - https://@value{SUBSTITUTE-SERVER}/nar/lzip/@dots{}-git-2.5.0 \
12862 | lzip -d | guix archive -x /tmp/git
12863 $ diff -ur --no-dereference /gnu/store/@dots{}-git.2.5.0 /tmp/git
12864 @end example
12865
12866 This command shows the difference between the files resulting from the
12867 local build, and the files resulting from the build on
12868 @code{@value{SUBSTITUTE-SERVER}} (@pxref{Overview, Comparing and Merging Files,,
12869 diffutils, Comparing and Merging Files}). The @command{diff} command
12870 works great for text files. When binary files differ, a better option
12871 is @uref{https://diffoscope.org/, Diffoscope}, a tool that helps
12872 visualize differences for all kinds of files.
12873
12874 Once you have done that work, you can tell whether the differences are due
12875 to a non-deterministic build process or to a malicious server. We try
12876 hard to remove sources of non-determinism in packages to make it easier
12877 to verify substitutes, but of course, this is a process that
12878 involves not just Guix, but a large part of the free software community.
12879 In the meantime, @command{guix challenge} is one tool to help address
12880 the problem.
12881
12882 If you are writing packages for Guix, you are encouraged to check
12883 whether @code{@value{SUBSTITUTE-SERVER}} and other substitute servers obtain the
12884 same build result as you did with:
12885
12886 @example
12887 $ guix challenge @var{package}
12888 @end example
12889
12890 @noindent
12891 where @var{package} is a package specification such as
12892 @code{guile@@2.0} or @code{glibc:debug}.
12893
12894 The general syntax is:
12895
12896 @example
12897 guix challenge @var{options} [@var{packages}@dots{}]
12898 @end example
12899
12900 When a difference is found between the hash of a locally-built item and
12901 that of a server-provided substitute, or among substitutes provided by
12902 different servers, the command displays it as in the example above and
12903 its exit code is 2 (other non-zero exit codes denote other kinds of
12904 errors).
12905
12906 The one option that matters is:
12907
12908 @table @code
12909
12910 @item --substitute-urls=@var{urls}
12911 Consider @var{urls} the whitespace-separated list of substitute source
12912 URLs to compare to.
12913
12914 @item --diff=@var{mode}
12915 Upon mismatches, show differences according to @var{mode}, one of:
12916
12917 @table @asis
12918 @item @code{simple} (the default)
12919 Show the list of files that differ.
12920
12921 @item @code{diffoscope}
12922 @itemx @var{command}
12923 Invoke @uref{https://diffoscope.org/, Diffoscope}, passing it
12924 two directories whose contents do not match.
12925
12926 When @var{command} is an absolute file name, run @var{command} instead
12927 of Diffoscope.
12928
12929 @item @code{none}
12930 Do not show further details about the differences.
12931 @end table
12932
12933 Thus, unless @option{--diff=none} is passed, @command{guix challenge}
12934 downloads the store items from the given substitute servers so that it
12935 can compare them.
12936
12937 @item --verbose
12938 @itemx -v
12939 Show details about matches (identical contents) in addition to
12940 information about mismatches.
12941
12942 @end table
12943
12944 @node Invoking guix copy
12945 @section Invoking @command{guix copy}
12946
12947 @cindex copy, of store items, over SSH
12948 @cindex SSH, copy of store items
12949 @cindex sharing store items across machines
12950 @cindex transferring store items across machines
12951 The @command{guix copy} command copies items from the store of one
12952 machine to that of another machine over a secure shell (SSH)
12953 connection@footnote{This command is available only when Guile-SSH was
12954 found. @xref{Requirements}, for details.}. For example, the following
12955 command copies the @code{coreutils} package, the user's profile, and all
12956 their dependencies over to @var{host}, logged in as @var{user}:
12957
12958 @example
12959 guix copy --to=@var{user}@@@var{host} \
12960 coreutils $(readlink -f ~/.guix-profile)
12961 @end example
12962
12963 If some of the items to be copied are already present on @var{host},
12964 they are not actually sent.
12965
12966 The command below retrieves @code{libreoffice} and @code{gimp} from
12967 @var{host}, assuming they are available there:
12968
12969 @example
12970 guix copy --from=@var{host} libreoffice gimp
12971 @end example
12972
12973 The SSH connection is established using the Guile-SSH client, which is
12974 compatible with OpenSSH: it honors @file{~/.ssh/known_hosts} and
12975 @file{~/.ssh/config}, and uses the SSH agent for authentication.
12976
12977 The key used to sign items that are sent must be accepted by the remote
12978 machine. Likewise, the key used by the remote machine to sign items you
12979 are retrieving must be in @file{/etc/guix/acl} so it is accepted by your
12980 own daemon. @xref{Invoking guix archive}, for more information about
12981 store item authentication.
12982
12983 The general syntax is:
12984
12985 @example
12986 guix copy [--to=@var{spec}|--from=@var{spec}] @var{items}@dots{}
12987 @end example
12988
12989 You must always specify one of the following options:
12990
12991 @table @code
12992 @item --to=@var{spec}
12993 @itemx --from=@var{spec}
12994 Specify the host to send to or receive from. @var{spec} must be an SSH
12995 spec such as @code{example.org}, @code{charlie@@example.org}, or
12996 @code{charlie@@example.org:2222}.
12997 @end table
12998
12999 The @var{items} can be either package names, such as @code{gimp}, or
13000 store items, such as @file{/gnu/store/@dots{}-idutils-4.6}.
13001
13002 When specifying the name of a package to send, it is first built if
13003 needed, unless @option{--dry-run} was specified. Common build options
13004 are supported (@pxref{Common Build Options}).
13005
13006
13007 @node Invoking guix container
13008 @section Invoking @command{guix container}
13009 @cindex container
13010 @cindex @command{guix container}
13011 @quotation Note
13012 As of version @value{VERSION}, this tool is experimental. The interface
13013 is subject to radical change in the future.
13014 @end quotation
13015
13016 The purpose of @command{guix container} is to manipulate processes
13017 running within an isolated environment, commonly known as a
13018 ``container'', typically created by the @command{guix environment}
13019 (@pxref{Invoking guix environment}) and @command{guix system container}
13020 (@pxref{Invoking guix system}) commands.
13021
13022 The general syntax is:
13023
13024 @example
13025 guix container @var{action} @var{options}@dots{}
13026 @end example
13027
13028 @var{action} specifies the operation to perform with a container, and
13029 @var{options} specifies the context-specific arguments for the action.
13030
13031 The following actions are available:
13032
13033 @table @code
13034 @item exec
13035 Execute a command within the context of a running container.
13036
13037 The syntax is:
13038
13039 @example
13040 guix container exec @var{pid} @var{program} @var{arguments}@dots{}
13041 @end example
13042
13043 @var{pid} specifies the process ID of the running container.
13044 @var{program} specifies an executable file name within the root file
13045 system of the container. @var{arguments} are the additional options that
13046 will be passed to @var{program}.
13047
13048 The following command launches an interactive login shell inside a
13049 Guix system container, started by @command{guix system container}, and whose
13050 process ID is 9001:
13051
13052 @example
13053 guix container exec 9001 /run/current-system/profile/bin/bash --login
13054 @end example
13055
13056 Note that the @var{pid} cannot be the parent process of a container. It
13057 must be PID 1 of the container or one of its child processes.
13058
13059 @end table
13060
13061 @node Invoking guix weather
13062 @section Invoking @command{guix weather}
13063
13064 Occasionally you're grumpy because substitutes are lacking and you end
13065 up building packages by yourself (@pxref{Substitutes}). The
13066 @command{guix weather} command reports on substitute availability on the
13067 specified servers so you can have an idea of whether you'll be grumpy
13068 today. It can sometimes be useful info as a user, but it is primarily
13069 useful to people running @command{guix publish} (@pxref{Invoking guix
13070 publish}).
13071
13072 @cindex statistics, for substitutes
13073 @cindex availability of substitutes
13074 @cindex substitute availability
13075 @cindex weather, substitute availability
13076 Here's a sample run:
13077
13078 @example
13079 $ guix weather --substitute-urls=https://guix.example.org
13080 computing 5,872 package derivations for x86_64-linux...
13081 looking for 6,128 store items on https://guix.example.org..
13082 updating list of substitutes from 'https://guix.example.org'... 100.0%
13083 https://guix.example.org
13084 43.4% substitutes available (2,658 out of 6,128)
13085 7,032.5 MiB of nars (compressed)
13086 19,824.2 MiB on disk (uncompressed)
13087 0.030 seconds per request (182.9 seconds in total)
13088 33.5 requests per second
13089
13090 9.8% (342 out of 3,470) of the missing items are queued
13091 867 queued builds
13092 x86_64-linux: 518 (59.7%)
13093 i686-linux: 221 (25.5%)
13094 aarch64-linux: 128 (14.8%)
13095 build rate: 23.41 builds per hour
13096 x86_64-linux: 11.16 builds per hour
13097 i686-linux: 6.03 builds per hour
13098 aarch64-linux: 6.41 builds per hour
13099 @end example
13100
13101 @cindex continuous integration, statistics
13102 As you can see, it reports the fraction of all the packages for which
13103 substitutes are available on the server---regardless of whether
13104 substitutes are enabled, and regardless of whether this server's signing
13105 key is authorized. It also reports the size of the compressed archives
13106 (``nars'') provided by the server, the size the corresponding store
13107 items occupy in the store (assuming deduplication is turned off), and
13108 the server's throughput. The second part gives continuous integration
13109 (CI) statistics, if the server supports it. In addition, using the
13110 @option{--coverage} option, @command{guix weather} can list ``important''
13111 package substitutes missing on the server (see below).
13112
13113 To achieve that, @command{guix weather} queries over HTTP(S) meta-data
13114 (@dfn{narinfos}) for all the relevant store items. Like @command{guix
13115 challenge}, it ignores signatures on those substitutes, which is
13116 innocuous since the command only gathers statistics and cannot install
13117 those substitutes.
13118
13119 The general syntax is:
13120
13121 @example
13122 guix weather @var{options}@dots{} [@var{packages}@dots{}]
13123 @end example
13124
13125 When @var{packages} is omitted, @command{guix weather} checks the availability
13126 of substitutes for @emph{all} the packages, or for those specified with
13127 @option{--manifest}; otherwise it only considers the specified packages. It
13128 is also possible to query specific system types with @option{--system}.
13129 @command{guix weather} exits with a non-zero code when the fraction of
13130 available substitutes is below 100%.
13131
13132 The available options are listed below.
13133
13134 @table @code
13135 @item --substitute-urls=@var{urls}
13136 @var{urls} is the space-separated list of substitute server URLs to
13137 query. When this option is omitted, the default set of substitute
13138 servers is queried.
13139
13140 @item --system=@var{system}
13141 @itemx -s @var{system}
13142 Query substitutes for @var{system}---e.g., @code{aarch64-linux}. This
13143 option can be repeated, in which case @command{guix weather} will query
13144 substitutes for several system types.
13145
13146 @item --manifest=@var{file}
13147 Instead of querying substitutes for all the packages, only ask for those
13148 specified in @var{file}. @var{file} must contain a @dfn{manifest}, as
13149 with the @code{-m} option of @command{guix package} (@pxref{Invoking
13150 guix package}).
13151
13152 This option can be repeated several times, in which case the manifests
13153 are concatenated.
13154
13155 @item --coverage[=@var{count}]
13156 @itemx -c [@var{count}]
13157 Report on substitute coverage for packages: list packages with at least
13158 @var{count} dependents (zero by default) for which substitutes are
13159 unavailable. Dependent packages themselves are not listed: if @var{b} depends
13160 on @var{a} and @var{a} has no substitutes, only @var{a} is listed, even though
13161 @var{b} usually lacks substitutes as well. The result looks like this:
13162
13163 @example
13164 $ guix weather --substitute-urls=@value{SUBSTITUTE-URL} -c 10
13165 computing 8,983 package derivations for x86_64-linux...
13166 looking for 9,343 store items on @value{SUBSTITUTE-URL}...
13167 updating substitutes from '@value{SUBSTITUTE-URL}'... 100.0%
13168 @value{SUBSTITUTE-URL}
13169 64.7% substitutes available (6,047 out of 9,343)
13170 @dots{}
13171 2502 packages are missing from '@value{SUBSTITUTE-URL}' for 'x86_64-linux', among which:
13172 58 kcoreaddons@@5.49.0 /gnu/store/@dots{}-kcoreaddons-5.49.0
13173 46 qgpgme@@1.11.1 /gnu/store/@dots{}-qgpgme-1.11.1
13174 37 perl-http-cookiejar@@0.008 /gnu/store/@dots{}-perl-http-cookiejar-0.008
13175 @dots{}
13176 @end example
13177
13178 What this example shows is that @code{kcoreaddons} and presumably the 58
13179 packages that depend on it have no substitutes at
13180 @code{@value{SUBSTITUTE-SERVER}}; likewise for @code{qgpgme} and the 46
13181 packages that depend on it.
13182
13183 If you are a Guix developer, or if you are taking care of this build farm,
13184 you'll probably want to have a closer look at these packages: they may simply
13185 fail to build.
13186
13187 @item --display-missing
13188 Display the list of store items for which substitutes are missing.
13189 @end table
13190
13191 @node Invoking guix processes
13192 @section Invoking @command{guix processes}
13193
13194 The @command{guix processes} command can be useful to developers and system
13195 administrators, especially on multi-user machines and on build farms: it lists
13196 the current sessions (connections to the daemon), as well as information about
13197 the processes involved@footnote{Remote sessions, when @command{guix-daemon} is
13198 started with @option{--listen} specifying a TCP endpoint, are @emph{not}
13199 listed.}. Here's an example of the information it returns:
13200
13201 @example
13202 $ sudo guix processes
13203 SessionPID: 19002
13204 ClientPID: 19090
13205 ClientCommand: guix environment --ad-hoc python
13206
13207 SessionPID: 19402
13208 ClientPID: 19367
13209 ClientCommand: guix publish -u guix-publish -p 3000 -C 9 @dots{}
13210
13211 SessionPID: 19444
13212 ClientPID: 19419
13213 ClientCommand: cuirass --cache-directory /var/cache/cuirass @dots{}
13214 LockHeld: /gnu/store/@dots{}-perl-ipc-cmd-0.96.lock
13215 LockHeld: /gnu/store/@dots{}-python-six-bootstrap-1.11.0.lock
13216 LockHeld: /gnu/store/@dots{}-libjpeg-turbo-2.0.0.lock
13217 ChildPID: 20495
13218 ChildCommand: guix offload x86_64-linux 7200 1 28800
13219 ChildPID: 27733
13220 ChildCommand: guix offload x86_64-linux 7200 1 28800
13221 ChildPID: 27793
13222 ChildCommand: guix offload x86_64-linux 7200 1 28800
13223 @end example
13224
13225 In this example we see that @command{guix-daemon} has three clients:
13226 @command{guix environment}, @command{guix publish}, and the Cuirass continuous
13227 integration tool; their process identifier (PID) is given by the
13228 @code{ClientPID} field. The @code{SessionPID} field gives the PID of the
13229 @command{guix-daemon} sub-process of this particular session.
13230
13231 The @code{LockHeld} fields show which store items are currently locked
13232 by this session, which corresponds to store items being built or
13233 substituted (the @code{LockHeld} field is not displayed when
13234 @command{guix processes} is not running as root). Last, by looking at
13235 the @code{ChildPID} and @code{ChildCommand} fields, we understand that
13236 these three builds are being offloaded (@pxref{Daemon Offload Setup}).
13237
13238 The output is in Recutils format so we can use the handy @command{recsel}
13239 command to select sessions of interest (@pxref{Selection Expressions,,,
13240 recutils, GNU recutils manual}). As an example, the command shows the command
13241 line and PID of the client that triggered the build of a Perl package:
13242
13243 @example
13244 $ sudo guix processes | \
13245 recsel -p ClientPID,ClientCommand -e 'LockHeld ~ "perl"'
13246 ClientPID: 19419
13247 ClientCommand: cuirass --cache-directory /var/cache/cuirass @dots{}
13248 @end example
13249
13250 Additional options are listed below.
13251
13252 @table @code
13253 @item --format=@var{format}
13254 @itemx -f @var{format}
13255 Produce output in the specified @var{format}, one of:
13256
13257 @table @code
13258 @item recutils
13259 The default option. It outputs a set of Session recutils records
13260 that include each @code{ChildProcess} as a field.
13261
13262 @item normalized
13263 Normalize the output records into record sets (@pxref{Record Sets,,,
13264 recutils, GNU recutils manual}). Normalizing into record sets allows
13265 joins across record types. The example below lists the PID of each
13266 @code{ChildProcess} and the associated PID for @code{Session} that
13267 spawned the @code{ChildProcess} where the @code{Session} was started
13268 using @command{guix build}.
13269
13270 @example
13271 $ guix processes --format=normalized | \
13272 recsel \
13273 -j Session \
13274 -t ChildProcess \
13275 -p Session.PID,PID \
13276 -e 'Session.ClientCommand ~ "guix build"'
13277 PID: 4435
13278 Session_PID: 4278
13279
13280 PID: 4554
13281 Session_PID: 4278
13282
13283 PID: 4646
13284 Session_PID: 4278
13285 @end example
13286 @end table
13287 @end table
13288
13289 @node System Configuration
13290 @chapter System Configuration
13291
13292 @cindex system configuration
13293 Guix System supports a consistent whole-system configuration
13294 mechanism. By that we mean that all aspects of the global system
13295 configuration---such as the available system services, timezone and
13296 locale settings, user accounts---are declared in a single place. Such
13297 a @dfn{system configuration} can be @dfn{instantiated}---i.e., effected.
13298
13299 One of the advantages of putting all the system configuration under the
13300 control of Guix is that it supports transactional system upgrades, and
13301 makes it possible to roll back to a previous system instantiation,
13302 should something go wrong with the new one (@pxref{Features}). Another
13303 advantage is that it makes it easy to replicate the exact same configuration
13304 across different machines, or at different points in time, without
13305 having to resort to additional administration tools layered on top of
13306 the own tools of the system.
13307 @c Yes, we're talking of Puppet, Chef, & co. here. ↑
13308
13309 This section describes this mechanism. First we focus on the system
13310 administrator's viewpoint---explaining how the system is configured and
13311 instantiated. Then we show how this mechanism can be extended, for
13312 instance to support new system services.
13313
13314 @menu
13315 * Using the Configuration System:: Customizing your GNU system.
13316 * operating-system Reference:: Detail of operating-system declarations.
13317 * File Systems:: Configuring file system mounts.
13318 * Mapped Devices:: Block device extra processing.
13319 * User Accounts:: Specifying user accounts.
13320 * Keyboard Layout:: How the system interprets key strokes.
13321 * Locales:: Language and cultural convention settings.
13322 * Services:: Specifying system services.
13323 * Setuid Programs:: Programs running with root privileges.
13324 * X.509 Certificates:: Authenticating HTTPS servers.
13325 * Name Service Switch:: Configuring libc's name service switch.
13326 * Initial RAM Disk:: Linux-Libre bootstrapping.
13327 * Bootloader Configuration:: Configuring the boot loader.
13328 * Invoking guix system:: Instantiating a system configuration.
13329 * Invoking guix deploy:: Deploying a system configuration to a remote host.
13330 * Running Guix in a VM:: How to run Guix System in a virtual machine.
13331 * Defining Services:: Adding new service definitions.
13332 @end menu
13333
13334 @node Using the Configuration System
13335 @section Using the Configuration System
13336
13337 The operating system is configured by providing an
13338 @code{operating-system} declaration in a file that can then be passed to
13339 the @command{guix system} command (@pxref{Invoking guix system}). A
13340 simple setup, with the default system services, the default Linux-Libre
13341 kernel, initial RAM disk, and boot loader looks like this:
13342
13343 @findex operating-system
13344 @lisp
13345 @include os-config-bare-bones.texi
13346 @end lisp
13347
13348 This example should be self-describing. Some of the fields defined
13349 above, such as @code{host-name} and @code{bootloader}, are mandatory.
13350 Others, such as @code{packages} and @code{services}, can be omitted, in
13351 which case they get a default value.
13352
13353 Below we discuss the effect of some of the most important fields
13354 (@pxref{operating-system Reference}, for details about all the available
13355 fields), and how to @dfn{instantiate} the operating system using
13356 @command{guix system}.
13357
13358 @unnumberedsubsec Bootloader
13359
13360 @cindex legacy boot, on Intel machines
13361 @cindex BIOS boot, on Intel machines
13362 @cindex UEFI boot
13363 @cindex EFI boot
13364 The @code{bootloader} field describes the method that will be used to boot
13365 your system. Machines based on Intel processors can boot in ``legacy'' BIOS
13366 mode, as in the example above. However, more recent machines rely instead on
13367 the @dfn{Unified Extensible Firmware Interface} (UEFI) to boot. In that case,
13368 the @code{bootloader} field should contain something along these lines:
13369
13370 @lisp
13371 (bootloader-configuration
13372 (bootloader grub-efi-bootloader)
13373 (target "/boot/efi"))
13374 @end lisp
13375
13376 @xref{Bootloader Configuration}, for more information on the available
13377 configuration options.
13378
13379 @unnumberedsubsec Globally-Visible Packages
13380
13381 @vindex %base-packages
13382 The @code{packages} field lists packages that will be globally visible
13383 on the system, for all user accounts---i.e., in every user's @env{PATH}
13384 environment variable---in addition to the per-user profiles
13385 (@pxref{Invoking guix package}). The @code{%base-packages} variable
13386 provides all the tools one would expect for basic user and administrator
13387 tasks---including the GNU Core Utilities, the GNU Networking Utilities,
13388 the GNU Zile lightweight text editor, @command{find}, @command{grep},
13389 etc. The example above adds GNU@tie{}Screen to those,
13390 taken from the @code{(gnu packages screen)}
13391 module (@pxref{Package Modules}). The
13392 @code{(list package output)} syntax can be used to add a specific output
13393 of a package:
13394
13395 @lisp
13396 (use-modules (gnu packages))
13397 (use-modules (gnu packages dns))
13398
13399 (operating-system
13400 ;; ...
13401 (packages (cons (list bind "utils")
13402 %base-packages)))
13403 @end lisp
13404
13405 @findex specification->package
13406 Referring to packages by variable name, like @code{bind} above, has
13407 the advantage of being unambiguous; it also allows typos and such to be
13408 diagnosed right away as ``unbound variables''. The downside is that one
13409 needs to know which module defines which package, and to augment the
13410 @code{use-package-modules} line accordingly. To avoid that, one can use
13411 the @code{specification->package} procedure of the @code{(gnu packages)}
13412 module, which returns the best package for a given name or name and
13413 version:
13414
13415 @lisp
13416 (use-modules (gnu packages))
13417
13418 (operating-system
13419 ;; ...
13420 (packages (append (map specification->package
13421 '("tcpdump" "htop" "gnupg@@2.0"))
13422 %base-packages)))
13423 @end lisp
13424
13425 @unnumberedsubsec System Services
13426
13427 @cindex services
13428 @vindex %base-services
13429 The @code{services} field lists @dfn{system services} to be made
13430 available when the system starts (@pxref{Services}).
13431 The @code{operating-system} declaration above specifies that, in
13432 addition to the basic services, we want the OpenSSH secure shell
13433 daemon listening on port 2222 (@pxref{Networking Services,
13434 @code{openssh-service-type}}). Under the hood,
13435 @code{openssh-service-type} arranges so that @command{sshd} is started with the
13436 right command-line options, possibly with supporting configuration files
13437 generated as needed (@pxref{Defining Services}).
13438
13439 @cindex customization, of services
13440 @findex modify-services
13441 Occasionally, instead of using the base services as is, you will want to
13442 customize them. To do this, use @code{modify-services} (@pxref{Service
13443 Reference, @code{modify-services}}) to modify the list.
13444
13445 For example, suppose you want to modify @code{guix-daemon} and Mingetty
13446 (the console log-in) in the @code{%base-services} list (@pxref{Base
13447 Services, @code{%base-services}}). To do that, you can write the
13448 following in your operating system declaration:
13449
13450 @lisp
13451 (define %my-services
13452 ;; My very own list of services.
13453 (modify-services %base-services
13454 (guix-service-type config =>
13455 (guix-configuration
13456 (inherit config)
13457 ;; Fetch substitutes from example.org.
13458 (substitute-urls
13459 (list "https://example.org/guix"
13460 "https://ci.guix.gnu.org"))))
13461 (mingetty-service-type config =>
13462 (mingetty-configuration
13463 (inherit config)
13464 ;; Automatially log in as "guest".
13465 (auto-login "guest")))))
13466
13467 (operating-system
13468 ;; @dots{}
13469 (services %my-services))
13470 @end lisp
13471
13472 This changes the configuration---i.e., the service parameters---of the
13473 @code{guix-service-type} instance, and that of all the
13474 @code{mingetty-service-type} instances in the @code{%base-services} list.
13475 Observe how this is accomplished: first, we arrange for the original
13476 configuration to be bound to the identifier @code{config} in the
13477 @var{body}, and then we write the @var{body} so that it evaluates to the
13478 desired configuration. In particular, notice how we use @code{inherit}
13479 to create a new configuration which has the same values as the old
13480 configuration, but with a few modifications.
13481
13482 @cindex encrypted disk
13483 The configuration for a typical ``desktop'' usage, with an encrypted
13484 root partition, the X11 display
13485 server, GNOME and Xfce (users can choose which of these desktop
13486 environments to use at the log-in screen by pressing @kbd{F1}), network
13487 management, power management, and more, would look like this:
13488
13489 @lisp
13490 @include os-config-desktop.texi
13491 @end lisp
13492
13493 A graphical system with a choice of lightweight window managers
13494 instead of full-blown desktop environments would look like this:
13495
13496 @lisp
13497 @include os-config-lightweight-desktop.texi
13498 @end lisp
13499
13500 This example refers to the @file{/boot/efi} file system by its UUID,
13501 @code{1234-ABCD}. Replace this UUID with the right UUID on your system,
13502 as returned by the @command{blkid} command.
13503
13504 @xref{Desktop Services}, for the exact list of services provided by
13505 @code{%desktop-services}. @xref{X.509 Certificates}, for background
13506 information about the @code{nss-certs} package that is used here.
13507
13508 Again, @code{%desktop-services} is just a list of service objects. If
13509 you want to remove services from there, you can do so using the
13510 procedures for list filtering (@pxref{SRFI-1 Filtering and
13511 Partitioning,,, guile, GNU Guile Reference Manual}). For instance, the
13512 following expression returns a list that contains all the services in
13513 @code{%desktop-services} minus the Avahi service:
13514
13515 @lisp
13516 (remove (lambda (service)
13517 (eq? (service-kind service) avahi-service-type))
13518 %desktop-services)
13519 @end lisp
13520
13521 Alternatively, the @code{modify-services} macro can be used:
13522
13523 @lisp
13524 (modify-services %desktop-services
13525 (delete avahi-service-type))
13526 @end lisp
13527
13528
13529 @unnumberedsubsec Instantiating the System
13530
13531 Assuming the @code{operating-system} declaration
13532 is stored in the @file{my-system-config.scm}
13533 file, the @command{guix system reconfigure my-system-config.scm} command
13534 instantiates that configuration, and makes it the default GRUB boot
13535 entry (@pxref{Invoking guix system}).
13536
13537 The normal way to change the system configuration is by updating this
13538 file and re-running @command{guix system reconfigure}. One should never
13539 have to touch files in @file{/etc} or to run commands that modify the
13540 system state such as @command{useradd} or @command{grub-install}. In
13541 fact, you must avoid that since that would not only void your warranty
13542 but also prevent you from rolling back to previous versions of your
13543 system, should you ever need to.
13544
13545 @cindex roll-back, of the operating system
13546 Speaking of roll-back, each time you run @command{guix system
13547 reconfigure}, a new @dfn{generation} of the system is created---without
13548 modifying or deleting previous generations. Old system generations get
13549 an entry in the bootloader boot menu, allowing you to boot them in case
13550 something went wrong with the latest generation. Reassuring, no? The
13551 @command{guix system list-generations} command lists the system
13552 generations available on disk. It is also possible to roll back the
13553 system via the commands @command{guix system roll-back} and
13554 @command{guix system switch-generation}.
13555
13556 Although the @command{guix system reconfigure} command will not modify
13557 previous generations, you must take care when the current generation is not
13558 the latest (e.g., after invoking @command{guix system roll-back}), since
13559 the operation might overwrite a later generation (@pxref{Invoking guix
13560 system}).
13561
13562 @unnumberedsubsec The Programming Interface
13563
13564 At the Scheme level, the bulk of an @code{operating-system} declaration
13565 is instantiated with the following monadic procedure (@pxref{The Store
13566 Monad}):
13567
13568 @deffn {Monadic Procedure} operating-system-derivation os
13569 Return a derivation that builds @var{os}, an @code{operating-system}
13570 object (@pxref{Derivations}).
13571
13572 The output of the derivation is a single directory that refers to all
13573 the packages, configuration files, and other supporting files needed to
13574 instantiate @var{os}.
13575 @end deffn
13576
13577 This procedure is provided by the @code{(gnu system)} module. Along
13578 with @code{(gnu services)} (@pxref{Services}), this module contains the
13579 guts of Guix System. Make sure to visit it!
13580
13581
13582 @node operating-system Reference
13583 @section @code{operating-system} Reference
13584
13585 This section summarizes all the options available in
13586 @code{operating-system} declarations (@pxref{Using the Configuration
13587 System}).
13588
13589 @deftp {Data Type} operating-system
13590 This is the data type representing an operating system configuration.
13591 By that, we mean all the global system configuration, not per-user
13592 configuration (@pxref{Using the Configuration System}).
13593
13594 @table @asis
13595 @item @code{kernel} (default: @code{linux-libre})
13596 The package object of the operating system kernel to
13597 use@footnote{Currently only the Linux-libre kernel is fully supported.
13598 Using GNU@tie{}mach with the GNU@tie{}Hurd is experimental and only
13599 available when building a virtual machine disk image.}.
13600
13601 @cindex hurd
13602 @item @code{hurd} (default: @code{#f})
13603 The package object of the Hurd to be started by the kernel. When this
13604 field is set, produce a GNU/Hurd operating system. In that case,
13605 @code{kernel} must also be set to the @code{gnumach} package---the
13606 microkernel the Hurd runs on.
13607
13608 @quotation Warning
13609 This feature is experimental and only supported for disk images.
13610 @end quotation
13611
13612 @item @code{kernel-loadable-modules} (default: '())
13613 A list of objects (usually packages) to collect loadable kernel modules
13614 from--e.g. @code{(list ddcci-driver-linux)}.
13615
13616 @item @code{kernel-arguments} (default: @code{%default-kernel-arguments})
13617 List of strings or gexps representing additional arguments to pass on
13618 the command-line of the kernel---e.g., @code{("console=ttyS0")}.
13619
13620 @item @code{bootloader}
13621 The system bootloader configuration object. @xref{Bootloader Configuration}.
13622
13623 @item @code{label}
13624 This is the label (a string) as it appears in the bootloader's menu entry.
13625 The default label includes the kernel name and version.
13626
13627 @item @code{keyboard-layout} (default: @code{#f})
13628 This field specifies the keyboard layout to use in the console. It can be
13629 either @code{#f}, in which case the default keyboard layout is used (usually
13630 US English), or a @code{<keyboard-layout>} record. @xref{Keyboard Layout},
13631 for more information.
13632
13633 This keyboard layout is in effect as soon as the kernel has booted. For
13634 instance, it is the keyboard layout in effect when you type a passphrase if
13635 your root file system is on a @code{luks-device-mapping} mapped device
13636 (@pxref{Mapped Devices}).
13637
13638 @quotation Note
13639 This does @emph{not} specify the keyboard layout used by the bootloader, nor
13640 that used by the graphical display server. @xref{Bootloader Configuration},
13641 for information on how to specify the bootloader's keyboard layout. @xref{X
13642 Window}, for information on how to specify the keyboard layout used by the X
13643 Window System.
13644 @end quotation
13645
13646 @item @code{initrd-modules} (default: @code{%base-initrd-modules})
13647 @cindex initrd
13648 @cindex initial RAM disk
13649 The list of Linux kernel modules that need to be available in the
13650 initial RAM disk. @xref{Initial RAM Disk}.
13651
13652 @item @code{initrd} (default: @code{base-initrd})
13653 A procedure that returns an initial RAM disk for the Linux
13654 kernel. This field is provided to support low-level customization and
13655 should rarely be needed for casual use. @xref{Initial RAM Disk}.
13656
13657 @item @code{firmware} (default: @code{%base-firmware})
13658 @cindex firmware
13659 List of firmware packages loadable by the operating system kernel.
13660
13661 The default includes firmware needed for Atheros- and Broadcom-based
13662 WiFi devices (Linux-libre modules @code{ath9k} and @code{b43-open},
13663 respectively). @xref{Hardware Considerations}, for more info on
13664 supported hardware.
13665
13666 @item @code{host-name}
13667 The host name.
13668
13669 @item @code{hosts-file}
13670 @cindex hosts file
13671 A file-like object (@pxref{G-Expressions, file-like objects}) for use as
13672 @file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C Library
13673 Reference Manual}). The default is a file with entries for
13674 @code{localhost} and @var{host-name}.
13675
13676 @item @code{mapped-devices} (default: @code{'()})
13677 A list of mapped devices. @xref{Mapped Devices}.
13678
13679 @item @code{file-systems}
13680 A list of file systems. @xref{File Systems}.
13681
13682 @cindex swap devices
13683 @cindex swap space
13684 @item @code{swap-devices} (default: @code{'()})
13685 A list of UUIDs, file system labels, or strings identifying devices or
13686 files to be used for ``swap
13687 space'' (@pxref{Memory Concepts,,, libc, The GNU C Library Reference
13688 Manual}). Here are some examples:
13689
13690 @table @code
13691 @item (list (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb"))
13692 Use the swap partition with the given UUID@. You can learn the UUID of a
13693 Linux swap partition by running @command{swaplabel @var{device}}, where
13694 @var{device} is the @file{/dev} file name of that partition.
13695
13696 @item (list (file-system-label "swap"))
13697 Use the partition with label @code{swap}. Again, the
13698 @command{swaplabel} command allows you to view and change the label of a
13699 Linux swap partition.
13700
13701 @item (list "/swapfile")
13702 Use the file @file{/swapfile} as swap space.
13703
13704 @item (list "/dev/sda3" "/dev/sdb2")
13705 Use the @file{/dev/sda3} and @file{/dev/sdb2} partitions as swap space.
13706 We recommend referring to swap devices by UUIDs or labels as shown above
13707 instead.
13708 @end table
13709
13710 It is possible to specify a swap file in a file system on a mapped
13711 device (under @file{/dev/mapper}), provided that the necessary device
13712 mapping and file system are also specified. @xref{Mapped Devices} and
13713 @ref{File Systems}.
13714
13715 @item @code{users} (default: @code{%base-user-accounts})
13716 @itemx @code{groups} (default: @code{%base-groups})
13717 List of user accounts and groups. @xref{User Accounts}.
13718
13719 If the @code{users} list lacks a user account with UID@tie{}0, a
13720 ``root'' account with UID@tie{}0 is automatically added.
13721
13722 @item @code{skeletons} (default: @code{(default-skeletons)})
13723 A list of target file name/file-like object tuples (@pxref{G-Expressions,
13724 file-like objects}). These are the skeleton files that will be added to
13725 the home directory of newly-created user accounts.
13726
13727 For instance, a valid value may look like this:
13728
13729 @lisp
13730 `((".bashrc" ,(plain-file "bashrc" "echo Hello\n"))
13731 (".guile" ,(plain-file "guile"
13732 "(use-modules (ice-9 readline))
13733 (activate-readline)")))
13734 @end lisp
13735
13736 @item @code{issue} (default: @code{%default-issue})
13737 A string denoting the contents of the @file{/etc/issue} file, which is
13738 displayed when users log in on a text console.
13739
13740 @item @code{packages} (default: @code{%base-packages})
13741 A list of packages to be installed in the global profile, which is accessible
13742 at @file{/run/current-system/profile}. Each element is either a package
13743 variable or a package/output tuple. Here's a simple example of both:
13744
13745 @lisp
13746 (cons* git ; the default "out" output
13747 (list git "send-email") ; another output of git
13748 %base-packages) ; the default set
13749 @end lisp
13750
13751 The default set includes core utilities and it is good practice to
13752 install non-core utilities in user profiles (@pxref{Invoking guix
13753 package}).
13754
13755 @item @code{timezone}
13756 A timezone identifying string---e.g., @code{"Europe/Paris"}.
13757
13758 You can run the @command{tzselect} command to find out which timezone
13759 string corresponds to your region. Choosing an invalid timezone name
13760 causes @command{guix system} to fail.
13761
13762 @item @code{locale} (default: @code{"en_US.utf8"})
13763 The name of the default locale (@pxref{Locale Names,,, libc, The GNU C
13764 Library Reference Manual}). @xref{Locales}, for more information.
13765
13766 @item @code{locale-definitions} (default: @code{%default-locale-definitions})
13767 The list of locale definitions to be compiled and that may be used at
13768 run time. @xref{Locales}.
13769
13770 @item @code{locale-libcs} (default: @code{(list @var{glibc})})
13771 The list of GNU@tie{}libc packages whose locale data and tools are used
13772 to build the locale definitions. @xref{Locales}, for compatibility
13773 considerations that justify this option.
13774
13775 @item @code{name-service-switch} (default: @code{%default-nss})
13776 Configuration of the libc name service switch (NSS)---a
13777 @code{<name-service-switch>} object. @xref{Name Service Switch}, for
13778 details.
13779
13780 @item @code{services} (default: @code{%base-services})
13781 A list of service objects denoting system services. @xref{Services}.
13782
13783 @cindex essential services
13784 @item @code{essential-services} (default: ...)
13785 The list of ``essential services''---i.e., things like instances of
13786 @code{system-service-type} and @code{host-name-service-type} (@pxref{Service
13787 Reference}), which are derived from the operating system definition itself.
13788 As a user you should @emph{never} need to touch this field.
13789
13790 @item @code{pam-services} (default: @code{(base-pam-services)})
13791 @cindex PAM
13792 @cindex pluggable authentication modules
13793 Linux @dfn{pluggable authentication module} (PAM) services.
13794 @c FIXME: Add xref to PAM services section.
13795
13796 @item @code{setuid-programs} (default: @code{%setuid-programs})
13797 List of string-valued G-expressions denoting setuid programs.
13798 @xref{Setuid Programs}.
13799
13800 @item @code{sudoers-file} (default: @code{%sudoers-specification})
13801 @cindex sudoers file
13802 The contents of the @file{/etc/sudoers} file as a file-like object
13803 (@pxref{G-Expressions, @code{local-file} and @code{plain-file}}).
13804
13805 This file specifies which users can use the @command{sudo} command, what
13806 they are allowed to do, and what privileges they may gain. The default
13807 is that only @code{root} and members of the @code{wheel} group may use
13808 @code{sudo}.
13809
13810 @end table
13811
13812 @deffn {Scheme Syntax} this-operating-system
13813 When used in the @emph{lexical scope} of an operating system field definition,
13814 this identifier resolves to the operating system being defined.
13815
13816 The example below shows how to refer to the operating system being defined in
13817 the definition of the @code{label} field:
13818
13819 @lisp
13820 (use-modules (gnu) (guix))
13821
13822 (operating-system
13823 ;; ...
13824 (label (package-full-name
13825 (operating-system-kernel this-operating-system))))
13826 @end lisp
13827
13828 It is an error to refer to @code{this-operating-system} outside an operating
13829 system definition.
13830 @end deffn
13831
13832 @end deftp
13833
13834 @node File Systems
13835 @section File Systems
13836
13837 The list of file systems to be mounted is specified in the
13838 @code{file-systems} field of the operating system declaration
13839 (@pxref{Using the Configuration System}). Each file system is declared
13840 using the @code{file-system} form, like this:
13841
13842 @lisp
13843 (file-system
13844 (mount-point "/home")
13845 (device "/dev/sda3")
13846 (type "ext4"))
13847 @end lisp
13848
13849 As usual, some of the fields are mandatory---those shown in the example
13850 above---while others can be omitted. These are described below.
13851
13852 @deftp {Data Type} file-system
13853 Objects of this type represent file systems to be mounted. They
13854 contain the following members:
13855
13856 @table @asis
13857 @item @code{type}
13858 This is a string specifying the type of the file system---e.g.,
13859 @code{"ext4"}.
13860
13861 @item @code{mount-point}
13862 This designates the place where the file system is to be mounted.
13863
13864 @item @code{device}
13865 This names the ``source'' of the file system. It can be one of three
13866 things: a file system label, a file system UUID, or the name of a
13867 @file{/dev} node. Labels and UUIDs offer a way to refer to file
13868 systems without having to hard-code their actual device
13869 name@footnote{Note that, while it is tempting to use
13870 @file{/dev/disk/by-uuid} and similar device names to achieve the same
13871 result, this is not recommended: These special device nodes are created
13872 by the udev daemon and may be unavailable at the time the device is
13873 mounted.}.
13874
13875 @findex file-system-label
13876 File system labels are created using the @code{file-system-label}
13877 procedure, UUIDs are created using @code{uuid}, and @file{/dev} node are
13878 plain strings. Here's an example of a file system referred to by its
13879 label, as shown by the @command{e2label} command:
13880
13881 @lisp
13882 (file-system
13883 (mount-point "/home")
13884 (type "ext4")
13885 (device (file-system-label "my-home")))
13886 @end lisp
13887
13888 @findex uuid
13889 UUIDs are converted from their string representation (as shown by the
13890 @command{tune2fs -l} command) using the @code{uuid} form@footnote{The
13891 @code{uuid} form expects 16-byte UUIDs as defined in
13892 @uref{https://tools.ietf.org/html/rfc4122, RFC@tie{}4122}. This is the
13893 form of UUID used by the ext2 family of file systems and others, but it
13894 is different from ``UUIDs'' found in FAT file systems, for instance.},
13895 like this:
13896
13897 @lisp
13898 (file-system
13899 (mount-point "/home")
13900 (type "ext4")
13901 (device (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")))
13902 @end lisp
13903
13904 When the source of a file system is a mapped device (@pxref{Mapped
13905 Devices}), its @code{device} field @emph{must} refer to the mapped
13906 device name---e.g., @file{"/dev/mapper/root-partition"}.
13907 This is required so that
13908 the system knows that mounting the file system depends on having the
13909 corresponding device mapping established.
13910
13911 @item @code{flags} (default: @code{'()})
13912 This is a list of symbols denoting mount flags. Recognized flags
13913 include @code{read-only}, @code{bind-mount}, @code{no-dev} (disallow
13914 access to special files), @code{no-suid} (ignore setuid and setgid
13915 bits), @code{no-atime} (do not update file access times),
13916 @code{strict-atime} (update file access time), @code{lazy-time} (only
13917 update time on the in-memory version of the file inode), and
13918 @code{no-exec} (disallow program execution).
13919 @xref{Mount-Unmount-Remount,,, libc, The GNU C Library Reference
13920 Manual}, for more information on these flags.
13921
13922 @item @code{options} (default: @code{#f})
13923 This is either @code{#f}, or a string denoting mount options passed to
13924 the file system driver. @xref{Mount-Unmount-Remount,,, libc, The GNU C
13925 Library Reference Manual}, for details and run @command{man 8 mount} for
13926 options for various file systems. Note that the
13927 @code{file-system-options->alist} and @code{alist->file-system-options}
13928 procedures from @code{(gnu system file-systems)} can be used to convert
13929 file system options given as an association list to the string
13930 representation, and vice-versa.
13931
13932 @item @code{mount?} (default: @code{#t})
13933 This value indicates whether to automatically mount the file system when
13934 the system is brought up. When set to @code{#f}, the file system gets
13935 an entry in @file{/etc/fstab} (read by the @command{mount} command) but
13936 is not automatically mounted.
13937
13938 @item @code{needed-for-boot?} (default: @code{#f})
13939 This Boolean value indicates whether the file system is needed when
13940 booting. If that is true, then the file system is mounted when the
13941 initial RAM disk (initrd) is loaded. This is always the case, for
13942 instance, for the root file system.
13943
13944 @item @code{check?} (default: @code{#t})
13945 This Boolean indicates whether the file system needs to be checked for
13946 errors before being mounted.
13947
13948 @item @code{create-mount-point?} (default: @code{#f})
13949 When true, the mount point is created if it does not exist yet.
13950
13951 @item @code{mount-may-fail?} (default: @code{#f})
13952 When true, this indicates that mounting this file system can fail but
13953 that should not be considered an error. This is useful in unusual
13954 cases; an example of this is @code{efivarfs}, a file system that can
13955 only be mounted on EFI/UEFI systems.
13956
13957 @item @code{dependencies} (default: @code{'()})
13958 This is a list of @code{<file-system>} or @code{<mapped-device>} objects
13959 representing file systems that must be mounted or mapped devices that
13960 must be opened before (and unmounted or closed after) this one.
13961
13962 As an example, consider a hierarchy of mounts: @file{/sys/fs/cgroup} is
13963 a dependency of @file{/sys/fs/cgroup/cpu} and
13964 @file{/sys/fs/cgroup/memory}.
13965
13966 Another example is a file system that depends on a mapped device, for
13967 example for an encrypted partition (@pxref{Mapped Devices}).
13968 @end table
13969 @end deftp
13970
13971 @deffn {Scheme Procedure} file-system-label @var{str}
13972 This procedure returns an opaque file system label from @var{str}, a
13973 string:
13974
13975 @lisp
13976 (file-system-label "home")
13977 @result{} #<file-system-label "home">
13978 @end lisp
13979
13980 File system labels are used to refer to file systems by label rather
13981 than by device name. See above for examples.
13982 @end deffn
13983
13984 The @code{(gnu system file-systems)} exports the following useful
13985 variables.
13986
13987 @defvr {Scheme Variable} %base-file-systems
13988 These are essential file systems that are required on normal systems,
13989 such as @code{%pseudo-terminal-file-system} and @code{%immutable-store} (see
13990 below). Operating system declarations should always contain at least
13991 these.
13992 @end defvr
13993
13994 @defvr {Scheme Variable} %pseudo-terminal-file-system
13995 This is the file system to be mounted as @file{/dev/pts}. It supports
13996 @dfn{pseudo-terminals} created @i{via} @code{openpty} and similar
13997 functions (@pxref{Pseudo-Terminals,,, libc, The GNU C Library Reference
13998 Manual}). Pseudo-terminals are used by terminal emulators such as
13999 @command{xterm}.
14000 @end defvr
14001
14002 @defvr {Scheme Variable} %shared-memory-file-system
14003 This file system is mounted as @file{/dev/shm} and is used to support
14004 memory sharing across processes (@pxref{Memory-mapped I/O,
14005 @code{shm_open},, libc, The GNU C Library Reference Manual}).
14006 @end defvr
14007
14008 @defvr {Scheme Variable} %immutable-store
14009 This file system performs a read-only ``bind mount'' of
14010 @file{/gnu/store}, making it read-only for all the users including
14011 @code{root}. This prevents against accidental modification by software
14012 running as @code{root} or by system administrators.
14013
14014 The daemon itself is still able to write to the store: it remounts it
14015 read-write in its own ``name space.''
14016 @end defvr
14017
14018 @defvr {Scheme Variable} %binary-format-file-system
14019 The @code{binfmt_misc} file system, which allows handling of arbitrary
14020 executable file types to be delegated to user space. This requires the
14021 @code{binfmt.ko} kernel module to be loaded.
14022 @end defvr
14023
14024 @defvr {Scheme Variable} %fuse-control-file-system
14025 The @code{fusectl} file system, which allows unprivileged users to mount
14026 and unmount user-space FUSE file systems. This requires the
14027 @code{fuse.ko} kernel module to be loaded.
14028 @end defvr
14029
14030 The @code{(gnu system uuid)} module provides tools to deal with file
14031 system ``unique identifiers'' (UUIDs).
14032
14033 @deffn {Scheme Procedure} uuid @var{str} [@var{type}]
14034 Return an opaque UUID (unique identifier) object of the given @var{type}
14035 (a symbol) by parsing @var{str} (a string):
14036
14037 @lisp
14038 (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")
14039 @result{} #<<uuid> type: dce bv: @dots{}>
14040
14041 (uuid "1234-ABCD" 'fat)
14042 @result{} #<<uuid> type: fat bv: @dots{}>
14043 @end lisp
14044
14045 @var{type} may be one of @code{dce}, @code{iso9660}, @code{fat},
14046 @code{ntfs}, or one of the commonly found synonyms for these.
14047
14048 UUIDs are another way to unambiguously refer to file systems in
14049 operating system configuration. See the examples above.
14050 @end deffn
14051
14052
14053 @node Btrfs file system
14054 @subsection Btrfs file system
14055
14056 The Btrfs has special features, such as subvolumes, that merit being
14057 explained in more details. The following section attempts to cover
14058 basic as well as complex uses of a Btrfs file system with the Guix
14059 System.
14060
14061 In its simplest usage, a Btrfs file system can be described, for
14062 example, by:
14063
14064 @lisp
14065 (file-system
14066 (mount-point "/home")
14067 (type "btrfs")
14068 (device (file-system-label "my-home")))
14069 @end lisp
14070
14071 The example below is more complex, as it makes use of a Btrfs
14072 subvolume, named @code{rootfs}. The parent Btrfs file system is labeled
14073 @code{my-btrfs-pool}, and is located on an encrypted device (hence the
14074 dependency on @code{mapped-devices}):
14075
14076 @lisp
14077 (file-system
14078 (device (file-system-label "my-btrfs-pool"))
14079 (mount-point "/")
14080 (type "btrfs")
14081 (options "subvol=rootfs")
14082 (dependencies mapped-devices))
14083 @end lisp
14084
14085 Some bootloaders, for example GRUB, only mount a Btrfs partition at its
14086 top level during the early boot, and rely on their configuration to
14087 refer to the correct subvolume path within that top level. The
14088 bootloaders operating in this way typically produce their configuration
14089 on a running system where the Btrfs partitions are already mounted and
14090 where the subvolume information is readily available. As an example,
14091 @command{grub-mkconfig}, the configuration generator command shipped
14092 with GRUB, reads @file{/proc/self/mountinfo} to determine the top-level
14093 path of a subvolume.
14094
14095 The Guix System produces a bootloader configuration using the operating
14096 system configuration as its sole input; it is therefore necessary to
14097 extract the subvolume name on which @file{/gnu/store} lives (if any)
14098 from that operating system configuration. To better illustrate,
14099 consider a subvolume named 'rootfs' which contains the root file system
14100 data. In such situation, the GRUB bootloader would only see the top
14101 level of the root Btrfs partition, e.g.:
14102
14103 @example
14104 / (top level)
14105 ├── rootfs (subvolume directory)
14106 ├── gnu (normal directory)
14107 ├── store (normal directory)
14108 [...]
14109 @end example
14110
14111 Thus, the subvolume name must be prepended to the @file{/gnu/store} path
14112 of the kernel, initrd binaries and any other files referred to in the
14113 GRUB configuration that must be found during the early boot.
14114
14115 The next example shows a nested hierarchy of subvolumes and
14116 directories:
14117
14118 @example
14119 / (top level)
14120 ├── rootfs (subvolume)
14121 ├── gnu (normal directory)
14122 ├── store (subvolume)
14123 [...]
14124 @end example
14125
14126 This scenario would work without mounting the 'store' subvolume.
14127 Mounting 'rootfs' is sufficient, since the subvolume name matches its
14128 intended mount point in the file system hierarchy. Alternatively, the
14129 'store' subvolume could be referred to by setting the @code{subvol}
14130 option to either @code{/rootfs/gnu/store} or @code{rootfs/gnu/store}.
14131
14132 Finally, a more contrived example of nested subvolumes:
14133
14134 @example
14135 / (top level)
14136 ├── root-snapshots (subvolume)
14137 ├── root-current (subvolume)
14138 ├── guix-store (subvolume)
14139 [...]
14140 @end example
14141
14142 Here, the 'guix-store' subvolume doesn't match its intended mount point,
14143 so it is necessary to mount it. The subvolume must be fully specified,
14144 by passing its file name to the @code{subvol} option. To illustrate,
14145 the 'guix-store' subvolume could be mounted on @file{/gnu/store} by using
14146 a file system declaration such as:
14147
14148 @lisp
14149 (file-system
14150 (device (file-system-label "btrfs-pool-1"))
14151 (mount-point "/gnu/store")
14152 (type "btrfs")
14153 (options "subvol=root-snapshots/root-current/guix-store,\
14154 compress-force=zstd,space_cache=v2"))
14155 @end lisp
14156
14157 @node Mapped Devices
14158 @section Mapped Devices
14159
14160 @cindex device mapping
14161 @cindex mapped devices
14162 The Linux kernel has a notion of @dfn{device mapping}: a block device,
14163 such as a hard disk partition, can be @dfn{mapped} into another device,
14164 usually in @code{/dev/mapper/},
14165 with additional processing over the data that flows through
14166 it@footnote{Note that the GNU@tie{}Hurd makes no difference between the
14167 concept of a ``mapped device'' and that of a file system: both boil down
14168 to @emph{translating} input/output operations made on a file to
14169 operations on its backing store. Thus, the Hurd implements mapped
14170 devices, like file systems, using the generic @dfn{translator} mechanism
14171 (@pxref{Translators,,, hurd, The GNU Hurd Reference Manual}).}. A
14172 typical example is encryption device mapping: all writes to the mapped
14173 device are encrypted, and all reads are deciphered, transparently.
14174 Guix extends this notion by considering any device or set of devices that
14175 are @dfn{transformed} in some way to create a new device; for instance,
14176 RAID devices are obtained by @dfn{assembling} several other devices, such
14177 as hard disks or partitions, into a new one that behaves as one partition.
14178
14179 Mapped devices are declared using the @code{mapped-device} form,
14180 defined as follows; for examples, see below.
14181
14182 @deftp {Data Type} mapped-device
14183 Objects of this type represent device mappings that will be made when
14184 the system boots up.
14185
14186 @table @code
14187 @item source
14188 This is either a string specifying the name of the block device to be mapped,
14189 such as @code{"/dev/sda3"}, or a list of such strings when several devices
14190 need to be assembled for creating a new one. In case of LVM this is a
14191 string specifying name of the volume group to be mapped.
14192
14193 @item target
14194 This string specifies the name of the resulting mapped device. For
14195 kernel mappers such as encrypted devices of type @code{luks-device-mapping},
14196 specifying @code{"my-partition"} leads to the creation of
14197 the @code{"/dev/mapper/my-partition"} device.
14198 For RAID devices of type @code{raid-device-mapping}, the full device name
14199 such as @code{"/dev/md0"} needs to be given.
14200 LVM logical volumes of type @code{lvm-device-mapping} need to
14201 be specified as @code{"VGNAME-LVNAME"}.
14202
14203 @item targets
14204 This list of strings specifies names of the resulting mapped devices in case
14205 there are several. The format is identical to @var{target}.
14206
14207 @item type
14208 This must be a @code{mapped-device-kind} object, which specifies how
14209 @var{source} is mapped to @var{target}.
14210 @end table
14211 @end deftp
14212
14213 @defvr {Scheme Variable} luks-device-mapping
14214 This defines LUKS block device encryption using the @command{cryptsetup}
14215 command from the package with the same name. It relies on the
14216 @code{dm-crypt} Linux kernel module.
14217 @end defvr
14218
14219 @defvr {Scheme Variable} raid-device-mapping
14220 This defines a RAID device, which is assembled using the @code{mdadm}
14221 command from the package with the same name. It requires a Linux kernel
14222 module for the appropriate RAID level to be loaded, such as @code{raid456}
14223 for RAID-4, RAID-5 or RAID-6, or @code{raid10} for RAID-10.
14224 @end defvr
14225
14226 @cindex LVM, logical volume manager
14227 @defvr {Scheme Variable} lvm-device-mapping
14228 This defines one or more logical volumes for the Linux
14229 @uref{https://www.sourceware.org/lvm2/, Logical Volume Manager (LVM)}.
14230 The volume group is activated by the @command{vgchange} command from the
14231 @code{lvm2} package.
14232 @end defvr
14233
14234 @cindex disk encryption
14235 @cindex LUKS
14236 The following example specifies a mapping from @file{/dev/sda3} to
14237 @file{/dev/mapper/home} using LUKS---the
14238 @url{https://gitlab.com/cryptsetup/cryptsetup,Linux Unified Key Setup}, a
14239 standard mechanism for disk encryption.
14240 The @file{/dev/mapper/home}
14241 device can then be used as the @code{device} of a @code{file-system}
14242 declaration (@pxref{File Systems}).
14243
14244 @lisp
14245 (mapped-device
14246 (source "/dev/sda3")
14247 (target "home")
14248 (type luks-device-mapping))
14249 @end lisp
14250
14251 Alternatively, to become independent of device numbering, one may obtain
14252 the LUKS UUID (@dfn{unique identifier}) of the source device by a
14253 command like:
14254
14255 @example
14256 cryptsetup luksUUID /dev/sda3
14257 @end example
14258
14259 and use it as follows:
14260
14261 @lisp
14262 (mapped-device
14263 (source (uuid "cb67fc72-0d54-4c88-9d4b-b225f30b0f44"))
14264 (target "home")
14265 (type luks-device-mapping))
14266 @end lisp
14267
14268 @cindex swap encryption
14269 It is also desirable to encrypt swap space, since swap space may contain
14270 sensitive data. One way to accomplish that is to use a swap file in a
14271 file system on a device mapped via LUKS encryption. In this way, the
14272 swap file is encrypted because the entire device is encrypted.
14273 @xref{Preparing for Installation,,Disk Partitioning}, for an example.
14274
14275 A RAID device formed of the partitions @file{/dev/sda1} and @file{/dev/sdb1}
14276 may be declared as follows:
14277
14278 @lisp
14279 (mapped-device
14280 (source (list "/dev/sda1" "/dev/sdb1"))
14281 (target "/dev/md0")
14282 (type raid-device-mapping))
14283 @end lisp
14284
14285 The @file{/dev/md0} device can then be used as the @code{device} of a
14286 @code{file-system} declaration (@pxref{File Systems}).
14287 Note that the RAID level need not be given; it is chosen during the
14288 initial creation and formatting of the RAID device and is determined
14289 automatically later.
14290
14291 LVM logical volumes ``alpha'' and ``beta'' from volume group ``vg0'' can
14292 be declared as follows:
14293
14294 @lisp
14295 (mapped-device
14296 (source "vg0")
14297 (targets (list "vg0-alpha" "vg0-beta"))
14298 (type lvm-device-mapping))
14299 @end lisp
14300
14301 Devices @file{/dev/mapper/vg0-alpha} and @file{/dev/mapper/vg0-beta} can
14302 then be used as the @code{device} of a @code{file-system} declaration
14303 (@pxref{File Systems}).
14304
14305 @node User Accounts
14306 @section User Accounts
14307
14308 @cindex users
14309 @cindex accounts
14310 @cindex user accounts
14311 User accounts and groups are entirely managed through the
14312 @code{operating-system} declaration. They are specified with the
14313 @code{user-account} and @code{user-group} forms:
14314
14315 @lisp
14316 (user-account
14317 (name "alice")
14318 (group "users")
14319 (supplementary-groups '("wheel" ;allow use of sudo, etc.
14320 "audio" ;sound card
14321 "video" ;video devices such as webcams
14322 "cdrom")) ;the good ol' CD-ROM
14323 (comment "Bob's sister"))
14324 @end lisp
14325
14326 Here's a user account that uses a different shell and a custom home
14327 directory (the default would be @file{"/home/bob"}):
14328
14329 @lisp
14330 (user-account
14331 (name "bob")
14332 (group "users")
14333 (comment "Alice's bro")
14334 (shell (file-append zsh "/bin/zsh"))
14335 (home-directory "/home/robert"))
14336 @end lisp
14337
14338 When booting or upon completion of @command{guix system reconfigure},
14339 the system ensures that only the user accounts and groups specified in
14340 the @code{operating-system} declaration exist, and with the specified
14341 properties. Thus, account or group creations or modifications made by
14342 directly invoking commands such as @command{useradd} are lost upon
14343 reconfiguration or reboot. This ensures that the system remains exactly
14344 as declared.
14345
14346 @deftp {Data Type} user-account
14347 Objects of this type represent user accounts. The following members may
14348 be specified:
14349
14350 @table @asis
14351 @item @code{name}
14352 The name of the user account.
14353
14354 @item @code{group}
14355 @cindex groups
14356 This is the name (a string) or identifier (a number) of the user group
14357 this account belongs to.
14358
14359 @item @code{supplementary-groups} (default: @code{'()})
14360 Optionally, this can be defined as a list of group names that this
14361 account belongs to.
14362
14363 @item @code{uid} (default: @code{#f})
14364 This is the user ID for this account (a number), or @code{#f}. In the
14365 latter case, a number is automatically chosen by the system when the
14366 account is created.
14367
14368 @item @code{comment} (default: @code{""})
14369 A comment about the account, such as the account owner's full name.
14370
14371 @item @code{home-directory}
14372 This is the name of the home directory for the account.
14373
14374 @item @code{create-home-directory?} (default: @code{#t})
14375 Indicates whether the home directory of this account should be created
14376 if it does not exist yet.
14377
14378 @item @code{shell} (default: Bash)
14379 This is a G-expression denoting the file name of a program to be used as
14380 the shell (@pxref{G-Expressions}). For example, you would refer to the
14381 Bash executable like this:
14382
14383 @lisp
14384 (file-append bash "/bin/bash")
14385 @end lisp
14386
14387 @noindent
14388 ... and to the Zsh executable like that:
14389
14390 @lisp
14391 (file-append zsh "/bin/zsh")
14392 @end lisp
14393
14394 @item @code{system?} (default: @code{#f})
14395 This Boolean value indicates whether the account is a ``system''
14396 account. System accounts are sometimes treated specially; for instance,
14397 graphical login managers do not list them.
14398
14399 @anchor{user-account-password}
14400 @cindex password, for user accounts
14401 @item @code{password} (default: @code{#f})
14402 You would normally leave this field to @code{#f}, initialize user
14403 passwords as @code{root} with the @command{passwd} command, and then let
14404 users change it with @command{passwd}. Passwords set with
14405 @command{passwd} are of course preserved across reboot and
14406 reconfiguration.
14407
14408 If you @emph{do} want to set an initial password for an account, then
14409 this field must contain the encrypted password, as a string. You can use the
14410 @code{crypt} procedure for this purpose:
14411
14412 @lisp
14413 (user-account
14414 (name "charlie")
14415 (group "users")
14416
14417 ;; Specify a SHA-512-hashed initial password.
14418 (password (crypt "InitialPassword!" "$6$abc")))
14419 @end lisp
14420
14421 @quotation Note
14422 The hash of this initial password will be available in a file in
14423 @file{/gnu/store}, readable by all the users, so this method must be used with
14424 care.
14425 @end quotation
14426
14427 @xref{Passphrase Storage,,, libc, The GNU C Library Reference Manual}, for
14428 more information on password encryption, and @ref{Encryption,,, guile, GNU
14429 Guile Reference Manual}, for information on Guile's @code{crypt} procedure.
14430
14431 @end table
14432 @end deftp
14433
14434 @cindex groups
14435 User group declarations are even simpler:
14436
14437 @lisp
14438 (user-group (name "students"))
14439 @end lisp
14440
14441 @deftp {Data Type} user-group
14442 This type is for, well, user groups. There are just a few fields:
14443
14444 @table @asis
14445 @item @code{name}
14446 The name of the group.
14447
14448 @item @code{id} (default: @code{#f})
14449 The group identifier (a number). If @code{#f}, a new number is
14450 automatically allocated when the group is created.
14451
14452 @item @code{system?} (default: @code{#f})
14453 This Boolean value indicates whether the group is a ``system'' group.
14454 System groups have low numerical IDs.
14455
14456 @item @code{password} (default: @code{#f})
14457 What, user groups can have a password? Well, apparently yes. Unless
14458 @code{#f}, this field specifies the password of the group.
14459
14460 @end table
14461 @end deftp
14462
14463 For convenience, a variable lists all the basic user groups one may
14464 expect:
14465
14466 @defvr {Scheme Variable} %base-groups
14467 This is the list of basic user groups that users and/or packages expect
14468 to be present on the system. This includes groups such as ``root'',
14469 ``wheel'', and ``users'', as well as groups used to control access to
14470 specific devices such as ``audio'', ``disk'', and ``cdrom''.
14471 @end defvr
14472
14473 @defvr {Scheme Variable} %base-user-accounts
14474 This is the list of basic system accounts that programs may expect to
14475 find on a GNU/Linux system, such as the ``nobody'' account.
14476
14477 Note that the ``root'' account is not included here. It is a
14478 special-case and is automatically added whether or not it is specified.
14479 @end defvr
14480
14481 @node Keyboard Layout
14482 @section Keyboard Layout
14483
14484 @cindex keyboard layout
14485 @cindex keymap
14486 To specify what each key of your keyboard does, you need to tell the operating
14487 system what @dfn{keyboard layout} you want to use. The default, when nothing
14488 is specified, is the US English QWERTY layout for 105-key PC keyboards.
14489 However, German speakers will usually prefer the German QWERTZ layout, French
14490 speakers will want the AZERTY layout, and so on; hackers might prefer Dvorak
14491 or bépo, and they might even want to further customize the effect of some of
14492 the keys. This section explains how to get that done.
14493
14494 @cindex keyboard layout, definition
14495 There are three components that will want to know about your keyboard layout:
14496
14497 @itemize
14498 @item
14499 The @emph{bootloader} may want to know what keyboard layout you want to use
14500 (@pxref{Bootloader Configuration, @code{keyboard-layout}}). This is useful if
14501 you want, for instance, to make sure that you can type the passphrase of your
14502 encrypted root partition using the right layout.
14503
14504 @item
14505 The @emph{operating system kernel}, Linux, will need that so that the console
14506 is properly configured (@pxref{operating-system Reference,
14507 @code{keyboard-layout}}).
14508
14509 @item
14510 The @emph{graphical display server}, usually Xorg, also has its own idea of
14511 the keyboard layout (@pxref{X Window, @code{keyboard-layout}}).
14512 @end itemize
14513
14514 Guix allows you to configure all three separately but, fortunately, it allows
14515 you to share the same keyboard layout for all three components.
14516
14517 @cindex XKB, keyboard layouts
14518 Keyboard layouts are represented by records created by the
14519 @code{keyboard-layout} procedure of @code{(gnu system keyboard)}. Following
14520 the X Keyboard extension (XKB), each layout has four attributes: a name (often
14521 a language code such as ``fi'' for Finnish or ``jp'' for Japanese), an
14522 optional variant name, an optional keyboard model name, and a possibly empty
14523 list of additional options. In most cases the layout name is all you care
14524 about.
14525
14526 @deffn {Scheme Procedure} keyboard-layout @var{name} [@var{variant}] @
14527 [#:model] [#:options '()]
14528 Return a new keyboard layout with the given @var{name} and @var{variant}.
14529
14530 @var{name} must be a string such as @code{"fr"}; @var{variant} must be a
14531 string such as @code{"bepo"} or @code{"nodeadkeys"}. See the
14532 @code{xkeyboard-config} package for valid options.
14533 @end deffn
14534
14535 Here are a few examples:
14536
14537 @lisp
14538 ;; The German QWERTZ layout. Here we assume a standard
14539 ;; "pc105" keyboard model.
14540 (keyboard-layout "de")
14541
14542 ;; The bépo variant of the French layout.
14543 (keyboard-layout "fr" "bepo")
14544
14545 ;; The Catalan layout.
14546 (keyboard-layout "es" "cat")
14547
14548 ;; Arabic layout with "Alt-Shift" to switch to US layout.
14549 (keyboard-layout "ar,us" #:options '("grp:alt_shift_toggle"))
14550
14551 ;; The Latin American Spanish layout. In addition, the
14552 ;; "Caps Lock" key is used as an additional "Ctrl" key,
14553 ;; and the "Menu" key is used as a "Compose" key to enter
14554 ;; accented letters.
14555 (keyboard-layout "latam"
14556 #:options '("ctrl:nocaps" "compose:menu"))
14557
14558 ;; The Russian layout for a ThinkPad keyboard.
14559 (keyboard-layout "ru" #:model "thinkpad")
14560
14561 ;; The "US international" layout, which is the US layout plus
14562 ;; dead keys to enter accented characters. This is for an
14563 ;; Apple MacBook keyboard.
14564 (keyboard-layout "us" "intl" #:model "macbook78")
14565 @end lisp
14566
14567 See the @file{share/X11/xkb} directory of the @code{xkeyboard-config} package
14568 for a complete list of supported layouts, variants, and models.
14569
14570 @cindex keyboard layout, configuration
14571 Let's say you want your system to use the Turkish keyboard layout throughout
14572 your system---bootloader, console, and Xorg. Here's what your system
14573 configuration would look like:
14574
14575 @findex set-xorg-configuration
14576 @lisp
14577 ;; Using the Turkish layout for the bootloader, the console,
14578 ;; and for Xorg.
14579
14580 (operating-system
14581 ;; ...
14582 (keyboard-layout (keyboard-layout "tr")) ;for the console
14583 (bootloader (bootloader-configuration
14584 (bootloader grub-efi-bootloader)
14585 (target "/boot/efi")
14586 (keyboard-layout keyboard-layout))) ;for GRUB
14587 (services (cons (set-xorg-configuration
14588 (xorg-configuration ;for Xorg
14589 (keyboard-layout keyboard-layout)))
14590 %desktop-services)))
14591 @end lisp
14592
14593 In the example above, for GRUB and for Xorg, we just refer to the
14594 @code{keyboard-layout} field defined above, but we could just as well refer to
14595 a different layout. The @code{set-xorg-configuration} procedure communicates
14596 the desired Xorg configuration to the graphical log-in manager, by default
14597 GDM.
14598
14599 We've discussed how to specify the @emph{default} keyboard layout of your
14600 system when it starts, but you can also adjust it at run time:
14601
14602 @itemize
14603 @item
14604 If you're using GNOME, its settings panel has a ``Region & Language'' entry
14605 where you can select one or more keyboard layouts.
14606
14607 @item
14608 Under Xorg, the @command{setxkbmap} command (from the same-named package)
14609 allows you to change the current layout. For example, this is how you would
14610 change the layout to US Dvorak:
14611
14612 @example
14613 setxkbmap us dvorak
14614 @end example
14615
14616 @item
14617 The @code{loadkeys} command changes the keyboard layout in effect in the Linux
14618 console. However, note that @code{loadkeys} does @emph{not} use the XKB
14619 keyboard layout categorization described above. The command below loads the
14620 French bépo layout:
14621
14622 @example
14623 loadkeys fr-bepo
14624 @end example
14625 @end itemize
14626
14627 @node Locales
14628 @section Locales
14629
14630 @cindex locale
14631 A @dfn{locale} defines cultural conventions for a particular language
14632 and region of the world (@pxref{Locales,,, libc, The GNU C Library
14633 Reference Manual}). Each locale has a name that typically has the form
14634 @code{@var{language}_@var{territory}.@var{codeset}}---e.g.,
14635 @code{fr_LU.utf8} designates the locale for the French language, with
14636 cultural conventions from Luxembourg, and using the UTF-8 encoding.
14637
14638 @cindex locale definition
14639 Usually, you will want to specify the default locale for the machine
14640 using the @code{locale} field of the @code{operating-system} declaration
14641 (@pxref{operating-system Reference, @code{locale}}).
14642
14643 The selected locale is automatically added to the @dfn{locale
14644 definitions} known to the system if needed, with its codeset inferred
14645 from its name---e.g., @code{bo_CN.utf8} will be assumed to use the
14646 @code{UTF-8} codeset. Additional locale definitions can be specified in
14647 the @code{locale-definitions} slot of @code{operating-system}---this is
14648 useful, for instance, if the codeset could not be inferred from the
14649 locale name. The default set of locale definitions includes some widely
14650 used locales, but not all the available locales, in order to save space.
14651
14652 For instance, to add the North Frisian locale for Germany, the value of
14653 that field may be:
14654
14655 @lisp
14656 (cons (locale-definition
14657 (name "fy_DE.utf8") (source "fy_DE"))
14658 %default-locale-definitions)
14659 @end lisp
14660
14661 Likewise, to save space, one might want @code{locale-definitions} to
14662 list only the locales that are actually used, as in:
14663
14664 @lisp
14665 (list (locale-definition
14666 (name "ja_JP.eucjp") (source "ja_JP")
14667 (charset "EUC-JP")))
14668 @end lisp
14669
14670 @vindex LOCPATH
14671 The compiled locale definitions are available at
14672 @file{/run/current-system/locale/X.Y}, where @code{X.Y} is the libc
14673 version, which is the default location where the GNU@tie{}libc provided
14674 by Guix looks for locale data. This can be overridden using the
14675 @env{LOCPATH} environment variable (@pxref{locales-and-locpath,
14676 @env{LOCPATH} and locale packages}).
14677
14678 The @code{locale-definition} form is provided by the @code{(gnu system
14679 locale)} module. Details are given below.
14680
14681 @deftp {Data Type} locale-definition
14682 This is the data type of a locale definition.
14683
14684 @table @asis
14685
14686 @item @code{name}
14687 The name of the locale. @xref{Locale Names,,, libc, The GNU C Library
14688 Reference Manual}, for more information on locale names.
14689
14690 @item @code{source}
14691 The name of the source for that locale. This is typically the
14692 @code{@var{language}_@var{territory}} part of the locale name.
14693
14694 @item @code{charset} (default: @code{"UTF-8"})
14695 The ``character set'' or ``code set'' for that locale,
14696 @uref{https://www.iana.org/assignments/character-sets, as defined by
14697 IANA}.
14698
14699 @end table
14700 @end deftp
14701
14702 @defvr {Scheme Variable} %default-locale-definitions
14703 A list of commonly used UTF-8 locales, used as the default
14704 value of the @code{locale-definitions} field of @code{operating-system}
14705 declarations.
14706
14707 @cindex locale name
14708 @cindex normalized codeset in locale names
14709 These locale definitions use the @dfn{normalized codeset} for the part
14710 that follows the dot in the name (@pxref{Using gettextized software,
14711 normalized codeset,, libc, The GNU C Library Reference Manual}). So for
14712 instance it has @code{uk_UA.utf8} but @emph{not}, say,
14713 @code{uk_UA.UTF-8}.
14714 @end defvr
14715
14716 @subsection Locale Data Compatibility Considerations
14717
14718 @cindex incompatibility, of locale data
14719 @code{operating-system} declarations provide a @code{locale-libcs} field
14720 to specify the GNU@tie{}libc packages that are used to compile locale
14721 declarations (@pxref{operating-system Reference}). ``Why would I
14722 care?'', you may ask. Well, it turns out that the binary format of
14723 locale data is occasionally incompatible from one libc version to
14724 another.
14725
14726 @c See <https://sourceware.org/ml/libc-alpha/2015-09/msg00575.html>
14727 @c and <https://lists.gnu.org/archive/html/guix-devel/2015-08/msg00737.html>.
14728 For instance, a program linked against libc version 2.21 is unable to
14729 read locale data produced with libc 2.22; worse, that program
14730 @emph{aborts} instead of simply ignoring the incompatible locale
14731 data@footnote{Versions 2.23 and later of GNU@tie{}libc will simply skip
14732 the incompatible locale data, which is already an improvement.}.
14733 Similarly, a program linked against libc 2.22 can read most, but not
14734 all, of the locale data from libc 2.21 (specifically, @env{LC_COLLATE}
14735 data is incompatible); thus calls to @code{setlocale} may fail, but
14736 programs will not abort.
14737
14738 The ``problem'' with Guix is that users have a lot of freedom: They can
14739 choose whether and when to upgrade software in their profiles, and might
14740 be using a libc version different from the one the system administrator
14741 used to build the system-wide locale data.
14742
14743 Fortunately, unprivileged users can also install their own locale data
14744 and define @env{GUIX_LOCPATH} accordingly (@pxref{locales-and-locpath,
14745 @env{GUIX_LOCPATH} and locale packages}).
14746
14747 Still, it is best if the system-wide locale data at
14748 @file{/run/current-system/locale} is built for all the libc versions
14749 actually in use on the system, so that all the programs can access
14750 it---this is especially crucial on a multi-user system. To do that, the
14751 administrator can specify several libc packages in the
14752 @code{locale-libcs} field of @code{operating-system}:
14753
14754 @lisp
14755 (use-package-modules base)
14756
14757 (operating-system
14758 ;; @dots{}
14759 (locale-libcs (list glibc-2.21 (canonical-package glibc))))
14760 @end lisp
14761
14762 This example would lead to a system containing locale definitions for
14763 both libc 2.21 and the current version of libc in
14764 @file{/run/current-system/locale}.
14765
14766
14767 @node Services
14768 @section Services
14769
14770 @cindex system services
14771 An important part of preparing an @code{operating-system} declaration is
14772 listing @dfn{system services} and their configuration (@pxref{Using the
14773 Configuration System}). System services are typically daemons launched
14774 when the system boots, or other actions needed at that time---e.g.,
14775 configuring network access.
14776
14777 Guix has a broad definition of ``service'' (@pxref{Service
14778 Composition}), but many services are managed by the GNU@tie{}Shepherd
14779 (@pxref{Shepherd Services}). On a running system, the @command{herd}
14780 command allows you to list the available services, show their status,
14781 start and stop them, or do other specific operations (@pxref{Jump
14782 Start,,, shepherd, The GNU Shepherd Manual}). For example:
14783
14784 @example
14785 # herd status
14786 @end example
14787
14788 The above command, run as @code{root}, lists the currently defined
14789 services. The @command{herd doc} command shows a synopsis of the given
14790 service and its associated actions:
14791
14792 @example
14793 # herd doc nscd
14794 Run libc's name service cache daemon (nscd).
14795
14796 # herd doc nscd action invalidate
14797 invalidate: Invalidate the given cache--e.g., 'hosts' for host name lookups.
14798 @end example
14799
14800 The @command{start}, @command{stop}, and @command{restart} sub-commands
14801 have the effect you would expect. For instance, the commands below stop
14802 the nscd service and restart the Xorg display server:
14803
14804 @example
14805 # herd stop nscd
14806 Service nscd has been stopped.
14807 # herd restart xorg-server
14808 Service xorg-server has been stopped.
14809 Service xorg-server has been started.
14810 @end example
14811
14812 The following sections document the available services, starting with
14813 the core services, that may be used in an @code{operating-system}
14814 declaration.
14815
14816 @menu
14817 * Base Services:: Essential system services.
14818 * Scheduled Job Execution:: The mcron service.
14819 * Log Rotation:: The rottlog service.
14820 * Networking Services:: Network setup, SSH daemon, etc.
14821 * Unattended Upgrades:: Automated system upgrades.
14822 * X Window:: Graphical display.
14823 * Printing Services:: Local and remote printer support.
14824 * Desktop Services:: D-Bus and desktop services.
14825 * Sound Services:: ALSA and Pulseaudio services.
14826 * Database Services:: SQL databases, key-value stores, etc.
14827 * Mail Services:: IMAP, POP3, SMTP, and all that.
14828 * Messaging Services:: Messaging services.
14829 * Telephony Services:: Telephony services.
14830 * File-Sharing Services:: File-sharing services.
14831 * Monitoring Services:: Monitoring services.
14832 * Kerberos Services:: Kerberos services.
14833 * LDAP Services:: LDAP services.
14834 * Web Services:: Web servers.
14835 * Certificate Services:: TLS certificates via Let's Encrypt.
14836 * DNS Services:: DNS daemons.
14837 * VPN Services:: VPN daemons.
14838 * Network File System:: NFS related services.
14839 * Continuous Integration:: Cuirass and Laminar services.
14840 * Power Management Services:: Extending battery life.
14841 * Audio Services:: The MPD.
14842 * Virtualization Services:: Virtualization services.
14843 * Version Control Services:: Providing remote access to Git repositories.
14844 * Game Services:: Game servers.
14845 * PAM Mount Service:: Service to mount volumes when logging in.
14846 * Guix Services:: Services relating specifically to Guix.
14847 * Linux Services:: Services tied to the Linux kernel.
14848 * Hurd Services:: Services specific for a Hurd System.
14849 * Miscellaneous Services:: Other services.
14850 @end menu
14851
14852 @node Base Services
14853 @subsection Base Services
14854
14855 The @code{(gnu services base)} module provides definitions for the basic
14856 services that one expects from the system. The services exported by
14857 this module are listed below.
14858
14859 @defvr {Scheme Variable} %base-services
14860 This variable contains a list of basic services (@pxref{Service Types
14861 and Services}, for more information on service objects) one would
14862 expect from the system: a login service (mingetty) on each tty, syslogd,
14863 the libc name service cache daemon (nscd), the udev device manager, and
14864 more.
14865
14866 This is the default value of the @code{services} field of
14867 @code{operating-system} declarations. Usually, when customizing a
14868 system, you will want to append services to @code{%base-services}, like
14869 this:
14870
14871 @lisp
14872 (append (list (service avahi-service-type)
14873 (service openssh-service-type))
14874 %base-services)
14875 @end lisp
14876 @end defvr
14877
14878 @defvr {Scheme Variable} special-files-service-type
14879 This is the service that sets up ``special files'' such as
14880 @file{/bin/sh}; an instance of it is part of @code{%base-services}.
14881
14882 The value associated with @code{special-files-service-type} services
14883 must be a list of tuples where the first element is the ``special file''
14884 and the second element is its target. By default it is:
14885
14886 @cindex @file{/bin/sh}
14887 @cindex @file{sh}, in @file{/bin}
14888 @lisp
14889 `(("/bin/sh" ,(file-append bash "/bin/sh")))
14890 @end lisp
14891
14892 @cindex @file{/usr/bin/env}
14893 @cindex @file{env}, in @file{/usr/bin}
14894 If you want to add, say, @code{/usr/bin/env} to your system, you can
14895 change it to:
14896
14897 @lisp
14898 `(("/bin/sh" ,(file-append bash "/bin/sh"))
14899 ("/usr/bin/env" ,(file-append coreutils "/bin/env")))
14900 @end lisp
14901
14902 Since this is part of @code{%base-services}, you can use
14903 @code{modify-services} to customize the set of special files
14904 (@pxref{Service Reference, @code{modify-services}}). But the simple way
14905 to add a special file is @i{via} the @code{extra-special-file} procedure
14906 (see below).
14907 @end defvr
14908
14909 @deffn {Scheme Procedure} extra-special-file @var{file} @var{target}
14910 Use @var{target} as the ``special file'' @var{file}.
14911
14912 For example, adding the following lines to the @code{services} field of
14913 your operating system declaration leads to a @file{/usr/bin/env}
14914 symlink:
14915
14916 @lisp
14917 (extra-special-file "/usr/bin/env"
14918 (file-append coreutils "/bin/env"))
14919 @end lisp
14920 @end deffn
14921
14922 @deffn {Scheme Procedure} host-name-service @var{name}
14923 Return a service that sets the host name to @var{name}.
14924 @end deffn
14925
14926 @defvr {Scheme Variable} console-font-service-type
14927 Install the given fonts on the specified ttys (fonts are per
14928 virtual console on the kernel Linux). The value of this service is a list of
14929 tty/font pairs. The font can be the name of a font provided by the @code{kbd}
14930 package or any valid argument to @command{setfont}, as in this example:
14931
14932 @lisp
14933 `(("tty1" . "LatGrkCyr-8x16")
14934 ("tty2" . ,(file-append
14935 font-tamzen
14936 "/share/kbd/consolefonts/TamzenForPowerline10x20.psf"))
14937 ("tty3" . ,(file-append
14938 font-terminus
14939 "/share/consolefonts/ter-132n"))) ; for HDPI
14940 @end lisp
14941 @end defvr
14942
14943 @deffn {Scheme Procedure} login-service @var{config}
14944 Return a service to run login according to @var{config}, a
14945 @code{<login-configuration>} object, which specifies the message of the day,
14946 among other things.
14947 @end deffn
14948
14949 @deftp {Data Type} login-configuration
14950 This is the data type representing the configuration of login.
14951
14952 @table @asis
14953
14954 @item @code{motd}
14955 @cindex message of the day
14956 A file-like object containing the ``message of the day''.
14957
14958 @item @code{allow-empty-passwords?} (default: @code{#t})
14959 Allow empty passwords by default so that first-time users can log in when
14960 the 'root' account has just been created.
14961
14962 @end table
14963 @end deftp
14964
14965 @deffn {Scheme Procedure} mingetty-service @var{config}
14966 Return a service to run mingetty according to @var{config}, a
14967 @code{<mingetty-configuration>} object, which specifies the tty to run, among
14968 other things.
14969 @end deffn
14970
14971 @deftp {Data Type} mingetty-configuration
14972 This is the data type representing the configuration of Mingetty, which
14973 provides the default implementation of virtual console log-in.
14974
14975 @table @asis
14976
14977 @item @code{tty}
14978 The name of the console this Mingetty runs on---e.g., @code{"tty1"}.
14979
14980 @item @code{auto-login} (default: @code{#f})
14981 When true, this field must be a string denoting the user name under
14982 which the system automatically logs in. When it is @code{#f}, a
14983 user name and password must be entered to log in.
14984
14985 @item @code{login-program} (default: @code{#f})
14986 This must be either @code{#f}, in which case the default log-in program
14987 is used (@command{login} from the Shadow tool suite), or a gexp denoting
14988 the name of the log-in program.
14989
14990 @item @code{login-pause?} (default: @code{#f})
14991 When set to @code{#t} in conjunction with @var{auto-login}, the user
14992 will have to press a key before the log-in shell is launched.
14993
14994 @item @code{clear-on-logout?} (default: @code{#t})
14995 When set to @code{#t}, the screen will be cleared after logout.
14996
14997 @item @code{mingetty} (default: @var{mingetty})
14998 The Mingetty package to use.
14999
15000 @end table
15001 @end deftp
15002
15003 @deffn {Scheme Procedure} agetty-service @var{config}
15004 Return a service to run agetty according to @var{config}, an
15005 @code{<agetty-configuration>} object, which specifies the tty to run,
15006 among other things.
15007 @end deffn
15008
15009 @deftp {Data Type} agetty-configuration
15010 This is the data type representing the configuration of agetty, which
15011 implements virtual and serial console log-in. See the @code{agetty(8)}
15012 man page for more information.
15013
15014 @table @asis
15015
15016 @item @code{tty}
15017 The name of the console this agetty runs on, as a string---e.g.,
15018 @code{"ttyS0"}. This argument is optional, it will default to
15019 a reasonable default serial port used by the kernel Linux.
15020
15021 For this, if there is a value for an option @code{agetty.tty} in the kernel
15022 command line, agetty will extract the device name of the serial port
15023 from it and use that.
15024
15025 If not and if there is a value for an option @code{console} with a tty in
15026 the Linux command line, agetty will extract the device name of the
15027 serial port from it and use that.
15028
15029 In both cases, agetty will leave the other serial device settings
15030 (baud rate etc.)@: alone---in the hope that Linux pinned them to the
15031 correct values.
15032
15033 @item @code{baud-rate} (default: @code{#f})
15034 A string containing a comma-separated list of one or more baud rates, in
15035 descending order.
15036
15037 @item @code{term} (default: @code{#f})
15038 A string containing the value used for the @env{TERM} environment
15039 variable.
15040
15041 @item @code{eight-bits?} (default: @code{#f})
15042 When @code{#t}, the tty is assumed to be 8-bit clean, and parity detection is
15043 disabled.
15044
15045 @item @code{auto-login} (default: @code{#f})
15046 When passed a login name, as a string, the specified user will be logged
15047 in automatically without prompting for their login name or password.
15048
15049 @item @code{no-reset?} (default: @code{#f})
15050 When @code{#t}, don't reset terminal cflags (control modes).
15051
15052 @item @code{host} (default: @code{#f})
15053 This accepts a string containing the ``login_host'', which will be written
15054 into the @file{/var/run/utmpx} file.
15055
15056 @item @code{remote?} (default: @code{#f})
15057 When set to @code{#t} in conjunction with @var{host}, this will add an
15058 @code{-r} fakehost option to the command line of the login program
15059 specified in @var{login-program}.
15060
15061 @item @code{flow-control?} (default: @code{#f})
15062 When set to @code{#t}, enable hardware (RTS/CTS) flow control.
15063
15064 @item @code{no-issue?} (default: @code{#f})
15065 When set to @code{#t}, the contents of the @file{/etc/issue} file will
15066 not be displayed before presenting the login prompt.
15067
15068 @item @code{init-string} (default: @code{#f})
15069 This accepts a string that will be sent to the tty or modem before
15070 sending anything else. It can be used to initialize a modem.
15071
15072 @item @code{no-clear?} (default: @code{#f})
15073 When set to @code{#t}, agetty will not clear the screen before showing
15074 the login prompt.
15075
15076 @item @code{login-program} (default: (file-append shadow "/bin/login"))
15077 This must be either a gexp denoting the name of a log-in program, or
15078 unset, in which case the default value is the @command{login} from the
15079 Shadow tool suite.
15080
15081 @item @code{local-line} (default: @code{#f})
15082 Control the CLOCAL line flag. This accepts one of three symbols as
15083 arguments, @code{'auto}, @code{'always}, or @code{'never}. If @code{#f},
15084 the default value chosen by agetty is @code{'auto}.
15085
15086 @item @code{extract-baud?} (default: @code{#f})
15087 When set to @code{#t}, instruct agetty to try to extract the baud rate
15088 from the status messages produced by certain types of modems.
15089
15090 @item @code{skip-login?} (default: @code{#f})
15091 When set to @code{#t}, do not prompt the user for a login name. This
15092 can be used with @var{login-program} field to use non-standard login
15093 systems.
15094
15095 @item @code{no-newline?} (default: @code{#f})
15096 When set to @code{#t}, do not print a newline before printing the
15097 @file{/etc/issue} file.
15098
15099 @c Is this dangerous only when used with login-program, or always?
15100 @item @code{login-options} (default: @code{#f})
15101 This option accepts a string containing options that are passed to the
15102 login program. When used with the @var{login-program}, be aware that a
15103 malicious user could try to enter a login name containing embedded
15104 options that could be parsed by the login program.
15105
15106 @item @code{login-pause} (default: @code{#f})
15107 When set to @code{#t}, wait for any key before showing the login prompt.
15108 This can be used in conjunction with @var{auto-login} to save memory by
15109 lazily spawning shells.
15110
15111 @item @code{chroot} (default: @code{#f})
15112 Change root to the specified directory. This option accepts a directory
15113 path as a string.
15114
15115 @item @code{hangup?} (default: @code{#f})
15116 Use the Linux system call @code{vhangup} to do a virtual hangup of the
15117 specified terminal.
15118
15119 @item @code{keep-baud?} (default: @code{#f})
15120 When set to @code{#t}, try to keep the existing baud rate. The baud
15121 rates from @var{baud-rate} are used when agetty receives a @key{BREAK}
15122 character.
15123
15124 @item @code{timeout} (default: @code{#f})
15125 When set to an integer value, terminate if no user name could be read
15126 within @var{timeout} seconds.
15127
15128 @item @code{detect-case?} (default: @code{#f})
15129 When set to @code{#t}, turn on support for detecting an uppercase-only
15130 terminal. This setting will detect a login name containing only
15131 uppercase letters as indicating an uppercase-only terminal and turn on
15132 some upper-to-lower case conversions. Note that this will not support
15133 Unicode characters.
15134
15135 @item @code{wait-cr?} (default: @code{#f})
15136 When set to @code{#t}, wait for the user or modem to send a
15137 carriage-return or linefeed character before displaying
15138 @file{/etc/issue} or login prompt. This is typically used with the
15139 @var{init-string} option.
15140
15141 @item @code{no-hints?} (default: @code{#f})
15142 When set to @code{#t}, do not print hints about Num, Caps, and Scroll
15143 locks.
15144
15145 @item @code{no-hostname?} (default: @code{#f})
15146 By default, the hostname is printed. When this option is set to
15147 @code{#t}, no hostname will be shown at all.
15148
15149 @item @code{long-hostname?} (default: @code{#f})
15150 By default, the hostname is only printed until the first dot. When this
15151 option is set to @code{#t}, the fully qualified hostname by
15152 @code{gethostname} or @code{getaddrinfo} is shown.
15153
15154 @item @code{erase-characters} (default: @code{#f})
15155 This option accepts a string of additional characters that should be
15156 interpreted as backspace when the user types their login name.
15157
15158 @item @code{kill-characters} (default: @code{#f})
15159 This option accepts a string that should be interpreted to mean ``ignore
15160 all previous characters'' (also called a ``kill'' character) when the user
15161 types their login name.
15162
15163 @item @code{chdir} (default: @code{#f})
15164 This option accepts, as a string, a directory path that will be changed
15165 to before login.
15166
15167 @item @code{delay} (default: @code{#f})
15168 This options accepts, as an integer, the number of seconds to sleep
15169 before opening the tty and displaying the login prompt.
15170
15171 @item @code{nice} (default: @code{#f})
15172 This option accepts, as an integer, the nice value with which to run the
15173 @command{login} program.
15174
15175 @item @code{extra-options} (default: @code{'()})
15176 This option provides an ``escape hatch'' for the user to provide arbitrary
15177 command-line arguments to @command{agetty} as a list of strings.
15178
15179 @end table
15180 @end deftp
15181
15182 @deffn {Scheme Procedure} kmscon-service-type @var{config}
15183 Return a service to run @uref{https://www.freedesktop.org/wiki/Software/kmscon,kmscon}
15184 according to @var{config}, a @code{<kmscon-configuration>} object, which
15185 specifies the tty to run, among other things.
15186 @end deffn
15187
15188 @deftp {Data Type} kmscon-configuration
15189 This is the data type representing the configuration of Kmscon, which
15190 implements virtual console log-in.
15191
15192 @table @asis
15193
15194 @item @code{virtual-terminal}
15195 The name of the console this Kmscon runs on---e.g., @code{"tty1"}.
15196
15197 @item @code{login-program} (default: @code{#~(string-append #$shadow "/bin/login")})
15198 A gexp denoting the name of the log-in program. The default log-in program is
15199 @command{login} from the Shadow tool suite.
15200
15201 @item @code{login-arguments} (default: @code{'("-p")})
15202 A list of arguments to pass to @command{login}.
15203
15204 @item @code{auto-login} (default: @code{#f})
15205 When passed a login name, as a string, the specified user will be logged
15206 in automatically without prompting for their login name or password.
15207
15208 @item @code{hardware-acceleration?} (default: #f)
15209 Whether to use hardware acceleration.
15210
15211 @item @code{font-engine} (default: @code{"pango"})
15212 Font engine used in Kmscon.
15213
15214 @item @code{font-size} (default: @code{12})
15215 Font size used in Kmscon.
15216
15217 @item @code{kmscon} (default: @var{kmscon})
15218 The Kmscon package to use.
15219
15220 @end table
15221 @end deftp
15222
15223 @cindex name service cache daemon
15224 @cindex nscd
15225 @deffn {Scheme Procedure} nscd-service [@var{config}] [#:glibc glibc] @
15226 [#:name-services '()]
15227 Return a service that runs the libc name service cache daemon (nscd) with the
15228 given @var{config}---an @code{<nscd-configuration>} object. @xref{Name
15229 Service Switch}, for an example.
15230
15231 For convenience, the Shepherd service for nscd provides the following actions:
15232
15233 @table @code
15234 @item invalidate
15235 @cindex cache invalidation, nscd
15236 @cindex nscd, cache invalidation
15237 This invalidate the given cache. For instance, running:
15238
15239 @example
15240 herd invalidate nscd hosts
15241 @end example
15242
15243 @noindent
15244 invalidates the host name lookup cache of nscd.
15245
15246 @item statistics
15247 Running @command{herd statistics nscd} displays information about nscd usage
15248 and caches.
15249 @end table
15250
15251 @end deffn
15252
15253 @defvr {Scheme Variable} %nscd-default-configuration
15254 This is the default @code{<nscd-configuration>} value (see below) used
15255 by @code{nscd-service}. It uses the caches defined by
15256 @code{%nscd-default-caches}; see below.
15257 @end defvr
15258
15259 @deftp {Data Type} nscd-configuration
15260 This is the data type representing the name service cache daemon (nscd)
15261 configuration.
15262
15263 @table @asis
15264
15265 @item @code{name-services} (default: @code{'()})
15266 List of packages denoting @dfn{name services} that must be visible to
15267 the nscd---e.g., @code{(list @var{nss-mdns})}.
15268
15269 @item @code{glibc} (default: @var{glibc})
15270 Package object denoting the GNU C Library providing the @command{nscd}
15271 command.
15272
15273 @item @code{log-file} (default: @code{"/var/log/nscd.log"})
15274 Name of the nscd log file. This is where debugging output goes when
15275 @code{debug-level} is strictly positive.
15276
15277 @item @code{debug-level} (default: @code{0})
15278 Integer denoting the debugging levels. Higher numbers mean that more
15279 debugging output is logged.
15280
15281 @item @code{caches} (default: @code{%nscd-default-caches})
15282 List of @code{<nscd-cache>} objects denoting things to be cached; see
15283 below.
15284
15285 @end table
15286 @end deftp
15287
15288 @deftp {Data Type} nscd-cache
15289 Data type representing a cache database of nscd and its parameters.
15290
15291 @table @asis
15292
15293 @item @code{database}
15294 This is a symbol representing the name of the database to be cached.
15295 Valid values are @code{passwd}, @code{group}, @code{hosts}, and
15296 @code{services}, which designate the corresponding NSS database
15297 (@pxref{NSS Basics,,, libc, The GNU C Library Reference Manual}).
15298
15299 @item @code{positive-time-to-live}
15300 @itemx @code{negative-time-to-live} (default: @code{20})
15301 A number representing the number of seconds during which a positive or
15302 negative lookup result remains in cache.
15303
15304 @item @code{check-files?} (default: @code{#t})
15305 Whether to check for updates of the files corresponding to
15306 @var{database}.
15307
15308 For instance, when @var{database} is @code{hosts}, setting this flag
15309 instructs nscd to check for updates in @file{/etc/hosts} and to take
15310 them into account.
15311
15312 @item @code{persistent?} (default: @code{#t})
15313 Whether the cache should be stored persistently on disk.
15314
15315 @item @code{shared?} (default: @code{#t})
15316 Whether the cache should be shared among users.
15317
15318 @item @code{max-database-size} (default: 32@tie{}MiB)
15319 Maximum size in bytes of the database cache.
15320
15321 @c XXX: 'suggested-size' and 'auto-propagate?' seem to be expert
15322 @c settings, so leave them out.
15323
15324 @end table
15325 @end deftp
15326
15327 @defvr {Scheme Variable} %nscd-default-caches
15328 List of @code{<nscd-cache>} objects used by default by
15329 @code{nscd-configuration} (see above).
15330
15331 It enables persistent and aggressive caching of service and host name
15332 lookups. The latter provides better host name lookup performance,
15333 resilience in the face of unreliable name servers, and also better
15334 privacy---often the result of host name lookups is in local cache, so
15335 external name servers do not even need to be queried.
15336 @end defvr
15337
15338 @anchor{syslog-configuration-type}
15339 @cindex syslog
15340 @cindex logging
15341 @deftp {Data Type} syslog-configuration
15342 This data type represents the configuration of the syslog daemon.
15343
15344 @table @asis
15345 @item @code{syslogd} (default: @code{#~(string-append #$inetutils "/libexec/syslogd")})
15346 The syslog daemon to use.
15347
15348 @item @code{config-file} (default: @code{%default-syslog.conf})
15349 The syslog configuration file to use.
15350
15351 @end table
15352 @end deftp
15353
15354 @anchor{syslog-service}
15355 @cindex syslog
15356 @deffn {Scheme Procedure} syslog-service @var{config}
15357 Return a service that runs a syslog daemon according to @var{config}.
15358
15359 @xref{syslogd invocation,,, inetutils, GNU Inetutils}, for more
15360 information on the configuration file syntax.
15361 @end deffn
15362
15363 @defvr {Scheme Variable} guix-service-type
15364 This is the type of the service that runs the build daemon,
15365 @command{guix-daemon} (@pxref{Invoking guix-daemon}). Its value must be a
15366 @code{guix-configuration} record as described below.
15367 @end defvr
15368
15369 @anchor{guix-configuration-type}
15370 @deftp {Data Type} guix-configuration
15371 This data type represents the configuration of the Guix build daemon.
15372 @xref{Invoking guix-daemon}, for more information.
15373
15374 @table @asis
15375 @item @code{guix} (default: @var{guix})
15376 The Guix package to use.
15377
15378 @item @code{build-group} (default: @code{"guixbuild"})
15379 Name of the group for build user accounts.
15380
15381 @item @code{build-accounts} (default: @code{10})
15382 Number of build user accounts to create.
15383
15384 @item @code{authorize-key?} (default: @code{#t})
15385 @cindex substitutes, authorization thereof
15386 Whether to authorize the substitute keys listed in
15387 @code{authorized-keys}---by default that of @code{@value{SUBSTITUTE-SERVER}}
15388 (@pxref{Substitutes}).
15389
15390 When @code{authorize-key?} is true, @file{/etc/guix/acl} cannot be
15391 changed by invoking @command{guix archive --authorize}. You must
15392 instead adjust @code{guix-configuration} as you wish and reconfigure the
15393 system. This ensures that your operating system configuration file is
15394 self-contained.
15395
15396 @quotation Note
15397 When booting or reconfiguring to a system where @code{authorize-key?}
15398 is true, the existing @file{/etc/guix/acl} file is backed up as
15399 @file{/etc/guix/acl.bak} if it was determined to be a manually modified
15400 file. This is to facilitate migration from earlier versions, which
15401 allowed for in-place modifications to @file{/etc/guix/acl}.
15402 @end quotation
15403
15404 @vindex %default-authorized-guix-keys
15405 @item @code{authorized-keys} (default: @code{%default-authorized-guix-keys})
15406 The list of authorized key files for archive imports, as a list of
15407 string-valued gexps (@pxref{Invoking guix archive}). By default, it
15408 contains that of @code{@value{SUBSTITUTE-SERVER}} (@pxref{Substitutes}).
15409 See @code{substitute-urls} below for an example on how to change it.
15410
15411 @item @code{use-substitutes?} (default: @code{#t})
15412 Whether to use substitutes.
15413
15414 @item @code{substitute-urls} (default: @code{%default-substitute-urls})
15415 The list of URLs where to look for substitutes by default.
15416
15417 Suppose you would like to fetch substitutes from @code{guix.example.org}
15418 in addition to @code{@value{SUBSTITUTE-SERVER}}. You will need to do
15419 two things: (1) add @code{guix.example.org} to @code{substitute-urls},
15420 and (2) authorize its signing key, having done appropriate checks
15421 (@pxref{Substitute Server Authorization}). The configuration below does
15422 exactly that:
15423
15424 @lisp
15425 (guix-configuration
15426 (substitute-urls
15427 (append (list "https://guix.example.org")
15428 %default-substitute-urls))
15429 (authorized-keys
15430 (append (list (local-file "./guix.example.org-key.pub"))
15431 %default-authorized-guix-keys)))
15432 @end lisp
15433
15434 This example assumes that the file @file{./guix.example.org-key.pub}
15435 contains the public key that @code{guix.example.org} uses to sign
15436 substitutes.
15437
15438 @item @code{max-silent-time} (default: @code{0})
15439 @itemx @code{timeout} (default: @code{0})
15440 The number of seconds of silence and the number of seconds of activity,
15441 respectively, after which a build process times out. A value of zero
15442 disables the timeout.
15443
15444 @item @code{log-compression} (default: @code{'bzip2})
15445 The type of compression used for build logs---one of @code{gzip},
15446 @code{bzip2}, or @code{none}.
15447
15448 @item @code{discover?} (default: @code{#f})
15449 Whether to discover substitute servers on the local network using mDNS
15450 and DNS-SD.
15451
15452 @item @code{extra-options} (default: @code{'()})
15453 List of extra command-line options for @command{guix-daemon}.
15454
15455 @item @code{log-file} (default: @code{"/var/log/guix-daemon.log"})
15456 File where @command{guix-daemon}'s standard output and standard error
15457 are written.
15458
15459 @cindex HTTP proxy, for @code{guix-daemon}
15460 @cindex proxy, for @code{guix-daemon} HTTP access
15461 @item @code{http-proxy} (default: @code{#f})
15462 The URL of the HTTP and HTTPS proxy used for downloading fixed-output
15463 derivations and substitutes.
15464
15465 It is also possible to change the daemon's proxy at run time through the
15466 @code{set-http-proxy} action, which restarts it:
15467
15468 @example
15469 herd set-http-proxy guix-daemon http://localhost:8118
15470 @end example
15471
15472 To clear the proxy settings, run:
15473
15474 @example
15475 herd set-http-proxy guix-daemon
15476 @end example
15477
15478 @item @code{tmpdir} (default: @code{#f})
15479 A directory path where the @command{guix-daemon} will perform builds.
15480
15481 @end table
15482 @end deftp
15483
15484 @deffn {Scheme Procedure} udev-service [#:udev @var{eudev} #:rules @code{'()}]
15485 Run @var{udev}, which populates the @file{/dev} directory dynamically.
15486 udev rules can be provided as a list of files through the @var{rules}
15487 variable. The procedures @code{udev-rule}, @code{udev-rules-service}
15488 and @code{file->udev-rule} from @code{(gnu services base)} simplify the
15489 creation of such rule files.
15490
15491 The @command{herd rules udev} command, as root, returns the name of the
15492 directory containing all the active udev rules.
15493 @end deffn
15494
15495 @deffn {Scheme Procedure} udev-rule [@var{file-name} @var{contents}]
15496 Return a udev-rule file named @var{file-name} containing the rules
15497 defined by the @var{contents} literal.
15498
15499 In the following example, a rule for a USB device is defined to be
15500 stored in the file @file{90-usb-thing.rules}. The rule runs a script
15501 upon detecting a USB device with a given product identifier.
15502
15503 @lisp
15504 (define %example-udev-rule
15505 (udev-rule
15506 "90-usb-thing.rules"
15507 (string-append "ACTION==\"add\", SUBSYSTEM==\"usb\", "
15508 "ATTR@{product@}==\"Example\", "
15509 "RUN+=\"/path/to/script\"")))
15510 @end lisp
15511 @end deffn
15512
15513 @deffn {Scheme Procedure} udev-rules-service [@var{name} @var{rules}] @
15514 [#:groups @var{groups}]
15515 Return a service that extends @code{udev-service-type } with @var{rules}
15516 and @code{account-service-type} with @var{groups} as system groups.
15517 This works by creating a singleton service type
15518 @code{@var{name}-udev-rules}, of which the returned service is an
15519 instance.
15520
15521 Here we show how it can be used to extend @code{udev-service-type} with the
15522 previously defined rule @code{%example-udev-rule}.
15523
15524 @lisp
15525 (operating-system
15526 ;; @dots{}
15527 (services
15528 (cons (udev-rules-service 'usb-thing %example-udev-rule)
15529 %desktop-services)))
15530 @end lisp
15531 @end deffn
15532
15533 @deffn {Scheme Procedure} file->udev-rule [@var{file-name} @var{file}]
15534 Return a udev file named @var{file-name} containing the rules defined
15535 within @var{file}, a file-like object.
15536
15537 The following example showcases how we can use an existing rule file.
15538
15539 @lisp
15540 (use-modules (guix download) ;for url-fetch
15541 (guix packages) ;for origin
15542 @dots{})
15543
15544 (define %android-udev-rules
15545 (file->udev-rule
15546 "51-android-udev.rules"
15547 (let ((version "20170910"))
15548 (origin
15549 (method url-fetch)
15550 (uri (string-append "https://raw.githubusercontent.com/M0Rf30/"
15551 "android-udev-rules/" version "/51-android.rules"))
15552 (sha256
15553 (base32 "0lmmagpyb6xsq6zcr2w1cyx9qmjqmajkvrdbhjx32gqf1d9is003"))))))
15554 @end lisp
15555 @end deffn
15556
15557 Additionally, Guix package definitions can be included in @var{rules} in
15558 order to extend the udev rules with the definitions found under their
15559 @file{lib/udev/rules.d} sub-directory. In lieu of the previous
15560 @var{file->udev-rule} example, we could have used the
15561 @var{android-udev-rules} package which exists in Guix in the @code{(gnu
15562 packages android)} module.
15563
15564 The following example shows how to use the @var{android-udev-rules}
15565 package so that the Android tool @command{adb} can detect devices
15566 without root privileges. It also details how to create the
15567 @code{adbusers} group, which is required for the proper functioning of
15568 the rules defined within the @code{android-udev-rules} package. To
15569 create such a group, we must define it both as part of the
15570 @code{supplementary-groups} of our @code{user-account} declaration, as
15571 well as in the @var{groups} of the @code{udev-rules-service} procedure.
15572
15573 @lisp
15574 (use-modules (gnu packages android) ;for android-udev-rules
15575 (gnu system shadow) ;for user-group
15576 @dots{})
15577
15578 (operating-system
15579 ;; @dots{}
15580 (users (cons (user-account
15581 ;; @dots{}
15582 (supplementary-groups
15583 '("adbusers" ;for adb
15584 "wheel" "netdev" "audio" "video")))))
15585 ;; @dots{}
15586 (services
15587 (cons (udev-rules-service 'android android-udev-rules
15588 #:groups '("adbusers"))
15589 %desktop-services)))
15590 @end lisp
15591
15592 @defvr {Scheme Variable} urandom-seed-service-type
15593 Save some entropy in @code{%random-seed-file} to seed @file{/dev/urandom}
15594 when rebooting. It also tries to seed @file{/dev/urandom} from
15595 @file{/dev/hwrng} while booting, if @file{/dev/hwrng} exists and is
15596 readable.
15597 @end defvr
15598
15599 @defvr {Scheme Variable} %random-seed-file
15600 This is the name of the file where some random bytes are saved by
15601 @var{urandom-seed-service} to seed @file{/dev/urandom} when rebooting.
15602 It defaults to @file{/var/lib/random-seed}.
15603 @end defvr
15604
15605 @cindex mouse
15606 @cindex gpm
15607 @defvr {Scheme Variable} gpm-service-type
15608 This is the type of the service that runs GPM, the @dfn{general-purpose
15609 mouse daemon}, which provides mouse support to the Linux console. GPM
15610 allows users to use the mouse in the console, notably to select, copy,
15611 and paste text.
15612
15613 The value for services of this type must be a @code{gpm-configuration}
15614 (see below). This service is not part of @code{%base-services}.
15615 @end defvr
15616
15617 @deftp {Data Type} gpm-configuration
15618 Data type representing the configuration of GPM.
15619
15620 @table @asis
15621 @item @code{options} (default: @code{%default-gpm-options})
15622 Command-line options passed to @command{gpm}. The default set of
15623 options instruct @command{gpm} to listen to mouse events on
15624 @file{/dev/input/mice}. @xref{Command Line,,, gpm, gpm manual}, for
15625 more information.
15626
15627 @item @code{gpm} (default: @code{gpm})
15628 The GPM package to use.
15629
15630 @end table
15631 @end deftp
15632
15633 @anchor{guix-publish-service-type}
15634 @deffn {Scheme Variable} guix-publish-service-type
15635 This is the service type for @command{guix publish} (@pxref{Invoking
15636 guix publish}). Its value must be a @code{guix-publish-configuration}
15637 object, as described below.
15638
15639 This assumes that @file{/etc/guix} already contains a signing key pair as
15640 created by @command{guix archive --generate-key} (@pxref{Invoking guix
15641 archive}). If that is not the case, the service will fail to start.
15642 @end deffn
15643
15644 @deftp {Data Type} guix-publish-configuration
15645 Data type representing the configuration of the @code{guix publish}
15646 service.
15647
15648 @table @asis
15649 @item @code{guix} (default: @code{guix})
15650 The Guix package to use.
15651
15652 @item @code{port} (default: @code{80})
15653 The TCP port to listen for connections.
15654
15655 @item @code{host} (default: @code{"localhost"})
15656 The host (and thus, network interface) to listen to. Use
15657 @code{"0.0.0.0"} to listen on all the network interfaces.
15658
15659 @item @code{advertise?} (default: @code{#f})
15660 When true, advertise the service on the local network @i{via} the DNS-SD
15661 protocol, using Avahi.
15662
15663 This allows neighboring Guix devices with discovery on (see
15664 @code{guix-configuration} above) to discover this @command{guix publish}
15665 instance and to automatically download substitutes from it.
15666
15667 @item @code{compression} (default: @code{'(("gzip" 3) ("zstd" 3))})
15668 This is a list of compression method/level tuple used when compressing
15669 substitutes. For example, to compress all substitutes with @emph{both} lzip
15670 at level 7 and gzip at level 9, write:
15671
15672 @lisp
15673 '(("lzip" 7) ("gzip" 9))
15674 @end lisp
15675
15676 Level 9 achieves the best compression ratio at the expense of increased CPU
15677 usage, whereas level 1 achieves fast compression. @xref{Invoking guix
15678 publish}, for more information on the available compression methods and
15679 the tradeoffs involved.
15680
15681 An empty list disables compression altogether.
15682
15683 @item @code{nar-path} (default: @code{"nar"})
15684 The URL path at which ``nars'' can be fetched. @xref{Invoking guix
15685 publish, @option{--nar-path}}, for details.
15686
15687 @item @code{cache} (default: @code{#f})
15688 When it is @code{#f}, disable caching and instead generate archives on
15689 demand. Otherwise, this should be the name of a directory---e.g.,
15690 @code{"/var/cache/guix/publish"}---where @command{guix publish} caches
15691 archives and meta-data ready to be sent. @xref{Invoking guix publish,
15692 @option{--cache}}, for more information on the tradeoffs involved.
15693
15694 @item @code{workers} (default: @code{#f})
15695 When it is an integer, this is the number of worker threads used for
15696 caching; when @code{#f}, the number of processors is used.
15697 @xref{Invoking guix publish, @option{--workers}}, for more information.
15698
15699 @item @code{cache-bypass-threshold} (default: 10 MiB)
15700 When @code{cache} is true, this is the maximum size in bytes of a store
15701 item for which @command{guix publish} may bypass its cache in case of a
15702 cache miss. @xref{Invoking guix publish,
15703 @option{--cache-bypass-threshold}}, for more information.
15704
15705 @item @code{ttl} (default: @code{#f})
15706 When it is an integer, this denotes the @dfn{time-to-live} in seconds
15707 of the published archives. @xref{Invoking guix publish, @option{--ttl}},
15708 for more information.
15709 @end table
15710 @end deftp
15711
15712 @anchor{rngd-service}
15713 @deffn {Scheme Procedure} rngd-service [#:rng-tools @var{rng-tools}] @
15714 [#:device "/dev/hwrng"]
15715 Return a service that runs the @command{rngd} program from @var{rng-tools}
15716 to add @var{device} to the kernel's entropy pool. The service will fail if
15717 @var{device} does not exist.
15718 @end deffn
15719
15720 @anchor{pam-limits-service}
15721 @cindex session limits
15722 @cindex ulimit
15723 @cindex priority
15724 @cindex realtime
15725 @cindex jackd
15726 @cindex nofile
15727 @cindex open file descriptors
15728 @deffn {Scheme Procedure} pam-limits-service [#:limits @code{'()}]
15729
15730 Return a service that installs a configuration file for the
15731 @uref{http://linux-pam.org/Linux-PAM-html/sag-pam_limits.html,
15732 @code{pam_limits} module}. The procedure optionally takes a list of
15733 @code{pam-limits-entry} values, which can be used to specify
15734 @code{ulimit} limits and @code{nice} priority limits to user sessions.
15735
15736 The following limits definition sets two hard and soft limits for all
15737 login sessions of users in the @code{realtime} group:
15738
15739 @lisp
15740 (pam-limits-service
15741 (list
15742 (pam-limits-entry "@@realtime" 'both 'rtprio 99)
15743 (pam-limits-entry "@@realtime" 'both 'memlock 'unlimited)))
15744 @end lisp
15745
15746 The first entry increases the maximum realtime priority for
15747 non-privileged processes; the second entry lifts any restriction of the
15748 maximum address space that can be locked in memory. These settings are
15749 commonly used for real-time audio systems.
15750
15751 Another useful example is raising the maximum number of open file
15752 descriptors that can be used:
15753
15754 @lisp
15755 (pam-limits-service
15756 (list
15757 (pam-limits-entry "*" 'both 'nofile 100000)))
15758 @end lisp
15759
15760 In the above example, the asterisk means the limit should apply to any
15761 user. It is important to ensure the chosen value doesn't exceed the
15762 maximum system value visible in the @file{/proc/sys/fs/file-max} file,
15763 else the users would be prevented from login in. For more information
15764 about the Pluggable Authentication Module (PAM) limits, refer to the
15765 @samp{pam_limits} man page from the @code{linux-pam} package.
15766 @end deffn
15767
15768 @node Scheduled Job Execution
15769 @subsection Scheduled Job Execution
15770
15771 @cindex cron
15772 @cindex mcron
15773 @cindex scheduling jobs
15774 The @code{(gnu services mcron)} module provides an interface to
15775 GNU@tie{}mcron, a daemon to run jobs at scheduled times (@pxref{Top,,,
15776 mcron, GNU@tie{}mcron}). GNU@tie{}mcron is similar to the traditional
15777 Unix @command{cron} daemon; the main difference is that it is
15778 implemented in Guile Scheme, which provides a lot of flexibility when
15779 specifying the scheduling of jobs and their actions.
15780
15781 The example below defines an operating system that runs the
15782 @command{updatedb} (@pxref{Invoking updatedb,,, find, Finding Files})
15783 and the @command{guix gc} commands (@pxref{Invoking guix gc}) daily, as
15784 well as the @command{mkid} command on behalf of an unprivileged user
15785 (@pxref{mkid invocation,,, idutils, ID Database Utilities}). It uses
15786 gexps to introduce job definitions that are passed to mcron
15787 (@pxref{G-Expressions}).
15788
15789 @lisp
15790 (use-modules (guix) (gnu) (gnu services mcron))
15791 (use-package-modules base idutils)
15792
15793 (define updatedb-job
15794 ;; Run 'updatedb' at 3AM every day. Here we write the
15795 ;; job's action as a Scheme procedure.
15796 #~(job '(next-hour '(3))
15797 (lambda ()
15798 (execl (string-append #$findutils "/bin/updatedb")
15799 "updatedb"
15800 "--prunepaths=/tmp /var/tmp /gnu/store"))))
15801
15802 (define garbage-collector-job
15803 ;; Collect garbage 5 minutes after midnight every day.
15804 ;; The job's action is a shell command.
15805 #~(job "5 0 * * *" ;Vixie cron syntax
15806 "guix gc -F 1G"))
15807
15808 (define idutils-job
15809 ;; Update the index database as user "charlie" at 12:15PM
15810 ;; and 19:15PM. This runs from the user's home directory.
15811 #~(job '(next-minute-from (next-hour '(12 19)) '(15))
15812 (string-append #$idutils "/bin/mkid src")
15813 #:user "charlie"))
15814
15815 (operating-system
15816 ;; @dots{}
15817
15818 ;; %BASE-SERVICES already includes an instance of
15819 ;; 'mcron-service-type', which we extend with additional
15820 ;; jobs using 'simple-service'.
15821 (services (cons (simple-service 'my-cron-jobs
15822 mcron-service-type
15823 (list garbage-collector-job
15824 updatedb-job
15825 idutils-job))
15826 %base-services)))
15827 @end lisp
15828
15829 For more complex jobs defined in Scheme where you need control over the top
15830 level, for instance to introduce a @code{use-modules} form, you can move your
15831 code to a separate program using the @code{program-file} procedure of the
15832 @code{(guix gexp)} module (@pxref{G-Expressions}). The example below
15833 illustrates that.
15834
15835 @lisp
15836 (define %battery-alert-job
15837 ;; Beep when the battery percentage falls below %MIN-LEVEL.
15838 #~(job
15839 '(next-minute (range 0 60 1))
15840 #$(program-file
15841 "battery-alert.scm"
15842 (with-imported-modules (source-module-closure
15843 '((guix build utils)))
15844 #~(begin
15845 (use-modules (guix build utils)
15846 (ice-9 popen)
15847 (ice-9 regex)
15848 (ice-9 textual-ports)
15849 (srfi srfi-2))
15850
15851 (define %min-level 20)
15852
15853 (setenv "LC_ALL" "C") ;ensure English output
15854 (and-let* ((input-pipe (open-pipe*
15855 OPEN_READ
15856 #$(file-append acpi "/bin/acpi")))
15857 (output (get-string-all input-pipe))
15858 (m (string-match "Discharging, ([0-9]+)%" output))
15859 (level (string->number (match:substring m 1)))
15860 ((< level %min-level)))
15861 (format #t "warning: Battery level is low (~a%)~%" level)
15862 (invoke #$(file-append beep "/bin/beep") "-r5")))))))
15863 @end lisp
15864
15865 @xref{Guile Syntax, mcron job specifications,, mcron, GNU@tie{}mcron},
15866 for more information on mcron job specifications. Below is the
15867 reference of the mcron service.
15868
15869 On a running system, you can use the @code{schedule} action of the service to
15870 visualize the mcron jobs that will be executed next:
15871
15872 @example
15873 # herd schedule mcron
15874 @end example
15875
15876 @noindent
15877 The example above lists the next five tasks that will be executed, but you can
15878 also specify the number of tasks to display:
15879
15880 @example
15881 # herd schedule mcron 10
15882 @end example
15883
15884 @defvr {Scheme Variable} mcron-service-type
15885 This is the type of the @code{mcron} service, whose value is an
15886 @code{mcron-configuration} object.
15887
15888 This service type can be the target of a service extension that provides
15889 it additional job specifications (@pxref{Service Composition}). In
15890 other words, it is possible to define services that provide additional
15891 mcron jobs to run.
15892 @end defvr
15893
15894 @deftp {Data Type} mcron-configuration
15895 Data type representing the configuration of mcron.
15896
15897 @table @asis
15898 @item @code{mcron} (default: @var{mcron})
15899 The mcron package to use.
15900
15901 @item @code{jobs}
15902 This is a list of gexps (@pxref{G-Expressions}), where each gexp
15903 corresponds to an mcron job specification (@pxref{Syntax, mcron job
15904 specifications,, mcron, GNU@tie{}mcron}).
15905 @end table
15906 @end deftp
15907
15908
15909 @node Log Rotation
15910 @subsection Log Rotation
15911
15912 @cindex rottlog
15913 @cindex log rotation
15914 @cindex logging
15915 Log files such as those found in @file{/var/log} tend to grow endlessly,
15916 so it's a good idea to @dfn{rotate} them once in a while---i.e., archive
15917 their contents in separate files, possibly compressed. The @code{(gnu
15918 services admin)} module provides an interface to GNU@tie{}Rot[t]log, a
15919 log rotation tool (@pxref{Top,,, rottlog, GNU Rot[t]log Manual}).
15920
15921 This service is part of @code{%base-services}, and thus enabled by
15922 default, with the default settings, for commonly encountered log files.
15923 The example below shows how to extend it with an additional
15924 @dfn{rotation}, should you need to do that (usually, services that
15925 produce log files already take care of that):
15926
15927 @lisp
15928 (use-modules (guix) (gnu))
15929 (use-service-modules admin)
15930
15931 (define my-log-files
15932 ;; Log files that I want to rotate.
15933 '("/var/log/something.log" "/var/log/another.log"))
15934
15935 (operating-system
15936 ;; @dots{}
15937 (services (cons (simple-service 'rotate-my-stuff
15938 rottlog-service-type
15939 (list (log-rotation
15940 (frequency 'daily)
15941 (files my-log-files))))
15942 %base-services)))
15943 @end lisp
15944
15945 @defvr {Scheme Variable} rottlog-service-type
15946 This is the type of the Rottlog service, whose value is a
15947 @code{rottlog-configuration} object.
15948
15949 Other services can extend this one with new @code{log-rotation} objects
15950 (see below), thereby augmenting the set of files to be rotated.
15951
15952 This service type can define mcron jobs (@pxref{Scheduled Job
15953 Execution}) to run the rottlog service.
15954 @end defvr
15955
15956 @deftp {Data Type} rottlog-configuration
15957 Data type representing the configuration of rottlog.
15958
15959 @table @asis
15960 @item @code{rottlog} (default: @code{rottlog})
15961 The Rottlog package to use.
15962
15963 @item @code{rc-file} (default: @code{(file-append rottlog "/etc/rc")})
15964 The Rottlog configuration file to use (@pxref{Mandatory RC Variables,,,
15965 rottlog, GNU Rot[t]log Manual}).
15966
15967 @item @code{rotations} (default: @code{%default-rotations})
15968 A list of @code{log-rotation} objects as defined below.
15969
15970 @item @code{jobs}
15971 This is a list of gexps where each gexp corresponds to an mcron job
15972 specification (@pxref{Scheduled Job Execution}).
15973 @end table
15974 @end deftp
15975
15976 @deftp {Data Type} log-rotation
15977 Data type representing the rotation of a group of log files.
15978
15979 Taking an example from the Rottlog manual (@pxref{Period Related File
15980 Examples,,, rottlog, GNU Rot[t]log Manual}), a log rotation might be
15981 defined like this:
15982
15983 @lisp
15984 (log-rotation
15985 (frequency 'daily)
15986 (files '("/var/log/apache/*"))
15987 (options '("storedir apache-archives"
15988 "rotate 6"
15989 "notifempty"
15990 "nocompress")))
15991 @end lisp
15992
15993 The list of fields is as follows:
15994
15995 @table @asis
15996 @item @code{frequency} (default: @code{'weekly})
15997 The log rotation frequency, a symbol.
15998
15999 @item @code{files}
16000 The list of files or file glob patterns to rotate.
16001
16002 @item @code{options} (default: @code{'()})
16003 The list of rottlog options for this rotation (@pxref{Configuration
16004 parameters,,, rottlog, GNU Rot[t]lg Manual}).
16005
16006 @item @code{post-rotate} (default: @code{#f})
16007 Either @code{#f} or a gexp to execute once the rotation has completed.
16008 @end table
16009 @end deftp
16010
16011 @defvr {Scheme Variable} %default-rotations
16012 Specifies weekly rotation of @code{%rotated-files} and of
16013 @file{/var/log/guix-daemon.log}.
16014 @end defvr
16015
16016 @defvr {Scheme Variable} %rotated-files
16017 The list of syslog-controlled files to be rotated. By default it is:
16018 @code{'("/var/log/messages" "/var/log/secure" "/var/log/debug" \
16019 "/var/log/maillog")}.
16020 @end defvr
16021
16022 @node Networking Services
16023 @subsection Networking Services
16024
16025 The @code{(gnu services networking)} module provides services to configure
16026 the network interface.
16027
16028 @cindex DHCP, networking service
16029 @defvr {Scheme Variable} dhcp-client-service-type
16030 This is the type of services that run @var{dhcp}, a Dynamic Host Configuration
16031 Protocol (DHCP) client, on all the non-loopback network interfaces. Its value
16032 is the DHCP client package to use, @code{isc-dhcp} by default.
16033 @end defvr
16034
16035 @deffn {Scheme Procedure} dhcpd-service-type
16036 This type defines a service that runs a DHCP daemon. To create a
16037 service of this type, you must supply a @code{<dhcpd-configuration>}.
16038 For example:
16039
16040 @lisp
16041 (service dhcpd-service-type
16042 (dhcpd-configuration
16043 (config-file (local-file "my-dhcpd.conf"))
16044 (interfaces '("enp0s25"))))
16045 @end lisp
16046 @end deffn
16047
16048 @deftp {Data Type} dhcpd-configuration
16049 @table @asis
16050 @item @code{package} (default: @code{isc-dhcp})
16051 The package that provides the DHCP daemon. This package is expected to
16052 provide the daemon at @file{sbin/dhcpd} relative to its output
16053 directory. The default package is the
16054 @uref{https://www.isc.org/products/DHCP, ISC's DHCP server}.
16055 @item @code{config-file} (default: @code{#f})
16056 The configuration file to use. This is required. It will be passed to
16057 @code{dhcpd} via its @code{-cf} option. This may be any ``file-like''
16058 object (@pxref{G-Expressions, file-like objects}). See @code{man
16059 dhcpd.conf} for details on the configuration file syntax.
16060 @item @code{version} (default: @code{"4"})
16061 The DHCP version to use. The ISC DHCP server supports the values ``4'',
16062 ``6'', and ``4o6''. These correspond to the @code{dhcpd} program
16063 options @code{-4}, @code{-6}, and @code{-4o6}. See @code{man dhcpd} for
16064 details.
16065 @item @code{run-directory} (default: @code{"/run/dhcpd"})
16066 The run directory to use. At service activation time, this directory
16067 will be created if it does not exist.
16068 @item @code{pid-file} (default: @code{"/run/dhcpd/dhcpd.pid"})
16069 The PID file to use. This corresponds to the @code{-pf} option of
16070 @code{dhcpd}. See @code{man dhcpd} for details.
16071 @item @code{interfaces} (default: @code{'()})
16072 The names of the network interfaces on which dhcpd should listen for
16073 broadcasts. If this list is not empty, then its elements (which must be
16074 strings) will be appended to the @code{dhcpd} invocation when starting
16075 the daemon. It may not be necessary to explicitly specify any
16076 interfaces here; see @code{man dhcpd} for details.
16077 @end table
16078 @end deftp
16079
16080 @defvr {Scheme Variable} static-networking-service-type
16081 This is the type for statically-configured network interfaces.
16082 @c TODO Document <static-networking> data structures.
16083 @end defvr
16084
16085 @deffn {Scheme Procedure} static-networking-service @var{interface} @var{ip} @
16086 [#:netmask #f] [#:gateway #f] [#:name-servers @code{'()}] @
16087 [#:requirement @code{'(udev)}]
16088 Return a service that starts @var{interface} with address @var{ip}. If
16089 @var{netmask} is true, use it as the network mask. If @var{gateway} is true,
16090 it must be a string specifying the default network gateway. @var{requirement}
16091 can be used to declare a dependency on another service before configuring the
16092 interface.
16093
16094 This procedure can be called several times, one for each network
16095 interface of interest. Behind the scenes what it does is extend
16096 @code{static-networking-service-type} with additional network interfaces
16097 to handle.
16098
16099 For example:
16100
16101 @lisp
16102 (static-networking-service "eno1" "192.168.1.82"
16103 #:gateway "192.168.1.2"
16104 #:name-servers '("192.168.1.2"))
16105 @end lisp
16106 @end deffn
16107
16108 @cindex wicd
16109 @cindex wireless
16110 @cindex WiFi
16111 @cindex network management
16112 @deffn {Scheme Procedure} wicd-service [#:wicd @var{wicd}]
16113 Return a service that runs @url{https://launchpad.net/wicd,Wicd}, a network
16114 management daemon that aims to simplify wired and wireless networking.
16115
16116 This service adds the @var{wicd} package to the global profile, providing
16117 several commands to interact with the daemon and configure networking:
16118 @command{wicd-client}, a graphical user interface, and the @command{wicd-cli}
16119 and @command{wicd-curses} user interfaces.
16120 @end deffn
16121
16122 @cindex ModemManager
16123
16124 @defvr {Scheme Variable} modem-manager-service-type
16125 This is the service type for the
16126 @uref{https://wiki.gnome.org/Projects/ModemManager, ModemManager}
16127 service. The value for this service type is a
16128 @code{modem-manager-configuration} record.
16129
16130 This service is part of @code{%desktop-services} (@pxref{Desktop
16131 Services}).
16132 @end defvr
16133
16134 @deftp {Data Type} modem-manager-configuration
16135 Data type representing the configuration of ModemManager.
16136
16137 @table @asis
16138 @item @code{modem-manager} (default: @code{modem-manager})
16139 The ModemManager package to use.
16140
16141 @end table
16142 @end deftp
16143
16144 @cindex USB_ModeSwitch
16145 @cindex Modeswitching
16146
16147 @defvr {Scheme Variable} usb-modeswitch-service-type
16148 This is the service type for the
16149 @uref{https://www.draisberghof.de/usb_modeswitch/, USB_ModeSwitch}
16150 service. The value for this service type is
16151 a @code{usb-modeswitch-configuration} record.
16152
16153 When plugged in, some USB modems (and other USB devices) initially present
16154 themselves as a read-only storage medium and not as a modem. They need to be
16155 @dfn{modeswitched} before they are usable. The USB_ModeSwitch service type
16156 installs udev rules to automatically modeswitch these devices when they are
16157 plugged in.
16158
16159 This service is part of @code{%desktop-services} (@pxref{Desktop
16160 Services}).
16161 @end defvr
16162
16163 @deftp {Data Type} usb-modeswitch-configuration
16164 Data type representing the configuration of USB_ModeSwitch.
16165
16166 @table @asis
16167 @item @code{usb-modeswitch} (default: @code{usb-modeswitch})
16168 The USB_ModeSwitch package providing the binaries for modeswitching.
16169
16170 @item @code{usb-modeswitch-data} (default: @code{usb-modeswitch-data})
16171 The package providing the device data and udev rules file used by
16172 USB_ModeSwitch.
16173
16174 @item @code{config-file} (default: @code{#~(string-append #$usb-modeswitch:dispatcher "/etc/usb_modeswitch.conf")})
16175 Which config file to use for the USB_ModeSwitch dispatcher. By default the
16176 config file shipped with USB_ModeSwitch is used which disables logging to
16177 @file{/var/log} among other default settings. If set to @code{#f}, no config
16178 file is used.
16179
16180 @end table
16181 @end deftp
16182
16183 @cindex NetworkManager
16184
16185 @defvr {Scheme Variable} network-manager-service-type
16186 This is the service type for the
16187 @uref{https://wiki.gnome.org/Projects/NetworkManager, NetworkManager}
16188 service. The value for this service type is a
16189 @code{network-manager-configuration} record.
16190
16191 This service is part of @code{%desktop-services} (@pxref{Desktop
16192 Services}).
16193 @end defvr
16194
16195 @deftp {Data Type} network-manager-configuration
16196 Data type representing the configuration of NetworkManager.
16197
16198 @table @asis
16199 @item @code{network-manager} (default: @code{network-manager})
16200 The NetworkManager package to use.
16201
16202 @item @code{dns} (default: @code{"default"})
16203 Processing mode for DNS, which affects how NetworkManager uses the
16204 @code{resolv.conf} configuration file.
16205
16206 @table @samp
16207 @item default
16208 NetworkManager will update @code{resolv.conf} to reflect the nameservers
16209 provided by currently active connections.
16210
16211 @item dnsmasq
16212 NetworkManager will run @code{dnsmasq} as a local caching nameserver, using a
16213 @dfn{conditional forwarding} configuration if you are connected to a VPN, and
16214 then update @code{resolv.conf} to point to the local nameserver.
16215
16216 With this setting, you can share your network connection. For example when
16217 you want to share your network connection to another laptop @i{via} an
16218 Ethernet cable, you can open @command{nm-connection-editor} and configure the
16219 Wired connection's method for IPv4 and IPv6 to be ``Shared to other computers''
16220 and reestablish the connection (or reboot).
16221
16222 You can also set up a @dfn{host-to-guest connection} to QEMU VMs
16223 (@pxref{Installing Guix in a VM}). With a host-to-guest connection, you can
16224 e.g.@: access a Web server running on the VM (@pxref{Web Services}) from a Web
16225 browser on your host system, or connect to the VM @i{via} SSH
16226 (@pxref{Networking Services, @code{openssh-service-type}}). To set up a
16227 host-to-guest connection, run this command once:
16228
16229 @example
16230 nmcli connection add type tun \
16231 connection.interface-name tap0 \
16232 tun.mode tap tun.owner $(id -u) \
16233 ipv4.method shared \
16234 ipv4.addresses 172.28.112.1/24
16235 @end example
16236
16237 Then each time you launch your QEMU VM (@pxref{Running Guix in a VM}), pass
16238 @option{-nic tap,ifname=tap0,script=no,downscript=no} to
16239 @command{qemu-system-...}.
16240
16241 @item none
16242 NetworkManager will not modify @code{resolv.conf}.
16243 @end table
16244
16245 @item @code{vpn-plugins} (default: @code{'()})
16246 This is the list of available plugins for virtual private networks
16247 (VPNs). An example of this is the @code{network-manager-openvpn}
16248 package, which allows NetworkManager to manage VPNs @i{via} OpenVPN.
16249
16250 @end table
16251 @end deftp
16252
16253 @cindex Connman
16254 @deffn {Scheme Variable} connman-service-type
16255 This is the service type to run @url{https://01.org/connman,Connman},
16256 a network connection manager.
16257
16258 Its value must be an
16259 @code{connman-configuration} record as in this example:
16260
16261 @lisp
16262 (service connman-service-type
16263 (connman-configuration
16264 (disable-vpn? #t)))
16265 @end lisp
16266
16267 See below for details about @code{connman-configuration}.
16268 @end deffn
16269
16270 @deftp {Data Type} connman-configuration
16271 Data Type representing the configuration of connman.
16272
16273 @table @asis
16274 @item @code{connman} (default: @var{connman})
16275 The connman package to use.
16276
16277 @item @code{disable-vpn?} (default: @code{#f})
16278 When true, disable connman's vpn plugin.
16279 @end table
16280 @end deftp
16281
16282 @cindex WPA Supplicant
16283 @defvr {Scheme Variable} wpa-supplicant-service-type
16284 This is the service type to run @url{https://w1.fi/wpa_supplicant/,WPA
16285 supplicant}, an authentication daemon required to authenticate against
16286 encrypted WiFi or ethernet networks.
16287 @end defvr
16288
16289 @deftp {Data Type} wpa-supplicant-configuration
16290 Data type representing the configuration of WPA Supplicant.
16291
16292 It takes the following parameters:
16293
16294 @table @asis
16295 @item @code{wpa-supplicant} (default: @code{wpa-supplicant})
16296 The WPA Supplicant package to use.
16297
16298 @item @code{requirement} (default: @code{'(user-processes loopback syslogd)}
16299 List of services that should be started before WPA Supplicant starts.
16300
16301 @item @code{dbus?} (default: @code{#t})
16302 Whether to listen for requests on D-Bus.
16303
16304 @item @code{pid-file} (default: @code{"/var/run/wpa_supplicant.pid"})
16305 Where to store the PID file.
16306
16307 @item @code{interface} (default: @code{#f})
16308 If this is set, it must specify the name of a network interface that
16309 WPA supplicant will control.
16310
16311 @item @code{config-file} (default: @code{#f})
16312 Optional configuration file to use.
16313
16314 @item @code{extra-options} (default: @code{'()})
16315 List of additional command-line arguments to pass to the daemon.
16316 @end table
16317 @end deftp
16318
16319 @cindex hostapd service, for Wi-Fi access points
16320 @cindex Wi-Fi access points, hostapd service
16321 @defvr {Scheme Variable} hostapd-service-type
16322 This is the service type to run the @uref{https://w1.fi/hostapd/,
16323 hostapd} daemon to set up WiFi (IEEE 802.11) access points and
16324 authentication servers. Its associated value must be a
16325 @code{hostapd-configuration} as shown below:
16326
16327 @lisp
16328 ;; Use wlan1 to run the access point for "My Network".
16329 (service hostapd-service-type
16330 (hostapd-configuration
16331 (interface "wlan1")
16332 (ssid "My Network")
16333 (channel 12)))
16334 @end lisp
16335 @end defvr
16336
16337 @deftp {Data Type} hostapd-configuration
16338 This data type represents the configuration of the hostapd service, with
16339 the following fields:
16340
16341 @table @asis
16342 @item @code{package} (default: @code{hostapd})
16343 The hostapd package to use.
16344
16345 @item @code{interface} (default: @code{"wlan0"})
16346 The network interface to run the WiFi access point.
16347
16348 @item @code{ssid}
16349 The SSID (@dfn{service set identifier}), a string that identifies this
16350 network.
16351
16352 @item @code{broadcast-ssid?} (default: @code{#t})
16353 Whether to broadcast this SSID.
16354
16355 @item @code{channel} (default: @code{1})
16356 The WiFi channel to use.
16357
16358 @item @code{driver} (default: @code{"nl80211"})
16359 The driver interface type. @code{"nl80211"} is used with all Linux
16360 mac80211 drivers. Use @code{"none"} if building hostapd as a standalone
16361 RADIUS server that does # not control any wireless/wired driver.
16362
16363 @item @code{extra-settings} (default: @code{""})
16364 Extra settings to append as-is to the hostapd configuration file. See
16365 @uref{https://w1.fi/cgit/hostap/plain/hostapd/hostapd.conf} for the
16366 configuration file reference.
16367 @end table
16368 @end deftp
16369
16370 @defvr {Scheme Variable} simulated-wifi-service-type
16371 This is the type of a service to simulate WiFi networking, which can be
16372 useful in virtual machines for testing purposes. The service loads the
16373 Linux kernel
16374 @uref{https://www.kernel.org/doc/html/latest/networking/mac80211_hwsim/mac80211_hwsim.html,
16375 @code{mac80211_hwsim} module} and starts hostapd to create a pseudo WiFi
16376 network that can be seen on @code{wlan0}, by default.
16377
16378 The service's value is a @code{hostapd-configuration} record.
16379 @end defvr
16380
16381 @cindex iptables
16382 @defvr {Scheme Variable} iptables-service-type
16383 This is the service type to set up an iptables configuration. iptables is a
16384 packet filtering framework supported by the Linux kernel. This service
16385 supports configuring iptables for both IPv4 and IPv6. A simple example
16386 configuration rejecting all incoming connections except those to the ssh port
16387 22 is shown below.
16388
16389 @lisp
16390 (service iptables-service-type
16391 (iptables-configuration
16392 (ipv4-rules (plain-file "iptables.rules" "*filter
16393 :INPUT ACCEPT
16394 :FORWARD ACCEPT
16395 :OUTPUT ACCEPT
16396 -A INPUT -p tcp --dport 22 -j ACCEPT
16397 -A INPUT -j REJECT --reject-with icmp-port-unreachable
16398 COMMIT
16399 "))
16400 (ipv6-rules (plain-file "ip6tables.rules" "*filter
16401 :INPUT ACCEPT
16402 :FORWARD ACCEPT
16403 :OUTPUT ACCEPT
16404 -A INPUT -p tcp --dport 22 -j ACCEPT
16405 -A INPUT -j REJECT --reject-with icmp6-port-unreachable
16406 COMMIT
16407 "))))
16408 @end lisp
16409 @end defvr
16410
16411 @deftp {Data Type} iptables-configuration
16412 The data type representing the configuration of iptables.
16413
16414 @table @asis
16415 @item @code{iptables} (default: @code{iptables})
16416 The iptables package that provides @code{iptables-restore} and
16417 @code{ip6tables-restore}.
16418 @item @code{ipv4-rules} (default: @code{%iptables-accept-all-rules})
16419 The iptables rules to use. It will be passed to @code{iptables-restore}.
16420 This may be any ``file-like'' object (@pxref{G-Expressions, file-like
16421 objects}).
16422 @item @code{ipv6-rules} (default: @code{%iptables-accept-all-rules})
16423 The ip6tables rules to use. It will be passed to @code{ip6tables-restore}.
16424 This may be any ``file-like'' object (@pxref{G-Expressions, file-like
16425 objects}).
16426 @end table
16427 @end deftp
16428
16429 @cindex nftables
16430 @defvr {Scheme Variable} nftables-service-type
16431 This is the service type to set up a nftables configuration. nftables is a
16432 netfilter project that aims to replace the existing iptables, ip6tables,
16433 arptables and ebtables framework. It provides a new packet filtering
16434 framework, a new user-space utility @command{nft}, and a compatibility layer
16435 for iptables. This service comes with a default ruleset
16436 @code{%default-nftables-ruleset} that rejecting all incoming connections
16437 except those to the ssh port 22. To use it, simply write:
16438
16439 @lisp
16440 (service nftables-service-type)
16441 @end lisp
16442 @end defvr
16443
16444 @deftp {Data Type} nftables-configuration
16445 The data type representing the configuration of nftables.
16446
16447 @table @asis
16448 @item @code{package} (default: @code{nftables})
16449 The nftables package that provides @command{nft}.
16450 @item @code{ruleset} (default: @code{%default-nftables-ruleset})
16451 The nftables ruleset to use. This may be any ``file-like'' object
16452 (@pxref{G-Expressions, file-like objects}).
16453 @end table
16454 @end deftp
16455
16456 @cindex NTP (Network Time Protocol), service
16457 @cindex ntpd, service for the Network Time Protocol daemon
16458 @cindex real time clock
16459 @defvr {Scheme Variable} ntp-service-type
16460 This is the type of the service running the @uref{https://www.ntp.org,
16461 Network Time Protocol (NTP)} daemon, @command{ntpd}. The daemon will keep the
16462 system clock synchronized with that of the specified NTP servers.
16463
16464 The value of this service is an @code{ntpd-configuration} object, as described
16465 below.
16466 @end defvr
16467
16468 @deftp {Data Type} ntp-configuration
16469 This is the data type for the NTP service configuration.
16470
16471 @table @asis
16472 @item @code{servers} (default: @code{%ntp-servers})
16473 This is the list of servers (@code{<ntp-server>} records) with which
16474 @command{ntpd} will be synchronized. See the @code{ntp-server} data type
16475 definition below.
16476
16477 @item @code{allow-large-adjustment?} (default: @code{#t})
16478 This determines whether @command{ntpd} is allowed to make an initial
16479 adjustment of more than 1,000 seconds.
16480
16481 @item @code{ntp} (default: @code{ntp})
16482 The NTP package to use.
16483 @end table
16484 @end deftp
16485
16486 @defvr {Scheme Variable} %ntp-servers
16487 List of host names used as the default NTP servers. These are servers of the
16488 @uref{https://www.ntppool.org/en/, NTP Pool Project}.
16489 @end defvr
16490
16491 @deftp {Data Type} ntp-server
16492 The data type representing the configuration of a NTP server.
16493
16494 @table @asis
16495 @item @code{type} (default: @code{'server})
16496 The type of the NTP server, given as a symbol. One of @code{'pool},
16497 @code{'server}, @code{'peer}, @code{'broadcast} or @code{'manycastclient}.
16498
16499 @item @code{address}
16500 The address of the server, as a string.
16501
16502 @item @code{options}
16503 NTPD options to use with that specific server, given as a list of option names
16504 and/or of option names and values tuples. The following example define a server
16505 to use with the options @option{iburst} and @option{prefer}, as well as
16506 @option{version} 3 and a @option{maxpoll} time of 16 seconds.
16507
16508 @example
16509 (ntp-server
16510 (type 'server)
16511 (address "some.ntp.server.org")
16512 (options `(iburst (version 3) (maxpoll 16) prefer))))
16513 @end example
16514 @end table
16515 @end deftp
16516
16517 @cindex OpenNTPD
16518 @deffn {Scheme Procedure} openntpd-service-type
16519 Run the @command{ntpd}, the Network Time Protocol (NTP) daemon, as implemented
16520 by @uref{http://www.openntpd.org, OpenNTPD}. The daemon will keep the system
16521 clock synchronized with that of the given servers.
16522
16523 @lisp
16524 (service
16525 openntpd-service-type
16526 (openntpd-configuration
16527 (listen-on '("127.0.0.1" "::1"))
16528 (sensor '("udcf0 correction 70000"))
16529 (constraint-from '("www.gnu.org"))
16530 (constraints-from '("https://www.google.com/"))))
16531
16532 @end lisp
16533 @end deffn
16534
16535 @defvr {Scheme Variable} %openntpd-servers
16536 This variable is a list of the server addresses defined in
16537 @code{%ntp-servers}.
16538 @end defvr
16539
16540 @deftp {Data Type} openntpd-configuration
16541 @table @asis
16542 @item @code{openntpd} (default: @code{(file-append openntpd "/sbin/ntpd")})
16543 The openntpd executable to use.
16544 @item @code{listen-on} (default: @code{'("127.0.0.1" "::1")})
16545 A list of local IP addresses or hostnames the ntpd daemon should listen on.
16546 @item @code{query-from} (default: @code{'()})
16547 A list of local IP address the ntpd daemon should use for outgoing queries.
16548 @item @code{sensor} (default: @code{'()})
16549 Specify a list of timedelta sensor devices ntpd should use. @code{ntpd}
16550 will listen to each sensor that actually exists and ignore non-existent ones.
16551 See @uref{https://man.openbsd.org/ntpd.conf, upstream documentation} for more
16552 information.
16553 @item @code{server} (default: @code{'()})
16554 Specify a list of IP addresses or hostnames of NTP servers to synchronize to.
16555 @item @code{servers} (default: @code{%openntp-servers})
16556 Specify a list of IP addresses or hostnames of NTP pools to synchronize to.
16557 @item @code{constraint-from} (default: @code{'()})
16558 @code{ntpd} can be configured to query the ‘Date’ from trusted HTTPS servers via TLS.
16559 This time information is not used for precision but acts as an authenticated
16560 constraint, thereby reducing the impact of unauthenticated NTP
16561 man-in-the-middle attacks.
16562 Specify a list of URLs, IP addresses or hostnames of HTTPS servers to provide
16563 a constraint.
16564 @item @code{constraints-from} (default: @code{'()})
16565 As with constraint from, specify a list of URLs, IP addresses or hostnames of
16566 HTTPS servers to provide a constraint. Should the hostname resolve to multiple
16567 IP addresses, @code{ntpd} will calculate a median constraint from all of them.
16568 @end table
16569 @end deftp
16570
16571 @cindex inetd
16572 @deffn {Scheme variable} inetd-service-type
16573 This service runs the @command{inetd} (@pxref{inetd invocation,,,
16574 inetutils, GNU Inetutils}) daemon. @command{inetd} listens for
16575 connections on internet sockets, and lazily starts the specified server
16576 program when a connection is made on one of these sockets.
16577
16578 The value of this service is an @code{inetd-configuration} object. The
16579 following example configures the @command{inetd} daemon to provide the
16580 built-in @command{echo} service, as well as an smtp service which
16581 forwards smtp traffic over ssh to a server @code{smtp-server} behind a
16582 gateway @code{hostname}:
16583
16584 @lisp
16585 (service
16586 inetd-service-type
16587 (inetd-configuration
16588 (entries (list
16589 (inetd-entry
16590 (name "echo")
16591 (socket-type 'stream)
16592 (protocol "tcp")
16593 (wait? #f)
16594 (user "root"))
16595 (inetd-entry
16596 (node "127.0.0.1")
16597 (name "smtp")
16598 (socket-type 'stream)
16599 (protocol "tcp")
16600 (wait? #f)
16601 (user "root")
16602 (program (file-append openssh "/bin/ssh"))
16603 (arguments
16604 '("ssh" "-qT" "-i" "/path/to/ssh_key"
16605 "-W" "smtp-server:25" "user@@hostname")))))))
16606 @end lisp
16607
16608 See below for more details about @code{inetd-configuration}.
16609 @end deffn
16610
16611 @deftp {Data Type} inetd-configuration
16612 Data type representing the configuration of @command{inetd}.
16613
16614 @table @asis
16615 @item @code{program} (default: @code{(file-append inetutils "/libexec/inetd")})
16616 The @command{inetd} executable to use.
16617
16618 @item @code{entries} (default: @code{'()})
16619 A list of @command{inetd} service entries. Each entry should be created
16620 by the @code{inetd-entry} constructor.
16621 @end table
16622 @end deftp
16623
16624 @deftp {Data Type} inetd-entry
16625 Data type representing an entry in the @command{inetd} configuration.
16626 Each entry corresponds to a socket where @command{inetd} will listen for
16627 requests.
16628
16629 @table @asis
16630 @item @code{node} (default: @code{#f})
16631 Optional string, a comma-separated list of local addresses
16632 @command{inetd} should use when listening for this service.
16633 @xref{Configuration file,,, inetutils, GNU Inetutils} for a complete
16634 description of all options.
16635 @item @code{name}
16636 A string, the name must correspond to an entry in @code{/etc/services}.
16637 @item @code{socket-type}
16638 One of @code{'stream}, @code{'dgram}, @code{'raw}, @code{'rdm} or
16639 @code{'seqpacket}.
16640 @item @code{protocol}
16641 A string, must correspond to an entry in @code{/etc/protocols}.
16642 @item @code{wait?} (default: @code{#t})
16643 Whether @command{inetd} should wait for the server to exit before
16644 listening to new service requests.
16645 @item @code{user}
16646 A string containing the user (and, optionally, group) name of the user
16647 as whom the server should run. The group name can be specified in a
16648 suffix, separated by a colon or period, i.e.@: @code{"user"},
16649 @code{"user:group"} or @code{"user.group"}.
16650 @item @code{program} (default: @code{"internal"})
16651 The server program which will serve the requests, or @code{"internal"}
16652 if @command{inetd} should use a built-in service.
16653 @item @code{arguments} (default: @code{'()})
16654 A list strings or file-like objects, which are the server program's
16655 arguments, starting with the zeroth argument, i.e.@: the name of the
16656 program itself. For @command{inetd}'s internal services, this entry
16657 must be @code{'()} or @code{'("internal")}.
16658 @end table
16659
16660 @xref{Configuration file,,, inetutils, GNU Inetutils} for a more
16661 detailed discussion of each configuration field.
16662 @end deftp
16663
16664 @cindex Tor
16665 @defvr {Scheme Variable} tor-service-type
16666 This is the type for a service that runs the @uref{https://torproject.org,
16667 Tor} anonymous networking daemon. The service is configured using a
16668 @code{<tor-configuration>} record. By default, the Tor daemon runs as the
16669 @code{tor} unprivileged user, which is a member of the @code{tor} group.
16670
16671 @end defvr
16672
16673 @deftp {Data Type} tor-configuration
16674 @table @asis
16675 @item @code{tor} (default: @code{tor})
16676 The package that provides the Tor daemon. This package is expected to provide
16677 the daemon at @file{bin/tor} relative to its output directory. The default
16678 package is the @uref{https://www.torproject.org, Tor Project's}
16679 implementation.
16680
16681 @item @code{config-file} (default: @code{(plain-file "empty" "")})
16682 The configuration file to use. It will be appended to a default configuration
16683 file, and the final configuration file will be passed to @code{tor} via its
16684 @code{-f} option. This may be any ``file-like'' object (@pxref{G-Expressions,
16685 file-like objects}). See @code{man tor} for details on the configuration file
16686 syntax.
16687
16688 @item @code{hidden-services} (default: @code{'()})
16689 The list of @code{<hidden-service>} records to use. For any hidden service
16690 you include in this list, appropriate configuration to enable the hidden
16691 service will be automatically added to the default configuration file. You
16692 may conveniently create @code{<hidden-service>} records using the
16693 @code{tor-hidden-service} procedure described below.
16694
16695 @item @code{socks-socket-type} (default: @code{'tcp})
16696 The default socket type that Tor should use for its SOCKS socket. This must
16697 be either @code{'tcp} or @code{'unix}. If it is @code{'tcp}, then by default
16698 Tor will listen on TCP port 9050 on the loopback interface (i.e., localhost).
16699 If it is @code{'unix}, then Tor will listen on the UNIX domain socket
16700 @file{/var/run/tor/socks-sock}, which will be made writable by members of the
16701 @code{tor} group.
16702
16703 If you want to customize the SOCKS socket in more detail, leave
16704 @code{socks-socket-type} at its default value of @code{'tcp} and use
16705 @code{config-file} to override the default by providing your own
16706 @code{SocksPort} option.
16707
16708 @item @code{control-socket?} (default: @code{#f})
16709 Whether or not to provide a ``control socket'' by which Tor can be
16710 controlled to, for instance, dynamically instantiate tor onion services.
16711 If @code{#t}, Tor will listen for control commands on the UNIX domain socket
16712 @file{/var/run/tor/control-sock}, which will be made writable by members of the
16713 @code{tor} group.
16714
16715 @end table
16716 @end deftp
16717
16718 @cindex hidden service
16719 @deffn {Scheme Procedure} tor-hidden-service @var{name} @var{mapping}
16720 Define a new Tor @dfn{hidden service} called @var{name} and implementing
16721 @var{mapping}. @var{mapping} is a list of port/host tuples, such as:
16722
16723 @example
16724 '((22 "127.0.0.1:22")
16725 (80 "127.0.0.1:8080"))
16726 @end example
16727
16728 In this example, port 22 of the hidden service is mapped to local port 22, and
16729 port 80 is mapped to local port 8080.
16730
16731 This creates a @file{/var/lib/tor/hidden-services/@var{name}} directory, where
16732 the @file{hostname} file contains the @code{.onion} host name for the hidden
16733 service.
16734
16735 See @uref{https://www.torproject.org/docs/tor-hidden-service.html.en, the Tor
16736 project's documentation} for more information.
16737 @end deffn
16738
16739 The @code{(gnu services rsync)} module provides the following services:
16740
16741 You might want an rsync daemon if you have files that you want available
16742 so anyone (or just yourself) can download existing files or upload new
16743 files.
16744
16745 @deffn {Scheme Variable} rsync-service-type
16746 This is the service type for the @uref{https://rsync.samba.org, rsync} daemon,
16747 The value for this service type is a
16748 @command{rsync-configuration} record as in this example:
16749
16750 @lisp
16751 (service rsync-service-type)
16752 @end lisp
16753
16754 See below for details about @code{rsync-configuration}.
16755 @end deffn
16756
16757 @deftp {Data Type} rsync-configuration
16758 Data type representing the configuration for @code{rsync-service}.
16759
16760 @table @asis
16761 @item @code{package} (default: @var{rsync})
16762 @code{rsync} package to use.
16763
16764 @item @code{port-number} (default: @code{873})
16765 TCP port on which @command{rsync} listens for incoming connections. If port
16766 is less than @code{1024} @command{rsync} needs to be started as the
16767 @code{root} user and group.
16768
16769 @item @code{pid-file} (default: @code{"/var/run/rsyncd/rsyncd.pid"})
16770 Name of the file where @command{rsync} writes its PID.
16771
16772 @item @code{lock-file} (default: @code{"/var/run/rsyncd/rsyncd.lock"})
16773 Name of the file where @command{rsync} writes its lock file.
16774
16775 @item @code{log-file} (default: @code{"/var/log/rsyncd.log"})
16776 Name of the file where @command{rsync} writes its log file.
16777
16778 @item @code{use-chroot?} (default: @var{#t})
16779 Whether to use chroot for @command{rsync} shared directory.
16780
16781 @item @code{share-path} (default: @file{/srv/rsync})
16782 Location of the @command{rsync} shared directory.
16783
16784 @item @code{share-comment} (default: @code{"Rsync share"})
16785 Comment of the @command{rsync} shared directory.
16786
16787 @item @code{read-only?} (default: @var{#f})
16788 Read-write permissions to shared directory.
16789
16790 @item @code{timeout} (default: @code{300})
16791 I/O timeout in seconds.
16792
16793 @item @code{user} (default: @var{"root"})
16794 Owner of the @code{rsync} process.
16795
16796 @item @code{group} (default: @var{"root"})
16797 Group of the @code{rsync} process.
16798
16799 @item @code{uid} (default: @var{"rsyncd"})
16800 User name or user ID that file transfers to and from that module should take
16801 place as when the daemon was run as @code{root}.
16802
16803 @item @code{gid} (default: @var{"rsyncd"})
16804 Group name or group ID that will be used when accessing the module.
16805
16806 @end table
16807 @end deftp
16808
16809 The @code{(gnu services syncthing)} module provides the following services:
16810 @cindex syncthing
16811
16812 You might want a syncthing daemon if you have files between two or more
16813 computers and want to sync them in real time, safely protected from
16814 prying eyes.
16815
16816 @deffn {Scheme Variable} syncthing-service-type
16817 This is the service type for the @uref{https://syncthing.net/,
16818 syncthing} daemon, The value for this service type is a
16819 @command{syncthing-configuration} record as in this example:
16820
16821 @lisp
16822 (service syncthing-service-type
16823 (syncthing-configuration (user "alice")))
16824 @end lisp
16825
16826 See below for details about @code{syncthing-configuration}.
16827
16828 @deftp {Data Type} syncthing-configuration
16829 Data type representing the configuration for @code{syncthing-service-type}.
16830
16831 @table @asis
16832 @item @code{syncthing} (default: @var{syncthing})
16833 @code{syncthing} package to use.
16834
16835 @item @code{arguments} (default: @var{'()})
16836 List of command-line arguments passing to @code{syncthing} binary.
16837
16838 @item @code{logflags} (default: @var{0})
16839 Sum of logging flags, see
16840 @uref{https://docs.syncthing.net/users/syncthing.html#cmdoption-logflags, Syncthing documentation logflags}.
16841
16842 @item @code{user} (default: @var{#f})
16843 The user as which the Syncthing service is to be run.
16844 This assumes that the specified user exists.
16845
16846 @item @code{group} (default: @var{"users"})
16847 The group as which the Syncthing service is to be run.
16848 This assumes that the specified group exists.
16849
16850 @item @code{home} (default: @var{#f})
16851 Common configuration and data directory. The default configuration
16852 directory is @file{$HOME} of the specified Syncthing @code{user}.
16853
16854 @end table
16855 @end deftp
16856 @end deffn
16857
16858 Furthermore, @code{(gnu services ssh)} provides the following services.
16859 @cindex SSH
16860 @cindex SSH server
16861
16862 @deffn {Scheme Procedure} lsh-service [#:host-key "/etc/lsh/host-key"] @
16863 [#:daemonic? #t] [#:interfaces '()] [#:port-number 22] @
16864 [#:allow-empty-passwords? #f] [#:root-login? #f] @
16865 [#:syslog-output? #t] [#:x11-forwarding? #t] @
16866 [#:tcp/ip-forwarding? #t] [#:password-authentication? #t] @
16867 [#:public-key-authentication? #t] [#:initialize? #t]
16868 Run the @command{lshd} program from @var{lsh} to listen on port @var{port-number}.
16869 @var{host-key} must designate a file containing the host key, and readable
16870 only by root.
16871
16872 When @var{daemonic?} is true, @command{lshd} will detach from the
16873 controlling terminal and log its output to syslogd, unless one sets
16874 @var{syslog-output?} to false. Obviously, it also makes lsh-service
16875 depend on existence of syslogd service. When @var{pid-file?} is true,
16876 @command{lshd} writes its PID to the file called @var{pid-file}.
16877
16878 When @var{initialize?} is true, automatically create the seed and host key
16879 upon service activation if they do not exist yet. This may take long and
16880 require interaction.
16881
16882 When @var{initialize?} is false, it is up to the user to initialize the
16883 randomness generator (@pxref{lsh-make-seed,,, lsh, LSH Manual}), and to create
16884 a key pair with the private key stored in file @var{host-key} (@pxref{lshd
16885 basics,,, lsh, LSH Manual}).
16886
16887 When @var{interfaces} is empty, lshd listens for connections on all the
16888 network interfaces; otherwise, @var{interfaces} must be a list of host names
16889 or addresses.
16890
16891 @var{allow-empty-passwords?} specifies whether to accept log-ins with empty
16892 passwords, and @var{root-login?} specifies whether to accept log-ins as
16893 root.
16894
16895 The other options should be self-descriptive.
16896 @end deffn
16897
16898 @cindex SSH
16899 @cindex SSH server
16900 @deffn {Scheme Variable} openssh-service-type
16901 This is the type for the @uref{http://www.openssh.org, OpenSSH} secure
16902 shell daemon, @command{sshd}. Its value must be an
16903 @code{openssh-configuration} record as in this example:
16904
16905 @lisp
16906 (service openssh-service-type
16907 (openssh-configuration
16908 (x11-forwarding? #t)
16909 (permit-root-login 'without-password)
16910 (authorized-keys
16911 `(("alice" ,(local-file "alice.pub"))
16912 ("bob" ,(local-file "bob.pub"))))))
16913 @end lisp
16914
16915 See below for details about @code{openssh-configuration}.
16916
16917 This service can be extended with extra authorized keys, as in this
16918 example:
16919
16920 @lisp
16921 (service-extension openssh-service-type
16922 (const `(("charlie"
16923 ,(local-file "charlie.pub")))))
16924 @end lisp
16925 @end deffn
16926
16927 @deftp {Data Type} openssh-configuration
16928 This is the configuration record for OpenSSH's @command{sshd}.
16929
16930 @table @asis
16931 @item @code{openssh} (default @var{openssh})
16932 The Openssh package to use.
16933
16934 @item @code{pid-file} (default: @code{"/var/run/sshd.pid"})
16935 Name of the file where @command{sshd} writes its PID.
16936
16937 @item @code{port-number} (default: @code{22})
16938 TCP port on which @command{sshd} listens for incoming connections.
16939
16940 @item @code{permit-root-login} (default: @code{#f})
16941 This field determines whether and when to allow logins as root. If
16942 @code{#f}, root logins are disallowed; if @code{#t}, they are allowed.
16943 If it's the symbol @code{'without-password}, then root logins are
16944 permitted but not with password-based authentication.
16945
16946 @item @code{allow-empty-passwords?} (default: @code{#f})
16947 When true, users with empty passwords may log in. When false, they may
16948 not.
16949
16950 @item @code{password-authentication?} (default: @code{#t})
16951 When true, users may log in with their password. When false, they have
16952 other authentication methods.
16953
16954 @item @code{public-key-authentication?} (default: @code{#t})
16955 When true, users may log in using public key authentication. When
16956 false, users have to use other authentication method.
16957
16958 Authorized public keys are stored in @file{~/.ssh/authorized_keys}.
16959 This is used only by protocol version 2.
16960
16961 @item @code{x11-forwarding?} (default: @code{#f})
16962 When true, forwarding of X11 graphical client connections is
16963 enabled---in other words, @command{ssh} options @option{-X} and
16964 @option{-Y} will work.
16965
16966 @item @code{allow-agent-forwarding?} (default: @code{#t})
16967 Whether to allow agent forwarding.
16968
16969 @item @code{allow-tcp-forwarding?} (default: @code{#t})
16970 Whether to allow TCP forwarding.
16971
16972 @item @code{gateway-ports?} (default: @code{#f})
16973 Whether to allow gateway ports.
16974
16975 @item @code{challenge-response-authentication?} (default: @code{#f})
16976 Specifies whether challenge response authentication is allowed (e.g.@: via
16977 PAM).
16978
16979 @item @code{use-pam?} (default: @code{#t})
16980 Enables the Pluggable Authentication Module interface. If set to
16981 @code{#t}, this will enable PAM authentication using
16982 @code{challenge-response-authentication?} and
16983 @code{password-authentication?}, in addition to PAM account and session
16984 module processing for all authentication types.
16985
16986 Because PAM challenge response authentication usually serves an
16987 equivalent role to password authentication, you should disable either
16988 @code{challenge-response-authentication?} or
16989 @code{password-authentication?}.
16990
16991 @item @code{print-last-log?} (default: @code{#t})
16992 Specifies whether @command{sshd} should print the date and time of the
16993 last user login when a user logs in interactively.
16994
16995 @item @code{subsystems} (default: @code{'(("sftp" "internal-sftp"))})
16996 Configures external subsystems (e.g.@: file transfer daemon).
16997
16998 This is a list of two-element lists, each of which containing the
16999 subsystem name and a command (with optional arguments) to execute upon
17000 subsystem request.
17001
17002 The command @command{internal-sftp} implements an in-process SFTP
17003 server. Alternatively, one can specify the @command{sftp-server} command:
17004 @lisp
17005 (service openssh-service-type
17006 (openssh-configuration
17007 (subsystems
17008 `(("sftp" ,(file-append openssh "/libexec/sftp-server"))))))
17009 @end lisp
17010
17011 @item @code{accepted-environment} (default: @code{'()})
17012 List of strings describing which environment variables may be exported.
17013
17014 Each string gets on its own line. See the @code{AcceptEnv} option in
17015 @code{man sshd_config}.
17016
17017 This example allows ssh-clients to export the @env{COLORTERM} variable.
17018 It is set by terminal emulators, which support colors. You can use it in
17019 your shell's resource file to enable colors for the prompt and commands
17020 if this variable is set.
17021
17022 @lisp
17023 (service openssh-service-type
17024 (openssh-configuration
17025 (accepted-environment '("COLORTERM"))))
17026 @end lisp
17027
17028 @item @code{authorized-keys} (default: @code{'()})
17029 @cindex authorized keys, SSH
17030 @cindex SSH authorized keys
17031 This is the list of authorized keys. Each element of the list is a user
17032 name followed by one or more file-like objects that represent SSH public
17033 keys. For example:
17034
17035 @lisp
17036 (openssh-configuration
17037 (authorized-keys
17038 `(("rekado" ,(local-file "rekado.pub"))
17039 ("chris" ,(local-file "chris.pub"))
17040 ("root" ,(local-file "rekado.pub") ,(local-file "chris.pub")))))
17041 @end lisp
17042
17043 @noindent
17044 registers the specified public keys for user accounts @code{rekado},
17045 @code{chris}, and @code{root}.
17046
17047 Additional authorized keys can be specified @i{via}
17048 @code{service-extension}.
17049
17050 Note that this does @emph{not} interfere with the use of
17051 @file{~/.ssh/authorized_keys}.
17052
17053 @item @code{log-level} (default: @code{'info})
17054 This is a symbol specifying the logging level: @code{quiet}, @code{fatal},
17055 @code{error}, @code{info}, @code{verbose}, @code{debug}, etc. See the man
17056 page for @file{sshd_config} for the full list of level names.
17057
17058 @item @code{extra-content} (default: @code{""})
17059 This field can be used to append arbitrary text to the configuration file. It
17060 is especially useful for elaborate configurations that cannot be expressed
17061 otherwise. This configuration, for example, would generally disable root
17062 logins, but permit them from one specific IP address:
17063
17064 @lisp
17065 (openssh-configuration
17066 (extra-content "\
17067 Match Address 192.168.0.1
17068 PermitRootLogin yes"))
17069 @end lisp
17070
17071 @end table
17072 @end deftp
17073
17074 @deffn {Scheme Procedure} dropbear-service [@var{config}]
17075 Run the @uref{https://matt.ucc.asn.au/dropbear/dropbear.html,Dropbear SSH
17076 daemon} with the given @var{config}, a @code{<dropbear-configuration>}
17077 object.
17078
17079 For example, to specify a Dropbear service listening on port 1234, add
17080 this call to the operating system's @code{services} field:
17081
17082 @lisp
17083 (dropbear-service (dropbear-configuration
17084 (port-number 1234)))
17085 @end lisp
17086 @end deffn
17087
17088 @deftp {Data Type} dropbear-configuration
17089 This data type represents the configuration of a Dropbear SSH daemon.
17090
17091 @table @asis
17092 @item @code{dropbear} (default: @var{dropbear})
17093 The Dropbear package to use.
17094
17095 @item @code{port-number} (default: 22)
17096 The TCP port where the daemon waits for incoming connections.
17097
17098 @item @code{syslog-output?} (default: @code{#t})
17099 Whether to enable syslog output.
17100
17101 @item @code{pid-file} (default: @code{"/var/run/dropbear.pid"})
17102 File name of the daemon's PID file.
17103
17104 @item @code{root-login?} (default: @code{#f})
17105 Whether to allow @code{root} logins.
17106
17107 @item @code{allow-empty-passwords?} (default: @code{#f})
17108 Whether to allow empty passwords.
17109
17110 @item @code{password-authentication?} (default: @code{#t})
17111 Whether to enable password-based authentication.
17112 @end table
17113 @end deftp
17114
17115 @cindex AutoSSH
17116 @deffn {Scheme Variable} autossh-service-type
17117 This is the type for the @uref{https://www.harding.motd.ca/autossh,
17118 AutoSSH} program that runs a copy of @command{ssh} and monitors it,
17119 restarting it as necessary should it die or stop passing traffic.
17120 AutoSSH can be run manually from the command-line by passing arguments
17121 to the binary @command{autossh} from the package @code{autossh}, but it
17122 can also be run as a Guix service. This latter use case is documented
17123 here.
17124
17125 AutoSSH can be used to forward local traffic to a remote machine using
17126 an SSH tunnel, and it respects the @file{~/.ssh/config} of the user it
17127 is run as.
17128
17129 For example, to specify a service running autossh as the user
17130 @code{pino} and forwarding all local connections to port @code{8081} to
17131 @code{remote:8081} using an SSH tunnel, add this call to the operating
17132 system's @code{services} field:
17133
17134 @lisp
17135 (service autossh-service-type
17136 (autossh-configuration
17137 (user "pino")
17138 (ssh-options (list "-T" "-N" "-L" "8081:localhost:8081" "remote.net"))))
17139 @end lisp
17140 @end deffn
17141
17142 @deftp {Data Type} autossh-configuration
17143 This data type represents the configuration of an AutoSSH service.
17144
17145 @table @asis
17146
17147 @item @code{user} (default @code{"autossh"})
17148 The user as which the AutoSSH service is to be run.
17149 This assumes that the specified user exists.
17150
17151 @item @code{poll} (default @code{600})
17152 Specifies the connection poll time in seconds.
17153
17154 @item @code{first-poll} (default @code{#f})
17155 Specifies how many seconds AutoSSH waits before the first connection
17156 test. After this first test, polling is resumed at the pace defined in
17157 @code{poll}. When set to @code{#f}, the first poll is not treated
17158 specially and will also use the connection poll specified in
17159 @code{poll}.
17160
17161 @item @code{gate-time} (default @code{30})
17162 Specifies how many seconds an SSH connection must be active before it is
17163 considered successful.
17164
17165 @item @code{log-level} (default @code{1})
17166 The log level, corresponding to the levels used by syslog---so @code{0}
17167 is the most silent while @code{7} is the chattiest.
17168
17169 @item @code{max-start} (default @code{#f})
17170 The maximum number of times SSH may be (re)started before AutoSSH exits.
17171 When set to @code{#f}, no maximum is configured and AutoSSH may restart indefinitely.
17172
17173 @item @code{message} (default @code{""})
17174 The message to append to the echo message sent when testing connections.
17175
17176 @item @code{port} (default @code{"0"})
17177 The ports used for monitoring the connection. When set to @code{"0"},
17178 monitoring is disabled. When set to @code{"@var{n}"} where @var{n} is
17179 a positive integer, ports @var{n} and @var{n}+1 are used for
17180 monitoring the connection, such that port @var{n} is the base
17181 monitoring port and @code{n+1} is the echo port. When set to
17182 @code{"@var{n}:@var{m}"} where @var{n} and @var{m} are positive
17183 integers, the ports @var{n} and @var{m} are used for monitoring the
17184 connection, such that port @var{n} is the base monitoring port and
17185 @var{m} is the echo port.
17186
17187 @item @code{ssh-options} (default @code{'()})
17188 The list of command-line arguments to pass to @command{ssh} when it is
17189 run. Options @option{-f} and @option{-M} are reserved for AutoSSH and
17190 may cause undefined behaviour.
17191
17192 @end table
17193 @end deftp
17194
17195 @cindex WebSSH
17196 @deffn {Scheme Variable} webssh-service-type
17197 This is the type for the @uref{https://webssh.huashengdun.org/, WebSSH}
17198 program that runs a web SSH client. WebSSH can be run manually from the
17199 command-line by passing arguments to the binary @command{wssh} from the
17200 package @code{webssh}, but it can also be run as a Guix service. This
17201 latter use case is documented here.
17202
17203 For example, to specify a service running WebSSH on loopback interface
17204 on port @code{8888} with reject policy with a list of allowed to
17205 connection hosts, and NGINX as a reverse-proxy to this service listening
17206 for HTTPS connection, add this call to the operating system's
17207 @code{services} field:
17208
17209 @lisp
17210 (service webssh-service-type
17211 (webssh-configuration (address "127.0.0.1")
17212 (port 8888)
17213 (policy 'reject)
17214 (known-hosts '("localhost ecdsa-sha2-nistp256 AAAA…"
17215 "127.0.0.1 ecdsa-sha2-nistp256 AAAA…"))))
17216
17217 (service nginx-service-type
17218 (nginx-configuration
17219 (server-blocks
17220 (list
17221 (nginx-server-configuration
17222 (inherit %webssh-configuration-nginx)
17223 (server-name '("webssh.example.com"))
17224 (listen '("443 ssl"))
17225 (ssl-certificate (letsencrypt-certificate "webssh.example.com"))
17226 (ssl-certificate-key (letsencrypt-key "webssh.example.com"))
17227 (locations
17228 (cons (nginx-location-configuration
17229 (uri "/.well-known")
17230 (body '("root /var/www;")))
17231 (nginx-server-configuration-locations %webssh-configuration-nginx))))))))
17232 @end lisp
17233 @end deffn
17234
17235 @deftp {Data Type} webssh-configuration
17236 Data type representing the configuration for @code{webssh-service}.
17237
17238 @table @asis
17239 @item @code{package} (default: @var{webssh})
17240 @code{webssh} package to use.
17241
17242 @item @code{user-name} (default: @var{"webssh"})
17243 User name or user ID that file transfers to and from that module should take
17244 place.
17245
17246 @item @code{group-name} (default: @var{"webssh"})
17247 Group name or group ID that will be used when accessing the module.
17248
17249 @item @code{address} (default: @var{#f})
17250 IP address on which @command{webssh} listens for incoming connections.
17251
17252 @item @code{port} (default: @var{8888})
17253 TCP port on which @command{webssh} listens for incoming connections.
17254
17255 @item @code{policy} (default: @var{#f})
17256 Connection policy. @var{reject} policy requires to specify @var{known-hosts}.
17257
17258 @item @code{known-hosts} (default: @var{'()})
17259 List of hosts which allowed for SSH connection from @command{webssh}.
17260
17261 @item @code{log-file} (default: @file{"/var/log/webssh.log"})
17262 Name of the file where @command{webssh} writes its log file.
17263
17264 @item @code{log-level} (default: @var{#f})
17265 Logging level.
17266
17267 @end table
17268 @end deftp
17269
17270 @defvr {Scheme Variable} %facebook-host-aliases
17271 This variable contains a string for use in @file{/etc/hosts}
17272 (@pxref{Host Names,,, libc, The GNU C Library Reference Manual}). Each
17273 line contains a entry that maps a known server name of the Facebook
17274 on-line service---e.g., @code{www.facebook.com}---to the local
17275 host---@code{127.0.0.1} or its IPv6 equivalent, @code{::1}.
17276
17277 This variable is typically used in the @code{hosts-file} field of an
17278 @code{operating-system} declaration (@pxref{operating-system Reference,
17279 @file{/etc/hosts}}):
17280
17281 @lisp
17282 (use-modules (gnu) (guix))
17283
17284 (operating-system
17285 (host-name "mymachine")
17286 ;; ...
17287 (hosts-file
17288 ;; Create a /etc/hosts file with aliases for "localhost"
17289 ;; and "mymachine", as well as for Facebook servers.
17290 (plain-file "hosts"
17291 (string-append (local-host-aliases host-name)
17292 %facebook-host-aliases))))
17293 @end lisp
17294
17295 This mechanism can prevent programs running locally, such as Web
17296 browsers, from accessing Facebook.
17297 @end defvr
17298
17299 The @code{(gnu services avahi)} provides the following definition.
17300
17301 @defvr {Scheme Variable} avahi-service-type
17302 This is the service that runs @command{avahi-daemon}, a system-wide
17303 mDNS/DNS-SD responder that allows for service discovery and
17304 ``zero-configuration'' host name lookups (see @uref{https://avahi.org/}).
17305 Its value must be an @code{avahi-configuration} record---see below.
17306
17307 This service extends the name service cache daemon (nscd) so that it can
17308 resolve @code{.local} host names using
17309 @uref{https://0pointer.de/lennart/projects/nss-mdns/, nss-mdns}. @xref{Name
17310 Service Switch}, for information on host name resolution.
17311
17312 Additionally, add the @var{avahi} package to the system profile so that
17313 commands such as @command{avahi-browse} are directly usable.
17314 @end defvr
17315
17316 @deftp {Data Type} avahi-configuration
17317 Data type representation the configuration for Avahi.
17318
17319 @table @asis
17320
17321 @item @code{host-name} (default: @code{#f})
17322 If different from @code{#f}, use that as the host name to
17323 publish for this machine; otherwise, use the machine's actual host name.
17324
17325 @item @code{publish?} (default: @code{#t})
17326 When true, allow host names and services to be published (broadcast) over the
17327 network.
17328
17329 @item @code{publish-workstation?} (default: @code{#t})
17330 When true, @command{avahi-daemon} publishes the machine's host name and IP
17331 address via mDNS on the local network. To view the host names published on
17332 your local network, you can run:
17333
17334 @example
17335 avahi-browse _workstation._tcp
17336 @end example
17337
17338 @item @code{wide-area?} (default: @code{#f})
17339 When true, DNS-SD over unicast DNS is enabled.
17340
17341 @item @code{ipv4?} (default: @code{#t})
17342 @itemx @code{ipv6?} (default: @code{#t})
17343 These fields determine whether to use IPv4/IPv6 sockets.
17344
17345 @item @code{domains-to-browse} (default: @code{'()})
17346 This is a list of domains to browse.
17347 @end table
17348 @end deftp
17349
17350 @deffn {Scheme Variable} openvswitch-service-type
17351 This is the type of the @uref{https://www.openvswitch.org, Open vSwitch}
17352 service, whose value should be an @code{openvswitch-configuration}
17353 object.
17354 @end deffn
17355
17356 @deftp {Data Type} openvswitch-configuration
17357 Data type representing the configuration of Open vSwitch, a multilayer
17358 virtual switch which is designed to enable massive network automation
17359 through programmatic extension.
17360
17361 @table @asis
17362 @item @code{package} (default: @var{openvswitch})
17363 Package object of the Open vSwitch.
17364
17365 @end table
17366 @end deftp
17367
17368 @defvr {Scheme Variable} pagekite-service-type
17369 This is the service type for the @uref{https://pagekite.net, PageKite} service,
17370 a tunneling solution for making localhost servers publicly visible, even from
17371 behind restrictive firewalls or NAT without forwarded ports. The value for
17372 this service type is a @code{pagekite-configuration} record.
17373
17374 Here's an example exposing the local HTTP and SSH daemons:
17375
17376 @lisp
17377 (service pagekite-service-type
17378 (pagekite-configuration
17379 (kites '("http:@@kitename:localhost:80:@@kitesecret"
17380 "raw/22:@@kitename:localhost:22:@@kitesecret"))
17381 (extra-file "/etc/pagekite.rc")))
17382 @end lisp
17383 @end defvr
17384
17385 @deftp {Data Type} pagekite-configuration
17386 Data type representing the configuration of PageKite.
17387
17388 @table @asis
17389 @item @code{package} (default: @var{pagekite})
17390 Package object of PageKite.
17391
17392 @item @code{kitename} (default: @code{#f})
17393 PageKite name for authenticating to the frontend server.
17394
17395 @item @code{kitesecret} (default: @code{#f})
17396 Shared secret for authenticating to the frontend server. You should probably
17397 put this inside @code{extra-file} instead.
17398
17399 @item @code{frontend} (default: @code{#f})
17400 Connect to the named PageKite frontend server instead of the
17401 @uref{https://pagekite.net,,pagekite.net} service.
17402
17403 @item @code{kites} (default: @code{'("http:@@kitename:localhost:80:@@kitesecret")})
17404 List of service kites to use. Exposes HTTP on port 80 by default. The format
17405 is @code{proto:kitename:host:port:secret}.
17406
17407 @item @code{extra-file} (default: @code{#f})
17408 Extra configuration file to read, which you are expected to create manually.
17409 Use this to add additional options and manage shared secrets out-of-band.
17410
17411 @end table
17412 @end deftp
17413
17414 @defvr {Scheme Variable} yggdrasil-service-type
17415 The service type for connecting to the @uref{https://yggdrasil-network.github.io/,
17416 Yggdrasil network}, an early-stage implementation of a fully end-to-end
17417 encrypted IPv6 network.
17418
17419 @quotation
17420 Yggdrasil provides name-independent routing with cryptographically generated
17421 addresses. Static addressing means you can keep the same address as long as
17422 you want, even if you move to a new location, or generate a new address (by
17423 generating new keys) whenever you want.
17424 @uref{https://yggdrasil-network.github.io/2018/07/28/addressing.html}
17425 @end quotation
17426
17427 Pass it a value of @code{yggdrasil-configuration} to connect it to public
17428 peers and/or local peers.
17429
17430 Here is an example using public peers and a static address. The static
17431 signing and encryption keys are defined in @file{/etc/yggdrasil-private.conf}
17432 (the default value for @code{config-file}).
17433
17434 @lisp
17435 ;; part of the operating-system declaration
17436 (service yggdrasil-service-type
17437 (yggdrasil-configuration
17438 (autoconf? #f) ;; use only the public peers
17439 (json-config
17440 ;; choose one from
17441 ;; https://github.com/yggdrasil-network/public-peers
17442 '((peers . #("tcp://1.2.3.4:1337"))))
17443 ;; /etc/yggdrasil-private.conf is the default value for config-file
17444 ))
17445 @end lisp
17446 @example
17447 # sample content for /etc/yggdrasil-private.conf
17448 @{
17449 # Your public encryption key. Your peers may ask you for this to put
17450 # into their AllowedEncryptionPublicKeys configuration.
17451 EncryptionPublicKey: 378dc5...
17452
17453 # Your private encryption key. DO NOT share this with anyone!
17454 EncryptionPrivateKey: 0777...
17455
17456 # Your public signing key. You should not ordinarily need to share
17457 # this with anyone.
17458 SigningPublicKey: e1664...
17459
17460 # Your private signing key. DO NOT share this with anyone!
17461 SigningPrivateKey: 0589d...
17462 @}
17463 @end example
17464 @end defvr
17465
17466 @deftp {Data Type} yggdrasil-configuration
17467 Data type representing the configuration of Yggdrasil.
17468
17469 @table @asis
17470 @item @code{package} (default: @code{yggdrasil})
17471 Package object of Yggdrasil.
17472
17473 @item @code{json-config} (default: @code{'()})
17474 Contents of @file{/etc/yggdrasil.conf}. Will be merged with
17475 @file{/etc/yggdrasil-private.conf}. Note that these settings are stored in
17476 the Guix store, which is readable to all users. @strong{Do not store your
17477 private keys in it}. See the output of @code{yggdrasil -genconf} for a
17478 quick overview of valid keys and their default values.
17479
17480 @item @code{autoconf?} (default: @code{#f})
17481 Whether to use automatic mode. Enabling it makes Yggdrasil use adynamic IP
17482 and peer with IPv6 neighbors.
17483
17484 @item @code{log-level} (default: @code{'info})
17485 How much detail to include in logs. Use @code{'debug} for more detail.
17486
17487 @item @code{log-to} (default: @code{'stdout})
17488 Where to send logs. By default, the service logs standard output to
17489 @file{/var/log/yggdrasil.log}. The alternative is @code{'syslog}, which
17490 sends output to the running syslog service.
17491
17492 @item @code{config-file} (default: @code{"/etc/yggdrasil-private.conf"})
17493 What HJSON file to load sensitive data from. This is where private keys
17494 should be stored, which are necessary to specify if you don't want a
17495 randomized address after each restart. Use @code{#f} to disable. Options
17496 defined in this file take precedence over @code{json-config}. Use the output
17497 of @code{yggdrasil -genconf} as a starting point. To configure a static
17498 address, delete everything except these options:
17499
17500 @itemize
17501 @item @code{EncryptionPublicKey}
17502 @item @code{EncryptionPrivateKey}
17503 @item @code{SigningPublicKey}
17504 @item @code{SigningPrivateKey}
17505 @end itemize
17506 @end table
17507 @end deftp
17508
17509 @cindex keepalived
17510 @deffn {Scheme Variable} keepalived-service-type
17511 This is the type for the @uref{https://www.keepalived.org/, Keepalived}
17512 routing software, @command{keepalived}. Its value must be an
17513 @code{keepalived-configuration} record as in this example for master
17514 machine:
17515
17516 @lisp
17517 (service keepalived-service-type
17518 (keepalived-configuration
17519 (config-file (local-file "keepalived-master.conf"))))
17520 @end lisp
17521
17522 where @file{keepalived-master.conf}:
17523
17524 @example
17525 vrrp_instance my-group @{
17526 state MASTER
17527 interface enp9s0
17528 virtual_router_id 100
17529 priority 100
17530 unicast_peer @{ 10.0.0.2 @}
17531 virtual_ipaddress @{
17532 10.0.0.4/24
17533 @}
17534 @}
17535 @end example
17536
17537 and for backup machine:
17538
17539 @lisp
17540 (service keepalived-service-type
17541 (keepalived-configuration
17542 (config-file (local-file "keepalived-backup.conf"))))
17543 @end lisp
17544
17545 where @file{keepalived-backup.conf}:
17546
17547 @example
17548 vrrp_instance my-group @{
17549 state BACKUP
17550 interface enp9s0
17551 virtual_router_id 100
17552 priority 99
17553 unicast_peer @{ 10.0.0.3 @}
17554 virtual_ipaddress @{
17555 10.0.0.4/24
17556 @}
17557 @}
17558 @end example
17559 @end deffn
17560
17561 @node Unattended Upgrades
17562 @subsection Unattended Upgrades
17563
17564 @cindex unattended upgrades
17565 @cindex upgrades, unattended
17566 Guix provides a service to perform @emph{unattended upgrades}:
17567 periodically, the system automatically reconfigures itself from the
17568 latest Guix. Guix System has several properties that make unattended
17569 upgrades safe:
17570
17571 @itemize
17572 @item
17573 upgrades are transactional (either the upgrade succeeds or it fails, but
17574 you cannot end up with an ``in-between'' system state);
17575 @item
17576 the upgrade log is kept---you can view it with @command{guix system
17577 list-generations}---and you can roll back to any previous generation,
17578 should the upgraded system fail to behave as intended;
17579 @item
17580 channel code is authenticated so you know you can only run genuine code
17581 (@pxref{Channels});
17582 @item
17583 @command{guix system reconfigure} prevents downgrades, which makes it
17584 immune to @dfn{downgrade attacks}.
17585 @end itemize
17586
17587 To set up unattended upgrades, add an instance of
17588 @code{unattended-upgrade-service-type} like the one below to the list of
17589 your operating system services:
17590
17591 @lisp
17592 (service unattended-upgrade-service-type)
17593 @end lisp
17594
17595 The defaults above set up weekly upgrades: every Sunday at midnight.
17596 You do not need to provide the operating system configuration file: it
17597 uses @file{/run/current-system/configuration.scm}, which ensures it
17598 always uses your latest configuration---@pxref{provenance-service-type},
17599 for more information about this file.
17600
17601 There are several things that can be configured, in particular the
17602 periodicity and services (daemons) to be restarted upon completion.
17603 When the upgrade is successful, the service takes care of deleting
17604 system generations older that some threshold, as per @command{guix
17605 system delete-generations}. See the reference below for details.
17606
17607 To ensure that upgrades are actually happening, you can run
17608 @command{guix system describe}. To investigate upgrade failures, visit
17609 the unattended upgrade log file (see below).
17610
17611 @defvr {Scheme Variable} unattended-upgrade-service-type
17612 This is the service type for unattended upgrades. It sets up an mcron
17613 job (@pxref{Scheduled Job Execution}) that runs @command{guix system
17614 reconfigure} from the latest version of the specified channels.
17615
17616 Its value must be a @code{unattended-upgrade-configuration} record (see
17617 below).
17618 @end defvr
17619
17620 @deftp {Data Type} unattended-upgrade-configuration
17621 This data type represents the configuration of the unattended upgrade
17622 service. The following fields are available:
17623
17624 @table @asis
17625 @item @code{schedule} (default: @code{"30 01 * * 0"})
17626 This is the schedule of upgrades, expressed as a gexp containing an
17627 mcron job schedule (@pxref{Guile Syntax, mcron job specifications,,
17628 mcron, GNU@tie{}mcron}).
17629
17630 @item @code{channels} (default: @code{#~%default-channels})
17631 This gexp specifies the channels to use for the upgrade
17632 (@pxref{Channels}). By default, the tip of the official @code{guix}
17633 channel is used.
17634
17635 @item @code{operating-system-file} (default: @code{"/run/current-system/configuration.scm"})
17636 This field specifies the operating system configuration file to use.
17637 The default is to reuse the config file of the current configuration.
17638
17639 There are cases, though, where referring to
17640 @file{/run/current-system/configuration.scm} is not enough, for instance
17641 because that file refers to extra files (SSH public keys, extra
17642 configuration files, etc.) @i{via} @code{local-file} and similar
17643 constructs. For those cases, we recommend something along these lines:
17644
17645 @lisp
17646 (unattended-upgrade-configuration
17647 (operating-system-file
17648 (file-append (local-file "." "config-dir" #:recursive? #t)
17649 "/config.scm")))
17650 @end lisp
17651
17652 The effect here is to import all of the current directory into the
17653 store, and to refer to @file{config.scm} within that directory.
17654 Therefore, uses of @code{local-file} within @file{config.scm} will work
17655 as expected. @xref{G-Expressions}, for information about
17656 @code{local-file} and @code{file-append}.
17657
17658 @item @code{services-to-restart} (default: @code{'(mcron)})
17659 This field specifies the Shepherd services to restart when the upgrade
17660 completes.
17661
17662 Those services are restarted right away upon completion, as with
17663 @command{herd restart}, which ensures that the latest version is
17664 running---remember that by default @command{guix system reconfigure}
17665 only restarts services that are not currently running, which is
17666 conservative: it minimizes disruption but leaves outdated services
17667 running.
17668
17669 Use @command{herd status} to find out candidates for restarting.
17670 @xref{Services}, for general information about services. Common
17671 services to restart would include @code{ntpd} and @code{ssh-daemon}.
17672
17673 By default, the @code{mcron} service is restarted. This ensures that
17674 the latest version of the unattended upgrade job will be used next time.
17675
17676 @item @code{system-expiration} (default: @code{(* 3 30 24 3600)})
17677 This is the expiration time in seconds for system generations. System
17678 generations older that this amount of time are deleted with
17679 @command{guix system delete-generations} when an upgrade completes.
17680
17681 @quotation Note
17682 The unattended upgrade service does not run the garbage collector. You
17683 will probably want to set up your own mcron job to run @command{guix gc}
17684 periodically.
17685 @end quotation
17686
17687 @item @code{maximum-duration} (default: @code{3600})
17688 Maximum duration in seconds for the upgrade; past that time, the upgrade
17689 aborts.
17690
17691 This is primarily useful to ensure the upgrade does not end up
17692 rebuilding or re-downloading ``the world''.
17693
17694 @item @code{log-file} (default: @code{"/var/log/unattended-upgrade.log"})
17695 File where unattended upgrades are logged.
17696 @end table
17697 @end deftp
17698
17699 @node X Window
17700 @subsection X Window
17701
17702 @cindex X11
17703 @cindex X Window System
17704 @cindex login manager
17705 Support for the X Window graphical display system---specifically
17706 Xorg---is provided by the @code{(gnu services xorg)} module. Note that
17707 there is no @code{xorg-service} procedure. Instead, the X server is
17708 started by the @dfn{login manager}, by default the GNOME Display Manager (GDM).
17709
17710 @cindex GDM
17711 @cindex GNOME, login manager
17712 GDM of course allows users to log in into window managers and desktop
17713 environments other than GNOME; for those using GNOME, GDM is required for
17714 features such as automatic screen locking.
17715
17716 @cindex window manager
17717 To use X11, you must install at least one @dfn{window manager}---for
17718 example the @code{windowmaker} or @code{openbox} packages---preferably
17719 by adding it to the @code{packages} field of your operating system
17720 definition (@pxref{operating-system Reference, system-wide packages}).
17721
17722 @defvr {Scheme Variable} gdm-service-type
17723 This is the type for the @uref{https://wiki.gnome.org/Projects/GDM/, GNOME
17724 Desktop Manager} (GDM), a program that manages graphical display servers and
17725 handles graphical user logins. Its value must be a @code{gdm-configuration}
17726 (see below).
17727
17728 @cindex session types (X11)
17729 @cindex X11 session types
17730 GDM looks for @dfn{session types} described by the @file{.desktop} files in
17731 @file{/run/current-system/profile/share/xsessions} and allows users to choose
17732 a session from the log-in screen. Packages such as @code{gnome}, @code{xfce},
17733 and @code{i3} provide @file{.desktop} files; adding them to the system-wide
17734 set of packages automatically makes them available at the log-in screen.
17735
17736 In addition, @file{~/.xsession} files are honored. When available,
17737 @file{~/.xsession} must be an executable that starts a window manager
17738 and/or other X clients.
17739 @end defvr
17740
17741 @deftp {Data Type} gdm-configuration
17742 @table @asis
17743 @item @code{auto-login?} (default: @code{#f})
17744 @itemx @code{default-user} (default: @code{#f})
17745 When @code{auto-login?} is false, GDM presents a log-in screen.
17746
17747 When @code{auto-login?} is true, GDM logs in directly as
17748 @code{default-user}.
17749
17750 @item @code{debug?} (default: @code{#f})
17751 When true, GDM writes debug messages to its log.
17752
17753 @item @code{gnome-shell-assets} (default: ...)
17754 List of GNOME Shell assets needed by GDM: icon theme, fonts, etc.
17755
17756 @item @code{xorg-configuration} (default: @code{(xorg-configuration)})
17757 Configuration of the Xorg graphical server.
17758
17759 @item @code{xsession} (default: @code{(xinitrc)})
17760 Script to run before starting a X session.
17761
17762 @item @code{dbus-daemon} (default: @code{dbus-daemon-wrapper})
17763 File name of the @code{dbus-daemon} executable.
17764
17765 @item @code{gdm} (default: @code{gdm})
17766 The GDM package to use.
17767 @end table
17768 @end deftp
17769
17770 @defvr {Scheme Variable} slim-service-type
17771 This is the type for the SLiM graphical login manager for X11.
17772
17773 Like GDM, SLiM looks for session types described by @file{.desktop} files and
17774 allows users to choose a session from the log-in screen using @kbd{F1}. It
17775 also honors @file{~/.xsession} files.
17776
17777 Unlike GDM, SLiM does not spawn the user session on a different VT after
17778 logging in, which means that you can only start one graphical session. If you
17779 want to be able to run multiple graphical sessions at the same time you have
17780 to add multiple SLiM services to your system services. The following example
17781 shows how to replace the default GDM service with two SLiM services on tty7
17782 and tty8.
17783
17784 @lisp
17785 (use-modules (gnu services)
17786 (gnu services desktop)
17787 (gnu services xorg)
17788 (srfi srfi-1)) ;for 'remove'
17789
17790 (operating-system
17791 ;; ...
17792 (services (cons* (service slim-service-type (slim-configuration
17793 (display ":0")
17794 (vt "vt7")))
17795 (service slim-service-type (slim-configuration
17796 (display ":1")
17797 (vt "vt8")))
17798 (modify-services %desktop-services
17799 (delete gdm-service-type)))))
17800 @end lisp
17801
17802 @end defvr
17803
17804 @deftp {Data Type} slim-configuration
17805 Data type representing the configuration of @code{slim-service-type}.
17806
17807 @table @asis
17808 @item @code{allow-empty-passwords?} (default: @code{#t})
17809 Whether to allow logins with empty passwords.
17810
17811 @item @code{auto-login?} (default: @code{#f})
17812 @itemx @code{default-user} (default: @code{""})
17813 When @code{auto-login?} is false, SLiM presents a log-in screen.
17814
17815 When @code{auto-login?} is true, SLiM logs in directly as
17816 @code{default-user}.
17817
17818 @item @code{theme} (default: @code{%default-slim-theme})
17819 @itemx @code{theme-name} (default: @code{%default-slim-theme-name})
17820 The graphical theme to use and its name.
17821
17822 @item @code{auto-login-session} (default: @code{#f})
17823 If true, this must be the name of the executable to start as the default
17824 session---e.g., @code{(file-append windowmaker "/bin/windowmaker")}.
17825
17826 If false, a session described by one of the available @file{.desktop}
17827 files in @code{/run/current-system/profile} and @code{~/.guix-profile}
17828 will be used.
17829
17830 @quotation Note
17831 You must install at least one window manager in the system profile or in
17832 your user profile. Failing to do that, if @code{auto-login-session} is
17833 false, you will be unable to log in.
17834 @end quotation
17835
17836 @item @code{xorg-configuration} (default @code{(xorg-configuration)})
17837 Configuration of the Xorg graphical server.
17838
17839 @item @code{display} (default @code{":0"})
17840 The display on which to start the Xorg graphical server.
17841
17842 @item @code{vt} (default @code{"vt7"})
17843 The VT on which to start the Xorg graphical server.
17844
17845 @item @code{xauth} (default: @code{xauth})
17846 The XAuth package to use.
17847
17848 @item @code{shepherd} (default: @code{shepherd})
17849 The Shepherd package used when invoking @command{halt} and
17850 @command{reboot}.
17851
17852 @item @code{sessreg} (default: @code{sessreg})
17853 The sessreg package used in order to register the session.
17854
17855 @item @code{slim} (default: @code{slim})
17856 The SLiM package to use.
17857 @end table
17858 @end deftp
17859
17860 @defvr {Scheme Variable} %default-theme
17861 @defvrx {Scheme Variable} %default-theme-name
17862 The default SLiM theme and its name.
17863 @end defvr
17864
17865
17866 @deftp {Data Type} sddm-configuration
17867 This is the data type representing the SDDM service configuration.
17868
17869 @table @asis
17870 @item @code{display-server} (default: "x11")
17871 Select display server to use for the greeter. Valid values are
17872 @samp{"x11"} or @samp{"wayland"}.
17873
17874 @item @code{numlock} (default: "on")
17875 Valid values are @samp{"on"}, @samp{"off"} or @samp{"none"}.
17876
17877 @item @code{halt-command} (default @code{#~(string-apppend #$shepherd "/sbin/halt")})
17878 Command to run when halting.
17879
17880 @item @code{reboot-command} (default @code{#~(string-append #$shepherd "/sbin/reboot")})
17881 Command to run when rebooting.
17882
17883 @item @code{theme} (default "maldives")
17884 Theme to use. Default themes provided by SDDM are @samp{"elarun"},
17885 @samp{"maldives"} or @samp{"maya"}.
17886
17887 @item @code{themes-directory} (default "/run/current-system/profile/share/sddm/themes")
17888 Directory to look for themes.
17889
17890 @item @code{faces-directory} (default "/run/current-system/profile/share/sddm/faces")
17891 Directory to look for faces.
17892
17893 @item @code{default-path} (default "/run/current-system/profile/bin")
17894 Default PATH to use.
17895
17896 @item @code{minimum-uid} (default: 1000)
17897 Minimum UID displayed in SDDM and allowed for log-in.
17898
17899 @item @code{maximum-uid} (default: 2000)
17900 Maximum UID to display in SDDM.
17901
17902 @item @code{remember-last-user?} (default #t)
17903 Remember last user.
17904
17905 @item @code{remember-last-session?} (default #t)
17906 Remember last session.
17907
17908 @item @code{hide-users} (default "")
17909 Usernames to hide from SDDM greeter.
17910
17911 @item @code{hide-shells} (default @code{#~(string-append #$shadow "/sbin/nologin")})
17912 Users with shells listed will be hidden from the SDDM greeter.
17913
17914 @item @code{session-command} (default @code{#~(string-append #$sddm "/share/sddm/scripts/wayland-session")})
17915 Script to run before starting a wayland session.
17916
17917 @item @code{sessions-directory} (default "/run/current-system/profile/share/wayland-sessions")
17918 Directory to look for desktop files starting wayland sessions.
17919
17920 @item @code{xorg-configuration} (default @code{(xorg-configuration)})
17921 Configuration of the Xorg graphical server.
17922
17923 @item @code{xauth-path} (default @code{#~(string-append #$xauth "/bin/xauth")})
17924 Path to xauth.
17925
17926 @item @code{xephyr-path} (default @code{#~(string-append #$xorg-server "/bin/Xephyr")})
17927 Path to Xephyr.
17928
17929 @item @code{xdisplay-start} (default @code{#~(string-append #$sddm "/share/sddm/scripts/Xsetup")})
17930 Script to run after starting xorg-server.
17931
17932 @item @code{xdisplay-stop} (default @code{#~(string-append #$sddm "/share/sddm/scripts/Xstop")})
17933 Script to run before stopping xorg-server.
17934
17935 @item @code{xsession-command} (default: @code{xinitrc})
17936 Script to run before starting a X session.
17937
17938 @item @code{xsessions-directory} (default: "/run/current-system/profile/share/xsessions")
17939 Directory to look for desktop files starting X sessions.
17940
17941 @item @code{minimum-vt} (default: 7)
17942 Minimum VT to use.
17943
17944 @item @code{auto-login-user} (default "")
17945 User to use for auto-login.
17946
17947 @item @code{auto-login-session} (default "")
17948 Desktop file to use for auto-login.
17949
17950 @item @code{relogin?} (default #f)
17951 Relogin after logout.
17952
17953 @end table
17954 @end deftp
17955
17956 @cindex login manager
17957 @cindex X11 login
17958 @defvr {Scheme Variable} sddm-service-type
17959 This is the type of the service to run the
17960 @uref{https://github.com/sddm/sddm,SDDM display manager}. Its value
17961 must be a @code{sddm-configuration} record (see below).
17962
17963 Here's an example use:
17964
17965 @lisp
17966 (service sddm-service-type
17967 (sddm-configuration
17968 (auto-login-user "alice")
17969 (auto-login-session "xfce.desktop")))
17970 @end lisp
17971 @end defvr
17972
17973 @deftp {Data Type} sddm-configuration
17974 This data type represents the configuration of the SDDM login manager.
17975 The available fields are:
17976
17977 @table @asis
17978 @item @code{sddm} (default: @code{sddm})
17979 The SDDM package to use.
17980
17981 @item @code{display-server} (default: @code{"x11"})
17982 This must be either @code{"x11"} or @code{"wayland"}.
17983
17984 @c FIXME: Add more fields.
17985
17986 @item @code{auto-login-user} (default: @code{""})
17987 If non-empty, this is the user account under which to log in
17988 automatically.
17989
17990 @item @code{auto-login-session} (default: @code{""})
17991 If non-empty, this is the @file{.desktop} file name to use as the
17992 auto-login session.
17993 @end table
17994 @end deftp
17995
17996 @cindex Xorg, configuration
17997 @deftp {Data Type} xorg-configuration
17998 This data type represents the configuration of the Xorg graphical display
17999 server. Note that there is no Xorg service; instead, the X server is started
18000 by a ``display manager'' such as GDM, SDDM, and SLiM@. Thus, the configuration
18001 of these display managers aggregates an @code{xorg-configuration} record.
18002
18003 @table @asis
18004 @item @code{modules} (default: @code{%default-xorg-modules})
18005 This is a list of @dfn{module packages} loaded by the Xorg
18006 server---e.g., @code{xf86-video-vesa}, @code{xf86-input-keyboard}, and so on.
18007
18008 @item @code{fonts} (default: @code{%default-xorg-fonts})
18009 This is a list of font directories to add to the server's @dfn{font path}.
18010
18011 @item @code{drivers} (default: @code{'()})
18012 This must be either the empty list, in which case Xorg chooses a graphics
18013 driver automatically, or a list of driver names that will be tried in this
18014 order---e.g., @code{("modesetting" "vesa")}.
18015
18016 @item @code{resolutions} (default: @code{'()})
18017 When @code{resolutions} is the empty list, Xorg chooses an appropriate screen
18018 resolution. Otherwise, it must be a list of resolutions---e.g., @code{((1024
18019 768) (640 480))}.
18020
18021 @cindex keyboard layout, for Xorg
18022 @cindex keymap, for Xorg
18023 @item @code{keyboard-layout} (default: @code{#f})
18024 If this is @code{#f}, Xorg uses the default keyboard layout---usually US
18025 English (``qwerty'') for a 105-key PC keyboard.
18026
18027 Otherwise this must be a @code{keyboard-layout} object specifying the keyboard
18028 layout in use when Xorg is running. @xref{Keyboard Layout}, for more
18029 information on how to specify the keyboard layout.
18030
18031 @item @code{extra-config} (default: @code{'()})
18032 This is a list of strings or objects appended to the configuration file. It
18033 is used to pass extra text to be added verbatim to the configuration file.
18034
18035 @item @code{server} (default: @code{xorg-server})
18036 This is the package providing the Xorg server.
18037
18038 @item @code{server-arguments} (default: @code{%default-xorg-server-arguments})
18039 This is the list of command-line arguments to pass to the X server. The
18040 default is @code{-nolisten tcp}.
18041 @end table
18042 @end deftp
18043
18044 @deffn {Scheme Procedure} set-xorg-configuration @var{config} @
18045 [@var{login-manager-service-type}]
18046 Tell the log-in manager (of type @var{login-manager-service-type}) to use
18047 @var{config}, an @code{<xorg-configuration>} record.
18048
18049 Since the Xorg configuration is embedded in the log-in manager's
18050 configuration---e.g., @code{gdm-configuration}---this procedure provides a
18051 shorthand to set the Xorg configuration.
18052 @end deffn
18053
18054 @deffn {Scheme Procedure} xorg-start-command [@var{config}]
18055 Return a @code{startx} script in which the modules, fonts, etc. specified
18056 in @var{config}, are available. The result should be used in place of
18057 @code{startx}.
18058
18059 Usually the X server is started by a login manager.
18060 @end deffn
18061
18062
18063 @deffn {Scheme Procedure} screen-locker-service @var{package} [@var{program}]
18064 Add @var{package}, a package for a screen locker or screen saver whose
18065 command is @var{program}, to the set of setuid programs and add a PAM entry
18066 for it. For example:
18067
18068 @lisp
18069 (screen-locker-service xlockmore "xlock")
18070 @end lisp
18071
18072 makes the good ol' XlockMore usable.
18073 @end deffn
18074
18075
18076 @node Printing Services
18077 @subsection Printing Services
18078
18079 @cindex printer support with CUPS
18080 The @code{(gnu services cups)} module provides a Guix service definition
18081 for the CUPS printing service. To add printer support to a Guix
18082 system, add a @code{cups-service} to the operating system definition:
18083
18084 @deffn {Scheme Variable} cups-service-type
18085 The service type for the CUPS print server. Its value should be a valid
18086 CUPS configuration (see below). To use the default settings, simply
18087 write:
18088 @lisp
18089 (service cups-service-type)
18090 @end lisp
18091 @end deffn
18092
18093 The CUPS configuration controls the basic things about your CUPS
18094 installation: what interfaces it listens on, what to do if a print job
18095 fails, how much logging to do, and so on. To actually add a printer,
18096 you have to visit the @url{http://localhost:631} URL, or use a tool such
18097 as GNOME's printer configuration services. By default, configuring a
18098 CUPS service will generate a self-signed certificate if needed, for
18099 secure connections to the print server.
18100
18101 Suppose you want to enable the Web interface of CUPS and also add
18102 support for Epson printers @i{via} the @code{epson-inkjet-printer-escpr}
18103 package and for HP printers @i{via} the @code{hplip-minimal} package.
18104 You can do that directly, like this (you need to use the
18105 @code{(gnu packages cups)} module):
18106
18107 @lisp
18108 (service cups-service-type
18109 (cups-configuration
18110 (web-interface? #t)
18111 (extensions
18112 (list cups-filters epson-inkjet-printer-escpr hplip-minimal))))
18113 @end lisp
18114
18115 Note: If you wish to use the Qt5 based GUI which comes with the hplip
18116 package then it is suggested that you install the @code{hplip} package,
18117 either in your OS configuration file or as your user.
18118
18119 The available configuration parameters follow. Each parameter
18120 definition is preceded by its type; for example, @samp{string-list foo}
18121 indicates that the @code{foo} parameter should be specified as a list of
18122 strings. There is also a way to specify the configuration as a string,
18123 if you have an old @code{cupsd.conf} file that you want to port over
18124 from some other system; see the end for more details.
18125
18126 @c The following documentation was initially generated by
18127 @c (generate-documentation) in (gnu services cups). Manually maintained
18128 @c documentation is better, so we shouldn't hesitate to edit below as
18129 @c needed. However if the change you want to make to this documentation
18130 @c can be done in an automated way, it's probably easier to change
18131 @c (generate-documentation) than to make it below and have to deal with
18132 @c the churn as CUPS updates.
18133
18134
18135 Available @code{cups-configuration} fields are:
18136
18137 @deftypevr {@code{cups-configuration} parameter} package cups
18138 The CUPS package.
18139 @end deftypevr
18140
18141 @deftypevr {@code{cups-configuration} parameter} package-list extensions (default: @code{(list brlaser cups-filters epson-inkjet-printer-escpr foomatic-filters hplip-minimal splix)})
18142 Drivers and other extensions to the CUPS package.
18143 @end deftypevr
18144
18145 @deftypevr {@code{cups-configuration} parameter} files-configuration files-configuration
18146 Configuration of where to write logs, what directories to use for print
18147 spools, and related privileged configuration parameters.
18148
18149 Available @code{files-configuration} fields are:
18150
18151 @deftypevr {@code{files-configuration} parameter} log-location access-log
18152 Defines the access log filename. Specifying a blank filename disables
18153 access log generation. The value @code{stderr} causes log entries to be
18154 sent to the standard error file when the scheduler is running in the
18155 foreground, or to the system log daemon when run in the background. The
18156 value @code{syslog} causes log entries to be sent to the system log
18157 daemon. The server name may be included in filenames using the string
18158 @code{%s}, as in @code{/var/log/cups/%s-access_log}.
18159
18160 Defaults to @samp{"/var/log/cups/access_log"}.
18161 @end deftypevr
18162
18163 @deftypevr {@code{files-configuration} parameter} file-name cache-dir
18164 Where CUPS should cache data.
18165
18166 Defaults to @samp{"/var/cache/cups"}.
18167 @end deftypevr
18168
18169 @deftypevr {@code{files-configuration} parameter} string config-file-perm
18170 Specifies the permissions for all configuration files that the scheduler
18171 writes.
18172
18173 Note that the permissions for the printers.conf file are currently
18174 masked to only allow access from the scheduler user (typically root).
18175 This is done because printer device URIs sometimes contain sensitive
18176 authentication information that should not be generally known on the
18177 system. There is no way to disable this security feature.
18178
18179 Defaults to @samp{"0640"}.
18180 @end deftypevr
18181
18182 @deftypevr {@code{files-configuration} parameter} log-location error-log
18183 Defines the error log filename. Specifying a blank filename disables
18184 error log generation. The value @code{stderr} causes log entries to be
18185 sent to the standard error file when the scheduler is running in the
18186 foreground, or to the system log daemon when run in the background. The
18187 value @code{syslog} causes log entries to be sent to the system log
18188 daemon. The server name may be included in filenames using the string
18189 @code{%s}, as in @code{/var/log/cups/%s-error_log}.
18190
18191 Defaults to @samp{"/var/log/cups/error_log"}.
18192 @end deftypevr
18193
18194 @deftypevr {@code{files-configuration} parameter} string fatal-errors
18195 Specifies which errors are fatal, causing the scheduler to exit. The
18196 kind strings are:
18197
18198 @table @code
18199 @item none
18200 No errors are fatal.
18201
18202 @item all
18203 All of the errors below are fatal.
18204
18205 @item browse
18206 Browsing initialization errors are fatal, for example failed connections
18207 to the DNS-SD daemon.
18208
18209 @item config
18210 Configuration file syntax errors are fatal.
18211
18212 @item listen
18213 Listen or Port errors are fatal, except for IPv6 failures on the
18214 loopback or @code{any} addresses.
18215
18216 @item log
18217 Log file creation or write errors are fatal.
18218
18219 @item permissions
18220 Bad startup file permissions are fatal, for example shared TLS
18221 certificate and key files with world-read permissions.
18222 @end table
18223
18224 Defaults to @samp{"all -browse"}.
18225 @end deftypevr
18226
18227 @deftypevr {@code{files-configuration} parameter} boolean file-device?
18228 Specifies whether the file pseudo-device can be used for new printer
18229 queues. The URI @uref{file:///dev/null} is always allowed.
18230
18231 Defaults to @samp{#f}.
18232 @end deftypevr
18233
18234 @deftypevr {@code{files-configuration} parameter} string group
18235 Specifies the group name or ID that will be used when executing external
18236 programs.
18237
18238 Defaults to @samp{"lp"}.
18239 @end deftypevr
18240
18241 @deftypevr {@code{files-configuration} parameter} string log-file-perm
18242 Specifies the permissions for all log files that the scheduler writes.
18243
18244 Defaults to @samp{"0644"}.
18245 @end deftypevr
18246
18247 @deftypevr {@code{files-configuration} parameter} log-location page-log
18248 Defines the page log filename. Specifying a blank filename disables
18249 page log generation. The value @code{stderr} causes log entries to be
18250 sent to the standard error file when the scheduler is running in the
18251 foreground, or to the system log daemon when run in the background. The
18252 value @code{syslog} causes log entries to be sent to the system log
18253 daemon. The server name may be included in filenames using the string
18254 @code{%s}, as in @code{/var/log/cups/%s-page_log}.
18255
18256 Defaults to @samp{"/var/log/cups/page_log"}.
18257 @end deftypevr
18258
18259 @deftypevr {@code{files-configuration} parameter} string remote-root
18260 Specifies the username that is associated with unauthenticated accesses
18261 by clients claiming to be the root user. The default is @code{remroot}.
18262
18263 Defaults to @samp{"remroot"}.
18264 @end deftypevr
18265
18266 @deftypevr {@code{files-configuration} parameter} file-name request-root
18267 Specifies the directory that contains print jobs and other HTTP request
18268 data.
18269
18270 Defaults to @samp{"/var/spool/cups"}.
18271 @end deftypevr
18272
18273 @deftypevr {@code{files-configuration} parameter} sandboxing sandboxing
18274 Specifies the level of security sandboxing that is applied to print
18275 filters, backends, and other child processes of the scheduler; either
18276 @code{relaxed} or @code{strict}. This directive is currently only
18277 used/supported on macOS.
18278
18279 Defaults to @samp{strict}.
18280 @end deftypevr
18281
18282 @deftypevr {@code{files-configuration} parameter} file-name server-keychain
18283 Specifies the location of TLS certificates and private keys. CUPS will
18284 look for public and private keys in this directory: @file{.crt} files
18285 for PEM-encoded certificates and corresponding @file{.key} files for
18286 PEM-encoded private keys.
18287
18288 Defaults to @samp{"/etc/cups/ssl"}.
18289 @end deftypevr
18290
18291 @deftypevr {@code{files-configuration} parameter} file-name server-root
18292 Specifies the directory containing the server configuration files.
18293
18294 Defaults to @samp{"/etc/cups"}.
18295 @end deftypevr
18296
18297 @deftypevr {@code{files-configuration} parameter} boolean sync-on-close?
18298 Specifies whether the scheduler calls fsync(2) after writing
18299 configuration or state files.
18300
18301 Defaults to @samp{#f}.
18302 @end deftypevr
18303
18304 @deftypevr {@code{files-configuration} parameter} space-separated-string-list system-group
18305 Specifies the group(s) to use for @code{@@SYSTEM} group authentication.
18306 @end deftypevr
18307
18308 @deftypevr {@code{files-configuration} parameter} file-name temp-dir
18309 Specifies the directory where temporary files are stored.
18310
18311 Defaults to @samp{"/var/spool/cups/tmp"}.
18312 @end deftypevr
18313
18314 @deftypevr {@code{files-configuration} parameter} string user
18315 Specifies the user name or ID that is used when running external
18316 programs.
18317
18318 Defaults to @samp{"lp"}.
18319 @end deftypevr
18320
18321 @deftypevr {@code{files-configuration} parameter} string set-env
18322 Set the specified environment variable to be passed to child processes.
18323
18324 Defaults to @samp{"variable value"}.
18325 @end deftypevr
18326 @end deftypevr
18327
18328 @deftypevr {@code{cups-configuration} parameter} access-log-level access-log-level
18329 Specifies the logging level for the AccessLog file. The @code{config}
18330 level logs when printers and classes are added, deleted, or modified and
18331 when configuration files are accessed or updated. The @code{actions}
18332 level logs when print jobs are submitted, held, released, modified, or
18333 canceled, and any of the conditions for @code{config}. The @code{all}
18334 level logs all requests.
18335
18336 Defaults to @samp{actions}.
18337 @end deftypevr
18338
18339 @deftypevr {@code{cups-configuration} parameter} boolean auto-purge-jobs?
18340 Specifies whether to purge job history data automatically when it is no
18341 longer required for quotas.
18342
18343 Defaults to @samp{#f}.
18344 @end deftypevr
18345
18346 @deftypevr {@code{cups-configuration} parameter} comma-separated-string-list browse-dns-sd-sub-types
18347 Specifies a list of DNS-SD sub-types to advertise for each shared printer.
18348 For example, @samp{"_cups" "_print"} will tell network clients that both
18349 CUPS sharing and IPP Everywhere are supported.
18350
18351 Defaults to @samp{"_cups"}.
18352 @end deftypevr
18353
18354 @deftypevr {@code{cups-configuration} parameter} browse-local-protocols browse-local-protocols
18355 Specifies which protocols to use for local printer sharing.
18356
18357 Defaults to @samp{dnssd}.
18358 @end deftypevr
18359
18360 @deftypevr {@code{cups-configuration} parameter} boolean browse-web-if?
18361 Specifies whether the CUPS web interface is advertised.
18362
18363 Defaults to @samp{#f}.
18364 @end deftypevr
18365
18366 @deftypevr {@code{cups-configuration} parameter} boolean browsing?
18367 Specifies whether shared printers are advertised.
18368
18369 Defaults to @samp{#f}.
18370 @end deftypevr
18371
18372 @deftypevr {@code{cups-configuration} parameter} string classification
18373 Specifies the security classification of the server. Any valid banner
18374 name can be used, including @samp{"classified"}, @samp{"confidential"},
18375 @samp{"secret"}, @samp{"topsecret"}, and @samp{"unclassified"}, or the
18376 banner can be omitted to disable secure printing functions.
18377
18378 Defaults to @samp{""}.
18379 @end deftypevr
18380
18381 @deftypevr {@code{cups-configuration} parameter} boolean classify-override?
18382 Specifies whether users may override the classification (cover page) of
18383 individual print jobs using the @code{job-sheets} option.
18384
18385 Defaults to @samp{#f}.
18386 @end deftypevr
18387
18388 @deftypevr {@code{cups-configuration} parameter} default-auth-type default-auth-type
18389 Specifies the default type of authentication to use.
18390
18391 Defaults to @samp{Basic}.
18392 @end deftypevr
18393
18394 @deftypevr {@code{cups-configuration} parameter} default-encryption default-encryption
18395 Specifies whether encryption will be used for authenticated requests.
18396
18397 Defaults to @samp{Required}.
18398 @end deftypevr
18399
18400 @deftypevr {@code{cups-configuration} parameter} string default-language
18401 Specifies the default language to use for text and web content.
18402
18403 Defaults to @samp{"en"}.
18404 @end deftypevr
18405
18406 @deftypevr {@code{cups-configuration} parameter} string default-paper-size
18407 Specifies the default paper size for new print queues. @samp{"Auto"}
18408 uses a locale-specific default, while @samp{"None"} specifies there is
18409 no default paper size. Specific size names are typically
18410 @samp{"Letter"} or @samp{"A4"}.
18411
18412 Defaults to @samp{"Auto"}.
18413 @end deftypevr
18414
18415 @deftypevr {@code{cups-configuration} parameter} string default-policy
18416 Specifies the default access policy to use.
18417
18418 Defaults to @samp{"default"}.
18419 @end deftypevr
18420
18421 @deftypevr {@code{cups-configuration} parameter} boolean default-shared?
18422 Specifies whether local printers are shared by default.
18423
18424 Defaults to @samp{#t}.
18425 @end deftypevr
18426
18427 @deftypevr {@code{cups-configuration} parameter} non-negative-integer dirty-clean-interval
18428 Specifies the delay for updating of configuration and state files, in
18429 seconds. A value of 0 causes the update to happen as soon as possible,
18430 typically within a few milliseconds.
18431
18432 Defaults to @samp{30}.
18433 @end deftypevr
18434
18435 @deftypevr {@code{cups-configuration} parameter} error-policy error-policy
18436 Specifies what to do when an error occurs. Possible values are
18437 @code{abort-job}, which will discard the failed print job;
18438 @code{retry-job}, which will retry the job at a later time;
18439 @code{retry-current-job}, which retries the failed job immediately; and
18440 @code{stop-printer}, which stops the printer.
18441
18442 Defaults to @samp{stop-printer}.
18443 @end deftypevr
18444
18445 @deftypevr {@code{cups-configuration} parameter} non-negative-integer filter-limit
18446 Specifies the maximum cost of filters that are run concurrently, which
18447 can be used to minimize disk, memory, and CPU resource problems. A
18448 limit of 0 disables filter limiting. An average print to a
18449 non-PostScript printer needs a filter limit of about 200. A PostScript
18450 printer needs about half that (100). Setting the limit below these
18451 thresholds will effectively limit the scheduler to printing a single job
18452 at any time.
18453
18454 Defaults to @samp{0}.
18455 @end deftypevr
18456
18457 @deftypevr {@code{cups-configuration} parameter} non-negative-integer filter-nice
18458 Specifies the scheduling priority of filters that are run to print a
18459 job. The nice value ranges from 0, the highest priority, to 19, the
18460 lowest priority.
18461
18462 Defaults to @samp{0}.
18463 @end deftypevr
18464
18465 @deftypevr {@code{cups-configuration} parameter} host-name-lookups host-name-lookups
18466 Specifies whether to do reverse lookups on connecting clients. The
18467 @code{double} setting causes @code{cupsd} to verify that the hostname
18468 resolved from the address matches one of the addresses returned for that
18469 hostname. Double lookups also prevent clients with unregistered
18470 addresses from connecting to your server. Only set this option to
18471 @code{#t} or @code{double} if absolutely required.
18472
18473 Defaults to @samp{#f}.
18474 @end deftypevr
18475
18476 @deftypevr {@code{cups-configuration} parameter} non-negative-integer job-kill-delay
18477 Specifies the number of seconds to wait before killing the filters and
18478 backend associated with a canceled or held job.
18479
18480 Defaults to @samp{30}.
18481 @end deftypevr
18482
18483 @deftypevr {@code{cups-configuration} parameter} non-negative-integer job-retry-interval
18484 Specifies the interval between retries of jobs in seconds. This is
18485 typically used for fax queues but can also be used with normal print
18486 queues whose error policy is @code{retry-job} or
18487 @code{retry-current-job}.
18488
18489 Defaults to @samp{30}.
18490 @end deftypevr
18491
18492 @deftypevr {@code{cups-configuration} parameter} non-negative-integer job-retry-limit
18493 Specifies the number of retries that are done for jobs. This is
18494 typically used for fax queues but can also be used with normal print
18495 queues whose error policy is @code{retry-job} or
18496 @code{retry-current-job}.
18497
18498 Defaults to @samp{5}.
18499 @end deftypevr
18500
18501 @deftypevr {@code{cups-configuration} parameter} boolean keep-alive?
18502 Specifies whether to support HTTP keep-alive connections.
18503
18504 Defaults to @samp{#t}.
18505 @end deftypevr
18506
18507 @deftypevr {@code{cups-configuration} parameter} non-negative-integer keep-alive-timeout
18508 Specifies how long an idle client connection remains open, in seconds.
18509
18510 Defaults to @samp{30}.
18511 @end deftypevr
18512
18513 @deftypevr {@code{cups-configuration} parameter} non-negative-integer limit-request-body
18514 Specifies the maximum size of print files, IPP requests, and HTML form
18515 data. A limit of 0 disables the limit check.
18516
18517 Defaults to @samp{0}.
18518 @end deftypevr
18519
18520 @deftypevr {@code{cups-configuration} parameter} multiline-string-list listen
18521 Listens on the specified interfaces for connections. Valid values are
18522 of the form @var{address}:@var{port}, where @var{address} is either an
18523 IPv6 address enclosed in brackets, an IPv4 address, or @code{*} to
18524 indicate all addresses. Values can also be file names of local UNIX
18525 domain sockets. The Listen directive is similar to the Port directive
18526 but allows you to restrict access to specific interfaces or networks.
18527 @end deftypevr
18528
18529 @deftypevr {@code{cups-configuration} parameter} non-negative-integer listen-back-log
18530 Specifies the number of pending connections that will be allowed. This
18531 normally only affects very busy servers that have reached the MaxClients
18532 limit, but can also be triggered by large numbers of simultaneous
18533 connections. When the limit is reached, the operating system will
18534 refuse additional connections until the scheduler can accept the pending
18535 ones.
18536
18537 Defaults to @samp{128}.
18538 @end deftypevr
18539
18540 @deftypevr {@code{cups-configuration} parameter} location-access-control-list location-access-controls
18541 Specifies a set of additional access controls.
18542
18543 Available @code{location-access-controls} fields are:
18544
18545 @deftypevr {@code{location-access-controls} parameter} file-name path
18546 Specifies the URI path to which the access control applies.
18547 @end deftypevr
18548
18549 @deftypevr {@code{location-access-controls} parameter} access-control-list access-controls
18550 Access controls for all access to this path, in the same format as the
18551 @code{access-controls} of @code{operation-access-control}.
18552
18553 Defaults to @samp{()}.
18554 @end deftypevr
18555
18556 @deftypevr {@code{location-access-controls} parameter} method-access-control-list method-access-controls
18557 Access controls for method-specific access to this path.
18558
18559 Defaults to @samp{()}.
18560
18561 Available @code{method-access-controls} fields are:
18562
18563 @deftypevr {@code{method-access-controls} parameter} boolean reverse?
18564 If @code{#t}, apply access controls to all methods except the listed
18565 methods. Otherwise apply to only the listed methods.
18566
18567 Defaults to @samp{#f}.
18568 @end deftypevr
18569
18570 @deftypevr {@code{method-access-controls} parameter} method-list methods
18571 Methods to which this access control applies.
18572
18573 Defaults to @samp{()}.
18574 @end deftypevr
18575
18576 @deftypevr {@code{method-access-controls} parameter} access-control-list access-controls
18577 Access control directives, as a list of strings. Each string should be
18578 one directive, such as @samp{"Order allow,deny"}.
18579
18580 Defaults to @samp{()}.
18581 @end deftypevr
18582 @end deftypevr
18583 @end deftypevr
18584
18585 @deftypevr {@code{cups-configuration} parameter} non-negative-integer log-debug-history
18586 Specifies the number of debugging messages that are retained for logging
18587 if an error occurs in a print job. Debug messages are logged regardless
18588 of the LogLevel setting.
18589
18590 Defaults to @samp{100}.
18591 @end deftypevr
18592
18593 @deftypevr {@code{cups-configuration} parameter} log-level log-level
18594 Specifies the level of logging for the ErrorLog file. The value
18595 @code{none} stops all logging while @code{debug2} logs everything.
18596
18597 Defaults to @samp{info}.
18598 @end deftypevr
18599
18600 @deftypevr {@code{cups-configuration} parameter} log-time-format log-time-format
18601 Specifies the format of the date and time in the log files. The value
18602 @code{standard} logs whole seconds while @code{usecs} logs microseconds.
18603
18604 Defaults to @samp{standard}.
18605 @end deftypevr
18606
18607 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-clients
18608 Specifies the maximum number of simultaneous clients that are allowed by
18609 the scheduler.
18610
18611 Defaults to @samp{100}.
18612 @end deftypevr
18613
18614 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-clients-per-host
18615 Specifies the maximum number of simultaneous clients that are allowed
18616 from a single address.
18617
18618 Defaults to @samp{100}.
18619 @end deftypevr
18620
18621 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-copies
18622 Specifies the maximum number of copies that a user can print of each
18623 job.
18624
18625 Defaults to @samp{9999}.
18626 @end deftypevr
18627
18628 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-hold-time
18629 Specifies the maximum time a job may remain in the @code{indefinite}
18630 hold state before it is canceled. A value of 0 disables cancellation of
18631 held jobs.
18632
18633 Defaults to @samp{0}.
18634 @end deftypevr
18635
18636 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs
18637 Specifies the maximum number of simultaneous jobs that are allowed. Set
18638 to 0 to allow an unlimited number of jobs.
18639
18640 Defaults to @samp{500}.
18641 @end deftypevr
18642
18643 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs-per-printer
18644 Specifies the maximum number of simultaneous jobs that are allowed per
18645 printer. A value of 0 allows up to MaxJobs jobs per printer.
18646
18647 Defaults to @samp{0}.
18648 @end deftypevr
18649
18650 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs-per-user
18651 Specifies the maximum number of simultaneous jobs that are allowed per
18652 user. A value of 0 allows up to MaxJobs jobs per user.
18653
18654 Defaults to @samp{0}.
18655 @end deftypevr
18656
18657 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-job-time
18658 Specifies the maximum time a job may take to print before it is
18659 canceled, in seconds. Set to 0 to disable cancellation of ``stuck'' jobs.
18660
18661 Defaults to @samp{10800}.
18662 @end deftypevr
18663
18664 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-log-size
18665 Specifies the maximum size of the log files before they are rotated, in
18666 bytes. The value 0 disables log rotation.
18667
18668 Defaults to @samp{1048576}.
18669 @end deftypevr
18670
18671 @deftypevr {@code{cups-configuration} parameter} non-negative-integer multiple-operation-timeout
18672 Specifies the maximum amount of time to allow between files in a
18673 multiple file print job, in seconds.
18674
18675 Defaults to @samp{300}.
18676 @end deftypevr
18677
18678 @deftypevr {@code{cups-configuration} parameter} string page-log-format
18679 Specifies the format of PageLog lines. Sequences beginning with percent
18680 (@samp{%}) characters are replaced with the corresponding information,
18681 while all other characters are copied literally. The following percent
18682 sequences are recognized:
18683
18684 @table @samp
18685 @item %%
18686 insert a single percent character
18687
18688 @item %@{name@}
18689 insert the value of the specified IPP attribute
18690
18691 @item %C
18692 insert the number of copies for the current page
18693
18694 @item %P
18695 insert the current page number
18696
18697 @item %T
18698 insert the current date and time in common log format
18699
18700 @item %j
18701 insert the job ID
18702
18703 @item %p
18704 insert the printer name
18705
18706 @item %u
18707 insert the username
18708 @end table
18709
18710 A value of the empty string disables page logging. The string @code{%p
18711 %u %j %T %P %C %@{job-billing@} %@{job-originating-host-name@}
18712 %@{job-name@} %@{media@} %@{sides@}} creates a page log with the
18713 standard items.
18714
18715 Defaults to @samp{""}.
18716 @end deftypevr
18717
18718 @deftypevr {@code{cups-configuration} parameter} environment-variables environment-variables
18719 Passes the specified environment variable(s) to child processes; a list
18720 of strings.
18721
18722 Defaults to @samp{()}.
18723 @end deftypevr
18724
18725 @deftypevr {@code{cups-configuration} parameter} policy-configuration-list policies
18726 Specifies named access control policies.
18727
18728 Available @code{policy-configuration} fields are:
18729
18730 @deftypevr {@code{policy-configuration} parameter} string name
18731 Name of the policy.
18732 @end deftypevr
18733
18734 @deftypevr {@code{policy-configuration} parameter} string job-private-access
18735 Specifies an access list for a job's private values. @code{@@ACL} maps
18736 to the printer's requesting-user-name-allowed or
18737 requesting-user-name-denied values. @code{@@OWNER} maps to the job's
18738 owner. @code{@@SYSTEM} maps to the groups listed for the
18739 @code{system-group} field of the @code{files-config} configuration,
18740 which is reified into the @code{cups-files.conf(5)} file. Other
18741 possible elements of the access list include specific user names, and
18742 @code{@@@var{group}} to indicate members of a specific group. The
18743 access list may also be simply @code{all} or @code{default}.
18744
18745 Defaults to @samp{"@@OWNER @@SYSTEM"}.
18746 @end deftypevr
18747
18748 @deftypevr {@code{policy-configuration} parameter} string job-private-values
18749 Specifies the list of job values to make private, or @code{all},
18750 @code{default}, or @code{none}.
18751
18752 Defaults to @samp{"job-name job-originating-host-name
18753 job-originating-user-name phone"}.
18754 @end deftypevr
18755
18756 @deftypevr {@code{policy-configuration} parameter} string subscription-private-access
18757 Specifies an access list for a subscription's private values.
18758 @code{@@ACL} maps to the printer's requesting-user-name-allowed or
18759 requesting-user-name-denied values. @code{@@OWNER} maps to the job's
18760 owner. @code{@@SYSTEM} maps to the groups listed for the
18761 @code{system-group} field of the @code{files-config} configuration,
18762 which is reified into the @code{cups-files.conf(5)} file. Other
18763 possible elements of the access list include specific user names, and
18764 @code{@@@var{group}} to indicate members of a specific group. The
18765 access list may also be simply @code{all} or @code{default}.
18766
18767 Defaults to @samp{"@@OWNER @@SYSTEM"}.
18768 @end deftypevr
18769
18770 @deftypevr {@code{policy-configuration} parameter} string subscription-private-values
18771 Specifies the list of job values to make private, or @code{all},
18772 @code{default}, or @code{none}.
18773
18774 Defaults to @samp{"notify-events notify-pull-method notify-recipient-uri
18775 notify-subscriber-user-name notify-user-data"}.
18776 @end deftypevr
18777
18778 @deftypevr {@code{policy-configuration} parameter} operation-access-control-list access-controls
18779 Access control by IPP operation.
18780
18781 Defaults to @samp{()}.
18782 @end deftypevr
18783 @end deftypevr
18784
18785 @deftypevr {@code{cups-configuration} parameter} boolean-or-non-negative-integer preserve-job-files
18786 Specifies whether job files (documents) are preserved after a job is
18787 printed. If a numeric value is specified, job files are preserved for
18788 the indicated number of seconds after printing. Otherwise a boolean
18789 value applies indefinitely.
18790
18791 Defaults to @samp{86400}.
18792 @end deftypevr
18793
18794 @deftypevr {@code{cups-configuration} parameter} boolean-or-non-negative-integer preserve-job-history
18795 Specifies whether the job history is preserved after a job is printed.
18796 If a numeric value is specified, the job history is preserved for the
18797 indicated number of seconds after printing. If @code{#t}, the job
18798 history is preserved until the MaxJobs limit is reached.
18799
18800 Defaults to @samp{#t}.
18801 @end deftypevr
18802
18803 @deftypevr {@code{cups-configuration} parameter} non-negative-integer reload-timeout
18804 Specifies the amount of time to wait for job completion before
18805 restarting the scheduler.
18806
18807 Defaults to @samp{30}.
18808 @end deftypevr
18809
18810 @deftypevr {@code{cups-configuration} parameter} string rip-cache
18811 Specifies the maximum amount of memory to use when converting documents
18812 into bitmaps for a printer.
18813
18814 Defaults to @samp{"128m"}.
18815 @end deftypevr
18816
18817 @deftypevr {@code{cups-configuration} parameter} string server-admin
18818 Specifies the email address of the server administrator.
18819
18820 Defaults to @samp{"root@@localhost.localdomain"}.
18821 @end deftypevr
18822
18823 @deftypevr {@code{cups-configuration} parameter} host-name-list-or-* server-alias
18824 The ServerAlias directive is used for HTTP Host header validation when
18825 clients connect to the scheduler from external interfaces. Using the
18826 special name @code{*} can expose your system to known browser-based DNS
18827 rebinding attacks, even when accessing sites through a firewall. If the
18828 auto-discovery of alternate names does not work, we recommend listing
18829 each alternate name with a ServerAlias directive instead of using
18830 @code{*}.
18831
18832 Defaults to @samp{*}.
18833 @end deftypevr
18834
18835 @deftypevr {@code{cups-configuration} parameter} string server-name
18836 Specifies the fully-qualified host name of the server.
18837
18838 Defaults to @samp{"localhost"}.
18839 @end deftypevr
18840
18841 @deftypevr {@code{cups-configuration} parameter} server-tokens server-tokens
18842 Specifies what information is included in the Server header of HTTP
18843 responses. @code{None} disables the Server header. @code{ProductOnly}
18844 reports @code{CUPS}. @code{Major} reports @code{CUPS 2}. @code{Minor}
18845 reports @code{CUPS 2.0}. @code{Minimal} reports @code{CUPS 2.0.0}.
18846 @code{OS} reports @code{CUPS 2.0.0 (@var{uname})} where @var{uname} is
18847 the output of the @code{uname} command. @code{Full} reports @code{CUPS
18848 2.0.0 (@var{uname}) IPP/2.0}.
18849
18850 Defaults to @samp{Minimal}.
18851 @end deftypevr
18852
18853 @deftypevr {@code{cups-configuration} parameter} multiline-string-list ssl-listen
18854 Listens on the specified interfaces for encrypted connections. Valid
18855 values are of the form @var{address}:@var{port}, where @var{address} is
18856 either an IPv6 address enclosed in brackets, an IPv4 address, or
18857 @code{*} to indicate all addresses.
18858
18859 Defaults to @samp{()}.
18860 @end deftypevr
18861
18862 @deftypevr {@code{cups-configuration} parameter} ssl-options ssl-options
18863 Sets encryption options. By default, CUPS only supports encryption
18864 using TLS v1.0 or higher using known secure cipher suites. Security is
18865 reduced when @code{Allow} options are used, and enhanced when @code{Deny}
18866 options are used. The @code{AllowRC4} option enables the 128-bit RC4 cipher
18867 suites, which are required for some older clients. The @code{AllowSSL3} option
18868 enables SSL v3.0, which is required for some older clients that do not support
18869 TLS v1.0. The @code{DenyCBC} option disables all CBC cipher suites. The
18870 @code{DenyTLS1.0} option disables TLS v1.0 support - this sets the minimum
18871 protocol version to TLS v1.1.
18872
18873 Defaults to @samp{()}.
18874 @end deftypevr
18875
18876 @deftypevr {@code{cups-configuration} parameter} boolean strict-conformance?
18877 Specifies whether the scheduler requires clients to strictly adhere to
18878 the IPP specifications.
18879
18880 Defaults to @samp{#f}.
18881 @end deftypevr
18882
18883 @deftypevr {@code{cups-configuration} parameter} non-negative-integer timeout
18884 Specifies the HTTP request timeout, in seconds.
18885
18886 Defaults to @samp{300}.
18887
18888 @end deftypevr
18889
18890 @deftypevr {@code{cups-configuration} parameter} boolean web-interface?
18891 Specifies whether the web interface is enabled.
18892
18893 Defaults to @samp{#f}.
18894 @end deftypevr
18895
18896 At this point you're probably thinking ``oh dear, Guix manual, I like
18897 you but you can stop already with the configuration options''. Indeed.
18898 However, one more point: it could be that you have an existing
18899 @code{cupsd.conf} that you want to use. In that case, you can pass an
18900 @code{opaque-cups-configuration} as the configuration of a
18901 @code{cups-service-type}.
18902
18903 Available @code{opaque-cups-configuration} fields are:
18904
18905 @deftypevr {@code{opaque-cups-configuration} parameter} package cups
18906 The CUPS package.
18907 @end deftypevr
18908
18909 @deftypevr {@code{opaque-cups-configuration} parameter} string cupsd.conf
18910 The contents of the @code{cupsd.conf}, as a string.
18911 @end deftypevr
18912
18913 @deftypevr {@code{opaque-cups-configuration} parameter} string cups-files.conf
18914 The contents of the @code{cups-files.conf} file, as a string.
18915 @end deftypevr
18916
18917 For example, if your @code{cupsd.conf} and @code{cups-files.conf} are in
18918 strings of the same name, you could instantiate a CUPS service like
18919 this:
18920
18921 @lisp
18922 (service cups-service-type
18923 (opaque-cups-configuration
18924 (cupsd.conf cupsd.conf)
18925 (cups-files.conf cups-files.conf)))
18926 @end lisp
18927
18928
18929 @node Desktop Services
18930 @subsection Desktop Services
18931
18932 The @code{(gnu services desktop)} module provides services that are
18933 usually useful in the context of a ``desktop'' setup---that is, on a
18934 machine running a graphical display server, possibly with graphical user
18935 interfaces, etc. It also defines services that provide specific desktop
18936 environments like GNOME, Xfce or MATE.
18937
18938 To simplify things, the module defines a variable containing the set of
18939 services that users typically expect on a machine with a graphical
18940 environment and networking:
18941
18942 @defvr {Scheme Variable} %desktop-services
18943 This is a list of services that builds upon @code{%base-services} and
18944 adds or adjusts services for a typical ``desktop'' setup.
18945
18946 In particular, it adds a graphical login manager (@pxref{X Window,
18947 @code{gdm-service-type}}), screen lockers, a network management tool
18948 (@pxref{Networking Services, @code{network-manager-service-type}}) with modem
18949 support (@pxref{Networking Services, @code{modem-manager-service-type}}),
18950 energy and color management services, the @code{elogind} login and seat
18951 manager, the Polkit privilege service, the GeoClue location service, the
18952 AccountsService daemon that allows authorized users change system passwords,
18953 an NTP client (@pxref{Networking Services}), the Avahi daemon, and has the
18954 name service switch service configured to be able to use @code{nss-mdns}
18955 (@pxref{Name Service Switch, mDNS}).
18956 @end defvr
18957
18958 The @code{%desktop-services} variable can be used as the @code{services}
18959 field of an @code{operating-system} declaration (@pxref{operating-system
18960 Reference, @code{services}}).
18961
18962 Additionally, the @code{gnome-desktop-service-type},
18963 @code{xfce-desktop-service}, @code{mate-desktop-service-type},
18964 @code{lxqt-desktop-service-type} and @code{enlightenment-desktop-service-type}
18965 procedures can add GNOME, Xfce, MATE and/or Enlightenment to a system. To
18966 ``add GNOME'' means that system-level services like the backlight adjustment
18967 helpers and the power management utilities are added to the system, extending
18968 @code{polkit} and @code{dbus} appropriately, allowing GNOME to operate with
18969 elevated privileges on a limited number of special-purpose system interfaces.
18970 Additionally, adding a service made by @code{gnome-desktop-service-type} adds
18971 the GNOME metapackage to the system profile. Likewise, adding the Xfce
18972 service not only adds the @code{xfce} metapackage to the system profile, but
18973 it also gives the Thunar file manager the ability to open a ``root-mode'' file
18974 management window, if the user authenticates using the administrator's
18975 password via the standard polkit graphical interface. To ``add MATE'' means
18976 that @code{polkit} and @code{dbus} are extended appropriately, allowing MATE
18977 to operate with elevated privileges on a limited number of special-purpose
18978 system interfaces. Additionally, adding a service of type
18979 @code{mate-desktop-service-type} adds the MATE metapackage to the system
18980 profile. ``Adding Enlightenment'' means that @code{dbus} is extended
18981 appropriately, and several of Enlightenment's binaries are set as setuid,
18982 allowing Enlightenment's screen locker and other functionality to work as
18983 expected.
18984
18985 The desktop environments in Guix use the Xorg display server by
18986 default. If you'd like to use the newer display server protocol
18987 called Wayland, you need to use the @code{sddm-service} instead of
18988 GDM as the graphical login manager. You should then
18989 select the ``GNOME (Wayland)'' session in SDDM@. Alternatively you can
18990 also try starting GNOME on Wayland manually from a TTY with the
18991 command ``XDG_SESSION_TYPE=wayland exec dbus-run-session
18992 gnome-session``. Currently only GNOME has support for Wayland.
18993
18994 @defvr {Scheme Variable} gnome-desktop-service-type
18995 This is the type of the service that adds the @uref{https://www.gnome.org,
18996 GNOME} desktop environment. Its value is a @code{gnome-desktop-configuration}
18997 object (see below).
18998
18999 This service adds the @code{gnome} package to the system profile, and extends
19000 polkit with the actions from @code{gnome-settings-daemon}.
19001 @end defvr
19002
19003 @deftp {Data Type} gnome-desktop-configuration
19004 Configuration record for the GNOME desktop environment.
19005
19006 @table @asis
19007 @item @code{gnome} (default: @code{gnome})
19008 The GNOME package to use.
19009 @end table
19010 @end deftp
19011
19012 @defvr {Scheme Variable} xfce-desktop-service-type
19013 This is the type of a service to run the @uref{Xfce, https://xfce.org/}
19014 desktop environment. Its value is an @code{xfce-desktop-configuration} object
19015 (see below).
19016
19017 This service adds the @code{xfce} package to the system profile, and
19018 extends polkit with the ability for @code{thunar} to manipulate the file
19019 system as root from within a user session, after the user has authenticated
19020 with the administrator's password.
19021
19022 Note that @code{xfce4-panel} and its plugin packages should be installed in
19023 the same profile to ensure compatibility. When using this service, you should
19024 add extra plugins (@code{xfce4-whiskermenu-plugin},
19025 @code{xfce4-weather-plugin}, etc.) to the @code{packages} field of your
19026 @code{operating-system}.
19027 @end defvr
19028
19029 @deftp {Data Type} xfce-desktop-configuration
19030 Configuration record for the Xfce desktop environment.
19031
19032 @table @asis
19033 @item @code{xfce} (default: @code{xfce})
19034 The Xfce package to use.
19035 @end table
19036 @end deftp
19037
19038 @deffn {Scheme Variable} mate-desktop-service-type
19039 This is the type of the service that runs the @uref{https://mate-desktop.org/,
19040 MATE desktop environment}. Its value is a @code{mate-desktop-configuration}
19041 object (see below).
19042
19043 This service adds the @code{mate} package to the system
19044 profile, and extends polkit with the actions from
19045 @code{mate-settings-daemon}.
19046 @end deffn
19047
19048 @deftp {Data Type} mate-desktop-configuration
19049 Configuration record for the MATE desktop environment.
19050
19051 @table @asis
19052 @item @code{mate} (default: @code{mate})
19053 The MATE package to use.
19054 @end table
19055 @end deftp
19056
19057 @deffn {Scheme Variable} lxqt-desktop-service-type
19058 This is the type of the service that runs the @uref{https://lxqt.github.io,
19059 LXQt desktop environment}. Its value is a @code{lxqt-desktop-configuration}
19060 object (see below).
19061
19062 This service adds the @code{lxqt} package to the system
19063 profile.
19064 @end deffn
19065
19066 @deftp {Data Type} lxqt-desktop-configuration
19067 Configuration record for the LXQt desktop environment.
19068
19069 @table @asis
19070 @item @code{lxqt} (default: @code{lxqt})
19071 The LXQT package to use.
19072 @end table
19073 @end deftp
19074
19075 @deffn {Scheme Variable} enlightenment-desktop-service-type
19076 Return a service that adds the @code{enlightenment} package to the system
19077 profile, and extends dbus with actions from @code{efl}.
19078 @end deffn
19079
19080 @deftp {Data Type} enlightenment-desktop-service-configuration
19081 @table @asis
19082 @item @code{enlightenment} (default: @code{enlightenment})
19083 The enlightenment package to use.
19084 @end table
19085 @end deftp
19086
19087 Because the GNOME, Xfce and MATE desktop services pull in so many packages,
19088 the default @code{%desktop-services} variable doesn't include any of
19089 them by default. To add GNOME, Xfce or MATE, just @code{cons} them onto
19090 @code{%desktop-services} in the @code{services} field of your
19091 @code{operating-system}:
19092
19093 @lisp
19094 (use-modules (gnu))
19095 (use-service-modules desktop)
19096 (operating-system
19097 ...
19098 ;; cons* adds items to the list given as its last argument.
19099 (services (cons* (service gnome-desktop-service-type)
19100 (service xfce-desktop-service)
19101 %desktop-services))
19102 ...)
19103 @end lisp
19104
19105 These desktop environments will then be available as options in the
19106 graphical login window.
19107
19108 The actual service definitions included in @code{%desktop-services} and
19109 provided by @code{(gnu services dbus)} and @code{(gnu services desktop)}
19110 are described below.
19111
19112 @deffn {Scheme Procedure} dbus-service [#:dbus @var{dbus}] [#:services '()]
19113 Return a service that runs the ``system bus'', using @var{dbus}, with
19114 support for @var{services}.
19115
19116 @uref{https://dbus.freedesktop.org/, D-Bus} is an inter-process communication
19117 facility. Its system bus is used to allow system services to communicate
19118 and to be notified of system-wide events.
19119
19120 @var{services} must be a list of packages that provide an
19121 @file{etc/dbus-1/system.d} directory containing additional D-Bus configuration
19122 and policy files. For example, to allow avahi-daemon to use the system bus,
19123 @var{services} must be equal to @code{(list avahi)}.
19124 @end deffn
19125
19126 @deffn {Scheme Procedure} elogind-service [#:config @var{config}]
19127 Return a service that runs the @code{elogind} login and
19128 seat management daemon. @uref{https://github.com/elogind/elogind,
19129 Elogind} exposes a D-Bus interface that can be used to know which users
19130 are logged in, know what kind of sessions they have open, suspend the
19131 system, inhibit system suspend, reboot the system, and other tasks.
19132
19133 Elogind handles most system-level power events for a computer, for
19134 example suspending the system when a lid is closed, or shutting it down
19135 when the power button is pressed.
19136
19137 The @var{config} keyword argument specifies the configuration for
19138 elogind, and should be the result of an @code{(elogind-configuration
19139 (@var{parameter} @var{value})...)} invocation. Available parameters and
19140 their default values are:
19141
19142 @table @code
19143 @item kill-user-processes?
19144 @code{#f}
19145 @item kill-only-users
19146 @code{()}
19147 @item kill-exclude-users
19148 @code{("root")}
19149 @item inhibit-delay-max-seconds
19150 @code{5}
19151 @item handle-power-key
19152 @code{poweroff}
19153 @item handle-suspend-key
19154 @code{suspend}
19155 @item handle-hibernate-key
19156 @code{hibernate}
19157 @item handle-lid-switch
19158 @code{suspend}
19159 @item handle-lid-switch-docked
19160 @code{ignore}
19161 @item handle-lid-switch-external-power
19162 @code{ignore}
19163 @item power-key-ignore-inhibited?
19164 @code{#f}
19165 @item suspend-key-ignore-inhibited?
19166 @code{#f}
19167 @item hibernate-key-ignore-inhibited?
19168 @code{#f}
19169 @item lid-switch-ignore-inhibited?
19170 @code{#t}
19171 @item holdoff-timeout-seconds
19172 @code{30}
19173 @item idle-action
19174 @code{ignore}
19175 @item idle-action-seconds
19176 @code{(* 30 60)}
19177 @item runtime-directory-size-percent
19178 @code{10}
19179 @item runtime-directory-size
19180 @code{#f}
19181 @item remove-ipc?
19182 @code{#t}
19183 @item suspend-state
19184 @code{("mem" "standby" "freeze")}
19185 @item suspend-mode
19186 @code{()}
19187 @item hibernate-state
19188 @code{("disk")}
19189 @item hibernate-mode
19190 @code{("platform" "shutdown")}
19191 @item hybrid-sleep-state
19192 @code{("disk")}
19193 @item hybrid-sleep-mode
19194 @code{("suspend" "platform" "shutdown")}
19195 @end table
19196 @end deffn
19197
19198 @deffn {Scheme Procedure} accountsservice-service @
19199 [#:accountsservice @var{accountsservice}]
19200 Return a service that runs AccountsService, a system service that can
19201 list available accounts, change their passwords, and so on.
19202 AccountsService integrates with PolicyKit to enable unprivileged users
19203 to acquire the capability to modify their system configuration.
19204 @uref{https://www.freedesktop.org/wiki/Software/AccountsService/, the
19205 accountsservice web site} for more information.
19206
19207 The @var{accountsservice} keyword argument is the @code{accountsservice}
19208 package to expose as a service.
19209 @end deffn
19210
19211 @deffn {Scheme Procedure} polkit-service @
19212 [#:polkit @var{polkit}]
19213 Return a service that runs the
19214 @uref{https://www.freedesktop.org/wiki/Software/polkit/, Polkit privilege
19215 management service}, which allows system administrators to grant access to
19216 privileged operations in a structured way. By querying the Polkit service, a
19217 privileged system component can know when it should grant additional
19218 capabilities to ordinary users. For example, an ordinary user can be granted
19219 the capability to suspend the system if the user is logged in locally.
19220 @end deffn
19221
19222 @defvr {Scheme Variable} polkit-wheel-service
19223 Service that adds the @code{wheel} group as admins to the Polkit
19224 service. This makes it so that users in the @code{wheel} group are queried
19225 for their own passwords when performing administrative actions instead of
19226 @code{root}'s, similar to the behaviour used by @code{sudo}.
19227 @end defvr
19228
19229 @defvr {Scheme Variable} upower-service-type
19230 Service that runs @uref{https://upower.freedesktop.org/, @command{upowerd}}, a
19231 system-wide monitor for power consumption and battery levels, with the given
19232 configuration settings.
19233
19234 It implements the @code{org.freedesktop.UPower} D-Bus interface, and is
19235 notably used by GNOME.
19236 @end defvr
19237
19238 @deftp {Data Type} upower-configuration
19239 Data type representation the configuration for UPower.
19240
19241 @table @asis
19242
19243 @item @code{upower} (default: @var{upower})
19244 Package to use for @code{upower}.
19245
19246 @item @code{watts-up-pro?} (default: @code{#f})
19247 Enable the Watts Up Pro device.
19248
19249 @item @code{poll-batteries?} (default: @code{#t})
19250 Enable polling the kernel for battery level changes.
19251
19252 @item @code{ignore-lid?} (default: @code{#f})
19253 Ignore the lid state, this can be useful if it's incorrect on a device.
19254
19255 @item @code{use-percentage-for-policy?} (default: @code{#f})
19256 Whether battery percentage based policy should be used. The default is to use
19257 the time left, change to @code{#t} to use the percentage.
19258
19259 @item @code{percentage-low} (default: @code{10})
19260 When @code{use-percentage-for-policy?} is @code{#t}, this sets the percentage
19261 at which the battery is considered low.
19262
19263 @item @code{percentage-critical} (default: @code{3})
19264 When @code{use-percentage-for-policy?} is @code{#t}, this sets the percentage
19265 at which the battery is considered critical.
19266
19267 @item @code{percentage-action} (default: @code{2})
19268 When @code{use-percentage-for-policy?} is @code{#t}, this sets the percentage
19269 at which action will be taken.
19270
19271 @item @code{time-low} (default: @code{1200})
19272 When @code{use-time-for-policy?} is @code{#f}, this sets the time remaining in
19273 seconds at which the battery is considered low.
19274
19275 @item @code{time-critical} (default: @code{300})
19276 When @code{use-time-for-policy?} is @code{#f}, this sets the time remaining in
19277 seconds at which the battery is considered critical.
19278
19279 @item @code{time-action} (default: @code{120})
19280 When @code{use-time-for-policy?} is @code{#f}, this sets the time remaining in
19281 seconds at which action will be taken.
19282
19283 @item @code{critical-power-action} (default: @code{'hybrid-sleep})
19284 The action taken when @code{percentage-action} or @code{time-action} is
19285 reached (depending on the configuration of @code{use-percentage-for-policy?}).
19286
19287 Possible values are:
19288
19289 @itemize @bullet
19290 @item
19291 @code{'power-off}
19292
19293 @item
19294 @code{'hibernate}
19295
19296 @item
19297 @code{'hybrid-sleep}.
19298 @end itemize
19299
19300 @end table
19301 @end deftp
19302
19303 @deffn {Scheme Procedure} udisks-service [#:udisks @var{udisks}]
19304 Return a service for @uref{https://udisks.freedesktop.org/docs/latest/,
19305 UDisks}, a @dfn{disk management} daemon that provides user interfaces
19306 with notifications and ways to mount/unmount disks. Programs that talk
19307 to UDisks include the @command{udisksctl} command, part of UDisks, and
19308 GNOME Disks. Note that Udisks relies on the @command{mount} command, so
19309 it will only be able to use the file-system utilities installed in the
19310 system profile. For example if you want to be able to mount NTFS
19311 file-systems in read and write fashion, you'll need to have
19312 @code{ntfs-3g} installed system-wide.
19313 @end deffn
19314
19315 @deffn {Scheme Variable} colord-service-type
19316 This is the type of the service that runs @command{colord}, a system
19317 service with a D-Bus
19318 interface to manage the color profiles of input and output devices such as
19319 screens and scanners. It is notably used by the GNOME Color Manager graphical
19320 tool. See @uref{https://www.freedesktop.org/software/colord/, the colord web
19321 site} for more information.
19322 @end deffn
19323
19324 @cindex scanner access
19325 @defvr {Scheme Variable} sane-service-type
19326 This service provides access to scanners @i{via}
19327 @uref{http://www.sane-project.org, SANE} by installing the necessary
19328 udev rules. It is included in @code{%desktop-services} (@pxref{Desktop
19329 Services}) and relies by default on @code{sane-backends-minimal} package
19330 (see below) for hardware support.
19331 @end defvr
19332
19333 @defvr {Scheme Variable} sane-backends-minimal
19334 The default package which the @code{sane-service-type} installs. It
19335 supports many recent scanners.
19336 @end defvr
19337
19338 @defvr {Scheme Variable} sane-backends
19339 This package includes support for all scanners that
19340 @code{sane-backends-minimal} supports, plus older Hewlett-Packard
19341 scanners supported by @code{hplip} package. In order to use this on
19342 a system which relies on @code{%desktop-services}, you may use
19343 @code{modify-services} (@pxref{Service Reference,
19344 @code{modify-services}}) as illustrated below:
19345
19346 @lisp
19347 (use-modules (gnu))
19348 (use-service-modules
19349 @dots{}
19350 desktop)
19351 (use-package-modules
19352 @dots{}
19353 scanner)
19354
19355 (define %my-desktop-services
19356 ;; List of desktop services that supports a broader range of scanners.
19357 (modify-services %desktop-services
19358 (sane-service-type _ => sane-backends)))
19359
19360 (operating-system
19361 @dots{}
19362 (services %my-desktop-services)
19363 @end lisp
19364 @end defvr
19365
19366 @deffn {Scheme Procedure} geoclue-application name [#:allowed? #t] [#:system? #f] [#:users '()]
19367 Return a configuration allowing an application to access GeoClue
19368 location data. @var{name} is the Desktop ID of the application, without
19369 the @code{.desktop} part. If @var{allowed?} is true, the application
19370 will have access to location information by default. The boolean
19371 @var{system?} value indicates whether an application is a system component
19372 or not. Finally @var{users} is a list of UIDs of all users for which
19373 this application is allowed location info access. An empty users list
19374 means that all users are allowed.
19375 @end deffn
19376
19377 @defvr {Scheme Variable} %standard-geoclue-applications
19378 The standard list of well-known GeoClue application configurations,
19379 granting authority to the GNOME date-and-time utility to ask for the
19380 current location in order to set the time zone, and allowing the
19381 IceCat and Epiphany web browsers to request location information.
19382 IceCat and Epiphany both query the user before allowing a web page to
19383 know the user's location.
19384 @end defvr
19385
19386 @deffn {Scheme Procedure} geoclue-service [#:colord @var{colord}] @
19387 [#:whitelist '()] @
19388 [#:wifi-geolocation-url "https://location.services.mozilla.com/v1/geolocate?key=geoclue"] @
19389 [#:submit-data? #f]
19390 [#:wifi-submission-url "https://location.services.mozilla.com/v1/submit?key=geoclue"] @
19391 [#:submission-nick "geoclue"] @
19392 [#:applications %standard-geoclue-applications]
19393 Return a service that runs the GeoClue location service. This service
19394 provides a D-Bus interface to allow applications to request access to a
19395 user's physical location, and optionally to add information to online
19396 location databases. See
19397 @uref{https://wiki.freedesktop.org/www/Software/GeoClue/, the GeoClue
19398 web site} for more information.
19399 @end deffn
19400
19401 @deffn {Scheme Procedure} bluetooth-service [#:bluez @var{bluez}] @
19402 [@w{#:auto-enable? #f}]
19403 Return a service that runs the @command{bluetoothd} daemon, which
19404 manages all the Bluetooth devices and provides a number of D-Bus
19405 interfaces. When AUTO-ENABLE? is true, the bluetooth controller is
19406 powered automatically at boot, which can be useful when using a
19407 bluetooth keyboard or mouse.
19408
19409 Users need to be in the @code{lp} group to access the D-Bus service.
19410 @end deffn
19411
19412 @defvr {Scheme Variable} gnome-keyring-service-type
19413 This is the type of the service that adds the
19414 @uref{https://wiki.gnome.org/Projects/GnomeKeyring, GNOME Keyring}. Its
19415 value is a @code{gnome-keyring-configuration} object (see below).
19416
19417 This service adds the @code{gnome-keyring} package to the system profile
19418 and extends PAM with entries using @code{pam_gnome_keyring.so}, unlocking
19419 a user's login keyring when they log in or setting its password with passwd.
19420 @end defvr
19421
19422 @deftp {Data Type} gnome-keyring-configuration
19423 Configuration record for the GNOME Keyring service.
19424
19425 @table @asis
19426 @item @code{keyring} (default: @code{gnome-keyring})
19427 The GNOME keyring package to use.
19428
19429 @item @code{pam-services}
19430 A list of @code{(@var{service} . @var{kind})} pairs denoting PAM
19431 services to extend, where @var{service} is the name of an existing
19432 service to extend and @var{kind} is one of @code{login} or
19433 @code{passwd}.
19434
19435 If @code{login} is given, it adds an optional
19436 @code{pam_gnome_keyring.so} to the auth block without arguments and to
19437 the session block with @code{auto_start}. If @code{passwd} is given, it
19438 adds an optional @code{pam_gnome_keyring.so} to the password block
19439 without arguments.
19440
19441 By default, this field contains ``gdm-password'' with the value @code{login}
19442 and ``passwd'' is with the value @code{passwd}.
19443 @end table
19444 @end deftp
19445
19446
19447 @node Sound Services
19448 @subsection Sound Services
19449
19450 @cindex sound support
19451 @cindex ALSA
19452 @cindex PulseAudio, sound support
19453
19454 The @code{(gnu services sound)} module provides a service to configure the
19455 Advanced Linux Sound Architecture (ALSA) system, which makes PulseAudio the
19456 preferred ALSA output driver.
19457
19458 @deffn {Scheme Variable} alsa-service-type
19459 This is the type for the @uref{https://alsa-project.org/, Advanced Linux Sound
19460 Architecture} (ALSA) system, which generates the @file{/etc/asound.conf}
19461 configuration file. The value for this type is a @command{alsa-configuration}
19462 record as in this example:
19463
19464 @lisp
19465 (service alsa-service-type)
19466 @end lisp
19467
19468 See below for details about @code{alsa-configuration}.
19469 @end deffn
19470
19471 @deftp {Data Type} alsa-configuration
19472 Data type representing the configuration for @code{alsa-service}.
19473
19474 @table @asis
19475 @item @code{alsa-plugins} (default: @var{alsa-plugins})
19476 @code{alsa-plugins} package to use.
19477
19478 @item @code{pulseaudio?} (default: @var{#t})
19479 Whether ALSA applications should transparently be made to use the
19480 @uref{https://www.pulseaudio.org/, PulseAudio} sound server.
19481
19482 Using PulseAudio allows you to run several sound-producing applications
19483 at the same time and to individual control them @i{via}
19484 @command{pavucontrol}, among other things.
19485
19486 @item @code{extra-options} (default: @var{""})
19487 String to append to the @file{/etc/asound.conf} file.
19488
19489 @end table
19490 @end deftp
19491
19492 Individual users who want to override the system configuration of ALSA can do
19493 it with the @file{~/.asoundrc} file:
19494
19495 @example
19496 # In guix, we have to specify the absolute path for plugins.
19497 pcm_type.jack @{
19498 lib "/home/alice/.guix-profile/lib/alsa-lib/libasound_module_pcm_jack.so"
19499 @}
19500
19501 # Routing ALSA to jack:
19502 # <http://jackaudio.org/faq/routing_alsa.html>.
19503 pcm.rawjack @{
19504 type jack
19505 playback_ports @{
19506 0 system:playback_1
19507 1 system:playback_2
19508 @}
19509
19510 capture_ports @{
19511 0 system:capture_1
19512 1 system:capture_2
19513 @}
19514 @}
19515
19516 pcm.!default @{
19517 type plug
19518 slave @{
19519 pcm "rawjack"
19520 @}
19521 @}
19522 @end example
19523
19524 See @uref{https://www.alsa-project.org/main/index.php/Asoundrc} for the
19525 details.
19526
19527 @deffn {Scheme Variable} pulseaudio-service-type
19528 This is the type for the @uref{https://www.pulseaudio.org/, PulseAudio}
19529 sound server. It exists to allow system overrides of the default settings
19530 via @code{pulseaudio-configuration}, see below.
19531
19532 @quotation Warning
19533 This service overrides per-user configuration files. If you want
19534 PulseAudio to honor configuration files in @file{~/.config/pulse} you
19535 have to unset the environment variables @env{PULSE_CONFIG} and
19536 @env{PULSE_CLIENTCONFIG} in your @file{~/.bash_profile}.
19537 @end quotation
19538
19539 @quotation Warning
19540 This service on its own does not ensure, that the @code{pulseaudio} package
19541 exists on your machine. It merely adds configuration files for it, as
19542 detailed below. In the (admittedly unlikely) case, that you find yourself
19543 without a @code{pulseaudio} package, consider enabling it through the
19544 @code{alsa-service-type} above.
19545 @end quotation
19546 @end deffn
19547
19548 @deftp {Data Type} pulseaudio-configuration
19549 Data type representing the configuration for @code{pulseaudio-service}.
19550
19551 @table @asis
19552 @item @code{client-conf} (default: @code{'()})
19553 List of settings to set in @file{client.conf}.
19554 Accepts a list of strings or a symbol-value pairs. A string will be
19555 inserted as-is with a newline added. A pair will be formatted as
19556 ``key = value'', again with a newline added.
19557
19558 @item @code{daemon-conf} (default: @code{'((flat-volumes . no))})
19559 List of settings to set in @file{daemon.conf}, formatted just like
19560 @var{client-conf}.
19561
19562 @item @code{script-file} (default: @code{(file-append pulseaudio "/etc/pulse/default.pa")})
19563 Script file to use as @file{default.pa}.
19564
19565 @item @code{system-script-file} (default: @code{(file-append pulseaudio "/etc/pulse/system.pa")})
19566 Script file to use as @file{system.pa}.
19567 @end table
19568 @end deftp
19569
19570 @deffn {Scheme Variable} ladspa-service-type
19571 This service sets the @var{LADSPA_PATH} variable, so that programs, which
19572 respect it, e.g. PulseAudio, can load LADSPA plugins.
19573
19574 The following example will setup the service to enable modules from the
19575 @code{swh-plugins} package:
19576
19577 @lisp
19578 (service ladspa-service-type
19579 (ladspa-configuration (plugins (list swh-plugins))))
19580 @end lisp
19581
19582 See @uref{http://plugin.org.uk/ladspa-swh/docs/ladspa-swh.html} for the
19583 details.
19584
19585 @end deffn
19586
19587 @node Database Services
19588 @subsection Database Services
19589
19590 @cindex database
19591 @cindex SQL
19592 The @code{(gnu services databases)} module provides the following services.
19593
19594 @subsubheading PostgreSQL
19595
19596 The following example describes a PostgreSQL service with the default
19597 configuration.
19598
19599 @lisp
19600 (service postgresql-service-type
19601 (postgresql-configuration
19602 (postgresql postgresql-10)))
19603 @end lisp
19604
19605 If the services fails to start, it may be due to an incompatible
19606 cluster already present in @var{data-directory}. Adjust it (or, if you
19607 don't need the cluster anymore, delete @var{data-directory}), then
19608 restart the service.
19609
19610 Peer authentication is used by default and the @code{postgres} user
19611 account has no shell, which prevents the direct execution of @code{psql}
19612 commands as this user. To use @code{psql}, you can temporarily log in
19613 as @code{postgres} using a shell, create a PostgreSQL superuser with the
19614 same name as one of the system users and then create the associated
19615 database.
19616
19617 @example
19618 sudo -u postgres -s /bin/sh
19619 createuser --interactive
19620 createdb $MY_USER_LOGIN # Replace appropriately.
19621 @end example
19622
19623 @deftp {Data Type} postgresql-configuration
19624 Data type representing the configuration for the
19625 @code{postgresql-service-type}.
19626
19627 @table @asis
19628 @item @code{postgresql}
19629 PostgreSQL package to use for the service.
19630
19631 @item @code{port} (default: @code{5432})
19632 Port on which PostgreSQL should listen.
19633
19634 @item @code{locale} (default: @code{"en_US.utf8"})
19635 Locale to use as the default when creating the database cluster.
19636
19637 @item @code{config-file} (default: @code{(postgresql-config-file)})
19638 The configuration file to use when running PostgreSQL@. The default
19639 behaviour uses the postgresql-config-file record with the default values
19640 for the fields.
19641
19642 @item @code{log-directory} (default: @code{"/var/log/postgresql"})
19643 The directory where @command{pg_ctl} output will be written in a file
19644 named @code{"pg_ctl.log"}. This file can be useful to debug PostgreSQL
19645 configuration errors for instance.
19646
19647 @item @code{data-directory} (default: @code{"/var/lib/postgresql/data"})
19648 Directory in which to store the data.
19649
19650 @item @code{extension-packages} (default: @code{'()})
19651 @cindex postgresql extension-packages
19652 Additional extensions are loaded from packages listed in
19653 @var{extension-packages}. Extensions are available at runtime. For instance,
19654 to create a geographic database using the @code{postgis} extension, a user can
19655 configure the postgresql-service as in this example:
19656
19657 @cindex postgis
19658 @lisp
19659 (use-package-modules databases geo)
19660
19661 (operating-system
19662 ...
19663 ;; postgresql is required to run `psql' but postgis is not required for
19664 ;; proper operation.
19665 (packages (cons* postgresql %base-packages))
19666 (services
19667 (cons*
19668 (service postgresql-service-type
19669 (postgresql-configuration
19670 (postgresql postgresql-10)
19671 (extension-packages (list postgis))))
19672 %base-services)))
19673 @end lisp
19674
19675 Then the extension becomes visible and you can initialise an empty geographic
19676 database in this way:
19677
19678 @example
19679 psql -U postgres
19680 > create database postgistest;
19681 > \connect postgistest;
19682 > create extension postgis;
19683 > create extension postgis_topology;
19684 @end example
19685
19686 There is no need to add this field for contrib extensions such as hstore or
19687 dblink as they are already loadable by postgresql. This field is only
19688 required to add extensions provided by other packages.
19689
19690 @end table
19691 @end deftp
19692
19693 @deftp {Data Type} postgresql-config-file
19694 Data type representing the PostgreSQL configuration file. As shown in
19695 the following example, this can be used to customize the configuration
19696 of PostgreSQL@. Note that you can use any G-expression or filename in
19697 place of this record, if you already have a configuration file you'd
19698 like to use for example.
19699
19700 @lisp
19701 (service postgresql-service-type
19702 (postgresql-configuration
19703 (config-file
19704 (postgresql-config-file
19705 (log-destination "stderr")
19706 (hba-file
19707 (plain-file "pg_hba.conf"
19708 "
19709 local all all trust
19710 host all all 127.0.0.1/32 md5
19711 host all all ::1/128 md5"))
19712 (extra-config
19713 '(("session_preload_libraries" "auto_explain")
19714 ("random_page_cost" 2)
19715 ("auto_explain.log_min_duration" "100 ms")
19716 ("work_mem" "500 MB")
19717 ("logging_collector" #t)
19718 ("log_directory" "/var/log/postgresql")))))))
19719 @end lisp
19720
19721 @table @asis
19722 @item @code{log-destination} (default: @code{"syslog"})
19723 The logging method to use for PostgreSQL@. Multiple values are accepted,
19724 separated by commas.
19725
19726 @item @code{hba-file} (default: @code{%default-postgres-hba})
19727 Filename or G-expression for the host-based authentication
19728 configuration.
19729
19730 @item @code{ident-file} (default: @code{%default-postgres-ident})
19731 Filename or G-expression for the user name mapping configuration.
19732
19733 @item @code{socket-directory} (default: @code{"/var/run/postgresql"})
19734 Specifies the directory of the Unix-domain socket(s) on which PostgreSQL
19735 is to listen for connections from client applications. If set to
19736 @code{#false} PostgreSQL does not listen on any Unix-domain sockets, in
19737 which case only TCP/IP sockets can be used to connect to the server.
19738
19739 @item @code{extra-config} (default: @code{'()})
19740 List of additional keys and values to include in the PostgreSQL config
19741 file. Each entry in the list should be a list where the first element
19742 is the key, and the remaining elements are the values.
19743
19744 The values can be numbers, booleans or strings and will be mapped to
19745 PostgreSQL parameters types @code{Boolean}, @code{String},
19746 @code{Numeric}, @code{Numeric with Unit} and @code{Enumerated} described
19747 @uref{https://www.postgresql.org/docs/current/config-setting.html,
19748 here}.
19749
19750 @end table
19751 @end deftp
19752
19753 @deffn {Scheme Variable} postgresql-role-service-type
19754 This service allows to create PostgreSQL roles and databases after
19755 PostgreSQL service start. Here is an example of its use.
19756
19757 @lisp
19758 (service postgresql-role-service-type
19759 (postgresql-role-configuration
19760 (roles
19761 (list (postgresql-role
19762 (name "test")
19763 (create-database? #t))))))
19764 @end lisp
19765
19766 This service can be extended with extra roles, as in this
19767 example:
19768
19769 @lisp
19770 (service-extension postgresql-role-service-type
19771 (const (postgresql-role
19772 (name "alice")
19773 (create-database? #t))))
19774 @end lisp
19775 @end deffn
19776
19777 @deftp {Data Type} postgresql-role
19778 PostgreSQL manages database access permissions using the concept of
19779 roles. A role can be thought of as either a database user, or a group
19780 of database users, depending on how the role is set up. Roles can own
19781 database objects (for example, tables) and can assign privileges on
19782 those objects to other roles to control who has access to which objects.
19783
19784 @table @asis
19785 @item @code{name}
19786 The role name.
19787
19788 @item @code{permissions} (default: @code{'(createdb login)})
19789 The role permissions list. Supported permissions are @code{bypassrls},
19790 @code{createdb}, @code{createrole}, @code{login}, @code{replication} and
19791 @code{superuser}.
19792
19793 @item @code{create-database?} (default: @code{#f})
19794 Whether to create a database with the same name as the role.
19795
19796 @end table
19797 @end deftp
19798
19799 @deftp {Data Type} postgresql-role-configuration
19800 Data type representing the configuration of
19801 @var{postgresql-role-service-type}.
19802
19803 @table @asis
19804 @item @code{host} (default: @code{"/var/run/postgresql"})
19805 The PostgreSQL host to connect to.
19806
19807 @item @code{log} (default: @code{"/var/log/postgresql_roles.log"})
19808 File name of the log file.
19809
19810 @item @code{roles} (default: @code{'()})
19811 The initial PostgreSQL roles to create.
19812 @end table
19813 @end deftp
19814
19815 @subsubheading MariaDB/MySQL
19816
19817 @defvr {Scheme Variable} mysql-service-type
19818 This is the service type for a MySQL or MariaDB database server. Its value
19819 is a @code{mysql-configuration} object that specifies which package to use,
19820 as well as various settings for the @command{mysqld} daemon.
19821 @end defvr
19822
19823 @deftp {Data Type} mysql-configuration
19824 Data type representing the configuration of @var{mysql-service-type}.
19825
19826 @table @asis
19827 @item @code{mysql} (default: @var{mariadb})
19828 Package object of the MySQL database server, can be either @var{mariadb}
19829 or @var{mysql}.
19830
19831 For MySQL, a temporary root password will be displayed at activation time.
19832 For MariaDB, the root password is empty.
19833
19834 @item @code{bind-address} (default: @code{"127.0.0.1"})
19835 The IP on which to listen for network connections. Use @code{"0.0.0.0"}
19836 to bind to all available network interfaces.
19837
19838 @item @code{port} (default: @code{3306})
19839 TCP port on which the database server listens for incoming connections.
19840
19841 @item @code{socket} (default: @code{"/run/mysqld/mysqld.sock"})
19842 Socket file to use for local (non-network) connections.
19843
19844 @item @code{extra-content} (default: @code{""})
19845 Additional settings for the @file{my.cnf} configuration file.
19846
19847 @item @code{auto-upgrade?} (default: @code{#t})
19848 Whether to automatically run @command{mysql_upgrade} after starting the
19849 service. This is necessary to upgrade the @dfn{system schema} after
19850 ``major'' updates (such as switching from MariaDB 10.4 to 10.5), but can
19851 be disabled if you would rather do that manually.
19852
19853 @end table
19854 @end deftp
19855
19856 @subsubheading Memcached
19857
19858 @defvr {Scheme Variable} memcached-service-type
19859 This is the service type for the @uref{https://memcached.org/,
19860 Memcached} service, which provides a distributed in memory cache. The
19861 value for the service type is a @code{memcached-configuration} object.
19862 @end defvr
19863
19864 @lisp
19865 (service memcached-service-type)
19866 @end lisp
19867
19868 @deftp {Data Type} memcached-configuration
19869 Data type representing the configuration of memcached.
19870
19871 @table @asis
19872 @item @code{memcached} (default: @code{memcached})
19873 The Memcached package to use.
19874
19875 @item @code{interfaces} (default: @code{'("0.0.0.0")})
19876 Network interfaces on which to listen.
19877
19878 @item @code{tcp-port} (default: @code{11211})
19879 Port on which to accept connections.
19880
19881 @item @code{udp-port} (default: @code{11211})
19882 Port on which to accept UDP connections on, a value of 0 will disable
19883 listening on a UDP socket.
19884
19885 @item @code{additional-options} (default: @code{'()})
19886 Additional command line options to pass to @code{memcached}.
19887 @end table
19888 @end deftp
19889
19890 @subsubheading Redis
19891
19892 @defvr {Scheme Variable} redis-service-type
19893 This is the service type for the @uref{https://redis.io/, Redis}
19894 key/value store, whose value is a @code{redis-configuration} object.
19895 @end defvr
19896
19897 @deftp {Data Type} redis-configuration
19898 Data type representing the configuration of redis.
19899
19900 @table @asis
19901 @item @code{redis} (default: @code{redis})
19902 The Redis package to use.
19903
19904 @item @code{bind} (default: @code{"127.0.0.1"})
19905 Network interface on which to listen.
19906
19907 @item @code{port} (default: @code{6379})
19908 Port on which to accept connections on, a value of 0 will disable
19909 listening on a TCP socket.
19910
19911 @item @code{working-directory} (default: @code{"/var/lib/redis"})
19912 Directory in which to store the database and related files.
19913 @end table
19914 @end deftp
19915
19916 @node Mail Services
19917 @subsection Mail Services
19918
19919 @cindex mail
19920 @cindex email
19921 The @code{(gnu services mail)} module provides Guix service definitions
19922 for email services: IMAP, POP3, and LMTP servers, as well as mail
19923 transport agents (MTAs). Lots of acronyms! These services are detailed
19924 in the subsections below.
19925
19926 @subsubheading Dovecot Service
19927
19928 @deffn {Scheme Procedure} dovecot-service [#:config (dovecot-configuration)]
19929 Return a service that runs the Dovecot IMAP/POP3/LMTP mail server.
19930 @end deffn
19931
19932 By default, Dovecot does not need much configuration; the default
19933 configuration object created by @code{(dovecot-configuration)} will
19934 suffice if your mail is delivered to @code{~/Maildir}. A self-signed
19935 certificate will be generated for TLS-protected connections, though
19936 Dovecot will also listen on cleartext ports by default. There are a
19937 number of options, though, which mail administrators might need to change,
19938 and as is the case with other services, Guix allows the system
19939 administrator to specify these parameters via a uniform Scheme interface.
19940
19941 For example, to specify that mail is located at @code{maildir~/.mail},
19942 one would instantiate the Dovecot service like this:
19943
19944 @lisp
19945 (dovecot-service #:config
19946 (dovecot-configuration
19947 (mail-location "maildir:~/.mail")))
19948 @end lisp
19949
19950 The available configuration parameters follow. Each parameter
19951 definition is preceded by its type; for example, @samp{string-list foo}
19952 indicates that the @code{foo} parameter should be specified as a list of
19953 strings. There is also a way to specify the configuration as a string,
19954 if you have an old @code{dovecot.conf} file that you want to port over
19955 from some other system; see the end for more details.
19956
19957 @c The following documentation was initially generated by
19958 @c (generate-documentation) in (gnu services mail). Manually maintained
19959 @c documentation is better, so we shouldn't hesitate to edit below as
19960 @c needed. However if the change you want to make to this documentation
19961 @c can be done in an automated way, it's probably easier to change
19962 @c (generate-documentation) than to make it below and have to deal with
19963 @c the churn as dovecot updates.
19964
19965 Available @code{dovecot-configuration} fields are:
19966
19967 @deftypevr {@code{dovecot-configuration} parameter} package dovecot
19968 The dovecot package.
19969 @end deftypevr
19970
19971 @deftypevr {@code{dovecot-configuration} parameter} comma-separated-string-list listen
19972 A list of IPs or hosts where to listen for connections. @samp{*}
19973 listens on all IPv4 interfaces, @samp{::} listens on all IPv6
19974 interfaces. If you want to specify non-default ports or anything more
19975 complex, customize the address and port fields of the
19976 @samp{inet-listener} of the specific services you are interested in.
19977 @end deftypevr
19978
19979 @deftypevr {@code{dovecot-configuration} parameter} protocol-configuration-list protocols
19980 List of protocols we want to serve. Available protocols include
19981 @samp{imap}, @samp{pop3}, and @samp{lmtp}.
19982
19983 Available @code{protocol-configuration} fields are:
19984
19985 @deftypevr {@code{protocol-configuration} parameter} string name
19986 The name of the protocol.
19987 @end deftypevr
19988
19989 @deftypevr {@code{protocol-configuration} parameter} string auth-socket-path
19990 UNIX socket path to the master authentication server to find users.
19991 This is used by imap (for shared users) and lda.
19992 It defaults to @samp{"/var/run/dovecot/auth-userdb"}.
19993 @end deftypevr
19994
19995 @deftypevr {@code{protocol-configuration} parameter} space-separated-string-list mail-plugins
19996 Space separated list of plugins to load.
19997 @end deftypevr
19998
19999 @deftypevr {@code{protocol-configuration} parameter} non-negative-integer mail-max-userip-connections
20000 Maximum number of IMAP connections allowed for a user from each IP
20001 address. NOTE: The username is compared case-sensitively.
20002 Defaults to @samp{10}.
20003 @end deftypevr
20004
20005 @end deftypevr
20006
20007 @deftypevr {@code{dovecot-configuration} parameter} service-configuration-list services
20008 List of services to enable. Available services include @samp{imap},
20009 @samp{imap-login}, @samp{pop3}, @samp{pop3-login}, @samp{auth}, and
20010 @samp{lmtp}.
20011
20012 Available @code{service-configuration} fields are:
20013
20014 @deftypevr {@code{service-configuration} parameter} string kind
20015 The service kind. Valid values include @code{director},
20016 @code{imap-login}, @code{pop3-login}, @code{lmtp}, @code{imap},
20017 @code{pop3}, @code{auth}, @code{auth-worker}, @code{dict},
20018 @code{tcpwrap}, @code{quota-warning}, or anything else.
20019 @end deftypevr
20020
20021 @deftypevr {@code{service-configuration} parameter} listener-configuration-list listeners
20022 Listeners for the service. A listener is either a
20023 @code{unix-listener-configuration}, a @code{fifo-listener-configuration}, or
20024 an @code{inet-listener-configuration}.
20025 Defaults to @samp{()}.
20026
20027 Available @code{unix-listener-configuration} fields are:
20028
20029 @deftypevr {@code{unix-listener-configuration} parameter} string path
20030 Path to the file, relative to @code{base-dir} field. This is also used as
20031 the section name.
20032 @end deftypevr
20033
20034 @deftypevr {@code{unix-listener-configuration} parameter} string mode
20035 The access mode for the socket.
20036 Defaults to @samp{"0600"}.
20037 @end deftypevr
20038
20039 @deftypevr {@code{unix-listener-configuration} parameter} string user
20040 The user to own the socket.
20041 Defaults to @samp{""}.
20042 @end deftypevr
20043
20044 @deftypevr {@code{unix-listener-configuration} parameter} string group
20045 The group to own the socket.
20046 Defaults to @samp{""}.
20047 @end deftypevr
20048
20049
20050 Available @code{fifo-listener-configuration} fields are:
20051
20052 @deftypevr {@code{fifo-listener-configuration} parameter} string path
20053 Path to the file, relative to @code{base-dir} field. This is also used as
20054 the section name.
20055 @end deftypevr
20056
20057 @deftypevr {@code{fifo-listener-configuration} parameter} string mode
20058 The access mode for the socket.
20059 Defaults to @samp{"0600"}.
20060 @end deftypevr
20061
20062 @deftypevr {@code{fifo-listener-configuration} parameter} string user
20063 The user to own the socket.
20064 Defaults to @samp{""}.
20065 @end deftypevr
20066
20067 @deftypevr {@code{fifo-listener-configuration} parameter} string group
20068 The group to own the socket.
20069 Defaults to @samp{""}.
20070 @end deftypevr
20071
20072
20073 Available @code{inet-listener-configuration} fields are:
20074
20075 @deftypevr {@code{inet-listener-configuration} parameter} string protocol
20076 The protocol to listen for.
20077 @end deftypevr
20078
20079 @deftypevr {@code{inet-listener-configuration} parameter} string address
20080 The address on which to listen, or empty for all addresses.
20081 Defaults to @samp{""}.
20082 @end deftypevr
20083
20084 @deftypevr {@code{inet-listener-configuration} parameter} non-negative-integer port
20085 The port on which to listen.
20086 @end deftypevr
20087
20088 @deftypevr {@code{inet-listener-configuration} parameter} boolean ssl?
20089 Whether to use SSL for this service; @samp{yes}, @samp{no}, or
20090 @samp{required}.
20091 Defaults to @samp{#t}.
20092 @end deftypevr
20093
20094 @end deftypevr
20095
20096 @deftypevr {@code{service-configuration} parameter} non-negative-integer client-limit
20097 Maximum number of simultaneous client connections per process. Once
20098 this number of connections is received, the next incoming connection
20099 will prompt Dovecot to spawn another process. If set to 0,
20100 @code{default-client-limit} is used instead.
20101
20102 Defaults to @samp{0}.
20103
20104 @end deftypevr
20105
20106 @deftypevr {@code{service-configuration} parameter} non-negative-integer service-count
20107 Number of connections to handle before starting a new process.
20108 Typically the only useful values are 0 (unlimited) or 1. 1 is more
20109 secure, but 0 is faster. <doc/wiki/LoginProcess.txt>.
20110 Defaults to @samp{1}.
20111
20112 @end deftypevr
20113
20114 @deftypevr {@code{service-configuration} parameter} non-negative-integer process-limit
20115 Maximum number of processes that can exist for this service. If set to
20116 0, @code{default-process-limit} is used instead.
20117
20118 Defaults to @samp{0}.
20119
20120 @end deftypevr
20121
20122 @deftypevr {@code{service-configuration} parameter} non-negative-integer process-min-avail
20123 Number of processes to always keep waiting for more connections.
20124 Defaults to @samp{0}.
20125 @end deftypevr
20126
20127 @deftypevr {@code{service-configuration} parameter} non-negative-integer vsz-limit
20128 If you set @samp{service-count 0}, you probably need to grow
20129 this.
20130 Defaults to @samp{256000000}.
20131 @end deftypevr
20132
20133 @end deftypevr
20134
20135 @deftypevr {@code{dovecot-configuration} parameter} dict-configuration dict
20136 Dict configuration, as created by the @code{dict-configuration}
20137 constructor.
20138
20139 Available @code{dict-configuration} fields are:
20140
20141 @deftypevr {@code{dict-configuration} parameter} free-form-fields entries
20142 A list of key-value pairs that this dict should hold.
20143 Defaults to @samp{()}.
20144 @end deftypevr
20145
20146 @end deftypevr
20147
20148 @deftypevr {@code{dovecot-configuration} parameter} passdb-configuration-list passdbs
20149 A list of passdb configurations, each one created by the
20150 @code{passdb-configuration} constructor.
20151
20152 Available @code{passdb-configuration} fields are:
20153
20154 @deftypevr {@code{passdb-configuration} parameter} string driver
20155 The driver that the passdb should use. Valid values include
20156 @samp{pam}, @samp{passwd}, @samp{shadow}, @samp{bsdauth}, and
20157 @samp{static}.
20158 Defaults to @samp{"pam"}.
20159 @end deftypevr
20160
20161 @deftypevr {@code{passdb-configuration} parameter} space-separated-string-list args
20162 Space separated list of arguments to the passdb driver.
20163 Defaults to @samp{""}.
20164 @end deftypevr
20165
20166 @end deftypevr
20167
20168 @deftypevr {@code{dovecot-configuration} parameter} userdb-configuration-list userdbs
20169 List of userdb configurations, each one created by the
20170 @code{userdb-configuration} constructor.
20171
20172 Available @code{userdb-configuration} fields are:
20173
20174 @deftypevr {@code{userdb-configuration} parameter} string driver
20175 The driver that the userdb should use. Valid values include
20176 @samp{passwd} and @samp{static}.
20177 Defaults to @samp{"passwd"}.
20178 @end deftypevr
20179
20180 @deftypevr {@code{userdb-configuration} parameter} space-separated-string-list args
20181 Space separated list of arguments to the userdb driver.
20182 Defaults to @samp{""}.
20183 @end deftypevr
20184
20185 @deftypevr {@code{userdb-configuration} parameter} free-form-args override-fields
20186 Override fields from passwd.
20187 Defaults to @samp{()}.
20188 @end deftypevr
20189
20190 @end deftypevr
20191
20192 @deftypevr {@code{dovecot-configuration} parameter} plugin-configuration plugin-configuration
20193 Plug-in configuration, created by the @code{plugin-configuration}
20194 constructor.
20195 @end deftypevr
20196
20197 @deftypevr {@code{dovecot-configuration} parameter} list-of-namespace-configuration namespaces
20198 List of namespaces. Each item in the list is created by the
20199 @code{namespace-configuration} constructor.
20200
20201 Available @code{namespace-configuration} fields are:
20202
20203 @deftypevr {@code{namespace-configuration} parameter} string name
20204 Name for this namespace.
20205 @end deftypevr
20206
20207 @deftypevr {@code{namespace-configuration} parameter} string type
20208 Namespace type: @samp{private}, @samp{shared} or @samp{public}.
20209 Defaults to @samp{"private"}.
20210 @end deftypevr
20211
20212 @deftypevr {@code{namespace-configuration} parameter} string separator
20213 Hierarchy separator to use. You should use the same separator for
20214 all namespaces or some clients get confused. @samp{/} is usually a good
20215 one. The default however depends on the underlying mail storage
20216 format.
20217 Defaults to @samp{""}.
20218 @end deftypevr
20219
20220 @deftypevr {@code{namespace-configuration} parameter} string prefix
20221 Prefix required to access this namespace. This needs to be
20222 different for all namespaces. For example @samp{Public/}.
20223 Defaults to @samp{""}.
20224 @end deftypevr
20225
20226 @deftypevr {@code{namespace-configuration} parameter} string location
20227 Physical location of the mailbox. This is in the same format as
20228 mail_location, which is also the default for it.
20229 Defaults to @samp{""}.
20230 @end deftypevr
20231
20232 @deftypevr {@code{namespace-configuration} parameter} boolean inbox?
20233 There can be only one INBOX, and this setting defines which
20234 namespace has it.
20235 Defaults to @samp{#f}.
20236 @end deftypevr
20237
20238 @deftypevr {@code{namespace-configuration} parameter} boolean hidden?
20239 If namespace is hidden, it's not advertised to clients via NAMESPACE
20240 extension. You'll most likely also want to set @samp{list? #f}. This is mostly
20241 useful when converting from another server with different namespaces
20242 which you want to deprecate but still keep working. For example you can
20243 create hidden namespaces with prefixes @samp{~/mail/}, @samp{~%u/mail/}
20244 and @samp{mail/}.
20245 Defaults to @samp{#f}.
20246 @end deftypevr
20247
20248 @deftypevr {@code{namespace-configuration} parameter} boolean list?
20249 Show the mailboxes under this namespace with the LIST command. This
20250 makes the namespace visible for clients that do not support the NAMESPACE
20251 extension. The special @code{children} value lists child mailboxes, but
20252 hides the namespace prefix.
20253 Defaults to @samp{#t}.
20254 @end deftypevr
20255
20256 @deftypevr {@code{namespace-configuration} parameter} boolean subscriptions?
20257 Namespace handles its own subscriptions. If set to @code{#f}, the
20258 parent namespace handles them. The empty prefix should always have this
20259 as @code{#t}).
20260 Defaults to @samp{#t}.
20261 @end deftypevr
20262
20263 @deftypevr {@code{namespace-configuration} parameter} mailbox-configuration-list mailboxes
20264 List of predefined mailboxes in this namespace.
20265 Defaults to @samp{()}.
20266
20267 Available @code{mailbox-configuration} fields are:
20268
20269 @deftypevr {@code{mailbox-configuration} parameter} string name
20270 Name for this mailbox.
20271 @end deftypevr
20272
20273 @deftypevr {@code{mailbox-configuration} parameter} string auto
20274 @samp{create} will automatically create this mailbox.
20275 @samp{subscribe} will both create and subscribe to the mailbox.
20276 Defaults to @samp{"no"}.
20277 @end deftypevr
20278
20279 @deftypevr {@code{mailbox-configuration} parameter} space-separated-string-list special-use
20280 List of IMAP @code{SPECIAL-USE} attributes as specified by RFC 6154.
20281 Valid values are @code{\All}, @code{\Archive}, @code{\Drafts},
20282 @code{\Flagged}, @code{\Junk}, @code{\Sent}, and @code{\Trash}.
20283 Defaults to @samp{()}.
20284 @end deftypevr
20285
20286 @end deftypevr
20287
20288 @end deftypevr
20289
20290 @deftypevr {@code{dovecot-configuration} parameter} file-name base-dir
20291 Base directory where to store runtime data.
20292 Defaults to @samp{"/var/run/dovecot/"}.
20293 @end deftypevr
20294
20295 @deftypevr {@code{dovecot-configuration} parameter} string login-greeting
20296 Greeting message for clients.
20297 Defaults to @samp{"Dovecot ready."}.
20298 @end deftypevr
20299
20300 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-trusted-networks
20301 List of trusted network ranges. Connections from these IPs are
20302 allowed to override their IP addresses and ports (for logging and for
20303 authentication checks). @samp{disable-plaintext-auth} is also ignored
20304 for these networks. Typically you would specify your IMAP proxy servers
20305 here.
20306 Defaults to @samp{()}.
20307 @end deftypevr
20308
20309 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-access-sockets
20310 List of login access check sockets (e.g.@: tcpwrap).
20311 Defaults to @samp{()}.
20312 @end deftypevr
20313
20314 @deftypevr {@code{dovecot-configuration} parameter} boolean verbose-proctitle?
20315 Show more verbose process titles (in ps). Currently shows user name
20316 and IP address. Useful for seeing who is actually using the IMAP
20317 processes (e.g.@: shared mailboxes or if the same uid is used for multiple
20318 accounts).
20319 Defaults to @samp{#f}.
20320 @end deftypevr
20321
20322 @deftypevr {@code{dovecot-configuration} parameter} boolean shutdown-clients?
20323 Should all processes be killed when Dovecot master process shuts down.
20324 Setting this to @code{#f} means that Dovecot can be upgraded without
20325 forcing existing client connections to close (although that could also
20326 be a problem if the upgrade is e.g.@: due to a security fix).
20327 Defaults to @samp{#t}.
20328 @end deftypevr
20329
20330 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer doveadm-worker-count
20331 If non-zero, run mail commands via this many connections to doveadm
20332 server, instead of running them directly in the same process.
20333 Defaults to @samp{0}.
20334 @end deftypevr
20335
20336 @deftypevr {@code{dovecot-configuration} parameter} string doveadm-socket-path
20337 UNIX socket or host:port used for connecting to doveadm server.
20338 Defaults to @samp{"doveadm-server"}.
20339 @end deftypevr
20340
20341 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list import-environment
20342 List of environment variables that are preserved on Dovecot startup
20343 and passed down to all of its child processes. You can also give
20344 key=value pairs to always set specific settings.
20345 @end deftypevr
20346
20347 @deftypevr {@code{dovecot-configuration} parameter} boolean disable-plaintext-auth?
20348 Disable LOGIN command and all other plaintext authentications unless
20349 SSL/TLS is used (LOGINDISABLED capability). Note that if the remote IP
20350 matches the local IP (i.e.@: you're connecting from the same computer),
20351 the connection is considered secure and plaintext authentication is
20352 allowed. See also ssl=required setting.
20353 Defaults to @samp{#t}.
20354 @end deftypevr
20355
20356 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer auth-cache-size
20357 Authentication cache size (e.g.@: @samp{#e10e6}). 0 means it's disabled.
20358 Note that bsdauth, PAM and vpopmail require @samp{cache-key} to be set
20359 for caching to be used.
20360 Defaults to @samp{0}.
20361 @end deftypevr
20362
20363 @deftypevr {@code{dovecot-configuration} parameter} string auth-cache-ttl
20364 Time to live for cached data. After TTL expires the cached record
20365 is no longer used, *except* if the main database lookup returns internal
20366 failure. We also try to handle password changes automatically: If
20367 user's previous authentication was successful, but this one wasn't, the
20368 cache isn't used. For now this works only with plaintext
20369 authentication.
20370 Defaults to @samp{"1 hour"}.
20371 @end deftypevr
20372
20373 @deftypevr {@code{dovecot-configuration} parameter} string auth-cache-negative-ttl
20374 TTL for negative hits (user not found, password mismatch).
20375 0 disables caching them completely.
20376 Defaults to @samp{"1 hour"}.
20377 @end deftypevr
20378
20379 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list auth-realms
20380 List of realms for SASL authentication mechanisms that need them.
20381 You can leave it empty if you don't want to support multiple realms.
20382 Many clients simply use the first one listed here, so keep the default
20383 realm first.
20384 Defaults to @samp{()}.
20385 @end deftypevr
20386
20387 @deftypevr {@code{dovecot-configuration} parameter} string auth-default-realm
20388 Default realm/domain to use if none was specified. This is used for
20389 both SASL realms and appending @@domain to username in plaintext
20390 logins.
20391 Defaults to @samp{""}.
20392 @end deftypevr
20393
20394 @deftypevr {@code{dovecot-configuration} parameter} string auth-username-chars
20395 List of allowed characters in username. If the user-given username
20396 contains a character not listed in here, the login automatically fails.
20397 This is just an extra check to make sure user can't exploit any
20398 potential quote escaping vulnerabilities with SQL/LDAP databases. If
20399 you want to allow all characters, set this value to empty.
20400 Defaults to @samp{"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@@"}.
20401 @end deftypevr
20402
20403 @deftypevr {@code{dovecot-configuration} parameter} string auth-username-translation
20404 Username character translations before it's looked up from
20405 databases. The value contains series of from -> to characters. For
20406 example @samp{#@@/@@} means that @samp{#} and @samp{/} characters are
20407 translated to @samp{@@}.
20408 Defaults to @samp{""}.
20409 @end deftypevr
20410
20411 @deftypevr {@code{dovecot-configuration} parameter} string auth-username-format
20412 Username formatting before it's looked up from databases. You can
20413 use the standard variables here, e.g.@: %Lu would lowercase the username,
20414 %n would drop away the domain if it was given, or @samp{%n-AT-%d} would
20415 change the @samp{@@} into @samp{-AT-}. This translation is done after
20416 @samp{auth-username-translation} changes.
20417 Defaults to @samp{"%Lu"}.
20418 @end deftypevr
20419
20420 @deftypevr {@code{dovecot-configuration} parameter} string auth-master-user-separator
20421 If you want to allow master users to log in by specifying the master
20422 username within the normal username string (i.e.@: not using SASL
20423 mechanism's support for it), you can specify the separator character
20424 here. The format is then <username><separator><master username>.
20425 UW-IMAP uses @samp{*} as the separator, so that could be a good
20426 choice.
20427 Defaults to @samp{""}.
20428 @end deftypevr
20429
20430 @deftypevr {@code{dovecot-configuration} parameter} string auth-anonymous-username
20431 Username to use for users logging in with ANONYMOUS SASL
20432 mechanism.
20433 Defaults to @samp{"anonymous"}.
20434 @end deftypevr
20435
20436 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer auth-worker-max-count
20437 Maximum number of dovecot-auth worker processes. They're used to
20438 execute blocking passdb and userdb queries (e.g.@: MySQL and PAM).
20439 They're automatically created and destroyed as needed.
20440 Defaults to @samp{30}.
20441 @end deftypevr
20442
20443 @deftypevr {@code{dovecot-configuration} parameter} string auth-gssapi-hostname
20444 Host name to use in GSSAPI principal names. The default is to use
20445 the name returned by gethostname(). Use @samp{$ALL} (with quotes) to
20446 allow all keytab entries.
20447 Defaults to @samp{""}.
20448 @end deftypevr
20449
20450 @deftypevr {@code{dovecot-configuration} parameter} string auth-krb5-keytab
20451 Kerberos keytab to use for the GSSAPI mechanism. Will use the
20452 system default (usually @file{/etc/krb5.keytab}) if not specified. You may
20453 need to change the auth service to run as root to be able to read this
20454 file.
20455 Defaults to @samp{""}.
20456 @end deftypevr
20457
20458 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-use-winbind?
20459 Do NTLM and GSS-SPNEGO authentication using Samba's winbind daemon
20460 and @samp{ntlm-auth} helper.
20461 <doc/wiki/Authentication/Mechanisms/Winbind.txt>.
20462 Defaults to @samp{#f}.
20463 @end deftypevr
20464
20465 @deftypevr {@code{dovecot-configuration} parameter} file-name auth-winbind-helper-path
20466 Path for Samba's @samp{ntlm-auth} helper binary.
20467 Defaults to @samp{"/usr/bin/ntlm_auth"}.
20468 @end deftypevr
20469
20470 @deftypevr {@code{dovecot-configuration} parameter} string auth-failure-delay
20471 Time to delay before replying to failed authentications.
20472 Defaults to @samp{"2 secs"}.
20473 @end deftypevr
20474
20475 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-ssl-require-client-cert?
20476 Require a valid SSL client certificate or the authentication
20477 fails.
20478 Defaults to @samp{#f}.
20479 @end deftypevr
20480
20481 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-ssl-username-from-cert?
20482 Take the username from client's SSL certificate, using
20483 @code{X509_NAME_get_text_by_NID()} which returns the subject's DN's
20484 CommonName.
20485 Defaults to @samp{#f}.
20486 @end deftypevr
20487
20488 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list auth-mechanisms
20489 List of wanted authentication mechanisms. Supported mechanisms are:
20490 @samp{plain}, @samp{login}, @samp{digest-md5}, @samp{cram-md5},
20491 @samp{ntlm}, @samp{rpa}, @samp{apop}, @samp{anonymous}, @samp{gssapi},
20492 @samp{otp}, @samp{skey}, and @samp{gss-spnego}. NOTE: See also
20493 @samp{disable-plaintext-auth} setting.
20494 @end deftypevr
20495
20496 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list director-servers
20497 List of IPs or hostnames to all director servers, including ourself.
20498 Ports can be specified as ip:port. The default port is the same as what
20499 director service's @samp{inet-listener} is using.
20500 Defaults to @samp{()}.
20501 @end deftypevr
20502
20503 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list director-mail-servers
20504 List of IPs or hostnames to all backend mail servers. Ranges are
20505 allowed too, like 10.0.0.10-10.0.0.30.
20506 Defaults to @samp{()}.
20507 @end deftypevr
20508
20509 @deftypevr {@code{dovecot-configuration} parameter} string director-user-expire
20510 How long to redirect users to a specific server after it no longer
20511 has any connections.
20512 Defaults to @samp{"15 min"}.
20513 @end deftypevr
20514
20515 @deftypevr {@code{dovecot-configuration} parameter} string director-username-hash
20516 How the username is translated before being hashed. Useful values
20517 include %Ln if user can log in with or without @@domain, %Ld if mailboxes
20518 are shared within domain.
20519 Defaults to @samp{"%Lu"}.
20520 @end deftypevr
20521
20522 @deftypevr {@code{dovecot-configuration} parameter} string log-path
20523 Log file to use for error messages. @samp{syslog} logs to syslog,
20524 @samp{/dev/stderr} logs to stderr.
20525 Defaults to @samp{"syslog"}.
20526 @end deftypevr
20527
20528 @deftypevr {@code{dovecot-configuration} parameter} string info-log-path
20529 Log file to use for informational messages. Defaults to
20530 @samp{log-path}.
20531 Defaults to @samp{""}.
20532 @end deftypevr
20533
20534 @deftypevr {@code{dovecot-configuration} parameter} string debug-log-path
20535 Log file to use for debug messages. Defaults to
20536 @samp{info-log-path}.
20537 Defaults to @samp{""}.
20538 @end deftypevr
20539
20540 @deftypevr {@code{dovecot-configuration} parameter} string syslog-facility
20541 Syslog facility to use if you're logging to syslog. Usually if you
20542 don't want to use @samp{mail}, you'll use local0..local7. Also other
20543 standard facilities are supported.
20544 Defaults to @samp{"mail"}.
20545 @end deftypevr
20546
20547 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-verbose?
20548 Log unsuccessful authentication attempts and the reasons why they
20549 failed.
20550 Defaults to @samp{#f}.
20551 @end deftypevr
20552
20553 @deftypevr {@code{dovecot-configuration} parameter} string auth-verbose-passwords
20554 In case of password mismatches, log the attempted password. Valid
20555 values are no, plain and sha1. sha1 can be useful for detecting brute
20556 force password attempts vs. user simply trying the same password over
20557 and over again. You can also truncate the value to n chars by appending
20558 ":n" (e.g.@: sha1:6).
20559 Defaults to @samp{"no"}.
20560 @end deftypevr
20561
20562 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-debug?
20563 Even more verbose logging for debugging purposes. Shows for example
20564 SQL queries.
20565 Defaults to @samp{#f}.
20566 @end deftypevr
20567
20568 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-debug-passwords?
20569 In case of password mismatches, log the passwords and used scheme so
20570 the problem can be debugged. Enabling this also enables
20571 @samp{auth-debug}.
20572 Defaults to @samp{#f}.
20573 @end deftypevr
20574
20575 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-debug?
20576 Enable mail process debugging. This can help you figure out why
20577 Dovecot isn't finding your mails.
20578 Defaults to @samp{#f}.
20579 @end deftypevr
20580
20581 @deftypevr {@code{dovecot-configuration} parameter} boolean verbose-ssl?
20582 Show protocol level SSL errors.
20583 Defaults to @samp{#f}.
20584 @end deftypevr
20585
20586 @deftypevr {@code{dovecot-configuration} parameter} string log-timestamp
20587 Prefix for each line written to log file. % codes are in
20588 strftime(3) format.
20589 Defaults to @samp{"\"%b %d %H:%M:%S \""}.
20590 @end deftypevr
20591
20592 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-log-format-elements
20593 List of elements we want to log. The elements which have a
20594 non-empty variable value are joined together to form a comma-separated
20595 string.
20596 @end deftypevr
20597
20598 @deftypevr {@code{dovecot-configuration} parameter} string login-log-format
20599 Login log format. %s contains @samp{login-log-format-elements}
20600 string, %$ contains the data we want to log.
20601 Defaults to @samp{"%$: %s"}.
20602 @end deftypevr
20603
20604 @deftypevr {@code{dovecot-configuration} parameter} string mail-log-prefix
20605 Log prefix for mail processes. See doc/wiki/Variables.txt for list
20606 of possible variables you can use.
20607 Defaults to @samp{"\"%s(%u)<%@{pid@}><%@{session@}>: \""}.
20608 @end deftypevr
20609
20610 @deftypevr {@code{dovecot-configuration} parameter} string deliver-log-format
20611 Format to use for logging mail deliveries. You can use variables:
20612 @table @code
20613 @item %$
20614 Delivery status message (e.g.@: @samp{saved to INBOX})
20615 @item %m
20616 Message-ID
20617 @item %s
20618 Subject
20619 @item %f
20620 From address
20621 @item %p
20622 Physical size
20623 @item %w
20624 Virtual size.
20625 @end table
20626 Defaults to @samp{"msgid=%m: %$"}.
20627 @end deftypevr
20628
20629 @deftypevr {@code{dovecot-configuration} parameter} string mail-location
20630 Location for users' mailboxes. The default is empty, which means
20631 that Dovecot tries to find the mailboxes automatically. This won't work
20632 if the user doesn't yet have any mail, so you should explicitly tell
20633 Dovecot the full location.
20634
20635 If you're using mbox, giving a path to the INBOX
20636 file (e.g.@: @file{/var/mail/%u}) isn't enough. You'll also need to tell Dovecot
20637 where the other mailboxes are kept. This is called the @emph{root mail
20638 directory}, and it must be the first path given in the
20639 @samp{mail-location} setting.
20640
20641 There are a few special variables you can use, e.g.:
20642
20643 @table @samp
20644 @item %u
20645 username
20646 @item %n
20647 user part in user@@domain, same as %u if there's no domain
20648 @item %d
20649 domain part in user@@domain, empty if there's no domain
20650 @item %h
20651 home director
20652 @end table
20653
20654 See doc/wiki/Variables.txt for full list. Some examples:
20655 @table @samp
20656 @item maildir:~/Maildir
20657 @item mbox:~/mail:INBOX=/var/mail/%u
20658 @item mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%
20659 @end table
20660 Defaults to @samp{""}.
20661 @end deftypevr
20662
20663 @deftypevr {@code{dovecot-configuration} parameter} string mail-uid
20664 System user and group used to access mails. If you use multiple,
20665 userdb can override these by returning uid or gid fields. You can use
20666 either numbers or names. <doc/wiki/UserIds.txt>.
20667 Defaults to @samp{""}.
20668 @end deftypevr
20669
20670 @deftypevr {@code{dovecot-configuration} parameter} string mail-gid
20671
20672 Defaults to @samp{""}.
20673 @end deftypevr
20674
20675 @deftypevr {@code{dovecot-configuration} parameter} string mail-privileged-group
20676 Group to enable temporarily for privileged operations. Currently
20677 this is used only with INBOX when either its initial creation or
20678 dotlocking fails. Typically this is set to @samp{"mail"} to give access to
20679 @file{/var/mail}.
20680 Defaults to @samp{""}.
20681 @end deftypevr
20682
20683 @deftypevr {@code{dovecot-configuration} parameter} string mail-access-groups
20684 Grant access to these supplementary groups for mail processes.
20685 Typically these are used to set up access to shared mailboxes. Note
20686 that it may be dangerous to set these if users can create symlinks
20687 (e.g.@: if @samp{mail} group is set here, @code{ln -s /var/mail ~/mail/var}
20688 could allow a user to delete others' mailboxes, or @code{ln -s
20689 /secret/shared/box ~/mail/mybox} would allow reading it). Defaults to
20690 @samp{""}.
20691 @end deftypevr
20692
20693 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-full-filesystem-access?
20694 Allow full file system access to clients. There's no access checks
20695 other than what the operating system does for the active UID/GID@. It
20696 works with both maildir and mboxes, allowing you to prefix mailboxes
20697 names with e.g.@: @file{/path/} or @file{~user/}.
20698 Defaults to @samp{#f}.
20699 @end deftypevr
20700
20701 @deftypevr {@code{dovecot-configuration} parameter} boolean mmap-disable?
20702 Don't use @code{mmap()} at all. This is required if you store indexes to
20703 shared file systems (NFS or clustered file system).
20704 Defaults to @samp{#f}.
20705 @end deftypevr
20706
20707 @deftypevr {@code{dovecot-configuration} parameter} boolean dotlock-use-excl?
20708 Rely on @samp{O_EXCL} to work when creating dotlock files. NFS
20709 supports @samp{O_EXCL} since version 3, so this should be safe to use
20710 nowadays by default.
20711 Defaults to @samp{#t}.
20712 @end deftypevr
20713
20714 @deftypevr {@code{dovecot-configuration} parameter} string mail-fsync
20715 When to use fsync() or fdatasync() calls:
20716 @table @code
20717 @item optimized
20718 Whenever necessary to avoid losing important data
20719 @item always
20720 Useful with e.g.@: NFS when @code{write()}s are delayed
20721 @item never
20722 Never use it (best performance, but crashes can lose data).
20723 @end table
20724 Defaults to @samp{"optimized"}.
20725 @end deftypevr
20726
20727 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-nfs-storage?
20728 Mail storage exists in NFS@. Set this to yes to make Dovecot flush
20729 NFS caches whenever needed. If you're using only a single mail server
20730 this isn't needed.
20731 Defaults to @samp{#f}.
20732 @end deftypevr
20733
20734 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-nfs-index?
20735 Mail index files also exist in NFS@. Setting this to yes requires
20736 @samp{mmap-disable? #t} and @samp{fsync-disable? #f}.
20737 Defaults to @samp{#f}.
20738 @end deftypevr
20739
20740 @deftypevr {@code{dovecot-configuration} parameter} string lock-method
20741 Locking method for index files. Alternatives are fcntl, flock and
20742 dotlock. Dotlocking uses some tricks which may create more disk I/O
20743 than other locking methods. NFS users: flock doesn't work, remember to
20744 change @samp{mmap-disable}.
20745 Defaults to @samp{"fcntl"}.
20746 @end deftypevr
20747
20748 @deftypevr {@code{dovecot-configuration} parameter} file-name mail-temp-dir
20749 Directory in which LDA/LMTP temporarily stores incoming mails >128
20750 kB.
20751 Defaults to @samp{"/tmp"}.
20752 @end deftypevr
20753
20754 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer first-valid-uid
20755 Valid UID range for users. This is mostly to make sure that users can't
20756 log in as daemons or other system users. Note that denying root logins is
20757 hardcoded to dovecot binary and can't be done even if @samp{first-valid-uid}
20758 is set to 0.
20759 Defaults to @samp{500}.
20760 @end deftypevr
20761
20762 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer last-valid-uid
20763
20764 Defaults to @samp{0}.
20765 @end deftypevr
20766
20767 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer first-valid-gid
20768 Valid GID range for users. Users having non-valid GID as primary group ID
20769 aren't allowed to log in. If user belongs to supplementary groups with
20770 non-valid GIDs, those groups are not set.
20771 Defaults to @samp{1}.
20772 @end deftypevr
20773
20774 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer last-valid-gid
20775
20776 Defaults to @samp{0}.
20777 @end deftypevr
20778
20779 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-max-keyword-length
20780 Maximum allowed length for mail keyword name. It's only forced when
20781 trying to create new keywords.
20782 Defaults to @samp{50}.
20783 @end deftypevr
20784
20785 @deftypevr {@code{dovecot-configuration} parameter} colon-separated-file-name-list valid-chroot-dirs
20786 List of directories under which chrooting is allowed for mail
20787 processes (i.e.@: @file{/var/mail} will allow chrooting to @file{/var/mail/foo/bar}
20788 too). This setting doesn't affect @samp{login-chroot}
20789 @samp{mail-chroot} or auth chroot settings. If this setting is empty,
20790 @samp{/./} in home dirs are ignored. WARNING: Never add directories here
20791 which local users can modify, that may lead to root exploit. Usually
20792 this should be done only if you don't allow shell access for users.
20793 <doc/wiki/Chrooting.txt>.
20794 Defaults to @samp{()}.
20795 @end deftypevr
20796
20797 @deftypevr {@code{dovecot-configuration} parameter} string mail-chroot
20798 Default chroot directory for mail processes. This can be overridden
20799 for specific users in user database by giving @samp{/./} in user's home
20800 directory (e.g.@: @samp{/home/./user} chroots into @file{/home}). Note that usually
20801 there is no real need to do chrooting, Dovecot doesn't allow users to
20802 access files outside their mail directory anyway. If your home
20803 directories are prefixed with the chroot directory, append @samp{/.} to
20804 @samp{mail-chroot}. <doc/wiki/Chrooting.txt>.
20805 Defaults to @samp{""}.
20806 @end deftypevr
20807
20808 @deftypevr {@code{dovecot-configuration} parameter} file-name auth-socket-path
20809 UNIX socket path to master authentication server to find users.
20810 This is used by imap (for shared users) and lda.
20811 Defaults to @samp{"/var/run/dovecot/auth-userdb"}.
20812 @end deftypevr
20813
20814 @deftypevr {@code{dovecot-configuration} parameter} file-name mail-plugin-dir
20815 Directory where to look up mail plugins.
20816 Defaults to @samp{"/usr/lib/dovecot"}.
20817 @end deftypevr
20818
20819 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mail-plugins
20820 List of plugins to load for all services. Plugins specific to IMAP,
20821 LDA, etc.@: are added to this list in their own .conf files.
20822 Defaults to @samp{()}.
20823 @end deftypevr
20824
20825 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-cache-min-mail-count
20826 The minimum number of mails in a mailbox before updates are done to
20827 cache file. This allows optimizing Dovecot's behavior to do less disk
20828 writes at the cost of more disk reads.
20829 Defaults to @samp{0}.
20830 @end deftypevr
20831
20832 @deftypevr {@code{dovecot-configuration} parameter} string mailbox-idle-check-interval
20833 When IDLE command is running, mailbox is checked once in a while to
20834 see if there are any new mails or other changes. This setting defines
20835 the minimum time to wait between those checks. Dovecot can also use
20836 dnotify, inotify and kqueue to find out immediately when changes
20837 occur.
20838 Defaults to @samp{"30 secs"}.
20839 @end deftypevr
20840
20841 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-save-crlf?
20842 Save mails with CR+LF instead of plain LF@. This makes sending those
20843 mails take less CPU, especially with sendfile() syscall with Linux and
20844 FreeBSD@. But it also creates a bit more disk I/O which may just make it
20845 slower. Also note that if other software reads the mboxes/maildirs,
20846 they may handle the extra CRs wrong and cause problems.
20847 Defaults to @samp{#f}.
20848 @end deftypevr
20849
20850 @deftypevr {@code{dovecot-configuration} parameter} boolean maildir-stat-dirs?
20851 By default LIST command returns all entries in maildir beginning
20852 with a dot. Enabling this option makes Dovecot return only entries
20853 which are directories. This is done by stat()ing each entry, so it
20854 causes more disk I/O.
20855 (For systems setting struct @samp{dirent->d_type} this check is free
20856 and it's done always regardless of this setting).
20857 Defaults to @samp{#f}.
20858 @end deftypevr
20859
20860 @deftypevr {@code{dovecot-configuration} parameter} boolean maildir-copy-with-hardlinks?
20861 When copying a message, do it with hard links whenever possible.
20862 This makes the performance much better, and it's unlikely to have any
20863 side effects.
20864 Defaults to @samp{#t}.
20865 @end deftypevr
20866
20867 @deftypevr {@code{dovecot-configuration} parameter} boolean maildir-very-dirty-syncs?
20868 Assume Dovecot is the only MUA accessing Maildir: Scan cur/
20869 directory only when its mtime changes unexpectedly or when we can't find
20870 the mail otherwise.
20871 Defaults to @samp{#f}.
20872 @end deftypevr
20873
20874 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mbox-read-locks
20875 Which locking methods to use for locking mbox. There are four
20876 available:
20877
20878 @table @code
20879 @item dotlock
20880 Create <mailbox>.lock file. This is the oldest and most NFS-safe
20881 solution. If you want to use /var/mail/ like directory, the users will
20882 need write access to that directory.
20883 @item dotlock-try
20884 Same as dotlock, but if it fails because of permissions or because there
20885 isn't enough disk space, just skip it.
20886 @item fcntl
20887 Use this if possible. Works with NFS too if lockd is used.
20888 @item flock
20889 May not exist in all systems. Doesn't work with NFS.
20890 @item lockf
20891 May not exist in all systems. Doesn't work with NFS.
20892 @end table
20893
20894 You can use multiple locking methods; if you do the order they're declared
20895 in is important to avoid deadlocks if other MTAs/MUAs are using multiple
20896 locking methods as well. Some operating systems don't allow using some of
20897 them simultaneously.
20898 @end deftypevr
20899
20900 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mbox-write-locks
20901
20902 @end deftypevr
20903
20904 @deftypevr {@code{dovecot-configuration} parameter} string mbox-lock-timeout
20905 Maximum time to wait for lock (all of them) before aborting.
20906 Defaults to @samp{"5 mins"}.
20907 @end deftypevr
20908
20909 @deftypevr {@code{dovecot-configuration} parameter} string mbox-dotlock-change-timeout
20910 If dotlock exists but the mailbox isn't modified in any way,
20911 override the lock file after this much time.
20912 Defaults to @samp{"2 mins"}.
20913 @end deftypevr
20914
20915 @deftypevr {@code{dovecot-configuration} parameter} boolean mbox-dirty-syncs?
20916 When mbox changes unexpectedly we have to fully read it to find out
20917 what changed. If the mbox is large this can take a long time. Since
20918 the change is usually just a newly appended mail, it'd be faster to
20919 simply read the new mails. If this setting is enabled, Dovecot does
20920 this but still safely fallbacks to re-reading the whole mbox file
20921 whenever something in mbox isn't how it's expected to be. The only real
20922 downside to this setting is that if some other MUA changes message
20923 flags, Dovecot doesn't notice it immediately. Note that a full sync is
20924 done with SELECT, EXAMINE, EXPUNGE and CHECK commands.
20925 Defaults to @samp{#t}.
20926 @end deftypevr
20927
20928 @deftypevr {@code{dovecot-configuration} parameter} boolean mbox-very-dirty-syncs?
20929 Like @samp{mbox-dirty-syncs}, but don't do full syncs even with SELECT,
20930 EXAMINE, EXPUNGE or CHECK commands. If this is set,
20931 @samp{mbox-dirty-syncs} is ignored.
20932 Defaults to @samp{#f}.
20933 @end deftypevr
20934
20935 @deftypevr {@code{dovecot-configuration} parameter} boolean mbox-lazy-writes?
20936 Delay writing mbox headers until doing a full write sync (EXPUNGE
20937 and CHECK commands and when closing the mailbox). This is especially
20938 useful for POP3 where clients often delete all mails. The downside is
20939 that our changes aren't immediately visible to other MUAs.
20940 Defaults to @samp{#t}.
20941 @end deftypevr
20942
20943 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mbox-min-index-size
20944 If mbox size is smaller than this (e.g.@: 100k), don't write index
20945 files. If an index file already exists it's still read, just not
20946 updated.
20947 Defaults to @samp{0}.
20948 @end deftypevr
20949
20950 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mdbox-rotate-size
20951 Maximum dbox file size until it's rotated.
20952 Defaults to @samp{10000000}.
20953 @end deftypevr
20954
20955 @deftypevr {@code{dovecot-configuration} parameter} string mdbox-rotate-interval
20956 Maximum dbox file age until it's rotated. Typically in days. Day
20957 begins from midnight, so 1d = today, 2d = yesterday, etc. 0 = check
20958 disabled.
20959 Defaults to @samp{"1d"}.
20960 @end deftypevr
20961
20962 @deftypevr {@code{dovecot-configuration} parameter} boolean mdbox-preallocate-space?
20963 When creating new mdbox files, immediately preallocate their size to
20964 @samp{mdbox-rotate-size}. This setting currently works only in Linux
20965 with some file systems (ext4, xfs).
20966 Defaults to @samp{#f}.
20967 @end deftypevr
20968
20969 @deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-dir
20970 sdbox and mdbox support saving mail attachments to external files,
20971 which also allows single instance storage for them. Other backends
20972 don't support this for now.
20973
20974 WARNING: This feature hasn't been tested much yet. Use at your own risk.
20975
20976 Directory root where to store mail attachments. Disabled, if empty.
20977 Defaults to @samp{""}.
20978 @end deftypevr
20979
20980 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-attachment-min-size
20981 Attachments smaller than this aren't saved externally. It's also
20982 possible to write a plugin to disable saving specific attachments
20983 externally.
20984 Defaults to @samp{128000}.
20985 @end deftypevr
20986
20987 @deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-fs
20988 File system backend to use for saving attachments:
20989 @table @code
20990 @item posix
20991 No SiS done by Dovecot (but this might help FS's own deduplication)
20992 @item sis posix
20993 SiS with immediate byte-by-byte comparison during saving
20994 @item sis-queue posix
20995 SiS with delayed comparison and deduplication.
20996 @end table
20997 Defaults to @samp{"sis posix"}.
20998 @end deftypevr
20999
21000 @deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-hash
21001 Hash format to use in attachment filenames. You can add any text and
21002 variables: @code{%@{md4@}}, @code{%@{md5@}}, @code{%@{sha1@}},
21003 @code{%@{sha256@}}, @code{%@{sha512@}}, @code{%@{size@}}. Variables can be
21004 truncated, e.g.@: @code{%@{sha256:80@}} returns only first 80 bits.
21005 Defaults to @samp{"%@{sha1@}"}.
21006 @end deftypevr
21007
21008 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-process-limit
21009
21010 Defaults to @samp{100}.
21011 @end deftypevr
21012
21013 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-client-limit
21014
21015 Defaults to @samp{1000}.
21016 @end deftypevr
21017
21018 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-vsz-limit
21019 Default VSZ (virtual memory size) limit for service processes.
21020 This is mainly intended to catch and kill processes that leak memory
21021 before they eat up everything.
21022 Defaults to @samp{256000000}.
21023 @end deftypevr
21024
21025 @deftypevr {@code{dovecot-configuration} parameter} string default-login-user
21026 Login user is internally used by login processes. This is the most
21027 untrusted user in Dovecot system. It shouldn't have access to anything
21028 at all.
21029 Defaults to @samp{"dovenull"}.
21030 @end deftypevr
21031
21032 @deftypevr {@code{dovecot-configuration} parameter} string default-internal-user
21033 Internal user is used by unprivileged processes. It should be
21034 separate from login user, so that login processes can't disturb other
21035 processes.
21036 Defaults to @samp{"dovecot"}.
21037 @end deftypevr
21038
21039 @deftypevr {@code{dovecot-configuration} parameter} string ssl?
21040 SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>.
21041 Defaults to @samp{"required"}.
21042 @end deftypevr
21043
21044 @deftypevr {@code{dovecot-configuration} parameter} string ssl-cert
21045 PEM encoded X.509 SSL/TLS certificate (public key).
21046 Defaults to @samp{"</etc/dovecot/default.pem"}.
21047 @end deftypevr
21048
21049 @deftypevr {@code{dovecot-configuration} parameter} string ssl-key
21050 PEM encoded SSL/TLS private key. The key is opened before
21051 dropping root privileges, so keep the key file unreadable by anyone but
21052 root.
21053 Defaults to @samp{"</etc/dovecot/private/default.pem"}.
21054 @end deftypevr
21055
21056 @deftypevr {@code{dovecot-configuration} parameter} string ssl-key-password
21057 If key file is password protected, give the password here.
21058 Alternatively give it when starting dovecot with -p parameter. Since
21059 this file is often world-readable, you may want to place this setting
21060 instead to a different.
21061 Defaults to @samp{""}.
21062 @end deftypevr
21063
21064 @deftypevr {@code{dovecot-configuration} parameter} string ssl-ca
21065 PEM encoded trusted certificate authority. Set this only if you
21066 intend to use @samp{ssl-verify-client-cert? #t}. The file should
21067 contain the CA certificate(s) followed by the matching
21068 CRL(s). (e.g.@: @samp{ssl-ca </etc/ssl/certs/ca.pem}).
21069 Defaults to @samp{""}.
21070 @end deftypevr
21071
21072 @deftypevr {@code{dovecot-configuration} parameter} boolean ssl-require-crl?
21073 Require that CRL check succeeds for client certificates.
21074 Defaults to @samp{#t}.
21075 @end deftypevr
21076
21077 @deftypevr {@code{dovecot-configuration} parameter} boolean ssl-verify-client-cert?
21078 Request client to send a certificate. If you also want to require
21079 it, set @samp{auth-ssl-require-client-cert? #t} in auth section.
21080 Defaults to @samp{#f}.
21081 @end deftypevr
21082
21083 @deftypevr {@code{dovecot-configuration} parameter} string ssl-cert-username-field
21084 Which field from certificate to use for username. commonName and
21085 x500UniqueIdentifier are the usual choices. You'll also need to set
21086 @samp{auth-ssl-username-from-cert? #t}.
21087 Defaults to @samp{"commonName"}.
21088 @end deftypevr
21089
21090 @deftypevr {@code{dovecot-configuration} parameter} string ssl-min-protocol
21091 Minimum SSL protocol version to accept.
21092 Defaults to @samp{"TLSv1"}.
21093 @end deftypevr
21094
21095 @deftypevr {@code{dovecot-configuration} parameter} string ssl-cipher-list
21096 SSL ciphers to use.
21097 Defaults to @samp{"ALL:!kRSA:!SRP:!kDHd:!DSS:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!RC4:!ADH:!LOW@@STRENGTH"}.
21098 @end deftypevr
21099
21100 @deftypevr {@code{dovecot-configuration} parameter} string ssl-crypto-device
21101 SSL crypto device to use, for valid values run "openssl engine".
21102 Defaults to @samp{""}.
21103 @end deftypevr
21104
21105 @deftypevr {@code{dovecot-configuration} parameter} string postmaster-address
21106 Address to use when sending rejection mails.
21107 %d expands to recipient domain.
21108 Defaults to @samp{"postmaster@@%d"}.
21109 @end deftypevr
21110
21111 @deftypevr {@code{dovecot-configuration} parameter} string hostname
21112 Hostname to use in various parts of sent mails (e.g.@: in Message-Id)
21113 and in LMTP replies. Default is the system's real hostname@@domain.
21114 Defaults to @samp{""}.
21115 @end deftypevr
21116
21117 @deftypevr {@code{dovecot-configuration} parameter} boolean quota-full-tempfail?
21118 If user is over quota, return with temporary failure instead of
21119 bouncing the mail.
21120 Defaults to @samp{#f}.
21121 @end deftypevr
21122
21123 @deftypevr {@code{dovecot-configuration} parameter} file-name sendmail-path
21124 Binary to use for sending mails.
21125 Defaults to @samp{"/usr/sbin/sendmail"}.
21126 @end deftypevr
21127
21128 @deftypevr {@code{dovecot-configuration} parameter} string submission-host
21129 If non-empty, send mails via this SMTP host[:port] instead of
21130 sendmail.
21131 Defaults to @samp{""}.
21132 @end deftypevr
21133
21134 @deftypevr {@code{dovecot-configuration} parameter} string rejection-subject
21135 Subject: header to use for rejection mails. You can use the same
21136 variables as for @samp{rejection-reason} below.
21137 Defaults to @samp{"Rejected: %s"}.
21138 @end deftypevr
21139
21140 @deftypevr {@code{dovecot-configuration} parameter} string rejection-reason
21141 Human readable error message for rejection mails. You can use
21142 variables:
21143
21144 @table @code
21145 @item %n
21146 CRLF
21147 @item %r
21148 reason
21149 @item %s
21150 original subject
21151 @item %t
21152 recipient
21153 @end table
21154 Defaults to @samp{"Your message to <%t> was automatically rejected:%n%r"}.
21155 @end deftypevr
21156
21157 @deftypevr {@code{dovecot-configuration} parameter} string recipient-delimiter
21158 Delimiter character between local-part and detail in email
21159 address.
21160 Defaults to @samp{"+"}.
21161 @end deftypevr
21162
21163 @deftypevr {@code{dovecot-configuration} parameter} string lda-original-recipient-header
21164 Header where the original recipient address (SMTP's RCPT TO:
21165 address) is taken from if not available elsewhere. With dovecot-lda -a
21166 parameter overrides this. A commonly used header for this is
21167 X-Original-To.
21168 Defaults to @samp{""}.
21169 @end deftypevr
21170
21171 @deftypevr {@code{dovecot-configuration} parameter} boolean lda-mailbox-autocreate?
21172 Should saving a mail to a nonexistent mailbox automatically create
21173 it?.
21174 Defaults to @samp{#f}.
21175 @end deftypevr
21176
21177 @deftypevr {@code{dovecot-configuration} parameter} boolean lda-mailbox-autosubscribe?
21178 Should automatically created mailboxes be also automatically
21179 subscribed?.
21180 Defaults to @samp{#f}.
21181 @end deftypevr
21182
21183 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer imap-max-line-length
21184 Maximum IMAP command line length. Some clients generate very long
21185 command lines with huge mailboxes, so you may need to raise this if you
21186 get "Too long argument" or "IMAP command line too large" errors
21187 often.
21188 Defaults to @samp{64000}.
21189 @end deftypevr
21190
21191 @deftypevr {@code{dovecot-configuration} parameter} string imap-logout-format
21192 IMAP logout format string:
21193 @table @code
21194 @item %i
21195 total number of bytes read from client
21196 @item %o
21197 total number of bytes sent to client.
21198 @end table
21199 See @file{doc/wiki/Variables.txt} for a list of all the variables you can use.
21200 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@}"}.
21201 @end deftypevr
21202
21203 @deftypevr {@code{dovecot-configuration} parameter} string imap-capability
21204 Override the IMAP CAPABILITY response. If the value begins with '+',
21205 add the given capabilities on top of the defaults (e.g.@: +XFOO XBAR).
21206 Defaults to @samp{""}.
21207 @end deftypevr
21208
21209 @deftypevr {@code{dovecot-configuration} parameter} string imap-idle-notify-interval
21210 How long to wait between "OK Still here" notifications when client
21211 is IDLEing.
21212 Defaults to @samp{"2 mins"}.
21213 @end deftypevr
21214
21215 @deftypevr {@code{dovecot-configuration} parameter} string imap-id-send
21216 ID field names and values to send to clients. Using * as the value
21217 makes Dovecot use the default value. The following fields have default
21218 values currently: name, version, os, os-version, support-url,
21219 support-email.
21220 Defaults to @samp{""}.
21221 @end deftypevr
21222
21223 @deftypevr {@code{dovecot-configuration} parameter} string imap-id-log
21224 ID fields sent by client to log. * means everything.
21225 Defaults to @samp{""}.
21226 @end deftypevr
21227
21228 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list imap-client-workarounds
21229 Workarounds for various client bugs:
21230
21231 @table @code
21232 @item delay-newmail
21233 Send EXISTS/RECENT new mail notifications only when replying to NOOP and
21234 CHECK commands. Some clients ignore them otherwise, for example OSX
21235 Mail (<v2.1). Outlook Express breaks more badly though, without this it
21236 may show user "Message no longer in server" errors. Note that OE6
21237 still breaks even with this workaround if synchronization is set to
21238 "Headers Only".
21239
21240 @item tb-extra-mailbox-sep
21241 Thunderbird gets somehow confused with LAYOUT=fs (mbox and dbox) and
21242 adds extra @samp{/} suffixes to mailbox names. This option causes Dovecot to
21243 ignore the extra @samp{/} instead of treating it as invalid mailbox name.
21244
21245 @item tb-lsub-flags
21246 Show \Noselect flags for LSUB replies with LAYOUT=fs (e.g.@: mbox).
21247 This makes Thunderbird realize they aren't selectable and show them
21248 greyed out, instead of only later giving "not selectable" popup error.
21249 @end table
21250 Defaults to @samp{()}.
21251 @end deftypevr
21252
21253 @deftypevr {@code{dovecot-configuration} parameter} string imap-urlauth-host
21254 Host allowed in URLAUTH URLs sent by client. "*" allows all.
21255 Defaults to @samp{""}.
21256 @end deftypevr
21257
21258
21259 Whew! Lots of configuration options. The nice thing about it though is
21260 that Guix has a complete interface to Dovecot's configuration
21261 language. This allows not only a nice way to declare configurations,
21262 but also offers reflective capabilities as well: users can write code to
21263 inspect and transform configurations from within Scheme.
21264
21265 However, it could be that you just want to get a @code{dovecot.conf} up
21266 and running. In that case, you can pass an
21267 @code{opaque-dovecot-configuration} as the @code{#:config} parameter to
21268 @code{dovecot-service}. As its name indicates, an opaque configuration
21269 does not have easy reflective capabilities.
21270
21271 Available @code{opaque-dovecot-configuration} fields are:
21272
21273 @deftypevr {@code{opaque-dovecot-configuration} parameter} package dovecot
21274 The dovecot package.
21275 @end deftypevr
21276
21277 @deftypevr {@code{opaque-dovecot-configuration} parameter} string string
21278 The contents of the @code{dovecot.conf}, as a string.
21279 @end deftypevr
21280
21281 For example, if your @code{dovecot.conf} is just the empty string, you
21282 could instantiate a dovecot service like this:
21283
21284 @lisp
21285 (dovecot-service #:config
21286 (opaque-dovecot-configuration
21287 (string "")))
21288 @end lisp
21289
21290 @subsubheading OpenSMTPD Service
21291
21292 @deffn {Scheme Variable} opensmtpd-service-type
21293 This is the type of the @uref{https://www.opensmtpd.org, OpenSMTPD}
21294 service, whose value should be an @code{opensmtpd-configuration} object
21295 as in this example:
21296
21297 @lisp
21298 (service opensmtpd-service-type
21299 (opensmtpd-configuration
21300 (config-file (local-file "./my-smtpd.conf"))))
21301 @end lisp
21302 @end deffn
21303
21304 @deftp {Data Type} opensmtpd-configuration
21305 Data type representing the configuration of opensmtpd.
21306
21307 @table @asis
21308 @item @code{package} (default: @var{opensmtpd})
21309 Package object of the OpenSMTPD SMTP server.
21310
21311 @item @code{config-file} (default: @code{%default-opensmtpd-file})
21312 File-like object of the OpenSMTPD configuration file to use. By default
21313 it listens on the loopback network interface, and allows for mail from
21314 users and daemons on the local machine, as well as permitting email to
21315 remote servers. Run @command{man smtpd.conf} for more information.
21316
21317 @end table
21318 @end deftp
21319
21320 @subsubheading Exim Service
21321
21322 @cindex mail transfer agent (MTA)
21323 @cindex MTA (mail transfer agent)
21324 @cindex SMTP
21325
21326 @deffn {Scheme Variable} exim-service-type
21327 This is the type of the @uref{https://exim.org, Exim} mail transfer
21328 agent (MTA), whose value should be an @code{exim-configuration} object
21329 as in this example:
21330
21331 @lisp
21332 (service exim-service-type
21333 (exim-configuration
21334 (config-file (local-file "./my-exim.conf"))))
21335 @end lisp
21336 @end deffn
21337
21338 In order to use an @code{exim-service-type} service you must also have a
21339 @code{mail-aliases-service-type} service present in your
21340 @code{operating-system} (even if it has no aliases).
21341
21342 @deftp {Data Type} exim-configuration
21343 Data type representing the configuration of exim.
21344
21345 @table @asis
21346 @item @code{package} (default: @var{exim})
21347 Package object of the Exim server.
21348
21349 @item @code{config-file} (default: @code{#f})
21350 File-like object of the Exim configuration file to use. If its value is
21351 @code{#f} then use the default configuration file from the package
21352 provided in @code{package}. The resulting configuration file is loaded
21353 after setting the @code{exim_user} and @code{exim_group} configuration
21354 variables.
21355
21356 @end table
21357 @end deftp
21358
21359 @subsubheading Getmail service
21360
21361 @cindex IMAP
21362 @cindex POP
21363
21364 @deffn {Scheme Variable} getmail-service-type
21365 This is the type of the @uref{http://pyropus.ca/software/getmail/, Getmail}
21366 mail retriever, whose value should be an @code{getmail-configuration}.
21367 @end deffn
21368
21369 Available @code{getmail-configuration} fields are:
21370
21371 @deftypevr {@code{getmail-configuration} parameter} symbol name
21372 A symbol to identify the getmail service.
21373
21374 Defaults to @samp{"unset"}.
21375
21376 @end deftypevr
21377
21378 @deftypevr {@code{getmail-configuration} parameter} package package
21379 The getmail package to use.
21380
21381 @end deftypevr
21382
21383 @deftypevr {@code{getmail-configuration} parameter} string user
21384 The user to run getmail as.
21385
21386 Defaults to @samp{"getmail"}.
21387
21388 @end deftypevr
21389
21390 @deftypevr {@code{getmail-configuration} parameter} string group
21391 The group to run getmail as.
21392
21393 Defaults to @samp{"getmail"}.
21394
21395 @end deftypevr
21396
21397 @deftypevr {@code{getmail-configuration} parameter} string directory
21398 The getmail directory to use.
21399
21400 Defaults to @samp{"/var/lib/getmail/default"}.
21401
21402 @end deftypevr
21403
21404 @deftypevr {@code{getmail-configuration} parameter} getmail-configuration-file rcfile
21405 The getmail configuration file to use.
21406
21407 Available @code{getmail-configuration-file} fields are:
21408
21409 @deftypevr {@code{getmail-configuration-file} parameter} getmail-retriever-configuration retriever
21410 What mail account to retrieve mail from, and how to access that account.
21411
21412 Available @code{getmail-retriever-configuration} fields are:
21413
21414 @deftypevr {@code{getmail-retriever-configuration} parameter} string type
21415 The type of mail retriever to use. Valid values include @samp{passwd}
21416 and @samp{static}.
21417
21418 Defaults to @samp{"SimpleIMAPSSLRetriever"}.
21419
21420 @end deftypevr
21421
21422 @deftypevr {@code{getmail-retriever-configuration} parameter} string server
21423 Username to login to the mail server with.
21424
21425 Defaults to @samp{unset}.
21426
21427 @end deftypevr
21428
21429 @deftypevr {@code{getmail-retriever-configuration} parameter} string username
21430 Username to login to the mail server with.
21431
21432 Defaults to @samp{unset}.
21433
21434 @end deftypevr
21435
21436 @deftypevr {@code{getmail-retriever-configuration} parameter} non-negative-integer port
21437 Port number to connect to.
21438
21439 Defaults to @samp{#f}.
21440
21441 @end deftypevr
21442
21443 @deftypevr {@code{getmail-retriever-configuration} parameter} string password
21444 Override fields from passwd.
21445
21446 Defaults to @samp{""}.
21447
21448 @end deftypevr
21449
21450 @deftypevr {@code{getmail-retriever-configuration} parameter} list password-command
21451 Override fields from passwd.
21452
21453 Defaults to @samp{()}.
21454
21455 @end deftypevr
21456
21457 @deftypevr {@code{getmail-retriever-configuration} parameter} string keyfile
21458 PEM-formatted key file to use for the TLS negotiation.
21459
21460 Defaults to @samp{""}.
21461
21462 @end deftypevr
21463
21464 @deftypevr {@code{getmail-retriever-configuration} parameter} string certfile
21465 PEM-formatted certificate file to use for the TLS negotiation.
21466
21467 Defaults to @samp{""}.
21468
21469 @end deftypevr
21470
21471 @deftypevr {@code{getmail-retriever-configuration} parameter} string ca-certs
21472 CA certificates to use.
21473
21474 Defaults to @samp{""}.
21475
21476 @end deftypevr
21477
21478 @deftypevr {@code{getmail-retriever-configuration} parameter} parameter-alist extra-parameters
21479 Extra retriever parameters.
21480
21481 Defaults to @samp{()}.
21482
21483 @end deftypevr
21484
21485 @end deftypevr
21486
21487 @deftypevr {@code{getmail-configuration-file} parameter} getmail-destination-configuration destination
21488 What to do with retrieved messages.
21489
21490 Available @code{getmail-destination-configuration} fields are:
21491
21492 @deftypevr {@code{getmail-destination-configuration} parameter} string type
21493 The type of mail destination. Valid values include @samp{Maildir},
21494 @samp{Mboxrd} and @samp{MDA_external}.
21495
21496 Defaults to @samp{unset}.
21497
21498 @end deftypevr
21499
21500 @deftypevr {@code{getmail-destination-configuration} parameter} string-or-filelike path
21501 The path option for the mail destination. The behaviour depends on the
21502 chosen type.
21503
21504 Defaults to @samp{""}.
21505
21506 @end deftypevr
21507
21508 @deftypevr {@code{getmail-destination-configuration} parameter} parameter-alist extra-parameters
21509 Extra destination parameters
21510
21511 Defaults to @samp{()}.
21512
21513 @end deftypevr
21514
21515 @end deftypevr
21516
21517 @deftypevr {@code{getmail-configuration-file} parameter} getmail-options-configuration options
21518 Configure getmail.
21519
21520 Available @code{getmail-options-configuration} fields are:
21521
21522 @deftypevr {@code{getmail-options-configuration} parameter} non-negative-integer verbose
21523 If set to @samp{0}, getmail will only print warnings and errors. A
21524 value of @samp{1} means that messages will be printed about retrieving
21525 and deleting messages. If set to @samp{2}, getmail will print messages
21526 about each of it's actions.
21527
21528 Defaults to @samp{1}.
21529
21530 @end deftypevr
21531
21532 @deftypevr {@code{getmail-options-configuration} parameter} boolean read-all
21533 If true, getmail will retrieve all available messages. Otherwise it
21534 will only retrieve messages it hasn't seen previously.
21535
21536 Defaults to @samp{#t}.
21537
21538 @end deftypevr
21539
21540 @deftypevr {@code{getmail-options-configuration} parameter} boolean delete
21541 If set to true, messages will be deleted from the server after
21542 retrieving and successfully delivering them. Otherwise, messages will
21543 be left on the server.
21544
21545 Defaults to @samp{#f}.
21546
21547 @end deftypevr
21548
21549 @deftypevr {@code{getmail-options-configuration} parameter} non-negative-integer delete-after
21550 Getmail will delete messages this number of days after seeing them, if
21551 they have been delivered. This means messages will be left on the
21552 server this number of days after delivering them. A value of @samp{0}
21553 disabled this feature.
21554
21555 Defaults to @samp{0}.
21556
21557 @end deftypevr
21558
21559 @deftypevr {@code{getmail-options-configuration} parameter} non-negative-integer delete-bigger-than
21560 Delete messages larger than this of bytes after retrieving them, even if
21561 the delete and delete-after options are disabled. A value of @samp{0}
21562 disables this feature.
21563
21564 Defaults to @samp{0}.
21565
21566 @end deftypevr
21567
21568 @deftypevr {@code{getmail-options-configuration} parameter} non-negative-integer max-bytes-per-session
21569 Retrieve messages totalling up to this number of bytes before closing
21570 the session with the server. A value of @samp{0} disables this feature.
21571
21572 Defaults to @samp{0}.
21573
21574 @end deftypevr
21575
21576 @deftypevr {@code{getmail-options-configuration} parameter} non-negative-integer max-message-size
21577 Don't retrieve messages larger than this number of bytes. A value of
21578 @samp{0} disables this feature.
21579
21580 Defaults to @samp{0}.
21581
21582 @end deftypevr
21583
21584 @deftypevr {@code{getmail-options-configuration} parameter} boolean delivered-to
21585 If true, getmail will add a Delivered-To header to messages.
21586
21587 Defaults to @samp{#t}.
21588
21589 @end deftypevr
21590
21591 @deftypevr {@code{getmail-options-configuration} parameter} boolean received
21592 If set, getmail adds a Received header to the messages.
21593
21594 Defaults to @samp{#t}.
21595
21596 @end deftypevr
21597
21598 @deftypevr {@code{getmail-options-configuration} parameter} string message-log
21599 Getmail will record a log of its actions to the named file. A value of
21600 @samp{""} disables this feature.
21601
21602 Defaults to @samp{""}.
21603
21604 @end deftypevr
21605
21606 @deftypevr {@code{getmail-options-configuration} parameter} boolean message-log-syslog
21607 If true, getmail will record a log of its actions using the system
21608 logger.
21609
21610 Defaults to @samp{#f}.
21611
21612 @end deftypevr
21613
21614 @deftypevr {@code{getmail-options-configuration} parameter} boolean message-log-verbose
21615 If true, getmail will log information about messages not retrieved and
21616 the reason for not retrieving them, as well as starting and ending
21617 information lines.
21618
21619 Defaults to @samp{#f}.
21620
21621 @end deftypevr
21622
21623 @deftypevr {@code{getmail-options-configuration} parameter} parameter-alist extra-parameters
21624 Extra options to include.
21625
21626 Defaults to @samp{()}.
21627
21628 @end deftypevr
21629
21630 @end deftypevr
21631
21632 @end deftypevr
21633
21634 @deftypevr {@code{getmail-configuration} parameter} list idle
21635 A list of mailboxes that getmail should wait on the server for new mail
21636 notifications. This depends on the server supporting the IDLE
21637 extension.
21638
21639 Defaults to @samp{()}.
21640
21641 @end deftypevr
21642
21643 @deftypevr {@code{getmail-configuration} parameter} list environment-variables
21644 Environment variables to set for getmail.
21645
21646 Defaults to @samp{()}.
21647
21648 @end deftypevr
21649
21650 @subsubheading Mail Aliases Service
21651
21652 @cindex email aliases
21653 @cindex aliases, for email addresses
21654
21655 @deffn {Scheme Variable} mail-aliases-service-type
21656 This is the type of the service which provides @code{/etc/aliases},
21657 specifying how to deliver mail to users on this system.
21658
21659 @lisp
21660 (service mail-aliases-service-type
21661 '(("postmaster" "bob")
21662 ("bob" "bob@@example.com" "bob@@example2.com")))
21663 @end lisp
21664 @end deffn
21665
21666 The configuration for a @code{mail-aliases-service-type} service is an
21667 association list denoting how to deliver mail that comes to this
21668 system. Each entry is of the form @code{(alias addresses ...)}, with
21669 @code{alias} specifying the local alias and @code{addresses} specifying
21670 where to deliver this user's mail.
21671
21672 The aliases aren't required to exist as users on the local system. In
21673 the above example, there doesn't need to be a @code{postmaster} entry in
21674 the @code{operating-system}'s @code{user-accounts} in order to deliver
21675 the @code{postmaster} mail to @code{bob} (which subsequently would
21676 deliver mail to @code{bob@@example.com} and @code{bob@@example2.com}).
21677
21678 @subsubheading GNU Mailutils IMAP4 Daemon
21679 @cindex GNU Mailutils IMAP4 Daemon
21680
21681 @deffn {Scheme Variable} imap4d-service-type
21682 This is the type of the GNU Mailutils IMAP4 Daemon (@pxref{imap4d,,,
21683 mailutils, GNU Mailutils Manual}), whose value should be an
21684 @code{imap4d-configuration} object as in this example:
21685
21686 @lisp
21687 (service imap4d-service-type
21688 (imap4d-configuration
21689 (config-file (local-file "imap4d.conf"))))
21690 @end lisp
21691 @end deffn
21692
21693 @deftp {Data Type} imap4d-configuration
21694 Data type representing the configuration of @command{imap4d}.
21695
21696 @table @asis
21697 @item @code{package} (default: @code{mailutils})
21698 The package that provides @command{imap4d}.
21699
21700 @item @code{config-file} (default: @code{%default-imap4d-config-file})
21701 File-like object of the configuration file to use, by default it will listen
21702 on TCP port 143 of @code{localhost}. @xref{Conf-imap4d,,, mailutils, GNU
21703 Mailutils Manual}, for details.
21704
21705 @end table
21706 @end deftp
21707
21708 @subsubheading Radicale Service
21709 @cindex CalDAV
21710 @cindex CardDAV
21711
21712 @deffn {Scheme Variable} radicale-service-type
21713 This is the type of the @uref{https://radicale.org, Radicale} CalDAV/CardDAV
21714 server whose value should be a @code{radicale-configuration}.
21715 @end deffn
21716
21717 @deftp {Data Type} radicale-configuration
21718 Data type representing the configuration of @command{radicale}.
21719
21720 @table @asis
21721 @item @code{package} (default: @code{radicale})
21722 The package that provides @command{radicale}.
21723
21724 @item @code{config-file} (default: @code{%default-radicale-config-file})
21725 File-like object of the configuration file to use, by default it will listen
21726 on TCP port 5232 of @code{localhost} and use the @code{htpasswd} file at
21727 @file{/var/lib/radicale/users} with no (@code{plain}) encryption.
21728
21729 @end table
21730 @end deftp
21731
21732 @node Messaging Services
21733 @subsection Messaging Services
21734
21735 @cindex messaging
21736 @cindex jabber
21737 @cindex XMPP
21738 The @code{(gnu services messaging)} module provides Guix service
21739 definitions for messaging services. Currently it provides the following
21740 services:
21741
21742 @subsubheading Prosody Service
21743
21744 @deffn {Scheme Variable} prosody-service-type
21745 This is the type for the @uref{https://prosody.im, Prosody XMPP
21746 communication server}. Its value must be a @code{prosody-configuration}
21747 record as in this example:
21748
21749 @lisp
21750 (service prosody-service-type
21751 (prosody-configuration
21752 (modules-enabled (cons* "groups" "mam" %default-modules-enabled))
21753 (int-components
21754 (list
21755 (int-component-configuration
21756 (hostname "conference.example.net")
21757 (plugin "muc")
21758 (mod-muc (mod-muc-configuration)))))
21759 (virtualhosts
21760 (list
21761 (virtualhost-configuration
21762 (domain "example.net"))))))
21763 @end lisp
21764
21765 See below for details about @code{prosody-configuration}.
21766
21767 @end deffn
21768
21769 By default, Prosody does not need much configuration. Only one
21770 @code{virtualhosts} field is needed: it specifies the domain you wish
21771 Prosody to serve.
21772
21773 You can perform various sanity checks on the generated configuration
21774 with the @code{prosodyctl check} command.
21775
21776 Prosodyctl will also help you to import certificates from the
21777 @code{letsencrypt} directory so that the @code{prosody} user can access
21778 them. See @url{https://prosody.im/doc/letsencrypt}.
21779
21780 @example
21781 prosodyctl --root cert import /etc/letsencrypt/live
21782 @end example
21783
21784 The available configuration parameters follow. Each parameter
21785 definition is preceded by its type; for example, @samp{string-list foo}
21786 indicates that the @code{foo} parameter should be specified as a list of
21787 strings. Types starting with @code{maybe-} denote parameters that won't
21788 show up in @code{prosody.cfg.lua} when their value is @code{'disabled}.
21789
21790 There is also a way to specify the configuration as a string, if you
21791 have an old @code{prosody.cfg.lua} file that you want to port over from
21792 some other system; see the end for more details.
21793
21794 The @code{file-object} type designates either a file-like object
21795 (@pxref{G-Expressions, file-like objects}) or a file name.
21796
21797 @c The following documentation was initially generated by
21798 @c (generate-documentation) in (gnu services messaging). Manually maintained
21799 @c documentation is better, so we shouldn't hesitate to edit below as
21800 @c needed. However if the change you want to make to this documentation
21801 @c can be done in an automated way, it's probably easier to change
21802 @c (generate-documentation) than to make it below and have to deal with
21803 @c the churn as Prosody updates.
21804
21805 Available @code{prosody-configuration} fields are:
21806
21807 @deftypevr {@code{prosody-configuration} parameter} package prosody
21808 The Prosody package.
21809 @end deftypevr
21810
21811 @deftypevr {@code{prosody-configuration} parameter} file-name data-path
21812 Location of the Prosody data storage directory. See
21813 @url{https://prosody.im/doc/configure}.
21814 Defaults to @samp{"/var/lib/prosody"}.
21815 @end deftypevr
21816
21817 @deftypevr {@code{prosody-configuration} parameter} file-object-list plugin-paths
21818 Additional plugin directories. They are searched in all the specified
21819 paths in order. See @url{https://prosody.im/doc/plugins_directory}.
21820 Defaults to @samp{()}.
21821 @end deftypevr
21822
21823 @deftypevr {@code{prosody-configuration} parameter} file-name certificates
21824 Every virtual host and component needs a certificate so that clients and
21825 servers can securely verify its identity. Prosody will automatically load
21826 certificates/keys from the directory specified here.
21827 Defaults to @samp{"/etc/prosody/certs"}.
21828 @end deftypevr
21829
21830 @deftypevr {@code{prosody-configuration} parameter} string-list admins
21831 This is a list of accounts that are admins for the server. Note that you
21832 must create the accounts separately. See @url{https://prosody.im/doc/admins} and
21833 @url{https://prosody.im/doc/creating_accounts}.
21834 Example: @code{(admins '("user1@@example.com" "user2@@example.net"))}
21835 Defaults to @samp{()}.
21836 @end deftypevr
21837
21838 @deftypevr {@code{prosody-configuration} parameter} boolean use-libevent?
21839 Enable use of libevent for better performance under high load. See
21840 @url{https://prosody.im/doc/libevent}.
21841 Defaults to @samp{#f}.
21842 @end deftypevr
21843
21844 @deftypevr {@code{prosody-configuration} parameter} module-list modules-enabled
21845 This is the list of modules Prosody will load on startup. It looks for
21846 @code{mod_modulename.lua} in the plugins folder, so make sure that exists too.
21847 Documentation on modules can be found at:
21848 @url{https://prosody.im/doc/modules}.
21849 Defaults to @samp{("roster" "saslauth" "tls" "dialback" "disco" "carbons" "private" "blocklist" "vcard" "version" "uptime" "time" "ping" "pep" "register" "admin_adhoc")}.
21850 @end deftypevr
21851
21852 @deftypevr {@code{prosody-configuration} parameter} string-list modules-disabled
21853 @samp{"offline"}, @samp{"c2s"} and @samp{"s2s"} are auto-loaded, but
21854 should you want to disable them then add them to this list.
21855 Defaults to @samp{()}.
21856 @end deftypevr
21857
21858 @deftypevr {@code{prosody-configuration} parameter} file-object groups-file
21859 Path to a text file where the shared groups are defined. If this path is
21860 empty then @samp{mod_groups} does nothing. See
21861 @url{https://prosody.im/doc/modules/mod_groups}.
21862 Defaults to @samp{"/var/lib/prosody/sharedgroups.txt"}.
21863 @end deftypevr
21864
21865 @deftypevr {@code{prosody-configuration} parameter} boolean allow-registration?
21866 Disable account creation by default, for security. See
21867 @url{https://prosody.im/doc/creating_accounts}.
21868 Defaults to @samp{#f}.
21869 @end deftypevr
21870
21871 @deftypevr {@code{prosody-configuration} parameter} maybe-ssl-configuration ssl
21872 These are the SSL/TLS-related settings. Most of them are disabled so to
21873 use Prosody's defaults. If you do not completely understand these options, do
21874 not add them to your config, it is easy to lower the security of your server
21875 using them. See @url{https://prosody.im/doc/advanced_ssl_config}.
21876
21877 Available @code{ssl-configuration} fields are:
21878
21879 @deftypevr {@code{ssl-configuration} parameter} maybe-string protocol
21880 This determines what handshake to use.
21881 @end deftypevr
21882
21883 @deftypevr {@code{ssl-configuration} parameter} maybe-file-name key
21884 Path to your private key file.
21885 @end deftypevr
21886
21887 @deftypevr {@code{ssl-configuration} parameter} maybe-file-name certificate
21888 Path to your certificate file.
21889 @end deftypevr
21890
21891 @deftypevr {@code{ssl-configuration} parameter} file-object capath
21892 Path to directory containing root certificates that you wish Prosody to
21893 trust when verifying the certificates of remote servers.
21894 Defaults to @samp{"/etc/ssl/certs"}.
21895 @end deftypevr
21896
21897 @deftypevr {@code{ssl-configuration} parameter} maybe-file-object cafile
21898 Path to a file containing root certificates that you wish Prosody to trust.
21899 Similar to @code{capath} but with all certificates concatenated together.
21900 @end deftypevr
21901
21902 @deftypevr {@code{ssl-configuration} parameter} maybe-string-list verify
21903 A list of verification options (these mostly map to OpenSSL's
21904 @code{set_verify()} flags).
21905 @end deftypevr
21906
21907 @deftypevr {@code{ssl-configuration} parameter} maybe-string-list options
21908 A list of general options relating to SSL/TLS@. These map to OpenSSL's
21909 @code{set_options()}. For a full list of options available in LuaSec, see the
21910 LuaSec source.
21911 @end deftypevr
21912
21913 @deftypevr {@code{ssl-configuration} parameter} maybe-non-negative-integer depth
21914 How long a chain of certificate authorities to check when looking for a
21915 trusted root certificate.
21916 @end deftypevr
21917
21918 @deftypevr {@code{ssl-configuration} parameter} maybe-string ciphers
21919 An OpenSSL cipher string. This selects what ciphers Prosody will offer to
21920 clients, and in what order.
21921 @end deftypevr
21922
21923 @deftypevr {@code{ssl-configuration} parameter} maybe-file-name dhparam
21924 A path to a file containing parameters for Diffie-Hellman key exchange. You
21925 can create such a file with:
21926 @code{openssl dhparam -out /etc/prosody/certs/dh-2048.pem 2048}
21927 @end deftypevr
21928
21929 @deftypevr {@code{ssl-configuration} parameter} maybe-string curve
21930 Curve for Elliptic curve Diffie-Hellman. Prosody's default is
21931 @samp{"secp384r1"}.
21932 @end deftypevr
21933
21934 @deftypevr {@code{ssl-configuration} parameter} maybe-string-list verifyext
21935 A list of ``extra'' verification options.
21936 @end deftypevr
21937
21938 @deftypevr {@code{ssl-configuration} parameter} maybe-string password
21939 Password for encrypted private keys.
21940 @end deftypevr
21941
21942 @end deftypevr
21943
21944 @deftypevr {@code{prosody-configuration} parameter} boolean c2s-require-encryption?
21945 Whether to force all client-to-server connections to be encrypted or not.
21946 See @url{https://prosody.im/doc/modules/mod_tls}.
21947 Defaults to @samp{#f}.
21948 @end deftypevr
21949
21950 @deftypevr {@code{prosody-configuration} parameter} string-list disable-sasl-mechanisms
21951 Set of mechanisms that will never be offered. See
21952 @url{https://prosody.im/doc/modules/mod_saslauth}.
21953 Defaults to @samp{("DIGEST-MD5")}.
21954 @end deftypevr
21955
21956 @deftypevr {@code{prosody-configuration} parameter} boolean s2s-require-encryption?
21957 Whether to force all server-to-server connections to be encrypted or not.
21958 See @url{https://prosody.im/doc/modules/mod_tls}.
21959 Defaults to @samp{#f}.
21960 @end deftypevr
21961
21962 @deftypevr {@code{prosody-configuration} parameter} boolean s2s-secure-auth?
21963 Whether to require encryption and certificate authentication. This
21964 provides ideal security, but requires servers you communicate with to support
21965 encryption AND present valid, trusted certificates. See
21966 @url{https://prosody.im/doc/s2s#security}.
21967 Defaults to @samp{#f}.
21968 @end deftypevr
21969
21970 @deftypevr {@code{prosody-configuration} parameter} string-list s2s-insecure-domains
21971 Many servers don't support encryption or have invalid or self-signed
21972 certificates. You can list domains here that will not be required to
21973 authenticate using certificates. They will be authenticated using DNS@. See
21974 @url{https://prosody.im/doc/s2s#security}.
21975 Defaults to @samp{()}.
21976 @end deftypevr
21977
21978 @deftypevr {@code{prosody-configuration} parameter} string-list s2s-secure-domains
21979 Even if you leave @code{s2s-secure-auth?} disabled, you can still require
21980 valid certificates for some domains by specifying a list here. See
21981 @url{https://prosody.im/doc/s2s#security}.
21982 Defaults to @samp{()}.
21983 @end deftypevr
21984
21985 @deftypevr {@code{prosody-configuration} parameter} string authentication
21986 Select the authentication backend to use. The default provider stores
21987 passwords in plaintext and uses Prosody's configured data storage to store the
21988 authentication data. If you do not trust your server please see
21989 @url{https://prosody.im/doc/modules/mod_auth_internal_hashed} for information
21990 about using the hashed backend. See also
21991 @url{https://prosody.im/doc/authentication}
21992 Defaults to @samp{"internal_plain"}.
21993 @end deftypevr
21994
21995 @deftypevr {@code{prosody-configuration} parameter} maybe-string log
21996 Set logging options. Advanced logging configuration is not yet supported
21997 by the Prosody service. See @url{https://prosody.im/doc/logging}.
21998 Defaults to @samp{"*syslog"}.
21999 @end deftypevr
22000
22001 @deftypevr {@code{prosody-configuration} parameter} file-name pidfile
22002 File to write pid in. See @url{https://prosody.im/doc/modules/mod_posix}.
22003 Defaults to @samp{"/var/run/prosody/prosody.pid"}.
22004 @end deftypevr
22005
22006 @deftypevr {@code{prosody-configuration} parameter} maybe-non-negative-integer http-max-content-size
22007 Maximum allowed size of the HTTP body (in bytes).
22008 @end deftypevr
22009
22010 @deftypevr {@code{prosody-configuration} parameter} maybe-string http-external-url
22011 Some modules expose their own URL in various ways. This URL is built
22012 from the protocol, host and port used. If Prosody sits behind a proxy, the
22013 public URL will be @code{http-external-url} instead. See
22014 @url{https://prosody.im/doc/http#external_url}.
22015 @end deftypevr
22016
22017 @deftypevr {@code{prosody-configuration} parameter} virtualhost-configuration-list virtualhosts
22018 A host in Prosody is a domain on which user accounts can be created. For
22019 example if you want your users to have addresses like
22020 @samp{"john.smith@@example.com"} then you need to add a host
22021 @samp{"example.com"}. All options in this list will apply only to this host.
22022
22023 Note: the name @emph{virtual} host is used in configuration to avoid confusion with
22024 the actual physical host that Prosody is installed on. A single Prosody
22025 instance can serve many domains, each one defined as a VirtualHost entry in
22026 Prosody's configuration. Conversely a server that hosts a single domain would
22027 have just one VirtualHost entry.
22028
22029 See @url{https://prosody.im/doc/configure#virtual_host_settings}.
22030
22031 Available @code{virtualhost-configuration} fields are:
22032
22033 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:
22034 @deftypevr {@code{virtualhost-configuration} parameter} string domain
22035 Domain you wish Prosody to serve.
22036 @end deftypevr
22037
22038 @end deftypevr
22039
22040 @deftypevr {@code{prosody-configuration} parameter} int-component-configuration-list int-components
22041 Components are extra services on a server which are available to clients,
22042 usually on a subdomain of the main server (such as
22043 @samp{"mycomponent.example.com"}). Example components might be chatroom
22044 servers, user directories, or gateways to other protocols.
22045
22046 Internal components are implemented with Prosody-specific plugins. To add an
22047 internal component, you simply fill the hostname field, and the plugin you wish
22048 to use for the component.
22049
22050 See @url{https://prosody.im/doc/components}.
22051 Defaults to @samp{()}.
22052
22053 Available @code{int-component-configuration} fields are:
22054
22055 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:
22056 @deftypevr {@code{int-component-configuration} parameter} string hostname
22057 Hostname of the component.
22058 @end deftypevr
22059
22060 @deftypevr {@code{int-component-configuration} parameter} string plugin
22061 Plugin you wish to use for the component.
22062 @end deftypevr
22063
22064 @deftypevr {@code{int-component-configuration} parameter} maybe-mod-muc-configuration mod-muc
22065 Multi-user chat (MUC) is Prosody's module for allowing you to create
22066 hosted chatrooms/conferences for XMPP users.
22067
22068 General information on setting up and using multi-user chatrooms can be found
22069 in the ``Chatrooms'' documentation (@url{https://prosody.im/doc/chatrooms}),
22070 which you should read if you are new to XMPP chatrooms.
22071
22072 See also @url{https://prosody.im/doc/modules/mod_muc}.
22073
22074 Available @code{mod-muc-configuration} fields are:
22075
22076 @deftypevr {@code{mod-muc-configuration} parameter} string name
22077 The name to return in service discovery responses.
22078 Defaults to @samp{"Prosody Chatrooms"}.
22079 @end deftypevr
22080
22081 @deftypevr {@code{mod-muc-configuration} parameter} string-or-boolean restrict-room-creation
22082 If @samp{#t}, this will only allow admins to create new chatrooms.
22083 Otherwise anyone can create a room. The value @samp{"local"} restricts room
22084 creation to users on the service's parent domain. E.g.@: @samp{user@@example.com}
22085 can create rooms on @samp{rooms.example.com}. The value @samp{"admin"}
22086 restricts to service administrators only.
22087 Defaults to @samp{#f}.
22088 @end deftypevr
22089
22090 @deftypevr {@code{mod-muc-configuration} parameter} non-negative-integer max-history-messages
22091 Maximum number of history messages that will be sent to the member that has
22092 just joined the room.
22093 Defaults to @samp{20}.
22094 @end deftypevr
22095
22096 @end deftypevr
22097
22098 @end deftypevr
22099
22100 @deftypevr {@code{prosody-configuration} parameter} ext-component-configuration-list ext-components
22101 External components use XEP-0114, which most standalone components
22102 support. To add an external component, you simply fill the hostname field. See
22103 @url{https://prosody.im/doc/components}.
22104 Defaults to @samp{()}.
22105
22106 Available @code{ext-component-configuration} fields are:
22107
22108 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:
22109 @deftypevr {@code{ext-component-configuration} parameter} string component-secret
22110 Password which the component will use to log in.
22111 @end deftypevr
22112
22113 @deftypevr {@code{ext-component-configuration} parameter} string hostname
22114 Hostname of the component.
22115 @end deftypevr
22116
22117 @end deftypevr
22118
22119 @deftypevr {@code{prosody-configuration} parameter} non-negative-integer-list component-ports
22120 Port(s) Prosody listens on for component connections.
22121 Defaults to @samp{(5347)}.
22122 @end deftypevr
22123
22124 @deftypevr {@code{prosody-configuration} parameter} string component-interface
22125 Interface Prosody listens on for component connections.
22126 Defaults to @samp{"127.0.0.1"}.
22127 @end deftypevr
22128
22129 @deftypevr {@code{prosody-configuration} parameter} maybe-raw-content raw-content
22130 Raw content that will be added to the configuration file.
22131 @end deftypevr
22132
22133 It could be that you just want to get a @code{prosody.cfg.lua}
22134 up and running. In that case, you can pass an
22135 @code{opaque-prosody-configuration} record as the value of
22136 @code{prosody-service-type}. As its name indicates, an opaque configuration
22137 does not have easy reflective capabilities.
22138 Available @code{opaque-prosody-configuration} fields are:
22139
22140 @deftypevr {@code{opaque-prosody-configuration} parameter} package prosody
22141 The prosody package.
22142 @end deftypevr
22143
22144 @deftypevr {@code{opaque-prosody-configuration} parameter} string prosody.cfg.lua
22145 The contents of the @code{prosody.cfg.lua} to use.
22146 @end deftypevr
22147
22148 For example, if your @code{prosody.cfg.lua} is just the empty
22149 string, you could instantiate a prosody service like this:
22150
22151 @lisp
22152 (service prosody-service-type
22153 (opaque-prosody-configuration
22154 (prosody.cfg.lua "")))
22155 @end lisp
22156
22157 @c end of Prosody auto-generated documentation
22158
22159 @subsubheading BitlBee Service
22160
22161 @cindex IRC (Internet Relay Chat)
22162 @cindex IRC gateway
22163 @url{https://bitlbee.org,BitlBee} is a gateway that provides an IRC
22164 interface to a variety of messaging protocols such as XMPP.
22165
22166 @defvr {Scheme Variable} bitlbee-service-type
22167 This is the service type for the @url{https://bitlbee.org,BitlBee} IRC
22168 gateway daemon. Its value is a @code{bitlbee-configuration} (see
22169 below).
22170
22171 To have BitlBee listen on port 6667 on localhost, add this line to your
22172 services:
22173
22174 @lisp
22175 (service bitlbee-service-type)
22176 @end lisp
22177 @end defvr
22178
22179 @deftp {Data Type} bitlbee-configuration
22180 This is the configuration for BitlBee, with the following fields:
22181
22182 @table @asis
22183 @item @code{interface} (default: @code{"127.0.0.1"})
22184 @itemx @code{port} (default: @code{6667})
22185 Listen on the network interface corresponding to the IP address
22186 specified in @var{interface}, on @var{port}.
22187
22188 When @var{interface} is @code{127.0.0.1}, only local clients can
22189 connect; when it is @code{0.0.0.0}, connections can come from any
22190 networking interface.
22191
22192 @item @code{bitlbee} (default: @code{bitlbee})
22193 The BitlBee package to use.
22194
22195 @item @code{plugins} (default: @code{'()})
22196 List of plugin packages to use---e.g., @code{bitlbee-discord}.
22197
22198 @item @code{extra-settings} (default: @code{""})
22199 Configuration snippet added as-is to the BitlBee configuration file.
22200 @end table
22201 @end deftp
22202
22203 @subsubheading Quassel Service
22204
22205 @cindex IRC (Internet Relay Chat)
22206 @url{https://quassel-irc.org/,Quassel} is a distributed IRC client,
22207 meaning that one or more clients can attach to and detach from the
22208 central core.
22209
22210 @defvr {Scheme Variable} quassel-service-type
22211 This is the service type for the @url{https://quassel-irc.org/,Quassel}
22212 IRC backend daemon. Its value is a @code{quassel-configuration}
22213 (see below).
22214 @end defvr
22215
22216 @deftp {Data Type} quassel-configuration
22217 This is the configuration for Quassel, with the following fields:
22218
22219 @table @asis
22220 @item @code{quassel} (default: @code{quassel})
22221 The Quassel package to use.
22222
22223 @item @code{interface} (default: @code{"::,0.0.0.0"})
22224 @item @code{port} (default: @code{4242})
22225 Listen on the network interface(s) corresponding to the IPv4 or IPv6
22226 interfaces specified in the comma delimited @var{interface}, on
22227 @var{port}.
22228
22229 @item @code{loglevel} (default: @code{"Info"})
22230 The level of logging desired. Accepted values are Debug, Info, Warning
22231 and Error.
22232 @end table
22233 @end deftp
22234
22235 @node Telephony Services
22236 @subsection Telephony Services
22237
22238 @cindex Murmur (VoIP server)
22239 @cindex VoIP server
22240 This section describes how to set up and run a Murmur server. Murmur is
22241 the server of the @uref{https://mumble.info, Mumble} voice-over-IP
22242 (VoIP) suite.
22243
22244 @deftp {Data Type} murmur-configuration
22245 The service type for the Murmur server. An example configuration can
22246 look like this:
22247
22248 @lisp
22249 (service murmur-service-type
22250 (murmur-configuration
22251 (welcome-text
22252 "Welcome to this Mumble server running on Guix!")
22253 (cert-required? #t) ;disallow text password logins
22254 (ssl-cert "/etc/letsencrypt/live/mumble.example.com/fullchain.pem")
22255 (ssl-key "/etc/letsencrypt/live/mumble.example.com/privkey.pem")))
22256 @end lisp
22257
22258 After reconfiguring your system, you can manually set the murmur @code{SuperUser}
22259 password with the command that is printed during the activation phase.
22260
22261 It is recommended to register a normal Mumble user account
22262 and grant it admin or moderator rights.
22263 You can use the @code{mumble} client to
22264 login as new normal user, register yourself, and log out.
22265 For the next step login with the name @code{SuperUser} use
22266 the @code{SuperUser} password that you set previously,
22267 and grant your newly registered mumble user administrator or moderator
22268 rights and create some channels.
22269
22270 Available @code{murmur-configuration} fields are:
22271
22272 @table @asis
22273 @item @code{package} (default: @code{mumble})
22274 Package that contains @code{bin/murmurd}.
22275
22276 @item @code{user} (default: @code{"murmur"})
22277 User who will run the Murmur server.
22278
22279 @item @code{group} (default: @code{"murmur"})
22280 Group of the user who will run the murmur server.
22281
22282 @item @code{port} (default: @code{64738})
22283 Port on which the server will listen.
22284
22285 @item @code{welcome-text} (default: @code{""})
22286 Welcome text sent to clients when they connect.
22287
22288 @item @code{server-password} (default: @code{""})
22289 Password the clients have to enter in order to connect.
22290
22291 @item @code{max-users} (default: @code{100})
22292 Maximum of users that can be connected to the server at once.
22293
22294 @item @code{max-user-bandwidth} (default: @code{#f})
22295 Maximum voice traffic a user can send per second.
22296
22297 @item @code{database-file} (default: @code{"/var/lib/murmur/db.sqlite"})
22298 File name of the sqlite database.
22299 The service's user will become the owner of the directory.
22300
22301 @item @code{log-file} (default: @code{"/var/log/murmur/murmur.log"})
22302 File name of the log file.
22303 The service's user will become the owner of the directory.
22304
22305 @item @code{autoban-attempts} (default: @code{10})
22306 Maximum number of logins a user can make in @code{autoban-timeframe}
22307 without getting auto banned for @code{autoban-time}.
22308
22309 @item @code{autoban-timeframe} (default: @code{120})
22310 Timeframe for autoban in seconds.
22311
22312 @item @code{autoban-time} (default: @code{300})
22313 Amount of time in seconds for which a client gets banned
22314 when violating the autoban limits.
22315
22316 @item @code{opus-threshold} (default: @code{100})
22317 Percentage of clients that need to support opus
22318 before switching over to opus audio codec.
22319
22320 @item @code{channel-nesting-limit} (default: @code{10})
22321 How deep channels can be nested at maximum.
22322
22323 @item @code{channelname-regex} (default: @code{#f})
22324 A string in form of a Qt regular expression that channel names must conform to.
22325
22326 @item @code{username-regex} (default: @code{#f})
22327 A string in form of a Qt regular expression that user names must conform to.
22328
22329 @item @code{text-message-length} (default: @code{5000})
22330 Maximum size in bytes that a user can send in one text chat message.
22331
22332 @item @code{image-message-length} (default: @code{(* 128 1024)})
22333 Maximum size in bytes that a user can send in one image message.
22334
22335 @item @code{cert-required?} (default: @code{#f})
22336 If it is set to @code{#t} clients that use weak password authentication
22337 will not be accepted. Users must have completed the certificate wizard to join.
22338
22339 @item @code{remember-channel?} (default: @code{#f})
22340 Should murmur remember the last channel each user was in when they disconnected
22341 and put them into the remembered channel when they rejoin.
22342
22343 @item @code{allow-html?} (default: @code{#f})
22344 Should html be allowed in text messages, user comments, and channel descriptions.
22345
22346 @item @code{allow-ping?} (default: @code{#f})
22347 Setting to true exposes the current user count, the maximum user count, and
22348 the server's maximum bandwidth per client to unauthenticated users. In the
22349 Mumble client, this information is shown in the Connect dialog.
22350
22351 Disabling this setting will prevent public listing of the server.
22352
22353 @item @code{bonjour?} (default: @code{#f})
22354 Should the server advertise itself in the local network through the bonjour protocol.
22355
22356 @item @code{send-version?} (default: @code{#f})
22357 Should the murmur server version be exposed in ping requests.
22358
22359 @item @code{log-days} (default: @code{31})
22360 Murmur also stores logs in the database, which are accessible via RPC.
22361 The default is 31 days of months, but you can set this setting to 0 to keep logs forever,
22362 or -1 to disable logging to the database.
22363
22364 @item @code{obfuscate-ips?} (default: @code{#t})
22365 Should logged ips be obfuscated to protect the privacy of users.
22366
22367 @item @code{ssl-cert} (default: @code{#f})
22368 File name of the SSL/TLS certificate used for encrypted connections.
22369
22370 @lisp
22371 (ssl-cert "/etc/letsencrypt/live/example.com/fullchain.pem")
22372 @end lisp
22373 @item @code{ssl-key} (default: @code{#f})
22374 Filepath to the ssl private key used for encrypted connections.
22375 @lisp
22376 (ssl-key "/etc/letsencrypt/live/example.com/privkey.pem")
22377 @end lisp
22378
22379 @item @code{ssl-dh-params} (default: @code{#f})
22380 File name of a PEM-encoded file with Diffie-Hellman parameters
22381 for the SSL/TLS encryption. Alternatively you set it to
22382 @code{"@@ffdhe2048"}, @code{"@@ffdhe3072"}, @code{"@@ffdhe4096"}, @code{"@@ffdhe6144"}
22383 or @code{"@@ffdhe8192"} to use bundled parameters from RFC 7919.
22384
22385 @item @code{ssl-ciphers} (default: @code{#f})
22386 The @code{ssl-ciphers} option chooses the cipher suites to make available for use
22387 in SSL/TLS.
22388
22389 This option is specified using
22390 @uref{https://www.openssl.org/docs/apps/ciphers.html#CIPHER-LIST-FORMAT,
22391 OpenSSL cipher list notation}.
22392
22393 It is recommended that you try your cipher string using 'openssl ciphers <string>'
22394 before setting it here, to get a feel for which cipher suites you will get.
22395 After setting this option, it is recommend that you inspect your Murmur log
22396 to ensure that Murmur is using the cipher suites that you expected it to.
22397
22398 Note: Changing this option may impact the backwards compatibility of your
22399 Murmur server, and can remove the ability for older Mumble clients to be able
22400 to connect to it.
22401
22402 @item @code{public-registration} (default: @code{#f})
22403 Must be a @code{<murmur-public-registration-configuration>} record or @code{#f}.
22404
22405 You can optionally register your server in the public server list that the
22406 @code{mumble} client shows on startup.
22407 You cannot register your server if you have set a @code{server-password},
22408 or set @code{allow-ping} to @code{#f}.
22409
22410 It might take a few hours until it shows up in the public list.
22411
22412 @item @code{file} (default: @code{#f})
22413 Optional alternative override for this configuration.
22414 @end table
22415 @end deftp
22416
22417 @deftp {Data Type} murmur-public-registration-configuration
22418 Configuration for public registration of a murmur service.
22419
22420 @table @asis
22421 @item @code{name}
22422 This is a display name for your server. Not to be confused with the hostname.
22423
22424 @item @code{password}
22425 A password to identify your registration.
22426 Subsequent updates will need the same password. Don't lose your password.
22427
22428 @item @code{url}
22429 This should be a @code{http://} or @code{https://} link to your web
22430 site.
22431
22432 @item @code{hostname} (default: @code{#f})
22433 By default your server will be listed by its IP address.
22434 If it is set your server will be linked by this host name instead.
22435 @end table
22436 @end deftp
22437
22438
22439
22440 @node File-Sharing Services
22441 @subsection File-Sharing Services
22442
22443 The @code{(gnu services file-sharing)} module provides services that
22444 assist with transferring files over peer-to-peer file-sharing networks.
22445
22446 @subsubheading Transmission Daemon Service
22447
22448 @uref{https://transmissionbt.com/, Transmission} is a flexible
22449 BitTorrent client that offers a variety of graphical and command-line
22450 interfaces. A @code{transmission-daemon-service-type} service provides
22451 Transmission's headless variant, @command{transmission-daemon}, as a
22452 system service, allowing users to share files via BitTorrent even when
22453 they are not logged in.
22454
22455 @deffn {Scheme Variable} transmission-daemon-service-type
22456 The service type for the Transmission Daemon BitTorrent client. Its
22457 value must be a @code{transmission-daemon-configuration} object as in
22458 this example:
22459
22460 @lisp
22461 (service transmission-daemon-service-type
22462 (transmission-daemon-configuration
22463 ;; Restrict access to the RPC ("control") interface
22464 (rpc-authentication-required? #t)
22465 (rpc-username "transmission")
22466 (rpc-password
22467 (transmission-password-hash
22468 "transmission" ; desired password
22469 "uKd1uMs9")) ; arbitrary salt value
22470
22471 ;; Accept requests from this and other hosts on the
22472 ;; local network
22473 (rpc-whitelist-enabled? #t)
22474 (rpc-whitelist '("::1" "127.0.0.1" "192.168.0.*"))
22475
22476 ;; Limit bandwidth use during work hours
22477 (alt-speed-down (* 1024 2)) ; 2 MB/s
22478 (alt-speed-up 512) ; 512 kB/s
22479
22480 (alt-speed-time-enabled? #t)
22481 (alt-speed-time-day 'weekdays)
22482 (alt-speed-time-begin
22483 (+ (* 60 8) 30)) ; 8:30 am
22484 (alt-speed-time-end
22485 (+ (* 60 (+ 12 5)) 30)))) ; 5:30 pm
22486 @end lisp
22487 @end deffn
22488
22489 Once the service is started, users can interact with the daemon through
22490 its Web interface (at @code{http://localhost:9091/}) or by using the
22491 @command{transmission-remote} command-line tool, available in the
22492 @code{transmission} package. (Emacs users may want to also consider the
22493 @code{emacs-transmission} package.) Both communicate with the daemon
22494 through its remote procedure call (RPC) interface, which by default is
22495 available to all users on the system; you may wish to change this by
22496 assigning values to the @code{rpc-authentication-required?},
22497 @code{rpc-username} and @code{rpc-password} settings, as shown in the
22498 example above and documented further below.
22499
22500 The value for @code{rpc-password} must be a password hash of the type
22501 generated and used by Transmission clients. This can be copied verbatim
22502 from an existing @file{settings.json} file, if another Transmission
22503 client is already being used. Otherwise, the
22504 @code{transmission-password-hash} and @code{transmission-random-salt}
22505 procedures provided by this module can be used to obtain a suitable hash
22506 value.
22507
22508 @deffn {Scheme Procedure} transmission-password-hash @var{password} @var{salt}
22509 Returns a string containing the result of hashing @var{password}
22510 together with @var{salt}, in the format recognized by Transmission
22511 clients for their @code{rpc-password} configuration setting.
22512
22513 @var{salt} must be an eight-character string. The
22514 @code{transmission-random-salt} procedure can be used to generate a
22515 suitable salt value at random.
22516 @end deffn
22517
22518 @deffn {Scheme Procedure} transmission-random-salt
22519 Returns a string containing a random, eight-character salt value of the
22520 type generated and used by Transmission clients, suitable for passing to
22521 the @code{transmission-password-hash} procedure.
22522 @end deffn
22523
22524 These procedures are accessible from within a Guile REPL started with
22525 the @command{guix repl} command (@pxref{Invoking guix repl}). This is
22526 useful for obtaining a random salt value to provide as the second
22527 parameter to `transmission-password-hash`, as in this example session:
22528
22529 @example
22530 $ guix repl
22531 scheme@@(guix-user)> ,use (gnu services file-sharing)
22532 scheme@@(guix-user)> (transmission-random-salt)
22533 $1 = "uKd1uMs9"
22534 @end example
22535
22536 Alternatively, a complete password hash can generated in a single step:
22537
22538 @example
22539 scheme@@(guix-user)> (transmission-password-hash "transmission"
22540 (transmission-random-salt))
22541 $2 = "@{c8bbc6d1740cd8dc819a6e25563b67812c1c19c9VtFPfdsX"
22542 @end example
22543
22544 The resulting string can be used as-is for the value of
22545 @code{rpc-password}, allowing the password to be kept hidden even in the
22546 operating-system configuration.
22547
22548 Torrent files downloaded by the daemon are directly accessible only to
22549 users in the ``transmission'' user group, who receive read-only access
22550 to the directory specified by the @code{download-dir} configuration
22551 setting (and also the directory specified by @code{incomplete-dir}, if
22552 @code{incomplete-dir-enabled?} is @code{#t}). Downloaded files can be
22553 moved to another directory or deleted altogether using
22554 @command{transmission-remote} with its @code{--move} and
22555 @code{--remove-and-delete} options.
22556
22557 If the @code{watch-dir-enabled?} setting is set to @code{#t}, users in
22558 the ``transmission'' group are able also to place @file{.torrent} files
22559 in the directory specified by @code{watch-dir} to have the corresponding
22560 torrents added by the daemon. (The @code{trash-original-torrent-files?}
22561 setting controls whether the daemon deletes these files after processing
22562 them.)
22563
22564 Some of the daemon's configuration settings can be changed temporarily
22565 by @command{transmission-remote} and similar tools. To undo these
22566 changes, use the service's @code{reload} action to have the daemon
22567 reload its settings from disk:
22568
22569 @example
22570 # herd reload transmission-daemon
22571 @end example
22572
22573 The full set of available configuration settings is defined by the
22574 @code{transmission-daemon-configuration} data type.
22575
22576 @deftp {Data Type} transmission-daemon-configuration
22577 The data type representing configuration settings for Transmission
22578 Daemon. These correspond directly to the settings recognized by
22579 Transmission clients in their @file{settings.json} file.
22580 @end deftp
22581
22582 @c The following documentation was initially generated by
22583 @c (generate-transmission-daemon-documentation) in (gnu services
22584 @c file-sharing). Manually maintained documentation is better, so we
22585 @c shouldn't hesitate to edit below as needed. However if the change
22586 @c you want to make to this documentation can be done in an automated
22587 @c way, it's probably easier to change (generate-documentation) than to
22588 @c make it below and have to deal with the churn as Transmission Daemon
22589 @c updates.
22590
22591 @c %start of fragment
22592
22593 Available @code{transmission-daemon-configuration} fields are:
22594
22595 @deftypevr {@code{transmission-daemon-configuration} parameter} package transmission
22596 The Transmission package to use.
22597
22598 @end deftypevr
22599
22600 @deftypevr {@code{transmission-daemon-configuration} parameter} non-negative-integer stop-wait-period
22601 The period, in seconds, to wait when stopping the service for
22602 @command{transmission-daemon} to exit before killing its process. This
22603 allows the daemon time to complete its housekeeping and send a final
22604 update to trackers as it shuts down. On slow hosts, or hosts with a
22605 slow network connection, this value may need to be increased.
22606
22607 Defaults to @samp{10}.
22608
22609 @end deftypevr
22610
22611 @deftypevr {@code{transmission-daemon-configuration} parameter} string download-dir
22612 The directory to which torrent files are downloaded.
22613
22614 Defaults to @samp{"/var/lib/transmission-daemon/downloads"}.
22615
22616 @end deftypevr
22617
22618 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean incomplete-dir-enabled?
22619 If @code{#t}, files will be held in @code{incomplete-dir} while their
22620 torrent is being downloaded, then moved to @code{download-dir} once the
22621 torrent is complete. Otherwise, files for all torrents (including those
22622 still being downloaded) will be placed in @code{download-dir}.
22623
22624 Defaults to @samp{#f}.
22625
22626 @end deftypevr
22627
22628 @deftypevr {@code{transmission-daemon-configuration} parameter} maybe-string incomplete-dir
22629 The directory in which files from incompletely downloaded torrents will
22630 be held when @code{incomplete-dir-enabled?} is @code{#t}.
22631
22632 Defaults to @samp{disabled}.
22633
22634 @end deftypevr
22635
22636 @deftypevr {@code{transmission-daemon-configuration} parameter} umask umask
22637 The file mode creation mask used for downloaded files. (See the
22638 @command{umask} man page for more information.)
22639
22640 Defaults to @samp{18}.
22641
22642 @end deftypevr
22643
22644 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean rename-partial-files?
22645 When @code{#t}, ``.part'' is appended to the name of partially
22646 downloaded files.
22647
22648 Defaults to @samp{#t}.
22649
22650 @end deftypevr
22651
22652 @deftypevr {@code{transmission-daemon-configuration} parameter} preallocation-mode preallocation
22653 The mode by which space should be preallocated for downloaded files, one
22654 of @code{none}, @code{fast} (or @code{sparse}) and @code{full}.
22655 Specifying @code{full} will minimize disk fragmentation at a cost to
22656 file-creation speed.
22657
22658 Defaults to @samp{fast}.
22659
22660 @end deftypevr
22661
22662 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean watch-dir-enabled?
22663 If @code{#t}, the directory specified by @code{watch-dir} will be
22664 watched for new @file{.torrent} files and the torrents they describe
22665 added automatically (and the original files removed, if
22666 @code{trash-original-torrent-files?} is @code{#t}).
22667
22668 Defaults to @samp{#f}.
22669
22670 @end deftypevr
22671
22672 @deftypevr {@code{transmission-daemon-configuration} parameter} maybe-string watch-dir
22673 The directory to be watched for @file{.torrent} files indicating new
22674 torrents to be added, when @code{watch-dir-enabled} is @code{#t}.
22675
22676 Defaults to @samp{disabled}.
22677
22678 @end deftypevr
22679
22680 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean trash-original-torrent-files?
22681 When @code{#t}, @file{.torrent} files will be deleted from the watch
22682 directory once their torrent has been added (see
22683 @code{watch-directory-enabled?}).
22684
22685 Defaults to @samp{#f}.
22686
22687 @end deftypevr
22688
22689 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean speed-limit-down-enabled?
22690 When @code{#t}, the daemon's download speed will be limited to the rate
22691 specified by @code{speed-limit-down}.
22692
22693 Defaults to @samp{#f}.
22694
22695 @end deftypevr
22696
22697 @deftypevr {@code{transmission-daemon-configuration} parameter} non-negative-integer speed-limit-down
22698 The default global-maximum download speed, in kilobytes per second.
22699
22700 Defaults to @samp{100}.
22701
22702 @end deftypevr
22703
22704 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean speed-limit-up-enabled?
22705 When @code{#t}, the daemon's upload speed will be limited to the rate
22706 specified by @code{speed-limit-up}.
22707
22708 Defaults to @samp{#f}.
22709
22710 @end deftypevr
22711
22712 @deftypevr {@code{transmission-daemon-configuration} parameter} non-negative-integer speed-limit-up
22713 The default global-maximum upload speed, in kilobytes per second.
22714
22715 Defaults to @samp{100}.
22716
22717 @end deftypevr
22718
22719 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean alt-speed-enabled?
22720 When @code{#t}, the alternate speed limits @code{alt-speed-down} and
22721 @code{alt-speed-up} are used (in place of @code{speed-limit-down} and
22722 @code{speed-limit-up}, if they are enabled) to constrain the daemon's
22723 bandwidth usage. This can be scheduled to occur automatically at
22724 certain times during the week; see @code{alt-speed-time-enabled?}.
22725
22726 Defaults to @samp{#f}.
22727
22728 @end deftypevr
22729
22730 @deftypevr {@code{transmission-daemon-configuration} parameter} non-negative-integer alt-speed-down
22731 The alternate global-maximum download speed, in kilobytes per second.
22732
22733 Defaults to @samp{50}.
22734
22735 @end deftypevr
22736
22737 @deftypevr {@code{transmission-daemon-configuration} parameter} non-negative-integer alt-speed-up
22738 The alternate global-maximum upload speed, in kilobytes per second.
22739
22740 Defaults to @samp{50}.
22741
22742 @end deftypevr
22743
22744 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean alt-speed-time-enabled?
22745 When @code{#t}, the alternate speed limits @code{alt-speed-down} and
22746 @code{alt-speed-up} will be enabled automatically during the periods
22747 specified by @code{alt-speed-time-day}, @code{alt-speed-time-begin} and
22748 @code{alt-time-speed-end}.
22749
22750 Defaults to @samp{#f}.
22751
22752 @end deftypevr
22753
22754 @deftypevr {@code{transmission-daemon-configuration} parameter} day-list alt-speed-time-day
22755 The days of the week on which the alternate-speed schedule should be
22756 used, specified either as a list of days (@code{sunday}, @code{monday},
22757 and so on) or using one of the symbols @code{weekdays}, @code{weekends}
22758 or @code{all}.
22759
22760 Defaults to @samp{all}.
22761
22762 @end deftypevr
22763
22764 @deftypevr {@code{transmission-daemon-configuration} parameter} non-negative-integer alt-speed-time-begin
22765 The time of day at which to enable the alternate speed limits, expressed
22766 as a number of minutes since midnight.
22767
22768 Defaults to @samp{540}.
22769
22770 @end deftypevr
22771
22772 @deftypevr {@code{transmission-daemon-configuration} parameter} non-negative-integer alt-speed-time-end
22773 The time of day at which to disable the alternate speed limits,
22774 expressed as a number of minutes since midnight.
22775
22776 Defaults to @samp{1020}.
22777
22778 @end deftypevr
22779
22780 @deftypevr {@code{transmission-daemon-configuration} parameter} string bind-address-ipv4
22781 The IP address at which to listen for peer connections, or ``0.0.0.0''
22782 to listen at all available IP addresses.
22783
22784 Defaults to @samp{"0.0.0.0"}.
22785
22786 @end deftypevr
22787
22788 @deftypevr {@code{transmission-daemon-configuration} parameter} string bind-address-ipv6
22789 The IPv6 address at which to listen for peer connections, or ``::'' to
22790 listen at all available IPv6 addresses.
22791
22792 Defaults to @samp{"::"}.
22793
22794 @end deftypevr
22795
22796 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean peer-port-random-on-start?
22797 If @code{#t}, when the daemon starts it will select a port at random on
22798 which to listen for peer connections, from the range specified
22799 (inclusively) by @code{peer-port-random-low} and
22800 @code{peer-port-random-high}. Otherwise, it listens on the port
22801 specified by @code{peer-port}.
22802
22803 Defaults to @samp{#f}.
22804
22805 @end deftypevr
22806
22807 @deftypevr {@code{transmission-daemon-configuration} parameter} port-number peer-port-random-low
22808 The lowest selectable port number when @code{peer-port-random-on-start?}
22809 is @code{#t}.
22810
22811 Defaults to @samp{49152}.
22812
22813 @end deftypevr
22814
22815 @deftypevr {@code{transmission-daemon-configuration} parameter} port-number peer-port-random-high
22816 The highest selectable port number when @code{peer-port-random-on-start}
22817 is @code{#t}.
22818
22819 Defaults to @samp{65535}.
22820
22821 @end deftypevr
22822
22823 @deftypevr {@code{transmission-daemon-configuration} parameter} port-number peer-port
22824 The port on which to listen for peer connections when
22825 @code{peer-port-random-on-start?} is @code{#f}.
22826
22827 Defaults to @samp{51413}.
22828
22829 @end deftypevr
22830
22831 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean port-forwarding-enabled?
22832 If @code{#t}, the daemon will attempt to configure port-forwarding on an
22833 upstream gateway automatically using @acronym{UPnP} and
22834 @acronym{NAT-PMP}.
22835
22836 Defaults to @samp{#t}.
22837
22838 @end deftypevr
22839
22840 @deftypevr {@code{transmission-daemon-configuration} parameter} encryption-mode encryption
22841 The encryption preference for peer connections, one of
22842 @code{prefer-unencrypted-connections},
22843 @code{prefer-encrypted-connections} or
22844 @code{require-encrypted-connections}.
22845
22846 Defaults to @samp{prefer-encrypted-connections}.
22847
22848 @end deftypevr
22849
22850 @deftypevr {@code{transmission-daemon-configuration} parameter} maybe-string peer-congestion-algorithm
22851 The TCP congestion-control algorithm to use for peer connections,
22852 specified using a string recognized by the operating system in calls to
22853 @code{setsockopt} (or set to @code{disabled}, in which case the
22854 operating-system default is used).
22855
22856 Note that on GNU/Linux systems, the kernel must be configured to allow
22857 processes to use a congestion-control algorithm not in the default set;
22858 otherwise, it will deny these requests with ``Operation not permitted''.
22859 To see which algorithms are available on your system and which are
22860 currently permitted for use, look at the contents of the files
22861 @file{tcp_available_congestion_control} and
22862 @file{tcp_allowed_congestion_control} in the @file{/proc/sys/net/ipv4}
22863 directory.
22864
22865 As an example, to have Transmission Daemon use
22866 @uref{http://www-ece.rice.edu/networks/TCP-LP/,the TCP Low Priority
22867 congestion-control algorithm}, you'll need to modify your kernel
22868 configuration to build in support for the algorithm, then update your
22869 operating-system configuration to allow its use by adding a
22870 @code{sysctl-service-type} service (or updating the existing one's
22871 configuration) with lines like the following:
22872
22873 @lisp
22874 (service sysctl-service-type
22875 (sysctl-configuration
22876 (settings
22877 ("net.ipv4.tcp_allowed_congestion_control" .
22878 "reno cubic lp"))))
22879 @end lisp
22880
22881 The Transmission Daemon configuration can then be updated with
22882
22883 @lisp
22884 (peer-congestion-algorithm "lp")
22885 @end lisp
22886
22887 and the system reconfigured to have the changes take effect.
22888
22889 Defaults to @samp{disabled}.
22890
22891 @end deftypevr
22892
22893 @deftypevr {@code{transmission-daemon-configuration} parameter} tcp-type-of-service peer-socket-tos
22894 The type of service to request in outgoing @acronym{TCP} packets, one of
22895 @code{default}, @code{low-cost}, @code{throughput}, @code{low-delay} and
22896 @code{reliability}.
22897
22898 Defaults to @samp{default}.
22899
22900 @end deftypevr
22901
22902 @deftypevr {@code{transmission-daemon-configuration} parameter} non-negative-integer peer-limit-global
22903 The global limit on the number of connected peers.
22904
22905 Defaults to @samp{200}.
22906
22907 @end deftypevr
22908
22909 @deftypevr {@code{transmission-daemon-configuration} parameter} non-negative-integer peer-limit-per-torrent
22910 The per-torrent limit on the number of connected peers.
22911
22912 Defaults to @samp{50}.
22913
22914 @end deftypevr
22915
22916 @deftypevr {@code{transmission-daemon-configuration} parameter} non-negative-integer upload-slots-per-torrent
22917 The maximum number of peers to which the daemon will upload data
22918 simultaneously for each torrent.
22919
22920 Defaults to @samp{14}.
22921
22922 @end deftypevr
22923
22924 @deftypevr {@code{transmission-daemon-configuration} parameter} non-negative-integer peer-id-ttl-hours
22925 The maximum lifespan, in hours, of the peer ID associated with each
22926 public torrent before it is regenerated.
22927
22928 Defaults to @samp{6}.
22929
22930 @end deftypevr
22931
22932 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean blocklist-enabled?
22933 When @code{#t}, the daemon will ignore peers mentioned in the blocklist
22934 it has most recently downloaded from @code{blocklist-url}.
22935
22936 Defaults to @samp{#f}.
22937
22938 @end deftypevr
22939
22940 @deftypevr {@code{transmission-daemon-configuration} parameter} maybe-string blocklist-url
22941 The URL of a peer blocklist (in @acronym{P2P}-plaintext or eMule
22942 @file{.dat} format) to be periodically downloaded and applied when
22943 @code{blocklist-enabled?} is @code{#t}.
22944
22945 Defaults to @samp{disabled}.
22946
22947 @end deftypevr
22948
22949 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean download-queue-enabled?
22950 If @code{#t}, the daemon will be limited to downloading at most
22951 @code{download-queue-size} non-stalled torrents simultaneously.
22952
22953 Defaults to @samp{#t}.
22954
22955 @end deftypevr
22956
22957 @deftypevr {@code{transmission-daemon-configuration} parameter} non-negative-integer download-queue-size
22958 The size of the daemon's download queue, which limits the number of
22959 non-stalled torrents it will download at any one time when
22960 @code{download-queue-enabled?} is @code{#t}.
22961
22962 Defaults to @samp{5}.
22963
22964 @end deftypevr
22965
22966 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean seed-queue-enabled?
22967 If @code{#t}, the daemon will be limited to seeding at most
22968 @code{seed-queue-size} non-stalled torrents simultaneously.
22969
22970 Defaults to @samp{#f}.
22971
22972 @end deftypevr
22973
22974 @deftypevr {@code{transmission-daemon-configuration} parameter} non-negative-integer seed-queue-size
22975 The size of the daemon's seed queue, which limits the number of
22976 non-stalled torrents it will seed at any one time when
22977 @code{seed-queue-enabled?} is @code{#t}.
22978
22979 Defaults to @samp{10}.
22980
22981 @end deftypevr
22982
22983 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean queue-stalled-enabled?
22984 When @code{#t}, the daemon will consider torrents for which it has not
22985 shared data in the past @code{queue-stalled-minutes} minutes to be
22986 stalled and not count them against its @code{download-queue-size} and
22987 @code{seed-queue-size} limits.
22988
22989 Defaults to @samp{#t}.
22990
22991 @end deftypevr
22992
22993 @deftypevr {@code{transmission-daemon-configuration} parameter} non-negative-integer queue-stalled-minutes
22994 The maximum period, in minutes, a torrent may be idle before it is
22995 considered to be stalled, when @code{queue-stalled-enabled?} is
22996 @code{#t}.
22997
22998 Defaults to @samp{30}.
22999
23000 @end deftypevr
23001
23002 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean ratio-limit-enabled?
23003 When @code{#t}, a torrent being seeded will automatically be paused once
23004 it reaches the ratio specified by @code{ratio-limit}.
23005
23006 Defaults to @samp{#f}.
23007
23008 @end deftypevr
23009
23010 @deftypevr {@code{transmission-daemon-configuration} parameter} non-negative-rational ratio-limit
23011 The ratio at which a torrent being seeded will be paused, when
23012 @code{ratio-limit-enabled?} is @code{#t}.
23013
23014 Defaults to @samp{2.0}.
23015
23016 @end deftypevr
23017
23018 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean idle-seeding-limit-enabled?
23019 When @code{#t}, a torrent being seeded will automatically be paused once
23020 it has been idle for @code{idle-seeding-limit} minutes.
23021
23022 Defaults to @samp{#f}.
23023
23024 @end deftypevr
23025
23026 @deftypevr {@code{transmission-daemon-configuration} parameter} non-negative-integer idle-seeding-limit
23027 The maximum period, in minutes, a torrent being seeded may be idle
23028 before it is paused, when @code{idle-seeding-limit-enabled?} is
23029 @code{#t}.
23030
23031 Defaults to @samp{30}.
23032
23033 @end deftypevr
23034
23035 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean dht-enabled?
23036 Enable @uref{http://bittorrent.org/beps/bep_0005.html,the distributed
23037 hash table (@acronym{DHT}) protocol}, which supports the use of
23038 trackerless torrents.
23039
23040 Defaults to @samp{#t}.
23041
23042 @end deftypevr
23043
23044 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean lpd-enabled?
23045 Enable @uref{https://en.wikipedia.org/wiki/Local_Peer_Discovery,local
23046 peer discovery} (@acronym{LPD}), which allows the discovery of peers on
23047 the local network and may reduce the amount of data sent over the public
23048 Internet.
23049
23050 Defaults to @samp{#f}.
23051
23052 @end deftypevr
23053
23054 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean pex-enabled?
23055 Enable @uref{https://en.wikipedia.org/wiki/Peer_exchange,peer exchange}
23056 (@acronym{PEX}), which reduces the daemon's reliance on external
23057 trackers and may improve its performance.
23058
23059 Defaults to @samp{#t}.
23060
23061 @end deftypevr
23062
23063 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean utp-enabled?
23064 Enable @uref{http://bittorrent.org/beps/bep_0029.html,the micro
23065 transport protocol} (@acronym{uTP}), which aims to reduce the impact of
23066 BitTorrent traffic on other users of the local network while maintaining
23067 full utilization of the available bandwidth.
23068
23069 Defaults to @samp{#t}.
23070
23071 @end deftypevr
23072
23073 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean rpc-enabled?
23074 If @code{#t}, enable the remote procedure call (@acronym{RPC})
23075 interface, which allows remote control of the daemon via its Web
23076 interface, the @command{transmission-remote} command-line client, and
23077 similar tools.
23078
23079 Defaults to @samp{#t}.
23080
23081 @end deftypevr
23082
23083 @deftypevr {@code{transmission-daemon-configuration} parameter} string rpc-bind-address
23084 The IP address at which to listen for @acronym{RPC} connections, or
23085 ``0.0.0.0'' to listen at all available IP addresses.
23086
23087 Defaults to @samp{"0.0.0.0"}.
23088
23089 @end deftypevr
23090
23091 @deftypevr {@code{transmission-daemon-configuration} parameter} port-number rpc-port
23092 The port on which to listen for @acronym{RPC} connections.
23093
23094 Defaults to @samp{9091}.
23095
23096 @end deftypevr
23097
23098 @deftypevr {@code{transmission-daemon-configuration} parameter} string rpc-url
23099 The path prefix to use in the @acronym{RPC}-endpoint @acronym{URL}.
23100
23101 Defaults to @samp{"/transmission/"}.
23102
23103 @end deftypevr
23104
23105 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean rpc-authentication-required?
23106 When @code{#t}, clients must authenticate (see @code{rpc-username} and
23107 @code{rpc-password}) when using the @acronym{RPC} interface. Note this
23108 has the side effect of disabling host-name whitelisting (see
23109 @code{rpc-host-whitelist-enabled?}.
23110
23111 Defaults to @samp{#f}.
23112
23113 @end deftypevr
23114
23115 @deftypevr {@code{transmission-daemon-configuration} parameter} maybe-string rpc-username
23116 The username required by clients to access the @acronym{RPC} interface
23117 when @code{rpc-authentication-required?} is @code{#t}.
23118
23119 Defaults to @samp{disabled}.
23120
23121 @end deftypevr
23122
23123 @deftypevr {@code{transmission-daemon-configuration} parameter} maybe-transmission-password-hash rpc-password
23124 The password required by clients to access the @acronym{RPC} interface
23125 when @code{rpc-authentication-required?} is @code{#t}. This must be
23126 specified using a password hash in the format recognized by Transmission
23127 clients, either copied from an existing @file{settings.json} file or
23128 generated using the @code{transmission-password-hash} procedure.
23129
23130 Defaults to @samp{disabled}.
23131
23132 @end deftypevr
23133
23134 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean rpc-whitelist-enabled?
23135 When @code{#t}, @acronym{RPC} requests will be accepted only when they
23136 originate from an address specified in @code{rpc-whitelist}.
23137
23138 Defaults to @samp{#t}.
23139
23140 @end deftypevr
23141
23142 @deftypevr {@code{transmission-daemon-configuration} parameter} string-list rpc-whitelist
23143 The list of IP and IPv6 addresses from which @acronym{RPC} requests will
23144 be accepted when @code{rpc-whitelist-enabled?} is @code{#t}. Wildcards
23145 may be specified using @samp{*}.
23146
23147 Defaults to @samp{("127.0.0.1" "::1")}.
23148
23149 @end deftypevr
23150
23151 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean rpc-host-whitelist-enabled?
23152 When @code{#t}, @acronym{RPC} requests will be accepted only when they
23153 are addressed to a host named in @code{rpc-host-whitelist}. Note that
23154 requests to ``localhost'' or ``localhost.'', or to a numeric address,
23155 are always accepted regardless of these settings.
23156
23157 Note also this functionality is disabled when
23158 @code{rpc-authentication-required?} is @code{#t}.
23159
23160 Defaults to @samp{#t}.
23161
23162 @end deftypevr
23163
23164 @deftypevr {@code{transmission-daemon-configuration} parameter} string-list rpc-host-whitelist
23165 The list of host names recognized by the @acronym{RPC} server when
23166 @code{rpc-host-whitelist-enabled?} is @code{#t}.
23167
23168 Defaults to @samp{()}.
23169
23170 @end deftypevr
23171
23172 @deftypevr {@code{transmission-daemon-configuration} parameter} message-level message-level
23173 The minimum severity level of messages to be logged (to
23174 @file{/var/log/transmission.log}) by the daemon, one of @code{none} (no
23175 logging), @code{error}, @code{info} and @code{debug}.
23176
23177 Defaults to @samp{info}.
23178
23179 @end deftypevr
23180
23181 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean start-added-torrents?
23182 When @code{#t}, torrents are started as soon as they are added;
23183 otherwise, they are added in ``paused'' state.
23184
23185 Defaults to @samp{#t}.
23186
23187 @end deftypevr
23188
23189 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean script-torrent-done-enabled?
23190 When @code{#t}, the script specified by
23191 @code{script-torrent-done-filename} will be invoked each time a torrent
23192 completes.
23193
23194 Defaults to @samp{#f}.
23195
23196 @end deftypevr
23197
23198 @deftypevr {@code{transmission-daemon-configuration} parameter} maybe-file-object script-torrent-done-filename
23199 A file name or file-like object specifying a script to run each time a
23200 torrent completes, when @code{script-torrent-done-enabled?} is
23201 @code{#t}.
23202
23203 Defaults to @samp{disabled}.
23204
23205 @end deftypevr
23206
23207 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean scrape-paused-torrents-enabled?
23208 When @code{#t}, the daemon will scrape trackers for a torrent even when
23209 the torrent is paused.
23210
23211 Defaults to @samp{#t}.
23212
23213 @end deftypevr
23214
23215 @deftypevr {@code{transmission-daemon-configuration} parameter} non-negative-integer cache-size-mb
23216 The amount of memory, in megabytes, to allocate for the daemon's
23217 in-memory cache. A larger value may increase performance by reducing
23218 the frequency of disk I/O.
23219
23220 Defaults to @samp{4}.
23221
23222 @end deftypevr
23223
23224 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean prefetch-enabled?
23225 When @code{#t}, the daemon will try to improve I/O performance by
23226 hinting to the operating system which data is likely to be read next
23227 from disk to satisfy requests from peers.
23228
23229 Defaults to @samp{#t}.
23230
23231 @end deftypevr
23232
23233
23234 @c %end of fragment
23235
23236
23237
23238 @node Monitoring Services
23239 @subsection Monitoring Services
23240
23241 @subsubheading Tailon Service
23242
23243 @uref{https://tailon.readthedocs.io/, Tailon} is a web application for
23244 viewing and searching log files.
23245
23246 The following example will configure the service with default values.
23247 By default, Tailon can be accessed on port 8080 (@code{http://localhost:8080}).
23248
23249 @lisp
23250 (service tailon-service-type)
23251 @end lisp
23252
23253 The following example customises more of the Tailon configuration,
23254 adding @command{sed} to the list of allowed commands.
23255
23256 @lisp
23257 (service tailon-service-type
23258 (tailon-configuration
23259 (config-file
23260 (tailon-configuration-file
23261 (allowed-commands '("tail" "grep" "awk" "sed"))))))
23262 @end lisp
23263
23264
23265 @deftp {Data Type} tailon-configuration
23266 Data type representing the configuration of Tailon.
23267 This type has the following parameters:
23268
23269 @table @asis
23270 @item @code{config-file} (default: @code{(tailon-configuration-file)})
23271 The configuration file to use for Tailon. This can be set to a
23272 @dfn{tailon-configuration-file} record value, or any gexp
23273 (@pxref{G-Expressions}).
23274
23275 For example, to instead use a local file, the @code{local-file} function
23276 can be used:
23277
23278 @lisp
23279 (service tailon-service-type
23280 (tailon-configuration
23281 (config-file (local-file "./my-tailon.conf"))))
23282 @end lisp
23283
23284 @item @code{package} (default: @code{tailon})
23285 The tailon package to use.
23286
23287 @end table
23288 @end deftp
23289
23290 @deftp {Data Type} tailon-configuration-file
23291 Data type representing the configuration options for Tailon.
23292 This type has the following parameters:
23293
23294 @table @asis
23295 @item @code{files} (default: @code{(list "/var/log")})
23296 List of files to display. The list can include strings for a single file
23297 or directory, or a list, where the first item is the name of a
23298 subsection, and the remaining items are the files or directories in that
23299 subsection.
23300
23301 @item @code{bind} (default: @code{"localhost:8080"})
23302 Address and port to which Tailon should bind on.
23303
23304 @item @code{relative-root} (default: @code{#f})
23305 URL path to use for Tailon, set to @code{#f} to not use a path.
23306
23307 @item @code{allow-transfers?} (default: @code{#t})
23308 Allow downloading the log files in the web interface.
23309
23310 @item @code{follow-names?} (default: @code{#t})
23311 Allow tailing of not-yet existent files.
23312
23313 @item @code{tail-lines} (default: @code{200})
23314 Number of lines to read initially from each file.
23315
23316 @item @code{allowed-commands} (default: @code{(list "tail" "grep" "awk")})
23317 Commands to allow running. By default, @code{sed} is disabled.
23318
23319 @item @code{debug?} (default: @code{#f})
23320 Set @code{debug?} to @code{#t} to show debug messages.
23321
23322 @item @code{wrap-lines} (default: @code{#t})
23323 Initial line wrapping state in the web interface. Set to @code{#t} to
23324 initially wrap lines (the default), or to @code{#f} to initially not
23325 wrap lines.
23326
23327 @item @code{http-auth} (default: @code{#f})
23328 HTTP authentication type to use. Set to @code{#f} to disable
23329 authentication (the default). Supported values are @code{"digest"} or
23330 @code{"basic"}.
23331
23332 @item @code{users} (default: @code{#f})
23333 If HTTP authentication is enabled (see @code{http-auth}), access will be
23334 restricted to the credentials provided here. To configure users, use a
23335 list of pairs, where the first element of the pair is the username, and
23336 the 2nd element of the pair is the password.
23337
23338 @lisp
23339 (tailon-configuration-file
23340 (http-auth "basic")
23341 (users '(("user1" . "password1")
23342 ("user2" . "password2"))))
23343 @end lisp
23344
23345 @end table
23346 @end deftp
23347
23348
23349 @subsubheading Darkstat Service
23350 @cindex darkstat
23351 Darkstat is a packet sniffer that captures network traffic, calculates
23352 statistics about usage, and serves reports over HTTP.
23353
23354 @defvar {Scheme Variable} darkstat-service-type
23355 This is the service type for the
23356 @uref{https://unix4lyfe.org/darkstat/, darkstat}
23357 service, its value must be a @code{darkstat-configuration} record as in
23358 this example:
23359
23360 @lisp
23361 (service darkstat-service-type
23362 (darkstat-configuration
23363 (interface "eno1")))
23364 @end lisp
23365 @end defvar
23366
23367 @deftp {Data Type} darkstat-configuration
23368 Data type representing the configuration of @command{darkstat}.
23369
23370 @table @asis
23371 @item @code{package} (default: @code{darkstat})
23372 The darkstat package to use.
23373
23374 @item @code{interface}
23375 Capture traffic on the specified network interface.
23376
23377 @item @code{port} (default: @code{"667"})
23378 Bind the web interface to the specified port.
23379
23380 @item @code{bind-address} (default: @code{"127.0.0.1"})
23381 Bind the web interface to the specified address.
23382
23383 @item @code{base} (default: @code{"/"})
23384 Specify the path of the base URL@. This can be useful if
23385 @command{darkstat} is accessed via a reverse proxy.
23386
23387 @end table
23388 @end deftp
23389
23390 @subsubheading Prometheus Node Exporter Service
23391
23392 @cindex prometheus-node-exporter
23393 The Prometheus ``node exporter'' makes hardware and operating system statistics
23394 provided by the Linux kernel available for the Prometheus monitoring system.
23395 This service should be deployed on all physical nodes and virtual machines,
23396 where monitoring these statistics is desirable.
23397
23398 @defvar {Scheme variable} prometheus-node-exporter-service-type
23399 This is the service type for the
23400 @uref{https://github.com/prometheus/node_exporter/, prometheus-node-exporter}
23401 service, its value must be a @code{prometheus-node-exporter-configuration}.
23402
23403 @lisp
23404 (service prometheus-node-exporter-service-type)
23405 @end lisp
23406 @end defvar
23407
23408 @deftp {Data Type} prometheus-node-exporter-configuration
23409 Data type representing the configuration of @command{node_exporter}.
23410
23411 @table @asis
23412 @item @code{package} (default: @code{go-github-com-prometheus-node-exporter})
23413 The prometheus-node-exporter package to use.
23414
23415 @item @code{web-listen-address} (default: @code{":9100"})
23416 Bind the web interface to the specified address.
23417
23418 @item @code{textfile-directory} (default: @code{"/var/lib/prometheus/node-exporter"})
23419 This directory can be used to export metrics specific to this machine.
23420 Files containing metrics in the text format, with the filename ending in
23421 @code{.prom} should be placed in this directory.
23422
23423 @item @code{extra-options} (default: @code{'()})
23424 Extra options to pass to the Prometheus node exporter.
23425
23426 @end table
23427 @end deftp
23428
23429 @subsubheading Zabbix server
23430 @cindex zabbix zabbix-server
23431 Zabbix provides monitoring metrics, among others network utilization, CPU load
23432 and disk space consumption:
23433
23434 @itemize
23435 @item High performance, high capacity (able to monitor hundreds of thousands of devices).
23436 @item Auto-discovery of servers and network devices and interfaces.
23437 @item Low-level discovery, allows to automatically start monitoring new items, file systems or network interfaces among others.
23438 @item Distributed monitoring with centralized web administration.
23439 @item Native high performance agents.
23440 @item SLA, and ITIL KPI metrics on reporting.
23441 @item High-level (business) view of monitored resources through user-defined visual console screens and dashboards.
23442 @item Remote command execution through Zabbix proxies.
23443 @end itemize
23444
23445 @c %start of fragment
23446
23447 Available @code{zabbix-server-configuration} fields are:
23448
23449 @deftypevr {@code{zabbix-server-configuration} parameter} package zabbix-server
23450 The zabbix-server package.
23451
23452 @end deftypevr
23453
23454 @deftypevr {@code{zabbix-server-configuration} parameter} string user
23455 User who will run the Zabbix server.
23456
23457 Defaults to @samp{"zabbix"}.
23458
23459 @end deftypevr
23460
23461 @deftypevr {@code{zabbix-server-configuration} parameter} group group
23462 Group who will run the Zabbix server.
23463
23464 Defaults to @samp{"zabbix"}.
23465
23466 @end deftypevr
23467
23468 @deftypevr {@code{zabbix-server-configuration} parameter} string db-host
23469 Database host name.
23470
23471 Defaults to @samp{"127.0.0.1"}.
23472
23473 @end deftypevr
23474
23475 @deftypevr {@code{zabbix-server-configuration} parameter} string db-name
23476 Database name.
23477
23478 Defaults to @samp{"zabbix"}.
23479
23480 @end deftypevr
23481
23482 @deftypevr {@code{zabbix-server-configuration} parameter} string db-user
23483 Database user.
23484
23485 Defaults to @samp{"zabbix"}.
23486
23487 @end deftypevr
23488
23489 @deftypevr {@code{zabbix-server-configuration} parameter} string db-password
23490 Database password. Please, use @code{include-files} with
23491 @code{DBPassword=SECRET} inside a specified file instead.
23492
23493 Defaults to @samp{""}.
23494
23495 @end deftypevr
23496
23497 @deftypevr {@code{zabbix-server-configuration} parameter} number db-port
23498 Database port.
23499
23500 Defaults to @samp{5432}.
23501
23502 @end deftypevr
23503
23504 @deftypevr {@code{zabbix-server-configuration} parameter} string log-type
23505 Specifies where log messages are written to:
23506
23507 @itemize @bullet
23508 @item
23509 @code{system} - syslog.
23510
23511 @item
23512 @code{file} - file specified with @code{log-file} parameter.
23513
23514 @item
23515 @code{console} - standard output.
23516
23517 @end itemize
23518
23519 Defaults to @samp{""}.
23520
23521 @end deftypevr
23522
23523 @deftypevr {@code{zabbix-server-configuration} parameter} string log-file
23524 Log file name for @code{log-type} @code{file} parameter.
23525
23526 Defaults to @samp{"/var/log/zabbix/server.log"}.
23527
23528 @end deftypevr
23529
23530 @deftypevr {@code{zabbix-server-configuration} parameter} string pid-file
23531 Name of PID file.
23532
23533 Defaults to @samp{"/var/run/zabbix/zabbix_server.pid"}.
23534
23535 @end deftypevr
23536
23537 @deftypevr {@code{zabbix-server-configuration} parameter} string ssl-ca-location
23538 The location of certificate authority (CA) files for SSL server
23539 certificate verification.
23540
23541 Defaults to @samp{"/etc/ssl/certs/ca-certificates.crt"}.
23542
23543 @end deftypevr
23544
23545 @deftypevr {@code{zabbix-server-configuration} parameter} string ssl-cert-location
23546 Location of SSL client certificates.
23547
23548 Defaults to @samp{"/etc/ssl/certs"}.
23549
23550 @end deftypevr
23551
23552 @deftypevr {@code{zabbix-server-configuration} parameter} string extra-options
23553 Extra options will be appended to Zabbix server configuration file.
23554
23555 Defaults to @samp{""}.
23556
23557 @end deftypevr
23558
23559 @deftypevr {@code{zabbix-server-configuration} parameter} include-files include-files
23560 You may include individual files or all files in a directory in the
23561 configuration file.
23562
23563 Defaults to @samp{()}.
23564
23565 @end deftypevr
23566
23567 @c %end of fragment
23568
23569 @subsubheading Zabbix agent
23570 @cindex zabbix zabbix-agent
23571
23572 Zabbix agent gathers information for Zabbix server.
23573
23574 @c %start of fragment
23575
23576 Available @code{zabbix-agent-configuration} fields are:
23577
23578 @deftypevr {@code{zabbix-agent-configuration} parameter} package zabbix-agent
23579 The zabbix-agent package.
23580
23581 @end deftypevr
23582
23583 @deftypevr {@code{zabbix-agent-configuration} parameter} string user
23584 User who will run the Zabbix agent.
23585
23586 Defaults to @samp{"zabbix"}.
23587
23588 @end deftypevr
23589
23590 @deftypevr {@code{zabbix-agent-configuration} parameter} group group
23591 Group who will run the Zabbix agent.
23592
23593 Defaults to @samp{"zabbix"}.
23594
23595 @end deftypevr
23596
23597 @deftypevr {@code{zabbix-agent-configuration} parameter} string hostname
23598 Unique, case sensitive hostname which is required for active checks and
23599 must match hostname as configured on the server.
23600
23601 Defaults to @samp{""}.
23602
23603 @end deftypevr
23604
23605 @deftypevr {@code{zabbix-agent-configuration} parameter} string log-type
23606 Specifies where log messages are written to:
23607
23608 @itemize @bullet
23609 @item
23610 @code{system} - syslog.
23611
23612 @item
23613 @code{file} - file specified with @code{log-file} parameter.
23614
23615 @item
23616 @code{console} - standard output.
23617
23618 @end itemize
23619
23620 Defaults to @samp{""}.
23621
23622 @end deftypevr
23623
23624 @deftypevr {@code{zabbix-agent-configuration} parameter} string log-file
23625 Log file name for @code{log-type} @code{file} parameter.
23626
23627 Defaults to @samp{"/var/log/zabbix/agent.log"}.
23628
23629 @end deftypevr
23630
23631 @deftypevr {@code{zabbix-agent-configuration} parameter} string pid-file
23632 Name of PID file.
23633
23634 Defaults to @samp{"/var/run/zabbix/zabbix_agent.pid"}.
23635
23636 @end deftypevr
23637
23638 @deftypevr {@code{zabbix-agent-configuration} parameter} list server
23639 List of IP addresses, optionally in CIDR notation, or hostnames of
23640 Zabbix servers and Zabbix proxies. Incoming connections will be
23641 accepted only from the hosts listed here.
23642
23643 Defaults to @samp{("127.0.0.1")}.
23644
23645 @end deftypevr
23646
23647 @deftypevr {@code{zabbix-agent-configuration} parameter} list server-active
23648 List of IP:port (or hostname:port) pairs of Zabbix servers and Zabbix
23649 proxies for active checks. If port is not specified, default port is
23650 used. If this parameter is not specified, active checks are disabled.
23651
23652 Defaults to @samp{("127.0.0.1")}.
23653
23654 @end deftypevr
23655
23656 @deftypevr {@code{zabbix-agent-configuration} parameter} string extra-options
23657 Extra options will be appended to Zabbix server configuration file.
23658
23659 Defaults to @samp{""}.
23660
23661 @end deftypevr
23662
23663 @deftypevr {@code{zabbix-agent-configuration} parameter} include-files include-files
23664 You may include individual files or all files in a directory in the
23665 configuration file.
23666
23667 Defaults to @samp{()}.
23668
23669 @end deftypevr
23670
23671 @c %end of fragment
23672
23673 @subsubheading Zabbix front-end
23674 @cindex zabbix zabbix-front-end
23675
23676 This service provides a WEB interface to Zabbix server.
23677
23678 @c %start of fragment
23679
23680 Available @code{zabbix-front-end-configuration} fields are:
23681
23682 @deftypevr {@code{zabbix-front-end-configuration} parameter} nginx-server-configuration-list nginx
23683 NGINX configuration.
23684
23685 @end deftypevr
23686
23687 @deftypevr {@code{zabbix-front-end-configuration} parameter} string db-host
23688 Database host name.
23689
23690 Defaults to @samp{"localhost"}.
23691
23692 @end deftypevr
23693
23694 @deftypevr {@code{zabbix-front-end-configuration} parameter} number db-port
23695 Database port.
23696
23697 Defaults to @samp{5432}.
23698
23699 @end deftypevr
23700
23701 @deftypevr {@code{zabbix-front-end-configuration} parameter} string db-name
23702 Database name.
23703
23704 Defaults to @samp{"zabbix"}.
23705
23706 @end deftypevr
23707
23708 @deftypevr {@code{zabbix-front-end-configuration} parameter} string db-user
23709 Database user.
23710
23711 Defaults to @samp{"zabbix"}.
23712
23713 @end deftypevr
23714
23715 @deftypevr {@code{zabbix-front-end-configuration} parameter} string db-password
23716 Database password. Please, use @code{db-secret-file} instead.
23717
23718 Defaults to @samp{""}.
23719
23720 @end deftypevr
23721
23722 @deftypevr {@code{zabbix-front-end-configuration} parameter} string db-secret-file
23723 Secret file containing the credentials for the Zabbix front-end. The value
23724 must be a local file name, not a G-expression. You are expected to create
23725 this file manually. Its contents will be copied into @file{zabbix.conf.php}
23726 as the value of @code{$DB['PASSWORD']}.
23727
23728 Defaults to @samp{""}.
23729
23730 @end deftypevr
23731
23732 @deftypevr {@code{zabbix-front-end-configuration} parameter} string zabbix-host
23733 Zabbix server hostname.
23734
23735 Defaults to @samp{"localhost"}.
23736
23737 @end deftypevr
23738
23739 @deftypevr {@code{zabbix-front-end-configuration} parameter} number zabbix-port
23740 Zabbix server port.
23741
23742 Defaults to @samp{10051}.
23743
23744 @end deftypevr
23745
23746
23747 @c %end of fragment
23748
23749 @node Kerberos Services
23750 @subsection Kerberos Services
23751 @cindex Kerberos
23752
23753 The @code{(gnu services kerberos)} module provides services relating to
23754 the authentication protocol @dfn{Kerberos}.
23755
23756 @subsubheading Krb5 Service
23757
23758 Programs using a Kerberos client library normally
23759 expect a configuration file in @file{/etc/krb5.conf}.
23760 This service generates such a file from a definition provided in the
23761 operating system declaration.
23762 It does not cause any daemon to be started.
23763
23764 No ``keytab'' files are provided by this service---you must explicitly create them.
23765 This service is known to work with the MIT client library, @code{mit-krb5}.
23766 Other implementations have not been tested.
23767
23768 @defvr {Scheme Variable} krb5-service-type
23769 A service type for Kerberos 5 clients.
23770 @end defvr
23771
23772 @noindent
23773 Here is an example of its use:
23774 @lisp
23775 (service krb5-service-type
23776 (krb5-configuration
23777 (default-realm "EXAMPLE.COM")
23778 (allow-weak-crypto? #t)
23779 (realms (list
23780 (krb5-realm
23781 (name "EXAMPLE.COM")
23782 (admin-server "groucho.example.com")
23783 (kdc "karl.example.com"))
23784 (krb5-realm
23785 (name "ARGRX.EDU")
23786 (admin-server "kerb-admin.argrx.edu")
23787 (kdc "keys.argrx.edu"))))))
23788 @end lisp
23789
23790 @noindent
23791 This example provides a Kerberos@tie{}5 client configuration which:
23792 @itemize
23793 @item Recognizes two realms, @i{viz:} ``EXAMPLE.COM'' and ``ARGRX.EDU'', both
23794 of which have distinct administration servers and key distribution centers;
23795 @item Will default to the realm ``EXAMPLE.COM'' if the realm is not explicitly
23796 specified by clients;
23797 @item Accepts services which only support encryption types known to be weak.
23798 @end itemize
23799
23800 The @code{krb5-realm} and @code{krb5-configuration} types have many fields.
23801 Only the most commonly used ones are described here.
23802 For a full list, and more detailed explanation of each, see the MIT
23803 @uref{https://web.mit.edu/kerberos/krb5-devel/doc/admin/conf_files/krb5_conf.html,,krb5.conf}
23804 documentation.
23805
23806
23807 @deftp {Data Type} krb5-realm
23808 @cindex realm, kerberos
23809 @table @asis
23810 @item @code{name}
23811 This field is a string identifying the name of the realm.
23812 A common convention is to use the fully qualified DNS name of your organization,
23813 converted to upper case.
23814
23815 @item @code{admin-server}
23816 This field is a string identifying the host where the administration server is
23817 running.
23818
23819 @item @code{kdc}
23820 This field is a string identifying the key distribution center
23821 for the realm.
23822 @end table
23823 @end deftp
23824
23825 @deftp {Data Type} krb5-configuration
23826
23827 @table @asis
23828 @item @code{allow-weak-crypto?} (default: @code{#f})
23829 If this flag is @code{#t} then services which only offer encryption algorithms
23830 known to be weak will be accepted.
23831
23832 @item @code{default-realm} (default: @code{#f})
23833 This field should be a string identifying the default Kerberos
23834 realm for the client.
23835 You should set this field to the name of your Kerberos realm.
23836 If this value is @code{#f}
23837 then a realm must be specified with every Kerberos principal when invoking programs
23838 such as @command{kinit}.
23839
23840 @item @code{realms}
23841 This should be a non-empty list of @code{krb5-realm} objects, which clients may
23842 access.
23843 Normally, one of them will have a @code{name} field matching the @code{default-realm}
23844 field.
23845 @end table
23846 @end deftp
23847
23848
23849 @subsubheading PAM krb5 Service
23850 @cindex pam-krb5
23851
23852 The @code{pam-krb5} service allows for login authentication and password
23853 management via Kerberos.
23854 You will need this service if you want PAM enabled applications to authenticate
23855 users using Kerberos.
23856
23857 @defvr {Scheme Variable} pam-krb5-service-type
23858 A service type for the Kerberos 5 PAM module.
23859 @end defvr
23860
23861 @deftp {Data Type} pam-krb5-configuration
23862 Data type representing the configuration of the Kerberos 5 PAM module.
23863 This type has the following parameters:
23864 @table @asis
23865 @item @code{pam-krb5} (default: @code{pam-krb5})
23866 The pam-krb5 package to use.
23867
23868 @item @code{minimum-uid} (default: @code{1000})
23869 The smallest user ID for which Kerberos authentications should be attempted.
23870 Local accounts with lower values will silently fail to authenticate.
23871 @end table
23872 @end deftp
23873
23874
23875 @node LDAP Services
23876 @subsection LDAP Services
23877 @cindex LDAP
23878 @cindex nslcd, LDAP service
23879
23880 The @code{(gnu services authentication)} module provides the
23881 @code{nslcd-service-type}, which can be used to authenticate against an LDAP
23882 server. In addition to configuring the service itself, you may want to add
23883 @code{ldap} as a name service to the Name Service Switch. @xref{Name Service
23884 Switch} for detailed information.
23885
23886 Here is a simple operating system declaration with a default configuration of
23887 the @code{nslcd-service-type} and a Name Service Switch configuration that
23888 consults the @code{ldap} name service last:
23889
23890 @lisp
23891 (use-service-modules authentication)
23892 (use-modules (gnu system nss))
23893 ...
23894 (operating-system
23895 ...
23896 (services
23897 (cons*
23898 (service nslcd-service-type)
23899 (service dhcp-client-service-type)
23900 %base-services))
23901 (name-service-switch
23902 (let ((services (list (name-service (name "db"))
23903 (name-service (name "files"))
23904 (name-service (name "ldap")))))
23905 (name-service-switch
23906 (inherit %mdns-host-lookup-nss)
23907 (password services)
23908 (shadow services)
23909 (group services)
23910 (netgroup services)
23911 (gshadow services)))))
23912 @end lisp
23913
23914 @c %start of generated documentation for nslcd-configuration
23915
23916 Available @code{nslcd-configuration} fields are:
23917
23918 @deftypevr {@code{nslcd-configuration} parameter} package nss-pam-ldapd
23919 The @code{nss-pam-ldapd} package to use.
23920
23921 @end deftypevr
23922
23923 @deftypevr {@code{nslcd-configuration} parameter} maybe-number threads
23924 The number of threads to start that can handle requests and perform LDAP
23925 queries. Each thread opens a separate connection to the LDAP server.
23926 The default is to start 5 threads.
23927
23928 Defaults to @samp{disabled}.
23929
23930 @end deftypevr
23931
23932 @deftypevr {@code{nslcd-configuration} parameter} string uid
23933 This specifies the user id with which the daemon should be run.
23934
23935 Defaults to @samp{"nslcd"}.
23936
23937 @end deftypevr
23938
23939 @deftypevr {@code{nslcd-configuration} parameter} string gid
23940 This specifies the group id with which the daemon should be run.
23941
23942 Defaults to @samp{"nslcd"}.
23943
23944 @end deftypevr
23945
23946 @deftypevr {@code{nslcd-configuration} parameter} log-option log
23947 This option controls the way logging is done via a list containing
23948 SCHEME and LEVEL@. The SCHEME argument may either be the symbols
23949 @samp{none} or @samp{syslog}, or an absolute file name. The LEVEL
23950 argument is optional and specifies the log level. The log level may be
23951 one of the following symbols: @samp{crit}, @samp{error}, @samp{warning},
23952 @samp{notice}, @samp{info} or @samp{debug}. All messages with the
23953 specified log level or higher are logged.
23954
23955 Defaults to @samp{("/var/log/nslcd" info)}.
23956
23957 @end deftypevr
23958
23959 @deftypevr {@code{nslcd-configuration} parameter} list uri
23960 The list of LDAP server URIs. Normally, only the first server will be
23961 used with the following servers as fall-back.
23962
23963 Defaults to @samp{("ldap://localhost:389/")}.
23964
23965 @end deftypevr
23966
23967 @deftypevr {@code{nslcd-configuration} parameter} maybe-string ldap-version
23968 The version of the LDAP protocol to use. The default is to use the
23969 maximum version supported by the LDAP library.
23970
23971 Defaults to @samp{disabled}.
23972
23973 @end deftypevr
23974
23975 @deftypevr {@code{nslcd-configuration} parameter} maybe-string binddn
23976 Specifies the distinguished name with which to bind to the directory
23977 server for lookups. The default is to bind anonymously.
23978
23979 Defaults to @samp{disabled}.
23980
23981 @end deftypevr
23982
23983 @deftypevr {@code{nslcd-configuration} parameter} maybe-string bindpw
23984 Specifies the credentials with which to bind. This option is only
23985 applicable when used with binddn.
23986
23987 Defaults to @samp{disabled}.
23988
23989 @end deftypevr
23990
23991 @deftypevr {@code{nslcd-configuration} parameter} maybe-string rootpwmoddn
23992 Specifies the distinguished name to use when the root user tries to
23993 modify a user's password using the PAM module.
23994
23995 Defaults to @samp{disabled}.
23996
23997 @end deftypevr
23998
23999 @deftypevr {@code{nslcd-configuration} parameter} maybe-string rootpwmodpw
24000 Specifies the credentials with which to bind if the root user tries to
24001 change a user's password. This option is only applicable when used with
24002 rootpwmoddn
24003
24004 Defaults to @samp{disabled}.
24005
24006 @end deftypevr
24007
24008 @deftypevr {@code{nslcd-configuration} parameter} maybe-string sasl-mech
24009 Specifies the SASL mechanism to be used when performing SASL
24010 authentication.
24011
24012 Defaults to @samp{disabled}.
24013
24014 @end deftypevr
24015
24016 @deftypevr {@code{nslcd-configuration} parameter} maybe-string sasl-realm
24017 Specifies the SASL realm to be used when performing SASL authentication.
24018
24019 Defaults to @samp{disabled}.
24020
24021 @end deftypevr
24022
24023 @deftypevr {@code{nslcd-configuration} parameter} maybe-string sasl-authcid
24024 Specifies the authentication identity to be used when performing SASL
24025 authentication.
24026
24027 Defaults to @samp{disabled}.
24028
24029 @end deftypevr
24030
24031 @deftypevr {@code{nslcd-configuration} parameter} maybe-string sasl-authzid
24032 Specifies the authorization identity to be used when performing SASL
24033 authentication.
24034
24035 Defaults to @samp{disabled}.
24036
24037 @end deftypevr
24038
24039 @deftypevr {@code{nslcd-configuration} parameter} maybe-boolean sasl-canonicalize?
24040 Determines whether the LDAP server host name should be canonicalised. If
24041 this is enabled the LDAP library will do a reverse host name lookup. By
24042 default, it is left up to the LDAP library whether this check is
24043 performed or not.
24044
24045 Defaults to @samp{disabled}.
24046
24047 @end deftypevr
24048
24049 @deftypevr {@code{nslcd-configuration} parameter} maybe-string krb5-ccname
24050 Set the name for the GSS-API Kerberos credentials cache.
24051
24052 Defaults to @samp{disabled}.
24053
24054 @end deftypevr
24055
24056 @deftypevr {@code{nslcd-configuration} parameter} string base
24057 The directory search base.
24058
24059 Defaults to @samp{"dc=example,dc=com"}.
24060
24061 @end deftypevr
24062
24063 @deftypevr {@code{nslcd-configuration} parameter} scope-option scope
24064 Specifies the search scope (subtree, onelevel, base or children). The
24065 default scope is subtree; base scope is almost never useful for name
24066 service lookups; children scope is not supported on all servers.
24067
24068 Defaults to @samp{(subtree)}.
24069
24070 @end deftypevr
24071
24072 @deftypevr {@code{nslcd-configuration} parameter} maybe-deref-option deref
24073 Specifies the policy for dereferencing aliases. The default policy is
24074 to never dereference aliases.
24075
24076 Defaults to @samp{disabled}.
24077
24078 @end deftypevr
24079
24080 @deftypevr {@code{nslcd-configuration} parameter} maybe-boolean referrals
24081 Specifies whether automatic referral chasing should be enabled. The
24082 default behaviour is to chase referrals.
24083
24084 Defaults to @samp{disabled}.
24085
24086 @end deftypevr
24087
24088 @deftypevr {@code{nslcd-configuration} parameter} list-of-map-entries maps
24089 This option allows for custom attributes to be looked up instead of the
24090 default RFC 2307 attributes. It is a list of maps, each consisting of
24091 the name of a map, the RFC 2307 attribute to match and the query
24092 expression for the attribute as it is available in the directory.
24093
24094 Defaults to @samp{()}.
24095
24096 @end deftypevr
24097
24098 @deftypevr {@code{nslcd-configuration} parameter} list-of-filter-entries filters
24099 A list of filters consisting of the name of a map to which the filter
24100 applies and an LDAP search filter expression.
24101
24102 Defaults to @samp{()}.
24103
24104 @end deftypevr
24105
24106 @deftypevr {@code{nslcd-configuration} parameter} maybe-number bind-timelimit
24107 Specifies the time limit in seconds to use when connecting to the
24108 directory server. The default value is 10 seconds.
24109
24110 Defaults to @samp{disabled}.
24111
24112 @end deftypevr
24113
24114 @deftypevr {@code{nslcd-configuration} parameter} maybe-number timelimit
24115 Specifies the time limit (in seconds) to wait for a response from the
24116 LDAP server. A value of zero, which is the default, is to wait
24117 indefinitely for searches to be completed.
24118
24119 Defaults to @samp{disabled}.
24120
24121 @end deftypevr
24122
24123 @deftypevr {@code{nslcd-configuration} parameter} maybe-number idle-timelimit
24124 Specifies the period if inactivity (in seconds) after which the con‐
24125 nection to the LDAP server will be closed. The default is not to time
24126 out connections.
24127
24128 Defaults to @samp{disabled}.
24129
24130 @end deftypevr
24131
24132 @deftypevr {@code{nslcd-configuration} parameter} maybe-number reconnect-sleeptime
24133 Specifies the number of seconds to sleep when connecting to all LDAP
24134 servers fails. By default one second is waited between the first
24135 failure and the first retry.
24136
24137 Defaults to @samp{disabled}.
24138
24139 @end deftypevr
24140
24141 @deftypevr {@code{nslcd-configuration} parameter} maybe-number reconnect-retrytime
24142 Specifies the time after which the LDAP server is considered to be
24143 permanently unavailable. Once this time is reached retries will be done
24144 only once per this time period. The default value is 10 seconds.
24145
24146 Defaults to @samp{disabled}.
24147
24148 @end deftypevr
24149
24150 @deftypevr {@code{nslcd-configuration} parameter} maybe-ssl-option ssl
24151 Specifies whether to use SSL/TLS or not (the default is not to). If
24152 'start-tls is specified then StartTLS is used rather than raw LDAP over
24153 SSL.
24154
24155 Defaults to @samp{disabled}.
24156
24157 @end deftypevr
24158
24159 @deftypevr {@code{nslcd-configuration} parameter} maybe-tls-reqcert-option tls-reqcert
24160 Specifies what checks to perform on a server-supplied certificate. The
24161 meaning of the values is described in the ldap.conf(5) manual page.
24162
24163 Defaults to @samp{disabled}.
24164
24165 @end deftypevr
24166
24167 @deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-cacertdir
24168 Specifies the directory containing X.509 certificates for peer authen‐
24169 tication. This parameter is ignored when using GnuTLS.
24170
24171 Defaults to @samp{disabled}.
24172
24173 @end deftypevr
24174
24175 @deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-cacertfile
24176 Specifies the path to the X.509 certificate for peer authentication.
24177
24178 Defaults to @samp{disabled}.
24179
24180 @end deftypevr
24181
24182 @deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-randfile
24183 Specifies the path to an entropy source. This parameter is ignored when
24184 using GnuTLS.
24185
24186 Defaults to @samp{disabled}.
24187
24188 @end deftypevr
24189
24190 @deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-ciphers
24191 Specifies the ciphers to use for TLS as a string.
24192
24193 Defaults to @samp{disabled}.
24194
24195 @end deftypevr
24196
24197 @deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-cert
24198 Specifies the path to the file containing the local certificate for
24199 client TLS authentication.
24200
24201 Defaults to @samp{disabled}.
24202
24203 @end deftypevr
24204
24205 @deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-key
24206 Specifies the path to the file containing the private key for client TLS
24207 authentication.
24208
24209 Defaults to @samp{disabled}.
24210
24211 @end deftypevr
24212
24213 @deftypevr {@code{nslcd-configuration} parameter} maybe-number pagesize
24214 Set this to a number greater than 0 to request paged results from the
24215 LDAP server in accordance with RFC2696. The default (0) is to not
24216 request paged results.
24217
24218 Defaults to @samp{disabled}.
24219
24220 @end deftypevr
24221
24222 @deftypevr {@code{nslcd-configuration} parameter} maybe-ignore-users-option nss-initgroups-ignoreusers
24223 This option prevents group membership lookups through LDAP for the
24224 specified users. Alternatively, the value 'all-local may be used. With
24225 that value nslcd builds a full list of non-LDAP users on startup.
24226
24227 Defaults to @samp{disabled}.
24228
24229 @end deftypevr
24230
24231 @deftypevr {@code{nslcd-configuration} parameter} maybe-number nss-min-uid
24232 This option ensures that LDAP users with a numeric user id lower than
24233 the specified value are ignored.
24234
24235 Defaults to @samp{disabled}.
24236
24237 @end deftypevr
24238
24239 @deftypevr {@code{nslcd-configuration} parameter} maybe-number nss-uid-offset
24240 This option specifies an offset that is added to all LDAP numeric user
24241 ids. This can be used to avoid user id collisions with local users.
24242
24243 Defaults to @samp{disabled}.
24244
24245 @end deftypevr
24246
24247 @deftypevr {@code{nslcd-configuration} parameter} maybe-number nss-gid-offset
24248 This option specifies an offset that is added to all LDAP numeric group
24249 ids. This can be used to avoid user id collisions with local groups.
24250
24251 Defaults to @samp{disabled}.
24252
24253 @end deftypevr
24254
24255 @deftypevr {@code{nslcd-configuration} parameter} maybe-boolean nss-nested-groups
24256 If this option is set, the member attribute of a group may point to
24257 another group. Members of nested groups are also returned in the higher
24258 level group and parent groups are returned when finding groups for a
24259 specific user. The default is not to perform extra searches for nested
24260 groups.
24261
24262 Defaults to @samp{disabled}.
24263
24264 @end deftypevr
24265
24266 @deftypevr {@code{nslcd-configuration} parameter} maybe-boolean nss-getgrent-skipmembers
24267 If this option is set, the group member list is not retrieved when
24268 looking up groups. Lookups for finding which groups a user belongs to
24269 will remain functional so the user will likely still get the correct
24270 groups assigned on login.
24271
24272 Defaults to @samp{disabled}.
24273
24274 @end deftypevr
24275
24276 @deftypevr {@code{nslcd-configuration} parameter} maybe-boolean nss-disable-enumeration
24277 If this option is set, functions which cause all user/group entries to
24278 be loaded from the directory will not succeed in doing so. This can
24279 dramatically reduce LDAP server load in situations where there are a
24280 great number of users and/or groups. This option is not recommended for
24281 most configurations.
24282
24283 Defaults to @samp{disabled}.
24284
24285 @end deftypevr
24286
24287 @deftypevr {@code{nslcd-configuration} parameter} maybe-string validnames
24288 This option can be used to specify how user and group names are verified
24289 within the system. This pattern is used to check all user and group
24290 names that are requested and returned from LDAP.
24291
24292 Defaults to @samp{disabled}.
24293
24294 @end deftypevr
24295
24296 @deftypevr {@code{nslcd-configuration} parameter} maybe-boolean ignorecase
24297 This specifies whether or not to perform searches using case-insensitive
24298 matching. Enabling this could open up the system to authorization
24299 bypass vulnerabilities and introduce nscd cache poisoning
24300 vulnerabilities which allow denial of service.
24301
24302 Defaults to @samp{disabled}.
24303
24304 @end deftypevr
24305
24306 @deftypevr {@code{nslcd-configuration} parameter} maybe-boolean pam-authc-ppolicy
24307 This option specifies whether password policy controls are requested and
24308 handled from the LDAP server when performing user authentication.
24309
24310 Defaults to @samp{disabled}.
24311
24312 @end deftypevr
24313
24314 @deftypevr {@code{nslcd-configuration} parameter} maybe-string pam-authc-search
24315 By default nslcd performs an LDAP search with the user's credentials
24316 after BIND (authentication) to ensure that the BIND operation was
24317 successful. The default search is a simple check to see if the user's
24318 DN exists. A search filter can be specified that will be used instead.
24319 It should return at least one entry.
24320
24321 Defaults to @samp{disabled}.
24322
24323 @end deftypevr
24324
24325 @deftypevr {@code{nslcd-configuration} parameter} maybe-string pam-authz-search
24326 This option allows flexible fine tuning of the authorisation check that
24327 should be performed. The search filter specified is executed and if any
24328 entries match, access is granted, otherwise access is denied.
24329
24330 Defaults to @samp{disabled}.
24331
24332 @end deftypevr
24333
24334 @deftypevr {@code{nslcd-configuration} parameter} maybe-string pam-password-prohibit-message
24335 If this option is set password modification using pam_ldap will be
24336 denied and the specified message will be presented to the user instead.
24337 The message can be used to direct the user to an alternative means of
24338 changing their password.
24339
24340 Defaults to @samp{disabled}.
24341
24342 @end deftypevr
24343
24344 @deftypevr {@code{nslcd-configuration} parameter} list pam-services
24345 List of pam service names for which LDAP authentication should suffice.
24346
24347 Defaults to @samp{()}.
24348
24349 @end deftypevr
24350
24351 @c %end of generated documentation for nslcd-configuration
24352
24353
24354 @node Web Services
24355 @subsection Web Services
24356
24357 @cindex web
24358 @cindex www
24359 @cindex HTTP
24360 The @code{(gnu services web)} module provides the Apache HTTP Server,
24361 the nginx web server, and also a fastcgi wrapper daemon.
24362
24363 @subsubheading Apache HTTP Server
24364
24365 @deffn {Scheme Variable} httpd-service-type
24366 Service type for the @uref{https://httpd.apache.org/,Apache HTTP} server
24367 (@dfn{httpd}). The value for this service type is a
24368 @code{httpd-configuration} record.
24369
24370 A simple example configuration is given below.
24371
24372 @lisp
24373 (service httpd-service-type
24374 (httpd-configuration
24375 (config
24376 (httpd-config-file
24377 (server-name "www.example.com")
24378 (document-root "/srv/http/www.example.com")))))
24379 @end lisp
24380
24381 Other services can also extend the @code{httpd-service-type} to add to
24382 the configuration.
24383
24384 @lisp
24385 (simple-service 'www.example.com-server httpd-service-type
24386 (list
24387 (httpd-virtualhost
24388 "*:80"
24389 (list (string-join '("ServerName www.example.com"
24390 "DocumentRoot /srv/http/www.example.com")
24391 "\n")))))
24392 @end lisp
24393 @end deffn
24394
24395 The details for the @code{httpd-configuration}, @code{httpd-module},
24396 @code{httpd-config-file} and @code{httpd-virtualhost} record types are
24397 given below.
24398
24399 @deffn {Data Type} httpd-configuration
24400 This data type represents the configuration for the httpd service.
24401
24402 @table @asis
24403 @item @code{package} (default: @code{httpd})
24404 The httpd package to use.
24405
24406 @item @code{pid-file} (default: @code{"/var/run/httpd"})
24407 The pid file used by the shepherd-service.
24408
24409 @item @code{config} (default: @code{(httpd-config-file)})
24410 The configuration file to use with the httpd service. The default value
24411 is a @code{httpd-config-file} record, but this can also be a different
24412 G-expression that generates a file, for example a @code{plain-file}. A
24413 file outside of the store can also be specified through a string.
24414
24415 @end table
24416 @end deffn
24417
24418 @deffn {Data Type} httpd-module
24419 This data type represents a module for the httpd service.
24420
24421 @table @asis
24422 @item @code{name}
24423 The name of the module.
24424
24425 @item @code{file}
24426 The file for the module. This can be relative to the httpd package being
24427 used, the absolute location of a file, or a G-expression for a file
24428 within the store, for example @code{(file-append mod-wsgi
24429 "/modules/mod_wsgi.so")}.
24430
24431 @end table
24432 @end deffn
24433
24434 @defvr {Scheme Variable} %default-httpd-modules
24435 A default list of @code{httpd-module} objects.
24436 @end defvr
24437
24438 @deffn {Data Type} httpd-config-file
24439 This data type represents a configuration file for the httpd service.
24440
24441 @table @asis
24442 @item @code{modules} (default: @code{%default-httpd-modules})
24443 The modules to load. Additional modules can be added here, or loaded by
24444 additional configuration.
24445
24446 For example, in order to handle requests for PHP files, you can use Apache’s
24447 @code{mod_proxy_fcgi} module along with @code{php-fpm-service-type}:
24448
24449 @lisp
24450 (service httpd-service-type
24451 (httpd-configuration
24452 (config
24453 (httpd-config-file
24454 (modules (cons*
24455 (httpd-module
24456 (name "proxy_module")
24457 (file "modules/mod_proxy.so"))
24458 (httpd-module
24459 (name "proxy_fcgi_module")
24460 (file "modules/mod_proxy_fcgi.so"))
24461 %default-httpd-modules))
24462 (extra-config (list "\
24463 <FilesMatch \\.php$>
24464 SetHandler \"proxy:unix:/var/run/php-fpm.sock|fcgi://localhost/\"
24465 </FilesMatch>"))))))
24466 (service php-fpm-service-type
24467 (php-fpm-configuration
24468 (socket "/var/run/php-fpm.sock")
24469 (socket-group "httpd")))
24470 @end lisp
24471
24472 @item @code{server-root} (default: @code{httpd})
24473 The @code{ServerRoot} in the configuration file, defaults to the httpd
24474 package. Directives including @code{Include} and @code{LoadModule} are
24475 taken as relative to the server root.
24476
24477 @item @code{server-name} (default: @code{#f})
24478 The @code{ServerName} in the configuration file, used to specify the
24479 request scheme, hostname and port that the server uses to identify
24480 itself.
24481
24482 This doesn't need to be set in the server config, and can be specified
24483 in virtual hosts. The default is @code{#f} to not specify a
24484 @code{ServerName}.
24485
24486 @item @code{document-root} (default: @code{"/srv/http"})
24487 The @code{DocumentRoot} from which files will be served.
24488
24489 @item @code{listen} (default: @code{'("80")})
24490 The list of values for the @code{Listen} directives in the config
24491 file. The value should be a list of strings, when each string can
24492 specify the port number to listen on, and optionally the IP address and
24493 protocol to use.
24494
24495 @item @code{pid-file} (default: @code{"/var/run/httpd"})
24496 The @code{PidFile} to use. This should match the @code{pid-file} set in
24497 the @code{httpd-configuration} so that the Shepherd service is
24498 configured correctly.
24499
24500 @item @code{error-log} (default: @code{"/var/log/httpd/error_log"})
24501 The @code{ErrorLog} to which the server will log errors.
24502
24503 @item @code{user} (default: @code{"httpd"})
24504 The @code{User} which the server will answer requests as.
24505
24506 @item @code{group} (default: @code{"httpd"})
24507 The @code{Group} which the server will answer requests as.
24508
24509 @item @code{extra-config} (default: @code{(list "TypesConfig etc/httpd/mime.types")})
24510 A flat list of strings and G-expressions which will be added to the end
24511 of the configuration file.
24512
24513 Any values which the service is extended with will be appended to this
24514 list.
24515
24516 @end table
24517 @end deffn
24518
24519 @deffn {Data Type} httpd-virtualhost
24520 This data type represents a virtualhost configuration block for the httpd service.
24521
24522 These should be added to the extra-config for the httpd-service.
24523
24524 @lisp
24525 (simple-service 'www.example.com-server httpd-service-type
24526 (list
24527 (httpd-virtualhost
24528 "*:80"
24529 (list (string-join '("ServerName www.example.com"
24530 "DocumentRoot /srv/http/www.example.com")
24531 "\n")))))
24532 @end lisp
24533
24534 @table @asis
24535 @item @code{addresses-and-ports}
24536 The addresses and ports for the @code{VirtualHost} directive.
24537
24538 @item @code{contents}
24539 The contents of the @code{VirtualHost} directive, this should be a list
24540 of strings and G-expressions.
24541
24542 @end table
24543 @end deffn
24544
24545 @subsubheading NGINX
24546
24547 @deffn {Scheme Variable} nginx-service-type
24548 Service type for the @uref{https://nginx.org/,NGinx} web server. The
24549 value for this service type is a @code{<nginx-configuration>} record.
24550
24551 A simple example configuration is given below.
24552
24553 @lisp
24554 (service nginx-service-type
24555 (nginx-configuration
24556 (server-blocks
24557 (list (nginx-server-configuration
24558 (server-name '("www.example.com"))
24559 (root "/srv/http/www.example.com"))))))
24560 @end lisp
24561
24562 In addition to adding server blocks to the service configuration
24563 directly, this service can be extended by other services to add server
24564 blocks, as in this example:
24565
24566 @lisp
24567 (simple-service 'my-extra-server nginx-service-type
24568 (list (nginx-server-configuration
24569 (root "/srv/http/extra-website")
24570 (try-files (list "$uri" "$uri/index.html")))))
24571 @end lisp
24572 @end deffn
24573
24574 At startup, @command{nginx} has not yet read its configuration file, so
24575 it uses a default file to log error messages. If it fails to load its
24576 configuration file, that is where error messages are logged. After the
24577 configuration file is loaded, the default error log file changes as per
24578 configuration. In our case, startup error messages can be found in
24579 @file{/var/run/nginx/logs/error.log}, and after configuration in
24580 @file{/var/log/nginx/error.log}. The second location can be changed
24581 with the @var{log-directory} configuration option.
24582
24583 @deffn {Data Type} nginx-configuration
24584 This data type represents the configuration for NGinx. Some
24585 configuration can be done through this and the other provided record
24586 types, or alternatively, a config file can be provided.
24587
24588 @table @asis
24589 @item @code{nginx} (default: @code{nginx})
24590 The nginx package to use.
24591
24592 @item @code{log-directory} (default: @code{"/var/log/nginx"})
24593 The directory to which NGinx will write log files.
24594
24595 @item @code{run-directory} (default: @code{"/var/run/nginx"})
24596 The directory in which NGinx will create a pid file, and write temporary
24597 files.
24598
24599 @item @code{server-blocks} (default: @code{'()})
24600 A list of @dfn{server blocks} to create in the generated configuration
24601 file, the elements should be of type
24602 @code{<nginx-server-configuration>}.
24603
24604 The following example would setup NGinx to serve @code{www.example.com}
24605 from the @code{/srv/http/www.example.com} directory, without using
24606 HTTPS.
24607 @lisp
24608 (service nginx-service-type
24609 (nginx-configuration
24610 (server-blocks
24611 (list (nginx-server-configuration
24612 (server-name '("www.example.com"))
24613 (root "/srv/http/www.example.com"))))))
24614 @end lisp
24615
24616 @item @code{upstream-blocks} (default: @code{'()})
24617 A list of @dfn{upstream blocks} to create in the generated configuration
24618 file, the elements should be of type
24619 @code{<nginx-upstream-configuration>}.
24620
24621 Configuring upstreams through the @code{upstream-blocks} can be useful
24622 when combined with @code{locations} in the
24623 @code{<nginx-server-configuration>} records. The following example
24624 creates a server configuration with one location configuration, that
24625 will proxy requests to a upstream configuration, which will handle
24626 requests with two servers.
24627
24628 @lisp
24629 (service
24630 nginx-service-type
24631 (nginx-configuration
24632 (server-blocks
24633 (list (nginx-server-configuration
24634 (server-name '("www.example.com"))
24635 (root "/srv/http/www.example.com")
24636 (locations
24637 (list
24638 (nginx-location-configuration
24639 (uri "/path1")
24640 (body '("proxy_pass http://server-proxy;"))))))))
24641 (upstream-blocks
24642 (list (nginx-upstream-configuration
24643 (name "server-proxy")
24644 (servers (list "server1.example.com"
24645 "server2.example.com")))))))
24646 @end lisp
24647
24648 @item @code{file} (default: @code{#f})
24649 If a configuration @var{file} is provided, this will be used, rather than
24650 generating a configuration file from the provided @code{log-directory},
24651 @code{run-directory}, @code{server-blocks} and @code{upstream-blocks}. For
24652 proper operation, these arguments should match what is in @var{file} to ensure
24653 that the directories are created when the service is activated.
24654
24655 This can be useful if you have an existing configuration file, or it's
24656 not possible to do what is required through the other parts of the
24657 nginx-configuration record.
24658
24659 @item @code{server-names-hash-bucket-size} (default: @code{#f})
24660 Bucket size for the server names hash tables, defaults to @code{#f} to
24661 use the size of the processors cache line.
24662
24663 @item @code{server-names-hash-bucket-max-size} (default: @code{#f})
24664 Maximum bucket size for the server names hash tables.
24665
24666 @item @code{modules} (default: @code{'()})
24667 List of nginx dynamic modules to load. This should be a list of file
24668 names of loadable modules, as in this example:
24669
24670 @lisp
24671 (modules
24672 (list
24673 (file-append nginx-accept-language-module "\
24674 /etc/nginx/modules/ngx_http_accept_language_module.so")
24675 (file-append nginx-lua-module "\
24676 /etc/nginx/modules/ngx_http_lua_module.so")))
24677 @end lisp
24678
24679 @item @code{lua-package-path} (default: @code{'()})
24680 List of nginx lua packages to load. This should be a list of package
24681 names of loadable lua modules, as in this example:
24682
24683 @lisp
24684 (lua-package-path (list lua-resty-core
24685 lua-resty-lrucache
24686 lua-resty-signal
24687 lua-tablepool
24688 lua-resty-shell))
24689 @end lisp
24690
24691 @item @code{lua-package-cpath} (default: @code{'()})
24692 List of nginx lua C packages to load. This should be a list of package
24693 names of loadable lua C modules, as in this example:
24694
24695 @lisp
24696 (lua-package-cpath (list lua-resty-signal))
24697 @end lisp
24698
24699 @item @code{global-directives} (default: @code{'((events . ()))})
24700 Association list of global directives for the top level of the nginx
24701 configuration. Values may themselves be association lists.
24702
24703 @lisp
24704 (global-directives
24705 `((worker_processes . 16)
24706 (pcre_jit . on)
24707 (events . ((worker_connections . 1024)))))
24708 @end lisp
24709
24710 @item @code{extra-content} (default: @code{""})
24711 Extra content for the @code{http} block. Should be string or a string
24712 valued G-expression.
24713
24714 @end table
24715 @end deffn
24716
24717 @deftp {Data Type} nginx-server-configuration
24718 Data type representing the configuration of an nginx server block.
24719 This type has the following parameters:
24720
24721 @table @asis
24722 @item @code{listen} (default: @code{'("80" "443 ssl")})
24723 Each @code{listen} directive sets the address and port for IP, or the
24724 path for a UNIX-domain socket on which the server will accept requests.
24725 Both address and port, or only address or only port can be specified.
24726 An address may also be a hostname, for example:
24727
24728 @lisp
24729 '("127.0.0.1:8000" "127.0.0.1" "8000" "*:8000" "localhost:8000")
24730 @end lisp
24731
24732 @item @code{server-name} (default: @code{(list 'default)})
24733 A list of server names this server represents. @code{'default} represents the
24734 default server for connections matching no other server.
24735
24736 @item @code{root} (default: @code{"/srv/http"})
24737 Root of the website nginx will serve.
24738
24739 @item @code{locations} (default: @code{'()})
24740 A list of @dfn{nginx-location-configuration} or
24741 @dfn{nginx-named-location-configuration} records to use within this
24742 server block.
24743
24744 @item @code{index} (default: @code{(list "index.html")})
24745 Index files to look for when clients ask for a directory. If it cannot be found,
24746 Nginx will send the list of files in the directory.
24747
24748 @item @code{try-files} (default: @code{'()})
24749 A list of files whose existence is checked in the specified order.
24750 @code{nginx} will use the first file it finds to process the request.
24751
24752 @item @code{ssl-certificate} (default: @code{#f})
24753 Where to find the certificate for secure connections. Set it to @code{#f} if
24754 you don't have a certificate or you don't want to use HTTPS.
24755
24756 @item @code{ssl-certificate-key} (default: @code{#f})
24757 Where to find the private key for secure connections. Set it to @code{#f} if
24758 you don't have a key or you don't want to use HTTPS.
24759
24760 @item @code{server-tokens?} (default: @code{#f})
24761 Whether the server should add its configuration to response.
24762
24763 @item @code{raw-content} (default: @code{'()})
24764 A list of raw lines added to the server block.
24765
24766 @end table
24767 @end deftp
24768
24769 @deftp {Data Type} nginx-upstream-configuration
24770 Data type representing the configuration of an nginx @code{upstream}
24771 block. This type has the following parameters:
24772
24773 @table @asis
24774 @item @code{name}
24775 Name for this group of servers.
24776
24777 @item @code{servers}
24778 Specify the addresses of the servers in the group. The address can be
24779 specified as a IP address (e.g.@: @samp{127.0.0.1}), domain name
24780 (e.g.@: @samp{backend1.example.com}) or a path to a UNIX socket using the
24781 prefix @samp{unix:}. For addresses using an IP address or domain name,
24782 the default port is 80, and a different port can be specified
24783 explicitly.
24784
24785 @end table
24786 @end deftp
24787
24788 @deftp {Data Type} nginx-location-configuration
24789 Data type representing the configuration of an nginx @code{location}
24790 block. This type has the following parameters:
24791
24792 @table @asis
24793 @item @code{uri}
24794 URI which this location block matches.
24795
24796 @anchor{nginx-location-configuration body}
24797 @item @code{body}
24798 Body of the location block, specified as a list of strings. This can contain
24799 many
24800 configuration directives. For example, to pass requests to a upstream
24801 server group defined using an @code{nginx-upstream-configuration} block,
24802 the following directive would be specified in the body @samp{(list "proxy_pass
24803 http://upstream-name;")}.
24804
24805 @end table
24806 @end deftp
24807
24808 @deftp {Data Type} nginx-named-location-configuration
24809 Data type representing the configuration of an nginx named location
24810 block. Named location blocks are used for request redirection, and not
24811 used for regular request processing. This type has the following
24812 parameters:
24813
24814 @table @asis
24815 @item @code{name}
24816 Name to identify this location block.
24817
24818 @item @code{body}
24819 @xref{nginx-location-configuration body}, as the body for named location
24820 blocks can be used in a similar way to the
24821 @code{nginx-location-configuration body}. One restriction is that the
24822 body of a named location block cannot contain location blocks.
24823
24824 @end table
24825 @end deftp
24826
24827 @subsubheading Varnish Cache
24828 @cindex Varnish
24829 Varnish is a fast cache server that sits in between web applications
24830 and end users. It proxies requests from clients and caches the
24831 accessed URLs such that multiple requests for the same resource only
24832 creates one request to the back-end.
24833
24834 @defvr {Scheme Variable} varnish-service-type
24835 Service type for the Varnish daemon.
24836 @end defvr
24837
24838 @deftp {Data Type} varnish-configuration
24839 Data type representing the @code{varnish} service configuration.
24840 This type has the following parameters:
24841
24842 @table @asis
24843 @item @code{package} (default: @code{varnish})
24844 The Varnish package to use.
24845
24846 @item @code{name} (default: @code{"default"})
24847 A name for this Varnish instance. Varnish will create a directory in
24848 @file{/var/varnish/} with this name and keep temporary files there. If
24849 the name starts with a forward slash, it is interpreted as an absolute
24850 directory name.
24851
24852 Pass the @code{-n} argument to other Varnish programs to connect to the
24853 named instance, e.g.@: @command{varnishncsa -n default}.
24854
24855 @item @code{backend} (default: @code{"localhost:8080"})
24856 The backend to use. This option has no effect if @code{vcl} is set.
24857
24858 @item @code{vcl} (default: #f)
24859 The @dfn{VCL} (Varnish Configuration Language) program to run. If this
24860 is @code{#f}, Varnish will proxy @code{backend} using the default
24861 configuration. Otherwise this must be a file-like object with valid
24862 VCL syntax.
24863
24864 @c Varnish does not support HTTPS, so keep this URL to avoid confusion.
24865 For example, to mirror @url{https://www.gnu.org,www.gnu.org} with VCL you
24866 can do something along these lines:
24867
24868 @lisp
24869 (define %gnu-mirror
24870 (plain-file "gnu.vcl"
24871 "vcl 4.1;
24872 backend gnu @{ .host = \"www.gnu.org\"; @}"))
24873
24874 (operating-system
24875 ;; @dots{}
24876 (services (cons (service varnish-service-type
24877 (varnish-configuration
24878 (listen '(":80"))
24879 (vcl %gnu-mirror)))
24880 %base-services)))
24881 @end lisp
24882
24883 The configuration of an already running Varnish instance can be inspected
24884 and changed using the @command{varnishadm} program.
24885
24886 Consult the @url{https://varnish-cache.org/docs/,Varnish User Guide} and
24887 @url{https://book.varnish-software.com/4.0/,Varnish Book} for
24888 comprehensive documentation on Varnish and its configuration language.
24889
24890 @item @code{listen} (default: @code{'("localhost:80")})
24891 List of addresses Varnish will listen on.
24892
24893 @item @code{storage} (default: @code{'("malloc,128m")})
24894 List of storage backends that will be available in VCL.
24895
24896 @item @code{parameters} (default: @code{'()})
24897 List of run-time parameters in the form @code{'(("parameter" . "value"))}.
24898
24899 @item @code{extra-options} (default: @code{'()})
24900 Additional arguments to pass to the @command{varnishd} process.
24901
24902 @end table
24903 @end deftp
24904
24905 @subsubheading Patchwork
24906 @cindex Patchwork
24907 Patchwork is a patch tracking system. It can collect patches sent to a
24908 mailing list, and display them in a web interface.
24909
24910 @defvr {Scheme Variable} patchwork-service-type
24911 Service type for Patchwork.
24912 @end defvr
24913
24914 The following example is an example of a minimal service for Patchwork, for
24915 the @code{patchwork.example.com} domain.
24916
24917 @lisp
24918 (service patchwork-service-type
24919 (patchwork-configuration
24920 (domain "patchwork.example.com")
24921 (settings-module
24922 (patchwork-settings-module
24923 (allowed-hosts (list domain))
24924 (default-from-email "patchwork@@patchwork.example.com")))
24925 (getmail-retriever-config
24926 (getmail-retriever-configuration
24927 (type "SimpleIMAPSSLRetriever")
24928 (server "imap.example.com")
24929 (port 993)
24930 (username "patchwork")
24931 (password-command
24932 (list (file-append coreutils "/bin/cat")
24933 "/etc/getmail-patchwork-imap-password"))
24934 (extra-parameters
24935 '((mailboxes . ("Patches"))))))))
24936
24937 @end lisp
24938
24939 There are three records for configuring the Patchwork service. The
24940 @code{<patchwork-configuration>} relates to the configuration for Patchwork
24941 within the HTTPD service.
24942
24943 The @code{settings-module} field within the @code{<patchwork-configuration>}
24944 record can be populated with the @code{<patchwork-settings-module>} record,
24945 which describes a settings module that is generated within the Guix store.
24946
24947 For the @code{database-configuration} field within the
24948 @code{<patchwork-settings-module>}, the
24949 @code{<patchwork-database-configuration>} must be used.
24950
24951 @deftp {Data Type} patchwork-configuration
24952 Data type representing the Patchwork service configuration. This type has the
24953 following parameters:
24954
24955 @table @asis
24956 @item @code{patchwork} (default: @code{patchwork})
24957 The Patchwork package to use.
24958
24959 @item @code{domain}
24960 The domain to use for Patchwork, this is used in the HTTPD service virtual
24961 host.
24962
24963 @item @code{settings-module}
24964 The settings module to use for Patchwork. As a Django application, Patchwork
24965 is configured with a Python module containing the settings. This can either be
24966 an instance of the @code{<patchwork-settings-module>} record, any other record
24967 that represents the settings in the store, or a directory outside of the
24968 store.
24969
24970 @item @code{static-path} (default: @code{"/static/"})
24971 The path under which the HTTPD service should serve the static files.
24972
24973 @item @code{getmail-retriever-config}
24974 The getmail-retriever-configuration record value to use with
24975 Patchwork. Getmail will be configured with this value, the messages will be
24976 delivered to Patchwork.
24977
24978 @end table
24979 @end deftp
24980
24981 @deftp {Data Type} patchwork-settings-module
24982 Data type representing a settings module for Patchwork. Some of these
24983 settings relate directly to Patchwork, but others relate to Django, the web
24984 framework used by Patchwork, or the Django Rest Framework library. This type
24985 has the following parameters:
24986
24987 @table @asis
24988 @item @code{database-configuration} (default: @code{(patchwork-database-configuration)})
24989 The database connection settings used for Patchwork. See the
24990 @code{<patchwork-database-configuration>} record type for more information.
24991
24992 @item @code{secret-key-file} (default: @code{"/etc/patchwork/django-secret-key"})
24993 Patchwork, as a Django web application uses a secret key for cryptographically
24994 signing values. This file should contain a unique unpredictable value.
24995
24996 If this file does not exist, it will be created and populated with a random
24997 value by the patchwork-setup shepherd service.
24998
24999 This setting relates to Django.
25000
25001 @item @code{allowed-hosts}
25002 A list of valid hosts for this Patchwork service. This should at least include
25003 the domain specified in the @code{<patchwork-configuration>} record.
25004
25005 This is a Django setting.
25006
25007 @item @code{default-from-email}
25008 The email address from which Patchwork should send email by default.
25009
25010 This is a Patchwork setting.
25011
25012 @item @code{static-url} (default: @code{#f})
25013 The URL to use when serving static assets. It can be part of a URL, or a full
25014 URL, but must end in a @code{/}.
25015
25016 If the default value is used, the @code{static-path} value from the
25017 @code{<patchwork-configuration>} record will be used.
25018
25019 This is a Django setting.
25020
25021 @item @code{admins} (default: @code{'()})
25022 Email addresses to send the details of errors that occur. Each value should
25023 be a list containing two elements, the name and then the email address.
25024
25025 This is a Django setting.
25026
25027 @item @code{debug?} (default: @code{#f})
25028 Whether to run Patchwork in debug mode. If set to @code{#t}, detailed error
25029 messages will be shown.
25030
25031 This is a Django setting.
25032
25033 @item @code{enable-rest-api?} (default: @code{#t})
25034 Whether to enable the Patchwork REST API.
25035
25036 This is a Patchwork setting.
25037
25038 @item @code{enable-xmlrpc?} (default: @code{#t})
25039 Whether to enable the XML RPC API.
25040
25041 This is a Patchwork setting.
25042
25043 @item @code{force-https-links?} (default: @code{#t})
25044 Whether to use HTTPS links on Patchwork pages.
25045
25046 This is a Patchwork setting.
25047
25048 @item @code{extra-settings} (default: @code{""})
25049 Extra code to place at the end of the Patchwork settings module.
25050
25051 @end table
25052 @end deftp
25053
25054 @deftp {Data Type} patchwork-database-configuration
25055 Data type representing the database configuration for Patchwork.
25056
25057 @table @asis
25058 @item @code{engine} (default: @code{"django.db.backends.postgresql_psycopg2"})
25059 The database engine to use.
25060
25061 @item @code{name} (default: @code{"patchwork"})
25062 The name of the database to use.
25063
25064 @item @code{user} (default: @code{"httpd"})
25065 The user to connect to the database as.
25066
25067 @item @code{password} (default: @code{""})
25068 The password to use when connecting to the database.
25069
25070 @item @code{host} (default: @code{""})
25071 The host to make the database connection to.
25072
25073 @item @code{port} (default: @code{""})
25074 The port on which to connect to the database.
25075
25076 @end table
25077 @end deftp
25078
25079 @subsubheading Mumi
25080
25081 @cindex Mumi, Debbugs Web interface
25082 @cindex Debbugs, Mumi Web interface
25083 @uref{https://git.elephly.net/gitweb.cgi?p=software/mumi.git, Mumi} is a
25084 Web interface to the Debbugs bug tracker, by default for
25085 @uref{https://bugs.gnu.org, the GNU instance}. Mumi is a Web server,
25086 but it also fetches and indexes mail retrieved from Debbugs.
25087
25088 @defvr {Scheme Variable} mumi-service-type
25089 This is the service type for Mumi.
25090 @end defvr
25091
25092 @deftp {Data Type} mumi-configuration
25093 Data type representing the Mumi service configuration. This type has the
25094 following fields:
25095
25096 @table @asis
25097 @item @code{mumi} (default: @code{mumi})
25098 The Mumi package to use.
25099
25100 @item @code{mailer?} (default: @code{#true})
25101 Whether to enable or disable the mailer component.
25102
25103 @item @code{mumi-configuration-sender}
25104 The email address used as the sender for comments.
25105
25106 @item @code{mumi-configuration-smtp}
25107 A URI to configure the SMTP settings for Mailutils. This could be
25108 something like @code{sendmail:///path/to/bin/msmtp} or any other URI
25109 supported by Mailutils. @xref{SMTP Mailboxes, SMTP Mailboxes,,
25110 mailutils, GNU@tie{}Mailutils}.
25111
25112 @end table
25113 @end deftp
25114
25115
25116 @subsubheading FastCGI
25117 @cindex fastcgi
25118 @cindex fcgiwrap
25119 FastCGI is an interface between the front-end and the back-end of a web
25120 service. It is a somewhat legacy facility; new web services should
25121 generally just talk HTTP between the front-end and the back-end.
25122 However there are a number of back-end services such as PHP or the
25123 optimized HTTP Git repository access that use FastCGI, so we have
25124 support for it in Guix.
25125
25126 To use FastCGI, you configure the front-end web server (e.g., nginx) to
25127 dispatch some subset of its requests to the fastcgi backend, which
25128 listens on a local TCP or UNIX socket. There is an intermediary
25129 @code{fcgiwrap} program that sits between the actual backend process and
25130 the web server. The front-end indicates which backend program to run,
25131 passing that information to the @code{fcgiwrap} process.
25132
25133 @defvr {Scheme Variable} fcgiwrap-service-type
25134 A service type for the @code{fcgiwrap} FastCGI proxy.
25135 @end defvr
25136
25137 @deftp {Data Type} fcgiwrap-configuration
25138 Data type representing the configuration of the @code{fcgiwrap} service.
25139 This type has the following parameters:
25140 @table @asis
25141 @item @code{package} (default: @code{fcgiwrap})
25142 The fcgiwrap package to use.
25143
25144 @item @code{socket} (default: @code{tcp:127.0.0.1:9000})
25145 The socket on which the @code{fcgiwrap} process should listen, as a
25146 string. Valid @var{socket} values include
25147 @code{unix:@var{/path/to/unix/socket}},
25148 @code{tcp:@var{dot.ted.qu.ad}:@var{port}} and
25149 @code{tcp6:[@var{ipv6_addr}]:port}.
25150
25151 @item @code{user} (default: @code{fcgiwrap})
25152 @itemx @code{group} (default: @code{fcgiwrap})
25153 The user and group names, as strings, under which to run the
25154 @code{fcgiwrap} process. The @code{fastcgi} service will ensure that if
25155 the user asks for the specific user or group names @code{fcgiwrap} that
25156 the corresponding user and/or group is present on the system.
25157
25158 It is possible to configure a FastCGI-backed web service to pass HTTP
25159 authentication information from the front-end to the back-end, and to
25160 allow @code{fcgiwrap} to run the back-end process as a corresponding
25161 local user. To enable this capability on the back-end, run
25162 @code{fcgiwrap} as the @code{root} user and group. Note that this
25163 capability also has to be configured on the front-end as well.
25164 @end table
25165 @end deftp
25166
25167 @cindex php-fpm
25168 PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI implementation
25169 with some additional features useful for sites of any size.
25170
25171 These features include:
25172 @itemize @bullet
25173 @item Adaptive process spawning
25174 @item Basic statistics (similar to Apache's mod_status)
25175 @item Advanced process management with graceful stop/start
25176 @item Ability to start workers with different uid/gid/chroot/environment
25177 and different php.ini (replaces safe_mode)
25178 @item Stdout & stderr logging
25179 @item Emergency restart in case of accidental opcode cache destruction
25180 @item Accelerated upload support
25181 @item Support for a "slowlog"
25182 @item Enhancements to FastCGI, such as fastcgi_finish_request() -
25183 a special function to finish request & flush all data while continuing to do
25184 something time-consuming (video converting, stats processing, etc.)
25185 @end itemize
25186 ...@: and much more.
25187
25188 @defvr {Scheme Variable} php-fpm-service-type
25189 A Service type for @code{php-fpm}.
25190 @end defvr
25191
25192 @deftp {Data Type} php-fpm-configuration
25193 Data Type for php-fpm service configuration.
25194 @table @asis
25195 @item @code{php} (default: @code{php})
25196 The php package to use.
25197 @item @code{socket} (default: @code{(string-append "/var/run/php" (version-major (package-version php)) "-fpm.sock")})
25198 The address on which to accept FastCGI requests. Valid syntaxes are:
25199 @table @asis
25200 @item @code{"ip.add.re.ss:port"}
25201 Listen on a TCP socket to a specific address on a specific port.
25202 @item @code{"port"}
25203 Listen on a TCP socket to all addresses on a specific port.
25204 @item @code{"/path/to/unix/socket"}
25205 Listen on a unix socket.
25206 @end table
25207
25208 @item @code{user} (default: @code{php-fpm})
25209 User who will own the php worker processes.
25210 @item @code{group} (default: @code{php-fpm})
25211 Group of the worker processes.
25212 @item @code{socket-user} (default: @code{php-fpm})
25213 User who can speak to the php-fpm socket.
25214 @item @code{socket-group} (default: @code{nginx})
25215 Group that can speak to the php-fpm socket.
25216 @item @code{pid-file} (default: @code{(string-append "/var/run/php" (version-major (package-version php)) "-fpm.pid")})
25217 The process id of the php-fpm process is written to this file
25218 once the service has started.
25219 @item @code{log-file} (default: @code{(string-append "/var/log/php" (version-major (package-version php)) "-fpm.log")})
25220 Log for the php-fpm master process.
25221 @item @code{process-manager} (default: @code{(php-fpm-dynamic-process-manager-configuration)})
25222 Detailed settings for the php-fpm process manager.
25223 Must be one of:
25224 @table @asis
25225 @item @code{<php-fpm-dynamic-process-manager-configuration>}
25226 @item @code{<php-fpm-static-process-manager-configuration>}
25227 @item @code{<php-fpm-on-demand-process-manager-configuration>}
25228 @end table
25229 @item @code{display-errors} (default @code{#f})
25230 Determines whether php errors and warning should be sent to clients
25231 and displayed in their browsers.
25232 This is useful for local php development, but a security risk for public sites,
25233 as error messages can reveal passwords and personal data.
25234 @item @code{timezone} (default @code{#f})
25235 Specifies @code{php_admin_value[date.timezone]} parameter.
25236 @item @code{workers-logfile} (default @code{(string-append "/var/log/php" (version-major (package-version php)) "-fpm.www.log")})
25237 This file will log the @code{stderr} outputs of php worker processes.
25238 Can be set to @code{#f} to disable logging.
25239 @item @code{file} (default @code{#f})
25240 An optional override of the whole configuration.
25241 You can use the @code{mixed-text-file} function or an absolute filepath for it.
25242 @item @code{php-ini-file} (default @code{#f})
25243 An optional override of the default php settings.
25244 It may be any ``file-like'' object (@pxref{G-Expressions, file-like objects}).
25245 You can use the @code{mixed-text-file} function or an absolute filepath for it.
25246
25247 For local development it is useful to set a higher timeout and memory
25248 limit for spawned php processes. This be accomplished with the
25249 following operating system configuration snippet:
25250 @lisp
25251 (define %local-php-ini
25252 (plain-file "php.ini"
25253 "memory_limit = 2G
25254 max_execution_time = 1800"))
25255
25256 (operating-system
25257 ;; @dots{}
25258 (services (cons (service php-fpm-service-type
25259 (php-fpm-configuration
25260 (php-ini-file %local-php-ini)))
25261 %base-services)))
25262 @end lisp
25263
25264 Consult the @url{https://www.php.net/manual/en/ini.core.php,core php.ini
25265 directives} for comprehensive documentation on the acceptable
25266 @file{php.ini} directives.
25267 @end table
25268 @end deftp
25269
25270 @deftp {Data type} php-fpm-dynamic-process-manager-configuration
25271 Data Type for the @code{dynamic} php-fpm process manager. With the
25272 @code{dynamic} process manager, spare worker processes are kept around
25273 based on it's configured limits.
25274 @table @asis
25275 @item @code{max-children} (default: @code{5})
25276 Maximum of worker processes.
25277 @item @code{start-servers} (default: @code{2})
25278 How many worker processes should be started on start-up.
25279 @item @code{min-spare-servers} (default: @code{1})
25280 How many spare worker processes should be kept around at minimum.
25281 @item @code{max-spare-servers} (default: @code{3})
25282 How many spare worker processes should be kept around at maximum.
25283 @end table
25284 @end deftp
25285
25286 @deftp {Data type} php-fpm-static-process-manager-configuration
25287 Data Type for the @code{static} php-fpm process manager. With the
25288 @code{static} process manager, an unchanging number of worker processes
25289 are created.
25290 @table @asis
25291 @item @code{max-children} (default: @code{5})
25292 Maximum of worker processes.
25293 @end table
25294 @end deftp
25295
25296 @deftp {Data type} php-fpm-on-demand-process-manager-configuration
25297 Data Type for the @code{on-demand} php-fpm process manager. With the
25298 @code{on-demand} process manager, worker processes are only created as
25299 requests arrive.
25300 @table @asis
25301 @item @code{max-children} (default: @code{5})
25302 Maximum of worker processes.
25303 @item @code{process-idle-timeout} (default: @code{10})
25304 The time in seconds after which a process with no requests is killed.
25305 @end table
25306 @end deftp
25307
25308
25309 @deffn {Scheme Procedure} nginx-php-location @
25310 [#:nginx-package nginx] @
25311 [socket (string-append "/var/run/php" @
25312 (version-major (package-version php)) @
25313 "-fpm.sock")]
25314 A helper function to quickly add php to an @code{nginx-server-configuration}.
25315 @end deffn
25316
25317 A simple services setup for nginx with php can look like this:
25318 @lisp
25319 (services (cons* (service dhcp-client-service-type)
25320 (service php-fpm-service-type)
25321 (service nginx-service-type
25322 (nginx-server-configuration
25323 (server-name '("example.com"))
25324 (root "/srv/http/")
25325 (locations
25326 (list (nginx-php-location)))
25327 (listen '("80"))
25328 (ssl-certificate #f)
25329 (ssl-certificate-key #f)))
25330 %base-services))
25331 @end lisp
25332
25333 @cindex cat-avatar-generator
25334 The cat avatar generator is a simple service to demonstrate the use of php-fpm
25335 in @code{Nginx}. It is used to generate cat avatar from a seed, for instance
25336 the hash of a user's email address.
25337
25338 @deffn {Scheme Procedure} cat-avatar-generator-service @
25339 [#:cache-dir "/var/cache/cat-avatar-generator"] @
25340 [#:package cat-avatar-generator] @
25341 [#:configuration (nginx-server-configuration)]
25342 Returns an nginx-server-configuration that inherits @code{configuration}. It
25343 extends the nginx configuration to add a server block that serves @code{package},
25344 a version of cat-avatar-generator. During execution, cat-avatar-generator will
25345 be able to use @code{cache-dir} as its cache directory.
25346 @end deffn
25347
25348 A simple setup for cat-avatar-generator can look like this:
25349 @lisp
25350 (services (cons* (cat-avatar-generator-service
25351 #:configuration
25352 (nginx-server-configuration
25353 (server-name '("example.com"))))
25354 ...
25355 %base-services))
25356 @end lisp
25357
25358 @subsubheading Hpcguix-web
25359
25360 @cindex hpcguix-web
25361 The @uref{https://github.com/UMCUGenetics/hpcguix-web/, hpcguix-web}
25362 program is a customizable web interface to browse Guix packages,
25363 initially designed for users of high-performance computing (HPC)
25364 clusters.
25365
25366 @defvr {Scheme Variable} hpcguix-web-service-type
25367 The service type for @code{hpcguix-web}.
25368 @end defvr
25369
25370 @deftp {Data Type} hpcguix-web-configuration
25371 Data type for the hpcguix-web service configuration.
25372
25373 @table @asis
25374 @item @code{specs}
25375 A gexp (@pxref{G-Expressions}) specifying the hpcguix-web service
25376 configuration. The main items available in this spec are:
25377
25378 @table @asis
25379 @item @code{title-prefix} (default: @code{"hpcguix | "})
25380 The page title prefix.
25381
25382 @item @code{guix-command} (default: @code{"guix"})
25383 The @command{guix} command.
25384
25385 @item @code{package-filter-proc} (default: @code{(const #t)})
25386 A procedure specifying how to filter packages that are displayed.
25387
25388 @item @code{package-page-extension-proc} (default: @code{(const '())})
25389 Extension package for @code{hpcguix-web}.
25390
25391 @item @code{menu} (default: @code{'()})
25392 Additional entry in page @code{menu}.
25393
25394 @item @code{channels} (default: @code{%default-channels})
25395 List of channels from which the package list is built (@pxref{Channels}).
25396
25397 @item @code{package-list-expiration} (default: @code{(* 12 3600)})
25398 The expiration time, in seconds, after which the package list is rebuilt from
25399 the latest instances of the given channels.
25400 @end table
25401
25402 See the hpcguix-web repository for a
25403 @uref{https://github.com/UMCUGenetics/hpcguix-web/blob/master/hpcweb-configuration.scm,
25404 complete example}.
25405
25406 @item @code{package} (default: @code{hpcguix-web})
25407 The hpcguix-web package to use.
25408 @end table
25409 @end deftp
25410
25411 A typical hpcguix-web service declaration looks like this:
25412
25413 @lisp
25414 (service hpcguix-web-service-type
25415 (hpcguix-web-configuration
25416 (specs
25417 #~(define site-config
25418 (hpcweb-configuration
25419 (title-prefix "Guix-HPC - ")
25420 (menu '(("/about" "ABOUT"))))))))
25421 @end lisp
25422
25423 @quotation Note
25424 The hpcguix-web service periodically updates the package list it publishes by
25425 pulling channels from Git. To that end, it needs to access X.509 certificates
25426 so that it can authenticate Git servers when communicating over HTTPS, and it
25427 assumes that @file{/etc/ssl/certs} contains those certificates.
25428
25429 Thus, make sure to add @code{nss-certs} or another certificate package to the
25430 @code{packages} field of your configuration. @ref{X.509 Certificates}, for
25431 more information on X.509 certificates.
25432 @end quotation
25433
25434 @subsubheading gmnisrv
25435
25436 @cindex gmnisrv
25437 The @uref{https://git.sr.ht/~sircmpwn/gmnisrv, gmnisrv} program is a
25438 simple @uref{https://gemini.circumlunar.space/, Gemini} protocol server.
25439
25440 @deffn {Scheme Variable} gmnisrv-service-type
25441 This is the type of the gmnisrv service, whose value should be a
25442 @code{gmnisrv-configuration} object, as in this example:
25443
25444 @lisp
25445 (service gmnisrv-service-type
25446 (gmnisrv-configuration
25447 (config-file (local-file "./my-gmnisrv.ini"))))
25448 @end lisp
25449 @end deffn
25450
25451 @deftp {Data Type} gmnisrv-configuration
25452 Data type representing the configuration of gmnisrv.
25453
25454 @table @asis
25455 @item @code{package} (default: @var{gmnisrv})
25456 Package object of the gmnisrv server.
25457
25458 @item @code{config-file} (default: @code{%default-gmnisrv-config-file})
25459 File-like object of the gmnisrv configuration file to use. The default
25460 configuration listens on port 1965 and serves files from
25461 @file{/srv/gemini}. Certificates are stored in
25462 @file{/var/lib/gemini/certs}. For more information, run @command{man
25463 gmnisrv} and @command{man gmnisrv.ini}.
25464
25465 @end table
25466 @end deftp
25467
25468 @subsubheading Agate
25469
25470 @cindex agate
25471 The @uref{gemini://qwertqwefsday.eu/agate.gmi, Agate}
25472 (@uref{https://github.com/mbrubeck/agate, GitHub page over HTTPS})
25473 program is a simple @uref{https://gemini.circumlunar.space/, Gemini}
25474 protocol server written in Rust.
25475
25476 @deffn {Scheme Variable} agate-service-type
25477 This is the type of the agate service, whose value should be an
25478 @code{agate-service-type} object, as in this example:
25479
25480 @lisp
25481 (service agate-service-type
25482 (agate-configuration
25483 (content "/srv/gemini")
25484 (cert "/srv/cert.pem")
25485 (key "/srv/key.rsa")))
25486 @end lisp
25487
25488 The example above represents the minimal tweaking necessary to get Agate
25489 up and running. Specifying the path to the certificate and key is
25490 always necessary, as the Gemini protocol requires TLS by default.
25491
25492 To obtain a certificate and a key, you could, for example, use OpenSSL,
25493 running a command similar to the following example:
25494
25495 @example
25496 openssl req -x509 -newkey rsa:4096 -keyout key.rsa -out cert.pem \
25497 -days 3650 -nodes -subj "/CN=example.com"
25498 @end example
25499
25500 Of course, you'll have to replace @i{example.com} with your own domain
25501 name, and then point the Agate configuration towards the path of the
25502 generated key and certificate.
25503
25504 @end deffn
25505
25506 @deftp {Data Type} agate-configuration
25507 Data type representing the configuration of Agate.
25508
25509 @table @asis
25510 @item @code{package} (default: @code{agate})
25511 The package object of the Agate server.
25512
25513 @item @code{content} (default: @file{"/srv/gemini"})
25514 The directory from which Agate will serve files.
25515
25516 @item @code{cert} (default: @code{#f})
25517 The path to the TLS certificate PEM file to be used for encrypted
25518 connections. Must be filled in with a value from the user.
25519
25520 @item @code{key} (default: @code{#f})
25521 The path to the PKCS8 private key file to be used for encrypted
25522 connections. Must be filled in with a value from the user.
25523
25524 @item @code{addr} (default: @code{'("0.0.0.0:1965" "[::]:1965")})
25525 A list of the addresses to listen on.
25526
25527 @item @code{hostname} (default: @code{#f})
25528 The domain name of this Gemini server. Optional.
25529
25530 @item @code{lang} (default: @code{#f})
25531 RFC 4646 language code(s) for text/gemini documents. Optional.
25532
25533 @item @code{silent?} (default: @code{#f})
25534 Set to @code{#t} to disable logging output.
25535
25536 @item @code{serve-secret?} (default: @code{#f})
25537 Set to @code{#t} to serve secret files (files/directories starting with
25538 a dot).
25539
25540 @item @code{log-ip?} (default: @code{#t})
25541 Whether or not to output IP addresses when logging.
25542
25543 @item @code{user} (default: @code{"agate"})
25544 Owner of the @code{agate} process.
25545
25546 @item @code{group} (default: @code{"agate"})
25547 Owner's group of the @code{agate} process.
25548
25549 @item @code{log-file} (default: @file{"/var/log/agate.log"})
25550 The file which should store the logging output of Agate.
25551
25552 @end table
25553 @end deftp
25554
25555 @node Certificate Services
25556 @subsection Certificate Services
25557
25558 @cindex Web
25559 @cindex HTTP, HTTPS
25560 @cindex Let's Encrypt
25561 @cindex TLS certificates
25562 The @code{(gnu services certbot)} module provides a service to
25563 automatically obtain a valid TLS certificate from the Let's Encrypt
25564 certificate authority. These certificates can then be used to serve
25565 content securely over HTTPS or other TLS-based protocols, with the
25566 knowledge that the client will be able to verify the server's
25567 authenticity.
25568
25569 @url{https://letsencrypt.org/, Let's Encrypt} provides the
25570 @code{certbot} tool to automate the certification process. This tool
25571 first securely generates a key on the server. It then makes a request
25572 to the Let's Encrypt certificate authority (CA) to sign the key. The CA
25573 checks that the request originates from the host in question by using a
25574 challenge-response protocol, requiring the server to provide its
25575 response over HTTP@. If that protocol completes successfully, the CA
25576 signs the key, resulting in a certificate. That certificate is valid
25577 for a limited period of time, and therefore to continue to provide TLS
25578 services, the server needs to periodically ask the CA to renew its
25579 signature.
25580
25581 The certbot service automates this process: the initial key
25582 generation, the initial certification request to the Let's Encrypt
25583 service, the web server challenge/response integration, writing the
25584 certificate to disk, the automated periodic renewals, and the deployment
25585 tasks associated with the renewal (e.g.@: reloading services, copying keys
25586 with different permissions).
25587
25588 Certbot is run twice a day, at a random minute within the hour. It
25589 won't do anything until your certificates are due for renewal or
25590 revoked, but running it regularly would give your service a chance of
25591 staying online in case a Let's Encrypt-initiated revocation happened for
25592 some reason.
25593
25594 By using this service, you agree to the ACME Subscriber Agreement, which
25595 can be found there:
25596 @url{https://acme-v01.api.letsencrypt.org/directory}.
25597
25598 @defvr {Scheme Variable} certbot-service-type
25599 A service type for the @code{certbot} Let's Encrypt client. Its value
25600 must be a @code{certbot-configuration} record as in this example:
25601
25602 @lisp
25603 (define %nginx-deploy-hook
25604 (program-file
25605 "nginx-deploy-hook"
25606 #~(let ((pid (call-with-input-file "/var/run/nginx/pid" read)))
25607 (kill pid SIGHUP))))
25608
25609 (service certbot-service-type
25610 (certbot-configuration
25611 (email "foo@@example.net")
25612 (certificates
25613 (list
25614 (certificate-configuration
25615 (domains '("example.net" "www.example.net"))
25616 (deploy-hook %nginx-deploy-hook))
25617 (certificate-configuration
25618 (domains '("bar.example.net")))))))
25619 @end lisp
25620
25621 See below for details about @code{certbot-configuration}.
25622 @end defvr
25623
25624 @deftp {Data Type} certbot-configuration
25625 Data type representing the configuration of the @code{certbot} service.
25626 This type has the following parameters:
25627
25628 @table @asis
25629 @item @code{package} (default: @code{certbot})
25630 The certbot package to use.
25631
25632 @item @code{webroot} (default: @code{/var/www})
25633 The directory from which to serve the Let's Encrypt challenge/response
25634 files.
25635
25636 @item @code{certificates} (default: @code{()})
25637 A list of @code{certificates-configuration}s for which to generate
25638 certificates and request signatures. Each certificate has a @code{name}
25639 and several @code{domains}.
25640
25641 @item @code{email} (default: @code{#f})
25642 Optional email address used for registration and recovery contact.
25643 Setting this is encouraged as it allows you to receive important
25644 notifications about the account and issued certificates.
25645
25646 @item @code{server} (default: @code{#f})
25647 Optional URL of ACME server. Setting this overrides certbot's default,
25648 which is the Let's Encrypt server.
25649
25650 @item @code{rsa-key-size} (default: @code{2048})
25651 Size of the RSA key.
25652
25653 @item @code{default-location} (default: @i{see below})
25654 The default @code{nginx-location-configuration}. Because @code{certbot}
25655 needs to be able to serve challenges and responses, it needs to be able
25656 to run a web server. It does so by extending the @code{nginx} web
25657 service with an @code{nginx-server-configuration} listening on the
25658 @var{domains} on port 80, and which has a
25659 @code{nginx-location-configuration} for the @code{/.well-known/} URI
25660 path subspace used by Let's Encrypt. @xref{Web Services}, for more on
25661 these nginx configuration data types.
25662
25663 Requests to other URL paths will be matched by the
25664 @code{default-location}, which if present is added to all
25665 @code{nginx-server-configuration}s.
25666
25667 By default, the @code{default-location} will issue a redirect from
25668 @code{http://@var{domain}/...} to @code{https://@var{domain}/...}, leaving
25669 you to define what to serve on your site via @code{https}.
25670
25671 Pass @code{#f} to not issue a default location.
25672 @end table
25673 @end deftp
25674
25675 @deftp {Data Type} certificate-configuration
25676 Data type representing the configuration of a certificate.
25677 This type has the following parameters:
25678
25679 @table @asis
25680 @item @code{name} (default: @i{see below})
25681 This name is used by Certbot for housekeeping and in file paths; it
25682 doesn't affect the content of the certificate itself. To see
25683 certificate names, run @code{certbot certificates}.
25684
25685 Its default is the first provided domain.
25686
25687 @item @code{domains} (default: @code{()})
25688 The first domain provided will be the subject CN of the certificate, and
25689 all domains will be Subject Alternative Names on the certificate.
25690
25691 @item @code{challenge} (default: @code{#f})
25692 The challenge type that has to be run by certbot. If @code{#f} is specified,
25693 default to the HTTP challenge. If a value is specified, defaults to the
25694 manual plugin (see @code{authentication-hook}, @code{cleanup-hook} and
25695 the documentation at @url{https://certbot.eff.org/docs/using.html#hooks}),
25696 and gives Let's Encrypt permission to log the public IP address of the
25697 requesting machine.
25698
25699 @item @code{authentication-hook} (default: @code{#f})
25700 Command to be run in a shell once for each certificate challenge to be
25701 answered. For this command, the shell variable @code{$CERTBOT_DOMAIN}
25702 will contain the domain being authenticated, @code{$CERTBOT_VALIDATION}
25703 contains the validation string and @code{$CERTBOT_TOKEN} contains the
25704 file name of the resource requested when performing an HTTP-01 challenge.
25705
25706 @item @code{cleanup-hook} (default: @code{#f})
25707 Command to be run in a shell once for each certificate challenge that
25708 have been answered by the @code{auth-hook}. For this command, the shell
25709 variables available in the @code{auth-hook} script are still available, and
25710 additionally @code{$CERTBOT_AUTH_OUTPUT} will contain the standard output
25711 of the @code{auth-hook} script.
25712
25713 @item @code{deploy-hook} (default: @code{#f})
25714 Command to be run in a shell once for each successfully issued
25715 certificate. For this command, the shell variable
25716 @code{$RENEWED_LINEAGE} will point to the config live subdirectory (for
25717 example, @samp{"/etc/letsencrypt/live/example.com"}) containing the new
25718 certificates and keys; the shell variable @code{$RENEWED_DOMAINS} will
25719 contain a space-delimited list of renewed certificate domains (for
25720 example, @samp{"example.com www.example.com"}.
25721
25722 @end table
25723 @end deftp
25724
25725 For each @code{certificate-configuration}, the certificate is saved to
25726 @code{/etc/letsencrypt/live/@var{name}/fullchain.pem} and the key is
25727 saved to @code{/etc/letsencrypt/live/@var{name}/privkey.pem}.
25728 @node DNS Services
25729 @subsection DNS Services
25730 @cindex DNS (domain name system)
25731 @cindex domain name system (DNS)
25732
25733 The @code{(gnu services dns)} module provides services related to the
25734 @dfn{domain name system} (DNS). It provides a server service for hosting
25735 an @emph{authoritative} DNS server for multiple zones, slave or master.
25736 This service uses @uref{https://www.knot-dns.cz/, Knot DNS}. And also a
25737 caching and forwarding DNS server for the LAN, which uses
25738 @uref{http://www.thekelleys.org.uk/dnsmasq/doc.html, dnsmasq}.
25739
25740 @subsubheading Knot Service
25741
25742 An example configuration of an authoritative server for two zones, one master
25743 and one slave, is:
25744
25745 @lisp
25746 (define-zone-entries example.org.zone
25747 ;; Name TTL Class Type Data
25748 ("@@" "" "IN" "A" "127.0.0.1")
25749 ("@@" "" "IN" "NS" "ns")
25750 ("ns" "" "IN" "A" "127.0.0.1"))
25751
25752 (define master-zone
25753 (knot-zone-configuration
25754 (domain "example.org")
25755 (zone (zone-file
25756 (origin "example.org")
25757 (entries example.org.zone)))))
25758
25759 (define slave-zone
25760 (knot-zone-configuration
25761 (domain "plop.org")
25762 (dnssec-policy "default")
25763 (master (list "plop-master"))))
25764
25765 (define plop-master
25766 (knot-remote-configuration
25767 (id "plop-master")
25768 (address (list "208.76.58.171"))))
25769
25770 (operating-system
25771 ;; ...
25772 (services (cons* (service knot-service-type
25773 (knot-configuration
25774 (remotes (list plop-master))
25775 (zones (list master-zone slave-zone))))
25776 ;; ...
25777 %base-services)))
25778 @end lisp
25779
25780 @deffn {Scheme Variable} knot-service-type
25781 This is the type for the Knot DNS server.
25782
25783 Knot DNS is an authoritative DNS server, meaning that it can serve multiple
25784 zones, that is to say domain names you would buy from a registrar. This server
25785 is not a resolver, meaning that it can only resolve names for which it is
25786 authoritative. This server can be configured to serve zones as a master server
25787 or a slave server as a per-zone basis. Slave zones will get their data from
25788 masters, and will serve it as an authoritative server. From the point of view
25789 of a resolver, there is no difference between master and slave.
25790
25791 The following data types are used to configure the Knot DNS server:
25792 @end deffn
25793
25794 @deftp {Data Type} knot-key-configuration
25795 Data type representing a key.
25796 This type has the following parameters:
25797
25798 @table @asis
25799 @item @code{id} (default: @code{""})
25800 An identifier for other configuration fields to refer to this key. IDs must
25801 be unique and must not be empty.
25802
25803 @item @code{algorithm} (default: @code{#f})
25804 The algorithm to use. Choose between @code{#f}, @code{'hmac-md5},
25805 @code{'hmac-sha1}, @code{'hmac-sha224}, @code{'hmac-sha256}, @code{'hmac-sha384}
25806 and @code{'hmac-sha512}.
25807
25808 @item @code{secret} (default: @code{""})
25809 The secret key itself.
25810
25811 @end table
25812 @end deftp
25813
25814 @deftp {Data Type} knot-acl-configuration
25815 Data type representing an Access Control List (ACL) configuration.
25816 This type has the following parameters:
25817
25818 @table @asis
25819 @item @code{id} (default: @code{""})
25820 An identifier for other configuration fields to refer to this key. IDs must be
25821 unique and must not be empty.
25822
25823 @item @code{address} (default: @code{'()})
25824 An ordered list of IP addresses, network subnets, or network ranges represented
25825 with strings. The query must match one of them. Empty value means that
25826 address match is not required.
25827
25828 @item @code{key} (default: @code{'()})
25829 An ordered list of references to keys represented with strings. The string
25830 must match a key ID defined in a @code{knot-key-configuration}. No key means
25831 that a key is not require to match that ACL.
25832
25833 @item @code{action} (default: @code{'()})
25834 An ordered list of actions that are permitted or forbidden by this ACL@. Possible
25835 values are lists of zero or more elements from @code{'transfer}, @code{'notify}
25836 and @code{'update}.
25837
25838 @item @code{deny?} (default: @code{#f})
25839 When true, the ACL defines restrictions. Listed actions are forbidden. When
25840 false, listed actions are allowed.
25841
25842 @end table
25843 @end deftp
25844
25845 @deftp {Data Type} zone-entry
25846 Data type representing a record entry in a zone file.
25847 This type has the following parameters:
25848
25849 @table @asis
25850 @item @code{name} (default: @code{"@@"})
25851 The name of the record. @code{"@@"} refers to the origin of the zone. Names
25852 are relative to the origin of the zone. For example, in the @code{example.org}
25853 zone, @code{"ns.example.org"} actually refers to @code{ns.example.org.example.org}.
25854 Names ending with a dot are absolute, which means that @code{"ns.example.org."}
25855 refers to @code{ns.example.org}.
25856
25857 @item @code{ttl} (default: @code{""})
25858 The Time-To-Live (TTL) of this record. If not set, the default TTL is used.
25859
25860 @item @code{class} (default: @code{"IN"})
25861 The class of the record. Knot currently supports only @code{"IN"} and
25862 partially @code{"CH"}.
25863
25864 @item @code{type} (default: @code{"A"})
25865 The type of the record. Common types include A (IPv4 address), AAAA (IPv6
25866 address), NS (Name Server) and MX (Mail eXchange). Many other types are
25867 defined.
25868
25869 @item @code{data} (default: @code{""})
25870 The data contained in the record. For instance an IP address associated with
25871 an A record, or a domain name associated with an NS record. Remember that
25872 domain names are relative to the origin unless they end with a dot.
25873
25874 @end table
25875 @end deftp
25876
25877 @deftp {Data Type} zone-file
25878 Data type representing the content of a zone file.
25879 This type has the following parameters:
25880
25881 @table @asis
25882 @item @code{entries} (default: @code{'()})
25883 The list of entries. The SOA record is taken care of, so you don't need to
25884 put it in the list of entries. This list should probably contain an entry
25885 for your primary authoritative DNS server. Other than using a list of entries
25886 directly, you can use @code{define-zone-entries} to define a object containing
25887 the list of entries more easily, that you can later pass to the @code{entries}
25888 field of the @code{zone-file}.
25889
25890 @item @code{origin} (default: @code{""})
25891 The name of your zone. This parameter cannot be empty.
25892
25893 @item @code{ns} (default: @code{"ns"})
25894 The domain of your primary authoritative DNS server. The name is relative to
25895 the origin, unless it ends with a dot. It is mandatory that this primary
25896 DNS server corresponds to an NS record in the zone and that it is associated
25897 to an IP address in the list of entries.
25898
25899 @item @code{mail} (default: @code{"hostmaster"})
25900 An email address people can contact you at, as the owner of the zone. This
25901 is translated as @code{<mail>@@<origin>}.
25902
25903 @item @code{serial} (default: @code{1})
25904 The serial number of the zone. As this is used to keep track of changes by
25905 both slaves and resolvers, it is mandatory that it @emph{never} decreases.
25906 Always increment it when you make a change in your zone.
25907
25908 @item @code{refresh} (default: @code{(* 2 24 3600)})
25909 The frequency at which slaves will do a zone transfer. This value is a number
25910 of seconds. It can be computed by multiplications or with
25911 @code{(string->duration)}.
25912
25913 @item @code{retry} (default: @code{(* 15 60)})
25914 The period after which a slave will retry to contact its master when it fails
25915 to do so a first time.
25916
25917 @item @code{expiry} (default: @code{(* 14 24 3600)})
25918 Default TTL of records. Existing records are considered correct for at most
25919 this amount of time. After this period, resolvers will invalidate their cache
25920 and check again that it still exists.
25921
25922 @item @code{nx} (default: @code{3600})
25923 Default TTL of inexistent records. This delay is usually short because you want
25924 your new domains to reach everyone quickly.
25925
25926 @end table
25927 @end deftp
25928
25929 @deftp {Data Type} knot-remote-configuration
25930 Data type representing a remote configuration.
25931 This type has the following parameters:
25932
25933 @table @asis
25934 @item @code{id} (default: @code{""})
25935 An identifier for other configuration fields to refer to this remote. IDs must
25936 be unique and must not be empty.
25937
25938 @item @code{address} (default: @code{'()})
25939 An ordered list of destination IP addresses. Addresses are tried in sequence.
25940 An optional port can be given with the @@ separator. For instance:
25941 @code{(list "1.2.3.4" "2.3.4.5@@53")}. Default port is 53.
25942
25943 @item @code{via} (default: @code{'()})
25944 An ordered list of source IP addresses. An empty list will have Knot choose
25945 an appropriate source IP@. An optional port can be given with the @@ separator.
25946 The default is to choose at random.
25947
25948 @item @code{key} (default: @code{#f})
25949 A reference to a key, that is a string containing the identifier of a key
25950 defined in a @code{knot-key-configuration} field.
25951
25952 @end table
25953 @end deftp
25954
25955 @deftp {Data Type} knot-keystore-configuration
25956 Data type representing a keystore to hold dnssec keys.
25957 This type has the following parameters:
25958
25959 @table @asis
25960 @item @code{id} (default: @code{""})
25961 The id of the keystore. It must not be empty.
25962
25963 @item @code{backend} (default: @code{'pem})
25964 The backend to store the keys in. Can be @code{'pem} or @code{'pkcs11}.
25965
25966 @item @code{config} (default: @code{"/var/lib/knot/keys/keys"})
25967 The configuration string of the backend. An example for the PKCS#11 is:
25968 @code{"pkcs11:token=knot;pin-value=1234 /gnu/store/.../lib/pkcs11/libsofthsm2.so"}.
25969 For the pem backend, the string represents a path in the file system.
25970
25971 @end table
25972 @end deftp
25973
25974 @deftp {Data Type} knot-policy-configuration
25975 Data type representing a dnssec policy. Knot DNS is able to automatically
25976 sign your zones. It can either generate and manage your keys automatically or
25977 use keys that you generate.
25978
25979 Dnssec is usually implemented using two keys: a Key Signing Key (KSK) that is
25980 used to sign the second, and a Zone Signing Key (ZSK) that is used to sign the
25981 zone. In order to be trusted, the KSK needs to be present in the parent zone
25982 (usually a top-level domain). If your registrar supports dnssec, you will
25983 have to send them your KSK's hash so they can add a DS record in their zone.
25984 This is not automated and need to be done each time you change your KSK.
25985
25986 The policy also defines the lifetime of keys. Usually, ZSK can be changed
25987 easily and use weaker cryptographic functions (they use lower parameters) in
25988 order to sign records quickly, so they are changed often. The KSK however
25989 requires manual interaction with the registrar, so they are changed less often
25990 and use stronger parameters because they sign only one record.
25991
25992 This type has the following parameters:
25993
25994 @table @asis
25995 @item @code{id} (default: @code{""})
25996 The id of the policy. It must not be empty.
25997
25998 @item @code{keystore} (default: @code{"default"})
25999 A reference to a keystore, that is a string containing the identifier of a
26000 keystore defined in a @code{knot-keystore-configuration} field. The
26001 @code{"default"} identifier means the default keystore (a kasp database that
26002 was setup by this service).
26003
26004 @item @code{manual?} (default: @code{#f})
26005 Whether the key management is manual or automatic.
26006
26007 @item @code{single-type-signing?} (default: @code{#f})
26008 When @code{#t}, use the Single-Type Signing Scheme.
26009
26010 @item @code{algorithm} (default: @code{"ecdsap256sha256"})
26011 An algorithm of signing keys and issued signatures.
26012
26013 @item @code{ksk-size} (default: @code{256})
26014 The length of the KSK@. Note that this value is correct for the default
26015 algorithm, but would be unsecure for other algorithms.
26016
26017 @item @code{zsk-size} (default: @code{256})
26018 The length of the ZSK@. Note that this value is correct for the default
26019 algorithm, but would be unsecure for other algorithms.
26020
26021 @item @code{dnskey-ttl} (default: @code{'default})
26022 The TTL value for DNSKEY records added into zone apex. The special
26023 @code{'default} value means same as the zone SOA TTL.
26024
26025 @item @code{zsk-lifetime} (default: @code{(* 30 24 3600)})
26026 The period between ZSK publication and the next rollover initiation.
26027
26028 @item @code{propagation-delay} (default: @code{(* 24 3600)})
26029 An extra delay added for each key rollover step. This value should be high
26030 enough to cover propagation of data from the master server to all slaves.
26031
26032 @item @code{rrsig-lifetime} (default: @code{(* 14 24 3600)})
26033 A validity period of newly issued signatures.
26034
26035 @item @code{rrsig-refresh} (default: @code{(* 7 24 3600)})
26036 A period how long before a signature expiration the signature will be refreshed.
26037
26038 @item @code{nsec3?} (default: @code{#f})
26039 When @code{#t}, NSEC3 will be used instead of NSEC.
26040
26041 @item @code{nsec3-iterations} (default: @code{5})
26042 The number of additional times the hashing is performed.
26043
26044 @item @code{nsec3-salt-length} (default: @code{8})
26045 The length of a salt field in octets, which is appended to the original owner
26046 name before hashing.
26047
26048 @item @code{nsec3-salt-lifetime} (default: @code{(* 30 24 3600)})
26049 The validity period of newly issued salt field.
26050
26051 @end table
26052 @end deftp
26053
26054 @deftp {Data Type} knot-zone-configuration
26055 Data type representing a zone served by Knot.
26056 This type has the following parameters:
26057
26058 @table @asis
26059 @item @code{domain} (default: @code{""})
26060 The domain served by this configuration. It must not be empty.
26061
26062 @item @code{file} (default: @code{""})
26063 The file where this zone is saved. This parameter is ignored by master zones.
26064 Empty means default location that depends on the domain name.
26065
26066 @item @code{zone} (default: @code{(zone-file)})
26067 The content of the zone file. This parameter is ignored by slave zones. It
26068 must contain a zone-file record.
26069
26070 @item @code{master} (default: @code{'()})
26071 A list of master remotes. When empty, this zone is a master. When set, this
26072 zone is a slave. This is a list of remotes identifiers.
26073
26074 @item @code{ddns-master} (default: @code{#f})
26075 The main master. When empty, it defaults to the first master in the list of
26076 masters.
26077
26078 @item @code{notify} (default: @code{'()})
26079 A list of slave remote identifiers.
26080
26081 @item @code{acl} (default: @code{'()})
26082 A list of acl identifiers.
26083
26084 @item @code{semantic-checks?} (default: @code{#f})
26085 When set, this adds more semantic checks to the zone.
26086
26087 @item @code{disable-any?} (default: @code{#f})
26088 When set, this forbids queries of the ANY type.
26089
26090 @item @code{zonefile-sync} (default: @code{0})
26091 The delay between a modification in memory and on disk. 0 means immediate
26092 synchronization.
26093
26094 @item @code{zonefile-load} (default: @code{#f})
26095 The way the zone file contents are applied during zone load. Possible values
26096 are:
26097
26098 @itemize
26099 @item @code{#f} for using the default value from Knot,
26100 @item @code{'none} for not using the zone file at all,
26101 @item @code{'difference} for computing the difference between already available
26102 contents and zone contents and applying it to the current zone contents,
26103 @item @code{'difference-no-serial} for the same as @code{'difference}, but
26104 ignoring the SOA serial in the zone file, while the server takes care of it
26105 automatically.
26106 @item @code{'whole} for loading zone contents from the zone file.
26107 @end itemize
26108
26109 @item @code{journal-content} (default: @code{#f})
26110 The way the journal is used to store zone and its changes. Possible values
26111 are @code{'none} to not use it at all, @code{'changes} to store changes and
26112 @code{'all} to store contents. @code{#f} does not set this option, so the
26113 default value from Knot is used.
26114
26115 @item @code{max-journal-usage} (default: @code{#f})
26116 The maximum size for the journal on disk. @code{#f} does not set this option,
26117 so the default value from Knot is used.
26118
26119 @item @code{max-journal-depth} (default: @code{#f})
26120 The maximum size of the history. @code{#f} does not set this option, so the
26121 default value from Knot is used.
26122
26123 @item @code{max-zone-size} (default: @code{#f})
26124 The maximum size of the zone file. This limit is enforced for incoming
26125 transfer and updates. @code{#f} does not set this option, so the default
26126 value from Knot is used.
26127
26128 @item @code{dnssec-policy} (default: @code{#f})
26129 A reference to a @code{knot-policy-configuration} record, or the special
26130 name @code{"default"}. If the value is @code{#f}, there is no dnssec signing
26131 on this zone.
26132
26133 @item @code{serial-policy} (default: @code{'increment})
26134 A policy between @code{'increment} and @code{'unixtime}.
26135
26136 @end table
26137 @end deftp
26138
26139 @deftp {Data Type} knot-configuration
26140 Data type representing the Knot configuration.
26141 This type has the following parameters:
26142
26143 @table @asis
26144 @item @code{knot} (default: @code{knot})
26145 The Knot package.
26146
26147 @item @code{run-directory} (default: @code{"/var/run/knot"})
26148 The run directory. This directory will be used for pid file and sockets.
26149
26150 @item @code{includes} (default: @code{'()})
26151 A list of strings or file-like objects denoting other files that must be
26152 included at the top of the configuration file.
26153
26154 @cindex secrets, Knot service
26155 This can be used to manage secrets out-of-band. For example, secret
26156 keys may be stored in an out-of-band file not managed by Guix, and
26157 thus not visible in @file{/gnu/store}---e.g., you could store secret
26158 key configuration in @file{/etc/knot/secrets.conf} and add this file
26159 to the @code{includes} list.
26160
26161 One can generate a secret tsig key (for nsupdate and zone transfers with the
26162 keymgr command from the knot package. Note that the package is not automatically
26163 installed by the service. The following example shows how to generate a new
26164 tsig key:
26165
26166 @example
26167 keymgr -t mysecret > /etc/knot/secrets.conf
26168 chmod 600 /etc/knot/secrets.conf
26169 @end example
26170
26171 Also note that the generated key will be named @var{mysecret}, so it is the
26172 name that needs to be used in the @var{key} field of the
26173 @code{knot-acl-configuration} record and in other places that need to refer
26174 to that key.
26175
26176 It can also be used to add configuration not supported by this interface.
26177
26178 @item @code{listen-v4} (default: @code{"0.0.0.0"})
26179 An ip address on which to listen.
26180
26181 @item @code{listen-v6} (default: @code{"::"})
26182 An ip address on which to listen.
26183
26184 @item @code{listen-port} (default: @code{53})
26185 A port on which to listen.
26186
26187 @item @code{keys} (default: @code{'()})
26188 The list of knot-key-configuration used by this configuration.
26189
26190 @item @code{acls} (default: @code{'()})
26191 The list of knot-acl-configuration used by this configuration.
26192
26193 @item @code{remotes} (default: @code{'()})
26194 The list of knot-remote-configuration used by this configuration.
26195
26196 @item @code{zones} (default: @code{'()})
26197 The list of knot-zone-configuration used by this configuration.
26198
26199 @end table
26200 @end deftp
26201
26202 @subsubheading Knot Resolver Service
26203
26204 @deffn {Scheme Variable} knot-resolver-service-type
26205 This is the type of the knot resolver service, whose value should be
26206 an @code{knot-resolver-configuration} object as in this example:
26207
26208 @lisp
26209 (service knot-resolver-service-type
26210 (knot-resolver-configuration
26211 (kresd-config-file (plain-file "kresd.conf" "
26212 net.listen('192.168.0.1', 5353)
26213 user('knot-resolver', 'knot-resolver')
26214 modules = @{ 'hints > iterate', 'stats', 'predict' @}
26215 cache.size = 100 * MB
26216 "))))
26217 @end lisp
26218
26219 For more information, refer its @url{https://knot-resolver.readthedocs.org/en/stable/daemon.html#configuration, manual}.
26220 @end deffn
26221
26222 @deftp {Data Type} knot-resolver-configuration
26223 Data type representing the configuration of knot-resolver.
26224
26225 @table @asis
26226 @item @code{package} (default: @var{knot-resolver})
26227 Package object of the knot DNS resolver.
26228
26229 @item @code{kresd-config-file} (default: %kresd.conf)
26230 File-like object of the kresd configuration file to use, by default it
26231 will listen on @code{127.0.0.1} and @code{::1}.
26232
26233 @item @code{garbage-collection-interval} (default: 1000)
26234 Number of milliseconds for @code{kres-cache-gc} to periodically trim the cache.
26235
26236 @end table
26237 @end deftp
26238
26239
26240 @subsubheading Dnsmasq Service
26241
26242 @deffn {Scheme Variable} dnsmasq-service-type
26243 This is the type of the dnsmasq service, whose value should be an
26244 @code{dnsmasq-configuration} object as in this example:
26245
26246 @lisp
26247 (service dnsmasq-service-type
26248 (dnsmasq-configuration
26249 (no-resolv? #t)
26250 (servers '("192.168.1.1"))))
26251 @end lisp
26252 @end deffn
26253
26254 @deftp {Data Type} dnsmasq-configuration
26255 Data type representing the configuration of dnsmasq.
26256
26257 @table @asis
26258 @item @code{package} (default: @var{dnsmasq})
26259 Package object of the dnsmasq server.
26260
26261 @item @code{no-hosts?} (default: @code{#f})
26262 When true, don't read the hostnames in /etc/hosts.
26263
26264 @item @code{port} (default: @code{53})
26265 The port to listen on. Setting this to zero completely disables DNS
26266 responses, leaving only DHCP and/or TFTP functions.
26267
26268 @item @code{local-service?} (default: @code{#t})
26269 Accept DNS queries only from hosts whose address is on a local subnet,
26270 ie a subnet for which an interface exists on the server.
26271
26272 @item @code{listen-addresses} (default: @code{'()})
26273 Listen on the given IP addresses.
26274
26275 @item @code{resolv-file} (default: @code{"/etc/resolv.conf"})
26276 The file to read the IP address of the upstream nameservers from.
26277
26278 @item @code{no-resolv?} (default: @code{#f})
26279 When true, don't read @var{resolv-file}.
26280
26281 @item @code{servers} (default: @code{'()})
26282 Specify IP address of upstream servers directly.
26283
26284 @item @code{addresses} (default: @code{'()})
26285 For each entry, specify an IP address to return for any host in the
26286 given domains. Queries in the domains are never forwarded and always
26287 replied to with the specified IP address.
26288
26289 This is useful for redirecting hosts locally, for example:
26290
26291 @lisp
26292 (service dnsmasq-service-type
26293 (dnsmasq-configuration
26294 (addresses
26295 '(; Redirect to a local web-server.
26296 "/example.org/127.0.0.1"
26297 ; Redirect subdomain to a specific IP.
26298 "/subdomain.example.org/192.168.1.42"))))
26299 @end lisp
26300
26301 Note that rules in @file{/etc/hosts} take precedence over this.
26302
26303 @item @code{cache-size} (default: @code{150})
26304 Set the size of dnsmasq's cache. Setting the cache size to zero
26305 disables caching.
26306
26307 @item @code{negative-cache?} (default: @code{#t})
26308 When false, disable negative caching.
26309
26310 @item @code{tftp-enable?} (default: @code{#f})
26311 Whether to enable the built-in TFTP server.
26312
26313 @item @code{tftp-no-fail?} (default: @code{#f})
26314 If true, does not fail dnsmasq if the TFTP server could not start up.
26315
26316 @item @code{tftp-single-port?} (default: @code{#f})
26317 Whether to use only one single port for TFTP.
26318
26319 @item @code{tftp-secure?} (default: @code{#f})
26320 If true, only files owned by the user running the dnsmasq process are accessible.
26321
26322 If dnsmasq is being run as root, different rules apply:
26323 @code{tftp-secure?} has no effect, but only files which have the
26324 world-readable bit set are accessible.
26325
26326 @item @code{tftp-max} (default: @code{#f})
26327 If set, sets the maximal number of concurrent connections allowed.
26328
26329 @item @code{tftp-mtu} (default: @code{#f})
26330 If set, sets the MTU for TFTP packets to that value.
26331
26332 @item @code{tftp-no-blocksize?} (default: @code{#f})
26333 If true, stops the TFTP server from negotiating the blocksize with a client.
26334
26335 @item @code{tftp-lowercase?} (default: @code{#f})
26336 Whether to convert all filenames in TFTP requests to lowercase.
26337
26338 @item @code{tftp-port-range} (default: @code{#f})
26339 If set, fixes the dynamical ports (one per client) to the given range
26340 (@code{"<start>,<end>"}).
26341
26342 @item @code{tftp-root} (default: @code{/var/empty,lo})
26343 Look for files to transfer using TFTP relative to the given directory.
26344 When this is set, TFTP paths which include @samp{..} are rejected, to stop clients
26345 getting outside the specified root. Absolute paths (starting with @samp{/}) are
26346 allowed, but they must be within the TFTP-root. If the optional interface
26347 argument is given, the directory is only used for TFTP requests via that
26348 interface.
26349
26350 @item @code{tftp-unique-root} (default: @code{#f})
26351 If set, add the IP or hardware address of the TFTP client as a path component
26352 on the end of the TFTP-root. Only valid if a TFTP root is set and the
26353 directory exists. Defaults to adding IP address (in standard dotted-quad
26354 format).
26355
26356 For instance, if @option{--tftp-root} is @samp{/tftp} and client
26357 @samp{1.2.3.4} requests file @file{myfile} then the effective path will
26358 be @file{/tftp/1.2.3.4/myfile} if @file{/tftp/1.2.3.4} exists or
26359 @file{/tftp/myfile} otherwise. When @samp{=mac} is specified it will
26360 append the MAC address instead, using lowercase zero padded digits
26361 separated by dashes, e.g.: @samp{01-02-03-04-aa-bb}. Note that
26362 resolving MAC addresses is only possible if the client is in the local
26363 network or obtained a DHCP lease from dnsmasq.
26364
26365 @end table
26366 @end deftp
26367
26368 @subsubheading ddclient Service
26369
26370 @cindex ddclient
26371 The ddclient service described below runs the ddclient daemon, which takes
26372 care of automatically updating DNS entries for service providers such as
26373 @uref{https://dyn.com/dns/, Dyn}.
26374
26375 The following example show instantiates the service with its default
26376 configuration:
26377
26378 @lisp
26379 (service ddclient-service-type)
26380 @end lisp
26381
26382 Note that ddclient needs to access credentials that are stored in a
26383 @dfn{secret file}, by default @file{/etc/ddclient/secrets} (see
26384 @code{secret-file} below). You are expected to create this file manually, in
26385 an ``out-of-band'' fashion (you @emph{could} make this file part of the
26386 service configuration, for instance by using @code{plain-file}, but it will be
26387 world-readable @i{via} @file{/gnu/store}). See the examples in the
26388 @file{share/ddclient} directory of the @code{ddclient} package.
26389
26390 @c %start of fragment
26391
26392 Available @code{ddclient-configuration} fields are:
26393
26394 @deftypevr {@code{ddclient-configuration} parameter} package ddclient
26395 The ddclient package.
26396
26397 @end deftypevr
26398
26399 @deftypevr {@code{ddclient-configuration} parameter} integer daemon
26400 The period after which ddclient will retry to check IP and domain name.
26401
26402 Defaults to @samp{300}.
26403
26404 @end deftypevr
26405
26406 @deftypevr {@code{ddclient-configuration} parameter} boolean syslog
26407 Use syslog for the output.
26408
26409 Defaults to @samp{#t}.
26410
26411 @end deftypevr
26412
26413 @deftypevr {@code{ddclient-configuration} parameter} string mail
26414 Mail to user.
26415
26416 Defaults to @samp{"root"}.
26417
26418 @end deftypevr
26419
26420 @deftypevr {@code{ddclient-configuration} parameter} string mail-failure
26421 Mail failed update to user.
26422
26423 Defaults to @samp{"root"}.
26424
26425 @end deftypevr
26426
26427 @deftypevr {@code{ddclient-configuration} parameter} string pid
26428 The ddclient PID file.
26429
26430 Defaults to @samp{"/var/run/ddclient/ddclient.pid"}.
26431
26432 @end deftypevr
26433
26434 @deftypevr {@code{ddclient-configuration} parameter} boolean ssl
26435 Enable SSL support.
26436
26437 Defaults to @samp{#t}.
26438
26439 @end deftypevr
26440
26441 @deftypevr {@code{ddclient-configuration} parameter} string user
26442 Specifies the user name or ID that is used when running ddclient
26443 program.
26444
26445 Defaults to @samp{"ddclient"}.
26446
26447 @end deftypevr
26448
26449 @deftypevr {@code{ddclient-configuration} parameter} string group
26450 Group of the user who will run the ddclient program.
26451
26452 Defaults to @samp{"ddclient"}.
26453
26454 @end deftypevr
26455
26456 @deftypevr {@code{ddclient-configuration} parameter} string secret-file
26457 Secret file which will be appended to @file{ddclient.conf} file. This
26458 file contains credentials for use by ddclient. You are expected to
26459 create it manually.
26460
26461 Defaults to @samp{"/etc/ddclient/secrets.conf"}.
26462
26463 @end deftypevr
26464
26465 @deftypevr {@code{ddclient-configuration} parameter} list extra-options
26466 Extra options will be appended to @file{ddclient.conf} file.
26467
26468 Defaults to @samp{()}.
26469
26470 @end deftypevr
26471
26472
26473 @c %end of fragment
26474
26475
26476 @node VPN Services
26477 @subsection VPN Services
26478 @cindex VPN (virtual private network)
26479 @cindex virtual private network (VPN)
26480
26481 The @code{(gnu services vpn)} module provides services related to
26482 @dfn{virtual private networks} (VPNs).
26483
26484 @subsubheading OpenVPN
26485
26486 It provides a @emph{client} service for your machine to connect to a
26487 VPN, and a @emph{server} service for your machine to host a VPN@.
26488
26489 @deffn {Scheme Procedure} openvpn-client-service @
26490 [#:config (openvpn-client-configuration)]
26491
26492 Return a service that runs @command{openvpn}, a VPN daemon, as a client.
26493 @end deffn
26494
26495 @deffn {Scheme Procedure} openvpn-server-service @
26496 [#:config (openvpn-server-configuration)]
26497
26498 Return a service that runs @command{openvpn}, a VPN daemon, as a server.
26499
26500 Both can be run simultaneously.
26501 @end deffn
26502
26503 @c %automatically generated documentation
26504
26505 Available @code{openvpn-client-configuration} fields are:
26506
26507 @deftypevr {@code{openvpn-client-configuration} parameter} package openvpn
26508 The OpenVPN package.
26509
26510 @end deftypevr
26511
26512 @deftypevr {@code{openvpn-client-configuration} parameter} string pid-file
26513 The OpenVPN pid file.
26514
26515 Defaults to @samp{"/var/run/openvpn/openvpn.pid"}.
26516
26517 @end deftypevr
26518
26519 @deftypevr {@code{openvpn-client-configuration} parameter} proto proto
26520 The protocol (UDP or TCP) used to open a channel between clients and
26521 servers.
26522
26523 Defaults to @samp{udp}.
26524
26525 @end deftypevr
26526
26527 @deftypevr {@code{openvpn-client-configuration} parameter} dev dev
26528 The device type used to represent the VPN connection.
26529
26530 Defaults to @samp{tun}.
26531
26532 @end deftypevr
26533
26534 If you do not have some of these files (eg.@: you use a username and
26535 password), you can disable any of the following three fields by setting
26536 it to @code{'disabled}.
26537
26538 @deftypevr {@code{openvpn-client-configuration} parameter} maybe-string ca
26539 The certificate authority to check connections against.
26540
26541 Defaults to @samp{"/etc/openvpn/ca.crt"}.
26542
26543 @end deftypevr
26544
26545 @deftypevr {@code{openvpn-client-configuration} parameter} maybe-string cert
26546 The certificate of the machine the daemon is running on. It should be
26547 signed by the authority given in @code{ca}.
26548
26549 Defaults to @samp{"/etc/openvpn/client.crt"}.
26550
26551 @end deftypevr
26552
26553 @deftypevr {@code{openvpn-client-configuration} parameter} maybe-string key
26554 The key of the machine the daemon is running on. It must be the key whose
26555 certificate is @code{cert}.
26556
26557 Defaults to @samp{"/etc/openvpn/client.key"}.
26558
26559 @end deftypevr
26560
26561 @deftypevr {@code{openvpn-client-configuration} parameter} boolean comp-lzo?
26562 Whether to use the lzo compression algorithm.
26563
26564 Defaults to @samp{#t}.
26565
26566 @end deftypevr
26567
26568 @deftypevr {@code{openvpn-client-configuration} parameter} boolean persist-key?
26569 Don't re-read key files across SIGUSR1 or --ping-restart.
26570
26571 Defaults to @samp{#t}.
26572
26573 @end deftypevr
26574
26575 @deftypevr {@code{openvpn-client-configuration} parameter} boolean persist-tun?
26576 Don't close and reopen TUN/TAP device or run up/down scripts across
26577 SIGUSR1 or --ping-restart restarts.
26578
26579 Defaults to @samp{#t}.
26580
26581 @end deftypevr
26582
26583 @deftypevr {@code{openvpn-client-configuration} parameter} boolean fast-io?
26584 (Experimental) Optimize TUN/TAP/UDP I/O writes by avoiding a call to
26585 poll/epoll/select prior to the write operation.
26586
26587 Defaults to @samp{#f}.
26588 @end deftypevr
26589
26590 @deftypevr {@code{openvpn-client-configuration} parameter} number verbosity
26591 Verbosity level.
26592
26593 Defaults to @samp{3}.
26594
26595 @end deftypevr
26596
26597 @deftypevr {@code{openvpn-client-configuration} parameter} tls-auth-client tls-auth
26598 Add an additional layer of HMAC authentication on top of the TLS control
26599 channel to protect against DoS attacks.
26600
26601 Defaults to @samp{#f}.
26602
26603 @end deftypevr
26604
26605 @deftypevr {@code{openvpn-client-configuration} parameter} maybe-string auth-user-pass
26606 Authenticate with server using username/password. The option is a file
26607 containing username/password on 2 lines. Do not use a file-like object as it
26608 would be added to the store and readable by any user.
26609
26610 Defaults to @samp{'disabled}.
26611 @end deftypevr
26612
26613 @deftypevr {@code{openvpn-client-configuration} parameter} key-usage verify-key-usage?
26614 Whether to check the server certificate has server usage extension.
26615
26616 Defaults to @samp{#t}.
26617
26618 @end deftypevr
26619
26620 @deftypevr {@code{openvpn-client-configuration} parameter} bind bind?
26621 Bind to a specific local port number.
26622
26623 Defaults to @samp{#f}.
26624
26625 @end deftypevr
26626
26627 @deftypevr {@code{openvpn-client-configuration} parameter} resolv-retry resolv-retry?
26628 Retry resolving server address.
26629
26630 Defaults to @samp{#t}.
26631
26632 @end deftypevr
26633
26634 @deftypevr {@code{openvpn-client-configuration} parameter} openvpn-remote-list remote
26635 A list of remote servers to connect to.
26636
26637 Defaults to @samp{()}.
26638
26639 Available @code{openvpn-remote-configuration} fields are:
26640
26641 @deftypevr {@code{openvpn-remote-configuration} parameter} string name
26642 Server name.
26643
26644 Defaults to @samp{"my-server"}.
26645
26646 @end deftypevr
26647
26648 @deftypevr {@code{openvpn-remote-configuration} parameter} number port
26649 Port number the server listens to.
26650
26651 Defaults to @samp{1194}.
26652
26653 @end deftypevr
26654
26655 @end deftypevr
26656 @c %end of automatic openvpn-client documentation
26657
26658 @c %automatically generated documentation
26659
26660 Available @code{openvpn-server-configuration} fields are:
26661
26662 @deftypevr {@code{openvpn-server-configuration} parameter} package openvpn
26663 The OpenVPN package.
26664
26665 @end deftypevr
26666
26667 @deftypevr {@code{openvpn-server-configuration} parameter} string pid-file
26668 The OpenVPN pid file.
26669
26670 Defaults to @samp{"/var/run/openvpn/openvpn.pid"}.
26671
26672 @end deftypevr
26673
26674 @deftypevr {@code{openvpn-server-configuration} parameter} proto proto
26675 The protocol (UDP or TCP) used to open a channel between clients and
26676 servers.
26677
26678 Defaults to @samp{udp}.
26679
26680 @end deftypevr
26681
26682 @deftypevr {@code{openvpn-server-configuration} parameter} dev dev
26683 The device type used to represent the VPN connection.
26684
26685 Defaults to @samp{tun}.
26686
26687 @end deftypevr
26688
26689 If you do not have some of these files (eg.@: you use a username and
26690 password), you can disable any of the following three fields by setting
26691 it to @code{'disabled}.
26692
26693 @deftypevr {@code{openvpn-server-configuration} parameter} maybe-string ca
26694 The certificate authority to check connections against.
26695
26696 Defaults to @samp{"/etc/openvpn/ca.crt"}.
26697
26698 @end deftypevr
26699
26700 @deftypevr {@code{openvpn-server-configuration} parameter} maybe-string cert
26701 The certificate of the machine the daemon is running on. It should be
26702 signed by the authority given in @code{ca}.
26703
26704 Defaults to @samp{"/etc/openvpn/client.crt"}.
26705
26706 @end deftypevr
26707
26708 @deftypevr {@code{openvpn-server-configuration} parameter} maybe-string key
26709 The key of the machine the daemon is running on. It must be the key whose
26710 certificate is @code{cert}.
26711
26712 Defaults to @samp{"/etc/openvpn/client.key"}.
26713
26714 @end deftypevr
26715
26716 @deftypevr {@code{openvpn-server-configuration} parameter} boolean comp-lzo?
26717 Whether to use the lzo compression algorithm.
26718
26719 Defaults to @samp{#t}.
26720
26721 @end deftypevr
26722
26723 @deftypevr {@code{openvpn-server-configuration} parameter} boolean persist-key?
26724 Don't re-read key files across SIGUSR1 or --ping-restart.
26725
26726 Defaults to @samp{#t}.
26727
26728 @end deftypevr
26729
26730 @deftypevr {@code{openvpn-server-configuration} parameter} boolean persist-tun?
26731 Don't close and reopen TUN/TAP device or run up/down scripts across
26732 SIGUSR1 or --ping-restart restarts.
26733
26734 Defaults to @samp{#t}.
26735
26736 @end deftypevr
26737
26738 @deftypevr {@code{openvpn-server-configuration} parameter} boolean fast-io?
26739 (Experimental) Optimize TUN/TAP/UDP I/O writes by avoiding a call to
26740 poll/epoll/select prior to the write operation.
26741
26742 Defaults to @samp{#f}.
26743 @end deftypevr
26744
26745 @deftypevr {@code{openvpn-server-configuration} parameter} number verbosity
26746 Verbosity level.
26747
26748 Defaults to @samp{3}.
26749
26750 @end deftypevr
26751
26752 @deftypevr {@code{openvpn-server-configuration} parameter} tls-auth-server tls-auth
26753 Add an additional layer of HMAC authentication on top of the TLS control
26754 channel to protect against DoS attacks.
26755
26756 Defaults to @samp{#f}.
26757
26758 @end deftypevr
26759
26760 @deftypevr {@code{openvpn-server-configuration} parameter} number port
26761 Specifies the port number on which the server listens.
26762
26763 Defaults to @samp{1194}.
26764
26765 @end deftypevr
26766
26767 @deftypevr {@code{openvpn-server-configuration} parameter} ip-mask server
26768 An ip and mask specifying the subnet inside the virtual network.
26769
26770 Defaults to @samp{"10.8.0.0 255.255.255.0"}.
26771
26772 @end deftypevr
26773
26774 @deftypevr {@code{openvpn-server-configuration} parameter} cidr6 server-ipv6
26775 A CIDR notation specifying the IPv6 subnet inside the virtual network.
26776
26777 Defaults to @samp{#f}.
26778
26779 @end deftypevr
26780
26781 @deftypevr {@code{openvpn-server-configuration} parameter} string dh
26782 The Diffie-Hellman parameters file.
26783
26784 Defaults to @samp{"/etc/openvpn/dh2048.pem"}.
26785
26786 @end deftypevr
26787
26788 @deftypevr {@code{openvpn-server-configuration} parameter} string ifconfig-pool-persist
26789 The file that records client IPs.
26790
26791 Defaults to @samp{"/etc/openvpn/ipp.txt"}.
26792
26793 @end deftypevr
26794
26795 @deftypevr {@code{openvpn-server-configuration} parameter} gateway redirect-gateway?
26796 When true, the server will act as a gateway for its clients.
26797
26798 Defaults to @samp{#f}.
26799
26800 @end deftypevr
26801
26802 @deftypevr {@code{openvpn-server-configuration} parameter} boolean client-to-client?
26803 When true, clients are allowed to talk to each other inside the VPN.
26804
26805 Defaults to @samp{#f}.
26806
26807 @end deftypevr
26808
26809 @deftypevr {@code{openvpn-server-configuration} parameter} keepalive keepalive
26810 Causes ping-like messages to be sent back and forth over the link so
26811 that each side knows when the other side has gone down. @code{keepalive}
26812 requires a pair. The first element is the period of the ping sending,
26813 and the second element is the timeout before considering the other side
26814 down.
26815
26816 @end deftypevr
26817
26818 @deftypevr {@code{openvpn-server-configuration} parameter} number max-clients
26819 The maximum number of clients.
26820
26821 Defaults to @samp{100}.
26822
26823 @end deftypevr
26824
26825 @deftypevr {@code{openvpn-server-configuration} parameter} string status
26826 The status file. This file shows a small report on current connection.
26827 It is truncated and rewritten every minute.
26828
26829 Defaults to @samp{"/var/run/openvpn/status"}.
26830
26831 @end deftypevr
26832
26833 @deftypevr {@code{openvpn-server-configuration} parameter} openvpn-ccd-list client-config-dir
26834 The list of configuration for some clients.
26835
26836 Defaults to @samp{()}.
26837
26838 Available @code{openvpn-ccd-configuration} fields are:
26839
26840 @deftypevr {@code{openvpn-ccd-configuration} parameter} string name
26841 Client name.
26842
26843 Defaults to @samp{"client"}.
26844
26845 @end deftypevr
26846
26847 @deftypevr {@code{openvpn-ccd-configuration} parameter} ip-mask iroute
26848 Client own network
26849
26850 Defaults to @samp{#f}.
26851
26852 @end deftypevr
26853
26854 @deftypevr {@code{openvpn-ccd-configuration} parameter} ip-mask ifconfig-push
26855 Client VPN IP.
26856
26857 Defaults to @samp{#f}.
26858
26859 @end deftypevr
26860
26861 @end deftypevr
26862
26863
26864 @c %end of automatic openvpn-server documentation
26865
26866 @subsubheading Wireguard
26867
26868 @defvr {Scheme Variable} wireguard-service-type
26869 A service type for a Wireguard tunnel interface. Its value must be a
26870 @code{wireguard-configuration} record as in this example:
26871
26872 @lisp
26873 (service wireguard-service-type
26874 (wireguard-configuration
26875 (peers
26876 (list
26877 (wireguard-peer
26878 (name "my-peer")
26879 (endpoint "my.wireguard.com:51820")
26880 (public-key "hzpKg9X1yqu1axN6iJp0mWf6BZGo8m1wteKwtTmDGF4=")
26881 (allowed-ips '("10.0.0.2/32")))))))
26882 @end lisp
26883
26884 @end defvr
26885
26886 @deftp {Data Type} wireguard-configuration
26887 Data type representing the configuration of the Wireguard service.
26888
26889 @table @asis
26890 @item @code{wireguard}
26891 The wireguard package to use for this service.
26892
26893 @item @code{interface} (default: @code{"wg0"})
26894 The interface name for the VPN.
26895
26896 @item @code{addresses} (default: @code{'("10.0.0.1/32")})
26897 The IP addresses to be assigned to the above interface.
26898
26899 @item @code{private-key} (default: @code{"/etc/wireguard/private.key"})
26900 The private key file for the interface. It is automatically generated if
26901 the file does not exist.
26902
26903 @item @code{peers} (default: @code{'()})
26904 The authorized peers on this interface. This is a list of
26905 @var{wireguard-peer} records.
26906
26907 @end table
26908 @end deftp
26909
26910 @deftp {Data Type} wireguard-peer
26911 Data type representing a Wireguard peer attached to a given interface.
26912
26913 @table @asis
26914 @item @code{name}
26915 The peer name.
26916
26917 @item @code{endpoint} (default: @code{#f})
26918 The optional endpoint for the peer, such as
26919 @code{"demo.wireguard.com:51820"}.
26920
26921 @item @code{public-key}
26922 The peer public-key represented as a base64 string.
26923
26924 @item @code{allowed-ips}
26925 A list of IP addresses from which incoming traffic for this peer is
26926 allowed and to which incoming traffic for this peer is directed.
26927
26928 @end table
26929 @end deftp
26930
26931 @node Network File System
26932 @subsection Network File System
26933 @cindex NFS
26934
26935 The @code{(gnu services nfs)} module provides the following services,
26936 which are most commonly used in relation to mounting or exporting
26937 directory trees as @dfn{network file systems} (NFS).
26938
26939 While it is possible to use the individual components that together make
26940 up a Network File System service, we recommended to configure an NFS
26941 server with the @code{nfs-service-type}.
26942
26943 @subsubheading NFS Service
26944 @cindex NFS, server
26945
26946 The NFS service takes care of setting up all NFS component services,
26947 kernel configuration file systems, and installs configuration files in
26948 the locations that NFS expects.
26949
26950 @defvr {Scheme Variable} nfs-service-type
26951 A service type for a complete NFS server.
26952 @end defvr
26953
26954 @deftp {Data Type} nfs-configuration
26955 This data type represents the configuration of the NFS service and all
26956 of its subsystems.
26957
26958 It has the following parameters:
26959 @table @asis
26960 @item @code{nfs-utils} (default: @code{nfs-utils})
26961 The nfs-utils package to use.
26962
26963 @item @code{nfs-versions} (default: @code{'("4.2" "4.1" "4.0")})
26964 If a list of string values is provided, the @command{rpc.nfsd} daemon
26965 will be limited to supporting the given versions of the NFS protocol.
26966
26967 @item @code{exports} (default: @code{'()})
26968 This is a list of directories the NFS server should export. Each entry
26969 is a list consisting of two elements: a directory name and a string
26970 containing all options. This is an example in which the directory
26971 @file{/export} is served to all NFS clients as a read-only share:
26972
26973 @lisp
26974 (nfs-configuration
26975 (exports
26976 '(("/export"
26977 "*(ro,insecure,no_subtree_check,crossmnt,fsid=0)"))))
26978 @end lisp
26979
26980 @item @code{rpcmountd-port} (default: @code{#f})
26981 The network port that the @command{rpc.mountd} daemon should use.
26982
26983 @item @code{rpcstatd-port} (default: @code{#f})
26984 The network port that the @command{rpc.statd} daemon should use.
26985
26986 @item @code{rpcbind} (default: @code{rpcbind})
26987 The rpcbind package to use.
26988
26989 @item @code{idmap-domain} (default: @code{"localdomain"})
26990 The local NFSv4 domain name.
26991
26992 @item @code{nfsd-port} (default: @code{2049})
26993 The network port that the @command{nfsd} daemon should use.
26994
26995 @item @code{nfsd-threads} (default: @code{8})
26996 The number of threads used by the @command{nfsd} daemon.
26997
26998 @item @code{nfsd-tcp?} (default: @code{#t})
26999 Whether the @command{nfsd} daemon should listen on a TCP socket.
27000
27001 @item @code{nfsd-udp?} (default: @code{#f})
27002 Whether the @command{nfsd} daemon should listen on a UDP socket.
27003
27004 @item @code{pipefs-directory} (default: @code{"/var/lib/nfs/rpc_pipefs"})
27005 The directory where the pipefs file system is mounted.
27006
27007 @item @code{debug} (default: @code{'()"})
27008 A list of subsystems for which debugging output should be enabled. This
27009 is a list of symbols. Any of these symbols are valid: @code{nfsd},
27010 @code{nfs}, @code{rpc}, @code{idmap}, @code{statd}, or @code{mountd}.
27011 @end table
27012 @end deftp
27013
27014 If you don't need a complete NFS service or prefer to build it yourself
27015 you can use the individual component services that are documented below.
27016
27017 @subsubheading RPC Bind Service
27018 @cindex rpcbind
27019
27020 The RPC Bind service provides a facility to map program numbers into
27021 universal addresses.
27022 Many NFS related services use this facility. Hence it is automatically
27023 started when a dependent service starts.
27024
27025 @defvr {Scheme Variable} rpcbind-service-type
27026 A service type for the RPC portmapper daemon.
27027 @end defvr
27028
27029
27030 @deftp {Data Type} rpcbind-configuration
27031 Data type representing the configuration of the RPC Bind Service.
27032 This type has the following parameters:
27033 @table @asis
27034 @item @code{rpcbind} (default: @code{rpcbind})
27035 The rpcbind package to use.
27036
27037 @item @code{warm-start?} (default: @code{#t})
27038 If this parameter is @code{#t}, then the daemon will read a
27039 state file on startup thus reloading state information saved by a previous
27040 instance.
27041 @end table
27042 @end deftp
27043
27044
27045 @subsubheading Pipefs Pseudo File System
27046 @cindex pipefs
27047 @cindex rpc_pipefs
27048
27049 The pipefs file system is used to transfer NFS related data
27050 between the kernel and user space programs.
27051
27052 @defvr {Scheme Variable} pipefs-service-type
27053 A service type for the pipefs pseudo file system.
27054 @end defvr
27055
27056 @deftp {Data Type} pipefs-configuration
27057 Data type representing the configuration of the pipefs pseudo file system service.
27058 This type has the following parameters:
27059 @table @asis
27060 @item @code{mount-point} (default: @code{"/var/lib/nfs/rpc_pipefs"})
27061 The directory to which the file system is to be attached.
27062 @end table
27063 @end deftp
27064
27065
27066 @subsubheading GSS Daemon Service
27067 @cindex GSSD
27068 @cindex GSS
27069 @cindex global security system
27070
27071 The @dfn{global security system} (GSS) daemon provides strong security for RPC
27072 based protocols.
27073 Before exchanging RPC requests an RPC client must establish a security
27074 context. Typically this is done using the Kerberos command @command{kinit}
27075 or automatically at login time using PAM services (@pxref{Kerberos Services}).
27076
27077 @defvr {Scheme Variable} gss-service-type
27078 A service type for the Global Security System (GSS) daemon.
27079 @end defvr
27080
27081 @deftp {Data Type} gss-configuration
27082 Data type representing the configuration of the GSS daemon service.
27083 This type has the following parameters:
27084 @table @asis
27085 @item @code{nfs-utils} (default: @code{nfs-utils})
27086 The package in which the @command{rpc.gssd} command is to be found.
27087
27088 @item @code{pipefs-directory} (default: @code{"/var/lib/nfs/rpc_pipefs"})
27089 The directory where the pipefs file system is mounted.
27090
27091 @end table
27092 @end deftp
27093
27094
27095 @subsubheading IDMAP Daemon Service
27096 @cindex idmapd
27097 @cindex name mapper
27098
27099 The idmap daemon service provides mapping between user IDs and user names.
27100 Typically it is required in order to access file systems mounted via NFSv4.
27101
27102 @defvr {Scheme Variable} idmap-service-type
27103 A service type for the Identity Mapper (IDMAP) daemon.
27104 @end defvr
27105
27106 @deftp {Data Type} idmap-configuration
27107 Data type representing the configuration of the IDMAP daemon service.
27108 This type has the following parameters:
27109 @table @asis
27110 @item @code{nfs-utils} (default: @code{nfs-utils})
27111 The package in which the @command{rpc.idmapd} command is to be found.
27112
27113 @item @code{pipefs-directory} (default: @code{"/var/lib/nfs/rpc_pipefs"})
27114 The directory where the pipefs file system is mounted.
27115
27116 @item @code{domain} (default: @code{#f})
27117 The local NFSv4 domain name.
27118 This must be a string or @code{#f}.
27119 If it is @code{#f} then the daemon will use the host's fully qualified domain name.
27120
27121 @item @code{verbosity} (default: @code{0})
27122 The verbosity level of the daemon.
27123
27124 @end table
27125 @end deftp
27126
27127 @node Continuous Integration
27128 @subsection Continuous Integration
27129
27130 @cindex continuous integration
27131 @uref{https://guix.gnu.org/cuirass/, Cuirass} is a continuous
27132 integration tool for Guix. It can be used both for development and for
27133 providing substitutes to others (@pxref{Substitutes}).
27134
27135 The @code{(gnu services cuirass)} module provides the following service.
27136
27137 @defvr {Scheme Procedure} cuirass-service-type
27138 The type of the Cuirass service. Its value must be a
27139 @code{cuirass-configuration} object, as described below.
27140 @end defvr
27141
27142 To add build jobs, you have to set the @code{specifications} field of
27143 the configuration. For instance, the following example will build all
27144 the packages provided by the @code{my-channel} channel.
27145
27146 @lisp
27147 (define %cuirass-specs
27148 #~(list (specification
27149 (name "my-channel")
27150 (build '(channels my-channel))
27151 (channels
27152 (cons (channel
27153 (name 'my-channel)
27154 (url "https://my-channel.git"))
27155 %default-channels)))))
27156
27157 (service cuirass-service-type
27158 (cuirass-configuration
27159 (specifications %cuirass-specs)))
27160 @end lisp
27161
27162 To build the @code{linux-libre} package defined by the default Guix
27163 channel, one can use the following configuration.
27164
27165 @lisp
27166 (define %cuirass-specs
27167 #~(list (specification
27168 (name "my-linux")
27169 (build '(packages "linux-libre")))))
27170
27171 (service cuirass-service-type
27172 (cuirass-configuration
27173 (specifications %cuirass-specs)))
27174 @end lisp
27175
27176 The other configuration possibilities, as well as the specification
27177 record itself are described in the Cuirass manual
27178 (@pxref{Specifications,,, cuirass, Cuirass}).
27179
27180 While information related to build jobs is located directly in the
27181 specifications, global settings for the @command{cuirass} process are
27182 accessible in other @code{cuirass-configuration} fields.
27183
27184 @deftp {Data Type} cuirass-configuration
27185 Data type representing the configuration of Cuirass.
27186
27187 @table @asis
27188 @item @code{cuirass} (default: @code{cuirass})
27189 The Cuirass package to use.
27190
27191 @item @code{log-file} (default: @code{"/var/log/cuirass.log"})
27192 Location of the log file.
27193
27194 @item @code{web-log-file} (default: @code{"/var/log/cuirass-web.log"})
27195 Location of the log file used by the web interface.
27196
27197 @item @code{cache-directory} (default: @code{"/var/cache/cuirass"})
27198 Location of the repository cache.
27199
27200 @item @code{user} (default: @code{"cuirass"})
27201 Owner of the @code{cuirass} process.
27202
27203 @item @code{group} (default: @code{"cuirass"})
27204 Owner's group of the @code{cuirass} process.
27205
27206 @item @code{interval} (default: @code{60})
27207 Number of seconds between the poll of the repositories followed by the
27208 Cuirass jobs.
27209
27210 @item @code{parameters} (default: @code{#f})
27211 Read parameters from the given @var{parameters} file. The supported
27212 parameters are described here (@pxref{Parameters,,, cuirass, Cuirass}).
27213
27214 @item @code{remote-server} (default: @code{#f})
27215 A @code{cuirass-remote-server-configuration} record to use the build
27216 remote mechanism or @code{#f} to use the default build mechanism.
27217
27218 @item @code{database} (default: @code{"dbname=cuirass host=/var/run/postgresql"})
27219 Use @var{database} as the database containing the jobs and the past
27220 build results. Since Cuirass uses PostgreSQL as a database engine,
27221 @var{database} must be a string such as @code{"dbname=cuirass
27222 host=localhost"}.
27223
27224 @item @code{port} (default: @code{8081})
27225 Port number used by the HTTP server.
27226
27227 @item @code{host} (default: @code{"localhost"})
27228 Listen on the network interface for @var{host}. The default is to
27229 accept connections from localhost.
27230
27231 @item @code{specifications} (default: @code{#~'()})
27232 A gexp (@pxref{G-Expressions}) that evaluates to a list of
27233 specifications records. The specification record is described in the
27234 Cuirass manual (@pxref{Specifications,,, cuirass, Cuirass}).
27235
27236 @item @code{use-substitutes?} (default: @code{#f})
27237 This allows using substitutes to avoid building every dependencies of a job
27238 from source.
27239
27240 @item @code{one-shot?} (default: @code{#f})
27241 Only evaluate specifications and build derivations once.
27242
27243 @item @code{fallback?} (default: @code{#f})
27244 When substituting a pre-built binary fails, fall back to building
27245 packages locally.
27246
27247 @item @code{extra-options} (default: @code{'()})
27248 Extra options to pass when running the Cuirass processes.
27249
27250 @end table
27251 @end deftp
27252
27253 @cindex remote build
27254 @subsubheading Cuirass remote building
27255
27256 Cuirass supports two mechanisms to build derivations.
27257
27258 @itemize
27259 @item Using the local Guix daemon.
27260 This is the default build mechanism. Once the build jobs are
27261 evaluated, they are sent to the local Guix daemon. Cuirass then
27262 listens to the Guix daemon output to detect the various build events.
27263
27264 @item Using the remote build mechanism.
27265 The build jobs are not submitted to the local Guix daemon. Instead, a
27266 remote server dispatches build requests to the connect remote workers,
27267 according to the build priorities.
27268
27269 @end itemize
27270
27271 To enable this build mode a @code{cuirass-remote-server-configuration}
27272 record must be passed as @code{remote-server} argument of the
27273 @code{cuirass-configuration} record. The
27274 @code{cuirass-remote-server-configuration} record is described below.
27275
27276 This build mode scales way better than the default build mode. This is
27277 the build mode that is used on the GNU Guix build farm at
27278 @url{https://ci.guix.gnu.org}. It should be preferred when using
27279 Cuirass to build large amount of packages.
27280
27281 @deftp {Data Type} cuirass-remote-server-configuration
27282 Data type representing the configuration of the Cuirass remote-server.
27283
27284 @table @asis
27285 @item @code{backend-port} (default: @code{5555})
27286 The TCP port for communicating with @code{remote-worker} processes
27287 using ZMQ. It defaults to @code{5555}.
27288
27289 @item @code{log-port} (default: @code{5556})
27290 The TCP port of the log server. It defaults to @code{5556}.
27291
27292 @item @code{publish-port} (default: @code{5557})
27293 The TCP port of the publish server. It defaults to @code{5557}.
27294
27295 @item @code{log-file} (default: @code{"/var/log/cuirass-remote-server.log"})
27296 Location of the log file.
27297
27298 @item @code{cache} (default: @code{"/var/cache/cuirass/remote"})
27299 Use @var{cache} directory to cache build log files.
27300
27301 @item @code{trigger-url} (default: @code{#f})
27302 Once a substitute is successfully fetched, trigger substitute baking at
27303 @var{trigger-url}.
27304
27305 @item @code{public-key}
27306 @item @code{private-key}
27307 Use the specific @var{file}s as the public/private key pair used to sign
27308 the store items being published.
27309
27310 @end table
27311 @end deftp
27312
27313 At least one remote worker must also be started on any machine of the
27314 local network to actually perform the builds and report their status.
27315
27316 @deftp {Data Type} cuirass-remote-worker-configuration
27317 Data type representing the configuration of the Cuirass remote-worker.
27318
27319 @table @asis
27320 @item @code{cuirass} (default: @code{cuirass})
27321 The Cuirass package to use.
27322
27323 @item @code{workers} (default: @code{1})
27324 Start @var{workers} parallel workers.
27325
27326 @item @code{server} (default: @code{#f})
27327 Do not use Avahi discovery and connect to the given @code{server} IP
27328 address instead.
27329
27330 @item @code{systems} (default: @code{(list (%current-system))})
27331 Only request builds for the given @var{systems}.
27332
27333 @item @code{log-file} (default: @code{"/var/log/cuirass-remote-worker.log"})
27334 Location of the log file.
27335
27336 @item @code{publish-port} (default: @code{5558})
27337 The TCP port of the publish server. It defaults to @code{5558}.
27338
27339 @item @code{public-key}
27340 @item @code{private-key}
27341 Use the specific @var{file}s as the public/private key pair used to sign
27342 the store items being published.
27343
27344 @end table
27345 @end deftp
27346
27347 @subsubheading Laminar
27348
27349 @uref{https://laminar.ohwg.net/, Laminar} is a lightweight and modular
27350 Continuous Integration service. It doesn't have a configuration web UI
27351 instead uses version-controllable configuration files and scripts.
27352
27353 Laminar encourages the use of existing tools such as bash and cron
27354 instead of reinventing them.
27355
27356 @defvr {Scheme Procedure} laminar-service-type
27357 The type of the Laminar service. Its value must be a
27358 @code{laminar-configuration} object, as described below.
27359
27360 All configuration values have defaults, a minimal configuration to get
27361 Laminar running is shown below. By default, the web interface is
27362 available on port 8080.
27363
27364 @lisp
27365 (service laminar-service-type)
27366 @end lisp
27367 @end defvr
27368
27369 @deftp {Data Type} laminar-configuration
27370 Data type representing the configuration of Laminar.
27371
27372 @table @asis
27373 @item @code{laminar} (default: @code{laminar})
27374 The Laminar package to use.
27375
27376 @item @code{home-directory} (default: @code{"/var/lib/laminar"})
27377 The directory for job configurations and run directories.
27378
27379 @item @code{bind-http} (default: @code{"*:8080"})
27380 The interface/port or unix socket on which laminard should listen for
27381 incoming connections to the web frontend.
27382
27383 @item @code{bind-rpc} (default: @code{"unix-abstract:laminar"})
27384 The interface/port or unix socket on which laminard should listen for
27385 incoming commands such as build triggers.
27386
27387 @item @code{title} (default: @code{"Laminar"})
27388 The page title to show in the web frontend.
27389
27390 @item @code{keep-rundirs} (default: @code{0})
27391 Set to an integer defining how many rundirs to keep per job. The
27392 lowest-numbered ones will be deleted. The default is 0, meaning all run
27393 dirs will be immediately deleted.
27394
27395 @item @code{archive-url} (default: @code{#f})
27396 The web frontend served by laminard will use this URL to form links to
27397 artefacts archived jobs.
27398
27399 @item @code{base-url} (default: @code{#f})
27400 Base URL to use for links to laminar itself.
27401
27402 @end table
27403 @end deftp
27404
27405 @node Power Management Services
27406 @subsection Power Management Services
27407
27408 @cindex tlp
27409 @cindex power management with TLP
27410 @subsubheading TLP daemon
27411
27412 The @code{(gnu services pm)} module provides a Guix service definition
27413 for the Linux power management tool TLP.
27414
27415 TLP enables various powersaving modes in userspace and kernel.
27416 Contrary to @code{upower-service}, it is not a passive,
27417 monitoring tool, as it will apply custom settings each time a new power
27418 source is detected. More information can be found at
27419 @uref{https://linrunner.de/en/tlp/tlp.html, TLP home page}.
27420
27421 @deffn {Scheme Variable} tlp-service-type
27422 The service type for the TLP tool. The default settings are optimised
27423 for battery life on most systems, but you can tweak them to your heart's
27424 content by adding a valid @code{tlp-configuration}:
27425 @lisp
27426 (service tlp-service-type
27427 (tlp-configuration
27428 (cpu-scaling-governor-on-ac (list "performance"))
27429 (sched-powersave-on-bat? #t)))
27430 @end lisp
27431 @end deffn
27432
27433 Each parameter definition is preceded by its type; for example,
27434 @samp{boolean foo} indicates that the @code{foo} parameter
27435 should be specified as a boolean. Types starting with
27436 @code{maybe-} denote parameters that won't show up in TLP config file
27437 when their value is @code{'disabled}.
27438
27439 @c The following documentation was initially generated by
27440 @c (generate-tlp-documentation) in (gnu services pm). Manually maintained
27441 @c documentation is better, so we shouldn't hesitate to edit below as
27442 @c needed. However if the change you want to make to this documentation
27443 @c can be done in an automated way, it's probably easier to change
27444 @c (generate-documentation) than to make it below and have to deal with
27445 @c the churn as TLP updates.
27446
27447 Available @code{tlp-configuration} fields are:
27448
27449 @deftypevr {@code{tlp-configuration} parameter} package tlp
27450 The TLP package.
27451
27452 @end deftypevr
27453
27454 @deftypevr {@code{tlp-configuration} parameter} boolean tlp-enable?
27455 Set to true if you wish to enable TLP.
27456
27457 Defaults to @samp{#t}.
27458
27459 @end deftypevr
27460
27461 @deftypevr {@code{tlp-configuration} parameter} string tlp-default-mode
27462 Default mode when no power supply can be detected. Alternatives are AC
27463 and BAT.
27464
27465 Defaults to @samp{"AC"}.
27466
27467 @end deftypevr
27468
27469 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer disk-idle-secs-on-ac
27470 Number of seconds Linux kernel has to wait after the disk goes idle,
27471 before syncing on AC.
27472
27473 Defaults to @samp{0}.
27474
27475 @end deftypevr
27476
27477 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer disk-idle-secs-on-bat
27478 Same as @code{disk-idle-ac} but on BAT mode.
27479
27480 Defaults to @samp{2}.
27481
27482 @end deftypevr
27483
27484 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer max-lost-work-secs-on-ac
27485 Dirty pages flushing periodicity, expressed in seconds.
27486
27487 Defaults to @samp{15}.
27488
27489 @end deftypevr
27490
27491 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer max-lost-work-secs-on-bat
27492 Same as @code{max-lost-work-secs-on-ac} but on BAT mode.
27493
27494 Defaults to @samp{60}.
27495
27496 @end deftypevr
27497
27498 @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list cpu-scaling-governor-on-ac
27499 CPU frequency scaling governor on AC mode. With intel_pstate driver,
27500 alternatives are powersave and performance. With acpi-cpufreq driver,
27501 alternatives are ondemand, powersave, performance and conservative.
27502
27503 Defaults to @samp{disabled}.
27504
27505 @end deftypevr
27506
27507 @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list cpu-scaling-governor-on-bat
27508 Same as @code{cpu-scaling-governor-on-ac} but on BAT mode.
27509
27510 Defaults to @samp{disabled}.
27511
27512 @end deftypevr
27513
27514 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-min-freq-on-ac
27515 Set the min available frequency for the scaling governor on AC.
27516
27517 Defaults to @samp{disabled}.
27518
27519 @end deftypevr
27520
27521 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-max-freq-on-ac
27522 Set the max available frequency for the scaling governor on AC.
27523
27524 Defaults to @samp{disabled}.
27525
27526 @end deftypevr
27527
27528 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-min-freq-on-bat
27529 Set the min available frequency for the scaling governor on BAT.
27530
27531 Defaults to @samp{disabled}.
27532
27533 @end deftypevr
27534
27535 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-max-freq-on-bat
27536 Set the max available frequency for the scaling governor on BAT.
27537
27538 Defaults to @samp{disabled}.
27539
27540 @end deftypevr
27541
27542 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-min-perf-on-ac
27543 Limit the min P-state to control the power dissipation of the CPU, in AC
27544 mode. Values are stated as a percentage of the available performance.
27545
27546 Defaults to @samp{disabled}.
27547
27548 @end deftypevr
27549
27550 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-max-perf-on-ac
27551 Limit the max P-state to control the power dissipation of the CPU, in AC
27552 mode. Values are stated as a percentage of the available performance.
27553
27554 Defaults to @samp{disabled}.
27555
27556 @end deftypevr
27557
27558 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-min-perf-on-bat
27559 Same as @code{cpu-min-perf-on-ac} on BAT mode.
27560
27561 Defaults to @samp{disabled}.
27562
27563 @end deftypevr
27564
27565 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-max-perf-on-bat
27566 Same as @code{cpu-max-perf-on-ac} on BAT mode.
27567
27568 Defaults to @samp{disabled}.
27569
27570 @end deftypevr
27571
27572 @deftypevr {@code{tlp-configuration} parameter} maybe-boolean cpu-boost-on-ac?
27573 Enable CPU turbo boost feature on AC mode.
27574
27575 Defaults to @samp{disabled}.
27576
27577 @end deftypevr
27578
27579 @deftypevr {@code{tlp-configuration} parameter} maybe-boolean cpu-boost-on-bat?
27580 Same as @code{cpu-boost-on-ac?} on BAT mode.
27581
27582 Defaults to @samp{disabled}.
27583
27584 @end deftypevr
27585
27586 @deftypevr {@code{tlp-configuration} parameter} boolean sched-powersave-on-ac?
27587 Allow Linux kernel to minimize the number of CPU cores/hyper-threads
27588 used under light load conditions.
27589
27590 Defaults to @samp{#f}.
27591
27592 @end deftypevr
27593
27594 @deftypevr {@code{tlp-configuration} parameter} boolean sched-powersave-on-bat?
27595 Same as @code{sched-powersave-on-ac?} but on BAT mode.
27596
27597 Defaults to @samp{#t}.
27598
27599 @end deftypevr
27600
27601 @deftypevr {@code{tlp-configuration} parameter} boolean nmi-watchdog?
27602 Enable Linux kernel NMI watchdog.
27603
27604 Defaults to @samp{#f}.
27605
27606 @end deftypevr
27607
27608 @deftypevr {@code{tlp-configuration} parameter} maybe-string phc-controls
27609 For Linux kernels with PHC patch applied, change CPU voltages. An
27610 example value would be @samp{"F:V F:V F:V F:V"}.
27611
27612 Defaults to @samp{disabled}.
27613
27614 @end deftypevr
27615
27616 @deftypevr {@code{tlp-configuration} parameter} string energy-perf-policy-on-ac
27617 Set CPU performance versus energy saving policy on AC@. Alternatives are
27618 performance, normal, powersave.
27619
27620 Defaults to @samp{"performance"}.
27621
27622 @end deftypevr
27623
27624 @deftypevr {@code{tlp-configuration} parameter} string energy-perf-policy-on-bat
27625 Same as @code{energy-perf-policy-ac} but on BAT mode.
27626
27627 Defaults to @samp{"powersave"}.
27628
27629 @end deftypevr
27630
27631 @deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disks-devices
27632 Hard disk devices.
27633
27634 @end deftypevr
27635
27636 @deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disk-apm-level-on-ac
27637 Hard disk advanced power management level.
27638
27639 @end deftypevr
27640
27641 @deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disk-apm-level-on-bat
27642 Same as @code{disk-apm-bat} but on BAT mode.
27643
27644 @end deftypevr
27645
27646 @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-spindown-timeout-on-ac
27647 Hard disk spin down timeout. One value has to be specified for each
27648 declared hard disk.
27649
27650 Defaults to @samp{disabled}.
27651
27652 @end deftypevr
27653
27654 @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-spindown-timeout-on-bat
27655 Same as @code{disk-spindown-timeout-on-ac} but on BAT mode.
27656
27657 Defaults to @samp{disabled}.
27658
27659 @end deftypevr
27660
27661 @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-iosched
27662 Select IO scheduler for disk devices. One value has to be specified for
27663 each declared hard disk. Example alternatives are cfq, deadline and
27664 noop.
27665
27666 Defaults to @samp{disabled}.
27667
27668 @end deftypevr
27669
27670 @deftypevr {@code{tlp-configuration} parameter} string sata-linkpwr-on-ac
27671 SATA aggressive link power management (ALPM) level. Alternatives are
27672 min_power, medium_power, max_performance.
27673
27674 Defaults to @samp{"max_performance"}.
27675
27676 @end deftypevr
27677
27678 @deftypevr {@code{tlp-configuration} parameter} string sata-linkpwr-on-bat
27679 Same as @code{sata-linkpwr-ac} but on BAT mode.
27680
27681 Defaults to @samp{"min_power"}.
27682
27683 @end deftypevr
27684
27685 @deftypevr {@code{tlp-configuration} parameter} maybe-string sata-linkpwr-blacklist
27686 Exclude specified SATA host devices for link power management.
27687
27688 Defaults to @samp{disabled}.
27689
27690 @end deftypevr
27691
27692 @deftypevr {@code{tlp-configuration} parameter} maybe-on-off-boolean ahci-runtime-pm-on-ac?
27693 Enable Runtime Power Management for AHCI controller and disks on AC
27694 mode.
27695
27696 Defaults to @samp{disabled}.
27697
27698 @end deftypevr
27699
27700 @deftypevr {@code{tlp-configuration} parameter} maybe-on-off-boolean ahci-runtime-pm-on-bat?
27701 Same as @code{ahci-runtime-pm-on-ac} on BAT mode.
27702
27703 Defaults to @samp{disabled}.
27704
27705 @end deftypevr
27706
27707 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer ahci-runtime-pm-timeout
27708 Seconds of inactivity before disk is suspended.
27709
27710 Defaults to @samp{15}.
27711
27712 @end deftypevr
27713
27714 @deftypevr {@code{tlp-configuration} parameter} string pcie-aspm-on-ac
27715 PCI Express Active State Power Management level. Alternatives are
27716 default, performance, powersave.
27717
27718 Defaults to @samp{"performance"}.
27719
27720 @end deftypevr
27721
27722 @deftypevr {@code{tlp-configuration} parameter} string pcie-aspm-on-bat
27723 Same as @code{pcie-aspm-ac} but on BAT mode.
27724
27725 Defaults to @samp{"powersave"}.
27726
27727 @end deftypevr
27728
27729 @deftypevr {@code{tlp-configuration} parameter} string radeon-power-profile-on-ac
27730 Radeon graphics clock speed level. Alternatives are low, mid, high,
27731 auto, default.
27732
27733 Defaults to @samp{"high"}.
27734
27735 @end deftypevr
27736
27737 @deftypevr {@code{tlp-configuration} parameter} string radeon-power-profile-on-bat
27738 Same as @code{radeon-power-ac} but on BAT mode.
27739
27740 Defaults to @samp{"low"}.
27741
27742 @end deftypevr
27743
27744 @deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-state-on-ac
27745 Radeon dynamic power management method (DPM). Alternatives are battery,
27746 performance.
27747
27748 Defaults to @samp{"performance"}.
27749
27750 @end deftypevr
27751
27752 @deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-state-on-bat
27753 Same as @code{radeon-dpm-state-ac} but on BAT mode.
27754
27755 Defaults to @samp{"battery"}.
27756
27757 @end deftypevr
27758
27759 @deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-perf-level-on-ac
27760 Radeon DPM performance level. Alternatives are auto, low, high.
27761
27762 Defaults to @samp{"auto"}.
27763
27764 @end deftypevr
27765
27766 @deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-perf-level-on-bat
27767 Same as @code{radeon-dpm-perf-ac} but on BAT mode.
27768
27769 Defaults to @samp{"auto"}.
27770
27771 @end deftypevr
27772
27773 @deftypevr {@code{tlp-configuration} parameter} on-off-boolean wifi-pwr-on-ac?
27774 Wifi power saving mode.
27775
27776 Defaults to @samp{#f}.
27777
27778 @end deftypevr
27779
27780 @deftypevr {@code{tlp-configuration} parameter} on-off-boolean wifi-pwr-on-bat?
27781 Same as @code{wifi-power-ac?} but on BAT mode.
27782
27783 Defaults to @samp{#t}.
27784
27785 @end deftypevr
27786
27787 @deftypevr {@code{tlp-configuration} parameter} y-n-boolean wol-disable?
27788 Disable wake on LAN.
27789
27790 Defaults to @samp{#t}.
27791
27792 @end deftypevr
27793
27794 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer sound-power-save-on-ac
27795 Timeout duration in seconds before activating audio power saving on
27796 Intel HDA and AC97 devices. A value of 0 disables power saving.
27797
27798 Defaults to @samp{0}.
27799
27800 @end deftypevr
27801
27802 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer sound-power-save-on-bat
27803 Same as @code{sound-powersave-ac} but on BAT mode.
27804
27805 Defaults to @samp{1}.
27806
27807 @end deftypevr
27808
27809 @deftypevr {@code{tlp-configuration} parameter} y-n-boolean sound-power-save-controller?
27810 Disable controller in powersaving mode on Intel HDA devices.
27811
27812 Defaults to @samp{#t}.
27813
27814 @end deftypevr
27815
27816 @deftypevr {@code{tlp-configuration} parameter} boolean bay-poweroff-on-bat?
27817 Enable optical drive in UltraBay/MediaBay on BAT mode. Drive can be
27818 powered on again by releasing (and reinserting) the eject lever or by
27819 pressing the disc eject button on newer models.
27820
27821 Defaults to @samp{#f}.
27822
27823 @end deftypevr
27824
27825 @deftypevr {@code{tlp-configuration} parameter} string bay-device
27826 Name of the optical drive device to power off.
27827
27828 Defaults to @samp{"sr0"}.
27829
27830 @end deftypevr
27831
27832 @deftypevr {@code{tlp-configuration} parameter} string runtime-pm-on-ac
27833 Runtime Power Management for PCI(e) bus devices. Alternatives are on
27834 and auto.
27835
27836 Defaults to @samp{"on"}.
27837
27838 @end deftypevr
27839
27840 @deftypevr {@code{tlp-configuration} parameter} string runtime-pm-on-bat
27841 Same as @code{runtime-pm-ac} but on BAT mode.
27842
27843 Defaults to @samp{"auto"}.
27844
27845 @end deftypevr
27846
27847 @deftypevr {@code{tlp-configuration} parameter} boolean runtime-pm-all?
27848 Runtime Power Management for all PCI(e) bus devices, except blacklisted
27849 ones.
27850
27851 Defaults to @samp{#t}.
27852
27853 @end deftypevr
27854
27855 @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list runtime-pm-blacklist
27856 Exclude specified PCI(e) device addresses from Runtime Power Management.
27857
27858 Defaults to @samp{disabled}.
27859
27860 @end deftypevr
27861
27862 @deftypevr {@code{tlp-configuration} parameter} space-separated-string-list runtime-pm-driver-blacklist
27863 Exclude PCI(e) devices assigned to the specified drivers from Runtime
27864 Power Management.
27865
27866 @end deftypevr
27867
27868 @deftypevr {@code{tlp-configuration} parameter} boolean usb-autosuspend?
27869 Enable USB autosuspend feature.
27870
27871 Defaults to @samp{#t}.
27872
27873 @end deftypevr
27874
27875 @deftypevr {@code{tlp-configuration} parameter} maybe-string usb-blacklist
27876 Exclude specified devices from USB autosuspend.
27877
27878 Defaults to @samp{disabled}.
27879
27880 @end deftypevr
27881
27882 @deftypevr {@code{tlp-configuration} parameter} boolean usb-blacklist-wwan?
27883 Exclude WWAN devices from USB autosuspend.
27884
27885 Defaults to @samp{#t}.
27886
27887 @end deftypevr
27888
27889 @deftypevr {@code{tlp-configuration} parameter} maybe-string usb-whitelist
27890 Include specified devices into USB autosuspend, even if they are already
27891 excluded by the driver or via @code{usb-blacklist-wwan?}.
27892
27893 Defaults to @samp{disabled}.
27894
27895 @end deftypevr
27896
27897 @deftypevr {@code{tlp-configuration} parameter} maybe-boolean usb-autosuspend-disable-on-shutdown?
27898 Enable USB autosuspend before shutdown.
27899
27900 Defaults to @samp{disabled}.
27901
27902 @end deftypevr
27903
27904 @deftypevr {@code{tlp-configuration} parameter} boolean restore-device-state-on-startup?
27905 Restore radio device state (bluetooth, wifi, wwan) from previous
27906 shutdown on system startup.
27907
27908 Defaults to @samp{#f}.
27909
27910 @end deftypevr
27911
27912 @cindex thermald
27913 @cindex CPU frequency scaling with thermald
27914 @subsubheading Thermald daemon
27915
27916 The @code{(gnu services pm)} module provides an interface to
27917 thermald, a CPU frequency scaling service which helps prevent overheating.
27918
27919 @defvr {Scheme Variable} thermald-service-type
27920 This is the service type for
27921 @uref{https://01.org/linux-thermal-daemon/, thermald}, the Linux
27922 Thermal Daemon, which is responsible for controlling the thermal state
27923 of processors and preventing overheating.
27924 @end defvr
27925
27926 @deftp {Data Type} thermald-configuration
27927 Data type representing the configuration of @code{thermald-service-type}.
27928
27929 @table @asis
27930 @item @code{ignore-cpuid-check?} (default: @code{#f})
27931 Ignore cpuid check for supported CPU models.
27932
27933 @item @code{thermald} (default: @var{thermald})
27934 Package object of thermald.
27935
27936 @end table
27937 @end deftp
27938
27939 @node Audio Services
27940 @subsection Audio Services
27941
27942 The @code{(gnu services audio)} module provides a service to start MPD
27943 (the Music Player Daemon).
27944
27945 @cindex mpd
27946 @subsubheading Music Player Daemon
27947
27948 The Music Player Daemon (MPD) is a service that can play music while
27949 being controlled from the local machine or over the network by a variety
27950 of clients.
27951
27952 The following example shows how one might run @code{mpd} as user
27953 @code{"bob"} on port @code{6666}. It uses pulseaudio for output.
27954
27955 @lisp
27956 (service mpd-service-type
27957 (mpd-configuration
27958 (user "bob")
27959 (port "6666")))
27960 @end lisp
27961
27962 @defvr {Scheme Variable} mpd-service-type
27963 The service type for @command{mpd}
27964 @end defvr
27965
27966 @deftp {Data Type} mpd-configuration
27967 Data type representing the configuration of @command{mpd}.
27968
27969 @table @asis
27970 @item @code{user} (default: @code{"mpd"})
27971 The user to run mpd as.
27972
27973 @item @code{music-dir} (default: @code{"~/Music"})
27974 The directory to scan for music files.
27975
27976 @item @code{playlist-dir} (default: @code{"~/.mpd/playlists"})
27977 The directory to store playlists.
27978
27979 @item @code{db-file} (default: @code{"~/.mpd/tag_cache"})
27980 The location of the music database.
27981
27982 @item @code{state-file} (default: @code{"~/.mpd/state"})
27983 The location of the file that stores current MPD's state.
27984
27985 @item @code{sticker-file} (default: @code{"~/.mpd/sticker.sql"})
27986 The location of the sticker database.
27987
27988 @item @code{port} (default: @code{"6600"})
27989 The port to run mpd on.
27990
27991 @item @code{address} (default: @code{"any"})
27992 The address that mpd will bind to. To use a Unix domain socket,
27993 an absolute path can be specified here.
27994
27995 @item @code{outputs} (default: @code{"(list (mpd-output))"})
27996 The audio outputs that MPD can use. By default this is a single output using pulseaudio.
27997
27998 @end table
27999 @end deftp
28000
28001 @deftp {Data Type} mpd-output
28002 Data type representing an @command{mpd} audio output.
28003
28004 @table @asis
28005 @item @code{name} (default: @code{"MPD"})
28006 The name of the audio output.
28007
28008 @item @code{type} (default: @code{"pulse"})
28009 The type of audio output.
28010
28011 @item @code{enabled?} (default: @code{#t})
28012 Specifies whether this audio output is enabled when MPD is started. By
28013 default, all audio outputs are enabled. This is just the default
28014 setting when there is no state file; with a state file, the previous
28015 state is restored.
28016
28017 @item @code{tags?} (default: @code{#t})
28018 If set to @code{#f}, then MPD will not send tags to this output. This
28019 is only useful for output plugins that can receive tags, for example the
28020 @code{httpd} output plugin.
28021
28022 @item @code{always-on?} (default: @code{#f})
28023 If set to @code{#t}, then MPD attempts to keep this audio output always
28024 open. This may be useful for streaming servers, when you don’t want to
28025 disconnect all listeners even when playback is accidentally stopped.
28026
28027 @item @code{mixer-type}
28028 This field accepts a symbol that specifies which mixer should be used
28029 for this audio output: the @code{hardware} mixer, the @code{software}
28030 mixer, the @code{null} mixer (allows setting the volume, but with no
28031 effect; this can be used as a trick to implement an external mixer
28032 External Mixer) or no mixer (@code{none}).
28033
28034 @item @code{extra-options} (default: @code{'()})
28035 An association list of option symbols to string values to be appended to
28036 the audio output configuration.
28037
28038 @end table
28039 @end deftp
28040
28041 The following example shows a configuration of @code{mpd} that provides
28042 an HTTP audio streaming output.
28043
28044 @lisp
28045 (service mpd-service-type
28046 (mpd-configuration
28047 (outputs
28048 (list (mpd-output
28049 (name "streaming")
28050 (type "httpd")
28051 (mixer-type 'null)
28052 (extra-options
28053 `((encoder . "vorbis")
28054 (port . "8080"))))))))
28055 @end lisp
28056
28057
28058 @node Virtualization Services
28059 @subsection Virtualization Services
28060
28061 The @code{(gnu services virtualization)} module provides services for
28062 the libvirt and virtlog daemons, as well as other virtualization-related
28063 services.
28064
28065 @subsubheading Libvirt daemon
28066
28067 @code{libvirtd} is the server side daemon component of the libvirt
28068 virtualization management system. This daemon runs on host servers
28069 and performs required management tasks for virtualized guests.
28070
28071 @deffn {Scheme Variable} libvirt-service-type
28072 This is the type of the @uref{https://libvirt.org, libvirt daemon}.
28073 Its value must be a @code{libvirt-configuration}.
28074
28075 @lisp
28076 (service libvirt-service-type
28077 (libvirt-configuration
28078 (unix-sock-group "libvirt")
28079 (tls-port "16555")))
28080 @end lisp
28081 @end deffn
28082
28083 @c Auto-generated with (generate-libvirt-documentation)
28084 Available @code{libvirt-configuration} fields are:
28085
28086 @deftypevr {@code{libvirt-configuration} parameter} package libvirt
28087 Libvirt package.
28088
28089 @end deftypevr
28090
28091 @deftypevr {@code{libvirt-configuration} parameter} boolean listen-tls?
28092 Flag listening for secure TLS connections on the public TCP/IP port.
28093 You must set @code{listen} for this to have any effect.
28094
28095 It is necessary to setup a CA and issue server certificates before using
28096 this capability.
28097
28098 Defaults to @samp{#t}.
28099
28100 @end deftypevr
28101
28102 @deftypevr {@code{libvirt-configuration} parameter} boolean listen-tcp?
28103 Listen for unencrypted TCP connections on the public TCP/IP port. You must
28104 set @code{listen} for this to have any effect.
28105
28106 Using the TCP socket requires SASL authentication by default. Only SASL
28107 mechanisms which support data encryption are allowed. This is
28108 DIGEST_MD5 and GSSAPI (Kerberos5).
28109
28110 Defaults to @samp{#f}.
28111
28112 @end deftypevr
28113
28114 @deftypevr {@code{libvirt-configuration} parameter} string tls-port
28115 Port for accepting secure TLS connections. This can be a port number,
28116 or service name.
28117
28118 Defaults to @samp{"16514"}.
28119
28120 @end deftypevr
28121
28122 @deftypevr {@code{libvirt-configuration} parameter} string tcp-port
28123 Port for accepting insecure TCP connections. This can be a port number,
28124 or service name.
28125
28126 Defaults to @samp{"16509"}.
28127
28128 @end deftypevr
28129
28130 @deftypevr {@code{libvirt-configuration} parameter} string listen-addr
28131 IP address or hostname used for client connections.
28132
28133 Defaults to @samp{"0.0.0.0"}.
28134
28135 @end deftypevr
28136
28137 @deftypevr {@code{libvirt-configuration} parameter} boolean mdns-adv?
28138 Flag toggling mDNS advertisement of the libvirt service.
28139
28140 Alternatively can disable for all services on a host by stopping the
28141 Avahi daemon.
28142
28143 Defaults to @samp{#f}.
28144
28145 @end deftypevr
28146
28147 @deftypevr {@code{libvirt-configuration} parameter} string mdns-name
28148 Default mDNS advertisement name. This must be unique on the immediate
28149 broadcast network.
28150
28151 Defaults to @samp{"Virtualization Host <hostname>"}.
28152
28153 @end deftypevr
28154
28155 @deftypevr {@code{libvirt-configuration} parameter} string unix-sock-group
28156 UNIX domain socket group ownership. This can be used to allow a
28157 'trusted' set of users access to management capabilities without
28158 becoming root.
28159
28160 Defaults to @samp{"root"}.
28161
28162 @end deftypevr
28163
28164 @deftypevr {@code{libvirt-configuration} parameter} string unix-sock-ro-perms
28165 UNIX socket permissions for the R/O socket. This is used for monitoring
28166 VM status only.
28167
28168 Defaults to @samp{"0777"}.
28169
28170 @end deftypevr
28171
28172 @deftypevr {@code{libvirt-configuration} parameter} string unix-sock-rw-perms
28173 UNIX socket permissions for the R/W socket. Default allows only root.
28174 If PolicyKit is enabled on the socket, the default will change to allow
28175 everyone (eg, 0777)
28176
28177 Defaults to @samp{"0770"}.
28178
28179 @end deftypevr
28180
28181 @deftypevr {@code{libvirt-configuration} parameter} string unix-sock-admin-perms
28182 UNIX socket permissions for the admin socket. Default allows only owner
28183 (root), do not change it unless you are sure to whom you are exposing
28184 the access to.
28185
28186 Defaults to @samp{"0777"}.
28187
28188 @end deftypevr
28189
28190 @deftypevr {@code{libvirt-configuration} parameter} string unix-sock-dir
28191 The directory in which sockets will be found/created.
28192
28193 Defaults to @samp{"/var/run/libvirt"}.
28194
28195 @end deftypevr
28196
28197 @deftypevr {@code{libvirt-configuration} parameter} string auth-unix-ro
28198 Authentication scheme for UNIX read-only sockets. By default socket
28199 permissions allow anyone to connect
28200
28201 Defaults to @samp{"polkit"}.
28202
28203 @end deftypevr
28204
28205 @deftypevr {@code{libvirt-configuration} parameter} string auth-unix-rw
28206 Authentication scheme for UNIX read-write sockets. By default socket
28207 permissions only allow root. If PolicyKit support was compiled into
28208 libvirt, the default will be to use 'polkit' auth.
28209
28210 Defaults to @samp{"polkit"}.
28211
28212 @end deftypevr
28213
28214 @deftypevr {@code{libvirt-configuration} parameter} string auth-tcp
28215 Authentication scheme for TCP sockets. If you don't enable SASL, then
28216 all TCP traffic is cleartext. Don't do this outside of a dev/test
28217 scenario.
28218
28219 Defaults to @samp{"sasl"}.
28220
28221 @end deftypevr
28222
28223 @deftypevr {@code{libvirt-configuration} parameter} string auth-tls
28224 Authentication scheme for TLS sockets. TLS sockets already have
28225 encryption provided by the TLS layer, and limited authentication is done
28226 by certificates.
28227
28228 It is possible to make use of any SASL authentication mechanism as well,
28229 by using 'sasl' for this option
28230
28231 Defaults to @samp{"none"}.
28232
28233 @end deftypevr
28234
28235 @deftypevr {@code{libvirt-configuration} parameter} optional-list access-drivers
28236 API access control scheme.
28237
28238 By default an authenticated user is allowed access to all APIs. Access
28239 drivers can place restrictions on this.
28240
28241 Defaults to @samp{()}.
28242
28243 @end deftypevr
28244
28245 @deftypevr {@code{libvirt-configuration} parameter} string key-file
28246 Server key file path. If set to an empty string, then no private key is
28247 loaded.
28248
28249 Defaults to @samp{""}.
28250
28251 @end deftypevr
28252
28253 @deftypevr {@code{libvirt-configuration} parameter} string cert-file
28254 Server key file path. If set to an empty string, then no certificate is
28255 loaded.
28256
28257 Defaults to @samp{""}.
28258
28259 @end deftypevr
28260
28261 @deftypevr {@code{libvirt-configuration} parameter} string ca-file
28262 Server key file path. If set to an empty string, then no CA certificate
28263 is loaded.
28264
28265 Defaults to @samp{""}.
28266
28267 @end deftypevr
28268
28269 @deftypevr {@code{libvirt-configuration} parameter} string crl-file
28270 Certificate revocation list path. If set to an empty string, then no
28271 CRL is loaded.
28272
28273 Defaults to @samp{""}.
28274
28275 @end deftypevr
28276
28277 @deftypevr {@code{libvirt-configuration} parameter} boolean tls-no-sanity-cert
28278 Disable verification of our own server certificates.
28279
28280 When libvirtd starts it performs some sanity checks against its own
28281 certificates.
28282
28283 Defaults to @samp{#f}.
28284
28285 @end deftypevr
28286
28287 @deftypevr {@code{libvirt-configuration} parameter} boolean tls-no-verify-cert
28288 Disable verification of client certificates.
28289
28290 Client certificate verification is the primary authentication mechanism.
28291 Any client which does not present a certificate signed by the CA will be
28292 rejected.
28293
28294 Defaults to @samp{#f}.
28295
28296 @end deftypevr
28297
28298 @deftypevr {@code{libvirt-configuration} parameter} optional-list tls-allowed-dn-list
28299 Whitelist of allowed x509 Distinguished Name.
28300
28301 Defaults to @samp{()}.
28302
28303 @end deftypevr
28304
28305 @deftypevr {@code{libvirt-configuration} parameter} optional-list sasl-allowed-usernames
28306 Whitelist of allowed SASL usernames. The format for username depends on
28307 the SASL authentication mechanism.
28308
28309 Defaults to @samp{()}.
28310
28311 @end deftypevr
28312
28313 @deftypevr {@code{libvirt-configuration} parameter} string tls-priority
28314 Override the compile time default TLS priority string. The default is
28315 usually @samp{"NORMAL"} unless overridden at build time. Only set this is it
28316 is desired for libvirt to deviate from the global default settings.
28317
28318 Defaults to @samp{"NORMAL"}.
28319
28320 @end deftypevr
28321
28322 @deftypevr {@code{libvirt-configuration} parameter} integer max-clients
28323 Maximum number of concurrent client connections to allow over all
28324 sockets combined.
28325
28326 Defaults to @samp{5000}.
28327
28328 @end deftypevr
28329
28330 @deftypevr {@code{libvirt-configuration} parameter} integer max-queued-clients
28331 Maximum length of queue of connections waiting to be accepted by the
28332 daemon. Note, that some protocols supporting retransmission may obey
28333 this so that a later reattempt at connection succeeds.
28334
28335 Defaults to @samp{1000}.
28336
28337 @end deftypevr
28338
28339 @deftypevr {@code{libvirt-configuration} parameter} integer max-anonymous-clients
28340 Maximum length of queue of accepted but not yet authenticated clients.
28341 Set this to zero to turn this feature off
28342
28343 Defaults to @samp{20}.
28344
28345 @end deftypevr
28346
28347 @deftypevr {@code{libvirt-configuration} parameter} integer min-workers
28348 Number of workers to start up initially.
28349
28350 Defaults to @samp{5}.
28351
28352 @end deftypevr
28353
28354 @deftypevr {@code{libvirt-configuration} parameter} integer max-workers
28355 Maximum number of worker threads.
28356
28357 If the number of active clients exceeds @code{min-workers}, then more
28358 threads are spawned, up to max_workers limit. Typically you'd want
28359 max_workers to equal maximum number of clients allowed.
28360
28361 Defaults to @samp{20}.
28362
28363 @end deftypevr
28364
28365 @deftypevr {@code{libvirt-configuration} parameter} integer prio-workers
28366 Number of priority workers. If all workers from above pool are stuck,
28367 some calls marked as high priority (notably domainDestroy) can be
28368 executed in this pool.
28369
28370 Defaults to @samp{5}.
28371
28372 @end deftypevr
28373
28374 @deftypevr {@code{libvirt-configuration} parameter} integer max-requests
28375 Total global limit on concurrent RPC calls.
28376
28377 Defaults to @samp{20}.
28378
28379 @end deftypevr
28380
28381 @deftypevr {@code{libvirt-configuration} parameter} integer max-client-requests
28382 Limit on concurrent requests from a single client connection. To avoid
28383 one client monopolizing the server this should be a small fraction of
28384 the global max_requests and max_workers parameter.
28385
28386 Defaults to @samp{5}.
28387
28388 @end deftypevr
28389
28390 @deftypevr {@code{libvirt-configuration} parameter} integer admin-min-workers
28391 Same as @code{min-workers} but for the admin interface.
28392
28393 Defaults to @samp{1}.
28394
28395 @end deftypevr
28396
28397 @deftypevr {@code{libvirt-configuration} parameter} integer admin-max-workers
28398 Same as @code{max-workers} but for the admin interface.
28399
28400 Defaults to @samp{5}.
28401
28402 @end deftypevr
28403
28404 @deftypevr {@code{libvirt-configuration} parameter} integer admin-max-clients
28405 Same as @code{max-clients} but for the admin interface.
28406
28407 Defaults to @samp{5}.
28408
28409 @end deftypevr
28410
28411 @deftypevr {@code{libvirt-configuration} parameter} integer admin-max-queued-clients
28412 Same as @code{max-queued-clients} but for the admin interface.
28413
28414 Defaults to @samp{5}.
28415
28416 @end deftypevr
28417
28418 @deftypevr {@code{libvirt-configuration} parameter} integer admin-max-client-requests
28419 Same as @code{max-client-requests} but for the admin interface.
28420
28421 Defaults to @samp{5}.
28422
28423 @end deftypevr
28424
28425 @deftypevr {@code{libvirt-configuration} parameter} integer log-level
28426 Logging level. 4 errors, 3 warnings, 2 information, 1 debug.
28427
28428 Defaults to @samp{3}.
28429
28430 @end deftypevr
28431
28432 @deftypevr {@code{libvirt-configuration} parameter} string log-filters
28433 Logging filters.
28434
28435 A filter allows to select a different logging level for a given category
28436 of logs. The format for a filter is one of:
28437
28438 @itemize @bullet
28439 @item
28440 x:name
28441
28442 @item
28443 x:+name
28444
28445 @end itemize
28446
28447 where @code{name} is a string which is matched against the category
28448 given in the @code{VIR_LOG_INIT()} at the top of each libvirt source
28449 file, e.g., @samp{"remote"}, @samp{"qemu"}, or @samp{"util.json"} (the
28450 name in the filter can be a substring of the full category name, in
28451 order to match multiple similar categories), the optional @samp{"+"}
28452 prefix tells libvirt to log stack trace for each message matching name,
28453 and @code{x} is the minimal level where matching messages should be
28454 logged:
28455
28456 @itemize @bullet
28457 @item
28458 1: DEBUG
28459
28460 @item
28461 2: INFO
28462
28463 @item
28464 3: WARNING
28465
28466 @item
28467 4: ERROR
28468
28469 @end itemize
28470
28471 Multiple filters can be defined in a single filters statement, they just
28472 need to be separated by spaces.
28473
28474 Defaults to @samp{"3:remote 4:event"}.
28475
28476 @end deftypevr
28477
28478 @deftypevr {@code{libvirt-configuration} parameter} string log-outputs
28479 Logging outputs.
28480
28481 An output is one of the places to save logging information. The format
28482 for an output can be:
28483
28484 @table @code
28485 @item x:stderr
28486 output goes to stderr
28487
28488 @item x:syslog:name
28489 use syslog for the output and use the given name as the ident
28490
28491 @item x:file:file_path
28492 output to a file, with the given filepath
28493
28494 @item x:journald
28495 output to journald logging system
28496
28497 @end table
28498
28499 In all case the x prefix is the minimal level, acting as a filter
28500
28501 @itemize @bullet
28502 @item
28503 1: DEBUG
28504
28505 @item
28506 2: INFO
28507
28508 @item
28509 3: WARNING
28510
28511 @item
28512 4: ERROR
28513
28514 @end itemize
28515
28516 Multiple outputs can be defined, they just need to be separated by
28517 spaces.
28518
28519 Defaults to @samp{"3:stderr"}.
28520
28521 @end deftypevr
28522
28523 @deftypevr {@code{libvirt-configuration} parameter} integer audit-level
28524 Allows usage of the auditing subsystem to be altered
28525
28526 @itemize @bullet
28527 @item
28528 0: disable all auditing
28529
28530 @item
28531 1: enable auditing, only if enabled on host
28532
28533 @item
28534 2: enable auditing, and exit if disabled on host.
28535
28536 @end itemize
28537
28538 Defaults to @samp{1}.
28539
28540 @end deftypevr
28541
28542 @deftypevr {@code{libvirt-configuration} parameter} boolean audit-logging
28543 Send audit messages via libvirt logging infrastructure.
28544
28545 Defaults to @samp{#f}.
28546
28547 @end deftypevr
28548
28549 @deftypevr {@code{libvirt-configuration} parameter} optional-string host-uuid
28550 Host UUID@. UUID must not have all digits be the same.
28551
28552 Defaults to @samp{""}.
28553
28554 @end deftypevr
28555
28556 @deftypevr {@code{libvirt-configuration} parameter} string host-uuid-source
28557 Source to read host UUID.
28558
28559 @itemize @bullet
28560 @item
28561 @code{smbios}: fetch the UUID from @code{dmidecode -s system-uuid}
28562
28563 @item
28564 @code{machine-id}: fetch the UUID from @code{/etc/machine-id}
28565
28566 @end itemize
28567
28568 If @code{dmidecode} does not provide a valid UUID a temporary UUID will
28569 be generated.
28570
28571 Defaults to @samp{"smbios"}.
28572
28573 @end deftypevr
28574
28575 @deftypevr {@code{libvirt-configuration} parameter} integer keepalive-interval
28576 A keepalive message is sent to a client after @code{keepalive_interval}
28577 seconds of inactivity to check if the client is still responding. If
28578 set to -1, libvirtd will never send keepalive requests; however clients
28579 can still send them and the daemon will send responses.
28580
28581 Defaults to @samp{5}.
28582
28583 @end deftypevr
28584
28585 @deftypevr {@code{libvirt-configuration} parameter} integer keepalive-count
28586 Maximum number of keepalive messages that are allowed to be sent to the
28587 client without getting any response before the connection is considered
28588 broken.
28589
28590 In other words, the connection is automatically closed approximately
28591 after @code{keepalive_interval * (keepalive_count + 1)} seconds since
28592 the last message received from the client. When @code{keepalive-count}
28593 is set to 0, connections will be automatically closed after
28594 @code{keepalive-interval} seconds of inactivity without sending any
28595 keepalive messages.
28596
28597 Defaults to @samp{5}.
28598
28599 @end deftypevr
28600
28601 @deftypevr {@code{libvirt-configuration} parameter} integer admin-keepalive-interval
28602 Same as above but for admin interface.
28603
28604 Defaults to @samp{5}.
28605
28606 @end deftypevr
28607
28608 @deftypevr {@code{libvirt-configuration} parameter} integer admin-keepalive-count
28609 Same as above but for admin interface.
28610
28611 Defaults to @samp{5}.
28612
28613 @end deftypevr
28614
28615 @deftypevr {@code{libvirt-configuration} parameter} integer ovs-timeout
28616 Timeout for Open vSwitch calls.
28617
28618 The @code{ovs-vsctl} utility is used for the configuration and its
28619 timeout option is set by default to 5 seconds to avoid potential
28620 infinite waits blocking libvirt.
28621
28622 Defaults to @samp{5}.
28623
28624 @end deftypevr
28625
28626 @c %end of autogenerated docs
28627
28628 @subsubheading Virtlog daemon
28629 The virtlogd service is a server side daemon component of libvirt that is
28630 used to manage logs from virtual machine consoles.
28631
28632 This daemon is not used directly by libvirt client applications, rather it
28633 is called on their behalf by @code{libvirtd}. By maintaining the logs in a
28634 standalone daemon, the main @code{libvirtd} daemon can be restarted without
28635 risk of losing logs. The @code{virtlogd} daemon has the ability to re-exec()
28636 itself upon receiving @code{SIGUSR1}, to allow live upgrades without downtime.
28637
28638 @deffn {Scheme Variable} virtlog-service-type
28639 This is the type of the virtlog daemon.
28640 Its value must be a @code{virtlog-configuration}.
28641
28642 @lisp
28643 (service virtlog-service-type
28644 (virtlog-configuration
28645 (max-clients 1000)))
28646 @end lisp
28647 @end deffn
28648
28649 @deftypevr {@code{virtlog-configuration} parameter} integer log-level
28650 Logging level. 4 errors, 3 warnings, 2 information, 1 debug.
28651
28652 Defaults to @samp{3}.
28653
28654 @end deftypevr
28655
28656 @deftypevr {@code{virtlog-configuration} parameter} string log-filters
28657 Logging filters.
28658
28659 A filter allows to select a different logging level for a given category
28660 of logs The format for a filter is one of:
28661
28662 @itemize @bullet
28663 @item
28664 x:name
28665
28666 @item
28667 x:+name
28668
28669 @end itemize
28670
28671 where @code{name} is a string which is matched against the category
28672 given in the @code{VIR_LOG_INIT()} at the top of each libvirt source
28673 file, e.g., "remote", "qemu", or "util.json" (the name in the filter can
28674 be a substring of the full category name, in order to match multiple
28675 similar categories), the optional "+" prefix tells libvirt to log stack
28676 trace for each message matching name, and @code{x} is the minimal level
28677 where matching messages should be logged:
28678
28679 @itemize @bullet
28680 @item
28681 1: DEBUG
28682
28683 @item
28684 2: INFO
28685
28686 @item
28687 3: WARNING
28688
28689 @item
28690 4: ERROR
28691
28692 @end itemize
28693
28694 Multiple filters can be defined in a single filters statement, they just
28695 need to be separated by spaces.
28696
28697 Defaults to @samp{"3:remote 4:event"}.
28698
28699 @end deftypevr
28700
28701 @deftypevr {@code{virtlog-configuration} parameter} string log-outputs
28702 Logging outputs.
28703
28704 An output is one of the places to save logging information The format
28705 for an output can be:
28706
28707 @table @code
28708 @item x:stderr
28709 output goes to stderr
28710
28711 @item x:syslog:name
28712 use syslog for the output and use the given name as the ident
28713
28714 @item x:file:file_path
28715 output to a file, with the given filepath
28716
28717 @item x:journald
28718 output to journald logging system
28719
28720 @end table
28721
28722 In all case the x prefix is the minimal level, acting as a filter
28723
28724 @itemize @bullet
28725 @item
28726 1: DEBUG
28727
28728 @item
28729 2: INFO
28730
28731 @item
28732 3: WARNING
28733
28734 @item
28735 4: ERROR
28736
28737 @end itemize
28738
28739 Multiple outputs can be defined, they just need to be separated by
28740 spaces.
28741
28742 Defaults to @samp{"3:stderr"}.
28743
28744 @end deftypevr
28745
28746 @deftypevr {@code{virtlog-configuration} parameter} integer max-clients
28747 Maximum number of concurrent client connections to allow over all
28748 sockets combined.
28749
28750 Defaults to @samp{1024}.
28751
28752 @end deftypevr
28753
28754 @deftypevr {@code{virtlog-configuration} parameter} integer max-size
28755 Maximum file size before rolling over.
28756
28757 Defaults to @samp{2MB}
28758
28759 @end deftypevr
28760
28761 @deftypevr {@code{virtlog-configuration} parameter} integer max-backups
28762 Maximum number of backup files to keep.
28763
28764 Defaults to @samp{3}
28765
28766 @end deftypevr
28767
28768 @anchor{transparent-emulation-qemu}
28769 @subsubheading Transparent Emulation with QEMU
28770
28771 @cindex emulation
28772 @cindex @code{binfmt_misc}
28773 @code{qemu-binfmt-service-type} provides support for transparent
28774 emulation of program binaries built for different architectures---e.g.,
28775 it allows you to transparently execute an ARMv7 program on an x86_64
28776 machine. It achieves this by combining the @uref{https://www.qemu.org,
28777 QEMU} emulator and the @code{binfmt_misc} feature of the kernel Linux.
28778 This feature only allows you to emulate GNU/Linux on a different
28779 architecture, but see below for GNU/Hurd support.
28780
28781 @defvr {Scheme Variable} qemu-binfmt-service-type
28782 This is the type of the QEMU/binfmt service for transparent emulation.
28783 Its value must be a @code{qemu-binfmt-configuration} object, which
28784 specifies the QEMU package to use as well as the architecture we want to
28785 emulated:
28786
28787 @lisp
28788 (service qemu-binfmt-service-type
28789 (qemu-binfmt-configuration
28790 (platforms (lookup-qemu-platforms "arm" "aarch64"))))
28791 @end lisp
28792
28793 In this example, we enable transparent emulation for the ARM and aarch64
28794 platforms. Running @code{herd stop qemu-binfmt} turns it off, and
28795 running @code{herd start qemu-binfmt} turns it back on (@pxref{Invoking
28796 herd, the @command{herd} command,, shepherd, The GNU Shepherd Manual}).
28797 @end defvr
28798
28799 @deftp {Data Type} qemu-binfmt-configuration
28800 This is the configuration for the @code{qemu-binfmt} service.
28801
28802 @table @asis
28803 @item @code{platforms} (default: @code{'()})
28804 The list of emulated QEMU platforms. Each item must be a @dfn{platform
28805 object} as returned by @code{lookup-qemu-platforms} (see below).
28806
28807 For example, let's suppose you're on an x86_64 machine and you have this
28808 service:
28809
28810 @lisp
28811 (service qemu-binfmt-service-type
28812 (qemu-binfmt-configuration
28813 (platforms (lookup-qemu-platforms "arm"))))
28814 @end lisp
28815
28816 You can run:
28817
28818 @example
28819 guix build -s armhf-linux inkscape
28820 @end example
28821
28822 @noindent
28823 and it will build Inkscape for ARMv7 @emph{as if it were a native
28824 build}, transparently using QEMU to emulate the ARMv7 CPU@. Pretty handy
28825 if you'd like to test a package build for an architecture you don't have
28826 access to!
28827
28828 @item @code{qemu} (default: @code{qemu})
28829 The QEMU package to use.
28830 @end table
28831 @end deftp
28832
28833 @deffn {Scheme Procedure} lookup-qemu-platforms @var{platforms}@dots{}
28834 Return the list of QEMU platform objects corresponding to
28835 @var{platforms}@dots{}. @var{platforms} must be a list of strings
28836 corresponding to platform names, such as @code{"arm"}, @code{"sparc"},
28837 @code{"mips64el"}, and so on.
28838 @end deffn
28839
28840 @deffn {Scheme Procedure} qemu-platform? @var{obj}
28841 Return true if @var{obj} is a platform object.
28842 @end deffn
28843
28844 @deffn {Scheme Procedure} qemu-platform-name @var{platform}
28845 Return the name of @var{platform}---a string such as @code{"arm"}.
28846 @end deffn
28847
28848
28849 @subsubheading The Hurd in a Virtual Machine
28850
28851 @cindex @code{hurd}
28852 @cindex the Hurd
28853 @cindex childhurd
28854
28855 Service @code{hurd-vm} provides support for running GNU/Hurd in a
28856 virtual machine (VM), a so-called @dfn{childhurd}. This service is meant
28857 to be used on GNU/Linux and the given GNU/Hurd operating system
28858 configuration is cross-compiled. The virtual machine is a Shepherd
28859 service that can be referred to by the names @code{hurd-vm} and
28860 @code{childhurd} and be controlled with commands such as:
28861
28862 @example
28863 herd start hurd-vm
28864 herd stop childhurd
28865 @end example
28866
28867 When the service is running, you can view its console by connecting to
28868 it with a VNC client, for example with:
28869
28870 @example
28871 guix environment --ad-hoc tigervnc-client -- \
28872 vncviewer localhost:5900
28873 @end example
28874
28875 The default configuration (see @code{hurd-vm-configuration} below)
28876 spawns a secure shell (SSH) server in your GNU/Hurd system, which QEMU
28877 (the virtual machine emulator) redirects to port 10222 on the host.
28878 Thus, you can connect over SSH to the childhurd with:
28879
28880 @example
28881 ssh root@@localhost -p 10022
28882 @end example
28883
28884 The childhurd is volatile and stateless: it starts with a fresh root
28885 file system every time you restart it. By default though, all the files
28886 under @file{/etc/childhurd} on the host are copied as is to the root
28887 file system of the childhurd when it boots. This allows you to
28888 initialize ``secrets'' inside the VM: SSH host keys, authorized
28889 substitute keys, and so on---see the explanation of @code{secret-root}
28890 below.
28891
28892 @defvr {Scheme Variable} hurd-vm-service-type
28893 This is the type of the Hurd in a Virtual Machine service. Its value
28894 must be a @code{hurd-vm-configuration} object, which specifies the
28895 operating system (@pxref{operating-system Reference}) and the disk size
28896 for the Hurd Virtual Machine, the QEMU package to use as well as the
28897 options for running it.
28898
28899 For example:
28900
28901 @lisp
28902 (service hurd-vm-service-type
28903 (hurd-vm-configuration
28904 (disk-size (* 5000 (expt 2 20))) ;5G
28905 (memory-size 1024))) ;1024MiB
28906 @end lisp
28907
28908 would create a disk image big enough to build GNU@tie{}Hello, with some
28909 extra memory.
28910 @end defvr
28911
28912 @deftp {Data Type} hurd-vm-configuration
28913 The data type representing the configuration for
28914 @code{hurd-vm-service-type}.
28915
28916 @table @asis
28917 @item @code{os} (default: @var{%hurd-vm-operating-system})
28918 The operating system to instantiate. This default is bare-bones with a
28919 permissive OpenSSH secure shell daemon listening on port 2222
28920 (@pxref{Networking Services, @code{openssh-service-type}}).
28921
28922 @item @code{qemu} (default: @code{qemu-minimal})
28923 The QEMU package to use.
28924
28925 @item @code{image} (default: @var{hurd-vm-disk-image})
28926 The procedure used to build the disk-image built from this
28927 configuration.
28928
28929 @item @code{disk-size} (default: @code{'guess})
28930 The size of the disk image.
28931
28932 @item @code{memory-size} (default: @code{512})
28933 The memory size of the Virtual Machine in mebibytes.
28934
28935 @item @code{options} (default: @code{'("--snapshot")})
28936 The extra options for running QEMU.
28937
28938 @item @code{id} (default: @code{#f})
28939 If set, a non-zero positive integer used to parameterize Childhurd
28940 instances. It is appended to the service's name,
28941 e.g. @code{childhurd1}.
28942
28943 @item @code{net-options} (default: @var{hurd-vm-net-options})
28944 The procedure used to produce the list of QEMU networking options.
28945
28946 By default, it produces
28947
28948 @lisp
28949 '("--device" "rtl8139,netdev=net0"
28950 "--netdev" "user,id=net0\
28951 ,hostfwd=tcp:127.0.0.1:@var{secrets-port}-:1004\
28952 ,hostfwd=tcp:127.0.0.1:@var{ssh-port}-:2222\
28953 ,hostfwd=tcp:127.0.0.1:@var{vnc-port}-:5900")
28954 @end lisp
28955
28956 with forwarded ports:
28957
28958 @example
28959 @var{secrets-port}: @code{(+ 11004 (* 1000 @var{ID}))}
28960 @var{ssh-port}: @code{(+ 10022 (* 1000 @var{ID}))}
28961 @var{vnc-port}: @code{(+ 15900 (* 1000 @var{ID}))}
28962 @end example
28963
28964 @item @code{secret-root} (default: @file{/etc/childhurd})
28965 The root directory with out-of-band secrets to be installed into the
28966 childhurd once it runs. Childhurds are volatile which means that on
28967 every startup, secrets such as the SSH host keys and Guix signing key
28968 are recreated.
28969
28970 If the @file{/etc/childhurd} directory does not exist, the
28971 @code{secret-service} running in the Childhurd will be sent an empty
28972 list of secrets.
28973
28974 By default, the service automatically populates @file{/etc/childhurd}
28975 with the following non-volatile secrets, unless they already exist:
28976
28977 @example
28978 /etc/childhurd/etc/guix/acl
28979 /etc/childhurd/etc/guix/signing-key.pub
28980 /etc/childhurd/etc/guix/signing-key.sec
28981 /etc/childhurd/etc/ssh/ssh_host_ed25519_key
28982 /etc/childhurd/etc/ssh/ssh_host_ecdsa_key
28983 /etc/childhurd/etc/ssh/ssh_host_ed25519_key.pub
28984 /etc/childhurd/etc/ssh/ssh_host_ecdsa_key.pub
28985 @end example
28986
28987 These files are automatically sent to the guest Hurd VM when it boots,
28988 including permissions.
28989
28990 @cindex childhurd, offloading
28991 @cindex Hurd, offloading
28992 Having these files in place means that only a couple of things are
28993 missing to allow the host to offload @code{i586-gnu} builds to the
28994 childhurd:
28995
28996 @enumerate
28997 @item
28998 Authorizing the childhurd's key on the host so that the host accepts
28999 build results coming from the childhurd, which can be done like so:
29000
29001 @example
29002 guix archive --authorize < \
29003 /etc/childhurd/etc/guix/signing-key.pub
29004 @end example
29005
29006 @item
29007 Adding the childhurd to @file{/etc/guix/machines.scm} (@pxref{Daemon
29008 Offload Setup}).
29009 @end enumerate
29010
29011 We're working towards making that happen automatically---get in touch
29012 with us at @email{guix-devel@@gnu.org} to discuss it!
29013 @end table
29014 @end deftp
29015
29016 Note that by default the VM image is volatile, i.e., once stopped the
29017 contents are lost. If you want a stateful image instead, override the
29018 configuration's @code{image} and @code{options} without
29019 the @code{--snapshot} flag using something along these lines:
29020
29021 @lisp
29022 (service hurd-vm-service-type
29023 (hurd-vm-configuration
29024 (image (const "/out/of/store/writable/hurd.img"))
29025 (options '())))
29026 @end lisp
29027
29028 @subsubheading Ganeti
29029
29030 @cindex ganeti
29031
29032 @quotation Note
29033 This service is considered experimental. Configuration options may be changed
29034 in a backwards-incompatible manner, and not all features have been thorougly
29035 tested. Users of this service are encouraged to share their experience at
29036 @email{guix-devel@@gnu.org}.
29037 @end quotation
29038
29039 Ganeti is a virtual machine management system. It is designed to keep virtual
29040 machines running on a cluster of servers even in the event of hardware failures,
29041 and to make maintenance and recovery tasks easy. It consists of multiple
29042 services which are described later in this section. In addition to the Ganeti
29043 service, you will need the OpenSSH service (@pxref{Networking Services,
29044 @code{openssh-service-type}}), and update the @file{/etc/hosts} file
29045 (@pxref{operating-system Reference, @code{hosts-file}}) with the cluster name
29046 and address (or use a DNS server).
29047
29048 All nodes participating in a Ganeti cluster should have the same Ganeti and
29049 @file{/etc/hosts} configuration. Here is an example configuration for a Ganeti
29050 cluster node that supports multiple storage backends, and installs the
29051 @code{debootstrap} and @code{guix} @dfn{OS providers}:
29052
29053 @lisp
29054 (use-package-modules virtualization)
29055 (use-service-modules base ganeti networking ssh)
29056 (operating-system
29057 ;; @dots{}
29058 (host-name "node1")
29059 (hosts-file (plain-file "hosts" (format #f "
29060 127.0.0.1 localhost
29061 ::1 localhost
29062
29063 192.168.1.200 ganeti.example.com
29064 192.168.1.201 node1.example.com node1
29065 192.168.1.202 node2.example.com node2
29066 ")))
29067
29068 ;; Install QEMU so we can use KVM-based instances, and LVM, DRBD and Ceph
29069 ;; in order to use the "plain", "drbd" and "rbd" storage backends.
29070 (packages (append (map specification->package
29071 '("qemu" "lvm2" "drbd-utils" "ceph"
29072 ;; Add the debootstrap and guix OS providers.
29073 "ganeti-instance-guix" "ganeti-instance-debootstrap"))
29074 %base-packages))
29075 (services
29076 (append (list (static-networking-service "eth0" "192.168.1.201"
29077 #:netmask "255.255.255.0"
29078 #:gateway "192.168.1.254"
29079 #:name-servers '("192.168.1.252"
29080 "192.168.1.253"))
29081
29082 ;; Ganeti uses SSH to communicate between nodes.
29083 (service openssh-service-type
29084 (openssh-configuration
29085 (permit-root-login 'without-password)))
29086
29087 (service ganeti-service-type
29088 (ganeti-configuration
29089 ;; This list specifies allowed file system paths
29090 ;; for storing virtual machine images.
29091 (file-storage-paths '("/srv/ganeti/file-storage"))
29092 ;; This variable configures a single "variant" for
29093 ;; both Debootstrap and Guix that works with KVM.
29094 (os %default-ganeti-os))))
29095 %base-services)))
29096 @end lisp
29097
29098 Users are advised to read the
29099 @url{http://docs.ganeti.org/ganeti/master/html/admin.html,Ganeti
29100 administrators guide} to learn about the various cluster options and
29101 day-to-day operations. There is also a
29102 @url{https://guix.gnu.org/blog/2020/running-a-ganeti-cluster-on-guix/,blog post}
29103 describing how to configure and initialize a small cluster.
29104
29105 @defvr {Scheme Variable} ganeti-service-type
29106 This is a service type that includes all the various services that Ganeti
29107 nodes should run.
29108
29109 Its value is a @code{ganeti-configuration} object that defines the package
29110 to use for CLI operations, as well as configuration for the various daemons.
29111 Allowed file storage paths and available guest operating systems are also
29112 configured through this data type.
29113 @end defvr
29114
29115 @deftp {Data Type} ganeti-configuration
29116 The @code{ganeti} service takes the following configuration options:
29117
29118 @table @asis
29119 @item @code{ganeti} (default: @code{ganeti})
29120 The @code{ganeti} package to use. It will be installed to the system profile
29121 and make @command{gnt-cluster}, @command{gnt-instance}, etc available. Note
29122 that the value specified here does not affect the other services as each refer
29123 to a specific @code{ganeti} package (see below).
29124
29125 @item @code{noded-configuration} (default: @code{(ganeti-noded-configuration)})
29126 @itemx @code{confd-configuration} (default: @code{(ganeti-confd-configuration)})
29127 @itemx @code{wconfd-configuration} (default: @code{(ganeti-wconfd-configuration)})
29128 @itemx @code{luxid-configuration} (default: @code{(ganeti-luxid-configuration)})
29129 @itemx @code{rapi-configuration} (default: @code{(ganeti-rapi-configuration)})
29130 @itemx @code{kvmd-configuration} (default: @code{(ganeti-kvmd-configuration)})
29131 @itemx @code{mond-configuration} (default: @code{(ganeti-mond-configuration)})
29132 @itemx @code{metad-configuration} (default: @code{(ganeti-metad-configuration)})
29133 @itemx @code{watcher-configuration} (default: @code{(ganeti-watcher-configuration)})
29134 @itemx @code{cleaner-configuration} (default: @code{(ganeti-cleaner-configuration)})
29135
29136 These options control the various daemons and cron jobs that are distributed
29137 with Ganeti. The possible values for these are described in detail below.
29138 To override a setting, you must use the configuration type for that service:
29139
29140 @lisp
29141 (service ganeti-service-type
29142 (ganeti-configuration
29143 (rapi-configuration
29144 (ganeti-rapi-configuration
29145 (interface "eth1"))))
29146 (watcher-configuration
29147 (ganeti-watcher-configuration
29148 (rapi-ip "10.0.0.1"))))
29149 @end lisp
29150
29151 @item @code{file-storage-paths} (default: @code{'()})
29152 List of allowed directories for file storage backend.
29153
29154 @item @code{os} (default: @code{%default-ganeti-os})
29155 List of @code{<ganeti-os>} records.
29156 @end table
29157
29158 In essence @code{ganeti-service-type} is shorthand for declaring each service
29159 individually:
29160
29161 @lisp
29162 (service ganeti-noded-service-type)
29163 (service ganeti-confd-service-type)
29164 (service ganeti-wconfd-service-type)
29165 (service ganeti-luxid-service-type)
29166 (service ganeti-kvmd-service-type)
29167 (service ganeti-mond-service-type)
29168 (service ganeti-metad-service-type)
29169 (service ganeti-watcher-service-type)
29170 (service ganeti-cleaner-service-type)
29171 @end lisp
29172
29173 Plus a service extension for @code{etc-service-type} that configures the file
29174 storage backend and OS variants.
29175
29176 @end deftp
29177
29178 @deftp {Data Type} ganeti-os
29179 This data type is suitable for passing to the @code{os} parameter of
29180 @code{ganeti-configuration}. It takes the following parameters:
29181
29182 @table @asis
29183 @item @code{name}
29184 The name for this OS provider. It is only used to specify where the
29185 configuration ends up. Setting it to ``debootstrap'' will create
29186 @file{/etc/ganeti/instance-debootstrap}.
29187
29188 @item @code{extension}
29189 The file extension for variants of this OS type. For example
29190 @file{.conf} or @file{.scm}.
29191
29192 @item @code{variants} (default: @code{'()})
29193 List of @code{ganeti-os-variant} objects for this OS.
29194
29195 @end table
29196 @end deftp
29197
29198 @deftp {Data Type} ganeti-os-variant
29199 This is the data type for a Ganeti OS variant. It takes the following
29200 parameters:
29201
29202 @table @asis
29203 @item @code{name}
29204 The name of this variant.
29205
29206 @item @code{configuration}
29207 A configuration file for this variant.
29208 @end table
29209 @end deftp
29210
29211 @defvr {Scheme Variable} %default-debootstrap-hooks
29212 This variable contains hooks to configure networking and the GRUB bootloader.
29213 @end defvr
29214
29215 @defvr {Scheme Variable} %default-debootstrap-extra-pkgs
29216 This variable contains a list of packages suitable for a fully-virtualized guest.
29217 @end defvr
29218
29219 @deftp {Data Type} debootstrap-configuration
29220
29221 This data type creates configuration files suitable for the debootstrap OS provider.
29222
29223 @table @asis
29224 @item @code{hooks} (default: @code{%default-debootstrap-hooks})
29225 When not @code{#f}, this must be a G-expression that specifies a directory with
29226 scripts that will run when the OS is installed. It can also be a list of
29227 @code{(name . file-like)} pairs. For example:
29228
29229 @lisp
29230 `((99-hello-world . ,(plain-file "#!/bin/sh\necho Hello, World")))
29231 @end lisp
29232
29233 That will create a directory with one executable named @code{99-hello-world}
29234 and run it every time this variant is installed. If set to @code{#f}, hooks
29235 in @file{/etc/ganeti/instance-debootstrap/hooks} will be used, if any.
29236 @item @code{proxy} (default: @code{#f})
29237 Optional HTTP proxy to use.
29238 @item @code{mirror} (default: @code{#f})
29239 The Debian mirror. Typically something like @code{http://ftp.no.debian.org/debian}.
29240 The default varies depending on the distribution.
29241 @item @code{arch} (default: @code{#f})
29242 The dpkg architecture. Set to @code{armhf} to debootstrap an ARMv7 instance
29243 on an AArch64 host. Default is to use the current system architecture.
29244 @item @code{suite} (default: @code{"stable"})
29245 When set, this must be a Debian distribution ``suite'' such as @code{buster}
29246 or @code{focal}. If set to @code{#f}, the default for the OS provider is used.
29247 @item @code{extra-pkgs} (default: @code{%default-debootstrap-extra-pkgs})
29248 List of extra packages that will get installed by dpkg in addition
29249 to the minimal system.
29250 @item @code{components} (default: @code{#f})
29251 When set, must be a list of Debian repository ``components''. For example
29252 @code{'("main" "contrib")}.
29253 @item @code{generate-cache?} (default: @code{#t})
29254 Whether to automatically cache the generated debootstrap archive.
29255 @item @code{clean-cache} (default: @code{14})
29256 Discard the cache after this amount of days. Use @code{#f} to never
29257 clear the cache.
29258 @item @code{partition-style} (default: @code{'msdos})
29259 The type of partition to create. When set, it must be one of
29260 @code{'msdos}, @code{'none} or a string.
29261 @item @code{partition-alignment} (default: @code{2048})
29262 Alignment of the partition in sectors.
29263 @end table
29264 @end deftp
29265
29266 @deffn {Scheme Procedure} debootstrap-variant @var{name} @var{configuration}
29267 This is a helper procedure that creates a @code{ganeti-os-variant} record. It
29268 takes two parameters: a name and a @code{debootstrap-configuration} object.
29269 @end deffn
29270
29271 @deffn {Scheme Procedure} debootstrap-os @var{variants}@dots{}
29272 This is a helper procedure that creates a @code{ganeti-os} record. It takes
29273 a list of variants created with @code{debootstrap-variant}.
29274 @end deffn
29275
29276 @deffn {Scheme Procedure} guix-variant @var{name} @var{configuration}
29277 This is a helper procedure that creates a @code{ganeti-os-variant} record for
29278 use with the Guix OS provider. It takes a name and a G-expression that returns
29279 a ``file-like'' (@pxref{G-Expressions, file-like objects}) object containing a
29280 Guix System configuration.
29281 @end deffn
29282
29283 @deffn {Scheme Procedure} guix-os @var{variants}@dots{}
29284 This is a helper procedure that creates a @code{ganeti-os} record. It
29285 takes a list of variants produced by @code{guix-variant}.
29286 @end deffn
29287
29288 @defvr {Scheme Variable} %default-debootstrap-variants
29289 This is a convenience variable to make the debootstrap provider work
29290 ``out of the box'' without users having to declare variants manually. It
29291 contains a single debootstrap variant with the default configuration:
29292
29293 @lisp
29294 (list (debootstrap-variant
29295 "default"
29296 (debootstrap-configuration)))
29297 @end lisp
29298 @end defvr
29299
29300 @defvr {Scheme Variable} %default-guix-variants
29301 This is a convenience variable to make the Guix OS provider work without
29302 additional configuration. It creates a virtual machine that has an SSH
29303 server, a serial console, and authorizes the Ganeti hosts SSH keys.
29304
29305 @lisp
29306 (list (guix-variant
29307 "default"
29308 (file-append ganeti-instance-guix
29309 "/share/doc/ganeti-instance-guix/examples/dynamic.scm")))
29310 @end lisp
29311 @end defvr
29312
29313 Users can implement support for OS providers unbeknownst to Guix by extending
29314 the @code{ganeti-os} and @code{ganeti-os-variant} records appropriately.
29315 For example:
29316
29317 @lisp
29318 (ganeti-os
29319 (name "custom")
29320 (extension ".conf")
29321 (variants
29322 (list (ganeti-os-variant
29323 (name "foo")
29324 (configuration (plain-file "bar" "this is fine"))))))
29325 @end lisp
29326
29327 That creates @file{/etc/ganeti/instance-custom/variants/foo.conf} which points
29328 to a file in the store with contents @code{this is fine}. It also creates
29329 @file{/etc/ganeti/instance-custom/variants/variants.list} with contents @code{foo}.
29330
29331 Obviously this may not work for all OS providers out there. If you find the
29332 interface limiting, please reach out to @email{guix-devel@@gnu.org}.
29333
29334 The rest of this section documents the various services that are included by
29335 @code{ganeti-service-type}.
29336
29337 @defvr {Scheme Variable} ganeti-noded-service-type
29338 @command{ganeti-noded} is the daemon responsible for node-specific functions
29339 within the Ganeti system. The value of this service must be a
29340 @code{ganeti-noded-configuration} object.
29341 @end defvr
29342
29343 @deftp {Data Type} ganeti-noded-configuration
29344 This is the configuration for the @code{ganeti-noded} service.
29345
29346 @table @asis
29347 @item @code{ganeti} (default: @code{ganeti})
29348 The @code{ganeti} package to use for this service.
29349
29350 @item @code{port} (default: @code{1811})
29351 The TCP port on which the node daemon listens for network requests.
29352
29353 @item @code{address} (default: @code{"0.0.0.0"})
29354 The network address that the daemon will bind to. The default address means
29355 bind to all available addresses.
29356
29357 @item @code{interface} (default: @code{#f})
29358 When this is set, it must be a specific network interface (e.g.@: @code{eth0})
29359 that the daemon will bind to.
29360
29361 @item @code{max-clients} (default: @code{20})
29362 This sets a limit on the maximum number of simultaneous client connections
29363 that the daemon will handle. Connections above this count are accepted, but
29364 no responses will be sent until enough connections have closed.
29365
29366 @item @code{ssl?} (default: @code{#t})
29367 Whether to use SSL/TLS to encrypt network communications. The certificate
29368 is automatically provisioned by the cluster and can be rotated with
29369 @command{gnt-cluster renew-crypto}.
29370
29371 @item @code{ssl-key} (default: @file{"/var/lib/ganeti/server.pem"})
29372 This can be used to provide a specific encryption key for TLS communications.
29373
29374 @item @code{ssl-cert} (default: @file{"/var/lib/ganeti/server.pem"})
29375 This can be used to provide a specific certificate for TLS communications.
29376
29377 @item @code{debug?} (default: @code{#f})
29378 When true, the daemon performs additional logging for debugging purposes.
29379 Note that this will leak encryption details to the log files, use with caution.
29380
29381 @end table
29382 @end deftp
29383
29384 @defvr {Scheme Variable} ganeti-confd-service-type
29385 @command{ganeti-confd} answers queries related to the configuration of a
29386 Ganeti cluster. The purpose of this daemon is to have a highly available
29387 and fast way to query cluster configuration values. It is automatically
29388 active on all @dfn{master candidates}. The value of this service must be a
29389 @code{ganeti-confd-configuration} object.
29390
29391 @end defvr
29392
29393 @deftp {Data Type} ganeti-confd-configuration
29394 This is the configuration for the @code{ganeti-confd} service.
29395
29396 @table @asis
29397 @item @code{ganeti} (default: @code{ganeti})
29398 The @code{ganeti} package to use for this service.
29399
29400 @item @code{port} (default: @code{1814})
29401 The UDP port on which to listen for network requests.
29402
29403 @item @code{address} (default: @code{"0.0.0.0"})
29404 Network address that the daemon will bind to.
29405
29406 @item @code{debug?} (default: @code{#f})
29407 When true, the daemon performs additional logging for debugging purposes.
29408
29409 @end table
29410 @end deftp
29411
29412 @defvr {Scheme Variable} ganeti-wconfd-service-type
29413 @command{ganeti-wconfd} is the daemon that has authoritative knowledge
29414 about the cluster configuration and is the only entity that can accept
29415 changes to it. All jobs that need to modify the configuration will do so
29416 by sending appropriate requests to this daemon. It only runs on the
29417 @dfn{master node} and will automatically disable itself on other nodes.
29418
29419 The value of this service must be a
29420 @code{ganeti-wconfd-configuration} object.
29421 @end defvr
29422
29423 @deftp {Data Type} ganeti-wconfd-configuration
29424 This is the configuration for the @code{ganeti-wconfd} service.
29425
29426 @table @asis
29427 @item @code{ganeti} (default: @code{ganeti})
29428 The @code{ganeti} package to use for this service.
29429
29430 @item @code{no-voting?} (default: @code{#f})
29431 The daemon will refuse to start if the majority of cluster nodes does not
29432 agree that it is running on the master node. Set to @code{#t} to start
29433 even if a quorum can not be reached (dangerous, use with caution).
29434
29435 @item @code{debug?} (default: @code{#f})
29436 When true, the daemon performs additional logging for debugging purposes.
29437
29438 @end table
29439 @end deftp
29440
29441 @defvr {Scheme Variable} ganeti-luxid-service-type
29442 @command{ganeti-luxid} is a daemon used to answer queries related to the
29443 configuration and the current live state of a Ganeti cluster. Additionally,
29444 it is the authoritative daemon for the Ganeti job queue. Jobs can be
29445 submitted via this daemon and it schedules and starts them.
29446
29447 It takes a @code{ganeti-luxid-configuration} object.
29448 @end defvr
29449
29450 @deftp {Data Type} ganeti-luxid-configuration
29451 This is the configuration for the @code{ganeti-wconfd} service.
29452
29453 @table @asis
29454 @item @code{ganeti} (default: @code{ganeti})
29455 The @code{ganeti} package to use for this service.
29456
29457 @item @code{no-voting?} (default: @code{#f})
29458 The daemon will refuse to start if it cannot verify that the majority of
29459 cluster nodes believes that it is running on the master node. Set to
29460 @code{#t} to ignore such checks and start anyway (this can be dangerous).
29461
29462 @item @code{debug?} (default: @code{#f})
29463 When true, the daemon performs additional logging for debugging purposes.
29464
29465 @end table
29466 @end deftp
29467
29468 @defvr {Scheme Variable} ganeti-rapi-service-type
29469 @command{ganeti-rapi} provides a remote API for Ganeti clusters. It runs on
29470 the master node and can be used to perform cluster actions programmatically
29471 via a JSON-based RPC protocol.
29472
29473 Most query operations are allowed without authentication (unless
29474 @var{require-authentication?} is set), whereas write operations require
29475 explicit authorization via the @file{/var/lib/ganeti/rapi/users} file. See
29476 the @url{http://docs.ganeti.org/ganeti/master/html/rapi.html, Ganeti Remote
29477 API documentation} for more information.
29478
29479 The value of this service must be a @code{ganeti-rapi-configuration} object.
29480 @end defvr
29481
29482 @deftp {Data Type} ganeti-rapi-configuration
29483 This is the configuration for the @code{ganeti-rapi} service.
29484
29485 @table @asis
29486 @item @code{ganeti} (default: @code{ganeti})
29487 The @code{ganeti} package to use for this service.
29488
29489 @item @code{require-authentication?} (default: @code{#f})
29490 Whether to require authentication even for read-only operations.
29491
29492 @item @code{port} (default: @code{5080})
29493 The TCP port on which to listen to API requests.
29494
29495 @item @code{address} (default: @code{"0.0.0.0"})
29496 The network address that the service will bind to. By default it listens
29497 on all configured addresses.
29498
29499 @item @code{interface} (default: @code{#f})
29500 When set, it must specify a specific network interface such as @code{eth0}
29501 that the daemon will bind to.
29502
29503 @item @code{max-clients} (default: @code{20})
29504 The maximum number of simultaneous client requests to handle. Further
29505 connections are allowed, but no responses are sent until enough connections
29506 have closed.
29507
29508 @item @code{ssl?} (default: @code{#t})
29509 Whether to use SSL/TLS encryption on the RAPI port.
29510
29511 @item @code{ssl-key} (default: @file{"/var/lib/ganeti/server.pem"})
29512 This can be used to provide a specific encryption key for TLS communications.
29513
29514 @item @code{ssl-cert} (default: @file{"/var/lib/ganeti/server.pem"})
29515 This can be used to provide a specific certificate for TLS communications.
29516
29517 @item @code{debug?} (default: @code{#f})
29518 When true, the daemon performs additional logging for debugging purposes.
29519 Note that this will leak encryption details to the log files, use with caution.
29520
29521 @end table
29522 @end deftp
29523
29524 @defvr {Scheme Variable} ganeti-kvmd-service-type
29525 @command{ganeti-kvmd} is responsible for determining whether a given KVM
29526 instance was shut down by an administrator or a user. Normally Ganeti will
29527 restart an instance that was not stopped through Ganeti itself. If the
29528 cluster option @code{user_shutdown} is true, this daemon monitors the
29529 @code{QMP} socket provided by QEMU and listens for shutdown events, and
29530 marks the instance as @dfn{USER_down} instead of @dfn{ERROR_down} when
29531 it shuts down gracefully by itself.
29532
29533 It takes a @code{ganeti-kvmd-configuration} object.
29534 @end defvr
29535
29536 @deftp {Data Type} ganeti-kvmd-configuration
29537
29538 @table @asis
29539 @item @code{ganeti} (default: @code{ganeti})
29540 The @code{ganeti} package to use for this service.
29541
29542 @item @code{debug?} (default: @code{#f})
29543 When true, the daemon performs additional logging for debugging purposes.
29544
29545 @end table
29546 @end deftp
29547
29548 @defvr {Scheme Variable} ganeti-mond-service-type
29549 @command{ganeti-mond} is an optional daemon that provides Ganeti monitoring
29550 functionality. It is responsible for running data collectors and publish the
29551 collected information through a HTTP interface.
29552
29553 It takes a @code{ganeti-mond-configuration} object.
29554 @end defvr
29555
29556 @deftp {Data Type} ganeti-mond-configuration
29557
29558 @table @asis
29559 @item @code{ganeti} (default: @code{ganeti})
29560 The @code{ganeti} package to use for this service.
29561
29562 @item @code{port} (default: @code{1815})
29563 The port on which the daemon will listen.
29564
29565 @item @code{address} (default: @code{"0.0.0.0"})
29566 The network address that the daemon will bind to. By default it binds to all
29567 available interfaces.
29568
29569 @item @code{debug?} (default: @code{#f})
29570 When true, the daemon performs additional logging for debugging purposes.
29571
29572 @end table
29573 @end deftp
29574
29575 @defvr {Scheme Variable} ganeti-metad-service-type
29576 @command{ganeti-metad} is an optional daemon that can be used to provide
29577 information about the cluster to instances or OS install scripts.
29578
29579 It takes a @code{ganeti-metad-configuration} object.
29580 @end defvr
29581
29582 @deftp {Data Type} ganeti-metad-configuration
29583
29584 @table @asis
29585 @item @code{ganeti} (default: @code{ganeti})
29586 The @code{ganeti} package to use for this service.
29587
29588 @item @code{port} (default: @code{80})
29589 The port on which the daemon will listen.
29590
29591 @item @code{address} (default: @code{#f})
29592 If set, the daemon will bind to this address only. If left unset, the behavior
29593 depends on the cluster configuration.
29594
29595 @item @code{debug?} (default: @code{#f})
29596 When true, the daemon performs additional logging for debugging purposes.
29597
29598 @end table
29599 @end deftp
29600
29601 @defvr {Scheme Variable} ganeti-watcher-service-type
29602 @command{ganeti-watcher} is a script designed to run periodically and ensure
29603 the health of a cluster. It will automatically restart instances that have
29604 stopped without Ganeti's consent, and repairs DRBD links in case a node has
29605 rebooted. It also archives old cluster jobs and restarts Ganeti daemons
29606 that are not running. If the cluster parameter @code{ensure_node_health}
29607 is set, the watcher will also shutdown instances and DRBD devices if the
29608 node it is running on is declared offline by known master candidates.
29609
29610 It can be paused on all nodes with @command{gnt-cluster watcher pause}.
29611
29612 The service takes a @code{ganeti-watcher-configuration} object.
29613 @end defvr
29614
29615 @deftp {Data Type} ganeti-watcher-configuration
29616
29617 @table @asis
29618 @item @code{ganeti} (default: @code{ganeti})
29619 The @code{ganeti} package to use for this service.
29620
29621 @item @code{schedule} (default: @code{'(next-second-from (next-minute (range 0 60 5)))})
29622 How often to run the script. The default is every five minutes.
29623
29624 @item @code{rapi-ip} (default: @code{#f})
29625 This option needs to be specified only if the RAPI daemon is configured to use
29626 a particular interface or address. By default the cluster address is used.
29627
29628 @item @code{job-age} (default: @code{(* 6 3600)})
29629 Archive cluster jobs older than this age, specified in seconds. The default
29630 is 6 hours. This keeps @command{gnt-job list} manageable.
29631
29632 @item @code{verify-disks?} (default: @code{#t})
29633 If this is @code{#f}, the watcher will not try to repair broken DRBD links
29634 automatically. Administrators will need to use @command{gnt-cluster verify-disks}
29635 manually instead.
29636
29637 @item @code{debug?} (default: @code{#f})
29638 When @code{#t}, the script performs additional logging for debugging purposes.
29639
29640 @end table
29641 @end deftp
29642
29643 @defvr {Scheme Variable} ganeti-cleaner-service-type
29644 @command{ganeti-cleaner} is a script designed to run periodically and remove
29645 old files from the cluster. This service type controls two @dfn{cron jobs}:
29646 one intended for the master node that permanently purges old cluster jobs,
29647 and one intended for every node that removes expired X509 certificates, keys,
29648 and outdated @command{ganeti-watcher} information. Like all Ganeti services,
29649 it is safe to include even on non-master nodes as it will disable itself as
29650 necessary.
29651
29652 It takes a @code{ganeti-cleaner-configuration} object.
29653 @end defvr
29654
29655 @deftp {Data Type} ganeti-cleaner-configuration
29656
29657 @table @asis
29658 @item @code{ganeti} (default: @code{ganeti})
29659 The @code{ganeti} package to use for the @command{gnt-cleaner} command.
29660
29661 @item @code{master-schedule} (default: @code{"45 1 * * *"})
29662 How often to run the master cleaning job. The default is once per day, at
29663 01:45:00.
29664
29665 @item @code{node-schedule} (default: @code{"45 2 * * *"})
29666 How often to run the node cleaning job. The default is once per day, at
29667 02:45:00.
29668
29669 @end table
29670 @end deftp
29671
29672 @node Version Control Services
29673 @subsection Version Control Services
29674
29675 The @code{(gnu services version-control)} module provides a service to
29676 allow remote access to local Git repositories. There are three options:
29677 the @code{git-daemon-service}, which provides access to repositories via
29678 the @code{git://} unsecured TCP-based protocol, extending the
29679 @code{nginx} web server to proxy some requests to
29680 @code{git-http-backend}, or providing a web interface with
29681 @code{cgit-service-type}.
29682
29683 @deffn {Scheme Procedure} git-daemon-service [#:config (git-daemon-configuration)]
29684
29685 Return a service that runs @command{git daemon}, a simple TCP server to
29686 expose repositories over the Git protocol for anonymous access.
29687
29688 The optional @var{config} argument should be a
29689 @code{<git-daemon-configuration>} object, by default it allows read-only
29690 access to exported@footnote{By creating the magic file
29691 @file{git-daemon-export-ok} in the repository directory.} repositories under
29692 @file{/srv/git}.
29693
29694 @end deffn
29695
29696 @deftp {Data Type} git-daemon-configuration
29697 Data type representing the configuration for @code{git-daemon-service}.
29698
29699 @table @asis
29700 @item @code{package} (default: @code{git})
29701 Package object of the Git distributed version control system.
29702
29703 @item @code{export-all?} (default: @code{#f})
29704 Whether to allow access for all Git repositories, even if they do not
29705 have the @file{git-daemon-export-ok} file.
29706
29707 @item @code{base-path} (default: @file{/srv/git})
29708 Whether to remap all the path requests as relative to the given path.
29709 If you run @command{git daemon} with @code{(base-path "/srv/git")} on
29710 @samp{example.com}, then if you later try to pull
29711 @indicateurl{git://example.com/hello.git}, git daemon will interpret the
29712 path as @file{/srv/git/hello.git}.
29713
29714 @item @code{user-path} (default: @code{#f})
29715 Whether to allow @code{~user} notation to be used in requests. When
29716 specified with empty string, requests to
29717 @indicateurl{git://host/~alice/foo} is taken as a request to access
29718 @code{foo} repository in the home directory of user @code{alice}. If
29719 @code{(user-path "@var{path}")} is specified, the same request is taken
29720 as a request to access @file{@var{path}/foo} repository in the home
29721 directory of user @code{alice}.
29722
29723 @item @code{listen} (default: @code{'()})
29724 Whether to listen on specific IP addresses or hostnames, defaults to
29725 all.
29726
29727 @item @code{port} (default: @code{#f})
29728 Whether to listen on an alternative port, which defaults to 9418.
29729
29730 @item @code{whitelist} (default: @code{'()})
29731 If not empty, only allow access to this list of directories.
29732
29733 @item @code{extra-options} (default: @code{'()})
29734 Extra options will be passed to @command{git daemon}, please run
29735 @command{man git-daemon} for more information.
29736
29737 @end table
29738 @end deftp
29739
29740 The @code{git://} protocol lacks authentication. When you pull from a
29741 repository fetched via @code{git://}, you don't know whether the data you
29742 receive was modified or is even coming from the specified host, and your
29743 connection is subject to eavesdropping. It's better to use an authenticated
29744 and encrypted transport, such as @code{https}. Although Git allows you
29745 to serve repositories using unsophisticated file-based web servers,
29746 there is a faster protocol implemented by the @code{git-http-backend}
29747 program. This program is the back-end of a proper Git web service. It
29748 is designed to sit behind a FastCGI proxy. @xref{Web Services}, for more
29749 on running the necessary @code{fcgiwrap} daemon.
29750
29751 Guix has a separate configuration data type for serving Git repositories
29752 over HTTP.
29753
29754 @deftp {Data Type} git-http-configuration
29755 Data type representing the configuration for a future
29756 @code{git-http-service-type}; can currently be used to configure Nginx
29757 through @code{git-http-nginx-location-configuration}.
29758
29759 @table @asis
29760 @item @code{package} (default: @var{git})
29761 Package object of the Git distributed version control system.
29762
29763 @item @code{git-root} (default: @file{/srv/git})
29764 Directory containing the Git repositories to expose to the world.
29765
29766 @item @code{export-all?} (default: @code{#f})
29767 Whether to expose access for all Git repositories in @var{git-root},
29768 even if they do not have the @file{git-daemon-export-ok} file.
29769
29770 @item @code{uri-path} (default: @samp{/git/})
29771 Path prefix for Git access. With the default @samp{/git/} prefix, this
29772 will map @indicateurl{http://@var{server}/git/@var{repo}.git} to
29773 @file{/srv/git/@var{repo}.git}. Requests whose URI paths do not begin
29774 with this prefix are not passed on to this Git instance.
29775
29776 @item @code{fcgiwrap-socket} (default: @code{127.0.0.1:9000})
29777 The socket on which the @code{fcgiwrap} daemon is listening. @xref{Web
29778 Services}.
29779 @end table
29780 @end deftp
29781
29782 There is no @code{git-http-service-type}, currently; instead you can
29783 create an @code{nginx-location-configuration} from a
29784 @code{git-http-configuration} and then add that location to a web
29785 server.
29786
29787 @deffn {Scheme Procedure} git-http-nginx-location-configuration @
29788 [config=(git-http-configuration)]
29789 Compute an @code{nginx-location-configuration} that corresponds to the
29790 given Git http configuration. An example nginx service definition to
29791 serve the default @file{/srv/git} over HTTPS might be:
29792
29793 @lisp
29794 (service nginx-service-type
29795 (nginx-configuration
29796 (server-blocks
29797 (list
29798 (nginx-server-configuration
29799 (listen '("443 ssl"))
29800 (server-name "git.my-host.org")
29801 (ssl-certificate
29802 "/etc/letsencrypt/live/git.my-host.org/fullchain.pem")
29803 (ssl-certificate-key
29804 "/etc/letsencrypt/live/git.my-host.org/privkey.pem")
29805 (locations
29806 (list
29807 (git-http-nginx-location-configuration
29808 (git-http-configuration (uri-path "/"))))))))))
29809 @end lisp
29810
29811 This example assumes that you are using Let's Encrypt to get your TLS
29812 certificate. @xref{Certificate Services}. The default @code{certbot}
29813 service will redirect all HTTP traffic on @code{git.my-host.org} to
29814 HTTPS@. You will also need to add an @code{fcgiwrap} proxy to your
29815 system services. @xref{Web Services}.
29816 @end deffn
29817
29818 @subsubheading Cgit Service
29819
29820 @cindex Cgit service
29821 @cindex Git, web interface
29822 @uref{https://git.zx2c4.com/cgit/, Cgit} is a web frontend for Git
29823 repositories written in C.
29824
29825 The following example will configure the service with default values.
29826 By default, Cgit can be accessed on port 80 (@code{http://localhost:80}).
29827
29828 @lisp
29829 (service cgit-service-type)
29830 @end lisp
29831
29832 The @code{file-object} type designates either a file-like object
29833 (@pxref{G-Expressions, file-like objects}) or a string.
29834
29835 @c %start of fragment
29836
29837 Available @code{cgit-configuration} fields are:
29838
29839 @deftypevr {@code{cgit-configuration} parameter} package package
29840 The CGIT package.
29841
29842 @end deftypevr
29843
29844 @deftypevr {@code{cgit-configuration} parameter} nginx-server-configuration-list nginx
29845 NGINX configuration.
29846
29847 @end deftypevr
29848
29849 @deftypevr {@code{cgit-configuration} parameter} file-object about-filter
29850 Specifies a command which will be invoked to format the content of about
29851 pages (both top-level and for each repository).
29852
29853 Defaults to @samp{""}.
29854
29855 @end deftypevr
29856
29857 @deftypevr {@code{cgit-configuration} parameter} string agefile
29858 Specifies a path, relative to each repository path, which can be used to
29859 specify the date and time of the youngest commit in the repository.
29860
29861 Defaults to @samp{""}.
29862
29863 @end deftypevr
29864
29865 @deftypevr {@code{cgit-configuration} parameter} file-object auth-filter
29866 Specifies a command that will be invoked for authenticating repository
29867 access.
29868
29869 Defaults to @samp{""}.
29870
29871 @end deftypevr
29872
29873 @deftypevr {@code{cgit-configuration} parameter} string branch-sort
29874 Flag which, when set to @samp{age}, enables date ordering in the branch
29875 ref list, and when set @samp{name} enables ordering by branch name.
29876
29877 Defaults to @samp{"name"}.
29878
29879 @end deftypevr
29880
29881 @deftypevr {@code{cgit-configuration} parameter} string cache-root
29882 Path used to store the cgit cache entries.
29883
29884 Defaults to @samp{"/var/cache/cgit"}.
29885
29886 @end deftypevr
29887
29888 @deftypevr {@code{cgit-configuration} parameter} integer cache-static-ttl
29889 Number which specifies the time-to-live, in minutes, for the cached
29890 version of repository pages accessed with a fixed SHA1.
29891
29892 Defaults to @samp{-1}.
29893
29894 @end deftypevr
29895
29896 @deftypevr {@code{cgit-configuration} parameter} integer cache-dynamic-ttl
29897 Number which specifies the time-to-live, in minutes, for the cached
29898 version of repository pages accessed without a fixed SHA1.
29899
29900 Defaults to @samp{5}.
29901
29902 @end deftypevr
29903
29904 @deftypevr {@code{cgit-configuration} parameter} integer cache-repo-ttl
29905 Number which specifies the time-to-live, in minutes, for the cached
29906 version of the repository summary page.
29907
29908 Defaults to @samp{5}.
29909
29910 @end deftypevr
29911
29912 @deftypevr {@code{cgit-configuration} parameter} integer cache-root-ttl
29913 Number which specifies the time-to-live, in minutes, for the cached
29914 version of the repository index page.
29915
29916 Defaults to @samp{5}.
29917
29918 @end deftypevr
29919
29920 @deftypevr {@code{cgit-configuration} parameter} integer cache-scanrc-ttl
29921 Number which specifies the time-to-live, in minutes, for the result of
29922 scanning a path for Git repositories.
29923
29924 Defaults to @samp{15}.
29925
29926 @end deftypevr
29927
29928 @deftypevr {@code{cgit-configuration} parameter} integer cache-about-ttl
29929 Number which specifies the time-to-live, in minutes, for the cached
29930 version of the repository about page.
29931
29932 Defaults to @samp{15}.
29933
29934 @end deftypevr
29935
29936 @deftypevr {@code{cgit-configuration} parameter} integer cache-snapshot-ttl
29937 Number which specifies the time-to-live, in minutes, for the cached
29938 version of snapshots.
29939
29940 Defaults to @samp{5}.
29941
29942 @end deftypevr
29943
29944 @deftypevr {@code{cgit-configuration} parameter} integer cache-size
29945 The maximum number of entries in the cgit cache. When set to @samp{0},
29946 caching is disabled.
29947
29948 Defaults to @samp{0}.
29949
29950 @end deftypevr
29951
29952 @deftypevr {@code{cgit-configuration} parameter} boolean case-sensitive-sort?
29953 Sort items in the repo list case sensitively.
29954
29955 Defaults to @samp{#t}.
29956
29957 @end deftypevr
29958
29959 @deftypevr {@code{cgit-configuration} parameter} list clone-prefix
29960 List of common prefixes which, when combined with a repository URL,
29961 generates valid clone URLs for the repository.
29962
29963 Defaults to @samp{()}.
29964
29965 @end deftypevr
29966
29967 @deftypevr {@code{cgit-configuration} parameter} list clone-url
29968 List of @code{clone-url} templates.
29969
29970 Defaults to @samp{()}.
29971
29972 @end deftypevr
29973
29974 @deftypevr {@code{cgit-configuration} parameter} file-object commit-filter
29975 Command which will be invoked to format commit messages.
29976
29977 Defaults to @samp{""}.
29978
29979 @end deftypevr
29980
29981 @deftypevr {@code{cgit-configuration} parameter} string commit-sort
29982 Flag which, when set to @samp{date}, enables strict date ordering in the
29983 commit log, and when set to @samp{topo} enables strict topological
29984 ordering.
29985
29986 Defaults to @samp{"git log"}.
29987
29988 @end deftypevr
29989
29990 @deftypevr {@code{cgit-configuration} parameter} file-object css
29991 URL which specifies the css document to include in all cgit pages.
29992
29993 Defaults to @samp{"/share/cgit/cgit.css"}.
29994
29995 @end deftypevr
29996
29997 @deftypevr {@code{cgit-configuration} parameter} file-object email-filter
29998 Specifies a command which will be invoked to format names and email
29999 address of committers, authors, and taggers, as represented in various
30000 places throughout the cgit interface.
30001
30002 Defaults to @samp{""}.
30003
30004 @end deftypevr
30005
30006 @deftypevr {@code{cgit-configuration} parameter} boolean embedded?
30007 Flag which, when set to @samp{#t}, will make cgit generate a HTML
30008 fragment suitable for embedding in other HTML pages.
30009
30010 Defaults to @samp{#f}.
30011
30012 @end deftypevr
30013
30014 @deftypevr {@code{cgit-configuration} parameter} boolean enable-commit-graph?
30015 Flag which, when set to @samp{#t}, will make cgit print an ASCII-art
30016 commit history graph to the left of the commit messages in the
30017 repository log page.
30018
30019 Defaults to @samp{#f}.
30020
30021 @end deftypevr
30022
30023 @deftypevr {@code{cgit-configuration} parameter} boolean enable-filter-overrides?
30024 Flag which, when set to @samp{#t}, allows all filter settings to be
30025 overridden in repository-specific cgitrc files.
30026
30027 Defaults to @samp{#f}.
30028
30029 @end deftypevr
30030
30031 @deftypevr {@code{cgit-configuration} parameter} boolean enable-follow-links?
30032 Flag which, when set to @samp{#t}, allows users to follow a file in the
30033 log view.
30034
30035 Defaults to @samp{#f}.
30036
30037 @end deftypevr
30038
30039 @deftypevr {@code{cgit-configuration} parameter} boolean enable-http-clone?
30040 If set to @samp{#t}, cgit will act as an dumb HTTP endpoint for Git
30041 clones.
30042
30043 Defaults to @samp{#t}.
30044
30045 @end deftypevr
30046
30047 @deftypevr {@code{cgit-configuration} parameter} boolean enable-index-links?
30048 Flag which, when set to @samp{#t}, will make cgit generate extra links
30049 "summary", "commit", "tree" for each repo in the repository index.
30050
30051 Defaults to @samp{#f}.
30052
30053 @end deftypevr
30054
30055 @deftypevr {@code{cgit-configuration} parameter} boolean enable-index-owner?
30056 Flag which, when set to @samp{#t}, will make cgit display the owner of
30057 each repo in the repository index.
30058
30059 Defaults to @samp{#t}.
30060
30061 @end deftypevr
30062
30063 @deftypevr {@code{cgit-configuration} parameter} boolean enable-log-filecount?
30064 Flag which, when set to @samp{#t}, will make cgit print the number of
30065 modified files for each commit on the repository log page.
30066
30067 Defaults to @samp{#f}.
30068
30069 @end deftypevr
30070
30071 @deftypevr {@code{cgit-configuration} parameter} boolean enable-log-linecount?
30072 Flag which, when set to @samp{#t}, will make cgit print the number of
30073 added and removed lines for each commit on the repository log page.
30074
30075 Defaults to @samp{#f}.
30076
30077 @end deftypevr
30078
30079 @deftypevr {@code{cgit-configuration} parameter} boolean enable-remote-branches?
30080 Flag which, when set to @code{#t}, will make cgit display remote
30081 branches in the summary and refs views.
30082
30083 Defaults to @samp{#f}.
30084
30085 @end deftypevr
30086
30087 @deftypevr {@code{cgit-configuration} parameter} boolean enable-subject-links?
30088 Flag which, when set to @code{1}, will make cgit use the subject of the
30089 parent commit as link text when generating links to parent commits in
30090 commit view.
30091
30092 Defaults to @samp{#f}.
30093
30094 @end deftypevr
30095
30096 @deftypevr {@code{cgit-configuration} parameter} boolean enable-html-serving?
30097 Flag which, when set to @samp{#t}, will make cgit use the subject of the
30098 parent commit as link text when generating links to parent commits in
30099 commit view.
30100
30101 Defaults to @samp{#f}.
30102
30103 @end deftypevr
30104
30105 @deftypevr {@code{cgit-configuration} parameter} boolean enable-tree-linenumbers?
30106 Flag which, when set to @samp{#t}, will make cgit generate linenumber
30107 links for plaintext blobs printed in the tree view.
30108
30109 Defaults to @samp{#t}.
30110
30111 @end deftypevr
30112
30113 @deftypevr {@code{cgit-configuration} parameter} boolean enable-git-config?
30114 Flag which, when set to @samp{#f}, will allow cgit to use Git config to
30115 set any repo specific settings.
30116
30117 Defaults to @samp{#f}.
30118
30119 @end deftypevr
30120
30121 @deftypevr {@code{cgit-configuration} parameter} file-object favicon
30122 URL used as link to a shortcut icon for cgit.
30123
30124 Defaults to @samp{"/favicon.ico"}.
30125
30126 @end deftypevr
30127
30128 @deftypevr {@code{cgit-configuration} parameter} string footer
30129 The content of the file specified with this option will be included
30130 verbatim at the bottom of all pages (i.e.@: it replaces the standard
30131 "generated by..."@: message).
30132
30133 Defaults to @samp{""}.
30134
30135 @end deftypevr
30136
30137 @deftypevr {@code{cgit-configuration} parameter} string head-include
30138 The content of the file specified with this option will be included
30139 verbatim in the HTML HEAD section on all pages.
30140
30141 Defaults to @samp{""}.
30142
30143 @end deftypevr
30144
30145 @deftypevr {@code{cgit-configuration} parameter} string header
30146 The content of the file specified with this option will be included
30147 verbatim at the top of all pages.
30148
30149 Defaults to @samp{""}.
30150
30151 @end deftypevr
30152
30153 @deftypevr {@code{cgit-configuration} parameter} file-object include
30154 Name of a configfile to include before the rest of the current config-
30155 file is parsed.
30156
30157 Defaults to @samp{""}.
30158
30159 @end deftypevr
30160
30161 @deftypevr {@code{cgit-configuration} parameter} string index-header
30162 The content of the file specified with this option will be included
30163 verbatim above the repository index.
30164
30165 Defaults to @samp{""}.
30166
30167 @end deftypevr
30168
30169 @deftypevr {@code{cgit-configuration} parameter} string index-info
30170 The content of the file specified with this option will be included
30171 verbatim below the heading on the repository index page.
30172
30173 Defaults to @samp{""}.
30174
30175 @end deftypevr
30176
30177 @deftypevr {@code{cgit-configuration} parameter} boolean local-time?
30178 Flag which, if set to @samp{#t}, makes cgit print commit and tag times
30179 in the servers timezone.
30180
30181 Defaults to @samp{#f}.
30182
30183 @end deftypevr
30184
30185 @deftypevr {@code{cgit-configuration} parameter} file-object logo
30186 URL which specifies the source of an image which will be used as a logo
30187 on all cgit pages.
30188
30189 Defaults to @samp{"/share/cgit/cgit.png"}.
30190
30191 @end deftypevr
30192
30193 @deftypevr {@code{cgit-configuration} parameter} string logo-link
30194 URL loaded when clicking on the cgit logo image.
30195
30196 Defaults to @samp{""}.
30197
30198 @end deftypevr
30199
30200 @deftypevr {@code{cgit-configuration} parameter} file-object owner-filter
30201 Command which will be invoked to format the Owner column of the main
30202 page.
30203
30204 Defaults to @samp{""}.
30205
30206 @end deftypevr
30207
30208 @deftypevr {@code{cgit-configuration} parameter} integer max-atom-items
30209 Number of items to display in atom feeds view.
30210
30211 Defaults to @samp{10}.
30212
30213 @end deftypevr
30214
30215 @deftypevr {@code{cgit-configuration} parameter} integer max-commit-count
30216 Number of entries to list per page in "log" view.
30217
30218 Defaults to @samp{50}.
30219
30220 @end deftypevr
30221
30222 @deftypevr {@code{cgit-configuration} parameter} integer max-message-length
30223 Number of commit message characters to display in "log" view.
30224
30225 Defaults to @samp{80}.
30226
30227 @end deftypevr
30228
30229 @deftypevr {@code{cgit-configuration} parameter} integer max-repo-count
30230 Specifies the number of entries to list per page on the repository index
30231 page.
30232
30233 Defaults to @samp{50}.
30234
30235 @end deftypevr
30236
30237 @deftypevr {@code{cgit-configuration} parameter} integer max-repodesc-length
30238 Specifies the maximum number of repo description characters to display
30239 on the repository index page.
30240
30241 Defaults to @samp{80}.
30242
30243 @end deftypevr
30244
30245 @deftypevr {@code{cgit-configuration} parameter} integer max-blob-size
30246 Specifies the maximum size of a blob to display HTML for in KBytes.
30247
30248 Defaults to @samp{0}.
30249
30250 @end deftypevr
30251
30252 @deftypevr {@code{cgit-configuration} parameter} string max-stats
30253 Maximum statistics period. Valid values are @samp{week},@samp{month},
30254 @samp{quarter} and @samp{year}.
30255
30256 Defaults to @samp{""}.
30257
30258 @end deftypevr
30259
30260 @deftypevr {@code{cgit-configuration} parameter} mimetype-alist mimetype
30261 Mimetype for the specified filename extension.
30262
30263 Defaults to @samp{((gif "image/gif") (html "text/html") (jpg
30264 "image/jpeg") (jpeg "image/jpeg") (pdf "application/pdf") (png
30265 "image/png") (svg "image/svg+xml"))}.
30266
30267 @end deftypevr
30268
30269 @deftypevr {@code{cgit-configuration} parameter} file-object mimetype-file
30270 Specifies the file to use for automatic mimetype lookup.
30271
30272 Defaults to @samp{""}.
30273
30274 @end deftypevr
30275
30276 @deftypevr {@code{cgit-configuration} parameter} string module-link
30277 Text which will be used as the formatstring for a hyperlink when a
30278 submodule is printed in a directory listing.
30279
30280 Defaults to @samp{""}.
30281
30282 @end deftypevr
30283
30284 @deftypevr {@code{cgit-configuration} parameter} boolean nocache?
30285 If set to the value @samp{#t} caching will be disabled.
30286
30287 Defaults to @samp{#f}.
30288
30289 @end deftypevr
30290
30291 @deftypevr {@code{cgit-configuration} parameter} boolean noplainemail?
30292 If set to @samp{#t} showing full author email addresses will be
30293 disabled.
30294
30295 Defaults to @samp{#f}.
30296
30297 @end deftypevr
30298
30299 @deftypevr {@code{cgit-configuration} parameter} boolean noheader?
30300 Flag which, when set to @samp{#t}, will make cgit omit the standard
30301 header on all pages.
30302
30303 Defaults to @samp{#f}.
30304
30305 @end deftypevr
30306
30307 @deftypevr {@code{cgit-configuration} parameter} project-list project-list
30308 A list of subdirectories inside of @code{repository-directory}, relative
30309 to it, that should loaded as Git repositories. An empty list means that
30310 all subdirectories will be loaded.
30311
30312 Defaults to @samp{()}.
30313
30314 @end deftypevr
30315
30316 @deftypevr {@code{cgit-configuration} parameter} file-object readme
30317 Text which will be used as default value for @code{cgit-repo-readme}.
30318
30319 Defaults to @samp{""}.
30320
30321 @end deftypevr
30322
30323 @deftypevr {@code{cgit-configuration} parameter} boolean remove-suffix?
30324 If set to @code{#t} and @code{repository-directory} is enabled, if any
30325 repositories are found with a suffix of @code{.git}, this suffix will be
30326 removed for the URL and name.
30327
30328 Defaults to @samp{#f}.
30329
30330 @end deftypevr
30331
30332 @deftypevr {@code{cgit-configuration} parameter} integer renamelimit
30333 Maximum number of files to consider when detecting renames.
30334
30335 Defaults to @samp{-1}.
30336
30337 @end deftypevr
30338
30339 @deftypevr {@code{cgit-configuration} parameter} string repository-sort
30340 The way in which repositories in each section are sorted.
30341
30342 Defaults to @samp{""}.
30343
30344 @end deftypevr
30345
30346 @deftypevr {@code{cgit-configuration} parameter} robots-list robots
30347 Text used as content for the @code{robots} meta-tag.
30348
30349 Defaults to @samp{("noindex" "nofollow")}.
30350
30351 @end deftypevr
30352
30353 @deftypevr {@code{cgit-configuration} parameter} string root-desc
30354 Text printed below the heading on the repository index page.
30355
30356 Defaults to @samp{"a fast webinterface for the git dscm"}.
30357
30358 @end deftypevr
30359
30360 @deftypevr {@code{cgit-configuration} parameter} string root-readme
30361 The content of the file specified with this option will be included
30362 verbatim below the ``about'' link on the repository index page.
30363
30364 Defaults to @samp{""}.
30365
30366 @end deftypevr
30367
30368 @deftypevr {@code{cgit-configuration} parameter} string root-title
30369 Text printed as heading on the repository index page.
30370
30371 Defaults to @samp{""}.
30372
30373 @end deftypevr
30374
30375 @deftypevr {@code{cgit-configuration} parameter} boolean scan-hidden-path
30376 If set to @samp{#t} and repository-directory is enabled,
30377 repository-directory will recurse into directories whose name starts
30378 with a period. Otherwise, repository-directory will stay away from such
30379 directories, considered as ``hidden''. Note that this does not apply to
30380 the @file{.git} directory in non-bare repos.
30381
30382 Defaults to @samp{#f}.
30383
30384 @end deftypevr
30385
30386 @deftypevr {@code{cgit-configuration} parameter} list snapshots
30387 Text which specifies the default set of snapshot formats that cgit
30388 generates links for.
30389
30390 Defaults to @samp{()}.
30391
30392 @end deftypevr
30393
30394 @deftypevr {@code{cgit-configuration} parameter} repository-directory repository-directory
30395 Name of the directory to scan for repositories (represents
30396 @code{scan-path}).
30397
30398 Defaults to @samp{"/srv/git"}.
30399
30400 @end deftypevr
30401
30402 @deftypevr {@code{cgit-configuration} parameter} string section
30403 The name of the current repository section - all repositories defined
30404 after this option will inherit the current section name.
30405
30406 Defaults to @samp{""}.
30407
30408 @end deftypevr
30409
30410 @deftypevr {@code{cgit-configuration} parameter} string section-sort
30411 Flag which, when set to @samp{1}, will sort the sections on the
30412 repository listing by name.
30413
30414 Defaults to @samp{""}.
30415
30416 @end deftypevr
30417
30418 @deftypevr {@code{cgit-configuration} parameter} integer section-from-path
30419 A number which, if defined prior to repository-directory, specifies how
30420 many path elements from each repo path to use as a default section name.
30421
30422 Defaults to @samp{0}.
30423
30424 @end deftypevr
30425
30426 @deftypevr {@code{cgit-configuration} parameter} boolean side-by-side-diffs?
30427 If set to @samp{#t} shows side-by-side diffs instead of unidiffs per
30428 default.
30429
30430 Defaults to @samp{#f}.
30431
30432 @end deftypevr
30433
30434 @deftypevr {@code{cgit-configuration} parameter} file-object source-filter
30435 Specifies a command which will be invoked to format plaintext blobs in
30436 the tree view.
30437
30438 Defaults to @samp{""}.
30439
30440 @end deftypevr
30441
30442 @deftypevr {@code{cgit-configuration} parameter} integer summary-branches
30443 Specifies the number of branches to display in the repository ``summary''
30444 view.
30445
30446 Defaults to @samp{10}.
30447
30448 @end deftypevr
30449
30450 @deftypevr {@code{cgit-configuration} parameter} integer summary-log
30451 Specifies the number of log entries to display in the repository
30452 ``summary'' view.
30453
30454 Defaults to @samp{10}.
30455
30456 @end deftypevr
30457
30458 @deftypevr {@code{cgit-configuration} parameter} integer summary-tags
30459 Specifies the number of tags to display in the repository ``summary''
30460 view.
30461
30462 Defaults to @samp{10}.
30463
30464 @end deftypevr
30465
30466 @deftypevr {@code{cgit-configuration} parameter} string strict-export
30467 Filename which, if specified, needs to be present within the repository
30468 for cgit to allow access to that repository.
30469
30470 Defaults to @samp{""}.
30471
30472 @end deftypevr
30473
30474 @deftypevr {@code{cgit-configuration} parameter} string virtual-root
30475 URL which, if specified, will be used as root for all cgit links.
30476
30477 Defaults to @samp{"/"}.
30478
30479 @end deftypevr
30480
30481 @deftypevr {@code{cgit-configuration} parameter} repository-cgit-configuration-list repositories
30482 A list of @dfn{cgit-repo} records to use with config.
30483
30484 Defaults to @samp{()}.
30485
30486 Available @code{repository-cgit-configuration} fields are:
30487
30488 @deftypevr {@code{repository-cgit-configuration} parameter} repo-list snapshots
30489 A mask of snapshot formats for this repo that cgit generates links for,
30490 restricted by the global @code{snapshots} setting.
30491
30492 Defaults to @samp{()}.
30493
30494 @end deftypevr
30495
30496 @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object source-filter
30497 Override the default @code{source-filter}.
30498
30499 Defaults to @samp{""}.
30500
30501 @end deftypevr
30502
30503 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string url
30504 The relative URL used to access the repository.
30505
30506 Defaults to @samp{""}.
30507
30508 @end deftypevr
30509
30510 @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object about-filter
30511 Override the default @code{about-filter}.
30512
30513 Defaults to @samp{""}.
30514
30515 @end deftypevr
30516
30517 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string branch-sort
30518 Flag which, when set to @samp{age}, enables date ordering in the branch
30519 ref list, and when set to @samp{name} enables ordering by branch name.
30520
30521 Defaults to @samp{""}.
30522
30523 @end deftypevr
30524
30525 @deftypevr {@code{repository-cgit-configuration} parameter} repo-list clone-url
30526 A list of URLs which can be used to clone repo.
30527
30528 Defaults to @samp{()}.
30529
30530 @end deftypevr
30531
30532 @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object commit-filter
30533 Override the default @code{commit-filter}.
30534
30535 Defaults to @samp{""}.
30536
30537 @end deftypevr
30538
30539 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string commit-sort
30540 Flag which, when set to @samp{date}, enables strict date ordering in the
30541 commit log, and when set to @samp{topo} enables strict topological
30542 ordering.
30543
30544 Defaults to @samp{""}.
30545
30546 @end deftypevr
30547
30548 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string defbranch
30549 The name of the default branch for this repository. If no such branch
30550 exists in the repository, the first branch name (when sorted) is used as
30551 default instead. By default branch pointed to by HEAD, or ``master'' if
30552 there is no suitable HEAD.
30553
30554 Defaults to @samp{""}.
30555
30556 @end deftypevr
30557
30558 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string desc
30559 The value to show as repository description.
30560
30561 Defaults to @samp{""}.
30562
30563 @end deftypevr
30564
30565 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string homepage
30566 The value to show as repository homepage.
30567
30568 Defaults to @samp{""}.
30569
30570 @end deftypevr
30571
30572 @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object email-filter
30573 Override the default @code{email-filter}.
30574
30575 Defaults to @samp{""}.
30576
30577 @end deftypevr
30578
30579 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-commit-graph?
30580 A flag which can be used to disable the global setting
30581 @code{enable-commit-graph?}.
30582
30583 Defaults to @samp{disabled}.
30584
30585 @end deftypevr
30586
30587 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-log-filecount?
30588 A flag which can be used to disable the global setting
30589 @code{enable-log-filecount?}.
30590
30591 Defaults to @samp{disabled}.
30592
30593 @end deftypevr
30594
30595 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-log-linecount?
30596 A flag which can be used to disable the global setting
30597 @code{enable-log-linecount?}.
30598
30599 Defaults to @samp{disabled}.
30600
30601 @end deftypevr
30602
30603 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-remote-branches?
30604 Flag which, when set to @code{#t}, will make cgit display remote
30605 branches in the summary and refs views.
30606
30607 Defaults to @samp{disabled}.
30608
30609 @end deftypevr
30610
30611 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-subject-links?
30612 A flag which can be used to override the global setting
30613 @code{enable-subject-links?}.
30614
30615 Defaults to @samp{disabled}.
30616
30617 @end deftypevr
30618
30619 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-html-serving?
30620 A flag which can be used to override the global setting
30621 @code{enable-html-serving?}.
30622
30623 Defaults to @samp{disabled}.
30624
30625 @end deftypevr
30626
30627 @deftypevr {@code{repository-cgit-configuration} parameter} repo-boolean hide?
30628 Flag which, when set to @code{#t}, hides the repository from the
30629 repository index.
30630
30631 Defaults to @samp{#f}.
30632
30633 @end deftypevr
30634
30635 @deftypevr {@code{repository-cgit-configuration} parameter} repo-boolean ignore?
30636 Flag which, when set to @samp{#t}, ignores the repository.
30637
30638 Defaults to @samp{#f}.
30639
30640 @end deftypevr
30641
30642 @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object logo
30643 URL which specifies the source of an image which will be used as a logo
30644 on this repo’s pages.
30645
30646 Defaults to @samp{""}.
30647
30648 @end deftypevr
30649
30650 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string logo-link
30651 URL loaded when clicking on the cgit logo image.
30652
30653 Defaults to @samp{""}.
30654
30655 @end deftypevr
30656
30657 @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object owner-filter
30658 Override the default @code{owner-filter}.
30659
30660 Defaults to @samp{""}.
30661
30662 @end deftypevr
30663
30664 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string module-link
30665 Text which will be used as the formatstring for a hyperlink when a
30666 submodule is printed in a directory listing. The arguments for the
30667 formatstring are the path and SHA1 of the submodule commit.
30668
30669 Defaults to @samp{""}.
30670
30671 @end deftypevr
30672
30673 @deftypevr {@code{repository-cgit-configuration} parameter} module-link-path module-link-path
30674 Text which will be used as the formatstring for a hyperlink when a
30675 submodule with the specified subdirectory path is printed in a directory
30676 listing.
30677
30678 Defaults to @samp{()}.
30679
30680 @end deftypevr
30681
30682 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string max-stats
30683 Override the default maximum statistics period.
30684
30685 Defaults to @samp{""}.
30686
30687 @end deftypevr
30688
30689 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string name
30690 The value to show as repository name.
30691
30692 Defaults to @samp{""}.
30693
30694 @end deftypevr
30695
30696 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string owner
30697 A value used to identify the owner of the repository.
30698
30699 Defaults to @samp{""}.
30700
30701 @end deftypevr
30702
30703 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string path
30704 An absolute path to the repository directory.
30705
30706 Defaults to @samp{""}.
30707
30708 @end deftypevr
30709
30710 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string readme
30711 A path (relative to repo) which specifies a file to include verbatim as
30712 the ``About'' page for this repo.
30713
30714 Defaults to @samp{""}.
30715
30716 @end deftypevr
30717
30718 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string section
30719 The name of the current repository section - all repositories defined
30720 after this option will inherit the current section name.
30721
30722 Defaults to @samp{""}.
30723
30724 @end deftypevr
30725
30726 @deftypevr {@code{repository-cgit-configuration} parameter} repo-list extra-options
30727 Extra options will be appended to cgitrc file.
30728
30729 Defaults to @samp{()}.
30730
30731 @end deftypevr
30732
30733 @end deftypevr
30734
30735 @deftypevr {@code{cgit-configuration} parameter} list extra-options
30736 Extra options will be appended to cgitrc file.
30737
30738 Defaults to @samp{()}.
30739
30740 @end deftypevr
30741
30742
30743 @c %end of fragment
30744
30745 However, it could be that you just want to get a @code{cgitrc} up and
30746 running. In that case, you can pass an @code{opaque-cgit-configuration}
30747 as a record to @code{cgit-service-type}. As its name indicates, an
30748 opaque configuration does not have easy reflective capabilities.
30749
30750 Available @code{opaque-cgit-configuration} fields are:
30751
30752 @deftypevr {@code{opaque-cgit-configuration} parameter} package cgit
30753 The cgit package.
30754 @end deftypevr
30755
30756 @deftypevr {@code{opaque-cgit-configuration} parameter} string string
30757 The contents of the @code{cgitrc}, as a string.
30758 @end deftypevr
30759
30760 For example, if your @code{cgitrc} is just the empty string, you
30761 could instantiate a cgit service like this:
30762
30763 @lisp
30764 (service cgit-service-type
30765 (opaque-cgit-configuration
30766 (cgitrc "")))
30767 @end lisp
30768
30769 @subsubheading Gitolite Service
30770
30771 @cindex Gitolite service
30772 @cindex Git, hosting
30773 @uref{https://gitolite.com/gitolite/, Gitolite} is a tool for hosting Git
30774 repositories on a central server.
30775
30776 Gitolite can handle multiple repositories and users, and supports flexible
30777 configuration of the permissions for the users on the repositories.
30778
30779 The following example will configure Gitolite using the default @code{git}
30780 user, and the provided SSH public key.
30781
30782 @lisp
30783 (service gitolite-service-type
30784 (gitolite-configuration
30785 (admin-pubkey (plain-file
30786 "yourname.pub"
30787 "ssh-rsa AAAA... guix@@example.com"))))
30788 @end lisp
30789
30790 Gitolite is configured through a special admin repository which you can clone,
30791 for example, if you setup Gitolite on @code{example.com}, you would run the
30792 following command to clone the admin repository.
30793
30794 @example
30795 git clone git@@example.com:gitolite-admin
30796 @end example
30797
30798 When the Gitolite service is activated, the provided @code{admin-pubkey} will
30799 be inserted in to the @file{keydir} directory in the gitolite-admin
30800 repository. If this results in a change in the repository, it will be
30801 committed using the message ``gitolite setup by GNU Guix''.
30802
30803 @deftp {Data Type} gitolite-configuration
30804 Data type representing the configuration for @code{gitolite-service-type}.
30805
30806 @table @asis
30807 @item @code{package} (default: @var{gitolite})
30808 Gitolite package to use.
30809
30810 @item @code{user} (default: @var{git})
30811 User to use for Gitolite. This will be user that you use when accessing
30812 Gitolite over SSH.
30813
30814 @item @code{group} (default: @var{git})
30815 Group to use for Gitolite.
30816
30817 @item @code{home-directory} (default: @var{"/var/lib/gitolite"})
30818 Directory in which to store the Gitolite configuration and repositories.
30819
30820 @item @code{rc-file} (default: @var{(gitolite-rc-file)})
30821 A ``file-like'' object (@pxref{G-Expressions, file-like objects}),
30822 representing the configuration for Gitolite.
30823
30824 @item @code{admin-pubkey} (default: @var{#f})
30825 A ``file-like'' object (@pxref{G-Expressions, file-like objects}) used to
30826 setup Gitolite. This will be inserted in to the @file{keydir} directory
30827 within the gitolite-admin repository.
30828
30829 To specify the SSH key as a string, use the @code{plain-file} function.
30830
30831 @lisp
30832 (plain-file "yourname.pub" "ssh-rsa AAAA... guix@@example.com")
30833 @end lisp
30834
30835 @end table
30836 @end deftp
30837
30838 @deftp {Data Type} gitolite-rc-file
30839 Data type representing the Gitolite RC file.
30840
30841 @table @asis
30842 @item @code{umask} (default: @code{#o0077})
30843 This controls the permissions Gitolite sets on the repositories and their
30844 contents.
30845
30846 A value like @code{#o0027} will give read access to the group used by Gitolite
30847 (by default: @code{git}). This is necessary when using Gitolite with software
30848 like cgit or gitweb.
30849
30850 @item @code{git-config-keys} (default: @code{""})
30851 Gitolite allows you to set git config values using the @samp{config}
30852 keyword. This setting allows control over the config keys to accept.
30853
30854 @item @code{roles} (default: @code{'(("READERS" . 1) ("WRITERS" . ))})
30855 Set the role names allowed to be used by users running the perms command.
30856
30857 @item @code{enable} (default: @code{'("help" "desc" "info" "perms" "writable" "ssh-authkeys" "git-config" "daemon" "gitweb")})
30858 This setting controls the commands and features to enable within Gitolite.
30859
30860 @end table
30861 @end deftp
30862
30863
30864 @node Game Services
30865 @subsection Game Services
30866
30867 @subsubheading The Battle for Wesnoth Service
30868 @cindex wesnothd
30869 @uref{https://wesnoth.org, The Battle for Wesnoth} is a fantasy, turn
30870 based tactical strategy game, with several single player campaigns, and
30871 multiplayer games (both networked and local).
30872
30873 @defvar {Scheme Variable} wesnothd-service-type
30874 Service type for the wesnothd service. Its value must be a
30875 @code{wesnothd-configuration} object. To run wesnothd in the default
30876 configuration, instantiate it as:
30877
30878 @lisp
30879 (service wesnothd-service-type)
30880 @end lisp
30881 @end defvar
30882
30883 @deftp {Data Type} wesnothd-configuration
30884 Data type representing the configuration of @command{wesnothd}.
30885
30886 @table @asis
30887 @item @code{package} (default: @code{wesnoth-server})
30888 The wesnoth server package to use.
30889
30890 @item @code{port} (default: @code{15000})
30891 The port to bind the server to.
30892 @end table
30893 @end deftp
30894
30895
30896 @node PAM Mount Service
30897 @subsection PAM Mount Service
30898 @cindex pam-mount
30899
30900 The @code{(gnu services pam-mount)} module provides a service allowing
30901 users to mount volumes when they log in. It should be able to mount any
30902 volume format supported by the system.
30903
30904 @defvar {Scheme Variable} pam-mount-service-type
30905 Service type for PAM Mount support.
30906 @end defvar
30907
30908 @deftp {Data Type} pam-mount-configuration
30909 Data type representing the configuration of PAM Mount.
30910
30911 It takes the following parameters:
30912
30913 @table @asis
30914 @item @code{rules}
30915 The configuration rules that will be used to generate
30916 @file{/etc/security/pam_mount.conf.xml}.
30917
30918 The configuration rules are SXML elements (@pxref{SXML,,, guile, GNU
30919 Guile Reference Manual}), and the default ones don't mount anything for
30920 anyone at login:
30921
30922 @lisp
30923 `((debug (@@ (enable "0")))
30924 (mntoptions (@@ (allow ,(string-join
30925 '("nosuid" "nodev" "loop"
30926 "encryption" "fsck" "nonempty"
30927 "allow_root" "allow_other")
30928 ","))))
30929 (mntoptions (@@ (require "nosuid,nodev")))
30930 (logout (@@ (wait "0")
30931 (hup "0")
30932 (term "no")
30933 (kill "no")))
30934 (mkmountpoint (@@ (enable "1")
30935 (remove "true"))))
30936 @end lisp
30937
30938 Some @code{volume} elements must be added to automatically mount volumes
30939 at login. Here's an example allowing the user @code{alice} to mount her
30940 encrypted @env{HOME} directory and allowing the user @code{bob} to mount
30941 the partition where he stores his data:
30942
30943 @lisp
30944 (define pam-mount-rules
30945 `((debug (@@ (enable "0")))
30946 (volume (@@ (user "alice")
30947 (fstype "crypt")
30948 (path "/dev/sda2")
30949 (mountpoint "/home/alice")))
30950 (volume (@@ (user "bob")
30951 (fstype "auto")
30952 (path "/dev/sdb3")
30953 (mountpoint "/home/bob/data")
30954 (options "defaults,autodefrag,compress")))
30955 (mntoptions (@@ (allow ,(string-join
30956 '("nosuid" "nodev" "loop"
30957 "encryption" "fsck" "nonempty"
30958 "allow_root" "allow_other")
30959 ","))))
30960 (mntoptions (@@ (require "nosuid,nodev")))
30961 (logout (@@ (wait "0")
30962 (hup "0")
30963 (term "no")
30964 (kill "no")))
30965 (mkmountpoint (@@ (enable "1")
30966 (remove "true")))))
30967
30968 (service pam-mount-service-type
30969 (pam-mount-configuration
30970 (rules pam-mount-rules)))
30971 @end lisp
30972
30973 The complete list of possible options can be found in the man page for
30974 @uref{http://pam-mount.sourceforge.net/pam_mount.conf.5.html, pam_mount.conf}.
30975 @end table
30976 @end deftp
30977
30978
30979 @node Guix Services
30980 @subsection Guix Services
30981
30982 @subsubheading Guix Build Coordinator
30983 The @uref{https://git.cbaines.net/guix/build-coordinator/,Guix Build
30984 Coordinator} aids in distributing derivation builds among machines
30985 running an @dfn{agent}. The build daemon is still used to build the
30986 derivations, but the Guix Build Coordinator manages allocating builds
30987 and working with the results.
30988
30989 @quotation Note
30990 This service is considered experimental. Configuration options may be
30991 changed in a backwards-incompatible manner, and not all features have
30992 been thorougly tested.
30993 @end quotation
30994
30995 The Guix Build Coordinator consists of one @dfn{coordinator}, and one or
30996 more connected @dfn{agent} processes. The coordinator process handles
30997 clients submitting builds, and allocating builds to agents. The agent
30998 processes talk to a build daemon to actually perform the builds, then
30999 send the results back to the coordinator.
31000
31001 There is a script to run the coordinator component of the Guix Build
31002 Coordinator, but the Guix service uses a custom Guile script instead, to
31003 provide better integration with G-expressions used in the configuration.
31004
31005 @defvar {Scheme Variable} guix-build-coordinator-service-type
31006 Service type for the Guix Build Coordinator. Its value must be a
31007 @code{guix-build-coordinator-configuration} object.
31008 @end defvar
31009
31010 @deftp {Data Type} guix-build-coordinator-configuration
31011 Data type representing the configuration of the Guix Build Coordinator.
31012
31013 @table @asis
31014 @item @code{package} (default: @code{guix-build-coordinator})
31015 The Guix Build Coordinator package to use.
31016
31017 @item @code{user} (default: @code{"guix-build-coordinator"})
31018 The system user to run the service as.
31019
31020 @item @code{group} (default: @code{"guix-build-coordinator"})
31021 The system group to run the service as.
31022
31023 @item @code{database-uri-string} (default: @code{"sqlite:///var/lib/guix-build-coordinator/guix_build_coordinator.db"})
31024 The URI to use for the database.
31025
31026 @item @code{agent-communication-uri} (default: @code{"http://0.0.0.0:8745"})
31027 The URI describing how to listen to requests from agent processes.
31028
31029 @item @code{client-communication-uri} (default: @code{"http://127.0.0.1:8746"})
31030 The URI describing how to listen to requests from clients. The client
31031 API allows submitting builds and currently isn't authenticated, so take
31032 care when configuring this value.
31033
31034 @item @code{allocation-strategy} (default: @code{#~basic-build-allocation-strategy})
31035 A G-expression for the allocation strategy to be used. This is a
31036 procedure that takes the datastore as an argument and populates the
31037 allocation plan in the database.
31038
31039 @item @code{hooks} (default: @var{'()})
31040 An association list of hooks. These provide a way to execute arbitrary
31041 code upon certain events, like a build result being processed.
31042
31043 @item @code{guile} (default: @code{guile-3.0-latest})
31044 The Guile package with which to run the Guix Build Coordinator.
31045
31046 @end table
31047 @end deftp
31048
31049 @defvar {Scheme Variable} guix-build-coordinator-agent-service-type
31050 Service type for a Guix Build Coordinator agent. Its value must be a
31051 @code{guix-build-coordinator-agent-configuration} object.
31052 @end defvar
31053
31054 @deftp {Data Type} guix-build-coordinator-agent-configuration
31055 Data type representing the configuration a Guix Build Coordinator agent.
31056
31057 @table @asis
31058 @item @code{package} (default: @code{guix-build-coordinator})
31059 The Guix Build Coordinator package to use.
31060
31061 @item @code{user} (default: @code{"guix-build-coordinator-agent"})
31062 The system user to run the service as.
31063
31064 @item @code{coordinator} (default: @code{"http://localhost:8745"})
31065 The URI to use when connecting to the coordinator.
31066
31067 @item @code{authentication}
31068 Record describing how this agent should authenticate with the
31069 coordinator. Possible record types are described below.
31070
31071 @item @code{systems} (default: @code{#f})
31072 The systems for which this agent should fetch builds. The agent process
31073 will use the current system it's running on as the default.
31074
31075 @item @code{max-parallel-builds} (default: @code{1})
31076 The number of builds to perform in parallel.
31077
31078 @item @code{derivation-substitute-urls} (default: @code{#f})
31079 URLs from which to attempt to fetch substitutes for derivations, if the
31080 derivations aren't already available.
31081
31082 @item @code{non-derivation-substitute-urls} (default: @code{#f})
31083 URLs from which to attempt to fetch substitutes for build inputs, if the
31084 input store items aren't already available.
31085
31086 @end table
31087 @end deftp
31088
31089 @deftp {Data Type} guix-build-coordinator-agent-password-auth
31090 Data type representing an agent authenticating with a coordinator via a
31091 UUID and password.
31092
31093 @table @asis
31094 @item @code{uuid}
31095 The UUID of the agent. This should be generated by the coordinator
31096 process, stored in the coordinator database, and used by the intended
31097 agent.
31098
31099 @item @code{password}
31100 The password to use when connecting to the coordinator.
31101
31102 @end table
31103 @end deftp
31104
31105 @deftp {Data Type} guix-build-coordinator-agent-password-file-auth
31106 Data type representing an agent authenticating with a coordinator via a
31107 UUID and password read from a file.
31108
31109 @table @asis
31110 @item @code{uuid}
31111 The UUID of the agent. This should be generated by the coordinator
31112 process, stored in the coordinator database, and used by the intended
31113 agent.
31114
31115 @item @code{password-file}
31116 A file containing the password to use when connecting to the
31117 coordinator.
31118
31119 @end table
31120 @end deftp
31121
31122 @deftp {Data Type} guix-build-coordinator-agent-dynamic-auth
31123 Data type representing an agent authenticating with a coordinator via a
31124 dynamic auth token and agent name.
31125
31126 @table @asis
31127 @item @code{agent-name}
31128 Name of an agent, this is used to match up to an existing entry in the
31129 database if there is one. When no existing entry is found, a new entry
31130 is automatically added.
31131
31132 @item @code{token}
31133 Dynamic auth token, this is created and stored in the coordinator
31134 database, and is used by the agent to authenticate.
31135
31136 @end table
31137 @end deftp
31138
31139 @deftp {Data Type} guix-build-coordinator-agent-dynamic-auth-with-file
31140 Data type representing an agent authenticating with a coordinator via a
31141 dynamic auth token read from a file and agent name.
31142
31143 @table @asis
31144 @item @code{agent-name}
31145 Name of an agent, this is used to match up to an existing entry in the
31146 database if there is one. When no existing entry is found, a new entry
31147 is automatically added.
31148
31149 @item @code{token-file}
31150 File containing the dynamic auth token, this is created and stored in
31151 the coordinator database, and is used by the agent to authenticate.
31152
31153 @end table
31154 @end deftp
31155
31156 The Guix Build Coordinator package contains a script to query an
31157 instance of the Guix Data Service for derivations to build, and then
31158 submit builds for those derivations to the coordinator. The service
31159 type below assists in running this script. This is an additional tool
31160 that may be useful when building derivations contained within an
31161 instance of the Guix Data Service.
31162
31163 @defvar {Scheme Variable} guix-build-coordinator-queue-builds-service-type
31164 Service type for the
31165 guix-build-coordinator-queue-builds-from-guix-data-service script. Its
31166 value must be a @code{guix-build-coordinator-queue-builds-configuration}
31167 object.
31168 @end defvar
31169
31170 @deftp {Data Type} guix-build-coordinator-queue-builds-configuration
31171 Data type representing the options to the queue builds from guix data
31172 service script.
31173
31174 @table @asis
31175 @item @code{package} (default: @code{guix-build-coordinator})
31176 The Guix Build Coordinator package to use.
31177
31178 @item @code{user} (default: @code{"guix-build-coordinator-queue-builds"})
31179 The system user to run the service as.
31180
31181 @item @code{coordinator} (default: @code{"http://localhost:8745"})
31182 The URI to use when connecting to the coordinator.
31183
31184 @item @code{systems} (default: @code{#f})
31185 The systems for which to fetch derivations to build.
31186
31187 @item @code{systems-and-targets} (default: @code{#f})
31188 An association list of system and target pairs for which to fetch
31189 derivations to build.
31190
31191 @item @code{guix-data-service} (default: @code{"https://data.guix.gnu.org"})
31192 The Guix Data Service instance from which to query to find out about
31193 derivations to build.
31194
31195 @item @code{processed-commits-file} (default: @code{"/var/cache/guix-build-coordinator-queue-builds/processed-commits"})
31196 A file to record which commits have been processed, to avoid needlessly
31197 processing them again if the service is restarted.
31198
31199 @end table
31200 @end deftp
31201
31202 @subsubheading Guix Data Service
31203 The @uref{http://data.guix.gnu.org,Guix Data Service} processes, stores
31204 and provides data about GNU Guix. This includes information about
31205 packages, derivations and lint warnings.
31206
31207 The data is stored in a PostgreSQL database, and available through a web
31208 interface.
31209
31210 @defvar {Scheme Variable} guix-data-service-type
31211 Service type for the Guix Data Service. Its value must be a
31212 @code{guix-data-service-configuration} object. The service optionally
31213 extends the getmail service, as the guix-commits mailing list is used to
31214 find out about changes in the Guix git repository.
31215 @end defvar
31216
31217 @deftp {Data Type} guix-data-service-configuration
31218 Data type representing the configuration of the Guix Data Service.
31219
31220 @table @asis
31221 @item @code{package} (default: @code{guix-data-service})
31222 The Guix Data Service package to use.
31223
31224 @item @code{user} (default: @code{"guix-data-service"})
31225 The system user to run the service as.
31226
31227 @item @code{group} (default: @code{"guix-data-service"})
31228 The system group to run the service as.
31229
31230 @item @code{port} (default: @code{8765})
31231 The port to bind the web service to.
31232
31233 @item @code{host} (default: @code{"127.0.0.1"})
31234 The host to bind the web service to.
31235
31236 @item @code{getmail-idle-mailboxes} (default: @code{#f})
31237 If set, this is the list of mailboxes that the getmail service will be
31238 configured to listen to.
31239
31240 @item @code{commits-getmail-retriever-configuration} (default: @code{#f})
31241 If set, this is the @code{getmail-retriever-configuration} object with
31242 which to configure getmail to fetch mail from the guix-commits mailing
31243 list.
31244
31245 @item @code{extra-options} (default: @var{'()})
31246 Extra command line options for @code{guix-data-service}.
31247
31248 @item @code{extra-process-jobs-options} (default: @var{'()})
31249 Extra command line options for @code{guix-data-service-process-jobs}.
31250
31251 @end table
31252 @end deftp
31253
31254 @node Linux Services
31255 @subsection Linux Services
31256
31257 @cindex oom
31258 @cindex out of memory killer
31259 @cindex earlyoom
31260 @cindex early out of memory daemon
31261 @subsubheading Early OOM Service
31262
31263 @uref{https://github.com/rfjakob/earlyoom,Early OOM}, also known as
31264 Earlyoom, is a minimalist out of memory (OOM) daemon that runs in user
31265 space and provides a more responsive and configurable alternative to the
31266 in-kernel OOM killer. It is useful to prevent the system from becoming
31267 unresponsive when it runs out of memory.
31268
31269 @deffn {Scheme Variable} earlyoom-service-type
31270 The service type for running @command{earlyoom}, the Early OOM daemon.
31271 Its value must be a @code{earlyoom-configuration} object, described
31272 below. The service can be instantiated in its default configuration
31273 with:
31274
31275 @lisp
31276 (service earlyoom-service-type)
31277 @end lisp
31278 @end deffn
31279
31280 @deftp {Data Type} earlyoom-configuration
31281 This is the configuration record for the @code{earlyoom-service-type}.
31282
31283 @table @asis
31284 @item @code{earlyoom} (default: @var{earlyoom})
31285 The Earlyoom package to use.
31286
31287 @item @code{minimum-available-memory} (default: @code{10})
31288 The threshold for the minimum @emph{available} memory, in percentages.
31289
31290 @item @code{minimum-free-swap} (default: @code{10})
31291 The threshold for the minimum free swap memory, in percentages.
31292
31293 @item @code{prefer-regexp} (default: @code{#f})
31294 A regular expression (as a string) to match the names of the processes
31295 that should be preferably killed.
31296
31297 @item @code{avoid-regexp} (default: @code{#f})
31298 A regular expression (as a string) to match the names of the processes
31299 that should @emph{not} be killed.
31300
31301 @item @code{memory-report-interval} (default: @code{0})
31302 The interval in seconds at which a memory report is printed. It is
31303 disabled by default.
31304
31305 @item @code{ignore-positive-oom-score-adj?} (default: @code{#f})
31306 A boolean indicating whether the positive adjustments set in
31307 @file{/proc/*/oom_score_adj} should be ignored.
31308
31309 @item @code{show-debug-messages?} (default: @code{#f})
31310 A boolean indicating whether debug messages should be printed. The logs
31311 are saved at @file{/var/log/earlyoom.log}.
31312
31313 @item @code{send-notification-command} (default: @code{#f})
31314 This can be used to provide a custom command used for sending
31315 notifications.
31316 @end table
31317 @end deftp
31318
31319 @cindex modprobe
31320 @cindex kernel module loader
31321 @subsubheading Kernel Module Loader Service
31322
31323 The kernel module loader service allows one to load loadable kernel
31324 modules at boot. This is especially useful for modules that don't
31325 autoload and need to be manually loaded, as it's the case with
31326 @code{ddcci}.
31327
31328 @deffn {Scheme Variable} kernel-module-loader-service-type
31329 The service type for loading loadable kernel modules at boot with
31330 @command{modprobe}. Its value must be a list of strings representing
31331 module names. For example loading the drivers provided by
31332 @code{ddcci-driver-linux}, in debugging mode by passing some module
31333 parameters, can be done as follow:
31334
31335 @lisp
31336 (use-modules (gnu) (gnu services))
31337 (use-package-modules linux)
31338 (use-service-modules linux)
31339
31340 (define ddcci-config
31341 (plain-file "ddcci.conf"
31342 "options ddcci dyndbg delay=120"))
31343
31344 (operating-system
31345 ...
31346 (services (cons* (service kernel-module-loader-service-type
31347 '("ddcci" "ddcci_backlight"))
31348 (simple-service 'ddcci-config etc-service-type
31349 (list `("modprobe.d/ddcci.conf"
31350 ,ddcci-config)))
31351 %base-services))
31352 (kernel-loadable-modules (list ddcci-driver-linux)))
31353 @end lisp
31354 @end deffn
31355
31356 @cindex zram
31357 @cindex compressed swap
31358 @cindex Compressed RAM-based block devices
31359 @subsubheading Zram Device Service
31360
31361 The Zram device service provides a compressed swap device in system
31362 memory. The Linux Kernel documentation has more information about
31363 @uref{https://www.kernel.org/doc/html/latest/admin-guide/blockdev/zram.html,zram}
31364 devices.
31365
31366 @deffn {Scheme Variable} zram-device-service-type
31367 This service creates the zram block device, formats it as swap and
31368 enables it as a swap device. The service's value is a
31369 @code{zram-device-configuration} record.
31370
31371 @deftp {Data Type} zram-device-configuration
31372 This is the data type representing the configuration for the zram-device
31373 service.
31374
31375 @table @asis
31376 @item @code{size} (default @code{"1G"})
31377 This is the amount of space you wish to provide for the zram device. It
31378 accepts a string and can be a number of bytes or use a suffix, eg.:
31379 @code{"512M"} or @code{1024000}.
31380 @item @code{compression-algorithm} (default @code{'lzo})
31381 This is the compression algorithm you wish to use. It is difficult to
31382 list all the possible compression options, but common ones supported by
31383 Guix's Linux Libre Kernel include @code{'lzo}, @code{'lz4} and @code{'zstd}.
31384 @item @code{memory-limit} (default @code{0})
31385 This is the maximum amount of memory which the zram device can use.
31386 Setting it to '0' disables the limit. While it is generally expected
31387 that compression will be 2:1, it is possible that uncompressable data
31388 can be written to swap and this is a method to limit how much memory can
31389 be used. It accepts a string and can be a number of bytes or use a
31390 suffix, eg.: @code{"2G"}.
31391 @item @code{priority} (default @code{-1})
31392 This is the priority of the swap device created from the zram device.
31393 @code{swapon} accepts values between -1 and 32767, with higher values
31394 indicating higher priority. Higher priority swap will generally be used
31395 first.
31396 @end table
31397
31398 @end deftp
31399 @end deffn
31400
31401 @node Hurd Services
31402 @subsection Hurd Services
31403
31404 @defvr {Scheme Variable} hurd-console-service-type
31405 This service starts the fancy @code{VGA} console client on the Hurd.
31406
31407 The service's value is a @code{hurd-console-configuration} record.
31408 @end defvr
31409
31410 @deftp {Data Type} hurd-console-configuration
31411 This is the data type representing the configuration for the
31412 hurd-console-service.
31413
31414 @table @asis
31415 @item @code{hurd} (default: @var{hurd})
31416 The Hurd package to use.
31417 @end table
31418 @end deftp
31419
31420 @defvr {Scheme Variable} hurd-getty-service-type
31421 This service starts a tty using the Hurd @code{getty} program.
31422
31423 The service's value is a @code{hurd-getty-configuration} record.
31424 @end defvr
31425
31426 @deftp {Data Type} hurd-getty-configuration
31427 This is the data type representing the configuration for the
31428 hurd-getty-service.
31429
31430 @table @asis
31431 @item @code{hurd} (default: @var{hurd})
31432 The Hurd package to use.
31433
31434 @item @code{tty}
31435 The name of the console this Getty runs on---e.g., @code{"tty1"}.
31436
31437 @item @code{baud-rate} (default: @code{38400})
31438 An integer specifying the baud rate of the tty.
31439
31440 @end table
31441 @end deftp
31442
31443 @node Miscellaneous Services
31444 @subsection Miscellaneous Services
31445
31446 @cindex fingerprint
31447 @subsubheading Fingerprint Service
31448
31449 The @code{(gnu services authentication)} module provides a DBus service to
31450 read and identify fingerprints via a fingerprint sensor.
31451
31452 @defvr {Scheme Variable} fprintd-service-type
31453 The service type for @command{fprintd}, which provides the fingerprint
31454 reading capability.
31455
31456 @lisp
31457 (service fprintd-service-type)
31458 @end lisp
31459 @end defvr
31460
31461 @cindex sysctl
31462 @subsubheading System Control Service
31463
31464 The @code{(gnu services sysctl)} provides a service to configure kernel
31465 parameters at boot.
31466
31467 @defvr {Scheme Variable} sysctl-service-type
31468 The service type for @command{sysctl}, which modifies kernel parameters
31469 under @file{/proc/sys/}. To enable IPv4 forwarding, it can be
31470 instantiated as:
31471
31472 @lisp
31473 (service sysctl-service-type
31474 (sysctl-configuration
31475 (settings '(("net.ipv4.ip_forward" . "1")))))
31476 @end lisp
31477
31478 Since @code{sysctl-service-type} is used in the default lists of
31479 services, @code{%base-services} and @code{%desktop-services}, you can
31480 use @code{modify-services} to change its configuration and add the
31481 kernel parameters that you want (@pxref{Service Reference,
31482 @code{modify-services}}).
31483
31484 @lisp
31485 (modify-services %base-services
31486 (sysctl-service-type config =>
31487 (sysctl-configuration
31488 (settings (append '(("net.ipv4.ip_forward" . "1"))
31489 %default-sysctl-settings)))))
31490 @end lisp
31491
31492 @end defvr
31493
31494 @deftp {Data Type} sysctl-configuration
31495 The data type representing the configuration of @command{sysctl}.
31496
31497 @table @asis
31498 @item @code{sysctl} (default: @code{(file-append procps "/sbin/sysctl"})
31499 The @command{sysctl} executable to use.
31500
31501 @item @code{settings} (default: @code{%default-sysctl-settings})
31502 An association list specifies kernel parameters and their values.
31503 @end table
31504 @end deftp
31505
31506 @defvr {Scheme Variable} %default-sysctl-settings
31507 An association list specifying the default @command{sysctl} parameters
31508 on Guix System.
31509 @end defvr
31510
31511 @cindex pcscd
31512 @subsubheading PC/SC Smart Card Daemon Service
31513
31514 The @code{(gnu services security-token)} module provides the following service
31515 to run @command{pcscd}, the PC/SC Smart Card Daemon. @command{pcscd} is the
31516 daemon program for pcsc-lite and the MuscleCard framework. It is a resource
31517 manager that coordinates communications with smart card readers, smart cards
31518 and cryptographic tokens that are connected to the system.
31519
31520 @defvr {Scheme Variable} pcscd-service-type
31521 Service type for the @command{pcscd} service. Its value must be a
31522 @code{pcscd-configuration} object. To run pcscd in the default
31523 configuration, instantiate it as:
31524
31525 @lisp
31526 (service pcscd-service-type)
31527 @end lisp
31528 @end defvr
31529
31530 @deftp {Data Type} pcscd-configuration
31531 The data type representing the configuration of @command{pcscd}.
31532
31533 @table @asis
31534 @item @code{pcsc-lite} (default: @code{pcsc-lite})
31535 The pcsc-lite package that provides pcscd.
31536 @item @code{usb-drivers} (default: @code{(list ccid)})
31537 List of packages that provide USB drivers to pcscd. Drivers are expected to be
31538 under @file{pcsc/drivers} in the store directory of the package.
31539 @end table
31540 @end deftp
31541
31542 @cindex lirc
31543 @subsubheading Lirc Service
31544
31545 The @code{(gnu services lirc)} module provides the following service.
31546
31547 @deffn {Scheme Procedure} lirc-service [#:lirc lirc] @
31548 [#:device #f] [#:driver #f] [#:config-file #f] @
31549 [#:extra-options '()]
31550 Return a service that runs @url{http://www.lirc.org,LIRC}, a daemon that
31551 decodes infrared signals from remote controls.
31552
31553 Optionally, @var{device}, @var{driver} and @var{config-file}
31554 (configuration file name) may be specified. See @command{lircd} manual
31555 for details.
31556
31557 Finally, @var{extra-options} is a list of additional command-line options
31558 passed to @command{lircd}.
31559 @end deffn
31560
31561 @cindex spice
31562 @subsubheading Spice Service
31563
31564 The @code{(gnu services spice)} module provides the following service.
31565
31566 @deffn {Scheme Procedure} spice-vdagent-service [#:spice-vdagent]
31567 Returns a service that runs @url{https://www.spice-space.org,VDAGENT}, a daemon
31568 that enables sharing the clipboard with a vm and setting the guest display
31569 resolution when the graphical console window resizes.
31570 @end deffn
31571
31572 @cindex inputattach
31573 @subsubheading inputattach Service
31574
31575 @cindex tablet input, for Xorg
31576 @cindex touchscreen input, for Xorg
31577 The @uref{https://linuxwacom.github.io/, inputattach} service allows you to
31578 use input devices such as Wacom tablets, touchscreens, or joysticks with the
31579 Xorg display server.
31580
31581 @deffn {Scheme Variable} inputattach-service-type
31582 Type of a service that runs @command{inputattach} on a device and
31583 dispatches events from it.
31584 @end deffn
31585
31586 @deftp {Data Type} inputattach-configuration
31587 @table @asis
31588 @item @code{device-type} (default: @code{"wacom"})
31589 The type of device to connect to. Run @command{inputattach --help}, from the
31590 @code{inputattach} package, to see the list of supported device types.
31591
31592 @item @code{device} (default: @code{"/dev/ttyS0"})
31593 The device file to connect to the device.
31594
31595 @item @code{baud-rate} (default: @code{#f})
31596 Baud rate to use for the serial connection.
31597 Should be a number or @code{#f}.
31598
31599 @item @code{log-file} (default: @code{#f})
31600 If true, this must be the name of a file to log messages to.
31601 @end table
31602 @end deftp
31603
31604 @subsubheading Dictionary Service
31605 @cindex dictionary
31606 The @code{(gnu services dict)} module provides the following service:
31607
31608 @defvr {Scheme Variable} dicod-service-type
31609 This is the type of the service that runs the @command{dicod} daemon, an
31610 implementation of DICT server (@pxref{Dicod,,, dico, GNU Dico Manual}).
31611 @end defvr
31612
31613 @deffn {Scheme Procedure} dicod-service [#:config (dicod-configuration)]
31614 Return a service that runs the @command{dicod} daemon, an implementation
31615 of DICT server (@pxref{Dicod,,, dico, GNU Dico Manual}).
31616
31617 The optional @var{config} argument specifies the configuration for
31618 @command{dicod}, which should be a @code{<dicod-configuration>} object, by
31619 default it serves the GNU Collaborative International Dictionary of English.
31620
31621 You can add @command{open localhost} to your @file{~/.dico} file to make
31622 @code{localhost} the default server for @command{dico} client
31623 (@pxref{Initialization File,,, dico, GNU Dico Manual}).
31624 @end deffn
31625
31626 @deftp {Data Type} dicod-configuration
31627 Data type representing the configuration of dicod.
31628
31629 @table @asis
31630 @item @code{dico} (default: @var{dico})
31631 Package object of the GNU Dico dictionary server.
31632
31633 @item @code{interfaces} (default: @var{'("localhost")})
31634 This is the list of IP addresses and ports and possibly socket file
31635 names to listen to (@pxref{Server Settings, @code{listen} directive,,
31636 dico, GNU Dico Manual}).
31637
31638 @item @code{handlers} (default: @var{'()})
31639 List of @code{<dicod-handler>} objects denoting handlers (module instances).
31640
31641 @item @code{databases} (default: @var{(list %dicod-database:gcide)})
31642 List of @code{<dicod-database>} objects denoting dictionaries to be served.
31643 @end table
31644 @end deftp
31645
31646 @deftp {Data Type} dicod-handler
31647 Data type representing a dictionary handler (module instance).
31648
31649 @table @asis
31650 @item @code{name}
31651 Name of the handler (module instance).
31652
31653 @item @code{module} (default: @var{#f})
31654 Name of the dicod module of the handler (instance). If it is @code{#f},
31655 the module has the same name as the handler.
31656 (@pxref{Modules,,, dico, GNU Dico Manual}).
31657
31658 @item @code{options}
31659 List of strings or gexps representing the arguments for the module handler
31660 @end table
31661 @end deftp
31662
31663 @deftp {Data Type} dicod-database
31664 Data type representing a dictionary database.
31665
31666 @table @asis
31667 @item @code{name}
31668 Name of the database, will be used in DICT commands.
31669
31670 @item @code{handler}
31671 Name of the dicod handler (module instance) used by this database
31672 (@pxref{Handlers,,, dico, GNU Dico Manual}).
31673
31674 @item @code{complex?} (default: @var{#f})
31675 Whether the database configuration complex. The complex configuration
31676 will need a corresponding @code{<dicod-handler>} object, otherwise not.
31677
31678 @item @code{options}
31679 List of strings or gexps representing the arguments for the database
31680 (@pxref{Databases,,, dico, GNU Dico Manual}).
31681 @end table
31682 @end deftp
31683
31684 @defvr {Scheme Variable} %dicod-database:gcide
31685 A @code{<dicod-database>} object serving the GNU Collaborative International
31686 Dictionary of English using the @code{gcide} package.
31687 @end defvr
31688
31689 The following is an example @code{dicod-service} configuration.
31690
31691 @lisp
31692 (dicod-service #:config
31693 (dicod-configuration
31694 (handlers (list (dicod-handler
31695 (name "wordnet")
31696 (module "dictorg")
31697 (options
31698 (list #~(string-append "dbdir=" #$wordnet))))))
31699 (databases (list (dicod-database
31700 (name "wordnet")
31701 (complex? #t)
31702 (handler "wordnet")
31703 (options '("database=wn")))
31704 %dicod-database:gcide))))
31705 @end lisp
31706
31707 @cindex Docker
31708 @subsubheading Docker Service
31709
31710 The @code{(gnu services docker)} module provides the following services.
31711
31712 @defvr {Scheme Variable} docker-service-type
31713
31714 This is the type of the service that runs @url{https://www.docker.com,Docker},
31715 a daemon that can execute application bundles (sometimes referred to as
31716 ``containers'') in isolated environments.
31717
31718 @end defvr
31719
31720 @deftp {Data Type} docker-configuration
31721 This is the data type representing the configuration of Docker and Containerd.
31722
31723 @table @asis
31724
31725 @item @code{package} (default: @code{docker})
31726 The Docker daemon package to use.
31727
31728 @item @code{package} (default: @code{docker-cli})
31729 The Docker client package to use.
31730
31731 @item @code{containerd} (default: @var{containerd})
31732 The Containerd package to use.
31733
31734 @item @code{proxy} (default @var{docker-libnetwork-cmd-proxy})
31735 The Docker user-land networking proxy package to use.
31736
31737 @item @code{enable-proxy?} (default @code{#t})
31738 Enable or disable the use of the Docker user-land networking proxy.
31739
31740 @item @code{debug?} (default @code{#f})
31741 Enable or disable debug output.
31742
31743 @item @code{enable-iptables?} (default @code{#t})
31744 Enable or disable the addition of iptables rules.
31745
31746 @end table
31747 @end deftp
31748
31749 @cindex Singularity, container service
31750 @defvr {Scheme Variable} singularity-service-type
31751 This is the type of the service that allows you to run
31752 @url{https://www.sylabs.io/singularity/, Singularity}, a Docker-style tool to
31753 create and run application bundles (aka. ``containers''). The value for this
31754 service is the Singularity package to use.
31755
31756 The service does not install a daemon; instead, it installs helper programs as
31757 setuid-root (@pxref{Setuid Programs}) such that unprivileged users can invoke
31758 @command{singularity run} and similar commands.
31759 @end defvr
31760
31761 @cindex Audit
31762 @subsubheading Auditd Service
31763
31764 The @code{(gnu services auditd)} module provides the following service.
31765
31766 @defvr {Scheme Variable} auditd-service-type
31767
31768 This is the type of the service that runs
31769 @url{https://people.redhat.com/sgrubb/audit/,auditd},
31770 a daemon that tracks security-relevant information on your system.
31771
31772 Examples of things that can be tracked:
31773
31774 @enumerate
31775 @item
31776 File accesses
31777 @item
31778 System calls
31779 @item
31780 Invoked commands
31781 @item
31782 Failed login attempts
31783 @item
31784 Firewall filtering
31785 @item
31786 Network access
31787 @end enumerate
31788
31789 @command{auditctl} from the @code{audit} package can be used in order
31790 to add or remove events to be tracked (until the next reboot).
31791 In order to permanently track events, put the command line arguments
31792 of auditctl into a file called @code{audit.rules} in the configuration
31793 directory (see below).
31794 @command{aureport} from the @code{audit} package can be used in order
31795 to view a report of all recorded events.
31796 The audit daemon by default logs into the file
31797 @file{/var/log/audit.log}.
31798
31799 @end defvr
31800
31801 @deftp {Data Type} auditd-configuration
31802 This is the data type representing the configuration of auditd.
31803
31804 @table @asis
31805
31806 @item @code{audit} (default: @code{audit})
31807 The audit package to use.
31808
31809 @item @code{configuration-directory} (default: @code{%default-auditd-configuration-directory})
31810 The directory containing the configuration file for the audit package, which
31811 must be named @code{auditd.conf}, and optionally some audit rules to
31812 instantiate on startup.
31813
31814 @end table
31815 @end deftp
31816
31817 @cindex rshiny
31818 @subsubheading R-Shiny service
31819
31820 The @code{(gnu services science)} module provides the following service.
31821
31822 @defvr {Scheme Variable} rshiny-service-type
31823
31824 This is a type of service which is used to run a webapp created with
31825 @code{r-shiny}. This service sets the @env{R_LIBS_USER} environment
31826 variable and runs the provided script to call @code{runApp}.
31827
31828 @deftp {Data Type} rshiny-configuration
31829 This is the data type representing the configuration of rshiny.
31830
31831 @table @asis
31832
31833 @item @code{package} (default: @code{r-shiny})
31834 The package to use.
31835
31836 @item @code{binary} (defaunlt @code{"rshiny"})
31837 The name of the binary or shell script located at @code{package/bin/} to
31838 run when the service is run.
31839
31840 The common way to create this file is as follows:
31841
31842 @lisp
31843 @dots{}
31844 (let* ((out (assoc-ref %outputs "out"))
31845 (targetdir (string-append out "/share/" ,name))
31846 (app (string-append out "/bin/" ,name))
31847 (Rbin (string-append (assoc-ref %build-inputs "r-min")
31848 "/bin/Rscript")))
31849 ;; @dots{}
31850 (mkdir-p (string-append out "/bin"))
31851 (call-with-output-file app
31852 (lambda (port)
31853 (format port
31854 "#!~a
31855 library(shiny)
31856 setwd(\"~a\")
31857 runApp(launch.browser=0, port=4202)~%\n"
31858 Rbin targetdir))))
31859 @end lisp
31860
31861 @end table
31862 @end deftp
31863 @end defvr
31864
31865 @cindex Nix
31866 @subsubheading Nix service
31867
31868 The @code{(gnu services nix)} module provides the following service.
31869
31870 @defvr {Scheme Variable} nix-service-type
31871
31872 This is the type of the service that runs build daemon of the
31873 @url{https://nixos.org/nix/, Nix} package manager. Here is an example showing
31874 how to use it:
31875
31876 @lisp
31877 (use-modules (gnu))
31878 (use-service-modules nix)
31879 (use-package-modules package-management)
31880
31881 (operating-system
31882 ;; @dots{}
31883 (packages (append (list nix)
31884 %base-packages))
31885
31886 (services (append (list (service nix-service-type))
31887 %base-services)))
31888 @end lisp
31889
31890 After @command{guix system reconfigure} configure Nix for your user:
31891
31892 @itemize
31893 @item Add a Nix channel and update it. See
31894 @url{https://nixos.org/nix/manual/, Nix Package Manager Guide}.
31895
31896 @item Create a symlink to your profile and activate Nix profile:
31897 @end itemize
31898
31899 @example
31900 $ ln -s "/nix/var/nix/profiles/per-user/$USER/profile" ~/.nix-profile
31901 $ source /run/current-system/profile/etc/profile.d/nix.sh
31902 @end example
31903
31904 @end defvr
31905
31906 @deftp {Data Type} nix-configuration
31907 This data type represents the configuration of the Nix daemon.
31908
31909 @table @asis
31910 @item @code{nix} (default: @code{nix})
31911 The Nix package to use.
31912
31913 @item @code{sandbox} (default: @code{#t})
31914 Specifies whether builds are sandboxed by default.
31915
31916 @item @code{build-sandbox-items} (default: @code{'()})
31917 This is a list of strings or objects appended to the
31918 @code{build-sandbox-items} field of the configuration file.
31919
31920 @item @code{extra-config} (default: @code{'()})
31921 This is a list of strings or objects appended to the configuration file.
31922 It is used to pass extra text to be added verbatim to the configuration
31923 file.
31924
31925 @item @code{extra-options} (default: @code{'()})
31926 Extra command line options for @code{nix-service-type}.
31927 @end table
31928 @end deftp
31929
31930 @node Setuid Programs
31931 @section Setuid Programs
31932
31933 @cindex setuid programs
31934 Some programs need to run with ``root'' privileges, even when they are
31935 launched by unprivileged users. A notorious example is the
31936 @command{passwd} program, which users can run to change their
31937 password, and which needs to access the @file{/etc/passwd} and
31938 @file{/etc/shadow} files---something normally restricted to root, for
31939 obvious security reasons. To address that, these executables are
31940 @dfn{setuid-root}, meaning that they always run with root privileges
31941 (@pxref{How Change Persona,,, libc, The GNU C Library Reference Manual},
31942 for more info about the setuid mechanism).
31943
31944 The store itself @emph{cannot} contain setuid programs: that would be a
31945 security issue since any user on the system can write derivations that
31946 populate the store (@pxref{The Store}). Thus, a different mechanism is
31947 used: instead of changing the setuid bit directly on files that are in
31948 the store, we let the system administrator @emph{declare} which programs
31949 should be setuid root.
31950
31951 The @code{setuid-programs} field of an @code{operating-system}
31952 declaration contains a list of G-expressions denoting the names of
31953 programs to be setuid-root (@pxref{Using the Configuration System}).
31954 For instance, the @command{passwd} program, which is part of the Shadow
31955 package, can be designated by this G-expression (@pxref{G-Expressions}):
31956
31957 @example
31958 #~(string-append #$shadow "/bin/passwd")
31959 @end example
31960
31961 A default set of setuid programs is defined by the
31962 @code{%setuid-programs} variable of the @code{(gnu system)} module.
31963
31964 @defvr {Scheme Variable} %setuid-programs
31965 A list of G-expressions denoting common programs that are setuid-root.
31966
31967 The list includes commands such as @command{passwd}, @command{ping},
31968 @command{su}, and @command{sudo}.
31969 @end defvr
31970
31971 Under the hood, the actual setuid programs are created in the
31972 @file{/run/setuid-programs} directory at system activation time. The
31973 files in this directory refer to the ``real'' binaries, which are in the
31974 store.
31975
31976 @node X.509 Certificates
31977 @section X.509 Certificates
31978
31979 @cindex HTTPS, certificates
31980 @cindex X.509 certificates
31981 @cindex TLS
31982 Web servers available over HTTPS (that is, HTTP over the transport-layer
31983 security mechanism, TLS) send client programs an @dfn{X.509 certificate}
31984 that the client can then use to @emph{authenticate} the server. To do
31985 that, clients verify that the server's certificate is signed by a
31986 so-called @dfn{certificate authority} (CA). But to verify the CA's
31987 signature, clients must have first acquired the CA's certificate.
31988
31989 Web browsers such as GNU@tie{}IceCat include their own set of CA
31990 certificates, such that they are able to verify CA signatures
31991 out-of-the-box.
31992
31993 However, most other programs that can talk HTTPS---@command{wget},
31994 @command{git}, @command{w3m}, etc.---need to be told where CA
31995 certificates can be found.
31996
31997 @cindex @code{nss-certs}
31998 In Guix, this is done by adding a package that provides certificates
31999 to the @code{packages} field of the @code{operating-system} declaration
32000 (@pxref{operating-system Reference}). Guix includes one such package,
32001 @code{nss-certs}, which is a set of CA certificates provided as part of
32002 Mozilla's Network Security Services.
32003
32004 Note that it is @emph{not} part of @code{%base-packages}, so you need to
32005 explicitly add it. The @file{/etc/ssl/certs} directory, which is where
32006 most applications and libraries look for certificates by default, points
32007 to the certificates installed globally.
32008
32009 Unprivileged users, including users of Guix on a foreign distro,
32010 can also install their own certificate package in
32011 their profile. A number of environment variables need to be defined so
32012 that applications and libraries know where to find them. Namely, the
32013 OpenSSL library honors the @env{SSL_CERT_DIR} and @env{SSL_CERT_FILE}
32014 variables. Some applications add their own environment variables; for
32015 instance, the Git version control system honors the certificate bundle
32016 pointed to by the @env{GIT_SSL_CAINFO} environment variable. Thus, you
32017 would typically run something like:
32018
32019 @example
32020 guix install nss-certs
32021 export SSL_CERT_DIR="$HOME/.guix-profile/etc/ssl/certs"
32022 export SSL_CERT_FILE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
32023 export GIT_SSL_CAINFO="$SSL_CERT_FILE"
32024 @end example
32025
32026 As another example, R requires the @env{CURL_CA_BUNDLE} environment
32027 variable to point to a certificate bundle, so you would have to run
32028 something like this:
32029
32030 @example
32031 guix install nss-certs
32032 export CURL_CA_BUNDLE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
32033 @end example
32034
32035 For other applications you may want to look up the required environment
32036 variable in the relevant documentation.
32037
32038
32039 @node Name Service Switch
32040 @section Name Service Switch
32041
32042 @cindex name service switch
32043 @cindex NSS
32044 The @code{(gnu system nss)} module provides bindings to the
32045 configuration file of the libc @dfn{name service switch} or @dfn{NSS}
32046 (@pxref{NSS Configuration File,,, libc, The GNU C Library Reference
32047 Manual}). In a nutshell, the NSS is a mechanism that allows libc to be
32048 extended with new ``name'' lookup methods for system databases, which
32049 includes host names, service names, user accounts, and more (@pxref{Name
32050 Service Switch, System Databases and Name Service Switch,, libc, The GNU
32051 C Library Reference Manual}).
32052
32053 The NSS configuration specifies, for each system database, which lookup
32054 method is to be used, and how the various methods are chained
32055 together---for instance, under which circumstances NSS should try the
32056 next method in the list. The NSS configuration is given in the
32057 @code{name-service-switch} field of @code{operating-system} declarations
32058 (@pxref{operating-system Reference, @code{name-service-switch}}).
32059
32060 @cindex nss-mdns
32061 @cindex .local, host name lookup
32062 As an example, the declaration below configures the NSS to use the
32063 @uref{https://0pointer.de/lennart/projects/nss-mdns/, @code{nss-mdns}
32064 back-end}, which supports host name lookups over multicast DNS (mDNS)
32065 for host names ending in @code{.local}:
32066
32067 @lisp
32068 (name-service-switch
32069 (hosts (list %files ;first, check /etc/hosts
32070
32071 ;; If the above did not succeed, try
32072 ;; with 'mdns_minimal'.
32073 (name-service
32074 (name "mdns_minimal")
32075
32076 ;; 'mdns_minimal' is authoritative for
32077 ;; '.local'. When it returns "not found",
32078 ;; no need to try the next methods.
32079 (reaction (lookup-specification
32080 (not-found => return))))
32081
32082 ;; Then fall back to DNS.
32083 (name-service
32084 (name "dns"))
32085
32086 ;; Finally, try with the "full" 'mdns'.
32087 (name-service
32088 (name "mdns")))))
32089 @end lisp
32090
32091 Do not worry: the @code{%mdns-host-lookup-nss} variable (see below)
32092 contains this configuration, so you will not have to type it if all you
32093 want is to have @code{.local} host lookup working.
32094
32095 Note that, in this case, in addition to setting the
32096 @code{name-service-switch} of the @code{operating-system} declaration,
32097 you also need to use @code{avahi-service-type} (@pxref{Networking Services,
32098 @code{avahi-service-type}}), or @code{%desktop-services}, which includes it
32099 (@pxref{Desktop Services}). Doing this makes @code{nss-mdns} accessible
32100 to the name service cache daemon (@pxref{Base Services,
32101 @code{nscd-service}}).
32102
32103 For convenience, the following variables provide typical NSS
32104 configurations.
32105
32106 @defvr {Scheme Variable} %default-nss
32107 This is the default name service switch configuration, a
32108 @code{name-service-switch} object.
32109 @end defvr
32110
32111 @defvr {Scheme Variable} %mdns-host-lookup-nss
32112 This is the name service switch configuration with support for host name
32113 lookup over multicast DNS (mDNS) for host names ending in @code{.local}.
32114 @end defvr
32115
32116 The reference for name service switch configuration is given below. It
32117 is a direct mapping of the configuration file format of the C library , so
32118 please refer to the C library manual for more information (@pxref{NSS
32119 Configuration File,,, libc, The GNU C Library Reference Manual}).
32120 Compared to the configuration file format of libc NSS, it has the advantage
32121 not only of adding this warm parenthetic feel that we like, but also
32122 static checks: you will know about syntax errors and typos as soon as you
32123 run @command{guix system}.
32124
32125 @deftp {Data Type} name-service-switch
32126
32127 This is the data type representation the configuration of libc's name
32128 service switch (NSS). Each field below represents one of the supported
32129 system databases.
32130
32131 @table @code
32132 @item aliases
32133 @itemx ethers
32134 @itemx group
32135 @itemx gshadow
32136 @itemx hosts
32137 @itemx initgroups
32138 @itemx netgroup
32139 @itemx networks
32140 @itemx password
32141 @itemx public-key
32142 @itemx rpc
32143 @itemx services
32144 @itemx shadow
32145 The system databases handled by the NSS@. Each of these fields must be a
32146 list of @code{<name-service>} objects (see below).
32147 @end table
32148 @end deftp
32149
32150 @deftp {Data Type} name-service
32151
32152 This is the data type representing an actual name service and the
32153 associated lookup action.
32154
32155 @table @code
32156 @item name
32157 A string denoting the name service (@pxref{Services in the NSS
32158 configuration,,, libc, The GNU C Library Reference Manual}).
32159
32160 Note that name services listed here must be visible to nscd. This is
32161 achieved by passing the @code{#:name-services} argument to
32162 @code{nscd-service} the list of packages providing the needed name
32163 services (@pxref{Base Services, @code{nscd-service}}).
32164
32165 @item reaction
32166 An action specified using the @code{lookup-specification} macro
32167 (@pxref{Actions in the NSS configuration,,, libc, The GNU C Library
32168 Reference Manual}). For example:
32169
32170 @lisp
32171 (lookup-specification (unavailable => continue)
32172 (success => return))
32173 @end lisp
32174 @end table
32175 @end deftp
32176
32177 @node Initial RAM Disk
32178 @section Initial RAM Disk
32179
32180 @cindex initrd
32181 @cindex initial RAM disk
32182 For bootstrapping purposes, the Linux-Libre kernel is passed an
32183 @dfn{initial RAM disk}, or @dfn{initrd}. An initrd contains a temporary
32184 root file system as well as an initialization script. The latter is
32185 responsible for mounting the real root file system, and for loading any
32186 kernel modules that may be needed to achieve that.
32187
32188 The @code{initrd-modules} field of an @code{operating-system}
32189 declaration allows you to specify Linux-libre kernel modules that must
32190 be available in the initrd. In particular, this is where you would list
32191 modules needed to actually drive the hard disk where your root partition
32192 is---although the default value of @code{initrd-modules} should cover
32193 most use cases. For example, assuming you need the @code{megaraid_sas}
32194 module in addition to the default modules to be able to access your root
32195 file system, you would write:
32196
32197 @lisp
32198 (operating-system
32199 ;; @dots{}
32200 (initrd-modules (cons "megaraid_sas" %base-initrd-modules)))
32201 @end lisp
32202
32203 @defvr {Scheme Variable} %base-initrd-modules
32204 This is the list of kernel modules included in the initrd by default.
32205 @end defvr
32206
32207 Furthermore, if you need lower-level customization, the @code{initrd}
32208 field of an @code{operating-system} declaration allows
32209 you to specify which initrd you would like to use. The @code{(gnu
32210 system linux-initrd)} module provides three ways to build an initrd: the
32211 high-level @code{base-initrd} procedure and the low-level
32212 @code{raw-initrd} and @code{expression->initrd} procedures.
32213
32214 The @code{base-initrd} procedure is intended to cover most common uses.
32215 For example, if you want to add a bunch of kernel modules to be loaded
32216 at boot time, you can define the @code{initrd} field of the operating
32217 system declaration like this:
32218
32219 @lisp
32220 (initrd (lambda (file-systems . rest)
32221 ;; Create a standard initrd but set up networking
32222 ;; with the parameters QEMU expects by default.
32223 (apply base-initrd file-systems
32224 #:qemu-networking? #t
32225 rest)))
32226 @end lisp
32227
32228 The @code{base-initrd} procedure also handles common use cases that
32229 involves using the system as a QEMU guest, or as a ``live'' system with
32230 volatile root file system.
32231
32232 The @code{base-initrd} procedure is built from @code{raw-initrd} procedure.
32233 Unlike @code{base-initrd}, @code{raw-initrd} doesn't do anything high-level,
32234 such as trying to guess which kernel modules and packages should be included
32235 to the initrd. An example use of @code{raw-initrd} is when a user has
32236 a custom Linux kernel configuration and default kernel modules included by
32237 @code{base-initrd} are not available.
32238
32239 The initial RAM disk produced by @code{base-initrd} or @code{raw-initrd}
32240 honors several options passed on the Linux kernel command line
32241 (that is, arguments passed @i{via} the @code{linux} command of GRUB, or the
32242 @code{-append} option of QEMU), notably:
32243
32244 @table @code
32245 @item --load=@var{boot}
32246 Tell the initial RAM disk to load @var{boot}, a file containing a Scheme
32247 program, once it has mounted the root file system.
32248
32249 Guix uses this option to yield control to a boot program that runs the
32250 service activation programs and then spawns the GNU@tie{}Shepherd, the
32251 initialization system.
32252
32253 @item --root=@var{root}
32254 Mount @var{root} as the root file system. @var{root} can be a device
32255 name like @code{/dev/sda1}, a file system label, or a file system UUID.
32256 When unspecified, the device name from the root file system of the
32257 operating system declaration is used.
32258
32259 @item --system=@var{system}
32260 Have @file{/run/booted-system} and @file{/run/current-system} point to
32261 @var{system}.
32262
32263 @item modprobe.blacklist=@var{modules}@dots{}
32264 @cindex module, black-listing
32265 @cindex black list, of kernel modules
32266 Instruct the initial RAM disk as well as the @command{modprobe} command
32267 (from the kmod package) to refuse to load @var{modules}. @var{modules}
32268 must be a comma-separated list of module names---e.g.,
32269 @code{usbkbd,9pnet}.
32270
32271 @item --repl
32272 Start a read-eval-print loop (REPL) from the initial RAM disk before it
32273 tries to load kernel modules and to mount the root file system. Our
32274 marketing team calls it @dfn{boot-to-Guile}. The Schemer in you will
32275 love it. @xref{Using Guile Interactively,,, guile, GNU Guile Reference
32276 Manual}, for more information on Guile's REPL.
32277
32278 @end table
32279
32280 Now that you know all the features that initial RAM disks produced by
32281 @code{base-initrd} and @code{raw-initrd} provide,
32282 here is how to use it and customize it further.
32283
32284 @cindex initrd
32285 @cindex initial RAM disk
32286 @deffn {Scheme Procedure} raw-initrd @var{file-systems} @
32287 [#:linux-modules '()] [#:mapped-devices '()] @
32288 [#:keyboard-layout #f] @
32289 [#:helper-packages '()] [#:qemu-networking? #f] [#:volatile-root? #f]
32290 Return a derivation that builds a raw initrd. @var{file-systems} is
32291 a list of file systems to be mounted by the initrd, possibly in addition to
32292 the root file system specified on the kernel command line via @option{--root}.
32293 @var{linux-modules} is a list of kernel modules to be loaded at boot time.
32294 @var{mapped-devices} is a list of device mappings to realize before
32295 @var{file-systems} are mounted (@pxref{Mapped Devices}).
32296 @var{helper-packages} is a list of packages to be copied in the initrd.
32297 It may
32298 include @code{e2fsck/static} or other packages needed by the initrd to check
32299 the root file system.
32300
32301 When true, @var{keyboard-layout} is a @code{<keyboard-layout>} record denoting
32302 the desired console keyboard layout. This is done before @var{mapped-devices}
32303 are set up and before @var{file-systems} are mounted such that, should the
32304 user need to enter a passphrase or use the REPL, this happens using the
32305 intended keyboard layout.
32306
32307 When @var{qemu-networking?} is true, set up networking with the standard QEMU
32308 parameters. When @var{virtio?} is true, load additional modules so that the
32309 initrd can be used as a QEMU guest with para-virtualized I/O drivers.
32310
32311 When @var{volatile-root?} is true, the root file system is writable but any changes
32312 to it are lost.
32313 @end deffn
32314
32315 @deffn {Scheme Procedure} base-initrd @var{file-systems} @
32316 [#:mapped-devices '()] [#:keyboard-layout #f] @
32317 [#:qemu-networking? #f] [#:volatile-root? #f] @
32318 [#:linux-modules '()]
32319 Return as a file-like object a generic initrd, with kernel
32320 modules taken from @var{linux}. @var{file-systems} is a list of file-systems to be
32321 mounted by the initrd, possibly in addition to the root file system specified
32322 on the kernel command line via @option{--root}. @var{mapped-devices} is a list of device
32323 mappings to realize before @var{file-systems} are mounted.
32324
32325 When true, @var{keyboard-layout} is a @code{<keyboard-layout>} record denoting
32326 the desired console keyboard layout. This is done before @var{mapped-devices}
32327 are set up and before @var{file-systems} are mounted such that, should the
32328 user need to enter a passphrase or use the REPL, this happens using the
32329 intended keyboard layout.
32330
32331 @var{qemu-networking?} and @var{volatile-root?} behaves as in @code{raw-initrd}.
32332
32333 The initrd is automatically populated with all the kernel modules necessary
32334 for @var{file-systems} and for the given options. Additional kernel
32335 modules can be listed in @var{linux-modules}. They will be added to the initrd, and
32336 loaded at boot time in the order in which they appear.
32337 @end deffn
32338
32339 Needless to say, the initrds we produce and use embed a
32340 statically-linked Guile, and the initialization program is a Guile
32341 program. That gives a lot of flexibility. The
32342 @code{expression->initrd} procedure builds such an initrd, given the
32343 program to run in that initrd.
32344
32345 @deffn {Scheme Procedure} expression->initrd @var{exp} @
32346 [#:guile %guile-3.0-static-stripped] [#:name "guile-initrd"]
32347 Return as a file-like object a Linux initrd (a gzipped cpio archive)
32348 containing @var{guile} and that evaluates @var{exp}, a G-expression,
32349 upon booting. All the derivations referenced by @var{exp} are
32350 automatically copied to the initrd.
32351 @end deffn
32352
32353 @node Bootloader Configuration
32354 @section Bootloader Configuration
32355
32356 @cindex bootloader
32357 @cindex boot loader
32358
32359 The operating system supports multiple bootloaders. The bootloader is
32360 configured using @code{bootloader-configuration} declaration. All the
32361 fields of this structure are bootloader agnostic except for one field,
32362 @code{bootloader} that indicates the bootloader to be configured and
32363 installed.
32364
32365 Some of the bootloaders do not honor every field of
32366 @code{bootloader-configuration}. For instance, the extlinux
32367 bootloader does not support themes and thus ignores the @code{theme}
32368 field.
32369
32370 @deftp {Data Type} bootloader-configuration
32371 The type of a bootloader configuration declaration.
32372
32373 @table @asis
32374
32375 @item @code{bootloader}
32376 @cindex EFI, bootloader
32377 @cindex UEFI, bootloader
32378 @cindex BIOS, bootloader
32379 The bootloader to use, as a @code{bootloader} object. For now
32380 @code{grub-bootloader}, @code{grub-efi-bootloader},
32381 @code{grub-efi-netboot-bootloader}, @code{extlinux-bootloader} and
32382 @code{u-boot-bootloader} are supported.
32383
32384 @cindex ARM, bootloaders
32385 @cindex AArch64, bootloaders
32386 Available bootloaders are described in @code{(gnu bootloader @dots{})}
32387 modules. In particular, @code{(gnu bootloader u-boot)} contains definitions
32388 of bootloaders for a wide range of ARM and AArch64 systems, using the
32389 @uref{https://www.denx.de/wiki/U-Boot/, U-Boot bootloader}.
32390
32391 @vindex grub-efi-bootloader
32392 @code{grub-efi-bootloader} allows to boot on modern systems using the
32393 @dfn{Unified Extensible Firmware Interface} (UEFI). This is what you should
32394 use if the installation image contains a @file{/sys/firmware/efi} directory
32395 when you boot it on your system.
32396
32397 @vindex grub-bootloader
32398 @code{grub-bootloader} allows you to boot in particular Intel-based machines
32399 in ``legacy'' BIOS mode.
32400
32401 @vindex grub-efi-netboot-bootloader
32402 @code{grub-efi-netboot-bootloader} allows you to boot your system over network
32403 through TFTP@. In combination with an NFS root file system this allows you to
32404 build a diskless Guix system.
32405
32406 The installation of the @code{grub-efi-netboot-bootloader} generates the content
32407 of the TFTP root directory at @code{target}
32408 (@pxref{Bootloader Configuration, @code{target}}), to be served by a TFTP server.
32409 You may want to mount your TFTP server directory onto @code{target} to move the
32410 required files to the TFTP server automatically.
32411
32412 If you plan to use an NFS root file system as well (actually if you mount the
32413 store from an NFS share), then the TFTP server needs to serve the file
32414 @file{/boot/grub/grub.cfg} and other files from the store (like GRUBs background
32415 image, the kernel (@pxref{operating-system Reference, @code{kernel}}) and the
32416 initrd (@pxref{operating-system Reference, @code{initrd}})), too. All these
32417 files from the store will be accessed by GRUB through TFTP with their normal
32418 store path, for example as
32419 @file{tftp://tftp-server/gnu/store/…-initrd/initrd.cpio.gz}.
32420
32421 Two symlinks are created to make this possible. The first symlink is
32422 @code{target}@file{/efi/Guix/boot/grub/grub.cfg} pointing to
32423 @file{../../../boot/grub/grub.cfg},
32424 where @code{target} may be @file{/boot}. In this case the link is not leaving
32425 the served TFTP root directory, but otherwise it does. The second link is
32426 @code{target}@file{/gnu/store} and points to @file{../gnu/store}. This link
32427 is leaving the served TFTP root directory.
32428
32429 The assumption behind all this is that you have an NFS server exporting the root
32430 file system for your Guix system, and additionally a TFTP server exporting your
32431 @code{target} directory—usually @file{/boot}—from that same root file system for
32432 your Guix system. In this constellation the symlinks will work.
32433
32434 For other constellations you will have to program your own bootloader installer,
32435 which then takes care to make necessary files from the store accessible through
32436 TFTP, for example by copying them into the TFTP root directory at @code{target}.
32437
32438 It is important to note that symlinks pointing outside the TFTP root directory
32439 may need to be allowed in the configuration of your TFTP server. Further the
32440 store link exposes the whole store through TFTP@. Both points need to be
32441 considered carefully for security aspects.
32442
32443 Beside the @code{grub-efi-netboot-bootloader}, the already mentioned TFTP and
32444 NFS servers, you also need a properly configured DHCP server to make the booting
32445 over netboot possible. For all this we can currently only recommend you to look
32446 for instructions about @acronym{PXE, Preboot eXecution Environment}.
32447
32448 @item @code{target}
32449 This is a string denoting the target onto which to install the
32450 bootloader.
32451
32452 The interpretation depends on the bootloader in question. For
32453 @code{grub-bootloader}, for example, it should be a device name understood by
32454 the bootloader @command{installer} command, such as @code{/dev/sda} or
32455 @code{(hd0)} (@pxref{Invoking grub-install,,, grub, GNU GRUB Manual}). For
32456 @code{grub-efi-bootloader}, it should be the mount point of the EFI file
32457 system, usually @file{/boot/efi}. For @code{grub-efi-netboot-bootloader},
32458 @code{target} should be the mount point corresponding to the TFTP root
32459 directory of your TFTP server.
32460
32461 @item @code{menu-entries} (default: @code{()})
32462 A possibly empty list of @code{menu-entry} objects (see below), denoting
32463 entries to appear in the bootloader menu, in addition to the current
32464 system entry and the entry pointing to previous system generations.
32465
32466 @item @code{default-entry} (default: @code{0})
32467 The index of the default boot menu entry. Index 0 is for the entry of the
32468 current system.
32469
32470 @item @code{timeout} (default: @code{5})
32471 The number of seconds to wait for keyboard input before booting. Set to
32472 0 to boot immediately, and to -1 to wait indefinitely.
32473
32474 @cindex keyboard layout, for the bootloader
32475 @item @code{keyboard-layout} (default: @code{#f})
32476 If this is @code{#f}, the bootloader's menu (if any) uses the default keyboard
32477 layout, usually US@tie{}English (``qwerty'').
32478
32479 Otherwise, this must be a @code{keyboard-layout} object (@pxref{Keyboard
32480 Layout}).
32481
32482 @quotation Note
32483 This option is currently ignored by bootloaders other than @code{grub} and
32484 @code{grub-efi}.
32485 @end quotation
32486
32487 @item @code{theme} (default: @var{#f})
32488 The bootloader theme object describing the theme to use. If no theme
32489 is provided, some bootloaders might use a default theme, that's true
32490 for GRUB.
32491
32492 @item @code{terminal-outputs} (default: @code{'(gfxterm)})
32493 The output terminals used for the bootloader boot menu, as a list of
32494 symbols. GRUB accepts the values: @code{console}, @code{serial},
32495 @code{serial_@{0-3@}}, @code{gfxterm}, @code{vga_text},
32496 @code{mda_text}, @code{morse}, and @code{pkmodem}. This field
32497 corresponds to the GRUB variable @code{GRUB_TERMINAL_OUTPUT} (@pxref{Simple
32498 configuration,,, grub,GNU GRUB manual}).
32499
32500 @item @code{terminal-inputs} (default: @code{'()})
32501 The input terminals used for the bootloader boot menu, as a list of
32502 symbols. For GRUB, the default is the native platform terminal as
32503 determined at run-time. GRUB accepts the values: @code{console},
32504 @code{serial}, @code{serial_@{0-3@}}, @code{at_keyboard}, and
32505 @code{usb_keyboard}. This field corresponds to the GRUB variable
32506 @code{GRUB_TERMINAL_INPUT} (@pxref{Simple configuration,,, grub,GNU GRUB
32507 manual}).
32508
32509 @item @code{serial-unit} (default: @code{#f})
32510 The serial unit used by the bootloader, as an integer from 0 to 3.
32511 For GRUB, it is chosen at run-time; currently GRUB chooses 0, which
32512 corresponds to COM1 (@pxref{Serial terminal,,, grub,GNU GRUB manual}).
32513
32514 @item @code{serial-speed} (default: @code{#f})
32515 The speed of the serial interface, as an integer. For GRUB, the
32516 default value is chosen at run-time; currently GRUB chooses
32517 9600@tie{}bps (@pxref{Serial terminal,,, grub,GNU GRUB manual}).
32518 @end table
32519
32520 @end deftp
32521
32522 @cindex dual boot
32523 @cindex boot menu
32524 Should you want to list additional boot menu entries @i{via} the
32525 @code{menu-entries} field above, you will need to create them with the
32526 @code{menu-entry} form. For example, imagine you want to be able to
32527 boot another distro (hard to imagine!), you can define a menu entry
32528 along these lines:
32529
32530 @lisp
32531 (menu-entry
32532 (label "The Other Distro")
32533 (linux "/boot/old/vmlinux-2.6.32")
32534 (linux-arguments '("root=/dev/sda2"))
32535 (initrd "/boot/old/initrd"))
32536 @end lisp
32537
32538 Details below.
32539
32540 @deftp {Data Type} menu-entry
32541 The type of an entry in the bootloader menu.
32542
32543 @table @asis
32544
32545 @item @code{label}
32546 The label to show in the menu---e.g., @code{"GNU"}.
32547
32548 @item @code{linux} (default: @code{#f})
32549 The Linux kernel image to boot, for example:
32550
32551 @lisp
32552 (file-append linux-libre "/bzImage")
32553 @end lisp
32554
32555 For GRUB, it is also possible to specify a device explicitly in the
32556 file path using GRUB's device naming convention (@pxref{Naming
32557 convention,,, grub, GNU GRUB manual}), for example:
32558
32559 @example
32560 "(hd0,msdos1)/boot/vmlinuz"
32561 @end example
32562
32563 If the device is specified explicitly as above, then the @code{device}
32564 field is ignored entirely.
32565
32566 @item @code{linux-arguments} (default: @code{()})
32567 The list of extra Linux kernel command-line arguments---e.g.,
32568 @code{("console=ttyS0")}.
32569
32570 @item @code{initrd} (default: @code{#f})
32571 A G-Expression or string denoting the file name of the initial RAM disk
32572 to use (@pxref{G-Expressions}).
32573
32574 @item @code{device} (default: @code{#f})
32575 The device where the kernel and initrd are to be found---i.e., for GRUB,
32576 @dfn{root} for this menu entry (@pxref{root,,, grub, GNU GRUB manual}).
32577
32578 This may be a file system label (a string), a file system UUID (a
32579 bytevector, @pxref{File Systems}), or @code{#f}, in which case
32580 the bootloader will search the device containing the file specified by
32581 the @code{linux} field (@pxref{search,,, grub, GNU GRUB manual}). It
32582 must @emph{not} be an OS device name such as @file{/dev/sda1}.
32583
32584 @item @code{multiboot-kernel} (default: @code{#f})
32585 The kernel to boot in Multiboot-mode (@pxref{multiboot,,, grub, GNU GRUB
32586 manual}). When this field is set, a Multiboot menu-entry is generated.
32587 For example:
32588
32589 @lisp
32590 (file-append mach "/boot/gnumach")
32591 @end lisp
32592
32593 @item @code{multiboot-arguments} (default: @code{()})
32594 The list of extra command-line arguments for the multiboot-kernel.
32595
32596 @item @code{multiboot-modules} (default: @code{()})
32597 The list of commands for loading Multiboot modules. For example:
32598
32599 @lisp
32600 (list (list (file-append hurd "/hurd/ext2fs.static") "ext2fs"
32601 @dots{})
32602 (list (file-append libc "/lib/ld.so.1") "exec"
32603 @dots{}))
32604 @end lisp
32605
32606 @end table
32607 @end deftp
32608
32609 @cindex HDPI
32610 @cindex HiDPI
32611 @cindex resolution
32612 @c FIXME: Write documentation once it's stable.
32613 For now only GRUB has theme support. GRUB themes are created using
32614 the @code{grub-theme} form, which is not fully documented yet.
32615
32616 @deftp {Data Type} grub-theme
32617 Data type representing the configuration of the GRUB theme.
32618
32619 @table @asis
32620 @item @code{gfxmode} (default: @code{'("auto")})
32621 The GRUB @code{gfxmode} to set (a list of screen resolution strings,
32622 @pxref{gfxmode,,, grub, GNU GRUB manual}).
32623 @end table
32624 @end deftp
32625
32626 @deffn {Scheme Procedure} grub-theme
32627 Return the default GRUB theme used by the operating system if no
32628 @code{theme} field is specified in @code{bootloader-configuration}
32629 record.
32630
32631 It comes with a fancy background image displaying the GNU and Guix
32632 logos.
32633 @end deffn
32634
32635 For example, to override the default resolution, you may use something
32636 like
32637
32638 @lisp
32639 (bootloader
32640 (bootloader-configuration
32641 ;; @dots{}
32642 (theme (grub-theme
32643 (inherit (grub-theme))
32644 (gfxmode '("1024x786x32" "auto"))))))
32645 @end lisp
32646
32647 @node Invoking guix system
32648 @section Invoking @code{guix system}
32649
32650 Once you have written an operating system declaration as seen in the
32651 previous section, it can be @dfn{instantiated} using the @command{guix
32652 system} command. The synopsis is:
32653
32654 @example
32655 guix system @var{options}@dots{} @var{action} @var{file}
32656 @end example
32657
32658 @var{file} must be the name of a file containing an
32659 @code{operating-system} declaration. @var{action} specifies how the
32660 operating system is instantiated. Currently the following values are
32661 supported:
32662
32663 @table @code
32664 @item search
32665 Display available service type definitions that match the given regular
32666 expressions, sorted by relevance:
32667
32668 @cindex HDPI
32669 @cindex HiDPI
32670 @cindex resolution
32671 @example
32672 $ guix system search console
32673 name: console-fonts
32674 location: gnu/services/base.scm:806:2
32675 extends: shepherd-root
32676 description: Install the given fonts on the specified ttys (fonts are per
32677 + virtual console on GNU/Linux). The value of this service is a list of
32678 + tty/font pairs. The font can be the name of a font provided by the `kbd'
32679 + package or any valid argument to `setfont', as in this example:
32680 +
32681 + '(("tty1" . "LatGrkCyr-8x16")
32682 + ("tty2" . (file-append
32683 + font-tamzen
32684 + "/share/kbd/consolefonts/TamzenForPowerline10x20.psf"))
32685 + ("tty3" . (file-append
32686 + font-terminus
32687 + "/share/consolefonts/ter-132n"))) ; for HDPI
32688 relevance: 9
32689
32690 name: mingetty
32691 location: gnu/services/base.scm:1190:2
32692 extends: shepherd-root
32693 description: Provide console login using the `mingetty' program.
32694 relevance: 2
32695
32696 name: login
32697 location: gnu/services/base.scm:860:2
32698 extends: pam
32699 description: Provide a console log-in service as specified by its
32700 + configuration value, a `login-configuration' object.
32701 relevance: 2
32702
32703 @dots{}
32704 @end example
32705
32706 As for @command{guix package --search}, the result is written in
32707 @code{recutils} format, which makes it easy to filter the output
32708 (@pxref{Top, GNU recutils databases,, recutils, GNU recutils manual}).
32709
32710 @item reconfigure
32711 Build the operating system described in @var{file}, activate it, and
32712 switch to it@footnote{This action (and the related actions
32713 @code{switch-generation} and @code{roll-back}) are usable only on
32714 systems already running Guix System.}.
32715
32716 @quotation Note
32717 @c The paragraph below refers to the problem discussed at
32718 @c <https://lists.gnu.org/archive/html/guix-devel/2014-08/msg00057.html>.
32719 It is highly recommended to run @command{guix pull} once before you run
32720 @command{guix system reconfigure} for the first time (@pxref{Invoking
32721 guix pull}). Failing to do that you would see an older version of Guix
32722 once @command{reconfigure} has completed.
32723 @end quotation
32724
32725 This effects all the configuration specified in @var{file}: user
32726 accounts, system services, global package list, setuid programs, etc.
32727 The command starts system services specified in @var{file} that are not
32728 currently running; if a service is currently running this command will
32729 arrange for it to be upgraded the next time it is stopped (e.g.@: by
32730 @code{herd stop X} or @code{herd restart X}).
32731
32732 This command creates a new generation whose number is one greater than
32733 the current generation (as reported by @command{guix system
32734 list-generations}). If that generation already exists, it will be
32735 overwritten. This behavior mirrors that of @command{guix package}
32736 (@pxref{Invoking guix package}).
32737
32738 It also adds a bootloader menu entry for the new OS configuration,
32739 ---unless @option{--no-bootloader} is passed. For GRUB, it moves
32740 entries for older configurations to a submenu, allowing you to choose
32741 an older system generation at boot time should you need it.
32742
32743 @cindex provenance tracking, of the operating system
32744 Upon completion, the new system is deployed under
32745 @file{/run/current-system}. This directory contains @dfn{provenance
32746 meta-data}: the list of channels in use (@pxref{Channels}) and
32747 @var{file} itself, when available. You can view it by running:
32748
32749 @example
32750 guix system describe
32751 @end example
32752
32753 This information is useful should you later want to inspect how this
32754 particular generation was built. In fact, assuming @var{file} is
32755 self-contained, you can later rebuild generation @var{n} of your
32756 operating system with:
32757
32758 @example
32759 guix time-machine \
32760 -C /var/guix/profiles/system-@var{n}-link/channels.scm -- \
32761 system reconfigure \
32762 /var/guix/profiles/system-@var{n}-link/configuration.scm
32763 @end example
32764
32765 You can think of it as some sort of built-in version control! Your
32766 system is not just a binary artifact: @emph{it carries its own source}.
32767 @xref{Service Reference, @code{provenance-service-type}}, for more
32768 information on provenance tracking.
32769
32770 By default, @command{reconfigure} @emph{prevents you from downgrading
32771 your system}, which could (re)introduce security vulnerabilities and
32772 also cause problems with ``stateful'' services such as database
32773 management systems. You can override that behavior by passing
32774 @option{--allow-downgrades}.
32775
32776 @item switch-generation
32777 @cindex generations
32778 Switch to an existing system generation. This action atomically
32779 switches the system profile to the specified system generation. It
32780 also rearranges the system's existing bootloader menu entries. It
32781 makes the menu entry for the specified system generation the default,
32782 and it moves the entries for the other generations to a submenu, if
32783 supported by the bootloader being used. The next time the system
32784 boots, it will use the specified system generation.
32785
32786 The bootloader itself is not being reinstalled when using this
32787 command. Thus, the installed bootloader is used with an updated
32788 configuration file.
32789
32790 The target generation can be specified explicitly by its generation
32791 number. For example, the following invocation would switch to system
32792 generation 7:
32793
32794 @example
32795 guix system switch-generation 7
32796 @end example
32797
32798 The target generation can also be specified relative to the current
32799 generation with the form @code{+N} or @code{-N}, where @code{+3} means
32800 ``3 generations ahead of the current generation,'' and @code{-1} means
32801 ``1 generation prior to the current generation.'' When specifying a
32802 negative value such as @code{-1}, you must precede it with @code{--} to
32803 prevent it from being parsed as an option. For example:
32804
32805 @example
32806 guix system switch-generation -- -1
32807 @end example
32808
32809 Currently, the effect of invoking this action is @emph{only} to switch
32810 the system profile to an existing generation and rearrange the
32811 bootloader menu entries. To actually start using the target system
32812 generation, you must reboot after running this action. In the future,
32813 it will be updated to do the same things as @command{reconfigure},
32814 like activating and deactivating services.
32815
32816 This action will fail if the specified generation does not exist.
32817
32818 @item roll-back
32819 @cindex rolling back
32820 Switch to the preceding system generation. The next time the system
32821 boots, it will use the preceding system generation. This is the inverse
32822 of @command{reconfigure}, and it is exactly the same as invoking
32823 @command{switch-generation} with an argument of @code{-1}.
32824
32825 Currently, as with @command{switch-generation}, you must reboot after
32826 running this action to actually start using the preceding system
32827 generation.
32828
32829 @item delete-generations
32830 @cindex deleting system generations
32831 @cindex saving space
32832 Delete system generations, making them candidates for garbage collection
32833 (@pxref{Invoking guix gc}, for information on how to run the ``garbage
32834 collector'').
32835
32836 This works in the same way as @samp{guix package --delete-generations}
32837 (@pxref{Invoking guix package, @option{--delete-generations}}). With no
32838 arguments, all system generations but the current one are deleted:
32839
32840 @example
32841 guix system delete-generations
32842 @end example
32843
32844 You can also select the generations you want to delete. The example below
32845 deletes all the system generations that are more than two month old:
32846
32847 @example
32848 guix system delete-generations 2m
32849 @end example
32850
32851 Running this command automatically reinstalls the bootloader with an updated
32852 list of menu entries---e.g., the ``old generations'' sub-menu in GRUB no
32853 longer lists the generations that have been deleted.
32854
32855 @item build
32856 Build the derivation of the operating system, which includes all the
32857 configuration files and programs needed to boot and run the system.
32858 This action does not actually install anything.
32859
32860 @item init
32861 Populate the given directory with all the files necessary to run the
32862 operating system specified in @var{file}. This is useful for first-time
32863 installations of Guix System. For instance:
32864
32865 @example
32866 guix system init my-os-config.scm /mnt
32867 @end example
32868
32869 copies to @file{/mnt} all the store items required by the configuration
32870 specified in @file{my-os-config.scm}. This includes configuration
32871 files, packages, and so on. It also creates other essential files
32872 needed for the system to operate correctly---e.g., the @file{/etc},
32873 @file{/var}, and @file{/run} directories, and the @file{/bin/sh} file.
32874
32875 This command also installs bootloader on the target specified in
32876 @file{my-os-config}, unless the @option{--no-bootloader} option was
32877 passed.
32878
32879 @item vm
32880 @cindex virtual machine
32881 @cindex VM
32882 @anchor{guix system vm}
32883 Build a virtual machine that contains the operating system declared in
32884 @var{file}, and return a script to run that virtual machine (VM).
32885
32886 @quotation Note
32887 The @code{vm} action and others below
32888 can use KVM support in the Linux-libre kernel. Specifically, if the
32889 machine has hardware virtualization support, the corresponding
32890 KVM kernel module should be loaded, and the @file{/dev/kvm} device node
32891 must exist and be readable and writable by the user and by the
32892 build users of the daemon (@pxref{Build Environment Setup}).
32893 @end quotation
32894
32895 Arguments given to the script are passed to QEMU as in the example
32896 below, which enables networking and requests 1@tie{}GiB of RAM for the
32897 emulated machine:
32898
32899 @example
32900 $ /gnu/store/@dots{}-run-vm.sh -m 1024 -smp 2 -net user,model=virtio-net-pci
32901 @end example
32902
32903 The VM shares its store with the host system.
32904
32905 Additional file systems can be shared between the host and the VM using
32906 the @option{--share} and @option{--expose} command-line options: the former
32907 specifies a directory to be shared with write access, while the latter
32908 provides read-only access to the shared directory.
32909
32910 The example below creates a VM in which the user's home directory is
32911 accessible read-only, and where the @file{/exchange} directory is a
32912 read-write mapping of @file{$HOME/tmp} on the host:
32913
32914 @example
32915 guix system vm my-config.scm \
32916 --expose=$HOME --share=$HOME/tmp=/exchange
32917 @end example
32918
32919 On GNU/Linux, the default is to boot directly to the kernel; this has
32920 the advantage of requiring only a very tiny root disk image since the
32921 store of the host can then be mounted.
32922
32923 The @option{--full-boot} option forces a complete boot sequence, starting
32924 with the bootloader. This requires more disk space since a root image
32925 containing at least the kernel, initrd, and bootloader data files must
32926 be created. The @option{--image-size} option can be used to specify the
32927 size of the image.
32928
32929 @cindex System images, creation in various formats
32930 @cindex Creating system images in various formats
32931 @item image
32932 @itemx docker-image
32933 Return a virtual machine, disk image, or Docker image of the operating
32934 system declared in @var{file} that stands alone. By default,
32935 @command{guix system} estimates the size of the image needed to store
32936 the system, but you can use the @option{--image-size} option to specify
32937 a value. Docker images are built to contain exactly what they need, so
32938 the @option{--image-size} option is ignored in the case of
32939 @code{docker-image}.
32940
32941 @cindex image, creating disk images
32942 The @code{image} command can produce various image types. The
32943 image type can be selected using the @option{--image-type} option. It
32944 defaults to @code{efi-raw}. When its value is @code{iso9660}, the
32945 @option{--label} option can be used to specify a volume ID with
32946 @code{image}. By default, the root file system of a disk image is
32947 mounted non-volatile; the @option{--volatile} option can be provided to
32948 make it volatile instead. When using @code{image}, the bootloader
32949 installed on the generated image is taken from the provided
32950 @code{operating-system} definition. The following example demonstrates
32951 how to generate an image that uses the @code{grub-efi-bootloader}
32952 bootloader and boot it with QEMU:
32953
32954 @example
32955 image=$(guix system image --image-type=qcow2 \
32956 gnu/system/examples/lightweight-desktop.tmpl)
32957 cp $image /tmp/my-image.qcow2
32958 chmod +w /tmp/my-image.qcow2
32959 qemu-system-x86_64 -enable-kvm -hda /tmp/my-image.qcow2 -m 1000 \
32960 -bios $(guix build ovmf)/share/firmware/ovmf_x64.bin
32961 @end example
32962
32963 When using the @code{efi-raw} image type, a raw disk image is produced;
32964 it can be copied as is to a USB stick, for instance. Assuming
32965 @code{/dev/sdc} is the device corresponding to a USB stick, one can copy
32966 the image to it using the following command:
32967
32968 @example
32969 # dd if=$(guix system image my-os.scm) of=/dev/sdc status=progress
32970 @end example
32971
32972 The @code{--list-image-types} command lists all the available image
32973 types.
32974
32975 @cindex creating virtual machine images
32976 When using the @code{qcow2} image type, the returned image is in qcow2
32977 format, which the QEMU emulator can efficiently use. @xref{Running Guix
32978 in a VM}, for more information on how to run the image in a virtual
32979 machine. The @code{grub-bootloader} bootloader is always used
32980 independently of what is declared in the @code{operating-system} file
32981 passed as argument. This is to make it easier to work with QEMU, which
32982 uses the SeaBIOS BIOS by default, expecting a bootloader to be installed
32983 in the Master Boot Record (MBR).
32984
32985 @cindex docker-image, creating docker images
32986 When using @code{docker-image}, a Docker image is produced. Guix builds
32987 the image from scratch, not from a pre-existing Docker base image. As a
32988 result, it contains @emph{exactly} what you define in the operating
32989 system configuration file. You can then load the image and launch a
32990 Docker container using commands like the following:
32991
32992 @example
32993 image_id="$(docker load < guix-system-docker-image.tar.gz)"
32994 container_id="$(docker create $image_id)"
32995 docker start $container_id
32996 @end example
32997
32998 This command starts a new Docker container from the specified image. It
32999 will boot the Guix system in the usual manner, which means it will
33000 start any services you have defined in the operating system
33001 configuration. You can get an interactive shell running in the container
33002 using @command{docker exec}:
33003
33004 @example
33005 docker exec -ti $container_id /run/current-system/profile/bin/bash --login
33006 @end example
33007
33008 Depending on what you run in the Docker container, it
33009 may be necessary to give the container additional permissions. For
33010 example, if you intend to build software using Guix inside of the Docker
33011 container, you may need to pass the @option{--privileged} option to
33012 @code{docker create}.
33013
33014 Last, the @option{--network} option applies to @command{guix system
33015 docker-image}: it produces an image where network is supposedly shared
33016 with the host, and thus without services like nscd or NetworkManager.
33017
33018 @item container
33019 Return a script to run the operating system declared in @var{file}
33020 within a container. Containers are a set of lightweight isolation
33021 mechanisms provided by the kernel Linux-libre. Containers are
33022 substantially less resource-demanding than full virtual machines since
33023 the kernel, shared objects, and other resources can be shared with the
33024 host system; this also means they provide thinner isolation.
33025
33026 Currently, the script must be run as root in order to support more than
33027 a single user and group. The container shares its store with the host
33028 system.
33029
33030 As with the @code{vm} action (@pxref{guix system vm}), additional file
33031 systems to be shared between the host and container can be specified
33032 using the @option{--share} and @option{--expose} options:
33033
33034 @example
33035 guix system container my-config.scm \
33036 --expose=$HOME --share=$HOME/tmp=/exchange
33037 @end example
33038
33039 @quotation Note
33040 This option requires Linux-libre 3.19 or newer.
33041 @end quotation
33042
33043 @end table
33044
33045 @var{options} can contain any of the common build options (@pxref{Common
33046 Build Options}). In addition, @var{options} can contain one of the
33047 following:
33048
33049 @table @option
33050 @item --expression=@var{expr}
33051 @itemx -e @var{expr}
33052 Consider the operating-system @var{expr} evaluates to.
33053 This is an alternative to specifying a file which evaluates to an
33054 operating system.
33055 This is used to generate the Guix system installer @pxref{Building the
33056 Installation Image}).
33057
33058 @item --system=@var{system}
33059 @itemx -s @var{system}
33060 Attempt to build for @var{system} instead of the host system type.
33061 This works as per @command{guix build} (@pxref{Invoking guix build}).
33062
33063 @item --derivation
33064 @itemx -d
33065 Return the derivation file name of the given operating system without
33066 building anything.
33067
33068 @cindex provenance tracking, of the operating system
33069 @item --save-provenance
33070 As discussed above, @command{guix system init} and @command{guix system
33071 reconfigure} always save provenance information @i{via} a dedicated
33072 service (@pxref{Service Reference, @code{provenance-service-type}}).
33073 However, other commands don't do that by default. If you wish to, say,
33074 create a virtual machine image that contains provenance information, you
33075 can run:
33076
33077 @example
33078 guix system image -t qcow2 --save-provenance config.scm
33079 @end example
33080
33081 That way, the resulting image will effectively ``embed its own source''
33082 in the form of meta-data in @file{/run/current-system}. With that
33083 information, one can rebuild the image to make sure it really contains
33084 what it pretends to contain; or they could use that to derive a variant
33085 of the image.
33086
33087 @item --image-type=@var{type}
33088 @itemx -t @var{type}
33089 For the @code{image} action, create an image with given @var{type}.
33090
33091 When this option is omitted, @command{guix system} uses the
33092 @code{efi-raw} image type.
33093
33094 @cindex ISO-9660 format
33095 @cindex CD image format
33096 @cindex DVD image format
33097 @option{--image-type=iso9660} produces an ISO-9660 image, suitable
33098 for burning on CDs and DVDs.
33099
33100 @item --image-size=@var{size}
33101 For the @code{image} action, create an image of the given @var{size}.
33102 @var{size} may be a number of bytes, or it may include a unit as a
33103 suffix (@pxref{Block size, size specifications,, coreutils, GNU
33104 Coreutils}).
33105
33106 When this option is omitted, @command{guix system} computes an estimate
33107 of the image size as a function of the size of the system declared in
33108 @var{file}.
33109
33110 @item --network
33111 @itemx -N
33112 For the @code{container} action, allow containers to access the host network,
33113 that is, do not create a network namespace.
33114
33115 @item --root=@var{file}
33116 @itemx -r @var{file}
33117 Make @var{file} a symlink to the result, and register it as a garbage
33118 collector root.
33119
33120 @item --skip-checks
33121 Skip pre-installation safety checks.
33122
33123 By default, @command{guix system init} and @command{guix system
33124 reconfigure} perform safety checks: they make sure the file systems that
33125 appear in the @code{operating-system} declaration actually exist
33126 (@pxref{File Systems}), and that any Linux kernel modules that may be
33127 needed at boot time are listed in @code{initrd-modules} (@pxref{Initial
33128 RAM Disk}). Passing this option skips these tests altogether.
33129
33130 @item --allow-downgrades
33131 Instruct @command{guix system reconfigure} to allow system downgrades.
33132
33133 By default, @command{reconfigure} prevents you from downgrading your
33134 system. It achieves that by comparing the provenance info of your
33135 system (shown by @command{guix system describe}) with that of your
33136 @command{guix} command (shown by @command{guix describe}). If the
33137 commits for @command{guix} are not descendants of those used for your
33138 system, @command{guix system reconfigure} errors out. Passing
33139 @option{--allow-downgrades} allows you to bypass these checks.
33140
33141 @quotation Note
33142 Make sure you understand its security implications before using
33143 @option{--allow-downgrades}.
33144 @end quotation
33145
33146 @cindex on-error
33147 @cindex on-error strategy
33148 @cindex error strategy
33149 @item --on-error=@var{strategy}
33150 Apply @var{strategy} when an error occurs when reading @var{file}.
33151 @var{strategy} may be one of the following:
33152
33153 @table @code
33154 @item nothing-special
33155 Report the error concisely and exit. This is the default strategy.
33156
33157 @item backtrace
33158 Likewise, but also display a backtrace.
33159
33160 @item debug
33161 Report the error and enter Guile's debugger. From there, you can run
33162 commands such as @code{,bt} to get a backtrace, @code{,locals} to
33163 display local variable values, and more generally inspect the state of the
33164 program. @xref{Debug Commands,,, guile, GNU Guile Reference Manual}, for
33165 a list of available debugging commands.
33166 @end table
33167 @end table
33168
33169 Once you have built, configured, re-configured, and re-re-configured
33170 your Guix installation, you may find it useful to list the operating
33171 system generations available on disk---and that you can choose from the
33172 bootloader boot menu:
33173
33174 @table @code
33175
33176 @item describe
33177 Describe the current system generation: its file name, the kernel and
33178 bootloader used, etc., as well as provenance information when available.
33179
33180 @item list-generations
33181 List a summary of each generation of the operating system available on
33182 disk, in a human-readable way. This is similar to the
33183 @option{--list-generations} option of @command{guix package}
33184 (@pxref{Invoking guix package}).
33185
33186 Optionally, one can specify a pattern, with the same syntax that is used
33187 in @command{guix package --list-generations}, to restrict the list of
33188 generations displayed. For instance, the following command displays
33189 generations that are up to 10 days old:
33190
33191 @example
33192 $ guix system list-generations 10d
33193 @end example
33194
33195 @end table
33196
33197 The @command{guix system} command has even more to offer! The following
33198 sub-commands allow you to visualize how your system services relate to
33199 each other:
33200
33201 @anchor{system-extension-graph}
33202 @table @code
33203
33204 @item extension-graph
33205 Emit to standard output the @dfn{service
33206 extension graph} of the operating system defined in @var{file}
33207 (@pxref{Service Composition}, for more information on service
33208 extensions). By default the output is in Dot/Graphviz format, but you
33209 can choose a different format with @option{--graph-backend}, as with
33210 @command{guix graph} (@pxref{Invoking guix graph, @option{--backend}}):
33211
33212 The command:
33213
33214 @example
33215 $ guix system extension-graph @var{file} | xdot -
33216 @end example
33217
33218 shows the extension relations among services.
33219
33220 @anchor{system-shepherd-graph}
33221 @item shepherd-graph
33222 Emit to standard output the @dfn{dependency
33223 graph} of shepherd services of the operating system defined in
33224 @var{file}. @xref{Shepherd Services}, for more information and for an
33225 example graph.
33226
33227 Again, the default output format is Dot/Graphviz, but you can pass
33228 @option{--graph-backend} to select a different one.
33229
33230 @end table
33231
33232 @node Invoking guix deploy
33233 @section Invoking @code{guix deploy}
33234
33235 We've already seen @code{operating-system} declarations used to manage a
33236 machine's configuration locally. Suppose you need to configure multiple
33237 machines, though---perhaps you're managing a service on the web that's
33238 comprised of several servers. @command{guix deploy} enables you to use those
33239 same @code{operating-system} declarations to manage multiple remote hosts at
33240 once as a logical ``deployment''.
33241
33242 @quotation Note
33243 The functionality described in this section is still under development
33244 and is subject to change. Get in touch with us on
33245 @email{guix-devel@@gnu.org}!
33246 @end quotation
33247
33248 @example
33249 guix deploy @var{file}
33250 @end example
33251
33252 Such an invocation will deploy the machines that the code within @var{file}
33253 evaluates to. As an example, @var{file} might contain a definition like this:
33254
33255 @lisp
33256 ;; This is a Guix deployment of a "bare bones" setup, with
33257 ;; no X11 display server, to a machine with an SSH daemon
33258 ;; listening on localhost:2222. A configuration such as this
33259 ;; may be appropriate for virtual machine with ports
33260 ;; forwarded to the host's loopback interface.
33261
33262 (use-service-modules networking ssh)
33263 (use-package-modules bootloaders)
33264
33265 (define %system
33266 (operating-system
33267 (host-name "gnu-deployed")
33268 (timezone "Etc/UTC")
33269 (bootloader (bootloader-configuration
33270 (bootloader grub-bootloader)
33271 (target "/dev/vda")
33272 (terminal-outputs '(console))))
33273 (file-systems (cons (file-system
33274 (mount-point "/")
33275 (device "/dev/vda1")
33276 (type "ext4"))
33277 %base-file-systems))
33278 (services
33279 (append (list (service dhcp-client-service-type)
33280 (service openssh-service-type
33281 (openssh-configuration
33282 (permit-root-login #t)
33283 (allow-empty-passwords? #t))))
33284 %base-services))))
33285
33286 (list (machine
33287 (operating-system %system)
33288 (environment managed-host-environment-type)
33289 (configuration (machine-ssh-configuration
33290 (host-name "localhost")
33291 (system "x86_64-linux")
33292 (user "alice")
33293 (identity "./id_rsa")
33294 (port 2222)))))
33295 @end lisp
33296
33297 The file should evaluate to a list of @var{machine} objects. This example,
33298 upon being deployed, will create a new generation on the remote system
33299 realizing the @code{operating-system} declaration @code{%system}.
33300 @code{environment} and @code{configuration} specify how the machine should be
33301 provisioned---that is, how the computing resources should be created and
33302 managed. The above example does not create any resources, as a
33303 @code{'managed-host} is a machine that is already running the Guix system and
33304 available over the network. This is a particularly simple case; a more
33305 complex deployment may involve, for example, starting virtual machines through
33306 a Virtual Private Server (VPS) provider. In such a case, a different
33307 @var{environment} type would be used.
33308
33309 Do note that you first need to generate a key pair on the coordinator machine
33310 to allow the daemon to export signed archives of files from the store
33311 (@pxref{Invoking guix archive}), though this step is automatic on Guix
33312 System:
33313
33314 @example
33315 # guix archive --generate-key
33316 @end example
33317
33318 @noindent
33319 Each target machine must authorize the key of the master machine so that it
33320 accepts store items it receives from the coordinator:
33321
33322 @example
33323 # guix archive --authorize < coordinator-public-key.txt
33324 @end example
33325
33326 @code{user}, in this example, specifies the name of the user account to log in
33327 as to perform the deployment. Its default value is @code{root}, but root
33328 login over SSH may be forbidden in some cases. To work around this,
33329 @command{guix deploy} can log in as an unprivileged user and employ
33330 @code{sudo} to escalate privileges. This will only work if @code{sudo} is
33331 currently installed on the remote and can be invoked non-interactively as
33332 @code{user}. That is, the line in @code{sudoers} granting @code{user} the
33333 ability to use @code{sudo} must contain the @code{NOPASSWD} tag. This can
33334 be accomplished with the following operating system configuration snippet:
33335
33336 @lisp
33337 (use-modules ...
33338 (gnu system)) ;for %sudoers-specification
33339
33340 (define %user "username")
33341
33342 (operating-system
33343 ...
33344 (sudoers-file
33345 (plain-file "sudoers"
33346 (string-append (plain-file-content %sudoers-specification)
33347 (format #f "~a ALL = NOPASSWD: ALL~%"
33348 %user)))))
33349
33350 @end lisp
33351
33352 For more information regarding the format of the @file{sudoers} file,
33353 consult @command{man sudoers}.
33354
33355 @deftp {Data Type} machine
33356 This is the data type representing a single machine in a heterogeneous Guix
33357 deployment.
33358
33359 @table @asis
33360 @item @code{operating-system}
33361 The object of the operating system configuration to deploy.
33362
33363 @item @code{environment}
33364 An @code{environment-type} describing how the machine should be provisioned.
33365
33366 @item @code{configuration} (default: @code{#f})
33367 An object describing the configuration for the machine's @code{environment}.
33368 If the @code{environment} has a default configuration, @code{#f} may be used.
33369 If @code{#f} is used for an environment with no default configuration,
33370 however, an error will be thrown.
33371 @end table
33372 @end deftp
33373
33374 @deftp {Data Type} machine-ssh-configuration
33375 This is the data type representing the SSH client parameters for a machine
33376 with an @code{environment} of @code{managed-host-environment-type}.
33377
33378 @table @asis
33379 @item @code{host-name}
33380 @item @code{build-locally?} (default: @code{#t})
33381 If false, system derivations will be built on the machine being deployed to.
33382 @item @code{system}
33383 The system type describing the architecture of the machine being deployed
33384 to---e.g., @code{"x86_64-linux"}.
33385 @item @code{authorize?} (default: @code{#t})
33386 If true, the coordinator's signing key will be added to the remote's ACL
33387 keyring.
33388 @item @code{port} (default: @code{22})
33389 @item @code{user} (default: @code{"root"})
33390 @item @code{identity} (default: @code{#f})
33391 If specified, the path to the SSH private key to use to authenticate with the
33392 remote host.
33393
33394 @item @code{host-key} (default: @code{#f})
33395 This should be the SSH host key of the machine, which looks like this:
33396
33397 @example
33398 ssh-ed25519 AAAAC3Nz@dots{} root@@example.org
33399 @end example
33400
33401 When @code{host-key} is @code{#f}, the server is authenticated against
33402 the @file{~/.ssh/known_hosts} file, just like the OpenSSH @command{ssh}
33403 client does.
33404
33405 @item @code{allow-downgrades?} (default: @code{#f})
33406 Whether to allow potential downgrades.
33407
33408 Like @command{guix system reconfigure}, @command{guix deploy} compares
33409 the channel commits currently deployed on the remote host (as returned
33410 by @command{guix system describe}) to those currently in use (as
33411 returned by @command{guix describe}) to determine whether commits
33412 currently in use are descendants of those deployed. When this is not
33413 the case and @code{allow-downgrades?} is false, it raises an error.
33414 This ensures you do not accidentally downgrade remote machines.
33415 @end table
33416 @end deftp
33417
33418 @deftp {Data Type} digital-ocean-configuration
33419 This is the data type describing the Droplet that should be created for a
33420 machine with an @code{environment} of @code{digital-ocean-environment-type}.
33421
33422 @table @asis
33423 @item @code{ssh-key}
33424 The path to the SSH private key to use to authenticate with the remote
33425 host. In the future, this field may not exist.
33426 @item @code{tags}
33427 A list of string ``tags'' that uniquely identify the machine. Must be given
33428 such that no two machines in the deployment have the same set of tags.
33429 @item @code{region}
33430 A Digital Ocean region slug, such as @code{"nyc3"}.
33431 @item @code{size}
33432 A Digital Ocean size slug, such as @code{"s-1vcpu-1gb"}
33433 @item @code{enable-ipv6?}
33434 Whether or not the droplet should be created with IPv6 networking.
33435 @end table
33436 @end deftp
33437
33438 @node Running Guix in a VM
33439 @section Running Guix in a Virtual Machine
33440
33441 @cindex virtual machine
33442 To run Guix in a virtual machine (VM), one can use the pre-built Guix VM image
33443 distributed at
33444 @url{@value{BASE-URL}/guix-system-vm-image-@value{VERSION}.x86_64-linux.xz}.
33445 This image is a compressed image in QCOW format. You will first need to
33446 decompress with @command{xz -d}, and then you can pass it to an emulator such
33447 as QEMU (see below for details).
33448
33449 This image boots the Xfce graphical environment and it contains some
33450 commonly used tools. You can install more software in the image by running
33451 @command{guix package} in a terminal (@pxref{Invoking guix package}). You can
33452 also reconfigure the system based on its initial configuration file available
33453 as @file{/run/current-system/configuration.scm} (@pxref{Using the
33454 Configuration System}).
33455
33456 Instead of using this pre-built image, one can also build their own virtual
33457 machine image using @command{guix system vm-image} (@pxref{Invoking guix
33458 system}). The returned image is in qcow2 format, which the
33459 @uref{https://qemu.org/, QEMU emulator} can efficiently use.
33460
33461 @cindex QEMU
33462 If you built your own image, you must copy it out of the store
33463 (@pxref{The Store}) and give yourself permission to write to the copy
33464 before you can use it. When invoking QEMU, you must choose a system
33465 emulator that is suitable for your hardware platform. Here is a minimal
33466 QEMU invocation that will boot the result of @command{guix system
33467 image -t qcow2} on x86_64 hardware:
33468
33469 @example
33470 $ qemu-system-x86_64 \
33471 -nic user,model=virtio-net-pci \
33472 -enable-kvm -m 1024 \
33473 -device virtio-blk,drive=myhd \
33474 -drive if=none,file=/tmp/qemu-image,id=myhd
33475 @end example
33476
33477 Here is what each of these options means:
33478
33479 @table @code
33480 @item qemu-system-x86_64
33481 This specifies the hardware platform to emulate. This should match the
33482 host.
33483
33484 @item -nic user,model=virtio-net-pci
33485 Enable the unprivileged user-mode network stack. The guest OS can
33486 access the host but not vice versa. This is the simplest way to get the
33487 guest OS online. @code{model} specifies which network device to emulate:
33488 @code{virtio-net-pci} is a special device made for virtualized operating
33489 systems and recommended for most uses. Assuming your hardware platform is
33490 x86_64, you can get a list of available NIC models by running
33491 @command{qemu-system-x86_64 -nic model=help}.
33492
33493 @item -enable-kvm
33494 If your system has hardware virtualization extensions, enabling the
33495 virtual machine support (KVM) of the Linux kernel will make things run
33496 faster.
33497
33498 @c To run Xfce + 'guix pull', we need at least 1G of RAM.
33499 @item -m 1024
33500 RAM available to the guest OS, in mebibytes. Defaults to 128@tie{}MiB,
33501 which may be insufficient for some operations.
33502
33503 @item -device virtio-blk,drive=myhd
33504 Create a @code{virtio-blk} drive called ``myhd''. @code{virtio-blk} is a
33505 ``paravirtualization'' mechanism for block devices that allows QEMU to achieve
33506 better performance than if it were emulating a complete disk drive. See the
33507 QEMU and KVM documentation for more info.
33508
33509 @item -drive if=none,file=/tmp/qemu-image,id=myhd
33510 Use our QCOW image, the @file{/tmp/qemu-image} file, as the backing
33511 store of the ``myhd'' drive.
33512 @end table
33513
33514 The default @command{run-vm.sh} script that is returned by an invocation of
33515 @command{guix system vm} does not add a @command{-nic user} flag by default.
33516 To get network access from within the vm add the @code{(dhcp-client-service)}
33517 to your system definition and start the VM using
33518 @command{$(guix system vm config.scm) -nic user}. An important caveat of using
33519 @command{-nic user} for networking is that @command{ping} will not work, because
33520 it uses the ICMP protocol. You'll have to use a different command to check for
33521 network connectivity, for example @command{guix download}.
33522
33523 @subsection Connecting Through SSH
33524
33525 @cindex SSH
33526 @cindex SSH server
33527 To enable SSH inside a VM you need to add an SSH server like
33528 @code{openssh-service-type} to your VM (@pxref{Networking Services,
33529 @code{openssh-service-type}}). In addition you need to forward the SSH port,
33530 22 by default, to the host. You can do this with
33531
33532 @example
33533 $(guix system vm config.scm) -nic user,model=virtio-net-pci,hostfwd=tcp::10022-:22
33534 @end example
33535
33536 To connect to the VM you can run
33537
33538 @example
33539 ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 10022 localhost
33540 @end example
33541
33542 The @command{-p} tells @command{ssh} the port you want to connect to.
33543 @command{-o UserKnownHostsFile=/dev/null} prevents @command{ssh} from complaining
33544 every time you modify your @command{config.scm} file and the
33545 @command{-o StrictHostKeyChecking=no} prevents you from having to allow a
33546 connection to an unknown host every time you connect.
33547
33548 @subsection Using @command{virt-viewer} with Spice
33549
33550 As an alternative to the default @command{qemu} graphical client you can
33551 use the @command{remote-viewer} from the @command{virt-viewer} package. To
33552 connect pass the @command{-spice port=5930,disable-ticketing} flag to
33553 @command{qemu}. See previous section for further information on how to do this.
33554
33555 Spice also allows you to do some nice stuff like share your clipboard with your
33556 VM@. To enable that you'll also have to pass the following flags to @command{qemu}:
33557
33558 @example
33559 -device virtio-serial-pci,id=virtio-serial0,max_ports=16,bus=pci.0,addr=0x5
33560 -chardev spicevmc,name=vdagent,id=vdagent
33561 -device virtserialport,nr=1,bus=virtio-serial0.0,chardev=vdagent,
33562 name=com.redhat.spice.0
33563 @end example
33564
33565 You'll also need to add the @code{(spice-vdagent-service)} to your
33566 system definition (@pxref{Miscellaneous Services, Spice service}).
33567
33568 @node Defining Services
33569 @section Defining Services
33570
33571 The previous sections show the available services and how one can combine
33572 them in an @code{operating-system} declaration. But how do we define
33573 them in the first place? And what is a service anyway?
33574
33575 @menu
33576 * Service Composition:: The model for composing services.
33577 * Service Types and Services:: Types and services.
33578 * Service Reference:: API reference.
33579 * Shepherd Services:: A particular type of service.
33580 @end menu
33581
33582 @node Service Composition
33583 @subsection Service Composition
33584
33585 @cindex services
33586 @cindex daemons
33587 Here we define a @dfn{service} as, broadly, something that extends the
33588 functionality of the operating system. Often a service is a process---a
33589 @dfn{daemon}---started when the system boots: a secure shell server, a
33590 Web server, the Guix build daemon, etc. Sometimes a service is a daemon
33591 whose execution can be triggered by another daemon---e.g., an FTP server
33592 started by @command{inetd} or a D-Bus service activated by
33593 @command{dbus-daemon}. Occasionally, a service does not map to a
33594 daemon. For instance, the ``account'' service collects user accounts
33595 and makes sure they exist when the system runs; the ``udev'' service
33596 collects device management rules and makes them available to the eudev
33597 daemon; the @file{/etc} service populates the @file{/etc} directory
33598 of the system.
33599
33600 @cindex service extensions
33601 Guix system services are connected by @dfn{extensions}. For instance, the
33602 secure shell service @emph{extends} the Shepherd---the
33603 initialization system, running as PID@tie{}1---by giving it the command
33604 lines to start and stop the secure shell daemon (@pxref{Networking
33605 Services, @code{openssh-service-type}}); the UPower service extends the D-Bus
33606 service by passing it its @file{.service} specification, and extends the
33607 udev service by passing it device management rules (@pxref{Desktop
33608 Services, @code{upower-service}}); the Guix daemon service extends the
33609 Shepherd by passing it the command lines to start and stop the daemon,
33610 and extends the account service by passing it a list of required build
33611 user accounts (@pxref{Base Services}).
33612
33613 All in all, services and their ``extends'' relations form a directed
33614 acyclic graph (DAG). If we represent services as boxes and extensions
33615 as arrows, a typical system might provide something like this:
33616
33617 @image{images/service-graph,,5in,Typical service extension graph.}
33618
33619 @cindex system service
33620 At the bottom, we see the @dfn{system service}, which produces the
33621 directory containing everything to run and boot the system, as returned
33622 by the @command{guix system build} command. @xref{Service Reference},
33623 to learn about the other service types shown here.
33624 @xref{system-extension-graph, the @command{guix system extension-graph}
33625 command}, for information on how to generate this representation for a
33626 particular operating system definition.
33627
33628 @cindex service types
33629 Technically, developers can define @dfn{service types} to express these
33630 relations. There can be any number of services of a given type on the
33631 system---for instance, a system running two instances of the GNU secure
33632 shell server (lsh) has two instances of @code{lsh-service-type}, with
33633 different parameters.
33634
33635 The following section describes the programming interface for service
33636 types and services.
33637
33638 @node Service Types and Services
33639 @subsection Service Types and Services
33640
33641 A @dfn{service type} is a node in the DAG described above. Let us start
33642 with a simple example, the service type for the Guix build daemon
33643 (@pxref{Invoking guix-daemon}):
33644
33645 @lisp
33646 (define guix-service-type
33647 (service-type
33648 (name 'guix)
33649 (extensions
33650 (list (service-extension shepherd-root-service-type guix-shepherd-service)
33651 (service-extension account-service-type guix-accounts)
33652 (service-extension activation-service-type guix-activation)))
33653 (default-value (guix-configuration))))
33654 @end lisp
33655
33656 @noindent
33657 It defines three things:
33658
33659 @enumerate
33660 @item
33661 A name, whose sole purpose is to make inspection and debugging easier.
33662
33663 @item
33664 A list of @dfn{service extensions}, where each extension designates the
33665 target service type and a procedure that, given the parameters of the
33666 service, returns a list of objects to extend the service of that type.
33667
33668 Every service type has at least one service extension. The only
33669 exception is the @dfn{boot service type}, which is the ultimate service.
33670
33671 @item
33672 Optionally, a default value for instances of this type.
33673 @end enumerate
33674
33675 In this example, @code{guix-service-type} extends three services:
33676
33677 @table @code
33678 @item shepherd-root-service-type
33679 The @code{guix-shepherd-service} procedure defines how the Shepherd
33680 service is extended. Namely, it returns a @code{<shepherd-service>}
33681 object that defines how @command{guix-daemon} is started and stopped
33682 (@pxref{Shepherd Services}).
33683
33684 @item account-service-type
33685 This extension for this service is computed by @code{guix-accounts},
33686 which returns a list of @code{user-group} and @code{user-account}
33687 objects representing the build user accounts (@pxref{Invoking
33688 guix-daemon}).
33689
33690 @item activation-service-type
33691 Here @code{guix-activation} is a procedure that returns a gexp, which is
33692 a code snippet to run at ``activation time''---e.g., when the service is
33693 booted.
33694 @end table
33695
33696 A service of this type is instantiated like this:
33697
33698 @lisp
33699 (service guix-service-type
33700 (guix-configuration
33701 (build-accounts 5)
33702 (extra-options '("--gc-keep-derivations"))))
33703 @end lisp
33704
33705 The second argument to the @code{service} form is a value representing
33706 the parameters of this specific service instance.
33707 @xref{guix-configuration-type, @code{guix-configuration}}, for
33708 information about the @code{guix-configuration} data type. When the
33709 value is omitted, the default value specified by
33710 @code{guix-service-type} is used:
33711
33712 @lisp
33713 (service guix-service-type)
33714 @end lisp
33715
33716 @code{guix-service-type} is quite simple because it extends other
33717 services but is not extensible itself.
33718
33719 @c @subsubsubsection Extensible Service Types
33720
33721 The service type for an @emph{extensible} service looks like this:
33722
33723 @lisp
33724 (define udev-service-type
33725 (service-type (name 'udev)
33726 (extensions
33727 (list (service-extension shepherd-root-service-type
33728 udev-shepherd-service)))
33729
33730 (compose concatenate) ;concatenate the list of rules
33731 (extend (lambda (config rules)
33732 (match config
33733 (($ <udev-configuration> udev initial-rules)
33734 (udev-configuration
33735 (udev udev) ;the udev package to use
33736 (rules (append initial-rules rules)))))))))
33737 @end lisp
33738
33739 This is the service type for the
33740 @uref{https://wiki.gentoo.org/wiki/Project:Eudev, eudev device
33741 management daemon}. Compared to the previous example, in addition to an
33742 extension of @code{shepherd-root-service-type}, we see two new fields:
33743
33744 @table @code
33745 @item compose
33746 This is the procedure to @dfn{compose} the list of extensions to
33747 services of this type.
33748
33749 Services can extend the udev service by passing it lists of rules; we
33750 compose those extensions simply by concatenating them.
33751
33752 @item extend
33753 This procedure defines how the value of the service is @dfn{extended} with
33754 the composition of the extensions.
33755
33756 Udev extensions are composed into a list of rules, but the udev service
33757 value is itself a @code{<udev-configuration>} record. So here, we
33758 extend that record by appending the list of rules it contains to the
33759 list of contributed rules.
33760
33761 @item description
33762 This is a string giving an overview of the service type. The string can
33763 contain Texinfo markup (@pxref{Overview,,, texinfo, GNU Texinfo}). The
33764 @command{guix system search} command searches these strings and displays
33765 them (@pxref{Invoking guix system}).
33766 @end table
33767
33768 There can be only one instance of an extensible service type such as
33769 @code{udev-service-type}. If there were more, the
33770 @code{service-extension} specifications would be ambiguous.
33771
33772 Still here? The next section provides a reference of the programming
33773 interface for services.
33774
33775 @node Service Reference
33776 @subsection Service Reference
33777
33778 We have seen an overview of service types (@pxref{Service Types and
33779 Services}). This section provides a reference on how to manipulate
33780 services and service types. This interface is provided by the
33781 @code{(gnu services)} module.
33782
33783 @deffn {Scheme Procedure} service @var{type} [@var{value}]
33784 Return a new service of @var{type}, a @code{<service-type>} object (see
33785 below). @var{value} can be any object; it represents the parameters of
33786 this particular service instance.
33787
33788 When @var{value} is omitted, the default value specified by @var{type}
33789 is used; if @var{type} does not specify a default value, an error is
33790 raised.
33791
33792 For instance, this:
33793
33794 @lisp
33795 (service openssh-service-type)
33796 @end lisp
33797
33798 @noindent
33799 is equivalent to this:
33800
33801 @lisp
33802 (service openssh-service-type
33803 (openssh-configuration))
33804 @end lisp
33805
33806 In both cases the result is an instance of @code{openssh-service-type}
33807 with the default configuration.
33808 @end deffn
33809
33810 @deffn {Scheme Procedure} service? @var{obj}
33811 Return true if @var{obj} is a service.
33812 @end deffn
33813
33814 @deffn {Scheme Procedure} service-kind @var{service}
33815 Return the type of @var{service}---i.e., a @code{<service-type>} object.
33816 @end deffn
33817
33818 @deffn {Scheme Procedure} service-value @var{service}
33819 Return the value associated with @var{service}. It represents its
33820 parameters.
33821 @end deffn
33822
33823 Here is an example of how a service is created and manipulated:
33824
33825 @lisp
33826 (define s
33827 (service nginx-service-type
33828 (nginx-configuration
33829 (nginx nginx)
33830 (log-directory log-directory)
33831 (run-directory run-directory)
33832 (file config-file))))
33833
33834 (service? s)
33835 @result{} #t
33836
33837 (eq? (service-kind s) nginx-service-type)
33838 @result{} #t
33839 @end lisp
33840
33841 The @code{modify-services} form provides a handy way to change the
33842 parameters of some of the services of a list such as
33843 @code{%base-services} (@pxref{Base Services, @code{%base-services}}). It
33844 evaluates to a list of services. Of course, you could always use
33845 standard list combinators such as @code{map} and @code{fold} to do that
33846 (@pxref{SRFI-1, List Library,, guile, GNU Guile Reference Manual});
33847 @code{modify-services} simply provides a more concise form for this
33848 common pattern.
33849
33850 @deffn {Scheme Syntax} modify-services @var{services} @
33851 (@var{type} @var{variable} => @var{body}) @dots{}
33852
33853 Modify the services listed in @var{services} according to the given
33854 clauses. Each clause has the form:
33855
33856 @example
33857 (@var{type} @var{variable} => @var{body})
33858 @end example
33859
33860 where @var{type} is a service type---e.g.,
33861 @code{guix-service-type}---and @var{variable} is an identifier that is
33862 bound within the @var{body} to the service parameters---e.g., a
33863 @code{guix-configuration} instance---of the original service of that
33864 @var{type}.
33865
33866 The @var{body} should evaluate to the new service parameters, which will
33867 be used to configure the new service. This new service will replace the
33868 original in the resulting list. Because a service's service parameters
33869 are created using @code{define-record-type*}, you can write a succinct
33870 @var{body} that evaluates to the new service parameters by using the
33871 @code{inherit} feature that @code{define-record-type*} provides.
33872
33873 @xref{Using the Configuration System}, for example usage.
33874
33875 @end deffn
33876
33877 Next comes the programming interface for service types. This is
33878 something you want to know when writing new service definitions, but not
33879 necessarily when simply looking for ways to customize your
33880 @code{operating-system} declaration.
33881
33882 @deftp {Data Type} service-type
33883 @cindex service type
33884 This is the representation of a @dfn{service type} (@pxref{Service Types
33885 and Services}).
33886
33887 @table @asis
33888 @item @code{name}
33889 This is a symbol, used only to simplify inspection and debugging.
33890
33891 @item @code{extensions}
33892 A non-empty list of @code{<service-extension>} objects (see below).
33893
33894 @item @code{compose} (default: @code{#f})
33895 If this is @code{#f}, then the service type denotes services that cannot
33896 be extended---i.e., services that do not receive ``values'' from other
33897 services.
33898
33899 Otherwise, it must be a one-argument procedure. The procedure is called
33900 by @code{fold-services} and is passed a list of values collected from
33901 extensions. It may return any single value.
33902
33903 @item @code{extend} (default: @code{#f})
33904 If this is @code{#f}, services of this type cannot be extended.
33905
33906 Otherwise, it must be a two-argument procedure: @code{fold-services}
33907 calls it, passing it the initial value of the service as the first
33908 argument and the result of applying @code{compose} to the extension
33909 values as the second argument. It must return a value that is a valid
33910 parameter value for the service instance.
33911
33912 @item @code{description}
33913 This is a string, possibly using Texinfo markup, describing in a couple
33914 of sentences what the service is about. This string allows users to
33915 find about the service through @command{guix system search}
33916 (@pxref{Invoking guix system}).
33917
33918 @item @code{default-value} (default: @code{&no-default-value})
33919 The default value associated for instances of this service type. This
33920 allows users to use the @code{service} form without its second argument:
33921
33922 @lisp
33923 (service @var{type})
33924 @end lisp
33925
33926 The returned service in this case has the default value specified by
33927 @var{type}.
33928 @end table
33929
33930 @xref{Service Types and Services}, for examples.
33931 @end deftp
33932
33933 @deffn {Scheme Procedure} service-extension @var{target-type} @
33934 @var{compute}
33935 Return a new extension for services of type @var{target-type}.
33936 @var{compute} must be a one-argument procedure: @code{fold-services}
33937 calls it, passing it the value associated with the service that provides
33938 the extension; it must return a valid value for the target service.
33939 @end deffn
33940
33941 @deffn {Scheme Procedure} service-extension? @var{obj}
33942 Return true if @var{obj} is a service extension.
33943 @end deffn
33944
33945 Occasionally, you might want to simply extend an existing service. This
33946 involves creating a new service type and specifying the extension of
33947 interest, which can be verbose; the @code{simple-service} procedure
33948 provides a shorthand for this.
33949
33950 @deffn {Scheme Procedure} simple-service @var{name} @var{target} @var{value}
33951 Return a service that extends @var{target} with @var{value}. This works
33952 by creating a singleton service type @var{name}, of which the returned
33953 service is an instance.
33954
33955 For example, this extends mcron (@pxref{Scheduled Job Execution}) with
33956 an additional job:
33957
33958 @lisp
33959 (simple-service 'my-mcron-job mcron-service-type
33960 #~(job '(next-hour (3)) "guix gc -F 2G"))
33961 @end lisp
33962 @end deffn
33963
33964 At the core of the service abstraction lies the @code{fold-services}
33965 procedure, which is responsible for ``compiling'' a list of services
33966 down to a single directory that contains everything needed to boot and
33967 run the system---the directory shown by the @command{guix system build}
33968 command (@pxref{Invoking guix system}). In essence, it propagates
33969 service extensions down the service graph, updating each node parameters
33970 on the way, until it reaches the root node.
33971
33972 @deffn {Scheme Procedure} fold-services @var{services} @
33973 [#:target-type @var{system-service-type}]
33974 Fold @var{services} by propagating their extensions down to the root of
33975 type @var{target-type}; return the root service adjusted accordingly.
33976 @end deffn
33977
33978 Lastly, the @code{(gnu services)} module also defines several essential
33979 service types, some of which are listed below.
33980
33981 @defvr {Scheme Variable} system-service-type
33982 This is the root of the service graph. It produces the system directory
33983 as returned by the @command{guix system build} command.
33984 @end defvr
33985
33986 @defvr {Scheme Variable} boot-service-type
33987 The type of the ``boot service'', which produces the @dfn{boot script}.
33988 The boot script is what the initial RAM disk runs when booting.
33989 @end defvr
33990
33991 @defvr {Scheme Variable} etc-service-type
33992 The type of the @file{/etc} service. This service is used to create
33993 files under @file{/etc} and can be extended by
33994 passing it name/file tuples such as:
33995
33996 @lisp
33997 (list `("issue" ,(plain-file "issue" "Welcome!\n")))
33998 @end lisp
33999
34000 In this example, the effect would be to add an @file{/etc/issue} file
34001 pointing to the given file.
34002 @end defvr
34003
34004 @defvr {Scheme Variable} setuid-program-service-type
34005 Type for the ``setuid-program service''. This service collects lists of
34006 executable file names, passed as gexps, and adds them to the set of
34007 setuid-root programs on the system (@pxref{Setuid Programs}).
34008 @end defvr
34009
34010 @defvr {Scheme Variable} profile-service-type
34011 Type of the service that populates the @dfn{system profile}---i.e., the
34012 programs under @file{/run/current-system/profile}. Other services can
34013 extend it by passing it lists of packages to add to the system profile.
34014 @end defvr
34015
34016 @cindex provenance tracking, of the operating system
34017 @anchor{provenance-service-type}
34018 @defvr {Scheme Variable} provenance-service-type
34019 This is the type of the service that records @dfn{provenance meta-data}
34020 in the system itself. It creates several files under
34021 @file{/run/current-system}:
34022
34023 @table @file
34024 @item channels.scm
34025 This is a ``channel file'' that can be passed to @command{guix pull -C}
34026 or @command{guix time-machine -C}, and which describes the channels used
34027 to build the system, if that information was available
34028 (@pxref{Channels}).
34029
34030 @item configuration.scm
34031 This is the file that was passed as the value for this
34032 @code{provenance-service-type} service. By default, @command{guix
34033 system reconfigure} automatically passes the OS configuration file it
34034 received on the command line.
34035
34036 @item provenance
34037 This contains the same information as the two other files but in a
34038 format that is more readily processable.
34039 @end table
34040
34041 In general, these two pieces of information (channels and configuration
34042 file) are enough to reproduce the operating system ``from source''.
34043
34044 @quotation Caveats
34045 This information is necessary to rebuild your operating system, but it
34046 is not always sufficient. In particular, @file{configuration.scm}
34047 itself is insufficient if it is not self-contained---if it refers to
34048 external Guile modules or to extra files. If you want
34049 @file{configuration.scm} to be self-contained, we recommend that modules
34050 or files it refers to be part of a channel.
34051
34052 Besides, provenance meta-data is ``silent'' in the sense that it does
34053 not change the bits contained in your system, @emph{except for the
34054 meta-data bits themselves}. Two different OS configurations or sets of
34055 channels can lead to the same system, bit-for-bit; when
34056 @code{provenance-service-type} is used, these two systems will have
34057 different meta-data and thus different store file names, which makes
34058 comparison less trivial.
34059 @end quotation
34060
34061 This service is automatically added to your operating system
34062 configuration when you use @command{guix system reconfigure},
34063 @command{guix system init}, or @command{guix deploy}.
34064 @end defvr
34065
34066 @node Shepherd Services
34067 @subsection Shepherd Services
34068
34069 @cindex shepherd services
34070 @cindex PID 1
34071 @cindex init system
34072 The @code{(gnu services shepherd)} module provides a way to define
34073 services managed by the GNU@tie{}Shepherd, which is the
34074 initialization system---the first process that is started when the
34075 system boots, also known as PID@tie{}1
34076 (@pxref{Introduction,,, shepherd, The GNU Shepherd Manual}).
34077
34078 Services in the Shepherd can depend on each other. For instance, the
34079 SSH daemon may need to be started after the syslog daemon has been
34080 started, which in turn can only happen once all the file systems have
34081 been mounted. The simple operating system defined earlier (@pxref{Using
34082 the Configuration System}) results in a service graph like this:
34083
34084 @image{images/shepherd-graph,,5in,Typical shepherd service graph.}
34085
34086 You can actually generate such a graph for any operating system
34087 definition using the @command{guix system shepherd-graph} command
34088 (@pxref{system-shepherd-graph, @command{guix system shepherd-graph}}).
34089
34090 The @code{%shepherd-root-service} is a service object representing
34091 PID@tie{}1, of type @code{shepherd-root-service-type}; it can be extended
34092 by passing it lists of @code{<shepherd-service>} objects.
34093
34094 @deftp {Data Type} shepherd-service
34095 The data type representing a service managed by the Shepherd.
34096
34097 @table @asis
34098 @item @code{provision}
34099 This is a list of symbols denoting what the service provides.
34100
34101 These are the names that may be passed to @command{herd start},
34102 @command{herd status}, and similar commands (@pxref{Invoking herd,,,
34103 shepherd, The GNU Shepherd Manual}). @xref{Slots of services, the
34104 @code{provides} slot,, shepherd, The GNU Shepherd Manual}, for details.
34105
34106 @item @code{requirement} (default: @code{'()})
34107 List of symbols denoting the Shepherd services this one depends on.
34108
34109 @cindex one-shot services, for the Shepherd
34110 @item @code{one-shot?} (default: @code{#f})
34111 Whether this service is @dfn{one-shot}. One-shot services stop immediately
34112 after their @code{start} action has completed. @xref{Slots of services,,,
34113 shepherd, The GNU Shepherd Manual}, for more info.
34114
34115 @item @code{respawn?} (default: @code{#t})
34116 Whether to restart the service when it stops, for instance when the
34117 underlying process dies.
34118
34119 @item @code{start}
34120 @itemx @code{stop} (default: @code{#~(const #f)})
34121 The @code{start} and @code{stop} fields refer to the Shepherd's
34122 facilities to start and stop processes (@pxref{Service De- and
34123 Constructors,,, shepherd, The GNU Shepherd Manual}). They are given as
34124 G-expressions that get expanded in the Shepherd configuration file
34125 (@pxref{G-Expressions}).
34126
34127 @item @code{actions} (default: @code{'()})
34128 @cindex actions, of Shepherd services
34129 This is a list of @code{shepherd-action} objects (see below) defining
34130 @dfn{actions} supported by the service, in addition to the standard
34131 @code{start} and @code{stop} actions. Actions listed here become available as
34132 @command{herd} sub-commands:
34133
34134 @example
34135 herd @var{action} @var{service} [@var{arguments}@dots{}]
34136 @end example
34137
34138 @item @code{auto-start?} (default: @code{#t})
34139 Whether this service should be started automatically by the Shepherd. If it
34140 is @code{#f} the service has to be started manually with @code{herd start}.
34141
34142 @item @code{documentation}
34143 A documentation string, as shown when running:
34144
34145 @example
34146 herd doc @var{service-name}
34147 @end example
34148
34149 where @var{service-name} is one of the symbols in @code{provision}
34150 (@pxref{Invoking herd,,, shepherd, The GNU Shepherd Manual}).
34151
34152 @item @code{modules} (default: @code{%default-modules})
34153 This is the list of modules that must be in scope when @code{start} and
34154 @code{stop} are evaluated.
34155
34156 @end table
34157 @end deftp
34158
34159 The example below defines a Shepherd service that spawns
34160 @command{syslogd}, the system logger from the GNU Networking Utilities
34161 (@pxref{syslogd invocation, @command{syslogd},, inetutils, GNU
34162 Inetutils}):
34163
34164 @example
34165 (let ((config (plain-file "syslogd.conf" "@dots{}")))
34166 (shepherd-service
34167 (documentation "Run the syslog daemon (syslogd).")
34168 (provision '(syslogd))
34169 (requirement '(user-processes))
34170 (start #~(make-forkexec-constructor
34171 (list #$(file-append inetutils "/libexec/syslogd")
34172 "--rcfile" #$config)
34173 #:pid-file "/var/run/syslog.pid"))
34174 (stop #~(make-kill-destructor))))
34175 @end example
34176
34177 Key elements in this example are the @code{start} and @code{stop}
34178 fields: they are @dfn{staged} code snippets that use the
34179 @code{make-forkexec-constructor} procedure provided by the Shepherd and
34180 its dual, @code{make-kill-destructor} (@pxref{Service De- and
34181 Constructors,,, shepherd, The GNU Shepherd Manual}). The @code{start}
34182 field will have @command{shepherd} spawn @command{syslogd} with the
34183 given option; note that we pass @code{config} after @option{--rcfile},
34184 which is a configuration file declared above (contents of this file are
34185 omitted). Likewise, the @code{stop} field tells how this service is to
34186 be stopped; in this case, it is stopped by making the @code{kill} system
34187 call on its PID@. Code staging is achieved using G-expressions:
34188 @code{#~} stages code, while @code{#$} ``escapes'' back to host code
34189 (@pxref{G-Expressions}).
34190
34191 @deftp {Data Type} shepherd-action
34192 This is the data type that defines additional actions implemented by a
34193 Shepherd service (see above).
34194
34195 @table @code
34196 @item name
34197 Symbol naming the action.
34198
34199 @item documentation
34200 This is a documentation string for the action. It can be viewed by running:
34201
34202 @example
34203 herd doc @var{service} action @var{action}
34204 @end example
34205
34206 @item procedure
34207 This should be a gexp that evaluates to a procedure of at least one argument,
34208 which is the ``running value'' of the service (@pxref{Slots of services,,,
34209 shepherd, The GNU Shepherd Manual}).
34210 @end table
34211
34212 The following example defines an action called @code{say-hello} that kindly
34213 greets the user:
34214
34215 @lisp
34216 (shepherd-action
34217 (name 'say-hello)
34218 (documentation "Say hi!")
34219 (procedure #~(lambda (running . args)
34220 (format #t "Hello, friend! arguments: ~s\n"
34221 args)
34222 #t)))
34223 @end lisp
34224
34225 Assuming this action is added to the @code{example} service, then you can do:
34226
34227 @example
34228 # herd say-hello example
34229 Hello, friend! arguments: ()
34230 # herd say-hello example a b c
34231 Hello, friend! arguments: ("a" "b" "c")
34232 @end example
34233
34234 This, as you can see, is a fairly sophisticated way to say hello.
34235 @xref{Service Convenience,,, shepherd, The GNU Shepherd Manual}, for more
34236 info on actions.
34237 @end deftp
34238
34239 @defvr {Scheme Variable} shepherd-root-service-type
34240 The service type for the Shepherd ``root service''---i.e., PID@tie{}1.
34241
34242 This is the service type that extensions target when they want to create
34243 shepherd services (@pxref{Service Types and Services}, for an example).
34244 Each extension must pass a list of @code{<shepherd-service>}. Its
34245 value must be a @code{shepherd-configuration}, as described below.
34246 @end defvr
34247
34248 @deftp {Data Type} shepherd-configuration
34249 This data type represents the Shepherd's configuration.
34250
34251 @table @code
34252 @item shepherd (default: @code{shepherd})
34253 The Shepherd package to use.
34254
34255 @item services (default: @code{'()})
34256 A list of @code{<shepherd-service>} to start.
34257 You should probably use the service extension
34258 mechanism instead (@pxref{Shepherd Services}).
34259 @end table
34260 @end deftp
34261
34262 The following example specifies the Shepherd package for the operating
34263 system:
34264
34265 @lisp
34266 (operating-system
34267 ;; ...
34268 (services (append (list openssh-service-type))
34269 ;; ...
34270 %desktop-services)
34271 ;; ...
34272 ;; Use own Shepherd package.
34273 (essential-services
34274 (modify-services (operating-system-default-essential-services
34275 this-operating-system)
34276 (shepherd-root-service-type config => (shepherd-configuration
34277 (inherit config)
34278 (shepherd my-shepherd))))))
34279 @end lisp
34280
34281 @defvr {Scheme Variable} %shepherd-root-service
34282 This service represents PID@tie{}1.
34283 @end defvr
34284
34285
34286 @node Documentation
34287 @chapter Documentation
34288
34289 @cindex documentation, searching for
34290 @cindex searching for documentation
34291 @cindex Info, documentation format
34292 @cindex man pages
34293 @cindex manual pages
34294 In most cases packages installed with Guix come with documentation.
34295 There are two main documentation formats: ``Info'', a browsable
34296 hypertext format used for GNU software, and ``manual pages'' (or ``man
34297 pages''), the linear documentation format traditionally found on Unix.
34298 Info manuals are accessed with the @command{info} command or with Emacs,
34299 and man pages are accessed using @command{man}.
34300
34301 You can look for documentation of software installed on your system by
34302 keyword. For example, the following command searches for information
34303 about ``TLS'' in Info manuals:
34304
34305 @example
34306 $ info -k TLS
34307 "(emacs)Network Security" -- STARTTLS
34308 "(emacs)Network Security" -- TLS
34309 "(gnutls)Core TLS API" -- gnutls_certificate_set_verify_flags
34310 "(gnutls)Core TLS API" -- gnutls_certificate_set_verify_function
34311 @dots{}
34312 @end example
34313
34314 @noindent
34315 The command below searches for the same keyword in man pages:
34316
34317 @example
34318 $ man -k TLS
34319 SSL (7) - OpenSSL SSL/TLS library
34320 certtool (1) - GnuTLS certificate tool
34321 @dots {}
34322 @end example
34323
34324 These searches are purely local to your computer so you have the
34325 guarantee that documentation you find corresponds to what you have
34326 actually installed, you can access it off-line, and your privacy is
34327 respected.
34328
34329 Once you have these results, you can view the relevant documentation by
34330 running, say:
34331
34332 @example
34333 $ info "(gnutls)Core TLS API"
34334 @end example
34335
34336 @noindent
34337 or:
34338
34339 @example
34340 $ man certtool
34341 @end example
34342
34343 Info manuals contain sections and indices as well as hyperlinks like
34344 those found in Web pages. The @command{info} reader (@pxref{Top, Info
34345 reader,, info-stnd, Stand-alone GNU Info}) and its Emacs counterpart
34346 (@pxref{Misc Help,,, emacs, The GNU Emacs Manual}) provide intuitive key
34347 bindings to navigate manuals. @xref{Getting Started,,, info, Info: An
34348 Introduction}, for an introduction to Info navigation.
34349
34350 @node Installing Debugging Files
34351 @chapter Installing Debugging Files
34352
34353 @cindex debugging files
34354 Program binaries, as produced by the GCC compilers for instance, are
34355 typically written in the ELF format, with a section containing
34356 @dfn{debugging information}. Debugging information is what allows the
34357 debugger, GDB, to map binary code to source code; it is required to
34358 debug a compiled program in good conditions.
34359
34360 This chapter explains how to use separate debug info when packages
34361 provide it, and how to rebuild packages with debug info when it's
34362 missing.
34363
34364 @menu
34365 * Separate Debug Info:: Installing 'debug' outputs.
34366 * Rebuilding Debug Info:: Building missing debug info.
34367 @end menu
34368
34369 @node Separate Debug Info
34370 @section Separate Debug Info
34371
34372 The problem with debugging information is that is takes up a fair amount
34373 of disk space. For example, debugging information for the GNU C Library
34374 weighs in at more than 60 MiB@. Thus, as a user, keeping all the
34375 debugging info of all the installed programs is usually not an option.
34376 Yet, space savings should not come at the cost of an impediment to
34377 debugging---especially in the GNU system, which should make it easier
34378 for users to exert their computing freedom (@pxref{GNU Distribution}).
34379
34380 Thankfully, the GNU Binary Utilities (Binutils) and GDB provide a
34381 mechanism that allows users to get the best of both worlds: debugging
34382 information can be stripped from the binaries and stored in separate
34383 files. GDB is then able to load debugging information from those files,
34384 when they are available (@pxref{Separate Debug Files,,, gdb, Debugging
34385 with GDB}).
34386
34387 The GNU distribution takes advantage of this by storing debugging
34388 information in the @code{lib/debug} sub-directory of a separate package
34389 output unimaginatively called @code{debug} (@pxref{Packages with
34390 Multiple Outputs}). Users can choose to install the @code{debug} output
34391 of a package when they need it. For instance, the following command
34392 installs the debugging information for the GNU C Library and for GNU
34393 Guile:
34394
34395 @example
34396 guix install glibc:debug guile:debug
34397 @end example
34398
34399 GDB must then be told to look for debug files in the user's profile, by
34400 setting the @code{debug-file-directory} variable (consider setting it
34401 from the @file{~/.gdbinit} file, @pxref{Startup,,, gdb, Debugging with
34402 GDB}):
34403
34404 @example
34405 (gdb) set debug-file-directory ~/.guix-profile/lib/debug
34406 @end example
34407
34408 From there on, GDB will pick up debugging information from the
34409 @file{.debug} files under @file{~/.guix-profile/lib/debug}.
34410
34411 In addition, you will most likely want GDB to be able to show the source
34412 code being debugged. To do that, you will have to unpack the source
34413 code of the package of interest (obtained with @code{guix build
34414 --source}, @pxref{Invoking guix build}), and to point GDB to that source
34415 directory using the @code{directory} command (@pxref{Source Path,
34416 @code{directory},, gdb, Debugging with GDB}).
34417
34418 @c XXX: keep me up-to-date
34419 The @code{debug} output mechanism in Guix is implemented by the
34420 @code{gnu-build-system} (@pxref{Build Systems}). Currently, it is
34421 opt-in---debugging information is available only for the packages with
34422 definitions explicitly declaring a @code{debug} output. To check
34423 whether a package has a @code{debug} output, use @command{guix package
34424 --list-available} (@pxref{Invoking guix package}).
34425
34426 Read on for how to deal with packages lacking a @code{debug} output.
34427
34428 @node Rebuilding Debug Info
34429 @section Rebuilding Debug Info
34430
34431 @cindex debugging info, rebuilding
34432 As we saw above, some packages, but not all, provide debugging info in a
34433 @code{debug} output. What can you do when debugging info is missing?
34434 The @option{--with-debug-info} option provides a solution to that: it
34435 allows you to rebuild the package(s) for which debugging info is
34436 missing---and only those---and to graft those onto the application
34437 you're debugging. Thus, while it's not as fast as installing a
34438 @code{debug} output, it is relatively inexpensive.
34439
34440 Let's illustrate that. Suppose you're experiencing a bug in Inkscape
34441 and would like to see what's going on in GLib, a library that's deep
34442 down in its dependency graph. As it turns out, GLib does not have a
34443 @code{debug} output and the backtrace GDB shows is all sadness:
34444
34445 @example
34446 (gdb) bt
34447 #0 0x00007ffff5f92190 in g_getenv ()
34448 from /gnu/store/@dots{}-glib-2.62.6/lib/libglib-2.0.so.0
34449 #1 0x00007ffff608a7d6 in gobject_init_ctor ()
34450 from /gnu/store/@dots{}-glib-2.62.6/lib/libgobject-2.0.so.0
34451 #2 0x00007ffff7fe275a in call_init (l=<optimized out>, argc=argc@@entry=1, argv=argv@@entry=0x7fffffffcfd8,
34452 env=env@@entry=0x7fffffffcfe8) at dl-init.c:72
34453 #3 0x00007ffff7fe2866 in call_init (env=0x7fffffffcfe8, argv=0x7fffffffcfd8, argc=1, l=<optimized out>)
34454 at dl-init.c:118
34455 @end example
34456
34457 To address that, you install Inkscape linked against a variant GLib that
34458 contains debug info:
34459
34460 @example
34461 guix install inkscape --with-debug-info=glib
34462 @end example
34463
34464 This time, debugging will be a whole lot nicer:
34465
34466 @example
34467 $ gdb --args sh -c 'exec inkscape'
34468 @dots{}
34469 (gdb) b g_getenv
34470 Function "g_getenv" not defined.
34471 Make breakpoint pending on future shared library load? (y or [n]) y
34472 Breakpoint 1 (g_getenv) pending.
34473 (gdb) r
34474 Starting program: /gnu/store/@dots{}-profile/bin/sh -c exec\ inkscape
34475 @dots{}
34476 (gdb) bt
34477 #0 g_getenv (variable=variable@@entry=0x7ffff60c7a2e "GOBJECT_DEBUG") at ../glib-2.62.6/glib/genviron.c:252
34478 #1 0x00007ffff608a7d6 in gobject_init () at ../glib-2.62.6/gobject/gtype.c:4380
34479 #2 gobject_init_ctor () at ../glib-2.62.6/gobject/gtype.c:4493
34480 #3 0x00007ffff7fe275a in call_init (l=<optimized out>, argc=argc@@entry=3, argv=argv@@entry=0x7fffffffd088,
34481 env=env@@entry=0x7fffffffd0a8) at dl-init.c:72
34482 @dots{}
34483 @end example
34484
34485 Much better!
34486
34487 Note that there can be packages for which @option{--with-debug-info}
34488 will not have the desired effect. @xref{Package Transformation Options,
34489 @option{--with-debug-info}}, for more information.
34490
34491 @node Security Updates
34492 @chapter Security Updates
34493
34494 @cindex security updates
34495 @cindex security vulnerabilities
34496 Occasionally, important security vulnerabilities are discovered in software
34497 packages and must be patched. Guix developers try hard to keep track of
34498 known vulnerabilities and to apply fixes as soon as possible in the
34499 @code{master} branch of Guix (we do not yet provide a ``stable'' branch
34500 containing only security updates). The @command{guix lint} tool helps
34501 developers find out about vulnerable versions of software packages in the
34502 distribution:
34503
34504 @smallexample
34505 $ guix lint -c cve
34506 gnu/packages/base.scm:652:2: glibc@@2.21: probably vulnerable to CVE-2015-1781, CVE-2015-7547
34507 gnu/packages/gcc.scm:334:2: gcc@@4.9.3: probably vulnerable to CVE-2015-5276
34508 gnu/packages/image.scm:312:2: openjpeg@@2.1.0: probably vulnerable to CVE-2016-1923, CVE-2016-1924
34509 @dots{}
34510 @end smallexample
34511
34512 @xref{Invoking guix lint}, for more information.
34513
34514 Guix follows a functional
34515 package management discipline (@pxref{Introduction}), which implies
34516 that, when a package is changed, @emph{every package that depends on it}
34517 must be rebuilt. This can significantly slow down the deployment of
34518 fixes in core packages such as libc or Bash, since basically the whole
34519 distribution would need to be rebuilt. Using pre-built binaries helps
34520 (@pxref{Substitutes}), but deployment may still take more time than
34521 desired.
34522
34523 @cindex grafts
34524 To address this, Guix implements @dfn{grafts}, a mechanism that allows
34525 for fast deployment of critical updates without the costs associated
34526 with a whole-distribution rebuild. The idea is to rebuild only the
34527 package that needs to be patched, and then to ``graft'' it onto packages
34528 explicitly installed by the user and that were previously referring to
34529 the original package. The cost of grafting is typically very low, and
34530 order of magnitudes lower than a full rebuild of the dependency chain.
34531
34532 @cindex replacements of packages, for grafts
34533 For instance, suppose a security update needs to be applied to Bash.
34534 Guix developers will provide a package definition for the ``fixed''
34535 Bash, say @code{bash-fixed}, in the usual way (@pxref{Defining
34536 Packages}). Then, the original package definition is augmented with a
34537 @code{replacement} field pointing to the package containing the bug fix:
34538
34539 @lisp
34540 (define bash
34541 (package
34542 (name "bash")
34543 ;; @dots{}
34544 (replacement bash-fixed)))
34545 @end lisp
34546
34547 From there on, any package depending directly or indirectly on Bash---as
34548 reported by @command{guix gc --requisites} (@pxref{Invoking guix
34549 gc})---that is installed is automatically ``rewritten'' to refer to
34550 @code{bash-fixed} instead of @code{bash}. This grafting process takes
34551 time proportional to the size of the package, usually less than a
34552 minute for an ``average'' package on a recent machine. Grafting is
34553 recursive: when an indirect dependency requires grafting, then grafting
34554 ``propagates'' up to the package that the user is installing.
34555
34556 Currently, the length of the name and version of the graft and that of
34557 the package it replaces (@code{bash-fixed} and @code{bash} in the example
34558 above) must be equal. This restriction mostly comes from the fact that
34559 grafting works by patching files, including binary files, directly.
34560 Other restrictions may apply: for instance, when adding a graft to a
34561 package providing a shared library, the original shared library and its
34562 replacement must have the same @code{SONAME} and be binary-compatible.
34563
34564 The @option{--no-grafts} command-line option allows you to forcefully
34565 avoid grafting (@pxref{Common Build Options, @option{--no-grafts}}).
34566 Thus, the command:
34567
34568 @example
34569 guix build bash --no-grafts
34570 @end example
34571
34572 @noindent
34573 returns the store file name of the original Bash, whereas:
34574
34575 @example
34576 guix build bash
34577 @end example
34578
34579 @noindent
34580 returns the store file name of the ``fixed'', replacement Bash. This
34581 allows you to distinguish between the two variants of Bash.
34582
34583 To verify which Bash your whole profile refers to, you can run
34584 (@pxref{Invoking guix gc}):
34585
34586 @example
34587 guix gc -R $(readlink -f ~/.guix-profile) | grep bash
34588 @end example
34589
34590 @noindent
34591 @dots{} and compare the store file names that you get with those above.
34592 Likewise for a complete Guix system generation:
34593
34594 @example
34595 guix gc -R $(guix system build my-config.scm) | grep bash
34596 @end example
34597
34598 Lastly, to check which Bash running processes are using, you can use the
34599 @command{lsof} command:
34600
34601 @example
34602 lsof | grep /gnu/store/.*bash
34603 @end example
34604
34605
34606 @node Bootstrapping
34607 @chapter Bootstrapping
34608
34609 @c Adapted from the ELS 2013 paper.
34610
34611 @cindex bootstrapping
34612
34613 Bootstrapping in our context refers to how the distribution gets built
34614 ``from nothing''. Remember that the build environment of a derivation
34615 contains nothing but its declared inputs (@pxref{Introduction}). So
34616 there's an obvious chicken-and-egg problem: how does the first package
34617 get built? How does the first compiler get compiled?
34618
34619 It is tempting to think of this question as one that only die-hard
34620 hackers may care about. However, while the answer to that question is
34621 technical in nature, its implications are wide-ranging. How the
34622 distribution is bootstrapped defines the extent to which we, as
34623 individuals and as a collective of users and hackers, can trust the
34624 software we run. It is a central concern from the standpoint of
34625 @emph{security} and from a @emph{user freedom} viewpoint.
34626
34627 @cindex bootstrap binaries
34628 The GNU system is primarily made of C code, with libc at its core. The
34629 GNU build system itself assumes the availability of a Bourne shell and
34630 command-line tools provided by GNU Coreutils, Awk, Findutils, `sed', and
34631 `grep'. Furthermore, build programs---programs that run
34632 @code{./configure}, @code{make}, etc.---are written in Guile Scheme
34633 (@pxref{Derivations}). Consequently, to be able to build anything at
34634 all, from scratch, Guix relies on pre-built binaries of Guile, GCC,
34635 Binutils, libc, and the other packages mentioned above---the
34636 @dfn{bootstrap binaries}.
34637
34638 These bootstrap binaries are ``taken for granted'', though we can also
34639 re-create them if needed (@pxref{Preparing to Use the Bootstrap
34640 Binaries}).
34641
34642 @menu
34643 * Reduced Binary Seed Bootstrap:: A Bootstrap worthy of GNU.
34644 * Preparing to Use the Bootstrap Binaries:: Building that what matters most.
34645 @end menu
34646
34647 @node Reduced Binary Seed Bootstrap
34648 @section The Reduced Binary Seed Bootstrap
34649
34650 Guix---like other GNU/Linux distributions---is traditionally bootstrapped from
34651 a set of bootstrap binaries: Bourne shell, command-line tools provided by GNU
34652 Coreutils, Awk, Findutils, `sed', and `grep' and Guile, GCC, Binutils, and the
34653 GNU C Library (@pxref{Bootstrapping}). Usually, these bootstrap binaries are
34654 ``taken for granted.''
34655
34656 Taking the bootstrap binaries for granted means that we consider them to
34657 be a correct and trustworthy ``seed'' for building the complete system.
34658 Therein lies a problem: the combined size of these bootstrap binaries is
34659 about 250MB (@pxref{Bootstrappable Builds,,, mes, GNU Mes}). Auditing
34660 or even inspecting these is next to impossible.
34661
34662 For @code{i686-linux} and @code{x86_64-linux}, Guix now features a
34663 ``Reduced Binary Seed'' bootstrap @footnote{We would like to say: ``Full
34664 Source Bootstrap'' and while we are working towards that goal it would
34665 be hyperbole to use that term for what we do now.}.
34666
34667 The Reduced Binary Seed bootstrap removes the most critical tools---from a
34668 trust perspective---from the bootstrap binaries: GCC, Binutils and the GNU C
34669 Library are replaced by: @code{bootstrap-mescc-tools} (a tiny assembler and
34670 linker) and @code{bootstrap-mes} (a small Scheme Interpreter and a C compiler
34671 written in Scheme and the Mes C Library, built for TinyCC and for GCC).
34672
34673 Using these new binary seeds the ``missing'' Binutils, GCC, and the GNU
34674 C Library are built from source. From here on the more traditional
34675 bootstrap process resumes. This approach has reduced the bootstrap
34676 binaries in size to about 145MB in Guix v1.1.
34677
34678 The next step that Guix has taken is to replace the shell and all its
34679 utilities with implementations in Guile Scheme, the @emph{Scheme-only
34680 bootstrap}. Gash (@pxref{Gash,,, gash, The Gash manual}) is a
34681 POSIX-compatible shell that replaces Bash, and it comes with Gash Utils
34682 which has minimalist replacements for Awk, the GNU Core Utilities, Grep,
34683 Gzip, Sed, and Tar. The rest of the bootstrap binary seeds that were
34684 removed are now built from source.
34685
34686 Building the GNU System from source is currently only possible by adding
34687 some historical GNU packages as intermediate steps@footnote{Packages
34688 such as @code{gcc-2.95.3}, @code{binutils-2.14}, @code{glibc-2.2.5},
34689 @code{gzip-1.2.4}, @code{tar-1.22}, and some others. For details, see
34690 @file{gnu/packages/commencement.scm}.}. As Gash and Gash Utils mature,
34691 and GNU packages become more bootstrappable again (e.g., new releases of
34692 GNU Sed will also ship as gzipped tarballs again, as alternative to the
34693 hard to bootstrap @code{xz}-compression), this set of added packages can
34694 hopefully be reduced again.
34695
34696 The graph below shows the resulting dependency graph for
34697 @code{gcc-core-mesboot0}, the bootstrap compiler used for the
34698 traditional bootstrap of the rest of the Guix System.
34699
34700 @c ./pre-inst-env guix graph -e '(@@ (gnu packages commencement) gcc-core-mesboot0)' | sed -re 's,((bootstrap-mescc-tools|bootstrap-mes|guile-bootstrap).*shape =) box,\1 ellipse,' > doc/images/gcc-core-mesboot0-graph.dot
34701 @image{images/gcc-core-mesboot0-graph,6in,,Dependency graph of gcc-core-mesboot0}
34702
34703 The only significant binary bootstrap seeds that remain@footnote{
34704 Ignoring the 68KB @code{mescc-tools}; that will be removed later,
34705 together with @code{mes}.} are a Scheme interpreter and a Scheme
34706 compiler: GNU Mes and GNU Guile@footnote{Not shown in this graph are the
34707 static binaries for @file{bash}, @code{tar}, and @code{xz} that are used
34708 to get Guile running.}.
34709
34710 This further reduction has brought down the size of the binary seed to
34711 about 60MB for @code{i686-linux} and @code{x86_64-linux}.
34712
34713 Work is ongoing to remove all binary blobs from our free software
34714 bootstrap stack, working towards a Full Source Bootstrap. Also ongoing
34715 is work to bring these bootstraps to the @code{arm-linux} and
34716 @code{aarch64-linux} architectures and to the Hurd.
34717
34718 If you are interested, join us on @samp{#bootstrappable} on the Freenode
34719 IRC network or discuss on @email{bug-mes@@gnu.org} or
34720 @email{gash-devel@@nongnu.org}.
34721
34722 @node Preparing to Use the Bootstrap Binaries
34723 @section Preparing to Use the Bootstrap Binaries
34724
34725 @c As of Emacs 24.3, Info-mode displays the image, but since it's a
34726 @c large image, it's hard to scroll. Oh well.
34727 @image{images/bootstrap-graph,6in,,Dependency graph of the early bootstrap derivations}
34728
34729 The figure above shows the very beginning of the dependency graph of the
34730 distribution, corresponding to the package definitions of the @code{(gnu
34731 packages bootstrap)} module. A similar figure can be generated with
34732 @command{guix graph} (@pxref{Invoking guix graph}), along the lines of:
34733
34734 @example
34735 guix graph -t derivation \
34736 -e '(@@@@ (gnu packages bootstrap) %bootstrap-gcc)' \
34737 | dot -Tps > gcc.ps
34738 @end example
34739
34740 or, for the further Reduced Binary Seed bootstrap
34741
34742 @example
34743 guix graph -t derivation \
34744 -e '(@@@@ (gnu packages bootstrap) %bootstrap-mes)' \
34745 | dot -Tps > mes.ps
34746 @end example
34747
34748 At this level of detail, things are
34749 slightly complex. First, Guile itself consists of an ELF executable,
34750 along with many source and compiled Scheme files that are dynamically
34751 loaded when it runs. This gets stored in the @file{guile-2.0.7.tar.xz}
34752 tarball shown in this graph. This tarball is part of Guix's ``source''
34753 distribution, and gets inserted into the store with @code{add-to-store}
34754 (@pxref{The Store}).
34755
34756 But how do we write a derivation that unpacks this tarball and adds it
34757 to the store? To solve this problem, the @code{guile-bootstrap-2.0.drv}
34758 derivation---the first one that gets built---uses @code{bash} as its
34759 builder, which runs @code{build-bootstrap-guile.sh}, which in turn calls
34760 @code{tar} to unpack the tarball. Thus, @file{bash}, @file{tar},
34761 @file{xz}, and @file{mkdir} are statically-linked binaries, also part of
34762 the Guix source distribution, whose sole purpose is to allow the Guile
34763 tarball to be unpacked.
34764
34765 Once @code{guile-bootstrap-2.0.drv} is built, we have a functioning
34766 Guile that can be used to run subsequent build programs. Its first task
34767 is to download tarballs containing the other pre-built binaries---this
34768 is what the @file{.tar.xz.drv} derivations do. Guix modules such as
34769 @code{ftp-client.scm} are used for this purpose. The
34770 @code{module-import.drv} derivations import those modules in a directory
34771 in the store, using the original layout. The
34772 @code{module-import-compiled.drv} derivations compile those modules, and
34773 write them in an output directory with the right layout. This
34774 corresponds to the @code{#:modules} argument of
34775 @code{build-expression->derivation} (@pxref{Derivations}).
34776
34777 Finally, the various tarballs are unpacked by the derivations
34778 @code{gcc-bootstrap-0.drv}, @code{glibc-bootstrap-0.drv}, or
34779 @code{bootstrap-mes-0.drv} and @code{bootstrap-mescc-tools-0.drv}, at which
34780 point we have a working C tool chain.
34781
34782 @unnumberedsec Building the Build Tools
34783
34784 Bootstrapping is complete when we have a full tool chain that does not
34785 depend on the pre-built bootstrap tools discussed above. This
34786 no-dependency requirement is verified by checking whether the files of
34787 the final tool chain contain references to the @file{/gnu/store}
34788 directories of the bootstrap inputs. The process that leads to this
34789 ``final'' tool chain is described by the package definitions found in
34790 the @code{(gnu packages commencement)} module.
34791
34792 The @command{guix graph} command allows us to ``zoom out'' compared to
34793 the graph above, by looking at the level of package objects instead of
34794 individual derivations---remember that a package may translate to
34795 several derivations, typically one derivation to download its source,
34796 one to build the Guile modules it needs, and one to actually build the
34797 package from source. The command:
34798
34799 @example
34800 guix graph -t bag \
34801 -e '(@@@@ (gnu packages commencement)
34802 glibc-final-with-bootstrap-bash)' | xdot -
34803 @end example
34804
34805 @noindent
34806 displays the dependency graph leading to the ``final'' C
34807 library@footnote{You may notice the @code{glibc-intermediate} label,
34808 suggesting that it is not @emph{quite} final, but as a good
34809 approximation, we will consider it final.}, depicted below.
34810
34811 @image{images/bootstrap-packages,6in,,Dependency graph of the early packages}
34812
34813 @c See <https://lists.gnu.org/archive/html/gnu-system-discuss/2012-10/msg00000.html>.
34814 The first tool that gets built with the bootstrap binaries is
34815 GNU@tie{}Make---noted @code{make-boot0} above---which is a prerequisite
34816 for all the following packages. From there Findutils and Diffutils get
34817 built.
34818
34819 Then come the first-stage Binutils and GCC, built as pseudo cross
34820 tools---i.e., with @option{--target} equal to @option{--host}. They are
34821 used to build libc. Thanks to this cross-build trick, this libc is
34822 guaranteed not to hold any reference to the initial tool chain.
34823
34824 From there the final Binutils and GCC (not shown above) are built. GCC
34825 uses @command{ld} from the final Binutils, and links programs against
34826 the just-built libc. This tool chain is used to build the other
34827 packages used by Guix and by the GNU Build System: Guile, Bash,
34828 Coreutils, etc.
34829
34830 And voilà! At this point we have the complete set of build tools that
34831 the GNU Build System expects. These are in the @code{%final-inputs}
34832 variable of the @code{(gnu packages commencement)} module, and are
34833 implicitly used by any package that uses @code{gnu-build-system}
34834 (@pxref{Build Systems, @code{gnu-build-system}}).
34835
34836
34837 @unnumberedsec Building the Bootstrap Binaries
34838
34839 @cindex bootstrap binaries
34840 Because the final tool chain does not depend on the bootstrap binaries,
34841 those rarely need to be updated. Nevertheless, it is useful to have an
34842 automated way to produce them, should an update occur, and this is what
34843 the @code{(gnu packages make-bootstrap)} module provides.
34844
34845 The following command builds the tarballs containing the bootstrap binaries
34846 (Binutils, GCC, glibc, for the traditional bootstrap and linux-libre-headers,
34847 bootstrap-mescc-tools, bootstrap-mes for the Reduced Binary Seed bootstrap,
34848 and Guile, and a tarball containing a mixture of Coreutils and other basic
34849 command-line tools):
34850
34851 @example
34852 guix build bootstrap-tarballs
34853 @end example
34854
34855 The generated tarballs are those that should be referred to in the
34856 @code{(gnu packages bootstrap)} module mentioned at the beginning of
34857 this section.
34858
34859 Still here? Then perhaps by now you've started to wonder: when do we
34860 reach a fixed point? That is an interesting question! The answer is
34861 unknown, but if you would like to investigate further (and have
34862 significant computational and storage resources to do so), then let us
34863 know.
34864
34865 @unnumberedsec Reducing the Set of Bootstrap Binaries
34866
34867 Our traditional bootstrap includes GCC, GNU Libc, Guile, etc. That's a lot of
34868 binary code! Why is that a problem? It's a problem because these big chunks
34869 of binary code are practically non-auditable, which makes it hard to establish
34870 what source code produced them. Every unauditable binary also leaves us
34871 vulnerable to compiler backdoors as described by Ken Thompson in the 1984
34872 paper @emph{Reflections on Trusting Trust}.
34873
34874 This is mitigated by the fact that our bootstrap binaries were generated
34875 from an earlier Guix revision. Nevertheless it lacks the level of
34876 transparency that we get in the rest of the package dependency graph,
34877 where Guix always gives us a source-to-binary mapping. Thus, our goal
34878 is to reduce the set of bootstrap binaries to the bare minimum.
34879
34880 The @uref{https://bootstrappable.org, Bootstrappable.org web site} lists
34881 on-going projects to do that. One of these is about replacing the
34882 bootstrap GCC with a sequence of assemblers, interpreters, and compilers
34883 of increasing complexity, which could be built from source starting from
34884 a simple and auditable assembler.
34885
34886 Our first major achievement is the replacement of of GCC, the GNU C Library
34887 and Binutils by MesCC-Tools (a simple hex linker and macro assembler) and Mes
34888 (@pxref{Top, GNU Mes Reference Manual,, mes, GNU Mes}, a Scheme interpreter
34889 and C compiler in Scheme). Neither MesCC-Tools nor Mes can be fully
34890 bootstrapped yet and thus we inject them as binary seeds. We call this the
34891 Reduced Binary Seed bootstrap, as it has halved the size of our bootstrap
34892 binaries! Also, it has eliminated the C compiler binary; i686-linux and
34893 x86_64-linux Guix packages are now bootstrapped without any binary C compiler.
34894
34895 Work is ongoing to make MesCC-Tools and Mes fully bootstrappable and we are
34896 also looking at any other bootstrap binaries. Your help is welcome!
34897
34898 @node Porting
34899 @chapter Porting to a New Platform
34900
34901 As discussed above, the GNU distribution is self-contained, and
34902 self-containment is achieved by relying on pre-built ``bootstrap
34903 binaries'' (@pxref{Bootstrapping}). These binaries are specific to an
34904 operating system kernel, CPU architecture, and application binary
34905 interface (ABI). Thus, to port the distribution to a platform that is
34906 not yet supported, one must build those bootstrap binaries, and update
34907 the @code{(gnu packages bootstrap)} module to use them on that platform.
34908
34909 Fortunately, Guix can @emph{cross compile} those bootstrap binaries.
34910 When everything goes well, and assuming the GNU tool chain supports the
34911 target platform, this can be as simple as running a command like this
34912 one:
34913
34914 @example
34915 guix build --target=armv5tel-linux-gnueabi bootstrap-tarballs
34916 @end example
34917
34918 For this to work, the @code{glibc-dynamic-linker} procedure in
34919 @code{(gnu packages bootstrap)} must be augmented to return the right
34920 file name for libc's dynamic linker on that platform; likewise,
34921 @code{system->linux-architecture} in @code{(gnu packages linux)} must be
34922 taught about the new platform.
34923
34924 Once these are built, the @code{(gnu packages bootstrap)} module needs
34925 to be updated to refer to these binaries on the target platform. That
34926 is, the hashes and URLs of the bootstrap tarballs for the new platform
34927 must be added alongside those of the currently supported platforms. The
34928 bootstrap Guile tarball is treated specially: it is expected to be
34929 available locally, and @file{gnu/local.mk} has rules to download it for
34930 the supported architectures; a rule for the new platform must be added
34931 as well.
34932
34933 In practice, there may be some complications. First, it may be that the
34934 extended GNU triplet that specifies an ABI (like the @code{eabi} suffix
34935 above) is not recognized by all the GNU tools. Typically, glibc
34936 recognizes some of these, whereas GCC uses an extra @option{--with-abi}
34937 configure flag (see @code{gcc.scm} for examples of how to handle this).
34938 Second, some of the required packages could fail to build for that
34939 platform. Lastly, the generated binaries could be broken for some
34940 reason.
34941
34942 @c *********************************************************************
34943 @include contributing.texi
34944
34945 @c *********************************************************************
34946 @node Acknowledgments
34947 @chapter Acknowledgments
34948
34949 Guix is based on the @uref{https://nixos.org/nix/, Nix package manager},
34950 which was designed and
34951 implemented by Eelco Dolstra, with contributions from other people (see
34952 the @file{nix/AUTHORS} file in Guix). Nix pioneered functional package
34953 management, and promoted unprecedented features, such as transactional
34954 package upgrades and rollbacks, per-user profiles, and referentially
34955 transparent build processes. Without this work, Guix would not exist.
34956
34957 The Nix-based software distributions, Nixpkgs and NixOS, have also been
34958 an inspiration for Guix.
34959
34960 GNU@tie{}Guix itself is a collective work with contributions from a
34961 number of people. See the @file{AUTHORS} file in Guix for more
34962 information on these fine people. The @file{THANKS} file lists people
34963 who have helped by reporting bugs, taking care of the infrastructure,
34964 providing artwork and themes, making suggestions, and more---thank you!
34965
34966
34967 @c *********************************************************************
34968 @node GNU Free Documentation License
34969 @appendix GNU Free Documentation License
34970 @cindex license, GNU Free Documentation License
34971 @include fdl-1.3.texi
34972
34973 @c *********************************************************************
34974 @node Concept Index
34975 @unnumbered Concept Index
34976 @printindex cp
34977
34978 @node Programming Index
34979 @unnumbered Programming Index
34980 @syncodeindex tp fn
34981 @syncodeindex vr fn
34982 @printindex fn
34983
34984 @bye
34985
34986 @c Local Variables:
34987 @c ispell-local-dictionary: "american";
34988 @c End: