linux-initrd: raw-initrd: Add keyword argument #:pre-mount.
[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 27D586A4F8900854329FF09F1260E46482E63562
14 @set OPENPGP-SIGNING-KEY-URL https://sv.gnu.org/people/viewgpg.php?user_id=127547
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-1 ci.guix.gnu.org
21 @set SUBSTITUTE-SERVER-2 bordeaux.guix.gnu.org
22 @set SUBSTITUTE-URLS https://@value{SUBSTITUTE-SERVER-1} https://@value{SUBSTITUTE-SERVER-2}
23
24 @copying
25 Copyright @copyright{} 2012-2022 Ludovic Courtès@*
26 Copyright @copyright{} 2013, 2014, 2016 Andreas Enge@*
27 Copyright @copyright{} 2013 Nikita Karetnikov@*
28 Copyright @copyright{} 2014, 2015, 2016 Alex Kost@*
29 Copyright @copyright{} 2015, 2016 Mathieu Lirzin@*
30 Copyright @copyright{} 2014 Pierre-Antoine Rault@*
31 Copyright @copyright{} 2015 Taylan Ulrich Bayırlı/Kammer@*
32 Copyright @copyright{} 2015, 2016, 2017, 2019, 2020, 2021 Leo Famulari@*
33 Copyright @copyright{} 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Ricardo Wurmus@*
34 Copyright @copyright{} 2016 Ben Woodcroft@*
35 Copyright @copyright{} 2016, 2017, 2018, 2021 Chris Marusich@*
36 Copyright @copyright{} 2016, 2017, 2018, 2019, 2020, 2021, 2022 Efraim Flashner@*
37 Copyright @copyright{} 2016 John Darrington@*
38 Copyright @copyright{} 2016, 2017 Nikita Gillmann@*
39 Copyright @copyright{} 2016, 2017, 2018, 2019, 2020 Jan Nieuwenhuizen@*
40 Copyright @copyright{} 2016, 2017, 2018, 2019, 2020, 2021 Julien Lepiller@*
41 Copyright @copyright{} 2016 Alex ter Weele@*
42 Copyright @copyright{} 2016, 2017, 2018, 2019, 2020, 2021 Christopher Baines@*
43 Copyright @copyright{} 2017, 2018, 2019 Clément Lassieur@*
44 Copyright @copyright{} 2017, 2018, 2020, 2021, 2022 Mathieu Othacehe@*
45 Copyright @copyright{} 2017 Federico Beffa@*
46 Copyright @copyright{} 2017, 2018 Carlo Zancanaro@*
47 Copyright @copyright{} 2017 Thomas Danckaert@*
48 Copyright @copyright{} 2017 humanitiesNerd@*
49 Copyright @copyright{} 2017, 2021 Christine Lemmer-Webber@*
50 Copyright @copyright{} 2017, 2018, 2019, 2020, 2021, 2022 Marius Bakke@*
51 Copyright @copyright{} 2017, 2019, 2020, 2022 Hartmut Goebel@*
52 Copyright @copyright{} 2017, 2019, 2020, 2021, 2022 Maxim Cournoyer@*
53 Copyright @copyright{} 2017–2022 Tobias Geerinckx-Rice@*
54 Copyright @copyright{} 2017 George Clemmer@*
55 Copyright @copyright{} 2017 Andy Wingo@*
56 Copyright @copyright{} 2017, 2018, 2019, 2020 Arun Isaac@*
57 Copyright @copyright{} 2017 nee@*
58 Copyright @copyright{} 2018 Rutger Helling@*
59 Copyright @copyright{} 2018, 2021 Oleg Pykhalov@*
60 Copyright @copyright{} 2018 Mike Gerwitz@*
61 Copyright @copyright{} 2018 Pierre-Antoine Rouby@*
62 Copyright @copyright{} 2018, 2019 Gábor Boskovits@*
63 Copyright @copyright{} 2018, 2019, 2020 Florian Pelz@*
64 Copyright @copyright{} 2018 Laura Lazzati@*
65 Copyright @copyright{} 2018 Alex Vong@*
66 Copyright @copyright{} 2019 Josh Holland@*
67 Copyright @copyright{} 2019, 2020 Diego Nicola Barbato@*
68 Copyright @copyright{} 2019 Ivan Petkov@*
69 Copyright @copyright{} 2019 Jakob L. Kreuze@*
70 Copyright @copyright{} 2019 Kyle Andrews@*
71 Copyright @copyright{} 2019 Alex Griffin@*
72 Copyright @copyright{} 2019, 2020, 2021, 2022 Guillaume Le Vaillant@*
73 Copyright @copyright{} 2020 Liliana Marie Prikler@*
74 Copyright @copyright{} 2019, 2020, 2021, 2022 Simon Tournier@*
75 Copyright @copyright{} 2020 Wiktor Żelazny@*
76 Copyright @copyright{} 2020 Damien Cassou@*
77 Copyright @copyright{} 2020 Jakub Kądziołka@*
78 Copyright @copyright{} 2020 Jack Hill@*
79 Copyright @copyright{} 2020 Naga Malleswari@*
80 Copyright @copyright{} 2020, 2021 Brice Waegeneire@*
81 Copyright @copyright{} 2020 R Veera Kumar@*
82 Copyright @copyright{} 2020, 2021 Pierre Langlois@*
83 Copyright @copyright{} 2020 pinoaffe@*
84 Copyright @copyright{} 2020 André Batista@*
85 Copyright @copyright{} 2020, 2021 Alexandru-Sergiu Marton@*
86 Copyright @copyright{} 2020 raingloom@*
87 Copyright @copyright{} 2020 Daniel Brooks@*
88 Copyright @copyright{} 2020 John Soo@*
89 Copyright @copyright{} 2020 Jonathan Brielmaier@*
90 Copyright @copyright{} 2020 Edgar Vincent@*
91 Copyright @copyright{} 2021, 2022 Maxime Devos@*
92 Copyright @copyright{} 2021 B. Wilson@*
93 Copyright @copyright{} 2021 Xinglu Chen@*
94 Copyright @copyright{} 2021 Raghav Gururajan@*
95 Copyright @copyright{} 2021 Domagoj Stolfa@*
96 Copyright @copyright{} 2021 Hui Lu@*
97 Copyright @copyright{} 2021 pukkamustard@*
98 Copyright @copyright{} 2021 Alice Brenon@*
99 Copyright @copyright{} 2021, 2022 Josselin Poiret@*
100 Copyright @copyright{} 2021 muradm@*
101 Copyright @copyright{} 2021, 2022 Andrew Tropin@*
102 Copyright @copyright{} 2021 Sarah Morgensen@*
103 Copyright @copyright{} 2022 Remco van 't Veer@*
104 Copyright @copyright{} 2022 Aleksandr Vityazev@*
105 Copyright @copyright{} 2022 Philip M@sup{c}Grath@*
106 Copyright @copyright{} 2022 Karl Hallsby@*
107 Copyright @copyright{} 2022 Justin Veilleux@*
108 Copyright @copyright{} 2022 Reily Siegel@*
109 Copyright @copyright{} 2022 Simon Streit@*
110 Copyright @copyright{} 2022 (@*
111 Copyright @copyright{} 2022 John Kehayias@*
112
113 Permission is granted to copy, distribute and/or modify this document
114 under the terms of the GNU Free Documentation License, Version 1.3 or
115 any later version published by the Free Software Foundation; with no
116 Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
117 copy of the license is included in the section entitled ``GNU Free
118 Documentation License''.
119 @end copying
120
121 @dircategory System administration
122 @direntry
123 * Guix: (guix). Manage installed software and system configuration.
124 * guix package: (guix)Invoking guix package. Installing, removing, and upgrading packages.
125 * guix gc: (guix)Invoking guix gc. Reclaiming unused disk space.
126 * guix pull: (guix)Invoking guix pull. Update the list of available packages.
127 * guix system: (guix)Invoking guix system. Manage the operating system configuration.
128 * guix deploy: (guix)Invoking guix deploy. Manage operating system configurations for remote hosts.
129 @end direntry
130
131 @dircategory Software development
132 @direntry
133 * guix shell: (guix)Invoking guix shell. Creating software environments.
134 * guix environment: (guix)Invoking guix environment. Building development environments with Guix.
135 * guix build: (guix)Invoking guix build. Building packages.
136 * guix pack: (guix)Invoking guix pack. Creating binary bundles.
137 @end direntry
138
139 @titlepage
140 @title GNU Guix Reference Manual
141 @subtitle Using the GNU Guix Functional Package Manager
142 @author The GNU Guix Developers
143
144 @page
145 @vskip 0pt plus 1filll
146 Edition @value{EDITION} @*
147 @value{UPDATED} @*
148
149 @insertcopying
150 @end titlepage
151
152 @contents
153
154 @c *********************************************************************
155 @node Top
156 @top GNU Guix
157
158 This document describes GNU Guix version @value{VERSION}, a functional
159 package management tool written for the GNU system.
160
161 @c TRANSLATORS: You can replace the following paragraph with information on
162 @c how to join your own translation team and how to report issues with the
163 @c translation.
164 This manual is also available in Simplified Chinese (@pxref{Top,,, guix.zh_CN,
165 GNU Guix参考手册}), French (@pxref{Top,,, guix.fr, Manuel de référence de GNU
166 Guix}), German (@pxref{Top,,, guix.de, Referenzhandbuch zu GNU Guix}),
167 Spanish (@pxref{Top,,, guix.es, Manual de referencia de GNU Guix}),
168 Brazilian Portuguese (@pxref{Top,,, guix.pt_BR, Manual de referência do
169 GNU Guix}), and Russian (@pxref{Top,,, guix.ru, Руководство GNU Guix}). If you
170 would like to translate it in your native language, consider joining
171 @uref{https://translate.fedoraproject.org/projects/guix/documentation-manual,
172 Weblate} (@pxref{Translating Guix}).
173
174 @menu
175 * Introduction:: What is Guix about?
176 * Installation:: Installing Guix.
177 * System Installation:: Installing the whole operating system.
178 * System Troubleshooting Tips:: When things don't go as planned.
179 * Getting Started:: Your first steps.
180 * Package Management:: Package installation, upgrade, etc.
181 * Channels:: Customizing the package collection.
182 * Development:: Guix-aided software development.
183 * Programming Interface:: Using Guix in Scheme.
184 * Utilities:: Package management commands.
185 * Foreign Architectures:: Build for foreign architectures.
186 * System Configuration:: Configuring the operating system.
187 * Home Configuration:: Configuring the home environment.
188 * Documentation:: Browsing software user manuals.
189 * Platforms:: Defining platforms.
190 * System Images:: Creating system images.
191 * Installing Debugging Files:: Feeding the debugger.
192 * Using TeX and LaTeX:: Typesetting.
193 * Security Updates:: Deploying security fixes quickly.
194 * Bootstrapping:: GNU/Linux built from scratch.
195 * Porting:: Targeting another platform or kernel.
196 * Contributing:: Your help needed!
197
198 * Acknowledgments:: Thanks!
199 * GNU Free Documentation License:: The license of this manual.
200 * Concept Index:: Concepts.
201 * Programming Index:: Data types, functions, and variables.
202
203 @detailmenu
204 --- The Detailed Node Listing ---
205
206 Introduction
207
208 * Managing Software the Guix Way:: What's special.
209 * GNU Distribution:: The packages and tools.
210
211 Installation
212
213 * Binary Installation:: Getting Guix running in no time!
214 * Requirements:: Software needed to build and run Guix.
215 * Running the Test Suite:: Testing Guix.
216 * Setting Up the Daemon:: Preparing the build daemon's environment.
217 * Invoking guix-daemon:: Running the build daemon.
218 * Application Setup:: Application-specific setup.
219 * Upgrading Guix:: Upgrading Guix and its build daemon.
220
221 Setting Up the Daemon
222
223 * Build Environment Setup:: Preparing the isolated build environment.
224 * Daemon Offload Setup:: Offloading builds to remote machines.
225 * SELinux Support:: Using an SELinux policy for the daemon.
226
227 System Installation
228
229 * Limitations:: What you can expect.
230 * Hardware Considerations:: Supported hardware.
231 * USB Stick and DVD Installation:: Preparing the installation medium.
232 * Preparing for Installation:: Networking, partitioning, etc.
233 * Guided Graphical Installation:: Easy graphical installation.
234 * Manual Installation:: Manual installation for wizards.
235 * After System Installation:: When installation succeeded.
236 * Installing Guix in a VM:: Guix System playground.
237 * Building the Installation Image:: How this comes to be.
238
239 System Troubleshooting Tips
240
241 * Chrooting into an existing system:: Fixing things from a chroot
242
243 Manual Installation
244
245 * Keyboard Layout and Networking and Partitioning:: Initial setup.
246 * Proceeding with the Installation:: Installing.
247
248 Package Management
249
250 * Features:: How Guix will make your life brighter.
251 * Invoking guix package:: Package installation, removal, etc.
252 * Substitutes:: Downloading pre-built binaries.
253 * Packages with Multiple Outputs:: Single source package, multiple outputs.
254 * Invoking guix gc:: Running the garbage collector.
255 * Invoking guix pull:: Fetching the latest Guix and distribution.
256 * Invoking guix time-machine:: Running an older revision of Guix.
257 * Inferiors:: Interacting with another revision of Guix.
258 * Invoking guix describe:: Display information about your Guix revision.
259 * Invoking guix archive:: Exporting and importing store files.
260
261 Substitutes
262
263 * Official Substitute Servers:: One particular source of substitutes.
264 * Substitute Server Authorization:: How to enable or disable substitutes.
265 * Getting Substitutes from Other Servers:: Substitute diversity.
266 * Substitute Authentication:: How Guix verifies substitutes.
267 * Proxy Settings:: How to get substitutes via proxy.
268 * Substitution Failure:: What happens when substitution fails.
269 * On Trusting Binaries:: How can you trust that binary blob?
270
271 Channels
272
273 * Specifying Additional Channels:: Extending the package collection.
274 * Using a Custom Guix Channel:: Using a customized Guix.
275 * Replicating Guix:: Running the @emph{exact same} Guix.
276 * Channel Authentication:: How Guix verifies what it fetches.
277 * Channels with Substitutes:: Using channels with available substitutes.
278 * Creating a Channel:: How to write your custom channel.
279 * Package Modules in a Sub-directory:: Specifying the channel's package modules location.
280 * Declaring Channel Dependencies:: How to depend on other channels.
281 * Specifying Channel Authorizations:: Defining channel authors authorizations.
282 * Primary URL:: Distinguishing mirror to original.
283 * Writing Channel News:: Communicating information to channel's users.
284
285 Development
286
287 * Invoking guix shell:: Spawning one-off software environments.
288 * Invoking guix environment:: Setting up development environments.
289 * Invoking guix pack:: Creating software bundles.
290 * The GCC toolchain:: Working with languages supported by GCC.
291 * Invoking guix git authenticate:: Authenticating Git repositories.
292
293 Programming Interface
294
295 * Package Modules:: Packages from the programmer's viewpoint.
296 * Defining Packages:: Defining new packages.
297 * Defining Package Variants:: Customizing packages.
298 * Writing Manifests:: The bill of materials of your environment.
299 * Build Systems:: Specifying how packages are built.
300 * Build Phases:: Phases of the build process of a package.
301 * Build Utilities:: Helpers for your package definitions and more.
302 * Search Paths:: Declaring search path environment variables.
303 * The Store:: Manipulating the package store.
304 * Derivations:: Low-level interface to package derivations.
305 * The Store Monad:: Purely functional interface to the store.
306 * G-Expressions:: Manipulating build expressions.
307 * Invoking guix repl:: Programming Guix in Guile.
308 * Using Guix Interactively:: Fine-grain interaction at the REPL.
309
310 Defining Packages
311
312 * package Reference:: The package data type.
313 * origin Reference:: The origin data type.
314
315 Utilities
316
317 * Invoking guix build:: Building packages from the command line.
318 * Invoking guix edit:: Editing package definitions.
319 * Invoking guix download:: Downloading a file and printing its hash.
320 * Invoking guix hash:: Computing the cryptographic hash of a file.
321 * Invoking guix import:: Importing package definitions.
322 * Invoking guix refresh:: Updating package definitions.
323 * Invoking guix style:: Styling package definitions.
324 * Invoking guix lint:: Finding errors in package definitions.
325 * Invoking guix size:: Profiling disk usage.
326 * Invoking guix graph:: Visualizing the graph of packages.
327 * Invoking guix publish:: Sharing substitutes.
328 * Invoking guix challenge:: Challenging substitute servers.
329 * Invoking guix copy:: Copying to and from a remote store.
330 * Invoking guix container:: Process isolation.
331 * Invoking guix weather:: Assessing substitute availability.
332 * Invoking guix processes:: Listing client processes.
333
334 Invoking @command{guix build}
335
336 * Common Build Options:: Build options for most commands.
337 * Package Transformation Options:: Creating variants of packages.
338 * Additional Build Options:: Options specific to 'guix build'.
339 * Debugging Build Failures:: Real life packaging experience.
340
341 Foreign Architectures
342 * Cross-Compilation:: Cross-compiling for another architecture.
343 * Native Builds:: Targeting another architecture through native builds.
344
345 System Configuration
346
347 * Using the Configuration System:: Customizing your GNU system.
348 * operating-system Reference:: Detail of operating-system declarations.
349 * File Systems:: Configuring file system mounts.
350 * Mapped Devices:: Block device extra processing.
351 * Swap Space:: Backing RAM with disk space.
352 * User Accounts:: Specifying user accounts.
353 * Keyboard Layout:: How the system interprets key strokes.
354 * Locales:: Language and cultural convention settings.
355 * Services:: Specifying system services.
356 * Setuid Programs:: Programs running with elevated privileges.
357 * X.509 Certificates:: Authenticating HTTPS servers.
358 * Name Service Switch:: Configuring libc's name service switch.
359 * Initial RAM Disk:: Linux-Libre bootstrapping.
360 * Bootloader Configuration:: Configuring the boot loader.
361 * Invoking guix system:: Instantiating a system configuration.
362 * Invoking guix deploy:: Deploying a system configuration to a remote host.
363 * Running Guix in a VM:: How to run Guix System in a virtual machine.
364 * Defining Services:: Adding new service definitions.
365
366 Home Environment Configuration
367
368 * Invoking guix home:: Instantiating a home environment configuration.
369
370 Services
371
372 * Base Services:: Essential system services.
373 * Scheduled Job Execution:: The mcron service.
374 * Log Rotation:: The rottlog service.
375 * Networking Setup:: Setting up network interfaces.
376 * Networking Services:: Firewall, SSH daemon, etc.
377 * Unattended Upgrades:: Automated system upgrades.
378 * X Window:: Graphical display.
379 * Printing Services:: Local and remote printer support.
380 * Desktop Services:: D-Bus and desktop services.
381 * Sound Services:: ALSA and Pulseaudio services.
382 * Database Services:: SQL databases, key-value stores, etc.
383 * Mail Services:: IMAP, POP3, SMTP, and all that.
384 * Messaging Services:: Messaging services.
385 * Telephony Services:: Telephony services.
386 * Monitoring Services:: Monitoring services.
387 * Kerberos Services:: Kerberos services.
388 * LDAP Services:: LDAP services.
389 * Web Services:: Web servers.
390 * Certificate Services:: TLS certificates via Let's Encrypt.
391 * DNS Services:: DNS daemons.
392 * VPN Services:: VPN daemons.
393 * Network File System:: NFS related services.
394 * Samba Services:: Samba services.
395 * Continuous Integration:: Cuirass and Laminar services.
396 * Power Management Services:: Extending battery life.
397 * Audio Services:: The MPD.
398 * Virtualization Services:: Virtualization services.
399 * Version Control Services:: Providing remote access to Git repositories.
400 * Game Services:: Game servers.
401 * PAM Mount Service:: Service to mount volumes when logging in.
402 * Guix Services:: Services relating specifically to Guix.
403 * Linux Services:: Services tied to the Linux kernel.
404 * Hurd Services:: Services specific for a Hurd System.
405 * Miscellaneous Services:: Other services.
406
407 Defining Services
408
409 * Service Composition:: The model for composing services.
410 * Service Types and Services:: Types and services.
411 * Service Reference:: API reference.
412 * Shepherd Services:: A particular type of service.
413 * Complex Configurations:: Defining bindings for complex configurations.
414
415 Platforms
416
417 * platform Reference:: Detail of platform declarations.
418 * Supported Platforms:: Description of the supported platforms.
419
420 System Images
421
422 * image Reference:: Detail of image declarations.
423 * Instantiate an Image:: How to instantiate an image record.
424 * image-type Reference:: Detail of image types declaration.
425 * Image Modules:: Definition of image modules.
426
427 Installing Debugging Files
428
429 * Separate Debug Info:: Installing 'debug' outputs.
430 * Rebuilding Debug Info:: Building missing debug info.
431
432 Bootstrapping
433
434 * Reduced Binary Seed Bootstrap:: A Bootstrap worthy of GNU.
435 * Preparing to Use the Bootstrap Binaries:: Building that what matters most.
436
437 @end detailmenu
438 @end menu
439
440 @c *********************************************************************
441 @node Introduction
442 @chapter Introduction
443
444 @cindex purpose
445 GNU Guix@footnote{``Guix'' is pronounced like ``geeks'', or ``ɡiːks''
446 using the international phonetic alphabet (IPA).} is a package
447 management tool for and distribution of the GNU system.
448 Guix makes it easy for unprivileged
449 users to install, upgrade, or remove software packages, to roll back to a
450 previous package set, to build packages from source, and generally
451 assists with the creation and maintenance of software environments.
452
453 @cindex Guix System
454 @cindex GuixSD, now Guix System
455 @cindex Guix System Distribution, now Guix System
456 You can install GNU@tie{}Guix on top of an existing GNU/Linux system where it
457 complements the available tools without interference (@pxref{Installation}),
458 or you can use it as a standalone operating system distribution,
459 @dfn{Guix@tie{}System}@footnote{We used to refer to Guix System as ``Guix
460 System Distribution'' or ``GuixSD''. We now consider it makes more sense to
461 group everything under the ``Guix'' banner since, after all, Guix System is
462 readily available through the @command{guix system} command, even if you're
463 using a different distro underneath!}. @xref{GNU Distribution}.
464
465 @menu
466 * Managing Software the Guix Way:: What's special.
467 * GNU Distribution:: The packages and tools.
468 @end menu
469
470 @node Managing Software the Guix Way
471 @section Managing Software the Guix Way
472
473 @cindex user interfaces
474 Guix provides a command-line package management interface
475 (@pxref{Package Management}), tools to help with software development
476 (@pxref{Development}), command-line utilities for more advanced usage
477 (@pxref{Utilities}), as well as Scheme programming interfaces
478 (@pxref{Programming Interface}).
479 @cindex build daemon
480 Its @dfn{build daemon} is responsible for building packages on behalf of
481 users (@pxref{Setting Up the Daemon}) and for downloading pre-built
482 binaries from authorized sources (@pxref{Substitutes}).
483
484 @cindex extensibility of the distribution
485 @cindex customization, of packages
486 Guix includes package definitions for many GNU and non-GNU packages, all
487 of which @uref{https://www.gnu.org/philosophy/free-sw.html, respect the
488 user's computing freedom}. It is @emph{extensible}: users can write
489 their own package definitions (@pxref{Defining Packages}) and make them
490 available as independent package modules (@pxref{Package Modules}). It
491 is also @emph{customizable}: users can @emph{derive} specialized package
492 definitions from existing ones, including from the command line
493 (@pxref{Package Transformation Options}).
494
495 @cindex functional package management
496 @cindex isolation
497 Under the hood, Guix implements the @dfn{functional package management}
498 discipline pioneered by Nix (@pxref{Acknowledgments}).
499 In Guix, the package build and installation process is seen
500 as a @emph{function}, in the mathematical sense. That function takes inputs,
501 such as build scripts, a compiler, and libraries, and
502 returns an installed package. As a pure function, its result depends
503 solely on its inputs---for instance, it cannot refer to software or
504 scripts that were not explicitly passed as inputs. A build function
505 always produces the same result when passed a given set of inputs. It
506 cannot alter the environment of the running system in
507 any way; for instance, it cannot create, modify, or delete files outside
508 of its build and installation directories. This is achieved by running
509 build processes in isolated environments (or @dfn{containers}), where only their
510 explicit inputs are visible.
511
512 @cindex store
513 The result of package build functions is @dfn{cached} in the file
514 system, in a special directory called @dfn{the store} (@pxref{The
515 Store}). Each package is installed in a directory of its own in the
516 store---by default under @file{/gnu/store}. The directory name contains
517 a hash of all the inputs used to build that package; thus, changing an
518 input yields a different directory name.
519
520 This approach is the foundation for the salient features of Guix: support
521 for transactional package upgrade and rollback, per-user installation, and
522 garbage collection of packages (@pxref{Features}).
523
524
525 @node GNU Distribution
526 @section GNU Distribution
527
528 @cindex Guix System
529 Guix comes with a distribution of the GNU system consisting entirely of
530 free software@footnote{The term ``free'' here refers to the
531 @url{https://www.gnu.org/philosophy/free-sw.html,freedom provided to
532 users of that software}.}. The
533 distribution can be installed on its own (@pxref{System Installation}),
534 but it is also possible to install Guix as a package manager on top of
535 an installed GNU/Linux system (@pxref{Installation}). When we need to
536 distinguish between the two, we refer to the standalone distribution as
537 Guix@tie{}System.
538
539 The distribution provides core GNU packages such as GNU libc, GCC, and
540 Binutils, as well as many GNU and non-GNU applications. The complete
541 list of available packages can be browsed
542 @url{https://www.gnu.org/software/guix/packages,on-line} or by
543 running @command{guix package} (@pxref{Invoking guix package}):
544
545 @example
546 guix package --list-available
547 @end example
548
549 Our goal is to provide a practical 100% free software distribution of
550 Linux-based and other variants of GNU, with a focus on the promotion and
551 tight integration of GNU components, and an emphasis on programs and
552 tools that help users exert that freedom.
553
554 Packages are currently available on the following platforms:
555
556 @table @code
557
558 @item x86_64-linux
559 Intel/AMD @code{x86_64} architecture, Linux-Libre kernel.
560
561 @item i686-linux
562 Intel 32-bit architecture (IA32), Linux-Libre kernel.
563
564 @item armhf-linux
565 ARMv7-A architecture with hard float, Thumb-2 and NEON,
566 using the EABI hard-float application binary interface (ABI),
567 and Linux-Libre kernel.
568
569 @item aarch64-linux
570 little-endian 64-bit ARMv8-A processors, Linux-Libre kernel.
571
572 @item i586-gnu
573 @uref{https://hurd.gnu.org, GNU/Hurd} on the Intel 32-bit architecture
574 (IA32).
575
576 This configuration is experimental and under development. The easiest
577 way for you to give it a try is by setting up an instance of
578 @code{hurd-vm-service-type} on your GNU/Linux machine
579 (@pxref{transparent-emulation-qemu, @code{hurd-vm-service-type}}).
580 @xref{Contributing}, on how to help!
581
582 @item mips64el-linux (unsupported)
583 little-endian 64-bit MIPS processors, specifically the Loongson series,
584 n32 ABI, and Linux-Libre kernel. This configuration is no longer fully
585 supported; in particular, there is no ongoing work to ensure that this
586 architecture still works. Should someone decide they wish to revive this
587 architecture then the code is still available.
588
589 @item powerpc-linux (unsupported)
590 big-endian 32-bit PowerPC processors, specifically the PowerPC G4 with
591 AltiVec support, and Linux-Libre kernel. This configuration is not
592 fully supported and there is no ongoing work to ensure this architecture
593 works.
594
595 @item powerpc64le-linux
596 little-endian 64-bit Power ISA processors, Linux-Libre kernel. This
597 includes POWER9 systems such as the
598 @uref{https://www.fsf.org/news/talos-ii-mainboard-and-talos-ii-lite-mainboard-now-fsf-certified-to-respect-your-freedom,
599 RYF Talos II mainboard}. This platform is available as a "technology
600 preview": although it is supported, substitutes are not yet available
601 from the build farm (@pxref{Substitutes}), and some packages may fail to
602 build (@pxref{Tracking Bugs and Patches}). That said, the Guix
603 community is actively working on improving this support, and now is a
604 great time to try it and get involved!
605
606 @item riscv64-linux
607 little-endian 64-bit RISC-V processors, specifically RV64GC, and
608 Linux-Libre kernel. This platform is available as a "technology preview":
609 although it is supported, substitutes are not yet available from the
610 build farm (@pxref{Substitutes}), and some packages may fail to build
611 (@pxref{Tracking Bugs and Patches}). That said, the Guix community is
612 actively working on improving this support, and now is a great time to
613 try it and get involved!
614
615 @end table
616
617 With Guix@tie{}System, you @emph{declare} all aspects of the operating system
618 configuration and Guix takes care of instantiating the configuration in a
619 transactional, reproducible, and stateless fashion (@pxref{System
620 Configuration}). Guix System uses the Linux-libre kernel, the Shepherd
621 initialization system (@pxref{Introduction,,, shepherd, The GNU Shepherd
622 Manual}), the well-known GNU utilities and tool chain, as well as the
623 graphical environment or system services of your choice.
624
625 Guix System is available on all the above platforms except
626 @code{mips64el-linux}, @code{powerpc-linux}, @code{powerpc64le-linux} and
627 @code{riscv64-linux}.
628
629 @noindent
630 For information on porting to other architectures or kernels,
631 @pxref{Porting}.
632
633 Building this distribution is a cooperative effort, and you are invited
634 to join! @xref{Contributing}, for information about how you can help.
635
636
637 @c *********************************************************************
638 @node Installation
639 @chapter Installation
640
641 @cindex installing Guix
642
643 @quotation Note
644 We recommend the use of this
645 @uref{https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh,
646 shell installer script} to install Guix on top of a running GNU/Linux system,
647 thereafter called a @dfn{foreign distro}.@footnote{This section is concerned
648 with the installation of the package manager, which can be done on top of a
649 running GNU/Linux system. If, instead, you want to install the complete GNU
650 operating system, @pxref{System Installation}.} The script automates the
651 download, installation, and initial configuration of Guix. It should be run
652 as the root user.
653 @end quotation
654
655 @cindex foreign distro
656 @cindex directories related to foreign distro
657 When installed on a foreign distro, GNU@tie{}Guix complements the available
658 tools without interference. Its data lives exclusively in two directories,
659 usually @file{/gnu/store} and @file{/var/guix}; other files on your system,
660 such as @file{/etc}, are left untouched.
661
662 Once installed, Guix can be updated by running @command{guix pull}
663 (@pxref{Invoking guix pull}).
664
665 If you prefer to perform the installation steps manually or want to tweak
666 them, you may find the following subsections useful. They describe the
667 software requirements of Guix, as well as how to install it manually and get
668 ready to use it.
669
670 @menu
671 * Binary Installation:: Getting Guix running in no time!
672 * Requirements:: Software needed to build and run Guix.
673 * Running the Test Suite:: Testing Guix.
674 * Setting Up the Daemon:: Preparing the build daemon's environment.
675 * Invoking guix-daemon:: Running the build daemon.
676 * Application Setup:: Application-specific setup.
677 * Upgrading Guix:: Upgrading Guix and its build daemon.
678 @end menu
679
680 @node Binary Installation
681 @section Binary Installation
682
683 @cindex installing Guix from binaries
684 @cindex installer script
685 This section describes how to install Guix on an arbitrary system from a
686 self-contained tarball providing binaries for Guix and for all its
687 dependencies. This is often quicker than installing from source, which
688 is described in the next sections. The only requirement is to have
689 GNU@tie{}tar and Xz.
690
691 @c Note duplicated from the ``Installation'' node.
692 @quotation Note
693 We recommend the use of this
694 @uref{https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh,
695 shell installer script}. The script automates the download, installation, and
696 initial configuration steps described below. It should be run as the root
697 user. As root, you can thus run this:
698
699 @example
700 cd /tmp
701 wget https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh
702 chmod +x guix-install.sh
703 ./guix-install.sh
704 @end example
705
706 If you're running Debian or a derivative such as Ubuntu, you can instead
707 install the package (it might be a version older than @value{VERSION}
708 but you can update it afterwards by running @samp{guix pull}):
709
710 @example
711 sudo apt install guix
712 @end example
713
714 Likewise on openSUSE:
715
716 @example
717 sudo zypper install guix
718 @end example
719
720 When you're done, @pxref{Application Setup} for extra configuration you
721 might need, and @ref{Getting Started} for your first steps!
722 @end quotation
723
724 Installing goes along these lines:
725
726 @enumerate
727 @item
728 @cindex downloading Guix binary
729 Download the binary tarball from
730 @indicateurl{@value{BASE-URL}/guix-binary-@value{VERSION}.x86_64-linux.tar.xz},
731 where @code{x86_64-linux} can be replaced with @code{i686-linux} for an
732 @code{i686} (32-bits) machine already running the kernel Linux, and so on
733 (@pxref{GNU Distribution}).
734
735 @c The following is somewhat duplicated in ``System Installation''.
736 Make sure to download the associated @file{.sig} file and to verify the
737 authenticity of the tarball against it, along these lines:
738
739 @example
740 $ wget @value{BASE-URL}/guix-binary-@value{VERSION}.x86_64-linux.tar.xz.sig
741 $ gpg --verify guix-binary-@value{VERSION}.x86_64-linux.tar.xz.sig
742 @end example
743
744 If that command fails because you do not have the required public key,
745 then run this command to import it:
746
747 @example
748 $ wget '@value{OPENPGP-SIGNING-KEY-URL}' \
749 -qO - | gpg --import -
750 @end example
751
752 @noindent
753 and rerun the @code{gpg --verify} command.
754
755 Take note that a warning like ``This key is not certified with a trusted
756 signature!'' is normal.
757
758 @c end authentication part
759
760 @item
761 Now, you need to become the @code{root} user. Depending on your distribution,
762 you may have to run @code{su -} or @code{sudo -i}. As @code{root}, run:
763
764 @example
765 # cd /tmp
766 # tar --warning=no-timestamp -xf \
767 /path/to/guix-binary-@value{VERSION}.x86_64-linux.tar.xz
768 # mv var/guix /var/ && mv gnu /
769 @end example
770
771 This creates @file{/gnu/store} (@pxref{The Store}) and @file{/var/guix}.
772 The latter contains a ready-to-use profile for @code{root} (see next
773 step).
774
775 Do @emph{not} unpack the tarball on a working Guix system since that
776 would overwrite its own essential files.
777
778 The @option{--warning=no-timestamp} option makes sure GNU@tie{}tar does
779 not emit warnings about ``implausibly old time stamps'' (such
780 warnings were triggered by GNU@tie{}tar 1.26 and older; recent
781 versions are fine).
782 They stem from the fact that all the
783 files in the archive have their modification time set to 1 (which
784 means January 1st, 1970). This is done on purpose to make sure the
785 archive content is independent of its creation time, thus making it
786 reproducible.
787
788 @item
789 Make the profile available under @file{~root/.config/guix/current}, which is
790 where @command{guix pull} will install updates (@pxref{Invoking guix pull}):
791
792 @example
793 # mkdir -p ~root/.config/guix
794 # ln -sf /var/guix/profiles/per-user/root/current-guix \
795 ~root/.config/guix/current
796 @end example
797
798 Source @file{etc/profile} to augment @env{PATH} and other relevant
799 environment variables:
800
801 @example
802 # GUIX_PROFILE="`echo ~root`/.config/guix/current" ; \
803 source $GUIX_PROFILE/etc/profile
804 @end example
805
806 @item
807 Create the group and user accounts for build users as explained below
808 (@pxref{Build Environment Setup}).
809
810 @item
811 Run the daemon, and set it to automatically start on boot.
812
813 If your host distro uses the systemd init system, this can be achieved
814 with these commands:
815
816 @c Versions of systemd that supported symlinked service files are not
817 @c yet widely deployed, so we should suggest that users copy the service
818 @c files into place.
819 @c
820 @c See this thread for more information:
821 @c https://lists.gnu.org/archive/html/guix-devel/2017-01/msg01199.html
822
823 @example
824 # cp ~root/.config/guix/current/lib/systemd/system/gnu-store.mount \
825 ~root/.config/guix/current/lib/systemd/system/guix-daemon.service \
826 /etc/systemd/system/
827 # systemctl enable --now gnu-store.mount guix-daemon
828 @end example
829
830 You may also want to arrange for @command{guix gc} to run periodically:
831
832 @example
833 # cp ~root/.config/guix/current/lib/systemd/system/guix-gc.service \
834 ~root/.config/guix/current/lib/systemd/system/guix-gc.timer \
835 /etc/systemd/system/
836 # systemctl enable --now guix-gc.timer
837 @end example
838
839 You may want to edit @file{guix-gc.service} to adjust the command line
840 options to fit your needs (@pxref{Invoking guix gc}).
841
842 If your host distro uses the Upstart init system:
843
844 @example
845 # initctl reload-configuration
846 # cp ~root/.config/guix/current/lib/upstart/system/guix-daemon.conf \
847 /etc/init/
848 # start guix-daemon
849 @end example
850
851 Otherwise, you can still start the daemon manually with:
852
853 @example
854 # ~root/.config/guix/current/bin/guix-daemon \
855 --build-users-group=guixbuild
856 @end example
857
858 @item
859 Make the @command{guix} command available to other users on the machine,
860 for instance with:
861
862 @example
863 # mkdir -p /usr/local/bin
864 # cd /usr/local/bin
865 # ln -s /var/guix/profiles/per-user/root/current-guix/bin/guix
866 @end example
867
868 It is also a good idea to make the Info version of this manual available
869 there:
870
871 @example
872 # mkdir -p /usr/local/share/info
873 # cd /usr/local/share/info
874 # for i in /var/guix/profiles/per-user/root/current-guix/share/info/* ;
875 do ln -s $i ; done
876 @end example
877
878 That way, assuming @file{/usr/local/share/info} is in the search path,
879 running @command{info guix} will open this manual (@pxref{Other Info
880 Directories,,, texinfo, GNU Texinfo}, for more details on changing the
881 Info search path).
882
883 @item
884 @cindex substitutes, authorization thereof
885 To use substitutes from @code{@value{SUBSTITUTE-SERVER-1}},
886 @code{@value{SUBSTITUTE-SERVER-2}} or a mirror (@pxref{Substitutes}),
887 authorize them:
888
889 @example
890 # guix archive --authorize < \
891 ~root/.config/guix/current/share/guix/@value{SUBSTITUTE-SERVER-1}.pub
892 # guix archive --authorize < \
893 ~root/.config/guix/current/share/guix/@value{SUBSTITUTE-SERVER-2}.pub
894 @end example
895
896 @quotation Note
897 If you do not enable substitutes, Guix will end up building
898 @emph{everything} from source on your machine, making each installation
899 and upgrade very expensive. @xref{On Trusting Binaries}, for a
900 discussion of reasons why one might want do disable substitutes.
901 @end quotation
902
903 @item
904 Each user may need to perform a few additional steps to make their Guix
905 environment ready for use, @pxref{Application Setup}.
906 @end enumerate
907
908 Voilà, the installation is complete!
909
910 You can confirm that Guix is working by installing a sample package into
911 the root profile:
912
913 @example
914 # guix install hello
915 @end example
916
917 The binary installation tarball can be (re)produced and verified simply
918 by running the following command in the Guix source tree:
919
920 @example
921 make guix-binary.@var{system}.tar.xz
922 @end example
923
924 @noindent
925 ...@: which, in turn, runs:
926
927 @example
928 guix pack -s @var{system} --localstatedir \
929 --profile-name=current-guix guix
930 @end example
931
932 @xref{Invoking guix pack}, for more info on this handy tool.
933
934 @node Requirements
935 @section Requirements
936
937 This section lists requirements when building Guix from source. The
938 build procedure for Guix is the same as for other GNU software, and is
939 not covered here. Please see the files @file{README} and @file{INSTALL}
940 in the Guix source tree for additional details.
941
942 @cindex official website
943 GNU Guix is available for download from its website at
944 @url{https://www.gnu.org/software/guix/}.
945
946 GNU Guix depends on the following packages:
947
948 @itemize
949 @item @url{https://gnu.org/software/guile/, GNU Guile}, version 3.0.x,
950 version 3.0.3 or later;
951 @item @url{https://notabug.org/cwebber/guile-gcrypt, Guile-Gcrypt}, version
952 0.1.0 or later;
953 @item
954 @uref{https://gitlab.com/gnutls/guile/, Guile-GnuTLS} (@pxref{Guile
955 Preparations, how to install the GnuTLS bindings for Guile,,
956 gnutls-guile, GnuTLS-Guile})@footnote{The Guile bindings to
957 @uref{https://gnutls.org/, GnuTLS} were distributed as part of GnuTLS
958 until version 3.7.8 included.};
959 @item
960 @uref{https://notabug.org/guile-sqlite3/guile-sqlite3, Guile-SQLite3}, version 0.1.0
961 or later;
962 @item @uref{https://notabug.org/guile-zlib/guile-zlib, Guile-zlib},
963 version 0.1.0 or later;
964 @item @uref{https://notabug.org/guile-lzlib/guile-lzlib, Guile-lzlib};
965 @item @uref{https://www.nongnu.org/guile-avahi/, Guile-Avahi};
966 @item
967 @uref{https://gitlab.com/guile-git/guile-git, Guile-Git}, version 0.5.0
968 or later;
969 @item @uref{https://savannah.nongnu.org/projects/guile-json/, Guile-JSON}
970 4.3.0 or later;
971 @item @url{https://www.gnu.org/software/make/, GNU Make}.
972 @end itemize
973
974 The following dependencies are optional:
975
976 @itemize
977 @item
978 @c Note: We need at least 0.13.0 for #:nodelay.
979 Support for build offloading (@pxref{Daemon Offload Setup}) and
980 @command{guix copy} (@pxref{Invoking guix copy}) depends on
981 @uref{https://github.com/artyom-poptsov/guile-ssh, Guile-SSH},
982 version 0.13.0 or later.
983
984 @item
985 @uref{https://notabug.org/guile-zstd/guile-zstd, Guile-zstd}, for zstd
986 compression and decompression in @command{guix publish} and for
987 substitutes (@pxref{Invoking guix publish}).
988
989 @item
990 @uref{https://ngyro.com/software/guile-semver.html, Guile-Semver} for
991 the @code{crate} importer (@pxref{Invoking guix import}).
992
993 @item
994 @uref{https://www.nongnu.org/guile-lib/doc/ref/htmlprag/, Guile-Lib} for
995 the @code{go} importer (@pxref{Invoking guix import}) and for some of
996 the ``updaters'' (@pxref{Invoking guix refresh}).
997
998 @item
999 When @url{http://www.bzip.org, libbz2} is available,
1000 @command{guix-daemon} can use it to compress build logs.
1001 @end itemize
1002
1003 Unless @option{--disable-daemon} was passed to @command{configure}, the
1004 following packages are also needed:
1005
1006 @itemize
1007 @item @url{https://gnupg.org/, GNU libgcrypt};
1008 @item @url{https://sqlite.org, SQLite 3};
1009 @item @url{https://gcc.gnu.org, GCC's g++}, with support for the
1010 C++11 standard.
1011 @end itemize
1012
1013 @cindex state directory
1014 When configuring Guix on a system that already has a Guix installation,
1015 be sure to specify the same state directory as the existing installation
1016 using the @option{--localstatedir} option of the @command{configure}
1017 script (@pxref{Directory Variables, @code{localstatedir},, standards,
1018 GNU Coding Standards}). Usually, this @var{localstatedir} option is
1019 set to the value @file{/var}. The @command{configure} script protects
1020 against unintended misconfiguration of @var{localstatedir} so you do not
1021 inadvertently corrupt your store (@pxref{The Store}).
1022
1023 @node Running the Test Suite
1024 @section Running the Test Suite
1025
1026 @cindex test suite
1027 After a successful @command{configure} and @code{make} run, it is a good
1028 idea to run the test suite. It can help catch issues with the setup or
1029 environment, or bugs in Guix itself---and really, reporting test
1030 failures is a good way to help improve the software. To run the test
1031 suite, type:
1032
1033 @example
1034 make check
1035 @end example
1036
1037 Test cases can run in parallel: you can use the @code{-j} option of
1038 GNU@tie{}make to speed things up. The first run may take a few minutes
1039 on a recent machine; subsequent runs will be faster because the store
1040 that is created for test purposes will already have various things in
1041 cache.
1042
1043 It is also possible to run a subset of the tests by defining the
1044 @code{TESTS} makefile variable as in this example:
1045
1046 @example
1047 make check TESTS="tests/store.scm tests/cpio.scm"
1048 @end example
1049
1050 By default, tests results are displayed at a file level. In order to
1051 see the details of every individual test cases, it is possible to define
1052 the @code{SCM_LOG_DRIVER_FLAGS} makefile variable as in this example:
1053
1054 @example
1055 make check TESTS="tests/base64.scm" SCM_LOG_DRIVER_FLAGS="--brief=no"
1056 @end example
1057
1058 The underlying SRFI 64 custom Automake test driver used for the 'check'
1059 test suite (located at @file{build-aux/test-driver.scm}) also allows
1060 selecting which test cases to run at a finer level, via its
1061 @option{--select} and @option{--exclude} options. Here's an example, to
1062 run all the test cases from the @file{tests/packages.scm} test file
1063 whose names start with ``transaction-upgrade-entry'':
1064
1065 @example
1066 export SCM_LOG_DRIVER_FLAGS="--select=^transaction-upgrade-entry"
1067 make check TESTS="tests/packages.scm"
1068 @end example
1069
1070 Those wishing to inspect the results of failed tests directly from the
1071 command line can add the @option{--errors-only=yes} option to the
1072 @code{SCM_LOG_DRIVER_FLAGS} makefile variable and set the @code{VERBOSE}
1073 Automake makefile variable, as in:
1074
1075 @example
1076 make check SCM_LOG_DRIVER_FLAGS="--brief=no --errors-only=yes" VERBOSE=1
1077 @end example
1078
1079 The @option{--show-duration=yes} option can be used to print the
1080 duration of the individual test cases, when used in combination with
1081 @option{--brief=no}:
1082
1083 @example
1084 make check SCM_LOG_DRIVER_FLAGS="--brief=no --show-duration=yes"
1085 @end example
1086
1087 @xref{Parallel Test Harness,,,automake,GNU Automake} for more
1088 information about the Automake Parallel Test Harness.
1089
1090 Upon failure, please email @email{bug-guix@@gnu.org} and attach the
1091 @file{test-suite.log} file. Please specify the Guix version being used
1092 as well as version numbers of the dependencies (@pxref{Requirements}) in
1093 your message.
1094
1095 Guix also comes with a whole-system test suite that tests complete
1096 Guix System instances. It can only run on systems where
1097 Guix is already installed, using:
1098
1099 @example
1100 make check-system
1101 @end example
1102
1103 @noindent
1104 or, again, by defining @code{TESTS} to select a subset of tests to run:
1105
1106 @example
1107 make check-system TESTS="basic mcron"
1108 @end example
1109
1110 These system tests are defined in the @code{(gnu tests @dots{})}
1111 modules. They work by running the operating systems under test with
1112 lightweight instrumentation in a virtual machine (VM). They can be
1113 computationally intensive or rather cheap, depending on whether
1114 substitutes are available for their dependencies (@pxref{Substitutes}).
1115 Some of them require a lot of storage space to hold VM images.
1116
1117 Again in case of test failures, please send @email{bug-guix@@gnu.org}
1118 all the details.
1119
1120 @node Setting Up the Daemon
1121 @section Setting Up the Daemon
1122
1123 @cindex daemon
1124 Operations such as building a package or running the garbage collector
1125 are all performed by a specialized process, the @dfn{build daemon}, on
1126 behalf of clients. Only the daemon may access the store and its
1127 associated database. Thus, any operation that manipulates the store
1128 goes through the daemon. For instance, command-line tools such as
1129 @command{guix package} and @command{guix build} communicate with the
1130 daemon (@i{via} remote procedure calls) to instruct it what to do.
1131
1132 The following sections explain how to prepare the build daemon's
1133 environment. See also @ref{Substitutes}, for information on how to allow
1134 the daemon to download pre-built binaries.
1135
1136 @menu
1137 * Build Environment Setup:: Preparing the isolated build environment.
1138 * Daemon Offload Setup:: Offloading builds to remote machines.
1139 * SELinux Support:: Using an SELinux policy for the daemon.
1140 @end menu
1141
1142 @node Build Environment Setup
1143 @subsection Build Environment Setup
1144
1145 @cindex build environment
1146 In a standard multi-user setup, Guix and its daemon---the
1147 @command{guix-daemon} program---are installed by the system
1148 administrator; @file{/gnu/store} is owned by @code{root} and
1149 @command{guix-daemon} runs as @code{root}. Unprivileged users may use
1150 Guix tools to build packages or otherwise access the store, and the
1151 daemon will do it on their behalf, ensuring that the store is kept in a
1152 consistent state, and allowing built packages to be shared among users.
1153
1154 @cindex build users
1155 When @command{guix-daemon} runs as @code{root}, you may not want package
1156 build processes themselves to run as @code{root} too, for obvious
1157 security reasons. To avoid that, a special pool of @dfn{build users}
1158 should be created for use by build processes started by the daemon.
1159 These build users need not have a shell and a home directory: they will
1160 just be used when the daemon drops @code{root} privileges in build
1161 processes. Having several such users allows the daemon to launch
1162 distinct build processes under separate UIDs, which guarantees that they
1163 do not interfere with each other---an essential feature since builds are
1164 regarded as pure functions (@pxref{Introduction}).
1165
1166 On a GNU/Linux system, a build user pool may be created like this (using
1167 Bash syntax and the @code{shadow} commands):
1168
1169 @c See https://lists.gnu.org/archive/html/bug-guix/2013-01/msg00239.html
1170 @c for why `-G' is needed.
1171 @example
1172 # groupadd --system guixbuild
1173 # for i in $(seq -w 1 10);
1174 do
1175 useradd -g guixbuild -G guixbuild \
1176 -d /var/empty -s $(which nologin) \
1177 -c "Guix build user $i" --system \
1178 guixbuilder$i;
1179 done
1180 @end example
1181
1182 @noindent
1183 The number of build users determines how many build jobs may run in
1184 parallel, as specified by the @option{--max-jobs} option
1185 (@pxref{Invoking guix-daemon, @option{--max-jobs}}). To use
1186 @command{guix system vm} and related commands, you may need to add the
1187 build users to the @code{kvm} group so they can access @file{/dev/kvm},
1188 using @code{-G guixbuild,kvm} instead of @code{-G guixbuild}
1189 (@pxref{Invoking guix system}).
1190
1191 The @code{guix-daemon} program may then be run as @code{root} with the
1192 following command@footnote{If your machine uses the systemd init system,
1193 copying the @file{@var{prefix}/lib/systemd/system/guix-daemon.service}
1194 file to @file{/etc/systemd/system} will ensure that
1195 @command{guix-daemon} is automatically started. Similarly, if your
1196 machine uses the Upstart init system, copy the
1197 @file{@var{prefix}/lib/upstart/system/guix-daemon.conf}
1198 file to @file{/etc/init}.}:
1199
1200 @example
1201 # guix-daemon --build-users-group=guixbuild
1202 @end example
1203
1204 @cindex chroot
1205 @noindent
1206 This way, the daemon starts build processes in a chroot, under one of
1207 the @code{guixbuilder} users. On GNU/Linux, by default, the chroot
1208 environment contains nothing but:
1209
1210 @c Keep this list in sync with libstore/build.cc! -----------------------
1211 @itemize
1212 @item
1213 a minimal @code{/dev} directory, created mostly independently from the
1214 host @code{/dev}@footnote{``Mostly'', because while the set of files
1215 that appear in the chroot's @code{/dev} is fixed, most of these files
1216 can only be created if the host has them.};
1217
1218 @item
1219 the @code{/proc} directory; it only shows the processes of the container
1220 since a separate PID name space is used;
1221
1222 @item
1223 @file{/etc/passwd} with an entry for the current user and an entry for
1224 user @file{nobody};
1225
1226 @item
1227 @file{/etc/group} with an entry for the user's group;
1228
1229 @item
1230 @file{/etc/hosts} with an entry that maps @code{localhost} to
1231 @code{127.0.0.1};
1232
1233 @item
1234 a writable @file{/tmp} directory.
1235 @end itemize
1236
1237 The chroot does not contain a @file{/home} directory, and the @env{HOME}
1238 environment variable is set to the non-existent
1239 @file{/homeless-shelter}. This helps to highlight inappropriate uses of
1240 @env{HOME} in the build scripts of packages.
1241
1242 You can influence the directory where the daemon stores build trees
1243 @i{via} the @env{TMPDIR} environment variable. However, the build tree
1244 within the chroot is always called @file{/tmp/guix-build-@var{name}.drv-0},
1245 where @var{name} is the derivation name---e.g., @code{coreutils-8.24}.
1246 This way, the value of @env{TMPDIR} does not leak inside build
1247 environments, which avoids discrepancies in cases where build processes
1248 capture the name of their build tree.
1249
1250 @vindex http_proxy
1251 @vindex https_proxy
1252 The daemon also honors the @env{http_proxy} and @env{https_proxy}
1253 environment variables for HTTP and HTTPS downloads it performs, be it
1254 for fixed-output derivations (@pxref{Derivations}) or for substitutes
1255 (@pxref{Substitutes}).
1256
1257 If you are installing Guix as an unprivileged user, it is still possible
1258 to run @command{guix-daemon} provided you pass @option{--disable-chroot}.
1259 However, build processes will not be isolated from one another, and not
1260 from the rest of the system. Thus, build processes may interfere with
1261 each other, and may access programs, libraries, and other files
1262 available on the system---making it much harder to view them as
1263 @emph{pure} functions.
1264
1265
1266 @node Daemon Offload Setup
1267 @subsection Using the Offload Facility
1268
1269 @cindex offloading
1270 @cindex build hook
1271 When desired, the build daemon can @dfn{offload} derivation builds to
1272 other machines running Guix, using the @code{offload} @dfn{build
1273 hook}@footnote{This feature is available only when
1274 @uref{https://github.com/artyom-poptsov/guile-ssh, Guile-SSH} is
1275 present.}. When that feature is enabled, a list of user-specified build
1276 machines is read from @file{/etc/guix/machines.scm}; every time a build
1277 is requested, for instance via @code{guix build}, the daemon attempts to
1278 offload it to one of the machines that satisfy the constraints of the
1279 derivation, in particular its system types---e.g., @code{x86_64-linux}.
1280 A single machine can have multiple system types, either because its
1281 architecture natively supports it, via emulation
1282 (@pxref{transparent-emulation-qemu, Transparent Emulation with QEMU}),
1283 or both. Missing prerequisites for the build are
1284 copied over SSH to the target machine, which then proceeds with the
1285 build; upon success the output(s) of the build are copied back to the
1286 initial machine. The offload facility comes with a basic scheduler that
1287 attempts to select the best machine. The best machine is chosen among
1288 the available machines based on criteria such as:
1289
1290 @enumerate
1291 @item
1292 The availability of a build slot. A build machine can have as many
1293 build slots (connections) as the value of the @code{parallel-builds}
1294 field of its @code{build-machine} object.
1295
1296 @item
1297 Its relative speed, as defined via the @code{speed} field of its
1298 @code{build-machine} object.
1299
1300 @item
1301 Its load. The normalized machine load must be lower than a threshold
1302 value, configurable via the @code{overload-threshold} field of its
1303 @code{build-machine} object.
1304
1305 @item
1306 Disk space availability. More than a 100 MiB must be available.
1307 @end enumerate
1308
1309 The @file{/etc/guix/machines.scm} file typically looks like this:
1310
1311 @lisp
1312 (list (build-machine
1313 (name "eightysix.example.org")
1314 (systems (list "x86_64-linux" "i686-linux"))
1315 (host-key "ssh-ed25519 AAAAC3Nza@dots{}")
1316 (user "bob")
1317 (speed 2.)) ;incredibly fast!
1318
1319 (build-machine
1320 (name "armeight.example.org")
1321 (systems (list "aarch64-linux"))
1322 (host-key "ssh-rsa AAAAB3Nza@dots{}")
1323 (user "alice")
1324
1325 ;; Remember 'guix offload' is spawned by
1326 ;; 'guix-daemon' as root.
1327 (private-key "/root/.ssh/identity-for-guix")))
1328 @end lisp
1329
1330 @noindent
1331 In the example above we specify a list of two build machines, one for
1332 the @code{x86_64} and @code{i686} architectures and one for the
1333 @code{aarch64} architecture.
1334
1335 In fact, this file is---not surprisingly!---a Scheme file that is
1336 evaluated when the @code{offload} hook is started. Its return value
1337 must be a list of @code{build-machine} objects. While this example
1338 shows a fixed list of build machines, one could imagine, say, using
1339 DNS-SD to return a list of potential build machines discovered in the
1340 local network (@pxref{Introduction, Guile-Avahi,, guile-avahi, Using
1341 Avahi in Guile Scheme Programs}). The @code{build-machine} data type is
1342 detailed below.
1343
1344 @deftp {Data Type} build-machine
1345 This data type represents build machines to which the daemon may offload
1346 builds. The important fields are:
1347
1348 @table @code
1349
1350 @item name
1351 The host name of the remote machine.
1352
1353 @item systems
1354 The system types the remote machine supports---e.g., @code{(list
1355 "x86_64-linux" "i686-linux")}.
1356
1357 @item user
1358 The user account to use when connecting to the remote machine over SSH.
1359 Note that the SSH key pair must @emph{not} be passphrase-protected, to
1360 allow non-interactive logins.
1361
1362 @item host-key
1363 This must be the machine's SSH @dfn{public host key} in OpenSSH format.
1364 This is used to authenticate the machine when we connect to it. It is a
1365 long string that looks like this:
1366
1367 @example
1368 ssh-ed25519 AAAAC3NzaC@dots{}mde+UhL hint@@example.org
1369 @end example
1370
1371 If the machine is running the OpenSSH daemon, @command{sshd}, the host
1372 key can be found in a file such as
1373 @file{/etc/ssh/ssh_host_ed25519_key.pub}.
1374
1375 If the machine is running the SSH daemon of GNU@tie{}lsh,
1376 @command{lshd}, the host key is in @file{/etc/lsh/host-key.pub} or a
1377 similar file. It can be converted to the OpenSSH format using
1378 @command{lsh-export-key} (@pxref{Converting keys,,, lsh, LSH Manual}):
1379
1380 @example
1381 $ lsh-export-key --openssh < /etc/lsh/host-key.pub
1382 ssh-rsa AAAAB3NzaC1yc2EAAAAEOp8FoQAAAQEAs1eB46LV@dots{}
1383 @end example
1384
1385 @end table
1386
1387 A number of optional fields may be specified:
1388
1389 @table @asis
1390
1391 @item @code{port} (default: @code{22})
1392 Port number of SSH server on the machine.
1393
1394 @item @code{private-key} (default: @file{~root/.ssh/id_rsa})
1395 The SSH private key file to use when connecting to the machine, in
1396 OpenSSH format. This key must not be protected with a passphrase.
1397
1398 Note that the default value is the private key @emph{of the root
1399 account}. Make sure it exists if you use the default.
1400
1401 @item @code{compression} (default: @code{"zlib@@openssh.com,zlib"})
1402 @itemx @code{compression-level} (default: @code{3})
1403 The SSH-level compression methods and compression level requested.
1404
1405 Note that offloading relies on SSH compression to reduce bandwidth usage
1406 when transferring files to and from build machines.
1407
1408 @item @code{daemon-socket} (default: @code{"/var/guix/daemon-socket/socket"})
1409 File name of the Unix-domain socket @command{guix-daemon} is listening
1410 to on that machine.
1411
1412 @item @code{overload-threshold} (default: @code{0.6})
1413 The load threshold above which a potential offload machine is
1414 disregarded by the offload scheduler. The value roughly translates to
1415 the total processor usage of the build machine, ranging from 0.0 (0%) to
1416 1.0 (100%). It can also be disabled by setting
1417 @code{overload-threshold} to @code{#f}.
1418
1419 @item @code{parallel-builds} (default: @code{1})
1420 The number of builds that may run in parallel on the machine.
1421
1422 @item @code{speed} (default: @code{1.0})
1423 A ``relative speed factor''. The offload scheduler will tend to prefer
1424 machines with a higher speed factor.
1425
1426 @item @code{features} (default: @code{'()})
1427 A list of strings denoting specific features supported by the machine.
1428 An example is @code{"kvm"} for machines that have the KVM Linux modules
1429 and corresponding hardware support. Derivations can request features by
1430 name, and they will be scheduled on matching build machines.
1431
1432 @end table
1433 @end deftp
1434
1435 The @command{guix} command must be in the search path on the build
1436 machines. You can check whether this is the case by running:
1437
1438 @example
1439 ssh build-machine guix repl --version
1440 @end example
1441
1442 There is one last thing to do once @file{machines.scm} is in place. As
1443 explained above, when offloading, files are transferred back and forth
1444 between the machine stores. For this to work, you first need to
1445 generate a key pair on each machine to allow the daemon to export signed
1446 archives of files from the store (@pxref{Invoking guix archive}):
1447
1448 @example
1449 # guix archive --generate-key
1450 @end example
1451
1452 @noindent
1453 Each build machine must authorize the key of the master machine so that
1454 it accepts store items it receives from the master:
1455
1456 @example
1457 # guix archive --authorize < master-public-key.txt
1458 @end example
1459
1460 @noindent
1461 Likewise, the master machine must authorize the key of each build machine.
1462
1463 All the fuss with keys is here to express pairwise mutual trust
1464 relations between the master and the build machines. Concretely, when
1465 the master receives files from a build machine (and @i{vice versa}), its
1466 build daemon can make sure they are genuine, have not been tampered
1467 with, and that they are signed by an authorized key.
1468
1469 @cindex offload test
1470 To test whether your setup is operational, run this command on the
1471 master node:
1472
1473 @example
1474 # guix offload test
1475 @end example
1476
1477 This will attempt to connect to each of the build machines specified in
1478 @file{/etc/guix/machines.scm}, make sure Guix is
1479 available on each machine, attempt to export to the machine and import
1480 from it, and report any error in the process.
1481
1482 If you want to test a different machine file, just specify it on the
1483 command line:
1484
1485 @example
1486 # guix offload test machines-qualif.scm
1487 @end example
1488
1489 Last, you can test the subset of the machines whose name matches a
1490 regular expression like this:
1491
1492 @example
1493 # guix offload test machines.scm '\.gnu\.org$'
1494 @end example
1495
1496 @cindex offload status
1497 To display the current load of all build hosts, run this command on the
1498 main node:
1499
1500 @example
1501 # guix offload status
1502 @end example
1503
1504
1505 @node SELinux Support
1506 @subsection SELinux Support
1507
1508 @cindex SELinux, daemon policy
1509 @cindex mandatory access control, SELinux
1510 @cindex security, guix-daemon
1511 Guix includes an SELinux policy file at @file{etc/guix-daemon.cil} that
1512 can be installed on a system where SELinux is enabled, in order to label
1513 Guix files and to specify the expected behavior of the daemon. Since
1514 Guix System does not provide an SELinux base policy, the daemon policy cannot
1515 be used on Guix System.
1516
1517 @subsubsection Installing the SELinux policy
1518 @cindex SELinux, policy installation
1519 To install the policy run this command as root:
1520
1521 @example
1522 semodule -i etc/guix-daemon.cil
1523 @end example
1524
1525 Then relabel the file system with @code{restorecon} or by a different
1526 mechanism provided by your system.
1527
1528 Once the policy is installed, the file system has been relabeled, and
1529 the daemon has been restarted, it should be running in the
1530 @code{guix_daemon_t} context. You can confirm this with the following
1531 command:
1532
1533 @example
1534 ps -Zax | grep guix-daemon
1535 @end example
1536
1537 Monitor the SELinux log files as you run a command like @code{guix build
1538 hello} to convince yourself that SELinux permits all necessary
1539 operations.
1540
1541 @subsubsection Limitations
1542 @cindex SELinux, limitations
1543
1544 This policy is not perfect. Here is a list of limitations or quirks
1545 that should be considered when deploying the provided SELinux policy for
1546 the Guix daemon.
1547
1548 @enumerate
1549 @item
1550 @code{guix_daemon_socket_t} isn’t actually used. None of the socket
1551 operations involve contexts that have anything to do with
1552 @code{guix_daemon_socket_t}. It doesn’t hurt to have this unused label,
1553 but it would be preferable to define socket rules for only this label.
1554
1555 @item
1556 @code{guix gc} cannot access arbitrary links to profiles. By design,
1557 the file label of the destination of a symlink is independent of the
1558 file label of the link itself. Although all profiles under
1559 $localstatedir are labelled, the links to these profiles inherit the
1560 label of the directory they are in. For links in the user’s home
1561 directory this will be @code{user_home_t}. But for links from the root
1562 user’s home directory, or @file{/tmp}, or the HTTP server’s working
1563 directory, etc, this won’t work. @code{guix gc} would be prevented from
1564 reading and following these links.
1565
1566 @item
1567 The daemon’s feature to listen for TCP connections might no longer work.
1568 This might require extra rules, because SELinux treats network sockets
1569 differently from files.
1570
1571 @item
1572 Currently all files with a name matching the regular expression
1573 @code{/gnu/store/.+-(guix-.+|profile)/bin/guix-daemon} are assigned the
1574 label @code{guix_daemon_exec_t}; this means that @emph{any} file with
1575 that name in any profile would be permitted to run in the
1576 @code{guix_daemon_t} domain. This is not ideal. An attacker could
1577 build a package that provides this executable and convince a user to
1578 install and run it, which lifts it into the @code{guix_daemon_t} domain.
1579 At that point SELinux could not prevent it from accessing files that are
1580 allowed for processes in that domain.
1581
1582 You will need to relabel the store directory after all upgrades to
1583 @file{guix-daemon}, such as after running @code{guix pull}. Assuming the
1584 store is in @file{/gnu}, you can do this with @code{restorecon -vR /gnu},
1585 or by other means provided by your operating system.
1586
1587 We could generate a much more restrictive policy at installation time,
1588 so that only the @emph{exact} file name of the currently installed
1589 @code{guix-daemon} executable would be labelled with
1590 @code{guix_daemon_exec_t}, instead of using a broad regular expression.
1591 The downside is that root would have to install or upgrade the policy at
1592 installation time whenever the Guix package that provides the
1593 effectively running @code{guix-daemon} executable is upgraded.
1594 @end enumerate
1595
1596 @node Invoking guix-daemon
1597 @section Invoking @command{guix-daemon}
1598 @cindex @command{guix-daemon}
1599 The @command{guix-daemon} program implements all the functionality to
1600 access the store. This includes launching build processes, running the
1601 garbage collector, querying the availability of a build result, etc. It
1602 is normally run as @code{root} like this:
1603
1604 @example
1605 # guix-daemon --build-users-group=guixbuild
1606 @end example
1607
1608 @cindex socket activation, for @command{guix-daemon}
1609 This daemon can also be started following the systemd ``socket
1610 activation'' protocol (@pxref{Service De- and Constructors,
1611 @code{make-systemd-constructor},, shepherd, The GNU Shepherd Manual}).
1612
1613 For details on how to set it up, @pxref{Setting Up the Daemon}.
1614
1615 @cindex chroot
1616 @cindex container, build environment
1617 @cindex build environment
1618 @cindex reproducible builds
1619 By default, @command{guix-daemon} launches build processes under
1620 different UIDs, taken from the build group specified with
1621 @option{--build-users-group}. In addition, each build process is run in a
1622 chroot environment that only contains the subset of the store that the
1623 build process depends on, as specified by its derivation
1624 (@pxref{Programming Interface, derivation}), plus a set of specific
1625 system directories. By default, the latter contains @file{/dev} and
1626 @file{/dev/pts}. Furthermore, on GNU/Linux, the build environment is a
1627 @dfn{container}: in addition to having its own file system tree, it has
1628 a separate mount name space, its own PID name space, network name space,
1629 etc. This helps achieve reproducible builds (@pxref{Features}).
1630
1631 When the daemon performs a build on behalf of the user, it creates a
1632 build directory under @file{/tmp} or under the directory specified by
1633 its @env{TMPDIR} environment variable. This directory is shared with
1634 the container for the duration of the build, though within the container,
1635 the build tree is always called @file{/tmp/guix-build-@var{name}.drv-0}.
1636
1637 The build directory is automatically deleted upon completion, unless the
1638 build failed and the client specified @option{--keep-failed}
1639 (@pxref{Common Build Options, @option{--keep-failed}}).
1640
1641 The daemon listens for connections and spawns one sub-process for each session
1642 started by a client (one of the @command{guix} sub-commands). The
1643 @command{guix processes} command allows you to get an overview of the activity
1644 on your system by viewing each of the active sessions and clients.
1645 @xref{Invoking guix processes}, for more information.
1646
1647 The following command-line options are supported:
1648
1649 @table @code
1650 @item --build-users-group=@var{group}
1651 Take users from @var{group} to run build processes (@pxref{Setting Up
1652 the Daemon, build users}).
1653
1654 @item --no-substitutes
1655 @cindex substitutes
1656 Do not use substitutes for build products. That is, always build things
1657 locally instead of allowing downloads of pre-built binaries
1658 (@pxref{Substitutes}).
1659
1660 When the daemon runs with @option{--no-substitutes}, clients can still
1661 explicitly enable substitution @i{via} the @code{set-build-options}
1662 remote procedure call (@pxref{The Store}).
1663
1664 @anchor{daemon-substitute-urls}
1665 @item --substitute-urls=@var{urls}
1666 Consider @var{urls} the default whitespace-separated list of substitute
1667 source URLs. When this option is omitted,
1668 @indicateurl{@value{SUBSTITUTE-URLS}} is used.
1669
1670 This means that substitutes may be downloaded from @var{urls}, as long
1671 as they are signed by a trusted signature (@pxref{Substitutes}).
1672
1673 @xref{Getting Substitutes from Other Servers}, for more information on
1674 how to configure the daemon to get substitutes from other servers.
1675
1676 @cindex offloading
1677 @item --no-offload
1678 Do not use offload builds to other machines (@pxref{Daemon Offload
1679 Setup}). That is, always build things locally instead of offloading
1680 builds to remote machines.
1681
1682 @item --cache-failures
1683 Cache build failures. By default, only successful builds are cached.
1684
1685 When this option is used, @command{guix gc --list-failures} can be used
1686 to query the set of store items marked as failed; @command{guix gc
1687 --clear-failures} removes store items from the set of cached failures.
1688 @xref{Invoking guix gc}.
1689
1690 @item --cores=@var{n}
1691 @itemx -c @var{n}
1692 Use @var{n} CPU cores to build each derivation; @code{0} means as many
1693 as available.
1694
1695 The default value is @code{0}, but it may be overridden by clients, such
1696 as the @option{--cores} option of @command{guix build} (@pxref{Invoking
1697 guix build}).
1698
1699 The effect is to define the @env{NIX_BUILD_CORES} environment variable
1700 in the build process, which can then use it to exploit internal
1701 parallelism---for instance, by running @code{make -j$NIX_BUILD_CORES}.
1702
1703 @item --max-jobs=@var{n}
1704 @itemx -M @var{n}
1705 Allow at most @var{n} build jobs in parallel. The default value is
1706 @code{1}. Setting it to @code{0} means that no builds will be performed
1707 locally; instead, the daemon will offload builds (@pxref{Daemon Offload
1708 Setup}), or simply fail.
1709
1710 @item --max-silent-time=@var{seconds}
1711 When the build or substitution process remains silent for more than
1712 @var{seconds}, terminate it and report a build failure.
1713
1714 The default value is @code{0}, which disables the timeout.
1715
1716 The value specified here can be overridden by clients (@pxref{Common
1717 Build Options, @option{--max-silent-time}}).
1718
1719 @item --timeout=@var{seconds}
1720 Likewise, when the build or substitution process lasts for more than
1721 @var{seconds}, terminate it and report a build failure.
1722
1723 The default value is @code{0}, which disables the timeout.
1724
1725 The value specified here can be overridden by clients (@pxref{Common
1726 Build Options, @option{--timeout}}).
1727
1728 @item --rounds=@var{N}
1729 Build each derivation @var{n} times in a row, and raise an error if
1730 consecutive build results are not bit-for-bit identical. Note that this
1731 setting can be overridden by clients such as @command{guix build}
1732 (@pxref{Invoking guix build}).
1733
1734 When used in conjunction with @option{--keep-failed}, the differing
1735 output is kept in the store, under @file{/gnu/store/@dots{}-check}.
1736 This makes it easy to look for differences between the two results.
1737
1738 @item --debug
1739 Produce debugging output.
1740
1741 This is useful to debug daemon start-up issues, but then it may be
1742 overridden by clients, for example the @option{--verbosity} option of
1743 @command{guix build} (@pxref{Invoking guix build}).
1744
1745 @item --chroot-directory=@var{dir}
1746 Add @var{dir} to the build chroot.
1747
1748 Doing this may change the result of build processes---for instance if
1749 they use optional dependencies found in @var{dir} when it is available,
1750 and not otherwise. For that reason, it is not recommended to do so.
1751 Instead, make sure that each derivation declares all the inputs that it
1752 needs.
1753
1754 @item --disable-chroot
1755 Disable chroot builds.
1756
1757 Using this option is not recommended since, again, it would allow build
1758 processes to gain access to undeclared dependencies. It is necessary,
1759 though, when @command{guix-daemon} is running under an unprivileged user
1760 account.
1761
1762 @item --log-compression=@var{type}
1763 Compress build logs according to @var{type}, one of @code{gzip},
1764 @code{bzip2}, or @code{none}.
1765
1766 Unless @option{--lose-logs} is used, all the build logs are kept in the
1767 @var{localstatedir}. To save space, the daemon automatically compresses
1768 them with gzip by default.
1769
1770 @item --discover[=yes|no]
1771 Whether to discover substitute servers on the local network using mDNS
1772 and DNS-SD.
1773
1774 This feature is still experimental. However, here are a few
1775 considerations.
1776
1777 @enumerate
1778 @item
1779 It might be faster/less expensive than fetching from remote servers;
1780 @item
1781 There are no security risks, only genuine substitutes will be used
1782 (@pxref{Substitute Authentication});
1783 @item
1784 An attacker advertising @command{guix publish} on your LAN cannot serve
1785 you malicious binaries, but they can learn what software you’re
1786 installing;
1787 @item
1788 Servers may serve substitute over HTTP, unencrypted, so anyone on the
1789 LAN can see what software you’re installing.
1790 @end enumerate
1791
1792 It is also possible to enable or disable substitute server discovery at
1793 run-time by running:
1794
1795 @example
1796 herd discover guix-daemon on
1797 herd discover guix-daemon off
1798 @end example
1799
1800 @item --disable-deduplication
1801 @cindex deduplication
1802 Disable automatic file ``deduplication'' in the store.
1803
1804 By default, files added to the store are automatically ``deduplicated'':
1805 if a newly added file is identical to another one found in the store,
1806 the daemon makes the new file a hard link to the other file. This can
1807 noticeably reduce disk usage, at the expense of slightly increased
1808 input/output load at the end of a build process. This option disables
1809 this optimization.
1810
1811 @item --gc-keep-outputs[=yes|no]
1812 Tell whether the garbage collector (GC) must keep outputs of live
1813 derivations.
1814
1815 @cindex GC roots
1816 @cindex garbage collector roots
1817 When set to @code{yes}, the GC will keep the outputs of any live
1818 derivation available in the store---the @file{.drv} files. The default
1819 is @code{no}, meaning that derivation outputs are kept only if they are
1820 reachable from a GC root. @xref{Invoking guix gc}, for more on GC
1821 roots.
1822
1823 @item --gc-keep-derivations[=yes|no]
1824 Tell whether the garbage collector (GC) must keep derivations
1825 corresponding to live outputs.
1826
1827 When set to @code{yes}, as is the case by default, the GC keeps
1828 derivations---i.e., @file{.drv} files---as long as at least one of their
1829 outputs is live. This allows users to keep track of the origins of
1830 items in their store. Setting it to @code{no} saves a bit of disk
1831 space.
1832
1833 In this way, setting @option{--gc-keep-derivations} to @code{yes} causes
1834 liveness to flow from outputs to derivations, and setting
1835 @option{--gc-keep-outputs} to @code{yes} causes liveness to flow from
1836 derivations to outputs. When both are set to @code{yes}, the effect is
1837 to keep all the build prerequisites (the sources, compiler, libraries,
1838 and other build-time tools) of live objects in the store, regardless of
1839 whether these prerequisites are reachable from a GC root. This is
1840 convenient for developers since it saves rebuilds or downloads.
1841
1842 @item --impersonate-linux-2.6
1843 On Linux-based systems, impersonate Linux 2.6. This means that the
1844 kernel's @command{uname} system call will report 2.6 as the release number.
1845
1846 This might be helpful to build programs that (usually wrongfully) depend
1847 on the kernel version number.
1848
1849 @item --lose-logs
1850 Do not keep build logs. By default they are kept under
1851 @file{@var{localstatedir}/guix/log}.
1852
1853 @item --system=@var{system}
1854 Assume @var{system} as the current system type. By default it is the
1855 architecture/kernel pair found at configure time, such as
1856 @code{x86_64-linux}.
1857
1858 @item --listen=@var{endpoint}
1859 Listen for connections on @var{endpoint}. @var{endpoint} is interpreted
1860 as the file name of a Unix-domain socket if it starts with
1861 @code{/} (slash sign). Otherwise, @var{endpoint} is interpreted as a
1862 host name or host name and port to listen to. Here are a few examples:
1863
1864 @table @code
1865 @item --listen=/gnu/var/daemon
1866 Listen for connections on the @file{/gnu/var/daemon} Unix-domain socket,
1867 creating it if needed.
1868
1869 @item --listen=localhost
1870 @cindex daemon, remote access
1871 @cindex remote access to the daemon
1872 @cindex daemon, cluster setup
1873 @cindex clusters, daemon setup
1874 Listen for TCP connections on the network interface corresponding to
1875 @code{localhost}, on port 44146.
1876
1877 @item --listen=128.0.0.42:1234
1878 Listen for TCP connections on the network interface corresponding to
1879 @code{128.0.0.42}, on port 1234.
1880 @end table
1881
1882 This option can be repeated multiple times, in which case
1883 @command{guix-daemon} accepts connections on all the specified
1884 endpoints. Users can tell client commands what endpoint to connect to
1885 by setting the @env{GUIX_DAEMON_SOCKET} environment variable
1886 (@pxref{The Store, @env{GUIX_DAEMON_SOCKET}}).
1887
1888 @quotation Note
1889 The daemon protocol is @emph{unauthenticated and unencrypted}. Using
1890 @option{--listen=@var{host}} is suitable on local networks, such as
1891 clusters, where only trusted nodes may connect to the build daemon. In
1892 other cases where remote access to the daemon is needed, we recommend
1893 using Unix-domain sockets along with SSH.
1894 @end quotation
1895
1896 When @option{--listen} is omitted, @command{guix-daemon} listens for
1897 connections on the Unix-domain socket located at
1898 @file{@var{localstatedir}/guix/daemon-socket/socket}.
1899 @end table
1900
1901
1902 @node Application Setup
1903 @section Application Setup
1904
1905 @cindex foreign distro
1906 When using Guix on top of GNU/Linux distribution other than Guix System---a
1907 so-called @dfn{foreign distro}---a few additional steps are needed to
1908 get everything in place. Here are some of them.
1909
1910 @subsection Locales
1911
1912 @anchor{locales-and-locpath}
1913 @cindex locales, when not on Guix System
1914 @vindex LOCPATH
1915 @vindex GUIX_LOCPATH
1916 Packages installed @i{via} Guix will not use the locale data of the
1917 host system. Instead, you must first install one of the locale packages
1918 available with Guix and then define the @env{GUIX_LOCPATH} environment
1919 variable:
1920
1921 @example
1922 $ guix install glibc-locales
1923 $ export GUIX_LOCPATH=$HOME/.guix-profile/lib/locale
1924 @end example
1925
1926 Note that the @code{glibc-locales} package contains data for all the
1927 locales supported by the GNU@tie{}libc and weighs in at around
1928 930@tie{}MiB@footnote{The size of the @code{glibc-locales} package is
1929 reduced down to about 213@tie{}MiB with store deduplication and further
1930 down to about 67@tie{}MiB when using a zstd-compressed Btrfs file
1931 system.}. If you only need a few locales, you can define your custom
1932 locales package via the @code{make-glibc-utf8-locales} procedure from
1933 the @code{(gnu packages base)} module. The following example defines a
1934 package containing the various Canadian UTF-8 locales known to the
1935 GNU@tie{}libc, that weighs around 14@tie{}MiB:
1936
1937 @lisp
1938 (use-modules (gnu packages base))
1939
1940 (define my-glibc-locales
1941 (make-glibc-utf8-locales
1942 glibc
1943 #:locales (list "en_CA" "fr_CA" "ik_CA" "iu_CA" "shs_CA")
1944 #:name "glibc-canadian-utf8-locales"))
1945 @end lisp
1946
1947 The @env{GUIX_LOCPATH} variable plays a role similar to @env{LOCPATH}
1948 (@pxref{Locale Names, @env{LOCPATH},, libc, The GNU C Library Reference
1949 Manual}). There are two important differences though:
1950
1951 @enumerate
1952 @item
1953 @env{GUIX_LOCPATH} is honored only by the libc in Guix, and not by the libc
1954 provided by foreign distros. Thus, using @env{GUIX_LOCPATH} allows you
1955 to make sure the programs of the foreign distro will not end up loading
1956 incompatible locale data.
1957
1958 @item
1959 libc suffixes each entry of @env{GUIX_LOCPATH} with @code{/X.Y}, where
1960 @code{X.Y} is the libc version---e.g., @code{2.22}. This means that,
1961 should your Guix profile contain a mixture of programs linked against
1962 different libc version, each libc version will only try to load locale
1963 data in the right format.
1964 @end enumerate
1965
1966 This is important because the locale data format used by different libc
1967 versions may be incompatible.
1968
1969 @subsection Name Service Switch
1970
1971 @cindex name service switch, glibc
1972 @cindex NSS (name service switch), glibc
1973 @cindex nscd (name service caching daemon)
1974 @cindex name service caching daemon (nscd)
1975 When using Guix on a foreign distro, we @emph{strongly recommend} that
1976 the system run the GNU C library's @dfn{name service cache daemon},
1977 @command{nscd}, which should be listening on the
1978 @file{/var/run/nscd/socket} socket. Failing to do that, applications
1979 installed with Guix may fail to look up host names or user accounts, or
1980 may even crash. The next paragraphs explain why.
1981
1982 @cindex @file{nsswitch.conf}
1983 The GNU C library implements a @dfn{name service switch} (NSS), which is
1984 an extensible mechanism for ``name lookups'' in general: host name
1985 resolution, user accounts, and more (@pxref{Name Service Switch,,, libc,
1986 The GNU C Library Reference Manual}).
1987
1988 @cindex Network information service (NIS)
1989 @cindex NIS (Network information service)
1990 Being extensible, the NSS supports @dfn{plugins}, which provide new name
1991 lookup implementations: for example, the @code{nss-mdns} plugin allow
1992 resolution of @code{.local} host names, the @code{nis} plugin allows
1993 user account lookup using the Network information service (NIS), and so
1994 on. These extra ``lookup services'' are configured system-wide in
1995 @file{/etc/nsswitch.conf}, and all the programs running on the system
1996 honor those settings (@pxref{NSS Configuration File,,, libc, The GNU C
1997 Reference Manual}).
1998
1999 When they perform a name lookup---for instance by calling the
2000 @code{getaddrinfo} function in C---applications first try to connect to
2001 the nscd; on success, nscd performs name lookups on their behalf. If
2002 the nscd is not running, then they perform the name lookup by
2003 themselves, by loading the name lookup services into their own address
2004 space and running it. These name lookup services---the
2005 @file{libnss_*.so} files---are @code{dlopen}'d, but they may come from
2006 the host system's C library, rather than from the C library the
2007 application is linked against (the C library coming from Guix).
2008
2009 And this is where the problem is: if your application is linked against
2010 Guix's C library (say, glibc 2.24) and tries to load NSS plugins from
2011 another C library (say, @code{libnss_mdns.so} for glibc 2.22), it will
2012 likely crash or have its name lookups fail unexpectedly.
2013
2014 Running @command{nscd} on the system, among other advantages, eliminates
2015 this binary incompatibility problem because those @code{libnss_*.so}
2016 files are loaded in the @command{nscd} process, not in applications
2017 themselves.
2018
2019 @subsection X11 Fonts
2020
2021 @cindex fonts
2022 The majority of graphical applications use Fontconfig to locate and load
2023 fonts and perform X11-client-side rendering. The @code{fontconfig}
2024 package in Guix looks for fonts in @file{$HOME/.guix-profile} by
2025 default. Thus, to allow graphical applications installed with Guix to
2026 display fonts, you have to install fonts with Guix as well. Essential
2027 font packages include @code{font-ghostscript}, @code{font-dejavu}, and
2028 @code{font-gnu-freefont}.
2029
2030 @cindex @code{fc-cache}
2031 @cindex font cache
2032 Once you have installed or removed fonts, or when you notice an
2033 application that does not find fonts, you may need to install Fontconfig
2034 and to force an update of its font cache by running:
2035
2036 @example
2037 guix install fontconfig
2038 fc-cache -rv
2039 @end example
2040
2041 To display text written in Chinese languages, Japanese, or Korean in
2042 graphical applications, consider installing
2043 @code{font-adobe-source-han-sans} or @code{font-wqy-zenhei}. The former
2044 has multiple outputs, one per language family (@pxref{Packages with
2045 Multiple Outputs}). For instance, the following command installs fonts
2046 for Chinese languages:
2047
2048 @example
2049 guix install font-adobe-source-han-sans:cn
2050 @end example
2051
2052 @cindex @code{xterm}
2053 Older programs such as @command{xterm} do not use Fontconfig and instead
2054 rely on server-side font rendering. Such programs require to specify a
2055 full name of a font using XLFD (X Logical Font Description), like this:
2056
2057 @example
2058 -*-dejavu sans-medium-r-normal-*-*-100-*-*-*-*-*-1
2059 @end example
2060
2061 To be able to use such full names for the TrueType fonts installed in
2062 your Guix profile, you need to extend the font path of the X server:
2063
2064 @c Note: 'xset' does not accept symlinks so the trick below arranges to
2065 @c get at the real directory. See <https://bugs.gnu.org/30655>.
2066 @example
2067 xset +fp $(dirname $(readlink -f ~/.guix-profile/share/fonts/truetype/fonts.dir))
2068 @end example
2069
2070 @cindex @code{xlsfonts}
2071 After that, you can run @code{xlsfonts} (from @code{xlsfonts} package)
2072 to make sure your TrueType fonts are listed there.
2073
2074
2075 @subsection X.509 Certificates
2076
2077 @cindex @code{nss-certs}
2078 The @code{nss-certs} package provides X.509 certificates, which allow
2079 programs to authenticate Web servers accessed over HTTPS.
2080
2081 When using Guix on a foreign distro, you can install this package and
2082 define the relevant environment variables so that packages know where to
2083 look for certificates. @xref{X.509 Certificates}, for detailed
2084 information.
2085
2086 @subsection Emacs Packages
2087
2088 @cindex @code{emacs}
2089 When you install Emacs packages with Guix, the Elisp files are placed
2090 under the @file{share/emacs/site-lisp/} directory of the profile in
2091 which they are installed. The Elisp libraries are made available to
2092 Emacs through the @env{EMACSLOADPATH} environment variable, which is
2093 set when installing Emacs itself.
2094
2095 Additionally, autoload definitions are automatically evaluated at the
2096 initialization of Emacs, by the Guix-specific
2097 @code{guix-emacs-autoload-packages} procedure. If, for some reason, you
2098 want to avoid auto-loading the Emacs packages installed with Guix, you
2099 can do so by running Emacs with the @option{--no-site-file} option
2100 (@pxref{Init File,,, emacs, The GNU Emacs Manual}).
2101
2102 @quotation Note
2103 Emacs can now compile packages natively. Under the default
2104 configuration, this means that Emacs packages will now be
2105 just-in-time (JIT) compiled as you use them, and the results
2106 stored in a subdirectory of your @code{user-emacs-directory}.
2107
2108 Furthermore, the build system for Emacs packages transparently
2109 supports native compilation, but note, that
2110 @code{emacs-minimal}---the default Emacs for building
2111 packages---has been configured without native compilation.
2112 To natively compile your emacs packages ahead of time, use a
2113 transformation like @option{--with-input=emacs-minimal=emacs}.
2114 @end quotation
2115
2116 @node Upgrading Guix
2117 @section Upgrading Guix
2118
2119 @cindex Upgrading Guix, on a foreign distro
2120
2121 To upgrade Guix, run:
2122
2123 @example
2124 guix pull
2125 @end example
2126
2127 @xref{Invoking guix pull}, for more information.
2128
2129 @cindex upgrading Guix for the root user, on a foreign distro
2130 @cindex upgrading the Guix daemon, on a foreign distro
2131 @cindex @command{guix pull} for the root user, on a foreign distro
2132
2133 On a foreign distro, you can upgrade the build daemon by running:
2134
2135 @example
2136 sudo -i guix pull
2137 @end example
2138
2139 @noindent
2140 followed by (assuming your distro uses the systemd service management
2141 tool):
2142
2143 @example
2144 systemctl restart guix-daemon.service
2145 @end example
2146
2147 On Guix System, upgrading the daemon is achieved by reconfiguring the
2148 system (@pxref{Invoking guix system, @code{guix system reconfigure}}).
2149
2150 @c TODO What else?
2151
2152 @c *********************************************************************
2153 @node System Installation
2154 @chapter System Installation
2155
2156 @cindex installing Guix System
2157 @cindex Guix System, installation
2158 This section explains how to install Guix System
2159 on a machine. Guix, as a package manager, can
2160 also be installed on top of a running GNU/Linux system,
2161 @pxref{Installation}.
2162
2163 @ifinfo
2164 @quotation Note
2165 @c This paragraph is for people reading this from tty2 of the
2166 @c installation image.
2167 You are reading this documentation with an Info reader. For details on
2168 how to use it, hit the @key{RET} key (``return'' or ``enter'') on the
2169 link that follows: @pxref{Top, Info reader,, info-stnd, Stand-alone GNU
2170 Info}. Hit @kbd{l} afterwards to come back here.
2171
2172 Alternatively, run @command{info info} in another tty to keep the manual
2173 available.
2174 @end quotation
2175 @end ifinfo
2176
2177 @menu
2178 * Limitations:: What you can expect.
2179 * Hardware Considerations:: Supported hardware.
2180 * USB Stick and DVD Installation:: Preparing the installation medium.
2181 * Preparing for Installation:: Networking, partitioning, etc.
2182 * Guided Graphical Installation:: Easy graphical installation.
2183 * Manual Installation:: Manual installation for wizards.
2184 * After System Installation:: When installation succeeded.
2185 * Installing Guix in a VM:: Guix System playground.
2186 * Building the Installation Image:: How this comes to be.
2187 @end menu
2188
2189 @node Limitations
2190 @section Limitations
2191
2192 We consider Guix System to be ready for a wide range of ``desktop'' and server
2193 use cases. The reliability guarantees it provides---transactional upgrades
2194 and rollbacks, reproducibility---make it a solid foundation.
2195
2196 Nevertheless, before you proceed with the installation, be aware of the
2197 following noteworthy limitations applicable to version @value{VERSION}:
2198
2199 @itemize
2200 @item
2201 More and more system services are provided (@pxref{Services}), but some
2202 may be missing.
2203
2204 @item
2205 GNOME, Xfce, LXDE, and Enlightenment are available (@pxref{Desktop Services}),
2206 as well as a number of X11 window managers. However, KDE is currently
2207 missing.
2208 @end itemize
2209
2210 More than a disclaimer, this is an invitation to report issues (and success
2211 stories!), and to join us in improving it. @xref{Contributing}, for more
2212 info.
2213
2214
2215 @node Hardware Considerations
2216 @section Hardware Considerations
2217
2218 @cindex hardware support on Guix System
2219 GNU@tie{}Guix focuses on respecting the user's computing freedom. It
2220 builds around the kernel Linux-libre, which means that only hardware for
2221 which free software drivers and firmware exist is supported. Nowadays,
2222 a wide range of off-the-shelf hardware is supported on
2223 GNU/Linux-libre---from keyboards to graphics cards to scanners and
2224 Ethernet controllers. Unfortunately, there are still areas where
2225 hardware vendors deny users control over their own computing, and such
2226 hardware is not supported on Guix System.
2227
2228 @cindex WiFi, hardware support
2229 One of the main areas where free drivers or firmware are lacking is WiFi
2230 devices. WiFi devices known to work include those using Atheros chips
2231 (AR9271 and AR7010), which corresponds to the @code{ath9k} Linux-libre
2232 driver, and those using Broadcom/AirForce chips (BCM43xx with
2233 Wireless-Core Revision 5), which corresponds to the @code{b43-open}
2234 Linux-libre driver. Free firmware exists for both and is available
2235 out-of-the-box on Guix System, as part of @code{%base-firmware}
2236 (@pxref{operating-system Reference, @code{firmware}}).
2237
2238 The installer warns you early on if it detects devices that are known
2239 @emph{not} to work due to the lack of free firmware or free drivers.
2240
2241 @cindex RYF, Respects Your Freedom
2242 The @uref{https://www.fsf.org/, Free Software Foundation} runs
2243 @uref{https://www.fsf.org/ryf, @dfn{Respects Your Freedom}} (RYF), a
2244 certification program for hardware products that respect your freedom
2245 and your privacy and ensure that you have control over your device. We
2246 encourage you to check the list of RYF-certified devices.
2247
2248 Another useful resource is the @uref{https://www.h-node.org/, H-Node}
2249 web site. It contains a catalog of hardware devices with information
2250 about their support in GNU/Linux.
2251
2252
2253 @node USB Stick and DVD Installation
2254 @section USB Stick and DVD Installation
2255
2256 An ISO-9660 installation image that can be written to a USB stick or
2257 burnt to a DVD can be downloaded from
2258 @indicateurl{@value{BASE-URL}/guix-system-install-@value{VERSION}.x86_64-linux.iso},
2259 where you can replace @code{x86_64-linux} with one of:
2260
2261 @table @code
2262 @item x86_64-linux
2263 for a GNU/Linux system on Intel/AMD-compatible 64-bit CPUs;
2264
2265 @item i686-linux
2266 for a 32-bit GNU/Linux system on Intel-compatible CPUs.
2267 @end table
2268
2269 @c start duplication of authentication part from ``Binary Installation''
2270 Make sure to download the associated @file{.sig} file and to verify the
2271 authenticity of the image against it, along these lines:
2272
2273 @example
2274 $ wget @value{BASE-URL}/guix-system-install-@value{VERSION}.x86_64-linux.iso.sig
2275 $ gpg --verify guix-system-install-@value{VERSION}.x86_64-linux.iso.sig
2276 @end example
2277
2278 If that command fails because you do not have the required public key,
2279 then run this command to import it:
2280
2281 @example
2282 $ wget @value{OPENPGP-SIGNING-KEY-URL} \
2283 -qO - | gpg --import -
2284 @end example
2285
2286 @noindent
2287 and rerun the @code{gpg --verify} command.
2288
2289 Take note that a warning like ``This key is not certified with a trusted
2290 signature!'' is normal.
2291
2292 @c end duplication
2293
2294 This image contains the tools necessary for an installation.
2295 It is meant to be copied @emph{as is} to a large-enough USB stick or DVD.
2296
2297 @unnumberedsubsec Copying to a USB Stick
2298
2299 Insert a USB stick of 1@tie{}GiB or more into your machine, and determine
2300 its device name. Assuming that the USB stick is known as @file{/dev/sdX},
2301 copy the image with:
2302
2303 @example
2304 dd if=guix-system-install-@value{VERSION}.x86_64-linux.iso of=/dev/sdX status=progress
2305 sync
2306 @end example
2307
2308 Access to @file{/dev/sdX} usually requires root privileges.
2309
2310 @unnumberedsubsec Burning on a DVD
2311
2312 Insert a blank DVD into your machine, and determine
2313 its device name. Assuming that the DVD drive is known as @file{/dev/srX},
2314 copy the image with:
2315
2316 @example
2317 growisofs -dvd-compat -Z /dev/srX=guix-system-install-@value{VERSION}.x86_64-linux.iso
2318 @end example
2319
2320 Access to @file{/dev/srX} usually requires root privileges.
2321
2322 @unnumberedsubsec Booting
2323
2324 Once this is done, you should be able to reboot the system and boot from
2325 the USB stick or DVD@. The latter usually requires you to get in the
2326 BIOS or UEFI boot menu, where you can choose to boot from the USB stick.
2327 In order to boot from Libreboot, switch to the command mode by pressing
2328 the @kbd{c} key and type @command{search_grub usb}.
2329
2330 @xref{Installing Guix in a VM}, if, instead, you would like to install
2331 Guix System in a virtual machine (VM).
2332
2333
2334 @node Preparing for Installation
2335 @section Preparing for Installation
2336
2337 Once you have booted, you can use the guided graphical installer, which makes
2338 it easy to get started (@pxref{Guided Graphical Installation}). Alternatively,
2339 if you are already familiar with GNU/Linux and if you want more control than
2340 what the graphical installer provides, you can choose the ``manual''
2341 installation process (@pxref{Manual Installation}).
2342
2343 The graphical installer is available on TTY1. You can obtain root shells on
2344 TTYs 3 to 6 by hitting @kbd{ctrl-alt-f3}, @kbd{ctrl-alt-f4}, etc. TTY2 shows
2345 this documentation and you can reach it with @kbd{ctrl-alt-f2}. Documentation
2346 is browsable using the Info reader commands (@pxref{Top,,, info-stnd,
2347 Stand-alone GNU Info}). The installation system runs the GPM mouse daemon,
2348 which allows you to select text with the left mouse button and to paste it
2349 with the middle button.
2350
2351 @quotation Note
2352 Installation requires access to the Internet so that any missing
2353 dependencies of your system configuration can be downloaded. See the
2354 ``Networking'' section below.
2355 @end quotation
2356
2357 @node Guided Graphical Installation
2358 @section Guided Graphical Installation
2359
2360 The graphical installer is a text-based user interface. It will guide you,
2361 with dialog boxes, through the steps needed to install GNU@tie{}Guix System.
2362
2363 The first dialog boxes allow you to set up the system as you use it during the
2364 installation: you can choose the language, keyboard layout, and set up
2365 networking, which will be used during the installation. The image below shows
2366 the networking dialog.
2367
2368 @image{images/installer-network,5in,, networking setup with the graphical installer}
2369
2370 Later steps allow you to partition your hard disk, as shown in the image
2371 below, to choose whether or not to use encrypted file systems, to enter the
2372 host name and root password, and to create an additional account, among other
2373 things.
2374
2375 @image{images/installer-partitions,5in,, partitioning with the graphical installer}
2376
2377 Note that, at any time, the installer allows you to exit the current
2378 installation step and resume at a previous step, as show in the image below.
2379
2380 @image{images/installer-resume,5in,, resuming the installation process}
2381
2382 Once you're done, the installer produces an operating system configuration and
2383 displays it (@pxref{Using the Configuration System}). At that point you can
2384 hit ``OK'' and installation will proceed. On success, you can reboot into the
2385 new system and enjoy. @xref{After System Installation}, for what's next!
2386
2387
2388 @node Manual Installation
2389 @section Manual Installation
2390
2391 This section describes how you would ``manually'' install GNU@tie{}Guix System
2392 on your machine. This option requires familiarity with GNU/Linux, with the
2393 shell, and with common administration tools. If you think this is not for
2394 you, consider using the guided graphical installer (@pxref{Guided Graphical
2395 Installation}).
2396
2397 The installation system provides root shells on TTYs 3 to 6; press
2398 @kbd{ctrl-alt-f3}, @kbd{ctrl-alt-f4}, and so on to reach them. It includes
2399 many common tools needed to install the system, but is also a full-blown
2400 Guix System. This means that you can install additional packages, should you
2401 need it, using @command{guix package} (@pxref{Invoking guix package}).
2402
2403 @menu
2404 * Keyboard Layout and Networking and Partitioning:: Initial setup.
2405 * Proceeding with the Installation:: Installing.
2406 @end menu
2407
2408 @node Keyboard Layout and Networking and Partitioning
2409 @subsection Keyboard Layout, Networking, and Partitioning
2410
2411 Before you can install the system, you may want to adjust the keyboard layout,
2412 set up networking, and partition your target hard disk. This section will
2413 guide you through this.
2414
2415 @subsubsection Keyboard Layout
2416
2417 @cindex keyboard layout
2418 The installation image uses the US qwerty keyboard layout. If you want
2419 to change it, you can use the @command{loadkeys} command. For example,
2420 the following command selects the Dvorak keyboard layout:
2421
2422 @example
2423 loadkeys dvorak
2424 @end example
2425
2426 See the files under @file{/run/current-system/profile/share/keymaps} for
2427 a list of available keyboard layouts. Run @command{man loadkeys} for
2428 more information.
2429
2430 @anchor{manual-installation-networking}
2431 @subsubsection Networking
2432
2433 Run the following command to see what your network interfaces are called:
2434
2435 @example
2436 ifconfig -a
2437 @end example
2438
2439 @noindent
2440 @dots{} or, using the GNU/Linux-specific @command{ip} command:
2441
2442 @example
2443 ip address
2444 @end example
2445
2446 @c https://cgit.freedesktop.org/systemd/systemd/tree/src/udev/udev-builtin-net_id.c#n20
2447 Wired interfaces have a name starting with @samp{e}; for example, the
2448 interface corresponding to the first on-board Ethernet controller is
2449 called @samp{eno1}. Wireless interfaces have a name starting with
2450 @samp{w}, like @samp{w1p2s0}.
2451
2452 @table @asis
2453 @item Wired connection
2454 To configure a wired network run the following command, substituting
2455 @var{interface} with the name of the wired interface you want to use.
2456
2457 @example
2458 ifconfig @var{interface} up
2459 @end example
2460
2461 @noindent
2462 @dots{} or, using the GNU/Linux-specific @command{ip} command:
2463
2464 @example
2465 ip link set @var{interface} up
2466 @end example
2467
2468 @item Wireless connection
2469 @cindex wireless
2470 @cindex WiFi
2471 To configure wireless networking, you can create a configuration file
2472 for the @command{wpa_supplicant} configuration tool (its location is not
2473 important) using one of the available text editors such as
2474 @command{nano}:
2475
2476 @example
2477 nano wpa_supplicant.conf
2478 @end example
2479
2480 As an example, the following stanza can go to this file and will work
2481 for many wireless networks, provided you give the actual SSID and
2482 passphrase for the network you are connecting to:
2483
2484 @example
2485 network=@{
2486 ssid="@var{my-ssid}"
2487 key_mgmt=WPA-PSK
2488 psk="the network's secret passphrase"
2489 @}
2490 @end example
2491
2492 Start the wireless service and run it in the background with the
2493 following command (substitute @var{interface} with the name of the
2494 network interface you want to use):
2495
2496 @example
2497 wpa_supplicant -c wpa_supplicant.conf -i @var{interface} -B
2498 @end example
2499
2500 Run @command{man wpa_supplicant} for more information.
2501 @end table
2502
2503 @cindex DHCP
2504 At this point, you need to acquire an IP address. On a network where IP
2505 addresses are automatically assigned @i{via} DHCP, you can run:
2506
2507 @example
2508 dhclient -v @var{interface}
2509 @end example
2510
2511 Try to ping a server to see if networking is up and running:
2512
2513 @example
2514 ping -c 3 gnu.org
2515 @end example
2516
2517 Setting up network access is almost always a requirement because the
2518 image does not contain all the software and tools that may be needed.
2519
2520 @cindex proxy, during system installation
2521 If you need HTTP and HTTPS access to go through a proxy, run the
2522 following command:
2523
2524 @example
2525 herd set-http-proxy guix-daemon @var{URL}
2526 @end example
2527
2528 @noindent
2529 where @var{URL} is the proxy URL, for example
2530 @code{http://example.org:8118}.
2531
2532 @cindex installing over SSH
2533 If you want to, you can continue the installation remotely by starting
2534 an SSH server:
2535
2536 @example
2537 herd start ssh-daemon
2538 @end example
2539
2540 Make sure to either set a password with @command{passwd}, or configure
2541 OpenSSH public key authentication before logging in.
2542
2543 @subsubsection Disk Partitioning
2544
2545 Unless this has already been done, the next step is to partition, and
2546 then format the target partition(s).
2547
2548 The installation image includes several partitioning tools, including
2549 Parted (@pxref{Overview,,, parted, GNU Parted User Manual}),
2550 @command{fdisk}, and @command{cfdisk}. Run it and set up your disk with
2551 the partition layout you want:
2552
2553 @example
2554 cfdisk
2555 @end example
2556
2557 If your disk uses the GUID Partition Table (GPT) format and you plan to
2558 install BIOS-based GRUB (which is the default), make sure a BIOS Boot
2559 Partition is available (@pxref{BIOS installation,,, grub, GNU GRUB
2560 manual}).
2561
2562 @cindex EFI, installation
2563 @cindex UEFI, installation
2564 @cindex ESP, EFI system partition
2565 If you instead wish to use EFI-based GRUB, a FAT32 @dfn{EFI System Partition}
2566 (ESP) is required. This partition can be mounted at @file{/boot/efi} for
2567 instance and must have the @code{esp} flag set. E.g., for @command{parted}:
2568
2569 @example
2570 parted /dev/sda set 1 esp on
2571 @end example
2572
2573 @quotation Note
2574 @vindex grub-bootloader
2575 @vindex grub-efi-bootloader
2576 Unsure whether to use EFI- or BIOS-based GRUB? If the directory
2577 @file{/sys/firmware/efi} exists in the installation image, then you should
2578 probably perform an EFI installation, using @code{grub-efi-bootloader}.
2579 Otherwise you should use the BIOS-based GRUB, known as
2580 @code{grub-bootloader}. @xref{Bootloader Configuration}, for more info on
2581 bootloaders.
2582 @end quotation
2583
2584 Once you are done partitioning the target hard disk drive, you have to
2585 create a file system on the relevant partition(s)@footnote{Currently
2586 Guix System only supports ext4, btrfs, JFS, F2FS, and XFS file systems. In
2587 particular, code that reads file system UUIDs and labels only works for these
2588 file system types.}. For the ESP, if you have one and assuming it is
2589 @file{/dev/sda1}, run:
2590
2591 @example
2592 mkfs.fat -F32 /dev/sda1
2593 @end example
2594
2595 For the root file system, ext4 is the most widely used format. Other
2596 file systems, such as Btrfs, support compression, which is reported to
2597 nicely complement file deduplication that the daemon performs
2598 independently of the file system (@pxref{Invoking guix-daemon,
2599 deduplication}).
2600
2601 Preferably, assign file systems a label so that you can easily and
2602 reliably refer to them in @code{file-system} declarations (@pxref{File
2603 Systems}). This is typically done using the @code{-L} option of
2604 @command{mkfs.ext4} and related commands. So, assuming the target root
2605 partition lives at @file{/dev/sda2}, a file system with the label
2606 @code{my-root} can be created with:
2607
2608 @example
2609 mkfs.ext4 -L my-root /dev/sda2
2610 @end example
2611
2612 @cindex encrypted disk
2613 If you are instead planning to encrypt the root partition, you can use
2614 the Cryptsetup/LUKS utilities to do that (see @inlinefmtifelse{html,
2615 @uref{https://linux.die.net/man/8/cryptsetup, @code{man cryptsetup}},
2616 @code{man cryptsetup}} for more information).
2617
2618 @quotation Warning
2619 Note that GRUB can unlock LUKS2 devices since version 2.06, but only
2620 supports the PBKDF2 key derivation function, which is not the default
2621 for @command{cryptsetup luksFormat}. You can check which key derivation
2622 function is being used by a device by running @command{cryptsetup
2623 luksDump @var{device}}, and looking for the PBKDF field of your
2624 keyslots.
2625 @end quotation
2626
2627 Assuming you want to store the root partition on @file{/dev/sda2}, the
2628 command sequence to format it as a LUKS2 partition would be along these
2629 lines:
2630
2631 @example
2632 cryptsetup luksFormat --type luks2 --pbkdf pbkdf2 /dev/sda2
2633 cryptsetup open /dev/sda2 my-partition
2634 mkfs.ext4 -L my-root /dev/mapper/my-partition
2635 @end example
2636
2637 Once that is done, mount the target file system under @file{/mnt}
2638 with a command like (again, assuming @code{my-root} is the label of the
2639 root file system):
2640
2641 @example
2642 mount LABEL=my-root /mnt
2643 @end example
2644
2645 Also mount any other file systems you would like to use on the target
2646 system relative to this path. If you have opted for @file{/boot/efi} as an
2647 EFI mount point for example, mount it at @file{/mnt/boot/efi} now so it is
2648 found by @code{guix system init} afterwards.
2649
2650 Finally, if you plan to use one or more swap partitions (@pxref{Swap
2651 Space}), make sure to initialize them with @command{mkswap}. Assuming
2652 you have one swap partition on @file{/dev/sda3}, you would run:
2653
2654 @example
2655 mkswap /dev/sda3
2656 swapon /dev/sda3
2657 @end example
2658
2659 Alternatively, you may use a swap file. For example, assuming that in
2660 the new system you want to use the file @file{/swapfile} as a swap file,
2661 you would run@footnote{This example will work for many types of file
2662 systems (e.g., ext4). However, for copy-on-write file systems (e.g.,
2663 btrfs), the required steps may be different. For details, see the
2664 manual pages for @command{mkswap} and @command{swapon}.}:
2665
2666 @example
2667 # This is 10 GiB of swap space. Adjust "count" to change the size.
2668 dd if=/dev/zero of=/mnt/swapfile bs=1MiB count=10240
2669 # For security, make the file readable and writable only by root.
2670 chmod 600 /mnt/swapfile
2671 mkswap /mnt/swapfile
2672 swapon /mnt/swapfile
2673 @end example
2674
2675 Note that if you have encrypted the root partition and created a swap
2676 file in its file system as described above, then the encryption also
2677 protects the swap file, just like any other file in that file system.
2678
2679 @node Proceeding with the Installation
2680 @subsection Proceeding with the Installation
2681
2682 With the target partitions ready and the target root mounted on
2683 @file{/mnt}, we're ready to go. First, run:
2684
2685 @example
2686 herd start cow-store /mnt
2687 @end example
2688
2689 This makes @file{/gnu/store} copy-on-write, such that packages added to it
2690 during the installation phase are written to the target disk on @file{/mnt}
2691 rather than kept in memory. This is necessary because the first phase of
2692 the @command{guix system init} command (see below) entails downloads or
2693 builds to @file{/gnu/store} which, initially, is an in-memory file system.
2694
2695 Next, you have to edit a file and
2696 provide the declaration of the operating system to be installed. To
2697 that end, the installation system comes with three text editors. We
2698 recommend GNU nano (@pxref{Top,,, nano, GNU nano Manual}), which
2699 supports syntax highlighting and parentheses matching; other editors
2700 include mg (an Emacs clone), and
2701 nvi (a clone of the original BSD @command{vi} editor).
2702 We strongly recommend storing that file on the target root file system, say,
2703 as @file{/mnt/etc/config.scm}. Failing to do that, you will have lost your
2704 configuration file once you have rebooted into the newly-installed system.
2705
2706 @xref{Using the Configuration System}, for an overview of the
2707 configuration file. The example configurations discussed in that
2708 section are available under @file{/etc/configuration} in the
2709 installation image. Thus, to get started with a system configuration
2710 providing a graphical display server (a ``desktop'' system), you can run
2711 something along these lines:
2712
2713 @example
2714 # mkdir /mnt/etc
2715 # cp /etc/configuration/desktop.scm /mnt/etc/config.scm
2716 # nano /mnt/etc/config.scm
2717 @end example
2718
2719 You should pay attention to what your configuration file contains, and
2720 in particular:
2721
2722 @itemize
2723 @item
2724 Make sure the @code{bootloader-configuration} form refers to the targets
2725 you want to install GRUB on. It should mention @code{grub-bootloader}
2726 if you are installing GRUB in the legacy way, or
2727 @code{grub-efi-bootloader} for newer UEFI systems. For legacy systems,
2728 the @code{targets} field contain the names of the devices, like
2729 @code{(list "/dev/sda")}; for UEFI systems it names the paths to mounted
2730 EFI partitions, like @code{(list "/boot/efi")}; do make sure the paths
2731 are currently mounted and a @code{file-system} entry is specified in
2732 your configuration.
2733
2734 @item
2735 Be sure that your file system labels match the value of their respective
2736 @code{device} fields in your @code{file-system} configuration, assuming
2737 your @code{file-system} configuration uses the @code{file-system-label}
2738 procedure in its @code{device} field.
2739
2740 @item
2741 If there are encrypted or RAID partitions, make sure to add a
2742 @code{mapped-devices} field to describe them (@pxref{Mapped Devices}).
2743 @end itemize
2744
2745 Once you are done preparing the configuration file, the new system must
2746 be initialized (remember that the target root file system is mounted
2747 under @file{/mnt}):
2748
2749 @example
2750 guix system init /mnt/etc/config.scm /mnt
2751 @end example
2752
2753 @noindent
2754 This copies all the necessary files and installs GRUB on
2755 @file{/dev/sdX}, unless you pass the @option{--no-bootloader} option. For
2756 more information, @pxref{Invoking guix system}. This command may trigger
2757 downloads or builds of missing packages, which can take some time.
2758
2759 Once that command has completed---and hopefully succeeded!---you can run
2760 @command{reboot} and boot into the new system. The @code{root} password
2761 in the new system is initially empty; other users' passwords need to be
2762 initialized by running the @command{passwd} command as @code{root},
2763 unless your configuration specifies otherwise
2764 (@pxref{user-account-password, user account passwords}).
2765 @xref{After System Installation}, for what's next!
2766
2767
2768 @node After System Installation
2769 @section After System Installation
2770
2771 Success, you've now booted into Guix System! From then on, you can update the
2772 system whenever you want by running, say:
2773
2774 @example
2775 guix pull
2776 sudo guix system reconfigure /etc/config.scm
2777 @end example
2778
2779 @noindent
2780 This builds a new system generation with the latest packages and services
2781 (@pxref{Invoking guix system}). We recommend doing that regularly so that
2782 your system includes the latest security updates (@pxref{Security Updates}).
2783
2784 @c See <https://lists.gnu.org/archive/html/guix-devel/2019-01/msg00268.html>.
2785 @quotation Note
2786 @cindex sudo vs. @command{guix pull}
2787 Note that @command{sudo guix} runs your user's @command{guix} command and
2788 @emph{not} root's, because @command{sudo} leaves @env{PATH} unchanged. To
2789 explicitly run root's @command{guix}, type @command{sudo -i guix @dots{}}.
2790
2791 The difference matters here, because @command{guix pull} updates
2792 the @command{guix} command and package definitions only for the user it is run
2793 as. This means that if you choose to use @command{guix system reconfigure} in
2794 root's login shell, you'll need to @command{guix pull} separately.
2795 @end quotation
2796
2797 Now, @pxref{Getting Started}, and
2798 join us on @code{#guix} on the Libera Chat IRC network or on
2799 @email{guix-devel@@gnu.org} to share your experience!
2800
2801
2802 @node Installing Guix in a VM
2803 @section Installing Guix in a Virtual Machine
2804
2805 @cindex virtual machine, Guix System installation
2806 @cindex virtual private server (VPS)
2807 @cindex VPS (virtual private server)
2808 If you'd like to install Guix System in a virtual machine (VM) or on a
2809 virtual private server (VPS) rather than on your beloved machine, this
2810 section is for you.
2811
2812 To boot a @uref{https://qemu.org/,QEMU} VM for installing Guix System in a
2813 disk image, follow these steps:
2814
2815 @enumerate
2816 @item
2817 First, retrieve and decompress the Guix system installation image as
2818 described previously (@pxref{USB Stick and DVD Installation}).
2819
2820 @item
2821 Create a disk image that will hold the installed system. To make a
2822 qcow2-formatted disk image, use the @command{qemu-img} command:
2823
2824 @example
2825 qemu-img create -f qcow2 guix-system.img 50G
2826 @end example
2827
2828 The resulting file will be much smaller than 50 GB (typically less than
2829 1 MB), but it will grow as the virtualized storage device is filled up.
2830
2831 @item
2832 Boot the USB installation image in an VM:
2833
2834 @example
2835 qemu-system-x86_64 -m 1024 -smp 1 -enable-kvm \
2836 -nic user,model=virtio-net-pci -boot menu=on,order=d \
2837 -drive file=guix-system.img \
2838 -drive media=cdrom,file=guix-system-install-@value{VERSION}.@var{system}.iso
2839 @end example
2840
2841 @code{-enable-kvm} is optional, but significantly improves performance,
2842 @pxref{Running Guix in a VM}.
2843
2844 @item
2845 You're now root in the VM, proceed with the installation process.
2846 @xref{Preparing for Installation}, and follow the instructions.
2847 @end enumerate
2848
2849 Once installation is complete, you can boot the system that's on your
2850 @file{guix-system.img} image. @xref{Running Guix in a VM}, for how to do
2851 that.
2852
2853 @node Building the Installation Image
2854 @section Building the Installation Image
2855
2856 @cindex installation image
2857 The installation image described above was built using the @command{guix
2858 system} command, specifically:
2859
2860 @example
2861 guix system image -t iso9660 gnu/system/install.scm
2862 @end example
2863
2864 Have a look at @file{gnu/system/install.scm} in the source tree,
2865 and see also @ref{Invoking guix system} for more information
2866 about the installation image.
2867
2868 @section Building the Installation Image for ARM Boards
2869
2870 Many ARM boards require a specific variant of the
2871 @uref{https://www.denx.de/wiki/U-Boot/, U-Boot} bootloader.
2872
2873 If you build a disk image and the bootloader is not available otherwise
2874 (on another boot drive etc), it's advisable to build an image that
2875 includes the bootloader, specifically:
2876
2877 @example
2878 guix system image --system=armhf-linux -e '((@@ (gnu system install) os-with-u-boot) (@@ (gnu system install) installation-os) "A20-OLinuXino-Lime2")'
2879 @end example
2880
2881 @code{A20-OLinuXino-Lime2} is the name of the board. If you specify an invalid
2882 board, a list of possible boards will be printed.
2883
2884 @c *********************************************************************
2885 @cindex troubleshooting, guix system
2886 @cindex guix system troubleshooting
2887 @node System Troubleshooting Tips
2888 @chapter System Troubleshooting Tips
2889
2890 Guix System allows rebooting into a previous generation should the last
2891 one be malfunctioning, which makes it quite robust against being broken
2892 irreversibly. This feature depends on GRUB being correctly functioning
2893 though, which means that if for whatever reasons your GRUB installation
2894 becomes corrupted during a system reconfiguration, you may not be able
2895 to easily boot into a previous generation. A technique that can be used
2896 in this case is to @i{chroot} into your broken system and reconfigure it
2897 from there. Such technique is explained below.
2898
2899 @cindex chroot, guix system
2900 @cindex chrooting, guix system
2901 @cindex repairing GRUB, via chroot
2902 @node Chrooting into an existing system
2903 @section Chrooting into an existing system
2904
2905 This section details how to @i{chroot} to an already installed Guix
2906 System with the aim of reconfiguring it, for example to fix a broken
2907 GRUB installation. The process is similar to how it would be done on
2908 other GNU/Linux systems, but there are some Guix System particularities
2909 such as the daemon and profiles that make it worthy of explaining here.
2910
2911 @enumerate
2912 @item
2913 Obtain a bootable image of Guix System. It is recommended the latest
2914 development snapshot so the kernel and the tools used are at least as as
2915 new as those of your installed system; it can be retrieved from the
2916 @url{https://ci.guix.gnu.org/search/latest/ISO-9660?query=spec:images+status:success+system:x86_64-linux+image.iso,
2917 https://ci.guix.gnu.org} URL. Follow the @pxref{USB Stick and DVD
2918 Installation} section for copying it to a bootable media.
2919
2920 @item
2921 Boot the image, and proceed with the graphical text-based installer
2922 until your network is configured. Alternatively, you could configure
2923 the network manually by following the
2924 @ref{manual-installation-networking} section. If you get the error
2925 @samp{RTNETLINK answers: Operation not possible due to RF-kill}, try
2926 @samp{rfkill list} followed by @samp{rfkill unblock 0}, where @samp{0}
2927 is your device identifier (ID).
2928
2929 @item
2930 Switch to a virtual console (tty) if you haven't already by pressing
2931 simultaneously the @kbd{Control + Alt + F4} keys. Mount your file
2932 system at @file{/mnt}. Assuming your root partition is
2933 @file{/dev/sda2}, you would do:
2934
2935 @example sh
2936 mount /dev/sda2 /mnt
2937 @end example
2938
2939 @item
2940 Mount special block devices and Linux-specific directories:
2941
2942 @example sh
2943 mount --bind /proc /mnt/proc
2944 mount --bind /sys /mnt/sys
2945 mount --bind /dev /mnt/dev
2946 @end example
2947
2948 If your system is EFI-based, you must also mount the ESP partition.
2949 Assuming it is @file{/dev/sda1}, you can do so with:
2950
2951 @example sh
2952 mount /dev/sda1 /mnt/boot/efi
2953 @end example
2954
2955 @item
2956 Enter your system via chroot:
2957
2958 @example sh
2959 chroot /mnt /bin/sh
2960 @end example
2961
2962 @item
2963 Source the system profile as well as your @var{user} profile to setup
2964 the environment, where @var{user} is the user name used for the Guix
2965 System you are attempting to repair:
2966
2967 @example sh
2968 source /var/guix/profiles/system/profile/etc/profile
2969 source /home/@var{user}/.guix-profile/etc/profile
2970 @end example
2971
2972 To ensure you are working with the Guix revision you normally would as
2973 your normal user, also source your current Guix profile:
2974
2975 @example sh
2976 source /home/@var{user}/.config/guix/current/etc/profile
2977 @end example
2978
2979 @item
2980 Start a minimal @command{guix-daemon} in the background:
2981
2982 @example sh
2983 guix-daemon --build-users-group=guixbuild --disable-chroot &
2984 @end example
2985
2986 @item
2987 Edit your Guix System configuration if needed, then reconfigure with:
2988
2989 @example sh
2990 guix system reconfigure your-config.scm
2991 @end example
2992
2993 @item
2994 Finally, you should be good to reboot the system to test your fix.
2995
2996 @end enumerate
2997
2998 @c *********************************************************************
2999 @node Getting Started
3000 @chapter Getting Started
3001
3002 Presumably, you've reached this section because either you have
3003 installed Guix on top of another distribution (@pxref{Installation}), or
3004 you've installed the standalone Guix System (@pxref{System
3005 Installation}). It's time for you to get started using Guix and this
3006 section aims to help you do that and give you a feel of what it's like.
3007
3008 Guix is about installing software, so probably the first thing you'll
3009 want to do is to actually look for software. Let's say you're looking
3010 for a text editor, you can run:
3011
3012 @example
3013 guix search text editor
3014 @end example
3015
3016 This command shows you a number of matching @dfn{packages}, each time
3017 showing the package's name, version, a description, and additional info.
3018 Once you've found out the one you want to use, let's say Emacs (ah ha!),
3019 you can go ahead and install it (run this command as a regular user,
3020 @emph{no need for root privileges}!):
3021
3022 @example
3023 guix install emacs
3024 @end example
3025
3026 @cindex profile
3027 You've installed your first package, congrats! The package is now
3028 visible in your default @dfn{profile}, @file{$HOME/.guix-profile}---a
3029 profile is a directory containing installed packages.
3030 In the process, you've
3031 probably noticed that Guix downloaded pre-built binaries; or, if you
3032 explicitly chose to @emph{not} use pre-built binaries, then probably
3033 Guix is still building software (@pxref{Substitutes}, for more info).
3034
3035 Unless you're using Guix System, the @command{guix install} command must
3036 have printed this hint:
3037
3038 @example
3039 hint: Consider setting the necessary environment variables by running:
3040
3041 GUIX_PROFILE="$HOME/.guix-profile"
3042 . "$GUIX_PROFILE/etc/profile"
3043
3044 Alternately, see `guix package --search-paths -p "$HOME/.guix-profile"'.
3045 @end example
3046
3047 Indeed, you must now tell your shell where @command{emacs} and other
3048 programs installed with Guix are to be found. Pasting the two lines
3049 above will do just that: it will add
3050 @code{$HOME/.guix-profile/bin}---which is where the installed package
3051 is---to the @code{PATH} environment variable. You can paste these two
3052 lines in your shell so they take effect right away, but more importantly
3053 you should add them to @file{~/.bash_profile} (or equivalent file if you
3054 do not use Bash) so that environment variables are set next time you
3055 spawn a shell. You only need to do this once and other search paths
3056 environment variables will be taken care of similarly---e.g., if you
3057 eventually install @code{python} and Python libraries,
3058 @env{GUIX_PYTHONPATH} will be defined.
3059
3060 You can go on installing packages at your will. To list installed
3061 packages, run:
3062
3063 @example
3064 guix package --list-installed
3065 @end example
3066
3067 To remove a package, you would unsurprisingly run @command{guix remove}.
3068 A distinguishing feature is the ability to @dfn{roll back} any operation
3069 you made---installation, removal, upgrade---by simply typing:
3070
3071 @example
3072 guix package --roll-back
3073 @end example
3074
3075 This is because each operation is in fact a @dfn{transaction} that
3076 creates a new @dfn{generation}. These generations and the difference
3077 between them can be displayed by running:
3078
3079 @example
3080 guix package --list-generations
3081 @end example
3082
3083 Now you know the basics of package management!
3084
3085 @quotation Going further
3086 @xref{Package Management}, for more about package management. You may
3087 like @dfn{declarative} package management with @command{guix package
3088 --manifest}, managing separate @dfn{profiles} with @option{--profile},
3089 deleting old generations, collecting garbage, and other nifty features
3090 that will come in handy as you become more familiar with Guix. If you
3091 are a developer, @pxref{Development} for additional tools. And if
3092 you're curious, @pxref{Features}, to peek under the hood.
3093 @end quotation
3094
3095 Once you've installed a set of packages, you will want to periodically
3096 @emph{upgrade} them to the latest and greatest version. To do that, you
3097 will first pull the latest revision of Guix and its package collection:
3098
3099 @example
3100 guix pull
3101 @end example
3102
3103 The end result is a new @command{guix} command, under
3104 @file{~/.config/guix/current/bin}. Unless you're on Guix System, the
3105 first time you run @command{guix pull}, be sure to follow the hint that
3106 the command prints and, similar to what we saw above, paste these two
3107 lines in your terminal and @file{.bash_profile}:
3108
3109 @example
3110 GUIX_PROFILE="$HOME/.config/guix/current"
3111 . "$GUIX_PROFILE/etc/profile"
3112 @end example
3113
3114 @noindent
3115 You must also instruct your shell to point to this new @command{guix}:
3116
3117 @example
3118 hash guix
3119 @end example
3120
3121 At this point, you're running a brand new Guix. You can thus go ahead
3122 and actually upgrade all the packages you previously installed:
3123
3124 @example
3125 guix upgrade
3126 @end example
3127
3128 As you run this command, you will see that binaries are downloaded (or
3129 perhaps some packages are built), and eventually you end up with the
3130 upgraded packages. Should one of these upgraded packages not be to your
3131 liking, remember you can always roll back!
3132
3133 You can display the exact revision of Guix you're currently using by
3134 running:
3135
3136 @example
3137 guix describe
3138 @end example
3139
3140 The information it displays is @emph{all it takes to reproduce the exact
3141 same Guix}, be it at a different point in time or on a different
3142 machine.
3143
3144 @quotation Going further
3145 @xref{Invoking guix pull}, for more information. @xref{Channels}, on
3146 how to specify additional @dfn{channels} to pull packages from, how to
3147 replicate Guix, and more. You may also find @command{time-machine}
3148 handy (@pxref{Invoking guix time-machine}).
3149 @end quotation
3150
3151 If you installed Guix System, one of the first things you'll want to do
3152 is to upgrade your system. Once you've run @command{guix pull} to get
3153 the latest Guix, you can upgrade the system like this:
3154
3155 @example
3156 sudo guix system reconfigure /etc/config.scm
3157 @end example
3158
3159 Upon completion, the system runs the latest versions of its software
3160 packages. When you eventually reboot, you'll notice a sub-menu in the
3161 bootloader that reads ``Old system generations'': it's what allows you
3162 to boot @emph{an older generation of your system}, should the latest
3163 generation be ``broken'' or otherwise unsatisfying. Just like for
3164 packages, you can always @emph{roll back} to a previous generation
3165 @emph{of the whole system}:
3166
3167 @example
3168 sudo guix system roll-back
3169 @end example
3170
3171 There are many things you'll probably want to tweak on your system:
3172 adding new user accounts, adding new system services, fiddling with the
3173 configuration of those services, etc. The system configuration is
3174 @emph{entirely} described in the @file{/etc/config.scm} file.
3175 @xref{Using the Configuration System}, to learn how to change it.
3176
3177 Now you know enough to get started!
3178
3179 @quotation Resources
3180 The rest of this manual provides a reference for all things Guix. Here
3181 are some additional resources you may find useful:
3182
3183 @itemize
3184 @item
3185 @xref{Top,,, guix-cookbook, The GNU Guix Cookbook}, for a list of
3186 ``how-to'' style of recipes for a variety of applications.
3187
3188 @item
3189 The @uref{https://guix.gnu.org/guix-refcard.pdf, GNU Guix Reference
3190 Card} lists in two pages most of the commands and options you'll ever
3191 need.
3192
3193 @item
3194 The web site contains @uref{https://guix.gnu.org/en/videos/,
3195 instructional videos} covering topics such as everyday use of Guix, how
3196 to get help, and how to become a contributor.
3197
3198 @item
3199 @xref{Documentation}, to learn how to access documentation on your
3200 computer.
3201 @end itemize
3202
3203 We hope you will enjoy Guix as much as the community enjoys building it!
3204 @end quotation
3205
3206 @c *********************************************************************
3207 @node Package Management
3208 @chapter Package Management
3209
3210 @cindex packages
3211 The purpose of GNU Guix is to allow users to easily install, upgrade, and
3212 remove software packages, without having to know about their build
3213 procedures or dependencies. Guix also goes beyond this obvious set of
3214 features.
3215
3216 This chapter describes the main features of Guix, as well as the
3217 package management tools it provides. Along with the command-line
3218 interface described below (@pxref{Invoking guix package, @code{guix
3219 package}}), you may also use the Emacs-Guix interface (@pxref{Top,,,
3220 emacs-guix, The Emacs-Guix Reference Manual}), after installing
3221 @code{emacs-guix} package (run @kbd{M-x guix-help} command to start
3222 with it):
3223
3224 @example
3225 guix install emacs-guix
3226 @end example
3227
3228 @menu
3229 * Features:: How Guix will make your life brighter.
3230 * Invoking guix package:: Package installation, removal, etc.
3231 * Substitutes:: Downloading pre-built binaries.
3232 * Packages with Multiple Outputs:: Single source package, multiple outputs.
3233 * Invoking guix gc:: Running the garbage collector.
3234 * Invoking guix pull:: Fetching the latest Guix and distribution.
3235 * Invoking guix time-machine:: Running an older revision of Guix.
3236 * Inferiors:: Interacting with another revision of Guix.
3237 * Invoking guix describe:: Display information about your Guix revision.
3238 * Invoking guix archive:: Exporting and importing store files.
3239 @end menu
3240
3241 @node Features
3242 @section Features
3243
3244 Here we assume you've already made your first steps with Guix
3245 (@pxref{Getting Started}) and would like to get an overview about what's
3246 going on under the hood.
3247
3248 When using Guix, each package ends up in the @dfn{package store}, in its
3249 own directory---something that resembles
3250 @file{/gnu/store/xxx-package-1.2}, where @code{xxx} is a base32 string.
3251
3252 Instead of referring to these directories, users have their own
3253 @dfn{profile}, which points to the packages that they actually want to
3254 use. These profiles are stored within each user's home directory, at
3255 @code{$HOME/.guix-profile}.
3256
3257 For example, @code{alice} installs GCC 4.7.2. As a result,
3258 @file{/home/alice/.guix-profile/bin/gcc} points to
3259 @file{/gnu/store/@dots{}-gcc-4.7.2/bin/gcc}. Now, on the same machine,
3260 @code{bob} had already installed GCC 4.8.0. The profile of @code{bob}
3261 simply continues to point to
3262 @file{/gnu/store/@dots{}-gcc-4.8.0/bin/gcc}---i.e., both versions of GCC
3263 coexist on the same system without any interference.
3264
3265 The @command{guix package} command is the central tool to manage
3266 packages (@pxref{Invoking guix package}). It operates on the per-user
3267 profiles, and can be used @emph{with normal user privileges}.
3268
3269 @cindex transactions
3270 The command provides the obvious install, remove, and upgrade
3271 operations. Each invocation is actually a @emph{transaction}: either
3272 the specified operation succeeds, or nothing happens. Thus, if the
3273 @command{guix package} process is terminated during the transaction,
3274 or if a power outage occurs during the transaction, then the user's
3275 profile remains in its previous state, and remains usable.
3276
3277 In addition, any package transaction may be @emph{rolled back}. So, if,
3278 for example, an upgrade installs a new version of a package that turns
3279 out to have a serious bug, users may roll back to the previous instance
3280 of their profile, which was known to work well. Similarly, the global
3281 system configuration on Guix is subject to
3282 transactional upgrades and roll-back
3283 (@pxref{Using the Configuration System}).
3284
3285 All packages in the package store may be @emph{garbage-collected}.
3286 Guix can determine which packages are still referenced by user
3287 profiles, and remove those that are provably no longer referenced
3288 (@pxref{Invoking guix gc}). Users may also explicitly remove old
3289 generations of their profile so that the packages they refer to can be
3290 collected.
3291
3292 @cindex reproducibility
3293 @cindex reproducible builds
3294 Guix takes a @dfn{purely functional} approach to package
3295 management, as described in the introduction (@pxref{Introduction}).
3296 Each @file{/gnu/store} package directory name contains a hash of all the
3297 inputs that were used to build that package---compiler, libraries, build
3298 scripts, etc. This direct correspondence allows users to make sure a
3299 given package installation matches the current state of their
3300 distribution. It also helps maximize @dfn{build reproducibility}:
3301 thanks to the isolated build environments that are used, a given build
3302 is likely to yield bit-identical files when performed on different
3303 machines (@pxref{Invoking guix-daemon, container}).
3304
3305 @cindex substitutes
3306 This foundation allows Guix to support @dfn{transparent binary/source
3307 deployment}. When a pre-built binary for a @file{/gnu/store} item is
3308 available from an external source---a @dfn{substitute}, Guix just
3309 downloads it and unpacks it;
3310 otherwise, it builds the package from source, locally
3311 (@pxref{Substitutes}). Because build results are usually bit-for-bit
3312 reproducible, users do not have to trust servers that provide
3313 substitutes: they can force a local build and @emph{challenge} providers
3314 (@pxref{Invoking guix challenge}).
3315
3316 Control over the build environment is a feature that is also useful for
3317 developers. The @command{guix shell} command allows developers of
3318 a package to quickly set up the right development environment for their
3319 package, without having to manually install the dependencies of the
3320 package into their profile (@pxref{Invoking guix shell}).
3321
3322 @cindex replication, of software environments
3323 @cindex provenance tracking, of software artifacts
3324 All of Guix and its package definitions is version-controlled, and
3325 @command{guix pull} allows you to ``travel in time'' on the history of Guix
3326 itself (@pxref{Invoking guix pull}). This makes it possible to replicate a
3327 Guix instance on a different machine or at a later point in time, which in
3328 turn allows you to @emph{replicate complete software environments}, while
3329 retaining precise @dfn{provenance tracking} of the software.
3330
3331 @node Invoking guix package
3332 @section Invoking @command{guix package}
3333
3334 @cindex installing packages
3335 @cindex removing packages
3336 @cindex package installation
3337 @cindex package removal
3338 @cindex profile
3339 @cindex @command{guix package}
3340 The @command{guix package} command is the tool that allows users to
3341 install, upgrade, and remove packages, as well as rolling back to
3342 previous configurations. These operations work on a user
3343 @dfn{profile}---a directory of installed packages. Each user has a
3344 default profile in @file{$HOME/.guix-profile}.
3345 The command operates only on the user's own profile,
3346 and works with normal user privileges (@pxref{Features}). Its syntax
3347 is:
3348
3349 @example
3350 guix package @var{options}
3351 @end example
3352
3353 @cindex transactions
3354 Primarily, @var{options} specifies the operations to be performed during
3355 the transaction. Upon completion, a new profile is created, but
3356 previous @dfn{generations} of the profile remain available, should the user
3357 want to roll back.
3358
3359 For example, to remove @code{lua} and install @code{guile} and
3360 @code{guile-cairo} in a single transaction:
3361
3362 @example
3363 guix package -r lua -i guile guile-cairo
3364 @end example
3365
3366 @cindex aliases, for @command{guix package}
3367 For your convenience, we also provide the following aliases:
3368
3369 @itemize
3370 @item
3371 @command{guix search} is an alias for @command{guix package -s},
3372 @item
3373 @command{guix install} is an alias for @command{guix package -i},
3374 @item
3375 @command{guix remove} is an alias for @command{guix package -r},
3376 @item
3377 @command{guix upgrade} is an alias for @command{guix package -u},
3378 @item
3379 and @command{guix show} is an alias for @command{guix package --show=}.
3380 @end itemize
3381
3382 These aliases are less expressive than @command{guix package} and provide
3383 fewer options, so in some cases you'll probably want to use @command{guix
3384 package} directly.
3385
3386 @command{guix package} also supports a @dfn{declarative approach}
3387 whereby the user specifies the exact set of packages to be available and
3388 passes it @i{via} the @option{--manifest} option
3389 (@pxref{profile-manifest, @option{--manifest}}).
3390
3391 @cindex profile
3392 For each user, a symlink to the user's default profile is automatically
3393 created in @file{$HOME/.guix-profile}. This symlink always points to the
3394 current generation of the user's default profile. Thus, users can add
3395 @file{$HOME/.guix-profile/bin} to their @env{PATH} environment
3396 variable, and so on.
3397 @cindex search paths
3398 If you are not using Guix System, consider adding the
3399 following lines to your @file{~/.bash_profile} (@pxref{Bash Startup
3400 Files,,, bash, The GNU Bash Reference Manual}) so that newly-spawned
3401 shells get all the right environment variable definitions:
3402
3403 @example
3404 GUIX_PROFILE="$HOME/.guix-profile" ; \
3405 source "$GUIX_PROFILE/etc/profile"
3406 @end example
3407
3408 In a multi-user setup, user profiles are stored in a place registered as
3409 a @dfn{garbage-collector root}, which @file{$HOME/.guix-profile} points
3410 to (@pxref{Invoking guix gc}). That directory is normally
3411 @code{@var{localstatedir}/guix/profiles/per-user/@var{user}}, where
3412 @var{localstatedir} is the value passed to @code{configure} as
3413 @option{--localstatedir}, and @var{user} is the user name. The
3414 @file{per-user} directory is created when @command{guix-daemon} is
3415 started, and the @var{user} sub-directory is created by @command{guix
3416 package}.
3417
3418 The @var{options} can be among the following:
3419
3420 @table @code
3421
3422 @item --install=@var{package} @dots{}
3423 @itemx -i @var{package} @dots{}
3424 Install the specified @var{package}s.
3425
3426 Each @var{package} may specify either a simple package name, such as
3427 @code{guile}, or a package name followed by an at-sign and version number,
3428 such as @code{guile@@1.8.8} or simply @code{guile@@1.8} (in the latter
3429 case, the newest version prefixed by @code{1.8} is selected).
3430
3431 If no version number is specified, the
3432 newest available version will be selected. In addition, @var{package}
3433 may contain a colon, followed by the name of one of the outputs of the
3434 package, as in @code{gcc:doc} or @code{binutils@@2.22:lib}
3435 (@pxref{Packages with Multiple Outputs}). Packages with a corresponding
3436 name (and optionally version) are searched for among the GNU
3437 distribution modules (@pxref{Package Modules}).
3438
3439 @cindex propagated inputs
3440 Sometimes packages have @dfn{propagated inputs}: these are dependencies
3441 that automatically get installed along with the required package
3442 (@pxref{package-propagated-inputs, @code{propagated-inputs} in
3443 @code{package} objects}, for information about propagated inputs in
3444 package definitions).
3445
3446 @anchor{package-cmd-propagated-inputs}
3447 An example is the GNU MPC library: its C header files refer to those of
3448 the GNU MPFR library, which in turn refer to those of the GMP library.
3449 Thus, when installing MPC, the MPFR and GMP libraries also get installed
3450 in the profile; removing MPC also removes MPFR and GMP---unless they had
3451 also been explicitly installed by the user.
3452
3453 Besides, packages sometimes rely on the definition of environment
3454 variables for their search paths (see explanation of
3455 @option{--search-paths} below). Any missing or possibly incorrect
3456 environment variable definitions are reported here.
3457
3458 @item --install-from-expression=@var{exp}
3459 @itemx -e @var{exp}
3460 Install the package @var{exp} evaluates to.
3461
3462 @var{exp} must be a Scheme expression that evaluates to a
3463 @code{<package>} object. This option is notably useful to disambiguate
3464 between same-named variants of a package, with expressions such as
3465 @code{(@@ (gnu packages base) guile-final)}.
3466
3467 Note that this option installs the first output of the specified
3468 package, which may be insufficient when needing a specific output of a
3469 multiple-output package.
3470
3471 @item --install-from-file=@var{file}
3472 @itemx -f @var{file}
3473 Install the package that the code within @var{file} evaluates to.
3474
3475 As an example, @var{file} might contain a definition like this
3476 (@pxref{Defining Packages}):
3477
3478 @lisp
3479 @include package-hello.scm
3480 @end lisp
3481
3482 Developers may find it useful to include such a @file{guix.scm} file
3483 in the root of their project source tree that can be used to test
3484 development snapshots and create reproducible development environments
3485 (@pxref{Invoking guix shell}).
3486
3487 The @var{file} may also contain a JSON representation of one or more
3488 package definitions. Running @code{guix package -f} on
3489 @file{hello.json} with the following contents would result in installing
3490 the package @code{greeter} after building @code{myhello}:
3491
3492 @example
3493 @verbatiminclude package-hello.json
3494 @end example
3495
3496 @item --remove=@var{package} @dots{}
3497 @itemx -r @var{package} @dots{}
3498 Remove the specified @var{package}s.
3499
3500 As for @option{--install}, each @var{package} may specify a version number
3501 and/or output name in addition to the package name. For instance,
3502 @samp{-r glibc:debug} would remove the @code{debug} output of
3503 @code{glibc}.
3504
3505 @item --upgrade[=@var{regexp} @dots{}]
3506 @itemx -u [@var{regexp} @dots{}]
3507 @cindex upgrading packages
3508 Upgrade all the installed packages. If one or more @var{regexp}s are
3509 specified, upgrade only installed packages whose name matches a
3510 @var{regexp}. Also see the @option{--do-not-upgrade} option below.
3511
3512 Note that this upgrades package to the latest version of packages found
3513 in the distribution currently installed. To update your distribution,
3514 you should regularly run @command{guix pull} (@pxref{Invoking guix
3515 pull}).
3516
3517 @cindex package transformations, upgrades
3518 When upgrading, package transformations that were originally applied
3519 when creating the profile are automatically re-applied (@pxref{Package
3520 Transformation Options}). For example, assume you first installed Emacs
3521 from the tip of its development branch with:
3522
3523 @example
3524 guix install emacs-next --with-branch=emacs-next=master
3525 @end example
3526
3527 Next time you run @command{guix upgrade}, Guix will again pull the tip
3528 of the Emacs development branch and build @code{emacs-next} from that
3529 checkout.
3530
3531 Note that transformation options such as @option{--with-branch} and
3532 @option{--with-source} depend on external state; it is up to you to
3533 ensure that they work as expected. You can also discard a
3534 transformations that apply to a package by running:
3535
3536 @example
3537 guix install @var{package}
3538 @end example
3539
3540 @item --do-not-upgrade[=@var{regexp} @dots{}]
3541 When used together with the @option{--upgrade} option, do @emph{not}
3542 upgrade any packages whose name matches a @var{regexp}. For example, to
3543 upgrade all packages in the current profile except those containing the
3544 substring ``emacs'':
3545
3546 @example
3547 $ guix package --upgrade . --do-not-upgrade emacs
3548 @end example
3549
3550 @item @anchor{profile-manifest}--manifest=@var{file}
3551 @itemx -m @var{file}
3552 @cindex profile declaration
3553 @cindex profile manifest
3554 Create a new generation of the profile from the manifest object
3555 returned by the Scheme code in @var{file}. This option can be repeated
3556 several times, in which case the manifests are concatenated.
3557
3558 This allows you to @emph{declare} the profile's contents rather than
3559 constructing it through a sequence of @option{--install} and similar
3560 commands. The advantage is that @var{file} can be put under version
3561 control, copied to different machines to reproduce the same profile, and
3562 so on.
3563
3564 @var{file} must return a @dfn{manifest} object, which is roughly a list
3565 of packages:
3566
3567 @findex packages->manifest
3568 @lisp
3569 (use-package-modules guile emacs)
3570
3571 (packages->manifest
3572 (list emacs
3573 guile-2.0
3574 ;; Use a specific package output.
3575 (list guile-2.0 "debug")))
3576 @end lisp
3577
3578 @xref{Writing Manifests}, for information on how to write a manifest.
3579 @xref{export-manifest, @option{--export-manifest}}, to learn how to
3580 obtain a manifest file from an existing profile.
3581
3582 @item --roll-back
3583 @cindex rolling back
3584 @cindex undoing transactions
3585 @cindex transactions, undoing
3586 Roll back to the previous @dfn{generation} of the profile---i.e., undo
3587 the last transaction.
3588
3589 When combined with options such as @option{--install}, roll back occurs
3590 before any other actions.
3591
3592 When rolling back from the first generation that actually contains
3593 installed packages, the profile is made to point to the @dfn{zeroth
3594 generation}, which contains no files apart from its own metadata.
3595
3596 After having rolled back, installing, removing, or upgrading packages
3597 overwrites previous future generations. Thus, the history of the
3598 generations in a profile is always linear.
3599
3600 @item --switch-generation=@var{pattern}
3601 @itemx -S @var{pattern}
3602 @cindex generations
3603 Switch to a particular generation defined by @var{pattern}.
3604
3605 @var{pattern} may be either a generation number or a number prefixed
3606 with ``+'' or ``-''. The latter means: move forward/backward by a
3607 specified number of generations. For example, if you want to return to
3608 the latest generation after @option{--roll-back}, use
3609 @option{--switch-generation=+1}.
3610
3611 The difference between @option{--roll-back} and
3612 @option{--switch-generation=-1} is that @option{--switch-generation} will
3613 not make a zeroth generation, so if a specified generation does not
3614 exist, the current generation will not be changed.
3615
3616 @item --search-paths[=@var{kind}]
3617 @cindex search paths
3618 Report environment variable definitions, in Bash syntax, that may be
3619 needed in order to use the set of installed packages. These environment
3620 variables are used to specify @dfn{search paths} for files used by some
3621 of the installed packages.
3622
3623 For example, GCC needs the @env{CPATH} and @env{LIBRARY_PATH}
3624 environment variables to be defined so it can look for headers and
3625 libraries in the user's profile (@pxref{Environment Variables,,, gcc,
3626 Using the GNU Compiler Collection (GCC)}). If GCC and, say, the C
3627 library are installed in the profile, then @option{--search-paths} will
3628 suggest setting these variables to @file{@var{profile}/include} and
3629 @file{@var{profile}/lib}, respectively (@pxref{Search Paths}, for info
3630 on search path specifications associated with packages.)
3631
3632 The typical use case is to define these environment variables in the
3633 shell:
3634
3635 @example
3636 $ eval $(guix package --search-paths)
3637 @end example
3638
3639 @var{kind} may be one of @code{exact}, @code{prefix}, or @code{suffix},
3640 meaning that the returned environment variable definitions will either
3641 be exact settings, or prefixes or suffixes of the current value of these
3642 variables. When omitted, @var{kind} defaults to @code{exact}.
3643
3644 This option can also be used to compute the @emph{combined} search paths
3645 of several profiles. Consider this example:
3646
3647 @example
3648 $ guix package -p foo -i guile
3649 $ guix package -p bar -i guile-json
3650 $ guix package -p foo -p bar --search-paths
3651 @end example
3652
3653 The last command above reports about the @env{GUILE_LOAD_PATH}
3654 variable, even though, taken individually, neither @file{foo} nor
3655 @file{bar} would lead to that recommendation.
3656
3657
3658 @cindex profile, choosing
3659 @item --profile=@var{profile}
3660 @itemx -p @var{profile}
3661 Use @var{profile} instead of the user's default profile.
3662
3663 @var{profile} must be the name of a file that will be created upon
3664 completion. Concretely, @var{profile} will be a mere symbolic link
3665 (``symlink'') pointing to the actual profile where packages are
3666 installed:
3667
3668 @example
3669 $ guix install hello -p ~/code/my-profile
3670 @dots{}
3671 $ ~/code/my-profile/bin/hello
3672 Hello, world!
3673 @end example
3674
3675 All it takes to get rid of the profile is to remove this symlink and its
3676 siblings that point to specific generations:
3677
3678 @example
3679 $ rm ~/code/my-profile ~/code/my-profile-*-link
3680 @end example
3681
3682 @item --list-profiles
3683 List all the user's profiles:
3684
3685 @example
3686 $ guix package --list-profiles
3687 /home/charlie/.guix-profile
3688 /home/charlie/code/my-profile
3689 /home/charlie/code/devel-profile
3690 /home/charlie/tmp/test
3691 @end example
3692
3693 When running as root, list all the profiles of all the users.
3694
3695 @cindex collisions, in a profile
3696 @cindex colliding packages in profiles
3697 @cindex profile collisions
3698 @item --allow-collisions
3699 Allow colliding packages in the new profile. Use at your own risk!
3700
3701 By default, @command{guix package} reports as an error @dfn{collisions}
3702 in the profile. Collisions happen when two or more different versions
3703 or variants of a given package end up in the profile.
3704
3705 @item --bootstrap
3706 Use the bootstrap Guile to build the profile. This option is only
3707 useful to distribution developers.
3708
3709 @end table
3710
3711 In addition to these actions, @command{guix package} supports the
3712 following options to query the current state of a profile, or the
3713 availability of packages:
3714
3715 @table @option
3716
3717 @item --search=@var{regexp}
3718 @itemx -s @var{regexp}
3719 @anchor{guix-search}
3720 @cindex searching for packages
3721 List the available packages whose name, synopsis, or description matches
3722 @var{regexp} (in a case-insensitive fashion), sorted by relevance.
3723 Print all the metadata of matching packages in
3724 @code{recutils} format (@pxref{Top, GNU recutils databases,, recutils,
3725 GNU recutils manual}).
3726
3727 This allows specific fields to be extracted using the @command{recsel}
3728 command, for instance:
3729
3730 @example
3731 $ guix package -s malloc | recsel -p name,version,relevance
3732 name: jemalloc
3733 version: 4.5.0
3734 relevance: 6
3735
3736 name: glibc
3737 version: 2.25
3738 relevance: 1
3739
3740 name: libgc
3741 version: 7.6.0
3742 relevance: 1
3743 @end example
3744
3745 Similarly, to show the name of all the packages available under the
3746 terms of the GNU@tie{}LGPL version 3:
3747
3748 @example
3749 $ guix package -s "" | recsel -p name -e 'license ~ "LGPL 3"'
3750 name: elfutils
3751
3752 name: gmp
3753 @dots{}
3754 @end example
3755
3756 It is also possible to refine search results using several @code{-s} flags to
3757 @command{guix package}, or several arguments to @command{guix search}. For
3758 example, the following command returns a list of board games (this time using
3759 the @command{guix search} alias):
3760
3761 @example
3762 $ guix search '\<board\>' game | recsel -p name
3763 name: gnubg
3764 @dots{}
3765 @end example
3766
3767 If we were to omit @code{-s game}, we would also get software packages
3768 that deal with printed circuit boards; removing the angle brackets
3769 around @code{board} would further add packages that have to do with
3770 keyboards.
3771
3772 And now for a more elaborate example. The following command searches
3773 for cryptographic libraries, filters out Haskell, Perl, Python, and Ruby
3774 libraries, and prints the name and synopsis of the matching packages:
3775
3776 @example
3777 $ guix search crypto library | \
3778 recsel -e '! (name ~ "^(ghc|perl|python|ruby)")' -p name,synopsis
3779 @end example
3780
3781 @noindent
3782 @xref{Selection Expressions,,, recutils, GNU recutils manual}, for more
3783 information on @dfn{selection expressions} for @code{recsel -e}.
3784
3785 @item --show=@var{package}
3786 Show details about @var{package}, taken from the list of available packages, in
3787 @code{recutils} format (@pxref{Top, GNU recutils databases,, recutils, GNU
3788 recutils manual}).
3789
3790 @example
3791 $ guix package --show=guile | recsel -p name,version
3792 name: guile
3793 version: 3.0.5
3794
3795 name: guile
3796 version: 3.0.2
3797
3798 name: guile
3799 version: 2.2.7
3800 @dots{}
3801 @end example
3802
3803 You may also specify the full name of a package to only get details about a
3804 specific version of it (this time using the @command{guix show} alias):
3805 @example
3806 $ guix show guile@@3.0.5 | recsel -p name,version
3807 name: guile
3808 version: 3.0.5
3809 @end example
3810
3811 @item --list-installed[=@var{regexp}]
3812 @itemx -I [@var{regexp}]
3813 List the currently installed packages in the specified profile, with the
3814 most recently installed packages shown last. When @var{regexp} is
3815 specified, list only installed packages whose name matches @var{regexp}.
3816
3817 For each installed package, print the following items, separated by
3818 tabs: the package name, its version string, the part of the package that
3819 is installed (for instance, @code{out} for the default output,
3820 @code{include} for its headers, etc.), and the path of this package in
3821 the store.
3822
3823 @item --list-available[=@var{regexp}]
3824 @itemx -A [@var{regexp}]
3825 List packages currently available in the distribution for this system
3826 (@pxref{GNU Distribution}). When @var{regexp} is specified, list only
3827 available packages whose name matches @var{regexp}.
3828
3829 For each package, print the following items separated by tabs: its name,
3830 its version string, the parts of the package (@pxref{Packages with
3831 Multiple Outputs}), and the source location of its definition.
3832
3833 @item --list-generations[=@var{pattern}]
3834 @itemx -l [@var{pattern}]
3835 @cindex generations
3836 Return a list of generations along with their creation dates; for each
3837 generation, show the installed packages, with the most recently
3838 installed packages shown last. Note that the zeroth generation is never
3839 shown.
3840
3841 For each installed package, print the following items, separated by
3842 tabs: the name of a package, its version string, the part of the package
3843 that is installed (@pxref{Packages with Multiple Outputs}), and the
3844 location of this package in the store.
3845
3846 When @var{pattern} is used, the command returns only matching
3847 generations. Valid patterns include:
3848
3849 @itemize
3850 @item @emph{Integers and comma-separated integers}. Both patterns denote
3851 generation numbers. For instance, @option{--list-generations=1} returns
3852 the first one.
3853
3854 And @option{--list-generations=1,8,2} outputs three generations in the
3855 specified order. Neither spaces nor trailing commas are allowed.
3856
3857 @item @emph{Ranges}. @option{--list-generations=2..9} prints the
3858 specified generations and everything in between. Note that the start of
3859 a range must be smaller than its end.
3860
3861 It is also possible to omit the endpoint. For example,
3862 @option{--list-generations=2..}, returns all generations starting from the
3863 second one.
3864
3865 @item @emph{Durations}. You can also get the last @emph{N}@tie{}days, weeks,
3866 or months by passing an integer along with the first letter of the
3867 duration. For example, @option{--list-generations=20d} lists generations
3868 that are up to 20 days old.
3869 @end itemize
3870
3871 @item --delete-generations[=@var{pattern}]
3872 @itemx -d [@var{pattern}]
3873 When @var{pattern} is omitted, delete all generations except the current
3874 one.
3875
3876 This command accepts the same patterns as @option{--list-generations}.
3877 When @var{pattern} is specified, delete the matching generations. When
3878 @var{pattern} specifies a duration, generations @emph{older} than the
3879 specified duration match. For instance, @option{--delete-generations=1m}
3880 deletes generations that are more than one month old.
3881
3882 If the current generation matches, it is @emph{not} deleted. Also, the
3883 zeroth generation is never deleted.
3884
3885 Note that deleting generations prevents rolling back to them.
3886 Consequently, this command must be used with care.
3887
3888 @cindex manifest, exporting
3889 @anchor{export-manifest}
3890 @item --export-manifest
3891 Write to standard output a manifest suitable for @option{--manifest}
3892 corresponding to the chosen profile(s).
3893
3894 This option is meant to help you migrate from the ``imperative''
3895 operating mode---running @command{guix install}, @command{guix upgrade},
3896 etc.---to the declarative mode that @option{--manifest} offers.
3897
3898 Be aware that the resulting manifest @emph{approximates} what your
3899 profile actually contains; for instance, depending on how your profile
3900 was created, it can refer to packages or package versions that are not
3901 exactly what you specified.
3902
3903 Keep in mind that a manifest is purely symbolic: it only contains
3904 package names and possibly versions, and their meaning varies over time.
3905 If you wish to ``pin'' channels to the revisions that were used to build
3906 the profile(s), see @option{--export-channels} below.
3907
3908 @cindex pinning, channel revisions of a profile
3909 @item --export-channels
3910 Write to standard output the list of channels used by the chosen
3911 profile(s), in a format suitable for @command{guix pull --channels} or
3912 @command{guix time-machine --channels} (@pxref{Channels}).
3913
3914 Together with @option{--export-manifest}, this option provides
3915 information allowing you to replicate the current profile
3916 (@pxref{Replicating Guix}).
3917
3918 However, note that the output of this command @emph{approximates} what
3919 was actually used to build this profile. In particular, a single
3920 profile might have been built from several different revisions of the
3921 same channel. In that case, @option{--export-manifest} chooses the last
3922 one and writes the list of other revisions in a comment. If you really
3923 need to pick packages from different channel revisions, you can use
3924 inferiors in your manifest to do so (@pxref{Inferiors}).
3925
3926 Together with @option{--export-manifest}, this is a good starting point
3927 if you are willing to migrate from the ``imperative'' model to the fully
3928 declarative model consisting of a manifest file along with a channels
3929 file pinning the exact channel revision(s) you want.
3930 @end table
3931
3932 Finally, since @command{guix package} may actually start build
3933 processes, it supports all the common build options (@pxref{Common Build
3934 Options}). It also supports package transformation options, such as
3935 @option{--with-source}, and preserves them across upgrades
3936 (@pxref{Package Transformation Options}).
3937
3938 @node Substitutes
3939 @section Substitutes
3940
3941 @cindex substitutes
3942 @cindex pre-built binaries
3943 Guix supports transparent source/binary deployment, which means that it
3944 can either build things locally, or download pre-built items from a
3945 server, or both. We call these pre-built items @dfn{substitutes}---they
3946 are substitutes for local build results. In many cases, downloading a
3947 substitute is much faster than building things locally.
3948
3949 Substitutes can be anything resulting from a derivation build
3950 (@pxref{Derivations}). Of course, in the common case, they are
3951 pre-built package binaries, but source tarballs, for instance, which
3952 also result from derivation builds, can be available as substitutes.
3953
3954 @menu
3955 * Official Substitute Servers:: One particular source of substitutes.
3956 * Substitute Server Authorization:: How to enable or disable substitutes.
3957 * Getting Substitutes from Other Servers:: Substitute diversity.
3958 * Substitute Authentication:: How Guix verifies substitutes.
3959 * Proxy Settings:: How to get substitutes via proxy.
3960 * Substitution Failure:: What happens when substitution fails.
3961 * On Trusting Binaries:: How can you trust that binary blob?
3962 @end menu
3963
3964 @node Official Substitute Servers
3965 @subsection Official Substitute Servers
3966
3967 @cindex build farm
3968 @code{@value{SUBSTITUTE-SERVER-1}} and
3969 @code{@value{SUBSTITUTE-SERVER-2}} are both front-ends to official build
3970 farms that build packages from Guix continuously for some architectures,
3971 and make them available as substitutes. These are the default source of
3972 substitutes; which can be overridden by passing the
3973 @option{--substitute-urls} option either to @command{guix-daemon}
3974 (@pxref{daemon-substitute-urls,, @code{guix-daemon --substitute-urls}})
3975 or to client tools such as @command{guix package}
3976 (@pxref{client-substitute-urls,, client @option{--substitute-urls}
3977 option}).
3978
3979 Substitute URLs can be either HTTP or HTTPS.
3980 HTTPS is recommended because communications are encrypted; conversely,
3981 using HTTP makes all communications visible to an eavesdropper, who
3982 could use the information gathered to determine, for instance, whether
3983 your system has unpatched security vulnerabilities.
3984
3985 Substitutes from the official build farms are enabled by default when
3986 using Guix System (@pxref{GNU Distribution}). However,
3987 they are disabled by default when using Guix on a foreign distribution,
3988 unless you have explicitly enabled them via one of the recommended
3989 installation steps (@pxref{Installation}). The following paragraphs
3990 describe how to enable or disable substitutes for the official build
3991 farm; the same procedure can also be used to enable substitutes for any
3992 other substitute server.
3993
3994 @node Substitute Server Authorization
3995 @subsection Substitute Server Authorization
3996
3997 @cindex security
3998 @cindex substitutes, authorization thereof
3999 @cindex access control list (ACL), for substitutes
4000 @cindex ACL (access control list), for substitutes
4001 To allow Guix to download substitutes from @code{@value{SUBSTITUTE-SERVER-1}}, @code{@value{SUBSTITUTE-SERVER-2}} or a mirror, you
4002 must add the relevant public key to the access control list (ACL) of archive
4003 imports, using the @command{guix archive} command (@pxref{Invoking guix
4004 archive}). Doing so implies that you trust the substitute server to not
4005 be compromised and to serve genuine substitutes.
4006
4007 @quotation Note
4008 If you are using Guix System, you can skip this section: Guix System
4009 authorizes substitutes from @code{@value{SUBSTITUTE-SERVER-1}} and
4010 @code{@value{SUBSTITUTE-SERVER-2}} by default.
4011 @end quotation
4012
4013 The public keys for each of the project maintained substitute servers
4014 are installed along with Guix, in @code{@var{prefix}/share/guix/}, where
4015 @var{prefix} is the installation prefix of Guix. If you installed Guix
4016 from source, make sure you checked the GPG signature of
4017 @file{guix-@value{VERSION}.tar.gz}, which contains this public key file.
4018 Then, you can run something like this:
4019
4020 @example
4021 # guix archive --authorize < @var{prefix}/share/guix/@value{SUBSTITUTE-SERVER-1}.pub
4022 # guix archive --authorize < @var{prefix}/share/guix/@value{SUBSTITUTE-SERVER-2}.pub
4023 @end example
4024
4025 Once this is in place, the output of a command like @code{guix build}
4026 should change from something like:
4027
4028 @example
4029 $ guix build emacs --dry-run
4030 The following derivations would be built:
4031 /gnu/store/yr7bnx8xwcayd6j95r2clmkdl1qh688w-emacs-24.3.drv
4032 /gnu/store/x8qsh1hlhgjx6cwsjyvybnfv2i37z23w-dbus-1.6.4.tar.gz.drv
4033 /gnu/store/1ixwp12fl950d15h2cj11c73733jay0z-alsa-lib-1.0.27.1.tar.bz2.drv
4034 /gnu/store/nlma1pw0p603fpfiqy7kn4zm105r5dmw-util-linux-2.21.drv
4035 @dots{}
4036 @end example
4037
4038 @noindent
4039 to something like:
4040
4041 @example
4042 $ guix build emacs --dry-run
4043 112.3 MB would be downloaded:
4044 /gnu/store/pk3n22lbq6ydamyymqkkz7i69wiwjiwi-emacs-24.3
4045 /gnu/store/2ygn4ncnhrpr61rssa6z0d9x22si0va3-libjpeg-8d
4046 /gnu/store/71yz6lgx4dazma9dwn2mcjxaah9w77jq-cairo-1.12.16
4047 /gnu/store/7zdhgp0n1518lvfn8mb96sxqfmvqrl7v-libxrender-0.9.7
4048 @dots{}
4049 @end example
4050
4051 @noindent
4052 The text changed from ``The following derivations would be built'' to
4053 ``112.3 MB would be downloaded''. This indicates that substitutes from
4054 the configured substitute servers are usable and will be downloaded,
4055 when possible, for future builds.
4056
4057 @cindex substitutes, how to disable
4058 The substitute mechanism can be disabled globally by running
4059 @code{guix-daemon} with @option{--no-substitutes} (@pxref{Invoking
4060 guix-daemon}). It can also be disabled temporarily by passing the
4061 @option{--no-substitutes} option to @command{guix package},
4062 @command{guix build}, and other command-line tools.
4063
4064 @node Getting Substitutes from Other Servers
4065 @subsection Getting Substitutes from Other Servers
4066
4067 @cindex substitute servers, adding more
4068 Guix can look up and fetch substitutes from several servers. This is
4069 useful when you are using packages from additional channels for which
4070 the official server does not have substitutes but another server
4071 provides them. Another situation where this is useful is when you would
4072 prefer to download from your organization's substitute server, resorting
4073 to the official server only as a fallback or dismissing it altogether.
4074
4075 You can give Guix a list of substitute server URLs and it will check
4076 them in the specified order. You also need to explicitly authorize the
4077 public keys of substitute servers to instruct Guix to accept the
4078 substitutes they sign.
4079
4080 On Guix System, this is achieved by modifying the configuration of the
4081 @code{guix} service. Since the @code{guix} service is part of the
4082 default lists of services, @code{%base-services} and
4083 @code{%desktop-services}, you can use @code{modify-services} to change
4084 its configuration and add the URLs and substitute keys that you want
4085 (@pxref{Service Reference, @code{modify-services}}).
4086
4087 As an example, suppose you want to fetch substitutes from
4088 @code{guix.example.org} and to authorize the signing key of that server,
4089 in addition to the default @code{@value{SUBSTITUTE-SERVER-1}} and
4090 @code{@value{SUBSTITUTE-SERVER-2}}. The resulting operating system
4091 configuration will look something like:
4092
4093 @lisp
4094 (operating-system
4095 ;; @dots{}
4096 (services
4097 ;; Assume we're starting from '%desktop-services'. Replace it
4098 ;; with the list of services you're actually using.
4099 (modify-services %desktop-services
4100 (guix-service-type config =>
4101 (guix-configuration
4102 (inherit config)
4103 (substitute-urls
4104 (append (list "https://guix.example.org")
4105 %default-substitute-urls))
4106 (authorized-keys
4107 (append (list (local-file "./key.pub"))
4108 %default-authorized-guix-keys)))))))
4109 @end lisp
4110
4111 This assumes that the file @file{key.pub} contains the signing key of
4112 @code{guix.example.org}. With this change in place in your operating
4113 system configuration file (say @file{/etc/config.scm}), you can
4114 reconfigure and restart the @code{guix-daemon} service or reboot so the
4115 changes take effect:
4116
4117 @example
4118 $ sudo guix system reconfigure /etc/config.scm
4119 $ sudo herd restart guix-daemon
4120 @end example
4121
4122 If you're running Guix on a ``foreign distro'', you would instead take
4123 the following steps to get substitutes from additional servers:
4124
4125 @enumerate
4126 @item
4127 Edit the service configuration file for @code{guix-daemon}; when using
4128 systemd, this is normally
4129 @file{/etc/systemd/system/guix-daemon.service}. Add the
4130 @option{--substitute-urls} option on the @command{guix-daemon} command
4131 line and list the URLs of interest (@pxref{daemon-substitute-urls,
4132 @code{guix-daemon --substitute-urls}}):
4133
4134 @example
4135 @dots{} --substitute-urls='https://guix.example.org @value{SUBSTITUTE-URLS}'
4136 @end example
4137
4138 @item
4139 Restart the daemon. For systemd, it goes like this:
4140
4141 @example
4142 systemctl daemon-reload
4143 systemctl restart guix-daemon.service
4144 @end example
4145
4146 @item
4147 Authorize the key of the new server (@pxref{Invoking guix archive}):
4148
4149 @example
4150 guix archive --authorize < key.pub
4151 @end example
4152
4153 Again this assumes @file{key.pub} contains the public key that
4154 @code{guix.example.org} uses to sign substitutes.
4155 @end enumerate
4156
4157 Now you're all set! Substitutes will be preferably taken from
4158 @code{https://guix.example.org}, using
4159 @code{@value{SUBSTITUTE-SERVER-1}} then
4160 @code{@value{SUBSTITUTE-SERVER-2}} as fallback options. Of course you
4161 can list as many substitute servers as you like, with the caveat that
4162 substitute lookup can be slowed down if too many servers need to be
4163 contacted.
4164
4165 Note that there are also situations where one may want to add the URL of
4166 a substitute server @emph{without} authorizing its key.
4167 @xref{Substitute Authentication}, to understand this fine point.
4168
4169 @node Substitute Authentication
4170 @subsection Substitute Authentication
4171
4172 @cindex digital signatures
4173 Guix detects and raises an error when attempting to use a substitute
4174 that has been tampered with. Likewise, it ignores substitutes that are
4175 not signed, or that are not signed by one of the keys listed in the ACL.
4176
4177 There is one exception though: if an unauthorized server provides
4178 substitutes that are @emph{bit-for-bit identical} to those provided by
4179 an authorized server, then the unauthorized server becomes eligible for
4180 downloads. For example, assume we have chosen two substitute servers
4181 with this option:
4182
4183 @example
4184 --substitute-urls="https://a.example.org https://b.example.org"
4185 @end example
4186
4187 @noindent
4188 @cindex reproducible builds
4189 If the ACL contains only the key for @samp{b.example.org}, and if
4190 @samp{a.example.org} happens to serve the @emph{exact same} substitutes,
4191 then Guix will download substitutes from @samp{a.example.org} because it
4192 comes first in the list and can be considered a mirror of
4193 @samp{b.example.org}. In practice, independent build machines usually
4194 produce the same binaries, thanks to bit-reproducible builds (see
4195 below).
4196
4197 When using HTTPS, the server's X.509 certificate is @emph{not} validated
4198 (in other words, the server is not authenticated), contrary to what
4199 HTTPS clients such as Web browsers usually do. This is because Guix
4200 authenticates substitute information itself, as explained above, which
4201 is what we care about (whereas X.509 certificates are about
4202 authenticating bindings between domain names and public keys).
4203
4204 @node Proxy Settings
4205 @subsection Proxy Settings
4206
4207 @vindex http_proxy
4208 @vindex https_proxy
4209 Substitutes are downloaded over HTTP or HTTPS@. The @env{http_proxy} and
4210 @env{https_proxy} environment variables can be set in the environment of
4211 @command{guix-daemon} and are honored for downloads of substitutes.
4212 Note that the value of those environment variables in the environment
4213 where @command{guix build}, @command{guix package}, and other client
4214 commands are run has @emph{absolutely no effect}.
4215
4216 @node Substitution Failure
4217 @subsection Substitution Failure
4218
4219 Even when a substitute for a derivation is available, sometimes the
4220 substitution attempt will fail. This can happen for a variety of
4221 reasons: the substitute server might be offline, the substitute may
4222 recently have been deleted, the connection might have been interrupted,
4223 etc.
4224
4225 When substitutes are enabled and a substitute for a derivation is
4226 available, but the substitution attempt fails, Guix will attempt to
4227 build the derivation locally depending on whether or not
4228 @option{--fallback} was given (@pxref{fallback-option,, common build
4229 option @option{--fallback}}). Specifically, if @option{--fallback} was
4230 omitted, then no local build will be performed, and the derivation is
4231 considered to have failed. However, if @option{--fallback} was given,
4232 then Guix will attempt to build the derivation locally, and the success
4233 or failure of the derivation depends on the success or failure of the
4234 local build. Note that when substitutes are disabled or no substitute
4235 is available for the derivation in question, a local build will
4236 @emph{always} be performed, regardless of whether or not
4237 @option{--fallback} was given.
4238
4239 To get an idea of how many substitutes are available right now, you can
4240 try running the @command{guix weather} command (@pxref{Invoking guix
4241 weather}). This command provides statistics on the substitutes provided
4242 by a server.
4243
4244 @node On Trusting Binaries
4245 @subsection On Trusting Binaries
4246
4247 @cindex trust, of pre-built binaries
4248 Today, each individual's control over their own computing is at the
4249 mercy of institutions, corporations, and groups with enough power and
4250 determination to subvert the computing infrastructure and exploit its
4251 weaknesses. While using substitutes can be convenient, we encourage
4252 users to also build on their own, or even run their own build farm, such
4253 that the project run substitute servers are less of an interesting
4254 target. One way to help is by publishing the software you build using
4255 @command{guix publish} so that others have one more choice of server to
4256 download substitutes from (@pxref{Invoking guix publish}).
4257
4258 Guix has the foundations to maximize build reproducibility
4259 (@pxref{Features}). In most cases, independent builds of a given
4260 package or derivation should yield bit-identical results. Thus, through
4261 a diverse set of independent package builds, we can strengthen the
4262 integrity of our systems. The @command{guix challenge} command aims to
4263 help users assess substitute servers, and to assist developers in
4264 finding out about non-deterministic package builds (@pxref{Invoking guix
4265 challenge}). Similarly, the @option{--check} option of @command{guix
4266 build} allows users to check whether previously-installed substitutes
4267 are genuine by rebuilding them locally (@pxref{build-check,
4268 @command{guix build --check}}).
4269
4270 In the future, we want Guix to have support to publish and retrieve
4271 binaries to/from other users, in a peer-to-peer fashion. If you would
4272 like to discuss this project, join us on @email{guix-devel@@gnu.org}.
4273
4274 @node Packages with Multiple Outputs
4275 @section Packages with Multiple Outputs
4276
4277 @cindex multiple-output packages
4278 @cindex package outputs
4279 @cindex outputs
4280
4281 Often, packages defined in Guix have a single @dfn{output}---i.e., the
4282 source package leads to exactly one directory in the store. When running
4283 @command{guix install glibc}, one installs the default output of the
4284 GNU libc package; the default output is called @code{out}, but its name
4285 can be omitted as shown in this command. In this particular case, the
4286 default output of @code{glibc} contains all the C header files, shared
4287 libraries, static libraries, Info documentation, and other supporting
4288 files.
4289
4290 Sometimes it is more appropriate to separate the various types of files
4291 produced from a single source package into separate outputs. For
4292 instance, the GLib C library (used by GTK+ and related packages)
4293 installs more than 20 MiB of reference documentation as HTML pages.
4294 To save space for users who do not need it, the documentation goes to a
4295 separate output, called @code{doc}. To install the main GLib output,
4296 which contains everything but the documentation, one would run:
4297
4298 @example
4299 guix install glib
4300 @end example
4301
4302 @cindex documentation
4303 The command to install its documentation is:
4304
4305 @example
4306 guix install glib:doc
4307 @end example
4308
4309 Some packages install programs with different ``dependency footprints''.
4310 For instance, the WordNet package installs both command-line tools and
4311 graphical user interfaces (GUIs). The former depend solely on the C
4312 library, whereas the latter depend on Tcl/Tk and the underlying X
4313 libraries. In this case, we leave the command-line tools in the default
4314 output, whereas the GUIs are in a separate output. This allows users
4315 who do not need the GUIs to save space. The @command{guix size} command
4316 can help find out about such situations (@pxref{Invoking guix size}).
4317 @command{guix graph} can also be helpful (@pxref{Invoking guix graph}).
4318
4319 There are several such multiple-output packages in the GNU distribution.
4320 Other conventional output names include @code{lib} for libraries and
4321 possibly header files, @code{bin} for stand-alone programs, and
4322 @code{debug} for debugging information (@pxref{Installing Debugging
4323 Files}). The outputs of a packages are listed in the third column of
4324 the output of @command{guix package --list-available} (@pxref{Invoking
4325 guix package}).
4326
4327
4328 @node Invoking guix gc
4329 @section Invoking @command{guix gc}
4330
4331 @cindex garbage collector
4332 @cindex disk space
4333 @cindex @command{guix gc}
4334 Packages that are installed, but not used, may be @dfn{garbage-collected}.
4335 The @command{guix gc} command allows users to explicitly run the garbage
4336 collector to reclaim space from the @file{/gnu/store} directory. It is
4337 the @emph{only} way to remove files from @file{/gnu/store}---removing
4338 files or directories manually may break it beyond repair!
4339
4340 @cindex GC roots
4341 @cindex garbage collector roots
4342 The garbage collector has a set of known @dfn{roots}: any file under
4343 @file{/gnu/store} reachable from a root is considered @dfn{live} and
4344 cannot be deleted; any other file is considered @dfn{dead} and may be
4345 deleted. The set of garbage collector roots (``GC roots'' for short)
4346 includes default user profiles; by default, the symlinks under
4347 @file{/var/guix/gcroots} represent these GC roots. New GC roots can be
4348 added with @command{guix build --root}, for example (@pxref{Invoking
4349 guix build}). The @command{guix gc --list-roots} command lists them.
4350
4351 Prior to running @code{guix gc --collect-garbage} to make space, it is
4352 often useful to remove old generations from user profiles; that way, old
4353 package builds referenced by those generations can be reclaimed. This
4354 is achieved by running @code{guix package --delete-generations}
4355 (@pxref{Invoking guix package}).
4356
4357 Our recommendation is to run a garbage collection periodically, or when
4358 you are short on disk space. For instance, to guarantee that at least
4359 5@tie{}GB are available on your disk, simply run:
4360
4361 @example
4362 guix gc -F 5G
4363 @end example
4364
4365 It is perfectly safe to run as a non-interactive periodic job
4366 (@pxref{Scheduled Job Execution}, for how to set up such a job).
4367 Running @command{guix gc} with no arguments will collect as
4368 much garbage as it can, but that is often inconvenient: you may find
4369 yourself having to rebuild or re-download software that is ``dead'' from
4370 the GC viewpoint but that is necessary to build other pieces of
4371 software---e.g., the compiler tool chain.
4372
4373 The @command{guix gc} command has three modes of operation: it can be
4374 used to garbage-collect any dead files (the default), to delete specific
4375 files (the @option{--delete} option), to print garbage-collector
4376 information, or for more advanced queries. The garbage collection
4377 options are as follows:
4378
4379 @table @code
4380 @item --collect-garbage[=@var{min}]
4381 @itemx -C [@var{min}]
4382 Collect garbage---i.e., unreachable @file{/gnu/store} files and
4383 sub-directories. This is the default operation when no option is
4384 specified.
4385
4386 When @var{min} is given, stop once @var{min} bytes have been collected.
4387 @var{min} may be a number of bytes, or it may include a unit as a
4388 suffix, such as @code{MiB} for mebibytes and @code{GB} for gigabytes
4389 (@pxref{Block size, size specifications,, coreutils, GNU Coreutils}).
4390
4391 When @var{min} is omitted, collect all the garbage.
4392
4393 @item --free-space=@var{free}
4394 @itemx -F @var{free}
4395 Collect garbage until @var{free} space is available under
4396 @file{/gnu/store}, if possible; @var{free} denotes storage space, such
4397 as @code{500MiB}, as described above.
4398
4399 When @var{free} or more is already available in @file{/gnu/store}, do
4400 nothing and exit immediately.
4401
4402 @item --delete-generations[=@var{duration}]
4403 @itemx -d [@var{duration}]
4404 Before starting the garbage collection process, delete all the generations
4405 older than @var{duration}, for all the user profiles and home environment
4406 generations; when run as root, this
4407 applies to all the profiles @emph{of all the users}.
4408
4409 For example, this command deletes all the generations of all your profiles
4410 that are older than 2 months (except generations that are current), and then
4411 proceeds to free space until at least 10 GiB are available:
4412
4413 @example
4414 guix gc -d 2m -F 10G
4415 @end example
4416
4417 @item --delete
4418 @itemx -D
4419 Attempt to delete all the store files and directories specified as
4420 arguments. This fails if some of the files are not in the store, or if
4421 they are still live.
4422
4423 @item --list-failures
4424 List store items corresponding to cached build failures.
4425
4426 This prints nothing unless the daemon was started with
4427 @option{--cache-failures} (@pxref{Invoking guix-daemon,
4428 @option{--cache-failures}}).
4429
4430 @item --list-roots
4431 List the GC roots owned by the user; when run as root, list @emph{all} the GC
4432 roots.
4433
4434 @item --list-busy
4435 List store items in use by currently running processes. These store
4436 items are effectively considered GC roots: they cannot be deleted.
4437
4438 @item --clear-failures
4439 Remove the specified store items from the failed-build cache.
4440
4441 Again, this option only makes sense when the daemon is started with
4442 @option{--cache-failures}. Otherwise, it does nothing.
4443
4444 @item --list-dead
4445 Show the list of dead files and directories still present in the
4446 store---i.e., files and directories no longer reachable from any root.
4447
4448 @item --list-live
4449 Show the list of live store files and directories.
4450
4451 @end table
4452
4453 In addition, the references among existing store files can be queried:
4454
4455 @table @code
4456
4457 @item --references
4458 @itemx --referrers
4459 @cindex package dependencies
4460 List the references (respectively, the referrers) of store files given
4461 as arguments.
4462
4463 @item --requisites
4464 @itemx -R
4465 @cindex closure
4466 List the requisites of the store files passed as arguments. Requisites
4467 include the store files themselves, their references, and the references
4468 of these, recursively. In other words, the returned list is the
4469 @dfn{transitive closure} of the store files.
4470
4471 @xref{Invoking guix size}, for a tool to profile the size of the closure
4472 of an element. @xref{Invoking guix graph}, for a tool to visualize
4473 the graph of references.
4474
4475 @item --derivers
4476 @cindex derivation
4477 Return the derivation(s) leading to the given store items
4478 (@pxref{Derivations}).
4479
4480 For example, this command:
4481
4482 @example
4483 guix gc --derivers $(guix package -I ^emacs$ | cut -f4)
4484 @end example
4485
4486 @noindent
4487 returns the @file{.drv} file(s) leading to the @code{emacs} package
4488 installed in your profile.
4489
4490 Note that there may be zero matching @file{.drv} files, for instance
4491 because these files have been garbage-collected. There can also be more
4492 than one matching @file{.drv} due to fixed-output derivations.
4493 @end table
4494
4495 Lastly, the following options allow you to check the integrity of the
4496 store and to control disk usage.
4497
4498 @table @option
4499
4500 @item --verify[=@var{options}]
4501 @cindex integrity, of the store
4502 @cindex integrity checking
4503 Verify the integrity of the store.
4504
4505 By default, make sure that all the store items marked as valid in the
4506 database of the daemon actually exist in @file{/gnu/store}.
4507
4508 When provided, @var{options} must be a comma-separated list containing one
4509 or more of @code{contents} and @code{repair}.
4510
4511 When passing @option{--verify=contents}, the daemon computes the
4512 content hash of each store item and compares it against its hash in the
4513 database. Hash mismatches are reported as data corruptions. Because it
4514 traverses @emph{all the files in the store}, this command can take a
4515 long time, especially on systems with a slow disk drive.
4516
4517 @cindex repairing the store
4518 @cindex corruption, recovering from
4519 Using @option{--verify=repair} or @option{--verify=contents,repair}
4520 causes the daemon to try to repair corrupt store items by fetching
4521 substitutes for them (@pxref{Substitutes}). Because repairing is not
4522 atomic, and thus potentially dangerous, it is available only to the
4523 system administrator. A lightweight alternative, when you know exactly
4524 which items in the store are corrupt, is @command{guix build --repair}
4525 (@pxref{Invoking guix build}).
4526
4527 @item --optimize
4528 @cindex deduplication
4529 Optimize the store by hard-linking identical files---this is
4530 @dfn{deduplication}.
4531
4532 The daemon performs deduplication after each successful build or archive
4533 import, unless it was started with @option{--disable-deduplication}
4534 (@pxref{Invoking guix-daemon, @option{--disable-deduplication}}). Thus,
4535 this option is primarily useful when the daemon was running with
4536 @option{--disable-deduplication}.
4537
4538 @item --vacuum-database
4539 @cindex vacuum the store database
4540 @comment Avoid words like 'repair,' 'compress,' and 'optimize.'
4541 Guix uses an sqlite database to keep track of the items in (@pxref{The Store}).
4542 Over time it is possible that the database may grow to a large size and become
4543 fragmented. As a result, one may wish to clear the freed space and join the
4544 partially used pages in the database left behind from removed packages or after
4545 running the garbage collector. Running @command{sudo guix gc
4546 --vacuum-database} will lock the database and @code{VACUUM} the store,
4547 defragmenting the database and purging freed pages, unlocking the database when
4548 it finishes.
4549
4550 @end table
4551
4552 @node Invoking guix pull
4553 @section Invoking @command{guix pull}
4554
4555 @cindex upgrading Guix
4556 @cindex updating Guix
4557 @cindex @command{guix pull}
4558 @cindex pull
4559 @cindex security, @command{guix pull}
4560 @cindex authenticity, of code obtained with @command{guix pull}
4561 Packages are installed or upgraded to the latest version available in
4562 the distribution currently available on your local machine. To update
4563 that distribution, along with the Guix tools, you must run @command{guix
4564 pull}: the command downloads the latest Guix source code and package
4565 descriptions, and deploys it. Source code is downloaded from a
4566 @uref{https://git-scm.com/book/en/, Git} repository, by default the official
4567 GNU@tie{}Guix repository, though this can be customized. @command{guix
4568 pull} ensures that the code it downloads is @emph{authentic} by
4569 verifying that commits are signed by Guix developers.
4570
4571 Specifically, @command{guix pull} downloads code from the @dfn{channels}
4572 (@pxref{Channels}) specified by one of the followings, in this order:
4573
4574 @enumerate
4575 @item
4576 the @option{--channels} option;
4577 @item
4578 the user's @file{~/.config/guix/channels.scm} file;
4579 @item
4580 the system-wide @file{/etc/guix/channels.scm} file;
4581 @item
4582 the built-in default channels specified in the @code{%default-channels}
4583 variable.
4584 @end enumerate
4585
4586 On completion, @command{guix package} will use packages and package
4587 versions from this just-retrieved copy of Guix. Not only that, but all
4588 the Guix commands and Scheme modules will also be taken from that latest
4589 version. New @command{guix} sub-commands added by the update also
4590 become available.
4591
4592 Any user can update their Guix copy using @command{guix pull}, and the
4593 effect is limited to the user who ran @command{guix pull}. For
4594 instance, when user @code{root} runs @command{guix pull}, this has no
4595 effect on the version of Guix that user @code{alice} sees, and vice
4596 versa.
4597
4598 The result of running @command{guix pull} is a @dfn{profile} available
4599 under @file{~/.config/guix/current} containing the latest Guix. Thus,
4600 make sure to add it to the beginning of your search path so that you use
4601 the latest version, and similarly for the Info manual
4602 (@pxref{Documentation}):
4603
4604 @example
4605 export PATH="$HOME/.config/guix/current/bin:$PATH"
4606 export INFOPATH="$HOME/.config/guix/current/share/info:$INFOPATH"
4607 @end example
4608
4609 The @option{--list-generations} or @option{-l} option lists past generations
4610 produced by @command{guix pull}, along with details about their provenance:
4611
4612 @example
4613 $ guix pull -l
4614 Generation 1 Jun 10 2018 00:18:18
4615 guix 65956ad
4616 repository URL: https://git.savannah.gnu.org/git/guix.git
4617 branch: origin/master
4618 commit: 65956ad3526ba09e1f7a40722c96c6ef7c0936fe
4619
4620 Generation 2 Jun 11 2018 11:02:49
4621 guix e0cc7f6
4622 repository URL: https://git.savannah.gnu.org/git/guix.git
4623 branch: origin/master
4624 commit: e0cc7f669bec22c37481dd03a7941c7d11a64f1d
4625
4626 Generation 3 Jun 13 2018 23:31:07 (current)
4627 guix 844cc1c
4628 repository URL: https://git.savannah.gnu.org/git/guix.git
4629 branch: origin/master
4630 commit: 844cc1c8f394f03b404c5bb3aee086922373490c
4631 @end example
4632
4633 @xref{Invoking guix describe, @command{guix describe}}, for other ways to
4634 describe the current status of Guix.
4635
4636 This @code{~/.config/guix/current} profile works exactly like the profiles
4637 created by @command{guix package} (@pxref{Invoking guix package}). That
4638 is, you can list generations, roll back to the previous
4639 generation---i.e., the previous Guix---and so on:
4640
4641 @example
4642 $ guix pull --roll-back
4643 switched from generation 3 to 2
4644 $ guix pull --delete-generations=1
4645 deleting /var/guix/profiles/per-user/charlie/current-guix-1-link
4646 @end example
4647
4648 You can also use @command{guix package} (@pxref{Invoking guix package})
4649 to manage the profile by naming it explicitly:
4650 @example
4651 $ guix package -p ~/.config/guix/current --roll-back
4652 switched from generation 3 to 2
4653 $ guix package -p ~/.config/guix/current --delete-generations=1
4654 deleting /var/guix/profiles/per-user/charlie/current-guix-1-link
4655 @end example
4656
4657 The @command{guix pull} command is usually invoked with no arguments,
4658 but it supports the following options:
4659
4660 @table @code
4661 @item --url=@var{url}
4662 @itemx --commit=@var{commit}
4663 @itemx --branch=@var{branch}
4664 Download code for the @code{guix} channel from the specified @var{url}, at the
4665 given @var{commit} (a valid Git commit ID represented as a hexadecimal
4666 string or the name of a tag), or @var{branch}.
4667
4668 @cindex @file{channels.scm}, configuration file
4669 @cindex configuration file for channels
4670 These options are provided for convenience, but you can also specify your
4671 configuration in the @file{~/.config/guix/channels.scm} file or using the
4672 @option{--channels} option (see below).
4673
4674 @item --channels=@var{file}
4675 @itemx -C @var{file}
4676 Read the list of channels from @var{file} instead of
4677 @file{~/.config/guix/channels.scm} or @file{/etc/guix/channels.scm}.
4678 @var{file} must contain Scheme code that
4679 evaluates to a list of channel objects. @xref{Channels}, for more
4680 information.
4681
4682 @cindex channel news
4683 @item --news
4684 @itemx -N
4685 Display news written by channel authors for their users for changes made
4686 since the previous generation (@pxref{Channels, Writing Channel News}).
4687 When @option{--details} is passed, additionally display new and upgraded
4688 packages.
4689
4690 You can view that information for previous generations with
4691 @command{guix pull -l}.
4692
4693 @item --list-generations[=@var{pattern}]
4694 @itemx -l [@var{pattern}]
4695 List all the generations of @file{~/.config/guix/current} or, if @var{pattern}
4696 is provided, the subset of generations that match @var{pattern}.
4697 The syntax of @var{pattern} is the same as with @code{guix package
4698 --list-generations} (@pxref{Invoking guix package}).
4699
4700 By default, this prints information about the channels used in each
4701 revision as well as the corresponding news entries. If you pass
4702 @option{--details}, it will also print the list of packages added and
4703 upgraded in each generation compared to the previous one.
4704
4705 @item --details
4706 Instruct @option{--list-generations} or @option{--news} to display more
4707 information about the differences between subsequent generations---see
4708 above.
4709
4710 @item --roll-back
4711 @cindex rolling back
4712 @cindex undoing transactions
4713 @cindex transactions, undoing
4714 Roll back to the previous @dfn{generation} of @file{~/.config/guix/current}---i.e.,
4715 undo the last transaction.
4716
4717 @item --switch-generation=@var{pattern}
4718 @itemx -S @var{pattern}
4719 @cindex generations
4720 Switch to a particular generation defined by @var{pattern}.
4721
4722 @var{pattern} may be either a generation number or a number prefixed
4723 with ``+'' or ``-''. The latter means: move forward/backward by a
4724 specified number of generations. For example, if you want to return to
4725 the latest generation after @option{--roll-back}, use
4726 @option{--switch-generation=+1}.
4727
4728 @item --delete-generations[=@var{pattern}]
4729 @itemx -d [@var{pattern}]
4730 When @var{pattern} is omitted, delete all generations except the current
4731 one.
4732
4733 This command accepts the same patterns as @option{--list-generations}.
4734 When @var{pattern} is specified, delete the matching generations. When
4735 @var{pattern} specifies a duration, generations @emph{older} than the
4736 specified duration match. For instance, @option{--delete-generations=1m}
4737 deletes generations that are more than one month old.
4738
4739 If the current generation matches, it is @emph{not} deleted.
4740
4741 Note that deleting generations prevents rolling back to them.
4742 Consequently, this command must be used with care.
4743
4744 @xref{Invoking guix describe}, for a way to display information about the
4745 current generation only.
4746
4747 @item --profile=@var{profile}
4748 @itemx -p @var{profile}
4749 Use @var{profile} instead of @file{~/.config/guix/current}.
4750
4751 @item --dry-run
4752 @itemx -n
4753 Show which channel commit(s) would be used and what would be built or
4754 substituted but do not actually do it.
4755
4756 @item --allow-downgrades
4757 Allow pulling older or unrelated revisions of channels than those
4758 currently in use.
4759
4760 @cindex downgrade attacks, protection against
4761 By default, @command{guix pull} protects against so-called ``downgrade
4762 attacks'' whereby the Git repository of a channel would be reset to an
4763 earlier or unrelated revision of itself, potentially leading you to
4764 install older, known-vulnerable versions of software packages.
4765
4766 @quotation Note
4767 Make sure you understand its security implications before using
4768 @option{--allow-downgrades}.
4769 @end quotation
4770
4771 @item --disable-authentication
4772 Allow pulling channel code without authenticating it.
4773
4774 @cindex authentication, of channel code
4775 By default, @command{guix pull} authenticates code downloaded from
4776 channels by verifying that its commits are signed by authorized
4777 developers, and raises an error if this is not the case. This option
4778 instructs it to not perform any such verification.
4779
4780 @quotation Note
4781 Make sure you understand its security implications before using
4782 @option{--disable-authentication}.
4783 @end quotation
4784
4785 @item --system=@var{system}
4786 @itemx -s @var{system}
4787 Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of
4788 the system type of the build host.
4789
4790 @item --bootstrap
4791 Use the bootstrap Guile to build the latest Guix. This option is only
4792 useful to Guix developers.
4793 @end table
4794
4795 The @dfn{channel} mechanism allows you to instruct @command{guix pull} which
4796 repository and branch to pull from, as well as @emph{additional} repositories
4797 containing package modules that should be deployed. @xref{Channels}, for more
4798 information.
4799
4800 In addition, @command{guix pull} supports all the common build options
4801 (@pxref{Common Build Options}).
4802
4803 @node Invoking guix time-machine
4804 @section Invoking @command{guix time-machine}
4805
4806 @cindex @command{guix time-machine}
4807 @cindex pinning, channels
4808 @cindex replicating Guix
4809 @cindex reproducibility, of Guix
4810
4811 The @command{guix time-machine} command provides access to other
4812 revisions of Guix, for example to install older versions of packages,
4813 or to reproduce a computation in an identical environment. The revision
4814 of Guix to be used is defined by a commit or by a channel
4815 description file created by @command{guix describe}
4816 (@pxref{Invoking guix describe}).
4817
4818 Let's assume that you want to travel to those days of November 2020 when
4819 version 1.2.0 of Guix was released and, once you're there, run the
4820 @command{guile} of that time:
4821
4822 @example
4823 guix time-machine --commit=v1.2.0 -- \
4824 environment -C --ad-hoc guile -- guile
4825 @end example
4826
4827 The command above fetches Guix@tie{}1.2.0 and runs its @command{guix
4828 environment} command to spawn an environment in a container running
4829 @command{guile} (@command{guix environment} has since been subsumed by
4830 @command{guix shell}; @pxref{Invoking guix shell}). It's like driving a
4831 DeLorean@footnote{If you don't know what a DeLorean is, consider
4832 traveling back to the 1980's.}! The first @command{guix time-machine}
4833 invocation can be expensive: it may have to download or even build a
4834 large number of packages; the result is cached though and subsequent
4835 commands targeting the same commit are almost instantaneous.
4836
4837 The general syntax is:
4838
4839 @example
4840 guix time-machine @var{options}@dots{} -- @var{command} @var {arg}@dots{}
4841 @end example
4842
4843 where @var{command} and @var{arg}@dots{} are passed unmodified to the
4844 @command{guix} command of the specified revision. The @var{options} that define
4845 this revision are the same as for @command{guix pull} (@pxref{Invoking guix pull}):
4846
4847 @table @code
4848 @item --url=@var{url}
4849 @itemx --commit=@var{commit}
4850 @itemx --branch=@var{branch}
4851 Use the @code{guix} channel from the specified @var{url}, at the
4852 given @var{commit} (a valid Git commit ID represented as a hexadecimal
4853 string or the name of a tag), or @var{branch}.
4854
4855 @item --channels=@var{file}
4856 @itemx -C @var{file}
4857 Read the list of channels from @var{file}. @var{file} must contain
4858 Scheme code that evaluates to a list of channel objects.
4859 @xref{Channels} for more information.
4860 @end table
4861
4862 As for @command{guix pull}, the absence of any options means that the
4863 latest commit on the master branch will be used. The command
4864
4865 @example
4866 guix time-machine -- build hello
4867 @end example
4868
4869 will thus build the package @code{hello} as defined in the master branch,
4870 which is in general a newer revision of Guix than you have installed.
4871 Time travel works in both directions!
4872
4873 Note that @command{guix time-machine} can trigger builds of channels and
4874 their dependencies, and these are controlled by the standard build
4875 options (@pxref{Common Build Options}).
4876
4877 @node Inferiors
4878 @section Inferiors
4879
4880 @c TODO: Remove this once we're more confident about API stability.
4881 @quotation Note
4882 The functionality described here is a ``technology preview'' as of version
4883 @value{VERSION}. As such, the interface is subject to change.
4884 @end quotation
4885
4886 @cindex inferiors
4887 @cindex composition of Guix revisions
4888 Sometimes you might need to mix packages from the revision of Guix you're
4889 currently running with packages available in a different revision of Guix.
4890 Guix @dfn{inferiors} allow you to achieve that by composing different Guix
4891 revisions in arbitrary ways.
4892
4893 @cindex inferior packages
4894 Technically, an ``inferior'' is essentially a separate Guix process connected
4895 to your main Guix process through a REPL (@pxref{Invoking guix repl}). The
4896 @code{(guix inferior)} module allows you to create inferiors and to
4897 communicate with them. It also provides a high-level interface to browse and
4898 manipulate the packages that an inferior provides---@dfn{inferior packages}.
4899
4900 When combined with channels (@pxref{Channels}), inferiors provide a simple way
4901 to interact with a separate revision of Guix. For example, let's assume you
4902 want to install in your profile the current @code{guile} package, along with
4903 the @code{guile-json} as it existed in an older revision of Guix---perhaps
4904 because the newer @code{guile-json} has an incompatible API and you want to
4905 run your code against the old API@. To do that, you could write a manifest for
4906 use by @code{guix package --manifest} (@pxref{Writing Manifests}); in that
4907 manifest, you would create an inferior for that old Guix revision you care
4908 about, and you would look up the @code{guile-json} package in the inferior:
4909
4910 @lisp
4911 (use-modules (guix inferior) (guix channels)
4912 (srfi srfi-1)) ;for 'first'
4913
4914 (define channels
4915 ;; This is the old revision from which we want to
4916 ;; extract guile-json.
4917 (list (channel
4918 (name 'guix)
4919 (url "https://git.savannah.gnu.org/git/guix.git")
4920 (commit
4921 "65956ad3526ba09e1f7a40722c96c6ef7c0936fe"))))
4922
4923 (define inferior
4924 ;; An inferior representing the above revision.
4925 (inferior-for-channels channels))
4926
4927 ;; Now create a manifest with the current "guile" package
4928 ;; and the old "guile-json" package.
4929 (packages->manifest
4930 (list (first (lookup-inferior-packages inferior "guile-json"))
4931 (specification->package "guile")))
4932 @end lisp
4933
4934 On its first run, @command{guix package --manifest} might have to build the
4935 channel you specified before it can create the inferior; subsequent runs will
4936 be much faster because the Guix revision will be cached.
4937
4938 The @code{(guix inferior)} module provides the following procedures to open an
4939 inferior:
4940
4941 @deffn {Scheme Procedure} inferior-for-channels @var{channels} @
4942 [#:cache-directory] [#:ttl]
4943 Return an inferior for @var{channels}, a list of channels. Use the cache at
4944 @var{cache-directory}, where entries can be reclaimed after @var{ttl} seconds.
4945 This procedure opens a new connection to the build daemon.
4946
4947 As a side effect, this procedure may build or substitute binaries for
4948 @var{channels}, which can take time.
4949 @end deffn
4950
4951 @deffn {Scheme Procedure} open-inferior @var{directory} @
4952 [#:command "bin/guix"]
4953 Open the inferior Guix in @var{directory}, running
4954 @code{@var{directory}/@var{command} repl} or equivalent. Return @code{#f} if
4955 the inferior could not be launched.
4956 @end deffn
4957
4958 @cindex inferior packages
4959 The procedures listed below allow you to obtain and manipulate inferior
4960 packages.
4961
4962 @deffn {Scheme Procedure} inferior-packages @var{inferior}
4963 Return the list of packages known to @var{inferior}.
4964 @end deffn
4965
4966 @deffn {Scheme Procedure} lookup-inferior-packages @var{inferior} @var{name} @
4967 [@var{version}]
4968 Return the sorted list of inferior packages matching @var{name} in
4969 @var{inferior}, with highest version numbers first. If @var{version} is true,
4970 return only packages with a version number prefixed by @var{version}.
4971 @end deffn
4972
4973 @deffn {Scheme Procedure} inferior-package? @var{obj}
4974 Return true if @var{obj} is an inferior package.
4975 @end deffn
4976
4977 @deffn {Scheme Procedure} inferior-package-name @var{package}
4978 @deffnx {Scheme Procedure} inferior-package-version @var{package}
4979 @deffnx {Scheme Procedure} inferior-package-synopsis @var{package}
4980 @deffnx {Scheme Procedure} inferior-package-description @var{package}
4981 @deffnx {Scheme Procedure} inferior-package-home-page @var{package}
4982 @deffnx {Scheme Procedure} inferior-package-location @var{package}
4983 @deffnx {Scheme Procedure} inferior-package-inputs @var{package}
4984 @deffnx {Scheme Procedure} inferior-package-native-inputs @var{package}
4985 @deffnx {Scheme Procedure} inferior-package-propagated-inputs @var{package}
4986 @deffnx {Scheme Procedure} inferior-package-transitive-propagated-inputs @var{package}
4987 @deffnx {Scheme Procedure} inferior-package-native-search-paths @var{package}
4988 @deffnx {Scheme Procedure} inferior-package-transitive-native-search-paths @var{package}
4989 @deffnx {Scheme Procedure} inferior-package-search-paths @var{package}
4990 These procedures are the counterpart of package record accessors
4991 (@pxref{package Reference}). Most of them work by querying the inferior
4992 @var{package} comes from, so the inferior must still be live when you call
4993 these procedures.
4994 @end deffn
4995
4996 Inferior packages can be used transparently like any other package or
4997 file-like object in G-expressions (@pxref{G-Expressions}). They are also
4998 transparently handled by the @code{packages->manifest} procedure, which is
4999 commonly used in manifests (@pxref{Invoking guix package, the
5000 @option{--manifest} option of @command{guix package}}). Thus you can insert
5001 an inferior package pretty much anywhere you would insert a regular package:
5002 in manifests, in the @code{packages} field of your @code{operating-system}
5003 declaration, and so on.
5004
5005 @node Invoking guix describe
5006 @section Invoking @command{guix describe}
5007
5008 @cindex reproducibility
5009 @cindex replicating Guix
5010 @cindex @command{guix describe}
5011 Often you may want to answer questions like: ``Which revision of Guix am I
5012 using?'' or ``Which channels am I using?'' This is useful information in many
5013 situations: if you want to @emph{replicate} an environment on a different
5014 machine or user account, if you want to report a bug or to determine what
5015 change in the channels you are using caused it, or if you want to record your
5016 system state for reproducibility purposes. The @command{guix describe}
5017 command answers these questions.
5018
5019 When run from a @command{guix pull}ed @command{guix}, @command{guix describe}
5020 displays the channel(s) that it was built from, including their repository URL
5021 and commit IDs (@pxref{Channels}):
5022
5023 @example
5024 $ guix describe
5025 Generation 10 Sep 03 2018 17:32:44 (current)
5026 guix e0fa68c
5027 repository URL: https://git.savannah.gnu.org/git/guix.git
5028 branch: master
5029 commit: e0fa68c7718fffd33d81af415279d6ddb518f727
5030 @end example
5031
5032 If you're familiar with the Git version control system, this is similar in
5033 spirit to @command{git describe}; the output is also similar to that of
5034 @command{guix pull --list-generations}, but limited to the current generation
5035 (@pxref{Invoking guix pull, the @option{--list-generations} option}). Because
5036 the Git commit ID shown above unambiguously refers to a snapshot of Guix, this
5037 information is all it takes to describe the revision of Guix you're using, and
5038 also to replicate it.
5039
5040 To make it easier to replicate Guix, @command{guix describe} can also be asked
5041 to return a list of channels instead of the human-readable description above:
5042
5043 @example
5044 $ guix describe -f channels
5045 (list (channel
5046 (name 'guix)
5047 (url "https://git.savannah.gnu.org/git/guix.git")
5048 (commit
5049 "e0fa68c7718fffd33d81af415279d6ddb518f727")
5050 (introduction
5051 (make-channel-introduction
5052 "9edb3f66fd807b096b48283debdcddccfea34bad"
5053 (openpgp-fingerprint
5054 "BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA")))))
5055 @end example
5056
5057 @noindent
5058 You can save this to a file and feed it to @command{guix pull -C} on some
5059 other machine or at a later point in time, which will instantiate @emph{this
5060 exact Guix revision} (@pxref{Invoking guix pull, the @option{-C} option}).
5061 From there on, since you're able to deploy the same revision of Guix, you can
5062 just as well @emph{replicate a complete software environment}. We humbly
5063 think that this is @emph{awesome}, and we hope you'll like it too!
5064
5065 The details of the options supported by @command{guix describe} are as
5066 follows:
5067
5068 @table @code
5069 @item --format=@var{format}
5070 @itemx -f @var{format}
5071 Produce output in the specified @var{format}, one of:
5072
5073 @table @code
5074 @item human
5075 produce human-readable output;
5076 @item channels
5077 produce a list of channel specifications that can be passed to @command{guix
5078 pull -C} or installed as @file{~/.config/guix/channels.scm} (@pxref{Invoking
5079 guix pull});
5080 @item channels-sans-intro
5081 like @code{channels}, but omit the @code{introduction} field; use it to
5082 produce a channel specification suitable for Guix version 1.1.0 or
5083 earlier---the @code{introduction} field has to do with channel
5084 authentication (@pxref{Channels, Channel Authentication}) and is not
5085 supported by these older versions;
5086 @item json
5087 @cindex JSON
5088 produce a list of channel specifications in JSON format;
5089 @item recutils
5090 produce a list of channel specifications in Recutils format.
5091 @end table
5092
5093 @item --list-formats
5094 Display available formats for @option{--format} option.
5095
5096 @item --profile=@var{profile}
5097 @itemx -p @var{profile}
5098 Display information about @var{profile}.
5099 @end table
5100
5101 @node Invoking guix archive
5102 @section Invoking @command{guix archive}
5103
5104 @cindex @command{guix archive}
5105 @cindex archive
5106 @cindex exporting files from the store
5107 @cindex importing files to the store
5108 The @command{guix archive} command allows users to @dfn{export} files
5109 from the store into a single archive, and to later @dfn{import} them on
5110 a machine that runs Guix.
5111 In particular, it allows store files to be transferred from one machine
5112 to the store on another machine.
5113
5114 @quotation Note
5115 If you're looking for a way to produce archives in a format suitable for
5116 tools other than Guix, @pxref{Invoking guix pack}.
5117 @end quotation
5118
5119 @cindex exporting store items
5120 To export store files as an archive to standard output, run:
5121
5122 @example
5123 guix archive --export @var{options} @var{specifications}...
5124 @end example
5125
5126 @var{specifications} may be either store file names or package
5127 specifications, as for @command{guix package} (@pxref{Invoking guix
5128 package}). For instance, the following command creates an archive
5129 containing the @code{gui} output of the @code{git} package and the main
5130 output of @code{emacs}:
5131
5132 @example
5133 guix archive --export git:gui /gnu/store/...-emacs-24.3 > great.nar
5134 @end example
5135
5136 If the specified packages are not built yet, @command{guix archive}
5137 automatically builds them. The build process may be controlled with the
5138 common build options (@pxref{Common Build Options}).
5139
5140 To transfer the @code{emacs} package to a machine connected over SSH,
5141 one would run:
5142
5143 @example
5144 guix archive --export -r emacs | ssh the-machine guix archive --import
5145 @end example
5146
5147 @noindent
5148 Similarly, a complete user profile may be transferred from one machine
5149 to another like this:
5150
5151 @example
5152 guix archive --export -r $(readlink -f ~/.guix-profile) | \
5153 ssh the-machine guix archive --import
5154 @end example
5155
5156 @noindent
5157 However, note that, in both examples, all of @code{emacs} and the
5158 profile as well as all of their dependencies are transferred (due to
5159 @option{-r}), regardless of what is already available in the store on
5160 the target machine. The @option{--missing} option can help figure out
5161 which items are missing from the target store. The @command{guix copy}
5162 command simplifies and optimizes this whole process, so this is probably
5163 what you should use in this case (@pxref{Invoking guix copy}).
5164
5165 @cindex nar, archive format
5166 @cindex normalized archive (nar)
5167 @cindex nar bundle, archive format
5168 Each store item is written in the @dfn{normalized archive} or @dfn{nar}
5169 format (described below), and the output of @command{guix archive
5170 --export} (and input of @command{guix archive --import}) is a @dfn{nar
5171 bundle}.
5172
5173 The nar format is
5174 comparable in spirit to `tar', but with differences
5175 that make it more appropriate for our purposes. First, rather than
5176 recording all Unix metadata for each file, the nar format only mentions
5177 the file type (regular, directory, or symbolic link); Unix permissions
5178 and owner/group are dismissed. Second, the order in which directory
5179 entries are stored always follows the order of file names according to
5180 the C locale collation order. This makes archive production fully
5181 deterministic.
5182
5183 That nar bundle format is essentially the concatenation of zero or more
5184 nars along with metadata for each store item it contains: its file name,
5185 references, corresponding derivation, and a digital signature.
5186
5187 When exporting, the daemon digitally signs the contents of the archive,
5188 and that digital signature is appended. When importing, the daemon
5189 verifies the signature and rejects the import in case of an invalid
5190 signature or if the signing key is not authorized.
5191 @c FIXME: Add xref to daemon doc about signatures.
5192
5193 The main options are:
5194
5195 @table @code
5196 @item --export
5197 Export the specified store files or packages (see below). Write the
5198 resulting archive to the standard output.
5199
5200 Dependencies are @emph{not} included in the output, unless
5201 @option{--recursive} is passed.
5202
5203 @item -r
5204 @itemx --recursive
5205 When combined with @option{--export}, this instructs @command{guix archive}
5206 to include dependencies of the given items in the archive. Thus, the
5207 resulting archive is self-contained: it contains the closure of the
5208 exported store items.
5209
5210 @item --import
5211 Read an archive from the standard input, and import the files listed
5212 therein into the store. Abort if the archive has an invalid digital
5213 signature, or if it is signed by a public key not among the authorized
5214 keys (see @option{--authorize} below).
5215
5216 @item --missing
5217 Read a list of store file names from the standard input, one per line,
5218 and write on the standard output the subset of these files missing from
5219 the store.
5220
5221 @item --generate-key[=@var{parameters}]
5222 @cindex signing, archives
5223 Generate a new key pair for the daemon. This is a prerequisite before
5224 archives can be exported with @option{--export}. This
5225 operation is usually instantaneous but it can take time if the system's
5226 entropy pool needs to be refilled. On Guix System,
5227 @code{guix-service-type} takes care of generating this key pair the
5228 first boot.
5229
5230 The generated key pair is typically stored under @file{/etc/guix}, in
5231 @file{signing-key.pub} (public key) and @file{signing-key.sec} (private
5232 key, which must be kept secret). When @var{parameters} is omitted,
5233 an ECDSA key using the Ed25519 curve is generated, or, for Libgcrypt
5234 versions before 1.6.0, it is a 4096-bit RSA key.
5235 Alternatively, @var{parameters} can specify
5236 @code{genkey} parameters suitable for Libgcrypt (@pxref{General
5237 public-key related Functions, @code{gcry_pk_genkey},, gcrypt, The
5238 Libgcrypt Reference Manual}).
5239
5240 @item --authorize
5241 @cindex authorizing, archives
5242 Authorize imports signed by the public key passed on standard input.
5243 The public key must be in ``s-expression advanced format''---i.e., the
5244 same format as the @file{signing-key.pub} file.
5245
5246 The list of authorized keys is kept in the human-editable file
5247 @file{/etc/guix/acl}. The file contains
5248 @url{https://people.csail.mit.edu/rivest/Sexp.txt, ``advanced-format
5249 s-expressions''} and is structured as an access-control list in the
5250 @url{https://theworld.com/~cme/spki.txt, Simple Public-Key Infrastructure
5251 (SPKI)}.
5252
5253 @item --extract=@var{directory}
5254 @itemx -x @var{directory}
5255 Read a single-item archive as served by substitute servers
5256 (@pxref{Substitutes}) and extract it to @var{directory}. This is a
5257 low-level operation needed in only very narrow use cases; see below.
5258
5259 For example, the following command extracts the substitute for Emacs
5260 served by @code{@value{SUBSTITUTE-SERVER-1}} to @file{/tmp/emacs}:
5261
5262 @example
5263 $ wget -O - \
5264 https://@value{SUBSTITUTE-SERVER-1}/nar/gzip/@dots{}-emacs-24.5 \
5265 | gunzip | guix archive -x /tmp/emacs
5266 @end example
5267
5268 Single-item archives are different from multiple-item archives produced
5269 by @command{guix archive --export}; they contain a single store item,
5270 and they do @emph{not} embed a signature. Thus this operation does
5271 @emph{no} signature verification and its output should be considered
5272 unsafe.
5273
5274 The primary purpose of this operation is to facilitate inspection of
5275 archive contents coming from possibly untrusted substitute servers
5276 (@pxref{Invoking guix challenge}).
5277
5278 @item --list
5279 @itemx -t
5280 Read a single-item archive as served by substitute servers
5281 (@pxref{Substitutes}) and print the list of files it contains, as in
5282 this example:
5283
5284 @example
5285 $ wget -O - \
5286 https://@value{SUBSTITUTE-SERVER-1}/nar/lzip/@dots{}-emacs-26.3 \
5287 | lzip -d | guix archive -t
5288 @end example
5289
5290 @end table
5291
5292 @c *********************************************************************
5293 @node Channels
5294 @chapter Channels
5295
5296 @cindex channels
5297 @cindex @file{channels.scm}, configuration file
5298 @cindex configuration file for channels
5299 @cindex @command{guix pull}, configuration file
5300 @cindex configuration of @command{guix pull}
5301 Guix and its package collection are updated by running @command{guix pull}
5302 (@pxref{Invoking guix pull}). By default @command{guix pull} downloads and
5303 deploys Guix itself from the official GNU@tie{}Guix repository. This can be
5304 customized by defining @dfn{channels} in the
5305 @file{~/.config/guix/channels.scm} file. A channel specifies a URL and branch
5306 of a Git repository to be deployed, and @command{guix pull} can be instructed
5307 to pull from one or more channels. In other words, channels can be used
5308 to @emph{customize} and to @emph{extend} Guix, as we will see below.
5309 Guix is able to take into account security concerns and deal with authenticated
5310 updates.
5311
5312 @menu
5313 * Specifying Additional Channels:: Extending the package collection.
5314 * Using a Custom Guix Channel:: Using a customized Guix.
5315 * Replicating Guix:: Running the @emph{exact same} Guix.
5316 * Channel Authentication:: How Guix verifies what it fetches.
5317 * Channels with Substitutes:: Using channels with available substitutes.
5318 * Creating a Channel:: How to write your custom channel.
5319 * Package Modules in a Sub-directory:: Specifying the channel's package modules location.
5320 * Declaring Channel Dependencies:: How to depend on other channels.
5321 * Specifying Channel Authorizations:: Defining channel authors authorizations.
5322 * Primary URL:: Distinguishing mirror to original.
5323 * Writing Channel News:: Communicating information to channel's users.
5324 @end menu
5325
5326 @node Specifying Additional Channels
5327 @section Specifying Additional Channels
5328
5329 @cindex extending the package collection (channels)
5330 @cindex variant packages (channels)
5331 You can specify @emph{additional channels} to pull from. To use a channel, write
5332 @code{~/.config/guix/channels.scm} to instruct @command{guix pull} to pull from it
5333 @emph{in addition} to the default Guix channel(s):
5334
5335 @vindex %default-channels
5336 @lisp
5337 ;; Add variant packages to those Guix provides.
5338 (cons (channel
5339 (name 'variant-packages)
5340 (url "https://example.org/variant-packages.git"))
5341 %default-channels)
5342 @end lisp
5343
5344 @noindent
5345 Note that the snippet above is (as always!)@: Scheme code; we use @code{cons} to
5346 add a channel the list of channels that the variable @code{%default-channels}
5347 is bound to (@pxref{Pairs, @code{cons} and lists,, guile, GNU Guile Reference
5348 Manual}). With this file in place, @command{guix pull} builds not only Guix
5349 but also the package modules from your own repository. The result in
5350 @file{~/.config/guix/current} is the union of Guix with your own package
5351 modules:
5352
5353 @example
5354 $ guix describe
5355 Generation 19 Aug 27 2018 16:20:48
5356 guix d894ab8
5357 repository URL: https://git.savannah.gnu.org/git/guix.git
5358 branch: master
5359 commit: d894ab8e9bfabcefa6c49d9ba2e834dd5a73a300
5360 variant-packages dd3df5e
5361 repository URL: https://example.org/variant-packages.git
5362 branch: master
5363 commit: dd3df5e2c8818760a8fc0bd699e55d3b69fef2bb
5364 @end example
5365
5366 @noindent
5367 The output of @command{guix describe} above shows that we're now running
5368 Generation@tie{}19 and that it includes
5369 both Guix and packages from the @code{variant-personal-packages} channel
5370 (@pxref{Invoking guix describe}).
5371
5372 @node Using a Custom Guix Channel
5373 @section Using a Custom Guix Channel
5374
5375 The channel called @code{guix} specifies where Guix itself---its command-line
5376 tools as well as its package collection---should be downloaded. For instance,
5377 suppose you want to update from another copy of the Guix repository at
5378 @code{example.org}, and specifically the @code{super-hacks} branch, you can
5379 write in @code{~/.config/guix/channels.scm} this specification:
5380
5381 @lisp
5382 ;; Tell 'guix pull' to use another repo.
5383 (list (channel
5384 (name 'guix)
5385 (url "https://example.org/another-guix.git")
5386 (branch "super-hacks")))
5387 @end lisp
5388
5389 @noindent
5390 From there on, @command{guix pull} will fetch code from the @code{super-hacks}
5391 branch of the repository at @code{example.org}. The authentication concern is
5392 addressed below (@pxref{Channel Authentication}).
5393
5394 @node Replicating Guix
5395 @section Replicating Guix
5396
5397 @cindex pinning, channels
5398 @cindex replicating Guix
5399 @cindex reproducibility, of Guix
5400 The @command{guix describe} command shows precisely which commits were
5401 used to build the instance of Guix we're using (@pxref{Invoking guix
5402 describe}). We can replicate this instance on another machine or at a
5403 different point in time by providing a channel specification ``pinned''
5404 to these commits that looks like this:
5405
5406 @lisp
5407 ;; Deploy specific commits of my channels of interest.
5408 (list (channel
5409 (name 'guix)
5410 (url "https://git.savannah.gnu.org/git/guix.git")
5411 (commit "6298c3ffd9654d3231a6f25390b056483e8f407c"))
5412 (channel
5413 (name 'variant-packages)
5414 (url "https://example.org/variant-packages.git")
5415 (commit "dd3df5e2c8818760a8fc0bd699e55d3b69fef2bb")))
5416 @end lisp
5417
5418 To obtain this pinned channel specification, the easiest way is to run
5419 @command{guix describe} and to save its output in the @code{channels}
5420 format in a file, like so:
5421
5422 @example
5423 guix describe -f channels > channels.scm
5424 @end example
5425
5426 The resulting @file{channels.scm} file can be passed to the @option{-C}
5427 option of @command{guix pull} (@pxref{Invoking guix pull}) or
5428 @command{guix time-machine} (@pxref{Invoking guix time-machine}), as in
5429 this example:
5430
5431 @example
5432 guix time-machine -C channels.scm -- shell python -- python3
5433 @end example
5434
5435 Given the @file{channels.scm} file, the command above will always fetch
5436 the @emph{exact same Guix instance}, then use that instance to run the
5437 exact same Python (@pxref{Invoking guix shell}). On any machine, at any
5438 time, it ends up running the exact same binaries, bit for bit.
5439
5440 @cindex lock files
5441 Pinned channels address a problem similar to ``lock files'' as
5442 implemented by some deployment tools---they let you pin and reproduce a
5443 set of packages. In the case of Guix though, you are effectively
5444 pinning the entire package set as defined at the given channel commits;
5445 in fact, you are pinning all of Guix, including its core modules and
5446 command-line tools. You're also getting strong guarantees that you are,
5447 indeed, obtaining the exact same software.
5448
5449 This gives you super powers, allowing you to track the provenance of binary
5450 artifacts with very fine grain, and to reproduce software environments at
5451 will---some sort of ``meta reproducibility'' capabilities, if you will.
5452 @xref{Inferiors}, for another way to take advantage of these super powers.
5453
5454 @node Channel Authentication
5455 @section Channel Authentication
5456
5457 @anchor{channel-authentication}
5458 @cindex authentication, of channel code
5459 The @command{guix pull} and @command{guix time-machine} commands
5460 @dfn{authenticate} the code retrieved from channels: they make sure each
5461 commit that is fetched is signed by an authorized developer. The goal
5462 is to protect from unauthorized modifications to the channel that would
5463 lead users to run malicious code.
5464
5465 As a user, you must provide a @dfn{channel introduction} in your
5466 channels file so that Guix knows how to authenticate its first commit.
5467 A channel specification, including its introduction, looks something
5468 along these lines:
5469
5470 @lisp
5471 (channel
5472 (name 'some-channel)
5473 (url "https://example.org/some-channel.git")
5474 (introduction
5475 (make-channel-introduction
5476 "6f0d8cc0d88abb59c324b2990bfee2876016bb86"
5477 (openpgp-fingerprint
5478 "CABB A931 C0FF EEC6 900D 0CFB 090B 1199 3D9A EBB5"))))
5479 @end lisp
5480
5481 The specification above shows the name and URL of the channel. The call
5482 to @code{make-channel-introduction} above specifies that authentication
5483 of this channel starts at commit @code{6f0d8cc@dots{}}, which is signed
5484 by the OpenPGP key with fingerprint @code{CABB A931@dots{}}.
5485
5486 For the main channel, called @code{guix}, you automatically get that
5487 information from your Guix installation. For other channels, include
5488 the channel introduction provided by the channel authors in your
5489 @file{channels.scm} file. Make sure you retrieve the channel
5490 introduction from a trusted source since that is the root of your trust.
5491
5492 If you're curious about the authentication mechanics, read on!
5493
5494 @node Channels with Substitutes
5495 @section Channels with Substitutes
5496
5497 When running @command{guix pull}, Guix will first compile the
5498 definitions of every available package. This is an expensive operation
5499 for which substitutes (@pxref{Substitutes}) may be available. The
5500 following snippet in @file{channels.scm} will ensure that @command{guix
5501 pull} uses the latest commit with available substitutes for the package
5502 definitions: this is done by querying the continuous integration
5503 server at @url{https://ci.guix.gnu.org}.
5504
5505 @lisp
5506 (use-modules (guix ci))
5507
5508 (list (channel-with-substitutes-available
5509 %default-guix-channel
5510 "https://ci.guix.gnu.org"))
5511 @end lisp
5512
5513 Note that this does not mean that all the packages that you will
5514 install after running @command{guix pull} will have available
5515 substitutes. It only ensures that @command{guix pull} will not try to
5516 compile package definitions. This is particularly useful when using
5517 machines with limited resources.
5518
5519 @node Creating a Channel
5520 @section Creating a Channel
5521
5522 @cindex personal packages (channels)
5523 @cindex channels, for personal packages
5524 Let's say you have a bunch of custom package variants or personal packages
5525 that you think would make little sense to contribute to the Guix project, but
5526 would like to have these packages transparently available to you at the
5527 command line. You would first write modules containing those package
5528 definitions (@pxref{Package Modules}), maintain them in a Git repository, and
5529 then you and anyone else can use it as an additional channel to get packages
5530 from. Neat, no?
5531
5532 @c What follows stems from discussions at
5533 @c <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=22629#134> as well as
5534 @c earlier discussions on guix-devel@gnu.org.
5535 @quotation Warning
5536 Before you, dear user, shout---``woow this is @emph{soooo coool}!''---and
5537 publish your personal channel to the world, we would like to share a few words
5538 of caution:
5539
5540 @itemize
5541 @item
5542 Before publishing a channel, please consider contributing your package
5543 definitions to Guix proper (@pxref{Contributing}). Guix as a project is open
5544 to free software of all sorts, and packages in Guix proper are readily
5545 available to all Guix users and benefit from the project's quality assurance
5546 process.
5547
5548 @item
5549 When you maintain package definitions outside Guix, we, Guix developers,
5550 consider that @emph{the compatibility burden is on you}. Remember that
5551 package modules and package definitions are just Scheme code that uses various
5552 programming interfaces (APIs). We want to remain free to change these APIs to
5553 keep improving Guix, possibly in ways that break your channel. We never
5554 change APIs gratuitously, but we will @emph{not} commit to freezing APIs
5555 either.
5556
5557 @item
5558 Corollary: if you're using an external channel and that channel breaks, please
5559 @emph{report the issue to the channel authors}, not to the Guix project.
5560 @end itemize
5561
5562 You've been warned! Having said this, we believe external channels are a
5563 practical way to exert your freedom to augment Guix' package collection and to
5564 share your improvements, which are basic tenets of
5565 @uref{https://www.gnu.org/philosophy/free-sw.html, free software}. Please
5566 email us at @email{guix-devel@@gnu.org} if you'd like to discuss this.
5567 @end quotation
5568
5569 To create a channel, create a Git repository containing your own package
5570 modules and make it available. The repository can contain anything, but a
5571 useful channel will contain Guile modules that export packages. Once you
5572 start using a channel, Guix will behave as if the root directory of that
5573 channel's Git repository has been added to the Guile load path (@pxref{Load
5574 Paths,,, guile, GNU Guile Reference Manual}). For example, if your channel
5575 contains a file at @file{my-packages/my-tools.scm} that defines a Guile
5576 module, then the module will be available under the name @code{(my-packages
5577 my-tools)}, and you will be able to use it like any other module
5578 (@pxref{Modules,,, guile, GNU Guile Reference Manual}).
5579
5580 As a channel author, consider bundling authentication material with your
5581 channel so that users can authenticate it. @xref{Channel
5582 Authentication}, and @ref{Specifying Channel Authorizations}, for info
5583 on how to do it.
5584
5585
5586 @node Package Modules in a Sub-directory
5587 @section Package Modules in a Sub-directory
5588
5589 @cindex subdirectory, channels
5590 As a channel author, you may want to keep your channel modules in a
5591 sub-directory. If your modules are in the sub-directory @file{guix}, you must
5592 add a meta-data file @file{.guix-channel} that contains:
5593
5594 @lisp
5595 (channel
5596 (version 0)
5597 (directory "guix"))
5598 @end lisp
5599
5600 @node Declaring Channel Dependencies
5601 @section Declaring Channel Dependencies
5602
5603 @cindex dependencies, channels
5604 @cindex meta-data, channels
5605 Channel authors may decide to augment a package collection provided by other
5606 channels. They can declare their channel to be dependent on other channels in
5607 a meta-data file @file{.guix-channel}, which is to be placed in the root of
5608 the channel repository.
5609
5610 The meta-data file should contain a simple S-expression like this:
5611
5612 @lisp
5613 (channel
5614 (version 0)
5615 (dependencies
5616 (channel
5617 (name some-collection)
5618 (url "https://example.org/first-collection.git")
5619
5620 ;; The 'introduction' bit below is optional: you would
5621 ;; provide it for dependencies that can be authenticated.
5622 (introduction
5623 (channel-introduction
5624 (version 0)
5625 (commit "a8883b58dc82e167c96506cf05095f37c2c2c6cd")
5626 (signer "CABB A931 C0FF EEC6 900D 0CFB 090B 1199 3D9A EBB5"))))
5627 (channel
5628 (name some-other-collection)
5629 (url "https://example.org/second-collection.git")
5630 (branch "testing"))))
5631 @end lisp
5632
5633 In the above example this channel is declared to depend on two other channels,
5634 which will both be fetched automatically. The modules provided by the channel
5635 will be compiled in an environment where the modules of all these declared
5636 channels are available.
5637
5638 For the sake of reliability and maintainability, you should avoid dependencies
5639 on channels that you don't control, and you should aim to keep the number of
5640 dependencies to a minimum.
5641
5642 @node Specifying Channel Authorizations
5643 @section Specifying Channel Authorizations
5644
5645 @cindex channel authorizations
5646 @anchor{channel-authorizations}
5647 As we saw above, Guix ensures the source code it pulls from channels
5648 comes from authorized developers. As a channel author, you need to
5649 specify the list of authorized developers in the
5650 @file{.guix-authorizations} file in the channel's Git repository. The
5651 authentication rule is simple: each commit must be signed by a key
5652 listed in the @file{.guix-authorizations} file of its parent
5653 commit(s)@footnote{Git commits form a @dfn{directed acyclic graph}
5654 (DAG). Each commit can have zero or more parents; ``regular'' commits
5655 have one parent and merge commits have two parent commits. Read
5656 @uref{https://eagain.net/articles/git-for-computer-scientists/, @i{Git
5657 for Computer Scientists}} for a great overview.} The
5658 @file{.guix-authorizations} file looks like this:
5659
5660 @lisp
5661 ;; Example '.guix-authorizations' file.
5662
5663 (authorizations
5664 (version 0) ;current file format version
5665
5666 (("AD17 A21E F8AE D8F1 CC02 DBD9 F8AE D8F1 765C 61E3"
5667 (name "alice"))
5668 ("2A39 3FFF 68F4 EF7A 3D29 12AF 68F4 EF7A 22FB B2D5"
5669 (name "bob"))
5670 ("CABB A931 C0FF EEC6 900D 0CFB 090B 1199 3D9A EBB5"
5671 (name "charlie"))))
5672 @end lisp
5673
5674 Each fingerprint is followed by optional key/value pairs, as in the
5675 example above. Currently these key/value pairs are ignored.
5676
5677 This authentication rule creates a chicken-and-egg issue: how do we
5678 authenticate the first commit? Related to that: how do we deal with
5679 channels whose repository history contains unsigned commits and lack
5680 @file{.guix-authorizations}? And how do we fork existing channels?
5681
5682 @cindex channel introduction
5683 Channel introductions answer these questions by describing the first
5684 commit of a channel that should be authenticated. The first time a
5685 channel is fetched with @command{guix pull} or @command{guix
5686 time-machine}, the command looks up the introductory commit and verifies
5687 that it is signed by the specified OpenPGP key. From then on, it
5688 authenticates commits according to the rule above. Authentication fails
5689 if the target commit is neither a descendant nor an ancestor of the
5690 introductory commit.
5691
5692 Additionally, your channel must provide all the OpenPGP keys that were
5693 ever mentioned in @file{.guix-authorizations}, stored as @file{.key}
5694 files, which can be either binary or ``ASCII-armored''. By default,
5695 those @file{.key} files are searched for in the branch named
5696 @code{keyring} but you can specify a different branch name in
5697 @code{.guix-channel} like so:
5698
5699 @lisp
5700 (channel
5701 (version 0)
5702 (keyring-reference "my-keyring-branch"))
5703 @end lisp
5704
5705 To summarize, as the author of a channel, there are three things you have
5706 to do to allow users to authenticate your code:
5707
5708 @enumerate
5709 @item
5710 Export the OpenPGP keys of past and present committers with @command{gpg
5711 --export} and store them in @file{.key} files, by default in a branch
5712 named @code{keyring} (we recommend making it an @dfn{orphan branch}).
5713
5714 @item
5715 Introduce an initial @file{.guix-authorizations} in the channel's
5716 repository. Do that in a signed commit (@pxref{Commit Access}, for
5717 information on how to sign Git commits.)
5718
5719 @item
5720 Advertise the channel introduction, for instance on your channel's web
5721 page. The channel introduction, as we saw above, is the commit/key
5722 pair---i.e., the commit that introduced @file{.guix-authorizations}, and
5723 the fingerprint of the OpenPGP used to sign it.
5724 @end enumerate
5725
5726 Before pushing to your public Git repository, you can run @command{guix
5727 git-authenticate} to verify that you did sign all the commits you are
5728 about to push with an authorized key:
5729
5730 @example
5731 guix git authenticate @var{commit} @var{signer}
5732 @end example
5733
5734 @noindent
5735 where @var{commit} and @var{signer} are your channel introduction.
5736 @xref{Invoking guix git authenticate}, for details.
5737
5738 Publishing a signed channel requires discipline: any mistake, such as an
5739 unsigned commit or a commit signed by an unauthorized key, will prevent
5740 users from pulling from your channel---well, that's the whole point of
5741 authentication! Pay attention to merges in particular: merge commits
5742 are considered authentic if and only if they are signed by a key present
5743 in the @file{.guix-authorizations} file of @emph{both} branches.
5744
5745 @node Primary URL
5746 @section Primary URL
5747
5748 @cindex primary URL, channels
5749 Channel authors can indicate the primary URL of their channel's Git
5750 repository in the @file{.guix-channel} file, like so:
5751
5752 @lisp
5753 (channel
5754 (version 0)
5755 (url "https://example.org/guix.git"))
5756 @end lisp
5757
5758 This allows @command{guix pull} to determine whether it is pulling code
5759 from a mirror of the channel; when that is the case, it warns the user
5760 that the mirror might be stale and displays the primary URL@. That way,
5761 users cannot be tricked into fetching code from a stale mirror that does
5762 not receive security updates.
5763
5764 This feature only makes sense for authenticated repositories, such as
5765 the official @code{guix} channel, for which @command{guix pull} ensures
5766 the code it fetches is authentic.
5767
5768 @node Writing Channel News
5769 @section Writing Channel News
5770
5771 @cindex news, for channels
5772 Channel authors may occasionally want to communicate to their users
5773 information about important changes in the channel. You'd send them all
5774 an email, but that's not convenient.
5775
5776 Instead, channels can provide a @dfn{news file}; when the channel users
5777 run @command{guix pull}, that news file is automatically read and
5778 @command{guix pull --news} can display the announcements that correspond
5779 to the new commits that have been pulled, if any.
5780
5781 To do that, channel authors must first declare the name of the news file
5782 in their @file{.guix-channel} file:
5783
5784 @lisp
5785 (channel
5786 (version 0)
5787 (news-file "etc/news.txt"))
5788 @end lisp
5789
5790 The news file itself, @file{etc/news.txt} in this example, must look
5791 something like this:
5792
5793 @lisp
5794 (channel-news
5795 (version 0)
5796 (entry (tag "the-bug-fix")
5797 (title (en "Fixed terrible bug")
5798 (fr "Oh la la"))
5799 (body (en "@@emph@{Good news@}! It's fixed!")
5800 (eo "Certe ĝi pli bone funkcias nun!")))
5801 (entry (commit "bdcabe815cd28144a2d2b4bc3c5057b051fa9906")
5802 (title (en "Added a great package")
5803 (ca "Què vol dir guix?"))
5804 (body (en "Don't miss the @@code@{hello@} package!"))))
5805 @end lisp
5806
5807 While the news file is using the Scheme syntax, avoid naming it with a
5808 @file{.scm} extension or else it will get picked up when building the
5809 channel and yield an error since it is not a valid module.
5810 Alternatively, you can move the channel module to a subdirectory and
5811 store the news file in another directory.
5812
5813 The file consists of a list of @dfn{news entries}. Each entry is
5814 associated with a commit or tag: it describes changes made in this
5815 commit, possibly in preceding commits as well. Users see entries only
5816 the first time they obtain the commit the entry refers to.
5817
5818 The @code{title} field should be a one-line summary while @code{body}
5819 can be arbitrarily long, and both can contain Texinfo markup
5820 (@pxref{Overview,,, texinfo, GNU Texinfo}). Both the title and body are
5821 a list of language tag/message tuples, which allows @command{guix pull}
5822 to display news in the language that corresponds to the user's locale.
5823
5824 If you want to translate news using a gettext-based workflow, you can
5825 extract translatable strings with @command{xgettext} (@pxref{xgettext
5826 Invocation,,, gettext, GNU Gettext Utilities}). For example, assuming
5827 you write news entries in English first, the command below creates a PO
5828 file containing the strings to translate:
5829
5830 @example
5831 xgettext -o news.po -l scheme -ken etc/news.txt
5832 @end example
5833
5834 To sum up, yes, you could use your channel as a blog. But beware, this
5835 is @emph{not quite} what your users might expect.
5836
5837 @c *********************************************************************
5838 @node Development
5839 @chapter Development
5840
5841 @cindex software development
5842 If you are a software developer, Guix provides tools that you should find
5843 helpful---independently of the language you're developing in. This is what
5844 this chapter is about.
5845
5846 The @command{guix shell} command provides a convenient way to set up
5847 one-off software environments, be it for development purposes or to run
5848 a command without installing it in your profile. The @command{guix
5849 pack} command allows you to create @dfn{application bundles} that can be
5850 easily distributed to users who do not run Guix.
5851
5852 @menu
5853 * Invoking guix shell:: Spawning one-off software environments.
5854 * Invoking guix environment:: Setting up development environments.
5855 * Invoking guix pack:: Creating software bundles.
5856 * The GCC toolchain:: Working with languages supported by GCC.
5857 * Invoking guix git authenticate:: Authenticating Git repositories.
5858 @end menu
5859
5860 @node Invoking guix shell
5861 @section Invoking @command{guix shell}
5862
5863 @cindex reproducible build environments
5864 @cindex development environments
5865 @cindex @command{guix environment}
5866 @cindex @command{guix shell}
5867 @cindex environment, package build environment
5868 The purpose of @command{guix shell} is to make it easy to create one-off
5869 software environments, without changing one's profile. It is typically
5870 used to create development environments; it is also a convenient way to
5871 run applications without ``polluting'' your profile.
5872
5873 @quotation Note
5874 The @command{guix shell} command was recently introduced to supersede
5875 @command{guix environment} (@pxref{Invoking guix environment}). If you
5876 are familiar with @command{guix environment}, you will notice that it is
5877 similar but also---we hope!---more convenient.
5878 @end quotation
5879
5880 The general syntax is:
5881
5882 @example
5883 guix shell [@var{options}] [@var{package}@dots{}]
5884 @end example
5885
5886 The following example creates an environment containing Python and NumPy,
5887 building or downloading any missing package, and runs the
5888 @command{python3} command in that environment:
5889
5890 @example
5891 guix shell python python-numpy -- python3
5892 @end example
5893
5894 Development environments can be created as in the example below, which
5895 spawns an interactive shell containing all the dependencies and
5896 environment variables needed to work on Inkscape:
5897
5898 @example
5899 guix shell --development inkscape
5900 @end example
5901
5902 Exiting the shell places the user back in the original environment
5903 before @command{guix shell} was invoked. The next garbage collection
5904 (@pxref{Invoking guix gc}) may clean up packages that were installed in
5905 the environment and that are no longer used outside of it.
5906
5907 As an added convenience, @command{guix shell} will try to do what you
5908 mean when it is invoked interactively without any other arguments
5909 as in:
5910
5911 @example
5912 guix shell
5913 @end example
5914
5915 If it finds a @file{manifest.scm} in the current working directory or
5916 any of its parents, it uses this manifest as though it was given via @code{--manifest}.
5917 Likewise, if it finds a @file{guix.scm} in the same directories, it uses
5918 it to build a development profile as though both @code{--development}
5919 and @code{--file} were present.
5920 In either case, the file will only be loaded if the directory it
5921 resides in is listed in
5922 @file{~/.config/guix/shell-authorized-directories}.
5923 This provides an easy way to define, share, and enter development
5924 environments.
5925
5926 By default, the shell session or command runs in an @emph{augmented}
5927 environment, where the new packages are added to search path environment
5928 variables such as @code{PATH}. You can, instead, choose to create an
5929 @emph{isolated} environment containing nothing but the packages you
5930 asked for. Passing the @option{--pure} option clears environment
5931 variable definitions found in the parent environment@footnote{Be sure to
5932 use the @option{--check} option the first time you use @command{guix
5933 shell} interactively to make sure the shell does not undo the effect of
5934 @option{--pure}.}; passing @option{--container} goes one step further by
5935 spawning a @dfn{container} isolated from the rest of the system:
5936
5937 @example
5938 guix shell --container emacs gcc-toolchain
5939 @end example
5940
5941 The command above spawns an interactive shell in a container where
5942 nothing but @code{emacs}, @code{gcc-toolchain}, and their dependencies
5943 is available. The container lacks network access and shares no files
5944 other than the current working directory with the surrounding
5945 environment. This is useful to prevent access to system-wide resources
5946 such as @file{/usr/bin} on foreign distros.
5947
5948 This @option{--container} option can also prove useful if you wish to
5949 run a security-sensitive application, such as a web browser, in an
5950 isolated environment. For example, the command below launches
5951 Ungoogled-Chromium in an isolated environment, this time sharing network
5952 access with the host and preserving its @code{DISPLAY} environment
5953 variable, but without even sharing the current directory:
5954
5955 @example
5956 guix shell --container --network --no-cwd ungoogled-chromium \
5957 --preserve='^DISPLAY$' -- chromium
5958 @end example
5959
5960 @vindex GUIX_ENVIRONMENT
5961 @command{guix shell} defines the @env{GUIX_ENVIRONMENT}
5962 variable in the shell it spawns; its value is the file name of the
5963 profile of this environment. This allows users to, say, define a
5964 specific prompt for development environments in their @file{.bashrc}
5965 (@pxref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}):
5966
5967 @example
5968 if [ -n "$GUIX_ENVIRONMENT" ]
5969 then
5970 export PS1="\u@@\h \w [dev]\$ "
5971 fi
5972 @end example
5973
5974 @noindent
5975 ...@: or to browse the profile:
5976
5977 @example
5978 $ ls "$GUIX_ENVIRONMENT/bin"
5979 @end example
5980
5981 The available options are summarized below.
5982
5983 @table @code
5984 @item --check
5985 Set up the environment and check whether the shell would clobber
5986 environment variables. It's a good idea to use this option the first
5987 time you run @command{guix shell} for an interactive session to make
5988 sure your setup is correct.
5989
5990 For example, if the shell modifies the @env{PATH} environment variable,
5991 report it since you would get a different environment than what you
5992 asked for.
5993
5994 Such problems usually indicate that the shell startup files are
5995 unexpectedly modifying those environment variables. For example, if you
5996 are using Bash, make sure that environment variables are set or modified
5997 in @file{~/.bash_profile} and @emph{not} in @file{~/.bashrc}---the
5998 former is sourced only by log-in shells. @xref{Bash Startup Files,,,
5999 bash, The GNU Bash Reference Manual}, for details on Bash start-up
6000 files.
6001
6002 @anchor{shell-development-option}
6003 @item --development
6004 @itemx -D
6005 Cause @command{guix shell} to include in the environment the
6006 dependencies of the following package rather than the package itself.
6007 This can be combined with other packages. For instance, the command
6008 below starts an interactive shell containing the build-time dependencies
6009 of GNU@tie{}Guile, plus Autoconf, Automake, and Libtool:
6010
6011 @example
6012 guix shell -D guile autoconf automake libtool
6013 @end example
6014
6015 @item --expression=@var{expr}
6016 @itemx -e @var{expr}
6017 Create an environment for the package or list of packages that
6018 @var{expr} evaluates to.
6019
6020 For example, running:
6021
6022 @example
6023 guix shell -D -e '(@@ (gnu packages maths) petsc-openmpi)'
6024 @end example
6025
6026 starts a shell with the environment for this specific variant of the
6027 PETSc package.
6028
6029 Running:
6030
6031 @example
6032 guix shell -e '(@@ (gnu) %base-packages)'
6033 @end example
6034
6035 starts a shell with all the base system packages available.
6036
6037 The above commands only use the default output of the given packages.
6038 To select other outputs, two element tuples can be specified:
6039
6040 @example
6041 guix shell -e '(list (@@ (gnu packages bash) bash) "include")'
6042 @end example
6043
6044 @xref{package-development-manifest,
6045 @code{package->development-manifest}}, for information on how to write a
6046 manifest for the development environment of a package.
6047
6048 @item --file=@var{file}
6049 @itemx -f @var{file}
6050 Create an environment containing the package or list of packages that
6051 the code within @var{file} evaluates to.
6052
6053 As an example, @var{file} might contain a definition like this
6054 (@pxref{Defining Packages}):
6055
6056 @lisp
6057 @verbatiminclude environment-gdb.scm
6058 @end lisp
6059
6060 With the file above, you can enter a development environment for GDB by
6061 running:
6062
6063 @example
6064 guix shell -D -f gdb-devel.scm
6065 @end example
6066
6067 @anchor{shell-manifest}
6068 @item --manifest=@var{file}
6069 @itemx -m @var{file}
6070 Create an environment for the packages contained in the manifest object
6071 returned by the Scheme code in @var{file}. This option can be repeated
6072 several times, in which case the manifests are concatenated.
6073
6074 This is similar to the same-named option in @command{guix package}
6075 (@pxref{profile-manifest, @option{--manifest}}) and uses the same
6076 manifest files.
6077
6078 @xref{Writing Manifests}, for information on how to write a manifest.
6079 See @option{--export-manifest} below on how to obtain a first manifest.
6080
6081 @cindex manifest, exporting
6082 @anchor{shell-export-manifest}
6083 @item --export-manifest
6084 Write to standard output a manifest suitable for @option{--manifest}
6085 corresponding to given command-line options.
6086
6087 This is a way to ``convert'' command-line arguments into a manifest.
6088 For example, imagine you are tired of typing long lines and would like
6089 to get a manifest equivalent to this command line:
6090
6091 @example
6092 guix shell -D guile git emacs emacs-geiser emacs-geiser-guile
6093 @end example
6094
6095 Just add @option{--export-manifest} to the command line above:
6096
6097 @example
6098 guix shell --export-manifest \
6099 -D guile git emacs emacs-geiser emacs-geiser-guile
6100 @end example
6101
6102 @noindent
6103 ... and you get a manifest along these lines:
6104
6105 @lisp
6106 (concatenate-manifests
6107 (list (specifications->manifest
6108 (list "git"
6109 "emacs"
6110 "emacs-geiser"
6111 "emacs-geiser-guile"))
6112 (package->development-manifest
6113 (specification->package "guile"))))
6114 @end lisp
6115
6116 You can store it into a file, say @file{manifest.scm}, and from there
6117 pass it to @command{guix shell} or indeed pretty much any @command{guix}
6118 command:
6119
6120 @example
6121 guix shell -m manifest.scm
6122 @end example
6123
6124 Voilà, you've converted a long command line into a manifest! That
6125 conversion process honors package transformation options (@pxref{Package
6126 Transformation Options}) so it should be lossless.
6127
6128 @item --profile=@var{profile}
6129 @itemx -p @var{profile}
6130 Create an environment containing the packages installed in @var{profile}.
6131 Use @command{guix package} (@pxref{Invoking guix package}) to create
6132 and manage profiles.
6133
6134 @item --pure
6135 Unset existing environment variables when building the new environment, except
6136 those specified with @option{--preserve} (see below). This has the effect of
6137 creating an environment in which search paths only contain package inputs.
6138
6139 @item --preserve=@var{regexp}
6140 @itemx -E @var{regexp}
6141 When used alongside @option{--pure}, preserve the environment variables
6142 matching @var{regexp}---in other words, put them on a ``white list'' of
6143 environment variables that must be preserved. This option can be repeated
6144 several times.
6145
6146 @example
6147 guix shell --pure --preserve=^SLURM openmpi @dots{} \
6148 -- mpirun @dots{}
6149 @end example
6150
6151 This example runs @command{mpirun} in a context where the only environment
6152 variables defined are @env{PATH}, environment variables whose name starts
6153 with @samp{SLURM}, as well as the usual ``precious'' variables (@env{HOME},
6154 @env{USER}, etc.).
6155
6156 @item --search-paths
6157 Display the environment variable definitions that make up the
6158 environment.
6159
6160 @item --system=@var{system}
6161 @itemx -s @var{system}
6162 Attempt to build for @var{system}---e.g., @code{i686-linux}.
6163
6164 @item --container
6165 @itemx -C
6166 @cindex container
6167 Run @var{command} within an isolated container. The current working
6168 directory outside the container is mapped inside the container.
6169 Additionally, unless overridden with @option{--user}, a dummy home
6170 directory is created that matches the current user's home directory, and
6171 @file{/etc/passwd} is configured accordingly.
6172
6173 The spawned process runs as the current user outside the container. Inside
6174 the container, it has the same UID and GID as the current user, unless
6175 @option{--user} is passed (see below).
6176
6177 @item --network
6178 @itemx -N
6179 For containers, share the network namespace with the host system.
6180 Containers created without this flag only have access to the loopback
6181 device.
6182
6183 @item --link-profile
6184 @itemx -P
6185 For containers, link the environment profile to @file{~/.guix-profile}
6186 within the container and set @code{GUIX_ENVIRONMENT} to that.
6187 This is equivalent to making @file{~/.guix-profile} a symlink to the
6188 actual profile within the container.
6189 Linking will fail and abort the environment if the directory already
6190 exists, which will certainly be the case if @command{guix shell}
6191 was invoked in the user's home directory.
6192
6193 Certain packages are configured to look in @file{~/.guix-profile} for
6194 configuration files and data;@footnote{For example, the
6195 @code{fontconfig} package inspects @file{~/.guix-profile/share/fonts}
6196 for additional fonts.} @option{--link-profile} allows these programs to
6197 behave as expected within the environment.
6198
6199 @item --user=@var{user}
6200 @itemx -u @var{user}
6201 For containers, use the username @var{user} in place of the current
6202 user. The generated @file{/etc/passwd} entry within the container will
6203 contain the name @var{user}, the home directory will be
6204 @file{/home/@var{user}}, and no user GECOS data will be copied. Furthermore,
6205 the UID and GID inside the container are 1000. @var{user}
6206 need not exist on the system.
6207
6208 Additionally, any shared or exposed path (see @option{--share} and
6209 @option{--expose} respectively) whose target is within the current user's
6210 home directory will be remapped relative to @file{/home/USER}; this
6211 includes the automatic mapping of the current working directory.
6212
6213 @example
6214 # will expose paths as /home/foo/wd, /home/foo/test, and /home/foo/target
6215 cd $HOME/wd
6216 guix shell --container --user=foo \
6217 --expose=$HOME/test \
6218 --expose=/tmp/target=$HOME/target
6219 @end example
6220
6221 While this will limit the leaking of user identity through home paths
6222 and each of the user fields, this is only one useful component of a
6223 broader privacy/anonymity solution---not one in and of itself.
6224
6225 @item --no-cwd
6226 For containers, the default behavior is to share the current working
6227 directory with the isolated container and immediately change to that
6228 directory within the container. If this is undesirable,
6229 @option{--no-cwd} will cause the current working directory to @emph{not}
6230 be automatically shared and will change to the user's home directory
6231 within the container instead. See also @option{--user}.
6232
6233 @item --expose=@var{source}[=@var{target}]
6234 @itemx --share=@var{source}[=@var{target}]
6235 For containers, @option{--expose} (resp. @option{--share}) exposes the
6236 file system @var{source} from the host system as the read-only
6237 (resp. writable) file system @var{target} within the container. If
6238 @var{target} is not specified, @var{source} is used as the target mount
6239 point in the container.
6240
6241 The example below spawns a Guile REPL in a container in which the user's
6242 home directory is accessible read-only via the @file{/exchange}
6243 directory:
6244
6245 @example
6246 guix shell --container --expose=$HOME=/exchange guile -- guile
6247 @end example
6248
6249 @cindex symbolic links, guix shell
6250 @item --symlink=@var{spec}
6251 @itemx -S @var{spec}
6252 For containers, create the symbolic links specified by @var{spec}, as
6253 documented in @ref{pack-symlink-option}.
6254
6255 @cindex file system hierarchy standard (FHS)
6256 @cindex FHS (file system hierarchy standard)
6257 @item --emulate-fhs
6258 @itemx -F
6259 When used with @option{--container}, emulate a
6260 @uref{https://refspecs.linuxfoundation.org/fhs.shtml, Filesystem
6261 Hierarchy Standard (FHS)} configuration within the container, providing
6262 @file{/bin}, @file{/lib}, and other directories and files specified by
6263 the FHS.
6264
6265 As Guix deviates from the FHS specification, this
6266 option sets up the container to more closely mimic that of other
6267 GNU/Linux distributions. This is useful for reproducing other
6268 development environments, testing, and using programs which expect the
6269 FHS specification to be followed. With this option, the container will
6270 include a version of glibc that will read
6271 @file{/etc/ld.so.cache} within the container for the shared library
6272 cache (contrary to glibc in regular Guix usage) and set up the
6273 expected FHS directories: @file{/bin}, @file{/etc}, @file{/lib}, and
6274 @file{/usr} from the container's profile.
6275
6276 @item --rebuild-cache
6277 @cindex caching, of profiles
6278 @cindex caching, in @command{guix shell}
6279 In most cases, @command{guix shell} caches the environment so that
6280 subsequent uses are instantaneous. Least-recently used cache entries
6281 are periodically removed. The cache is also invalidated, when using
6282 @option{--file} or @option{--manifest}, anytime the corresponding file
6283 is modified.
6284
6285 The @option{--rebuild-cache} forces the cached environment to be
6286 refreshed. This is useful when using @option{--file} or
6287 @option{--manifest} and the @command{guix.scm} or @command{manifest.scm}
6288 file has external dependencies, or if its behavior depends, say, on
6289 environment variables.
6290
6291 @item --root=@var{file}
6292 @itemx -r @var{file}
6293 @cindex persistent environment
6294 @cindex garbage collector root, for environments
6295 Make @var{file} a symlink to the profile for this environment, and
6296 register it as a garbage collector root.
6297
6298 This is useful if you want to protect your environment from garbage
6299 collection, to make it ``persistent''.
6300
6301 When this option is omitted, @command{guix shell} caches profiles so
6302 that subsequent uses of the same environment are instantaneous---this is
6303 comparable to using @option{--root} except that @command{guix shell}
6304 takes care of periodically removing the least-recently used garbage
6305 collector roots.
6306
6307 In some cases, @command{guix shell} does not cache profiles---e.g., if
6308 transformation options such as @option{--with-latest} are used. In
6309 those cases, the environment is protected from garbage collection only
6310 for the duration of the @command{guix shell} session. This means that
6311 next time you recreate the same environment, you could have to rebuild
6312 or re-download packages.
6313
6314 @xref{Invoking guix gc}, for more on GC roots.
6315 @end table
6316
6317 @command{guix shell} also supports all of the common build options that
6318 @command{guix build} supports (@pxref{Common Build Options}) as well as
6319 package transformation options (@pxref{Package Transformation Options}).
6320
6321 @node Invoking guix environment
6322 @section Invoking @command{guix environment}
6323
6324 @cindex @command{guix environment}
6325
6326 The purpose of @command{guix environment} is to assist in creating
6327 development environments.
6328
6329 @quotation Deprecation warning
6330 The @command{guix environment} command is deprecated in favor of
6331 @command{guix shell}, which performs similar functions but is more
6332 convenient to use. @xref{Invoking guix shell}.
6333
6334 Being deprecated, @command{guix environment} is slated for eventual
6335 removal, but the Guix project is committed to keeping it until May 1st,
6336 2023. Please get in touch with us at @email{guix-devel@@gnu.org} if you
6337 would like to discuss it.
6338 @end quotation
6339
6340 The general syntax is:
6341
6342 @example
6343 guix environment @var{options} @var{package}@dots{}
6344 @end example
6345
6346 The following example spawns a new shell set up for the development of
6347 GNU@tie{}Guile:
6348
6349 @example
6350 guix environment guile
6351 @end example
6352
6353 If the needed dependencies are not built yet, @command{guix environment}
6354 automatically builds them. The environment of the new shell is an
6355 augmented version of the environment that @command{guix environment} was
6356 run in. It contains the necessary search paths for building the given
6357 package added to the existing environment variables. To create
6358 a ``pure'' environment, in which the original environment variables have
6359 been unset, use the @option{--pure} option@footnote{Users sometimes
6360 wrongfully augment environment variables such as @env{PATH} in their
6361 @file{~/.bashrc} file. As a consequence, when @command{guix
6362 environment} launches it, Bash may read @file{~/.bashrc}, thereby
6363 introducing ``impurities'' in these environment variables. It is an
6364 error to define such environment variables in @file{.bashrc}; instead,
6365 they should be defined in @file{.bash_profile}, which is sourced only by
6366 log-in shells. @xref{Bash Startup Files,,, bash, The GNU Bash Reference
6367 Manual}, for details on Bash start-up files.}.
6368
6369 Exiting from a Guix environment is the same as exiting from the shell,
6370 and will place the user back in the old environment before @command{guix
6371 environment} was invoked. The next garbage collection (@pxref{Invoking
6372 guix gc}) will clean up packages that were installed from within the
6373 environment and are no longer used outside of it.
6374
6375 @vindex GUIX_ENVIRONMENT
6376 @command{guix environment} defines the @env{GUIX_ENVIRONMENT}
6377 variable in the shell it spawns; its value is the file name of the
6378 profile of this environment. This allows users to, say, define a
6379 specific prompt for development environments in their @file{.bashrc}
6380 (@pxref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}):
6381
6382 @example
6383 if [ -n "$GUIX_ENVIRONMENT" ]
6384 then
6385 export PS1="\u@@\h \w [dev]\$ "
6386 fi
6387 @end example
6388
6389 @noindent
6390 ...@: or to browse the profile:
6391
6392 @example
6393 $ ls "$GUIX_ENVIRONMENT/bin"
6394 @end example
6395
6396 Additionally, more than one package may be specified, in which case the
6397 union of the inputs for the given packages are used. For example, the
6398 command below spawns a shell where all of the dependencies of both Guile
6399 and Emacs are available:
6400
6401 @example
6402 guix environment guile emacs
6403 @end example
6404
6405 Sometimes an interactive shell session is not desired. An arbitrary
6406 command may be invoked by placing the @code{--} token to separate the
6407 command from the rest of the arguments:
6408
6409 @example
6410 guix environment guile -- make -j4
6411 @end example
6412
6413 In other situations, it is more convenient to specify the list of
6414 packages needed in the environment. For example, the following command
6415 runs @command{python} from an environment containing Python@tie{}3 and
6416 NumPy:
6417
6418 @example
6419 guix environment --ad-hoc python-numpy python -- python3
6420 @end example
6421
6422 Furthermore, one might want the dependencies of a package and also some
6423 additional packages that are not build-time or runtime dependencies, but
6424 are useful when developing nonetheless. Because of this, the
6425 @option{--ad-hoc} flag is positional. Packages appearing before
6426 @option{--ad-hoc} are interpreted as packages whose dependencies will be
6427 added to the environment. Packages appearing after are interpreted as
6428 packages that will be added to the environment directly. For example,
6429 the following command creates a Guix development environment that
6430 additionally includes Git and strace:
6431
6432 @example
6433 guix environment --pure guix --ad-hoc git strace
6434 @end example
6435
6436 @cindex container
6437 Sometimes it is desirable to isolate the environment as much as
6438 possible, for maximal purity and reproducibility. In particular, when
6439 using Guix on a host distro that is not Guix System, it is desirable to
6440 prevent access to @file{/usr/bin} and other system-wide resources from
6441 the development environment. For example, the following command spawns
6442 a Guile REPL in a ``container'' where only the store and the current
6443 working directory are mounted:
6444
6445 @example
6446 guix environment --ad-hoc --container guile -- guile
6447 @end example
6448
6449 @quotation Note
6450 The @option{--container} option requires Linux-libre 3.19 or newer.
6451 @end quotation
6452
6453 @cindex certificates
6454 Another typical use case for containers is to run security-sensitive
6455 applications such as a web browser. To run Eolie, we must expose and
6456 share some files and directories; we include @code{nss-certs} and expose
6457 @file{/etc/ssl/certs/} for HTTPS authentication; finally we preserve the
6458 @env{DISPLAY} environment variable since containerized graphical
6459 applications won't display without it.
6460
6461 @example
6462 guix environment --preserve='^DISPLAY$' --container --network \
6463 --expose=/etc/machine-id \
6464 --expose=/etc/ssl/certs/ \
6465 --share=$HOME/.local/share/eolie/=$HOME/.local/share/eolie/ \
6466 --ad-hoc eolie nss-certs dbus -- eolie
6467 @end example
6468
6469 The available options are summarized below.
6470
6471 @table @code
6472 @item --check
6473 Set up the environment and check whether the shell would clobber
6474 environment variables. @xref{Invoking guix shell, @option{--check}},
6475 for more info.
6476
6477 @item --root=@var{file}
6478 @itemx -r @var{file}
6479 @cindex persistent environment
6480 @cindex garbage collector root, for environments
6481 Make @var{file} a symlink to the profile for this environment, and
6482 register it as a garbage collector root.
6483
6484 This is useful if you want to protect your environment from garbage
6485 collection, to make it ``persistent''.
6486
6487 When this option is omitted, the environment is protected from garbage
6488 collection only for the duration of the @command{guix environment}
6489 session. This means that next time you recreate the same environment,
6490 you could have to rebuild or re-download packages. @xref{Invoking guix
6491 gc}, for more on GC roots.
6492
6493 @item --expression=@var{expr}
6494 @itemx -e @var{expr}
6495 Create an environment for the package or list of packages that
6496 @var{expr} evaluates to.
6497
6498 For example, running:
6499
6500 @example
6501 guix environment -e '(@@ (gnu packages maths) petsc-openmpi)'
6502 @end example
6503
6504 starts a shell with the environment for this specific variant of the
6505 PETSc package.
6506
6507 Running:
6508
6509 @example
6510 guix environment --ad-hoc -e '(@@ (gnu) %base-packages)'
6511 @end example
6512
6513 starts a shell with all the base system packages available.
6514
6515 The above commands only use the default output of the given packages.
6516 To select other outputs, two element tuples can be specified:
6517
6518 @example
6519 guix environment --ad-hoc -e '(list (@@ (gnu packages bash) bash) "include")'
6520 @end example
6521
6522 @item --load=@var{file}
6523 @itemx -l @var{file}
6524 Create an environment for the package or list of packages that the code
6525 within @var{file} evaluates to.
6526
6527 As an example, @var{file} might contain a definition like this
6528 (@pxref{Defining Packages}):
6529
6530 @lisp
6531 @verbatiminclude environment-gdb.scm
6532 @end lisp
6533
6534 @item --manifest=@var{file}
6535 @itemx -m @var{file}
6536 Create an environment for the packages contained in the manifest object
6537 returned by the Scheme code in @var{file}. This option can be repeated
6538 several times, in which case the manifests are concatenated.
6539
6540 This is similar to the same-named option in @command{guix package}
6541 (@pxref{profile-manifest, @option{--manifest}}) and uses the same
6542 manifest files.
6543
6544 @xref{shell-export-manifest, @command{guix shell --export-manifest}},
6545 for information on how to ``convert'' command-line options into a
6546 manifest.
6547
6548 @item --ad-hoc
6549 Include all specified packages in the resulting environment, as if an
6550 @i{ad hoc} package were defined with them as inputs. This option is
6551 useful for quickly creating an environment without having to write a
6552 package expression to contain the desired inputs.
6553
6554 For instance, the command:
6555
6556 @example
6557 guix environment --ad-hoc guile guile-sdl -- guile
6558 @end example
6559
6560 runs @command{guile} in an environment where Guile and Guile-SDL are
6561 available.
6562
6563 Note that this example implicitly asks for the default output of
6564 @code{guile} and @code{guile-sdl}, but it is possible to ask for a
6565 specific output---e.g., @code{glib:bin} asks for the @code{bin} output
6566 of @code{glib} (@pxref{Packages with Multiple Outputs}).
6567
6568 This option may be composed with the default behavior of @command{guix
6569 environment}. Packages appearing before @option{--ad-hoc} are
6570 interpreted as packages whose dependencies will be added to the
6571 environment, the default behavior. Packages appearing after are
6572 interpreted as packages that will be added to the environment directly.
6573
6574 @item --profile=@var{profile}
6575 @itemx -p @var{profile}
6576 Create an environment containing the packages installed in @var{profile}.
6577 Use @command{guix package} (@pxref{Invoking guix package}) to create
6578 and manage profiles.
6579
6580 @item --pure
6581 Unset existing environment variables when building the new environment, except
6582 those specified with @option{--preserve} (see below). This has the effect of
6583 creating an environment in which search paths only contain package inputs.
6584
6585 @item --preserve=@var{regexp}
6586 @itemx -E @var{regexp}
6587 When used alongside @option{--pure}, preserve the environment variables
6588 matching @var{regexp}---in other words, put them on a ``white list'' of
6589 environment variables that must be preserved. This option can be repeated
6590 several times.
6591
6592 @example
6593 guix environment --pure --preserve=^SLURM --ad-hoc openmpi @dots{} \
6594 -- mpirun @dots{}
6595 @end example
6596
6597 This example runs @command{mpirun} in a context where the only environment
6598 variables defined are @env{PATH}, environment variables whose name starts
6599 with @samp{SLURM}, as well as the usual ``precious'' variables (@env{HOME},
6600 @env{USER}, etc.).
6601
6602 @item --search-paths
6603 Display the environment variable definitions that make up the
6604 environment.
6605
6606 @item --system=@var{system}
6607 @itemx -s @var{system}
6608 Attempt to build for @var{system}---e.g., @code{i686-linux}.
6609
6610 @item --container
6611 @itemx -C
6612 @cindex container
6613 Run @var{command} within an isolated container. The current working
6614 directory outside the container is mapped inside the container.
6615 Additionally, unless overridden with @option{--user}, a dummy home
6616 directory is created that matches the current user's home directory, and
6617 @file{/etc/passwd} is configured accordingly.
6618
6619 The spawned process runs as the current user outside the container. Inside
6620 the container, it has the same UID and GID as the current user, unless
6621 @option{--user} is passed (see below).
6622
6623 @item --network
6624 @itemx -N
6625 For containers, share the network namespace with the host system.
6626 Containers created without this flag only have access to the loopback
6627 device.
6628
6629 @item --link-profile
6630 @itemx -P
6631 For containers, link the environment profile to @file{~/.guix-profile}
6632 within the container and set @code{GUIX_ENVIRONMENT} to that.
6633 This is equivalent to making @file{~/.guix-profile} a symlink to the
6634 actual profile within the container.
6635 Linking will fail and abort the environment if the directory already
6636 exists, which will certainly be the case if @command{guix environment}
6637 was invoked in the user's home directory.
6638
6639 Certain packages are configured to look in @file{~/.guix-profile} for
6640 configuration files and data;@footnote{For example, the
6641 @code{fontconfig} package inspects @file{~/.guix-profile/share/fonts}
6642 for additional fonts.} @option{--link-profile} allows these programs to
6643 behave as expected within the environment.
6644
6645 @item --user=@var{user}
6646 @itemx -u @var{user}
6647 For containers, use the username @var{user} in place of the current
6648 user. The generated @file{/etc/passwd} entry within the container will
6649 contain the name @var{user}, the home directory will be
6650 @file{/home/@var{user}}, and no user GECOS data will be copied. Furthermore,
6651 the UID and GID inside the container are 1000. @var{user}
6652 need not exist on the system.
6653
6654 Additionally, any shared or exposed path (see @option{--share} and
6655 @option{--expose} respectively) whose target is within the current user's
6656 home directory will be remapped relative to @file{/home/USER}; this
6657 includes the automatic mapping of the current working directory.
6658
6659 @example
6660 # will expose paths as /home/foo/wd, /home/foo/test, and /home/foo/target
6661 cd $HOME/wd
6662 guix environment --container --user=foo \
6663 --expose=$HOME/test \
6664 --expose=/tmp/target=$HOME/target
6665 @end example
6666
6667 While this will limit the leaking of user identity through home paths
6668 and each of the user fields, this is only one useful component of a
6669 broader privacy/anonymity solution---not one in and of itself.
6670
6671 @item --no-cwd
6672 For containers, the default behavior is to share the current working
6673 directory with the isolated container and immediately change to that
6674 directory within the container. If this is undesirable,
6675 @option{--no-cwd} will cause the current working directory to @emph{not}
6676 be automatically shared and will change to the user's home directory
6677 within the container instead. See also @option{--user}.
6678
6679 @item --expose=@var{source}[=@var{target}]
6680 @itemx --share=@var{source}[=@var{target}]
6681 For containers, @option{--expose} (resp. @option{--share}) exposes the
6682 file system @var{source} from the host system as the read-only
6683 (resp. writable) file system @var{target} within the container. If
6684 @var{target} is not specified, @var{source} is used as the target mount
6685 point in the container.
6686
6687 The example below spawns a Guile REPL in a container in which the user's
6688 home directory is accessible read-only via the @file{/exchange}
6689 directory:
6690
6691 @example
6692 guix environment --container --expose=$HOME=/exchange --ad-hoc guile -- guile
6693 @end example
6694
6695 @item --emulate-fhs
6696 @item -F
6697 For containers, emulate a Filesystem Hierarchy Standard (FHS)
6698 configuration within the container, see
6699 @uref{https://refspecs.linuxfoundation.org/fhs.shtml, the official
6700 specification}. As Guix deviates from the FHS specification, this
6701 option sets up the container to more closely mimic that of other
6702 GNU/Linux distributions. This is useful for reproducing other
6703 development environments, testing, and using programs which expect the
6704 FHS specification to be followed. With this option, the container will
6705 include a version of @code{glibc} which will read
6706 @code{/etc/ld.so.cache} within the container for the shared library
6707 cache (contrary to @code{glibc} in regular Guix usage) and set up the
6708 expected FHS directories: @code{/bin}, @code{/etc}, @code{/lib}, and
6709 @code{/usr} from the container's profile.
6710
6711 @end table
6712
6713 @command{guix environment}
6714 also supports all of the common build options that @command{guix
6715 build} supports (@pxref{Common Build Options}) as well as package
6716 transformation options (@pxref{Package Transformation Options}).
6717
6718 @node Invoking guix pack
6719 @section Invoking @command{guix pack}
6720
6721 @cindex @command{guix pack}
6722
6723 Occasionally you want to pass software to people who are not (yet!)
6724 lucky enough to be using Guix. You'd tell them to run @command{guix
6725 package -i @var{something}}, but that's not possible in this case. This
6726 is where @command{guix pack} comes in.
6727
6728 @quotation Note
6729 If you are looking for ways to exchange binaries among machines that
6730 already run Guix, @pxref{Invoking guix copy}, @ref{Invoking guix
6731 publish}, and @ref{Invoking guix archive}.
6732 @end quotation
6733
6734 @cindex pack
6735 @cindex bundle
6736 @cindex application bundle
6737 @cindex software bundle
6738 The @command{guix pack} command creates a shrink-wrapped @dfn{pack} or
6739 @dfn{software bundle}: it creates a tarball or some other archive
6740 containing the binaries of the software you're interested in, and all
6741 its dependencies. The resulting archive can be used on any machine that
6742 does not have Guix, and people can run the exact same binaries as those
6743 you have with Guix. The pack itself is created in a bit-reproducible
6744 fashion, so anyone can verify that it really contains the build results
6745 that you pretend to be shipping.
6746
6747 For example, to create a bundle containing Guile, Emacs, Geiser, and all
6748 their dependencies, you can run:
6749
6750 @example
6751 $ guix pack guile emacs emacs-geiser
6752 @dots{}
6753 /gnu/store/@dots{}-pack.tar.gz
6754 @end example
6755
6756 The result here is a tarball containing a @file{/gnu/store} directory
6757 with all the relevant packages. The resulting tarball contains a
6758 @dfn{profile} with the three packages of interest; the profile is the
6759 same as would be created by @command{guix package -i}. It is this
6760 mechanism that is used to create Guix's own standalone binary tarball
6761 (@pxref{Binary Installation}).
6762
6763 Users of this pack would have to run
6764 @file{/gnu/store/@dots{}-profile/bin/guile} to run Guile, which you may
6765 find inconvenient. To work around it, you can create, say, a
6766 @file{/opt/gnu/bin} symlink to the profile:
6767
6768 @example
6769 guix pack -S /opt/gnu/bin=bin guile emacs emacs-geiser
6770 @end example
6771
6772 @noindent
6773 That way, users can happily type @file{/opt/gnu/bin/guile} and enjoy.
6774
6775 @cindex relocatable binaries, with @command{guix pack}
6776 What if the recipient of your pack does not have root privileges on
6777 their machine, and thus cannot unpack it in the root file system? In
6778 that case, you will want to use the @option{--relocatable} option (see
6779 below). This option produces @dfn{relocatable binaries}, meaning they
6780 they can be placed anywhere in the file system hierarchy: in the example
6781 above, users can unpack your tarball in their home directory and
6782 directly run @file{./opt/gnu/bin/guile}.
6783
6784 @cindex Docker, build an image with guix pack
6785 Alternatively, you can produce a pack in the Docker image format using
6786 the following command:
6787
6788 @example
6789 guix pack -f docker -S /bin=bin guile guile-readline
6790 @end example
6791
6792 @noindent
6793 The result is a tarball that can be passed to the @command{docker load}
6794 command, followed by @code{docker run}:
6795
6796 @example
6797 docker load < @var{file}
6798 docker run -ti guile-guile-readline /bin/guile
6799 @end example
6800
6801 @noindent
6802 where @var{file} is the image returned by @var{guix pack}, and
6803 @code{guile-guile-readline} is its ``image tag''. See the
6804 @uref{https://docs.docker.com/engine/reference/commandline/load/, Docker
6805 documentation} for more information.
6806
6807 @cindex Singularity, build an image with guix pack
6808 @cindex SquashFS, build an image with guix pack
6809 Yet another option is to produce a SquashFS image with the following
6810 command:
6811
6812 @example
6813 guix pack -f squashfs bash guile emacs emacs-geiser
6814 @end example
6815
6816 @noindent
6817 The result is a SquashFS file system image that can either be mounted or
6818 directly be used as a file system container image with the
6819 @uref{https://www.sylabs.io/docs/, Singularity container execution
6820 environment}, using commands like @command{singularity shell} or
6821 @command{singularity exec}.
6822
6823 Several command-line options allow you to customize your pack:
6824
6825 @table @code
6826 @item --format=@var{format}
6827 @itemx -f @var{format}
6828 Produce a pack in the given @var{format}.
6829
6830 The available formats are:
6831
6832 @table @code
6833 @item tarball
6834 This is the default format. It produces a tarball containing all the
6835 specified binaries and symlinks.
6836
6837 @item docker
6838 This produces a tarball that follows the
6839 @uref{https://github.com/docker/docker/blob/master/image/spec/v1.2.md,
6840 Docker Image Specification}. The ``repository name'' as it appears in
6841 the output of the @command{docker images} command is computed from
6842 package names passed on the command line or in the manifest file.
6843
6844 @item squashfs
6845 This produces a SquashFS image containing all the specified binaries and
6846 symlinks, as well as empty mount points for virtual file systems like
6847 procfs.
6848
6849 @quotation Note
6850 Singularity @emph{requires} you to provide @file{/bin/sh} in the image.
6851 For that reason, @command{guix pack -f squashfs} always implies @code{-S
6852 /bin=bin}. Thus, your @command{guix pack} invocation must always start
6853 with something like:
6854
6855 @example
6856 guix pack -f squashfs bash @dots{}
6857 @end example
6858
6859 If you forget the @code{bash} (or similar) package, @command{singularity
6860 run} and @command{singularity exec} will fail with an unhelpful ``no
6861 such file or directory'' message.
6862 @end quotation
6863
6864 @item deb
6865 This produces a Debian archive (a package with the @samp{.deb} file
6866 extension) containing all the specified binaries and symbolic links,
6867 that can be installed on top of any dpkg-based GNU(/Linux) distribution.
6868 Advanced options can be revealed via the @option{--help-deb-format}
6869 option. They allow embedding control files for more fine-grained
6870 control, such as activating specific triggers or providing a maintainer
6871 configure script to run arbitrary setup code upon installation.
6872
6873 @example
6874 guix pack -f deb -C xz -S /usr/bin/hello=bin/hello hello
6875 @end example
6876
6877 @quotation Note
6878 Because archives produced with @command{guix pack} contain a collection
6879 of store items and because each @command{dpkg} package must not have
6880 conflicting files, in practice that means you likely won't be able to
6881 install more than one such archive on a given system.
6882 @end quotation
6883
6884 @quotation Warning
6885 @command{dpkg} will assume ownership of any files contained in the pack
6886 that it does @emph{not} know about. It is unwise to install
6887 Guix-produced @samp{.deb} files on a system where @file{/gnu/store} is
6888 shared by other software, such as a Guix installation or other, non-deb
6889 packs.
6890 @end quotation
6891
6892 @end table
6893
6894 @cindex relocatable binaries
6895 @item --relocatable
6896 @itemx -R
6897 Produce @dfn{relocatable binaries}---i.e., binaries that can be placed
6898 anywhere in the file system hierarchy and run from there.
6899
6900 When this option is passed once, the resulting binaries require support for
6901 @dfn{user namespaces} in the kernel Linux; when passed
6902 @emph{twice}@footnote{Here's a trick to memorize it: @code{-RR}, which adds
6903 PRoot support, can be thought of as the abbreviation of ``Really
6904 Relocatable''. Neat, isn't it?}, relocatable binaries fall to back to
6905 other techniques if user namespaces are unavailable, and essentially
6906 work anywhere---see below for the implications.
6907
6908 For example, if you create a pack containing Bash with:
6909
6910 @example
6911 guix pack -RR -S /mybin=bin bash
6912 @end example
6913
6914 @noindent
6915 ...@: you can copy that pack to a machine that lacks Guix, and from your
6916 home directory as a normal user, run:
6917
6918 @example
6919 tar xf pack.tar.gz
6920 ./mybin/sh
6921 @end example
6922
6923 @noindent
6924 In that shell, if you type @code{ls /gnu/store}, you'll notice that
6925 @file{/gnu/store} shows up and contains all the dependencies of
6926 @code{bash}, even though the machine actually lacks @file{/gnu/store}
6927 altogether! That is probably the simplest way to deploy Guix-built
6928 software on a non-Guix machine.
6929
6930 @quotation Note
6931 By default, relocatable binaries rely on the @dfn{user namespace} feature of
6932 the kernel Linux, which allows unprivileged users to mount or change root.
6933 Old versions of Linux did not support it, and some GNU/Linux distributions
6934 turn it off.
6935
6936 To produce relocatable binaries that work even in the absence of user
6937 namespaces, pass @option{--relocatable} or @option{-R} @emph{twice}. In that
6938 case, binaries will try user namespace support and fall back to another
6939 @dfn{execution engine} if user namespaces are not supported. The
6940 following execution engines are supported:
6941
6942 @table @code
6943 @item default
6944 Try user namespaces and fall back to PRoot if user namespaces are not
6945 supported (see below).
6946
6947 @item performance
6948 Try user namespaces and fall back to Fakechroot if user namespaces are
6949 not supported (see below).
6950
6951 @item userns
6952 Run the program through user namespaces and abort if they are not
6953 supported.
6954
6955 @item proot
6956 Run through PRoot. The @uref{https://proot-me.github.io/, PRoot} program
6957 provides the necessary
6958 support for file system virtualization. It achieves that by using the
6959 @code{ptrace} system call on the running program. This approach has the
6960 advantage to work without requiring special kernel support, but it incurs
6961 run-time overhead every time a system call is made.
6962
6963 @item fakechroot
6964 Run through Fakechroot. @uref{https://github.com/dex4er/fakechroot/,
6965 Fakechroot} virtualizes file system accesses by intercepting calls to C
6966 library functions such as @code{open}, @code{stat}, @code{exec}, and so
6967 on. Unlike PRoot, it incurs very little overhead. However, it does not
6968 always work: for example, some file system accesses made from within the
6969 C library are not intercepted, and file system accesses made @i{via}
6970 direct syscalls are not intercepted either, leading to erratic behavior.
6971 @end table
6972
6973 @vindex GUIX_EXECUTION_ENGINE
6974 When running a wrapped program, you can explicitly request one of the
6975 execution engines listed above by setting the
6976 @env{GUIX_EXECUTION_ENGINE} environment variable accordingly.
6977 @end quotation
6978
6979 @cindex entry point, for Docker images
6980 @item --entry-point=@var{command}
6981 Use @var{command} as the @dfn{entry point} of the resulting pack, if the pack
6982 format supports it---currently @code{docker} and @code{squashfs} (Singularity)
6983 support it. @var{command} must be relative to the profile contained in the
6984 pack.
6985
6986 The entry point specifies the command that tools like @code{docker run} or
6987 @code{singularity run} automatically start by default. For example, you can
6988 do:
6989
6990 @example
6991 guix pack -f docker --entry-point=bin/guile guile
6992 @end example
6993
6994 The resulting pack can easily be loaded and @code{docker run} with no extra
6995 arguments will spawn @code{bin/guile}:
6996
6997 @example
6998 docker load -i pack.tar.gz
6999 docker run @var{image-id}
7000 @end example
7001
7002 @item --expression=@var{expr}
7003 @itemx -e @var{expr}
7004 Consider the package @var{expr} evaluates to.
7005
7006 This has the same purpose as the same-named option in @command{guix
7007 build} (@pxref{Additional Build Options, @option{--expression} in
7008 @command{guix build}}).
7009
7010 @anchor{pack-manifest}
7011 @item --manifest=@var{file}
7012 @itemx -m @var{file}
7013 Use the packages contained in the manifest object returned by the Scheme
7014 code in @var{file}. This option can be repeated several times, in which
7015 case the manifests are concatenated.
7016
7017 This has a similar purpose as the same-named option in @command{guix
7018 package} (@pxref{profile-manifest, @option{--manifest}}) and uses the
7019 same manifest files. It allows you to define a collection of packages
7020 once and use it both for creating profiles and for creating archives
7021 for use on machines that do not have Guix installed. Note that you can
7022 specify @emph{either} a manifest file @emph{or} a list of packages,
7023 but not both.
7024
7025 @xref{Writing Manifests}, for information on how to write a manifest.
7026 @xref{shell-export-manifest, @command{guix shell --export-manifest}},
7027 for information on how to ``convert'' command-line options into a
7028 manifest.
7029
7030 @item --system=@var{system}
7031 @itemx -s @var{system}
7032 Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of
7033 the system type of the build host.
7034
7035 @item --target=@var{triplet}
7036 @cindex cross-compilation
7037 Cross-build for @var{triplet}, which must be a valid GNU triplet, such
7038 as @code{"aarch64-linux-gnu"} (@pxref{Specifying target triplets, GNU
7039 configuration triplets,, autoconf, Autoconf}).
7040
7041 @item --compression=@var{tool}
7042 @itemx -C @var{tool}
7043 Compress the resulting tarball using @var{tool}---one of @code{gzip},
7044 @code{zstd}, @code{bzip2}, @code{xz}, @code{lzip}, or @code{none} for no
7045 compression.
7046
7047 @anchor{pack-symlink-option}
7048 @item --symlink=@var{spec}
7049 @itemx -S @var{spec}
7050 Add the symlinks specified by @var{spec} to the pack. This option can
7051 appear several times.
7052
7053 @var{spec} has the form @code{@var{source}=@var{target}}, where
7054 @var{source} is the symlink that will be created and @var{target} is the
7055 symlink target.
7056
7057 For instance, @code{-S /opt/gnu/bin=bin} creates a @file{/opt/gnu/bin}
7058 symlink pointing to the @file{bin} sub-directory of the profile.
7059
7060 @item --save-provenance
7061 Save provenance information for the packages passed on the command line.
7062 Provenance information includes the URL and commit of the channels in use
7063 (@pxref{Channels}).
7064
7065 Provenance information is saved in the
7066 @file{/gnu/store/@dots{}-profile/manifest} file in the pack, along with the
7067 usual package metadata---the name and version of each package, their
7068 propagated inputs, and so on. It is useful information to the recipient of
7069 the pack, who then knows how the pack was (supposedly) obtained.
7070
7071 This option is not enabled by default because, like timestamps, provenance
7072 information contributes nothing to the build process. In other words, there
7073 is an infinity of channel URLs and commit IDs that can lead to the same pack.
7074 Recording such ``silent'' metadata in the output thus potentially breaks the
7075 source-to-binary bitwise reproducibility property.
7076
7077 @item --root=@var{file}
7078 @itemx -r @var{file}
7079 @cindex garbage collector root, for packs
7080 Make @var{file} a symlink to the resulting pack, and register it as a garbage
7081 collector root.
7082
7083 @item --localstatedir
7084 @itemx --profile-name=@var{name}
7085 Include the ``local state directory'', @file{/var/guix}, in the resulting
7086 pack, and notably the @file{/var/guix/profiles/per-user/root/@var{name}}
7087 profile---by default @var{name} is @code{guix-profile}, which corresponds to
7088 @file{~root/.guix-profile}.
7089
7090 @file{/var/guix} contains the store database (@pxref{The Store}) as well
7091 as garbage-collector roots (@pxref{Invoking guix gc}). Providing it in
7092 the pack means that the store is ``complete'' and manageable by Guix;
7093 not providing it pack means that the store is ``dead'': items cannot be
7094 added to it or removed from it after extraction of the pack.
7095
7096 One use case for this is the Guix self-contained binary tarball
7097 (@pxref{Binary Installation}).
7098
7099 @item --derivation
7100 @itemx -d
7101 Print the name of the derivation that builds the pack.
7102
7103 @item --bootstrap
7104 Use the bootstrap binaries to build the pack. This option is only
7105 useful to Guix developers.
7106 @end table
7107
7108 In addition, @command{guix pack} supports all the common build options
7109 (@pxref{Common Build Options}) and all the package transformation
7110 options (@pxref{Package Transformation Options}).
7111
7112
7113 @node The GCC toolchain
7114 @section The GCC toolchain
7115
7116 @cindex GCC
7117 @cindex ld-wrapper
7118 @cindex linker wrapper
7119 @cindex toolchain, for C development
7120 @cindex toolchain, for Fortran development
7121
7122 If you need a complete toolchain for compiling and linking C or C++
7123 source code, use the @code{gcc-toolchain} package. This package
7124 provides a complete GCC toolchain for C/C++ development, including GCC
7125 itself, the GNU C Library (headers and binaries, plus debugging symbols
7126 in the @code{debug} output), Binutils, and a linker wrapper.
7127
7128 The wrapper's purpose is to inspect the @code{-L} and @code{-l} switches
7129 passed to the linker, add corresponding @code{-rpath} arguments, and
7130 invoke the actual linker with this new set of arguments. You can instruct the
7131 wrapper to refuse to link against libraries not in the store by setting the
7132 @env{GUIX_LD_WRAPPER_ALLOW_IMPURITIES} environment variable to @code{no}.
7133
7134 The package @code{gfortran-toolchain} provides a complete GCC toolchain
7135 for Fortran development. For other languages, please use
7136 @samp{guix search gcc toolchain} (@pxref{guix-search,, Invoking guix package}).
7137
7138
7139 @node Invoking guix git authenticate
7140 @section Invoking @command{guix git authenticate}
7141
7142 @cindex @command{guix git authenticate}
7143
7144 The @command{guix git authenticate} command authenticates a Git checkout
7145 following the same rule as for channels (@pxref{channel-authentication,
7146 channel authentication}). That is, starting from a given commit, it
7147 ensures that all subsequent commits are signed by an OpenPGP key whose
7148 fingerprint appears in the @file{.guix-authorizations} file of its
7149 parent commit(s).
7150
7151 You will find this command useful if you maintain a channel. But in
7152 fact, this authentication mechanism is useful in a broader context, so
7153 you might want to use it for Git repositories that have nothing to do
7154 with Guix.
7155
7156 The general syntax is:
7157
7158 @example
7159 guix git authenticate @var{commit} @var{signer} [@var{options}@dots{}]
7160 @end example
7161
7162 By default, this command authenticates the Git checkout in the current
7163 directory; it outputs nothing and exits with exit code zero on success
7164 and non-zero on failure. @var{commit} above denotes the first commit
7165 where authentication takes place, and @var{signer} is the OpenPGP
7166 fingerprint of public key used to sign @var{commit}. Together, they
7167 form a ``channel introduction'' (@pxref{channel-authentication, channel
7168 introduction}). The options below allow you to fine-tune the process.
7169
7170 @table @code
7171 @item --repository=@var{directory}
7172 @itemx -r @var{directory}
7173 Open the Git repository in @var{directory} instead of the current
7174 directory.
7175
7176 @item --keyring=@var{reference}
7177 @itemx -k @var{reference}
7178 Load OpenPGP keyring from @var{reference}, the reference of a branch
7179 such as @code{origin/keyring} or @code{my-keyring}. The branch must
7180 contain OpenPGP public keys in @file{.key} files, either in binary form
7181 or ``ASCII-armored''. By default the keyring is loaded from the branch
7182 named @code{keyring}.
7183
7184 @item --stats
7185 Display commit signing statistics upon completion.
7186
7187 @item --cache-key=@var{key}
7188 Previously-authenticated commits are cached in a file under
7189 @file{~/.cache/guix/authentication}. This option forces the cache to be
7190 stored in file @var{key} in that directory.
7191
7192 @item --historical-authorizations=@var{file}
7193 By default, any commit whose parent commit(s) lack the
7194 @file{.guix-authorizations} file is considered inauthentic. In
7195 contrast, this option considers the authorizations in @var{file} for any
7196 commit that lacks @file{.guix-authorizations}. The format of @var{file}
7197 is the same as that of @file{.guix-authorizations}
7198 (@pxref{channel-authorizations, @file{.guix-authorizations} format}).
7199 @end table
7200
7201
7202 @c *********************************************************************
7203 @node Programming Interface
7204 @chapter Programming Interface
7205
7206 GNU Guix provides several Scheme programming interfaces (APIs) to
7207 define, build, and query packages. The first interface allows users to
7208 write high-level package definitions. These definitions refer to
7209 familiar packaging concepts, such as the name and version of a package,
7210 its build system, and its dependencies. These definitions can then be
7211 turned into concrete build actions.
7212
7213 Build actions are performed by the Guix daemon, on behalf of users. In a
7214 standard setup, the daemon has write access to the store---the
7215 @file{/gnu/store} directory---whereas users do not. The recommended
7216 setup also has the daemon perform builds in chroots, under specific
7217 build users, to minimize interference with the rest of the system.
7218
7219 @cindex derivation
7220 Lower-level APIs are available to interact with the daemon and the
7221 store. To instruct the daemon to perform a build action, users actually
7222 provide it with a @dfn{derivation}. A derivation is a low-level
7223 representation of the build actions to be taken, and the environment in
7224 which they should occur---derivations are to package definitions what
7225 assembly is to C programs. The term ``derivation'' comes from the fact
7226 that build results @emph{derive} from them.
7227
7228 This chapter describes all these APIs in turn, starting from high-level
7229 package definitions.
7230
7231 @menu
7232 * Package Modules:: Packages from the programmer's viewpoint.
7233 * Defining Packages:: Defining new packages.
7234 * Defining Package Variants:: Customizing packages.
7235 * Writing Manifests:: The bill of materials of your environment.
7236 * Build Systems:: Specifying how packages are built.
7237 * Build Phases:: Phases of the build process of a package.
7238 * Build Utilities:: Helpers for your package definitions and more.
7239 * Search Paths:: Declaring search path environment variables.
7240 * The Store:: Manipulating the package store.
7241 * Derivations:: Low-level interface to package derivations.
7242 * The Store Monad:: Purely functional interface to the store.
7243 * G-Expressions:: Manipulating build expressions.
7244 * Invoking guix repl:: Programming Guix in Guile
7245 * Using Guix Interactively:: Fine-grain interaction at the REPL.
7246 @end menu
7247
7248 @node Package Modules
7249 @section Package Modules
7250
7251 From a programming viewpoint, the package definitions of the
7252 GNU distribution are provided by Guile modules in the @code{(gnu packages
7253 @dots{})} name space@footnote{Note that packages under the @code{(gnu
7254 packages @dots{})} module name space are not necessarily ``GNU
7255 packages''. This module naming scheme follows the usual Guile module
7256 naming convention: @code{gnu} means that these modules are distributed
7257 as part of the GNU system, and @code{packages} identifies modules that
7258 define packages.} (@pxref{Modules, Guile modules,, guile, GNU Guile
7259 Reference Manual}). For instance, the @code{(gnu packages emacs)}
7260 module exports a variable named @code{emacs}, which is bound to a
7261 @code{<package>} object (@pxref{Defining Packages}).
7262
7263 The @code{(gnu packages @dots{})} module name space is
7264 automatically scanned for packages by the command-line tools. For
7265 instance, when running @code{guix install emacs}, all the @code{(gnu
7266 packages @dots{})} modules are scanned until one that exports a package
7267 object whose name is @code{emacs} is found. This package search
7268 facility is implemented in the @code{(gnu packages)} module.
7269
7270 @cindex customization, of packages
7271 @cindex package module search path
7272 Users can store package definitions in modules with different
7273 names---e.g., @code{(my-packages emacs)}@footnote{Note that the file
7274 name and module name must match. For instance, the @code{(my-packages
7275 emacs)} module must be stored in a @file{my-packages/emacs.scm} file
7276 relative to the load path specified with @option{--load-path} or
7277 @env{GUIX_PACKAGE_PATH}. @xref{Modules and the File System,,,
7278 guile, GNU Guile Reference Manual}, for details.}. There are two ways to make
7279 these package definitions visible to the user interfaces:
7280
7281 @enumerate
7282 @item
7283 By adding the directory containing your package modules to the search path
7284 with the @code{-L} flag of @command{guix package} and other commands
7285 (@pxref{Common Build Options}), or by setting the @env{GUIX_PACKAGE_PATH}
7286 environment variable described below.
7287
7288 @item
7289 By defining a @dfn{channel} and configuring @command{guix pull} so that it
7290 pulls from it. A channel is essentially a Git repository containing package
7291 modules. @xref{Channels}, for more information on how to define and use
7292 channels.
7293 @end enumerate
7294
7295 @env{GUIX_PACKAGE_PATH} works similarly to other search path variables:
7296
7297 @defvr {Environment Variable} GUIX_PACKAGE_PATH
7298 This is a colon-separated list of directories to search for additional
7299 package modules. Directories listed in this variable take precedence
7300 over the own modules of the distribution.
7301 @end defvr
7302
7303 The distribution is fully @dfn{bootstrapped} and @dfn{self-contained}:
7304 each package is built based solely on other packages in the
7305 distribution. The root of this dependency graph is a small set of
7306 @dfn{bootstrap binaries}, provided by the @code{(gnu packages
7307 bootstrap)} module. For more information on bootstrapping,
7308 @pxref{Bootstrapping}.
7309
7310 @node Defining Packages
7311 @section Defining Packages
7312
7313 The high-level interface to package definitions is implemented in the
7314 @code{(guix packages)} and @code{(guix build-system)} modules. As an
7315 example, the package definition, or @dfn{recipe}, for the GNU Hello
7316 package looks like this:
7317
7318 @lisp
7319 (define-module (gnu packages hello)
7320 #:use-module (guix packages)
7321 #:use-module (guix download)
7322 #:use-module (guix build-system gnu)
7323 #:use-module (guix licenses)
7324 #:use-module (gnu packages gawk))
7325
7326 (define-public hello
7327 (package
7328 (name "hello")
7329 (version "2.10")
7330 (source (origin
7331 (method url-fetch)
7332 (uri (string-append "mirror://gnu/hello/hello-" version
7333 ".tar.gz"))
7334 (sha256
7335 (base32
7336 "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
7337 (build-system gnu-build-system)
7338 (arguments '(#:configure-flags '("--enable-silent-rules")))
7339 (inputs (list gawk))
7340 (synopsis "Hello, GNU world: An example GNU package")
7341 (description "Guess what GNU Hello prints!")
7342 (home-page "https://www.gnu.org/software/hello/")
7343 (license gpl3+)))
7344 @end lisp
7345
7346 @noindent
7347 Without being a Scheme expert, the reader may have guessed the meaning
7348 of the various fields here. This expression binds the variable
7349 @code{hello} to a @code{<package>} object, which is essentially a record
7350 (@pxref{SRFI-9, Scheme records,, guile, GNU Guile Reference Manual}).
7351 This package object can be inspected using procedures found in the
7352 @code{(guix packages)} module; for instance, @code{(package-name hello)}
7353 returns---surprise!---@code{"hello"}.
7354
7355 With luck, you may be able to import part or all of the definition of
7356 the package you are interested in from another repository, using the
7357 @code{guix import} command (@pxref{Invoking guix import}).
7358
7359 In the example above, @code{hello} is defined in a module of its own,
7360 @code{(gnu packages hello)}. Technically, this is not strictly
7361 necessary, but it is convenient to do so: all the packages defined in
7362 modules under @code{(gnu packages @dots{})} are automatically known to
7363 the command-line tools (@pxref{Package Modules}).
7364
7365 There are a few points worth noting in the above package definition:
7366
7367 @itemize
7368 @item
7369 The @code{source} field of the package is an @code{<origin>} object
7370 (@pxref{origin Reference}, for the complete reference).
7371 Here, the @code{url-fetch} method from @code{(guix download)} is used,
7372 meaning that the source is a file to be downloaded over FTP or HTTP.
7373
7374 The @code{mirror://gnu} prefix instructs @code{url-fetch} to use one of
7375 the GNU mirrors defined in @code{(guix download)}.
7376
7377 The @code{sha256} field specifies the expected SHA256 hash of the file
7378 being downloaded. It is mandatory, and allows Guix to check the
7379 integrity of the file. The @code{(base32 @dots{})} form introduces the
7380 base32 representation of the hash. You can obtain this information with
7381 @code{guix download} (@pxref{Invoking guix download}) and @code{guix
7382 hash} (@pxref{Invoking guix hash}).
7383
7384 @cindex patches
7385 When needed, the @code{origin} form can also have a @code{patches} field
7386 listing patches to be applied, and a @code{snippet} field giving a
7387 Scheme expression to modify the source code.
7388
7389 @item
7390 @cindex GNU Build System
7391 The @code{build-system} field specifies the procedure to build the
7392 package (@pxref{Build Systems}). Here, @code{gnu-build-system}
7393 represents the familiar GNU Build System, where packages may be
7394 configured, built, and installed with the usual @code{./configure &&
7395 make && make check && make install} command sequence.
7396
7397 When you start packaging non-trivial software, you may need tools to
7398 manipulate those build phases, manipulate files, and so on. @xref{Build
7399 Utilities}, for more on this.
7400
7401 @item
7402 The @code{arguments} field specifies options for the build system
7403 (@pxref{Build Systems}). Here it is interpreted by
7404 @code{gnu-build-system} as a request run @file{configure} with the
7405 @option{--enable-silent-rules} flag.
7406
7407 @cindex quote
7408 @cindex quoting
7409 @findex '
7410 @findex quote
7411 @cindex backquote (quasiquote)
7412 @findex `
7413 @findex quasiquote
7414 @cindex comma (unquote)
7415 @findex ,
7416 @findex unquote
7417 What about these quote (@code{'}) characters? They are Scheme syntax to
7418 introduce a literal list; @code{'} is synonymous with @code{quote}.
7419 Sometimes you'll also see @code{`} (a backquote, synonymous with
7420 @code{quasiquote}) and @code{,} (a comma, synonymous with @code{unquote}).
7421 @xref{Expression Syntax, quoting,, guile, GNU Guile Reference Manual},
7422 for details. Here the value of the @code{arguments} field is a list of
7423 arguments passed to the build system down the road, as with @code{apply}
7424 (@pxref{Fly Evaluation, @code{apply},, guile, GNU Guile Reference
7425 Manual}).
7426
7427 The hash-colon (@code{#:}) sequence defines a Scheme @dfn{keyword}
7428 (@pxref{Keywords,,, guile, GNU Guile Reference Manual}), and
7429 @code{#:configure-flags} is a keyword used to pass a keyword argument
7430 to the build system (@pxref{Coding With Keywords,,, guile, GNU Guile
7431 Reference Manual}).
7432
7433 @item
7434 The @code{inputs} field specifies inputs to the build process---i.e.,
7435 build-time or run-time dependencies of the package. Here, we add
7436 an input, a reference to the @code{gawk}
7437 variable; @code{gawk} is itself bound to a @code{<package>} object.
7438
7439 Note that GCC, Coreutils, Bash, and other essential tools do not need to
7440 be specified as inputs here. Instead, @code{gnu-build-system} takes care
7441 of ensuring that they are present (@pxref{Build Systems}).
7442
7443 However, any other dependencies need to be specified in the
7444 @code{inputs} field. Any dependency not specified here will simply be
7445 unavailable to the build process, possibly leading to a build failure.
7446 @end itemize
7447
7448 @xref{package Reference}, for a full description of possible fields.
7449
7450 @quotation Going further
7451 @cindex Scheme programming language, getting started
7452 Intimidated by the Scheme language or curious about it? The Cookbook
7453 has a short section to get started that recaps some of the things shown
7454 above and explains the fundamentals. @xref{A Scheme Crash Course,,,
7455 guix-cookbook, GNU Guix Cookbook}, for more information.
7456 @end quotation
7457
7458 Once a package definition is in place, the
7459 package may actually be built using the @code{guix build} command-line
7460 tool (@pxref{Invoking guix build}), troubleshooting any build failures
7461 you encounter (@pxref{Debugging Build Failures}). You can easily jump back to the
7462 package definition using the @command{guix edit} command
7463 (@pxref{Invoking guix edit}).
7464 @xref{Packaging Guidelines}, for
7465 more information on how to test package definitions, and
7466 @ref{Invoking guix lint}, for information on how to check a definition
7467 for style conformance.
7468 @vindex GUIX_PACKAGE_PATH
7469 Lastly, @pxref{Channels}, for information
7470 on how to extend the distribution by adding your own package definitions
7471 in a ``channel''.
7472
7473 Finally, updating the package definition to a new upstream version
7474 can be partly automated by the @command{guix refresh} command
7475 (@pxref{Invoking guix refresh}).
7476
7477 Behind the scenes, a derivation corresponding to the @code{<package>}
7478 object is first computed by the @code{package-derivation} procedure.
7479 That derivation is stored in a @file{.drv} file under @file{/gnu/store}.
7480 The build actions it prescribes may then be realized by using the
7481 @code{build-derivations} procedure (@pxref{The Store}).
7482
7483 @deffn {Scheme Procedure} package-derivation @var{store} @var{package} [@var{system}]
7484 Return the @code{<derivation>} object of @var{package} for @var{system}
7485 (@pxref{Derivations}).
7486
7487 @var{package} must be a valid @code{<package>} object, and @var{system}
7488 must be a string denoting the target system type---e.g.,
7489 @code{"x86_64-linux"} for an x86_64 Linux-based GNU system. @var{store}
7490 must be a connection to the daemon, which operates on the store
7491 (@pxref{The Store}).
7492 @end deffn
7493
7494 @noindent
7495 @cindex cross-compilation
7496 Similarly, it is possible to compute a derivation that cross-builds a
7497 package for some other system:
7498
7499 @deffn {Scheme Procedure} package-cross-derivation @var{store} @
7500 @var{package} @var{target} [@var{system}]
7501 Return the @code{<derivation>} object of @var{package} cross-built from
7502 @var{system} to @var{target}.
7503
7504 @var{target} must be a valid GNU triplet denoting the target hardware
7505 and operating system, such as @code{"aarch64-linux-gnu"}
7506 (@pxref{Specifying Target Triplets,,, autoconf, Autoconf}).
7507 @end deffn
7508
7509 Once you have package definitions, you can easily define @emph{variants}
7510 of those packages. @xref{Defining Package Variants}, for more on that.
7511
7512 @menu
7513 * package Reference:: The package data type.
7514 * origin Reference:: The origin data type.
7515 @end menu
7516
7517
7518 @node package Reference
7519 @subsection @code{package} Reference
7520
7521 This section summarizes all the options available in @code{package}
7522 declarations (@pxref{Defining Packages}).
7523
7524 @deftp {Data Type} package
7525 This is the data type representing a package recipe.
7526
7527 @table @asis
7528 @item @code{name}
7529 The name of the package, as a string.
7530
7531 @item @code{version}
7532 The version of the package, as a string. @xref{Version Numbers}, for
7533 guidelines.
7534
7535 @item @code{source}
7536 An object telling how the source code for the package should be
7537 acquired. Most of the time, this is an @code{origin} object, which
7538 denotes a file fetched from the Internet (@pxref{origin Reference}). It
7539 can also be any other ``file-like'' object such as a @code{local-file},
7540 which denotes a file from the local file system (@pxref{G-Expressions,
7541 @code{local-file}}).
7542
7543 @item @code{build-system}
7544 The build system that should be used to build the package (@pxref{Build
7545 Systems}).
7546
7547 @item @code{arguments} (default: @code{'()})
7548 The arguments that should be passed to the build system (@pxref{Build
7549 Systems}). This is a list, typically containing sequential
7550 keyword-value pairs, as in this example:
7551
7552 @lisp
7553 (package
7554 (name "example")
7555 ;; several fields omitted
7556 (arguments
7557 (list #:tests? #f ;skip tests
7558 #:make-flags #~'("VERBOSE=1") ;pass flags to 'make'
7559 #:configure-flags #~'("--enable-frobbing"))))
7560 @end lisp
7561
7562 The exact set of supported keywords depends on the build system
7563 (@pxref{Build Systems}), but you will find that almost all of them honor
7564 @code{#:configure-flags}, @code{#:make-flags}, @code{#:tests?}, and
7565 @code{#:phases}. The @code{#:phases} keyword in particular lets you
7566 modify the set of build phases for your package (@pxref{Build Phases}).
7567
7568 @item @code{inputs} (default: @code{'()})
7569 @itemx @code{native-inputs} (default: @code{'()})
7570 @itemx @code{propagated-inputs} (default: @code{'()})
7571 @cindex inputs, of packages
7572 These fields list dependencies of the package. Each element of these
7573 lists is either a package, origin, or other ``file-like object''
7574 (@pxref{G-Expressions}); to specify the output of that file-like object
7575 that should be used, pass a two-element list where the second element is
7576 the output (@pxref{Packages with Multiple Outputs}, for more on package
7577 outputs). For example, the list below specifies three inputs:
7578
7579 @lisp
7580 (list libffi libunistring
7581 `(,glib "bin")) ;the "bin" output of GLib
7582 @end lisp
7583
7584 In the example above, the @code{"out"} output of @code{libffi} and
7585 @code{libunistring} is used.
7586
7587 @quotation Compatibility Note
7588 Until version 1.3.0, input lists were a list of tuples,
7589 where each tuple has a label for the input (a string) as its
7590 first element, a package, origin, or derivation as its second element,
7591 and optionally the name of the output thereof that should be used, which
7592 defaults to @code{"out"}. For example, the list below is equivalent to
7593 the one above, but using the @dfn{old input style}:
7594
7595 @lisp
7596 ;; Old input style (deprecated).
7597 `(("libffi" ,libffi)
7598 ("libunistring" ,libunistring)
7599 ("glib:bin" ,glib "bin")) ;the "bin" output of GLib
7600 @end lisp
7601
7602 This style is now deprecated; it is still supported but support will be
7603 removed in a future version. It should not be used for new package
7604 definitions. @xref{Invoking guix style}, on how to migrate to the new
7605 style.
7606 @end quotation
7607
7608 @cindex cross compilation, package dependencies
7609 The distinction between @code{native-inputs} and @code{inputs} is
7610 necessary when considering cross-compilation. When cross-compiling,
7611 dependencies listed in @code{inputs} are built for the @emph{target}
7612 architecture; conversely, dependencies listed in @code{native-inputs}
7613 are built for the architecture of the @emph{build} machine.
7614
7615 @code{native-inputs} is typically used to list tools needed at
7616 build time, but not at run time, such as Autoconf, Automake, pkg-config,
7617 Gettext, or Bison. @command{guix lint} can report likely mistakes in
7618 this area (@pxref{Invoking guix lint}).
7619
7620 @anchor{package-propagated-inputs}
7621 Lastly, @code{propagated-inputs} is similar to @code{inputs}, but the
7622 specified packages will be automatically installed to profiles
7623 (@pxref{Features, the role of profiles in Guix}) alongside the package
7624 they belong to (@pxref{package-cmd-propagated-inputs, @command{guix
7625 package}}, for information on how @command{guix package} deals with
7626 propagated inputs).
7627
7628 For example this is necessary when packaging a C/C++ library that needs
7629 headers of another library to compile, or when a pkg-config file refers
7630 to another one @i{via} its @code{Requires} field.
7631
7632 Another example where @code{propagated-inputs} is useful is for languages
7633 that lack a facility to record the run-time search path akin to the
7634 @code{RUNPATH} of ELF files; this includes Guile, Python, Perl, and
7635 more. When packaging libraries written in those languages, ensure they
7636 can find library code they depend on at run time by listing run-time
7637 dependencies in @code{propagated-inputs} rather than @code{inputs}.
7638
7639 @item @code{outputs} (default: @code{'("out")})
7640 The list of output names of the package. @xref{Packages with Multiple
7641 Outputs}, for typical uses of additional outputs.
7642
7643 @item @code{native-search-paths} (default: @code{'()})
7644 @itemx @code{search-paths} (default: @code{'()})
7645 A list of @code{search-path-specification} objects describing
7646 search-path environment variables honored by the package. @xref{Search
7647 Paths}, for more on search path specifications.
7648
7649 As for inputs, the distinction between @code{native-search-paths} and
7650 @code{search-paths} only matters when cross-compiling. In a
7651 cross-compilation context, @code{native-search-paths} applies
7652 exclusively to native inputs whereas @code{search-paths} applies only to
7653 host inputs.
7654
7655 Packages such as cross-compilers care about target inputs---for
7656 instance, our (modified) GCC cross-compiler has
7657 @env{CROSS_C_INCLUDE_PATH} in @code{search-paths}, which allows it to
7658 pick @file{.h} files for the target system and @emph{not} those of
7659 native inputs. For the majority of packages though, only
7660 @code{native-search-paths} makes sense.
7661
7662 @item @code{replacement} (default: @code{#f})
7663 This must be either @code{#f} or a package object that will be used as a
7664 @dfn{replacement} for this package. @xref{Security Updates, grafts},
7665 for details.
7666
7667 @item @code{synopsis}
7668 A one-line description of the package.
7669
7670 @item @code{description}
7671 A more elaborate description of the package, as a string in Texinfo
7672 syntax.
7673
7674 @item @code{license}
7675 @cindex license, of packages
7676 The license of the package; a value from @code{(guix licenses)},
7677 or a list of such values.
7678
7679 @item @code{home-page}
7680 The URL to the home-page of the package, as a string.
7681
7682 @item @code{supported-systems} (default: @code{%supported-systems})
7683 The list of systems supported by the package, as strings of the form
7684 @code{architecture-kernel}, for example @code{"x86_64-linux"}.
7685
7686 @item @code{location} (default: source location of the @code{package} form)
7687 The source location of the package. It is useful to override this when
7688 inheriting from another package, in which case this field is not
7689 automatically corrected.
7690 @end table
7691 @end deftp
7692
7693 @deffn {Scheme Syntax} this-package
7694 When used in the @emph{lexical scope} of a package field definition, this
7695 identifier resolves to the package being defined.
7696
7697 The example below shows how to add a package as a native input of itself when
7698 cross-compiling:
7699
7700 @lisp
7701 (package
7702 (name "guile")
7703 ;; ...
7704
7705 ;; When cross-compiled, Guile, for example, depends on
7706 ;; a native version of itself. Add it here.
7707 (native-inputs (if (%current-target-system)
7708 (list this-package)
7709 '())))
7710 @end lisp
7711
7712 It is an error to refer to @code{this-package} outside a package definition.
7713 @end deffn
7714
7715 The following helper procedures are provided to help deal with package
7716 inputs.
7717
7718 @deffn {Scheme Procedure} lookup-package-input @var{package} @var{name}
7719 @deffnx {Scheme Procedure} lookup-package-native-input @var{package} @var{name}
7720 @deffnx {Scheme Procedure} lookup-package-propagated-input @var{package} @var{name}
7721 @deffnx {Scheme Procedure} lookup-package-direct-input @var{package} @var{name}
7722 Look up @var{name} among @var{package}'s inputs (or native, propagated,
7723 or direct inputs). Return it if found, @code{#f} otherwise.
7724
7725 @var{name} is the name of a package depended on. Here's how you might
7726 use it:
7727
7728 @lisp
7729 (use-modules (guix packages) (gnu packages base))
7730
7731 (lookup-package-direct-input coreutils "gmp")
7732 @result{} #<package gmp@@6.2.1 @dots{}>
7733 @end lisp
7734
7735 In this example we obtain the @code{gmp} package that is among the
7736 direct inputs of @code{coreutils}.
7737 @end deffn
7738
7739 @cindex development inputs, of a package
7740 @cindex implicit inputs, of a package
7741 Sometimes you will want to obtain the list of inputs needed to
7742 @emph{develop} a package---all the inputs that are visible when the
7743 package is compiled. This is what the @code{package-development-inputs}
7744 procedure returns.
7745
7746 @deffn {Scheme Procedure} package-development-inputs @var{package} @
7747 [@var{system}] [#:target #f]
7748 Return the list of inputs required by @var{package} for development
7749 purposes on @var{system}. When @var{target} is true, return the inputs
7750 needed to cross-compile @var{package} from @var{system} to
7751 @var{target}, where @var{target} is a triplet such as
7752 @code{"aarch64-linux-gnu"}.
7753
7754 Note that the result includes both explicit inputs and implicit
7755 inputs---inputs automatically added by the build system (@pxref{Build
7756 Systems}). Let us take the @code{hello} package to illustrate that:
7757
7758 @lisp
7759 (use-modules (gnu packages base) (guix packages))
7760
7761 hello
7762 @result{} #<package hello@@2.10 gnu/packages/base.scm:79 7f585d4f6790>
7763
7764 (package-direct-inputs hello)
7765 @result{} ()
7766
7767 (package-development-inputs hello)
7768 @result{} (("source" @dots{}) ("tar" #<package tar@@1.32 @dots{}>) @dots{})
7769 @end lisp
7770
7771 In this example, @code{package-direct-inputs} returns the empty list,
7772 because @code{hello} has zero explicit dependencies. Conversely,
7773 @code{package-development-inputs} includes inputs implicitly added by
7774 @code{gnu-build-system} that are required to build @code{hello}: tar,
7775 gzip, GCC, libc, Bash, and more. To visualize it, @command{guix graph
7776 hello} would show you explicit inputs, whereas @command{guix graph -t
7777 bag hello} would include implicit inputs (@pxref{Invoking guix graph}).
7778 @end deffn
7779
7780 Because packages are regular Scheme objects that capture a complete
7781 dependency graph and associated build procedures, it is often useful to
7782 write procedures that take a package and return a modified version
7783 thereof according to some parameters. Below are a few examples.
7784
7785 @cindex tool chain, choosing a package's tool chain
7786 @deffn {Scheme Procedure} package-with-c-toolchain @var{package} @var{toolchain}
7787 Return a variant of @var{package} that uses @var{toolchain} instead of
7788 the default GNU C/C++ toolchain. @var{toolchain} must be a list of
7789 inputs (label/package tuples) providing equivalent functionality, such
7790 as the @code{gcc-toolchain} package.
7791
7792 The example below returns a variant of the @code{hello} package built
7793 with GCC@tie{}10.x and the rest of the GNU tool chain (Binutils and the
7794 GNU C Library) instead of the default tool chain:
7795
7796 @lisp
7797 (let ((toolchain (specification->package "gcc-toolchain@@10")))
7798 (package-with-c-toolchain hello `(("toolchain" ,toolchain))))
7799 @end lisp
7800
7801 The build tool chain is part of the @dfn{implicit inputs} of
7802 packages---it's usually not listed as part of the various ``inputs''
7803 fields and is instead pulled in by the build system. Consequently, this
7804 procedure works by changing the build system of @var{package} so that it
7805 pulls in @var{toolchain} instead of the defaults. @ref{Build Systems},
7806 for more on build systems.
7807 @end deffn
7808
7809 @node origin Reference
7810 @subsection @code{origin} Reference
7811
7812 This section documents @dfn{origins}. An @code{origin} declaration
7813 specifies data that must be ``produced''---downloaded, usually---and
7814 whose content hash is known in advance. Origins are primarily used to
7815 represent the source code of packages (@pxref{Defining Packages}). For
7816 that reason, the @code{origin} form allows you to declare patches to
7817 apply to the original source code as well as code snippets to modify it.
7818
7819 @deftp {Data Type} origin
7820 This is the data type representing a source code origin.
7821
7822 @table @asis
7823 @item @code{uri}
7824 An object containing the URI of the source. The object type depends on
7825 the @code{method} (see below). For example, when using the
7826 @var{url-fetch} method of @code{(guix download)}, the valid @code{uri}
7827 values are: a URL represented as a string, or a list thereof.
7828
7829 @cindex fixed-output derivations, for download
7830 @item @code{method}
7831 A monadic procedure that handles the given URI@. The procedure must
7832 accept at least three arguments: the value of the @code{uri} field and
7833 the hash algorithm and hash value specified by the @code{hash} field.
7834 It must return a store item or a derivation in the store monad
7835 (@pxref{The Store Monad}); most methods return a fixed-output derivation
7836 (@pxref{Derivations}).
7837
7838 Commonly used methods include @code{url-fetch}, which fetches data from
7839 a URL, and @code{git-fetch}, which fetches data from a Git repository
7840 (see below).
7841
7842 @item @code{sha256}
7843 A bytevector containing the SHA-256 hash of the source. This is
7844 equivalent to providing a @code{content-hash} SHA256 object in the
7845 @code{hash} field described below.
7846
7847 @item @code{hash}
7848 The @code{content-hash} object of the source---see below for how to use
7849 @code{content-hash}.
7850
7851 You can obtain this information using @code{guix download}
7852 (@pxref{Invoking guix download}) or @code{guix hash} (@pxref{Invoking
7853 guix hash}).
7854
7855 @item @code{file-name} (default: @code{#f})
7856 The file name under which the source code should be saved. When this is
7857 @code{#f}, a sensible default value will be used in most cases. In case
7858 the source is fetched from a URL, the file name from the URL will be
7859 used. For version control checkouts, it is recommended to provide the
7860 file name explicitly because the default is not very descriptive.
7861
7862 @item @code{patches} (default: @code{'()})
7863 A list of file names, origins, or file-like objects (@pxref{G-Expressions,
7864 file-like objects}) pointing to patches to be applied to the source.
7865
7866 This list of patches must be unconditional. In particular, it cannot
7867 depend on the value of @code{%current-system} or
7868 @code{%current-target-system}.
7869
7870 @item @code{snippet} (default: @code{#f})
7871 A G-expression (@pxref{G-Expressions}) or S-expression that will be run
7872 in the source directory. This is a convenient way to modify the source,
7873 sometimes more convenient than a patch.
7874
7875 @item @code{patch-flags} (default: @code{'("-p1")})
7876 A list of command-line flags that should be passed to the @code{patch}
7877 command.
7878
7879 @item @code{patch-inputs} (default: @code{#f})
7880 Input packages or derivations to the patching process. When this is
7881 @code{#f}, the usual set of inputs necessary for patching are provided,
7882 such as GNU@tie{}Patch.
7883
7884 @item @code{modules} (default: @code{'()})
7885 A list of Guile modules that should be loaded during the patching
7886 process and while running the code in the @code{snippet} field.
7887
7888 @item @code{patch-guile} (default: @code{#f})
7889 The Guile package that should be used in the patching process. When
7890 this is @code{#f}, a sensible default is used.
7891 @end table
7892 @end deftp
7893
7894 @deftp {Data Type} content-hash @var{value} [@var{algorithm}]
7895 Construct a content hash object for the given @var{algorithm}, and with
7896 @var{value} as its hash value. When @var{algorithm} is omitted, assume
7897 it is @code{sha256}.
7898
7899 @var{value} can be a literal string, in which case it is base32-decoded,
7900 or it can be a bytevector.
7901
7902 The following forms are all equivalent:
7903
7904 @lisp
7905 (content-hash "05zxkyz9bv3j9h0xyid1rhvh3klhsmrpkf3bcs6frvlgyr2gwilj")
7906 (content-hash "05zxkyz9bv3j9h0xyid1rhvh3klhsmrpkf3bcs6frvlgyr2gwilj"
7907 sha256)
7908 (content-hash (base32
7909 "05zxkyz9bv3j9h0xyid1rhvh3klhsmrpkf3bcs6frvlgyr2gwilj"))
7910 (content-hash (base64 "kkb+RPaP7uyMZmu4eXPVkM4BN8yhRd8BTHLslb6f/Rc=")
7911 sha256)
7912 @end lisp
7913
7914 Technically, @code{content-hash} is currently implemented as a macro.
7915 It performs sanity checks at macro-expansion time, when possible, such
7916 as ensuring that @var{value} has the right size for @var{algorithm}.
7917 @end deftp
7918
7919 As we have seen above, how exactly the data an origin refers to is
7920 retrieved is determined by its @code{method} field. The @code{(guix
7921 download)} module provides the most common method, @code{url-fetch},
7922 described below.
7923
7924 @deffn {Scheme Procedure} url-fetch @var{url} @var{hash-algo} @var{hash} @
7925 [name] [#:executable? #f]
7926 Return a fixed-output derivation that fetches data from @var{url} (a
7927 string, or a list of strings denoting alternate URLs), which is expected
7928 to have hash @var{hash} of type @var{hash-algo} (a symbol). By default,
7929 the file name is the base name of URL; optionally, @var{name} can
7930 specify a different file name. When @var{executable?} is true, make the
7931 downloaded file executable.
7932
7933 When one of the URL starts with @code{mirror://}, then its host part is
7934 interpreted as the name of a mirror scheme, taken from @file{%mirror-file}.
7935
7936 Alternatively, when URL starts with @code{file://}, return the
7937 corresponding file name in the store.
7938 @end deffn
7939
7940 Likewise, the @code{(guix git-download)} module defines the
7941 @code{git-fetch} origin method, which fetches data from a Git version
7942 control repository, and the @code{git-reference} data type to describe
7943 the repository and revision to fetch.
7944
7945 @deffn {Scheme Procedure} git-fetch @var{ref} @var{hash-algo} @var{hash}
7946 Return a fixed-output derivation that fetches @var{ref}, a
7947 @code{<git-reference>} object. The output is expected to have recursive
7948 hash @var{hash} of type @var{hash-algo} (a symbol). Use @var{name} as
7949 the file name, or a generic name if @code{#f}.
7950 @end deffn
7951
7952 @deftp {Data Type} git-reference
7953 This data type represents a Git reference for @code{git-fetch} to
7954 retrieve.
7955
7956 @table @asis
7957 @item @code{url}
7958 The URL of the Git repository to clone.
7959
7960 @item @code{commit}
7961 This string denotes either the commit to fetch (a hexadecimal string),
7962 or the tag to fetch. You can also use a ``short'' commit ID or a
7963 @command{git describe} style identifier such as
7964 @code{v1.0.1-10-g58d7909c97}.
7965
7966 @item @code{recursive?} (default: @code{#f})
7967 This Boolean indicates whether to recursively fetch Git sub-modules.
7968 @end table
7969
7970 The example below denotes the @code{v2.10} tag of the GNU@tie{}Hello
7971 repository:
7972
7973 @lisp
7974 (git-reference
7975 (url "https://git.savannah.gnu.org/git/hello.git")
7976 (commit "v2.10"))
7977 @end lisp
7978
7979 This is equivalent to the reference below, which explicitly names the
7980 commit:
7981
7982 @lisp
7983 (git-reference
7984 (url "https://git.savannah.gnu.org/git/hello.git")
7985 (commit "dc7dc56a00e48fe6f231a58f6537139fe2908fb9"))
7986 @end lisp
7987 @end deftp
7988
7989 For Mercurial repositories, the module @code{(guix hg-download)} defines
7990 the @code{hg-fetch} origin method and @code{hg-reference} data type for
7991 support of the Mercurial version control system.
7992
7993 @deffn {Scheme Procedure} hg-fetch @var{ref} @var{hash-algo} @var{hash} @
7994 [name]
7995 Return a fixed-output derivation that fetches @var{ref}, a
7996 @code{<hg-reference>} object. The output is expected to have recursive
7997 hash @var{hash} of type @var{hash-algo} (a symbol). Use @var{name} as
7998 the file name, or a generic name if @code{#false}.
7999 @end deffn
8000
8001 @node Defining Package Variants
8002 @section Defining Package Variants
8003
8004 @cindex customizing packages
8005 @cindex variants, of packages
8006 One of the nice things with Guix is that, given a package definition,
8007 you can easily @emph{derive} variants of that package---for a different
8008 upstream version, with different dependencies, different compilation
8009 options, and so on. Some of these custom packages can be defined
8010 straight from the command line (@pxref{Package Transformation Options}).
8011 This section describes how to define package variants in code. This can
8012 be useful in ``manifests'' (@pxref{Writing Manifests})
8013 and in your own package collection
8014 (@pxref{Creating a Channel}), among others!
8015
8016 @cindex inherit, for package definitions
8017 As discussed earlier, packages are first-class objects in the Scheme
8018 language. The @code{(guix packages)} module provides the @code{package}
8019 construct to define new package objects (@pxref{package Reference}).
8020 The easiest way to define a package variant is using the @code{inherit}
8021 keyword together with @code{package}. This allows you to inherit from a
8022 package definition while overriding the fields you want.
8023
8024 For example, given the @code{hello} variable, which contains a
8025 definition for the current version of GNU@tie{}Hello, here's how you
8026 would define a variant for version 2.2 (released in 2006, it's
8027 vintage!):
8028
8029 @lisp
8030 (use-modules (gnu packages base)) ;for 'hello'
8031
8032 (define hello-2.2
8033 (package
8034 (inherit hello)
8035 (version "2.2")
8036 (source (origin
8037 (method url-fetch)
8038 (uri (string-append "mirror://gnu/hello/hello-" version
8039 ".tar.gz"))
8040 (sha256
8041 (base32
8042 "0lappv4slgb5spyqbh6yl5r013zv72yqg2pcl30mginf3wdqd8k9"))))))
8043 @end lisp
8044
8045 The example above corresponds to what the @option{--with-source} package
8046 transformation option does. Essentially @code{hello-2.2} preserves all
8047 the fields of @code{hello}, except @code{version} and @code{source},
8048 which it overrides. Note that the original @code{hello} variable is
8049 still there, in the @code{(gnu packages base)} module, unchanged. When
8050 you define a custom package like this, you are really @emph{adding} a
8051 new package definition; the original one remains available.
8052
8053 You can just as well define variants with a different set of
8054 dependencies than the original package. For example, the default
8055 @code{gdb} package depends on @code{guile}, but since that is an
8056 optional dependency, you can define a variant that removes that
8057 dependency like so:
8058
8059 @lisp
8060 (use-modules (gnu packages gdb)) ;for 'gdb'
8061
8062 (define gdb-sans-guile
8063 (package
8064 (inherit gdb)
8065 (inputs (modify-inputs (package-inputs gdb)
8066 (delete "guile")))))
8067 @end lisp
8068
8069 The @code{modify-inputs} form above removes the @code{"guile"} package
8070 from the @code{inputs} field of @code{gdb}. The @code{modify-inputs}
8071 macro is a helper that can prove useful anytime you want to remove, add,
8072 or replace package inputs.
8073
8074 @deffn {Scheme Syntax} modify-inputs @var{inputs} @var{clauses}
8075 Modify the given package inputs, as returned by @code{package-inputs} & co.,
8076 according to the given clauses. Each clause must have one of the
8077 following forms:
8078
8079 @table @code
8080 @item (delete @var{name}@dots{})
8081 Delete from the inputs packages with the given @var{name}s (strings).
8082
8083 @item (append @var{package}@dots{})
8084 Add @var{package}s to the end of the input list.
8085
8086 @item (prepend @var{package}@dots{})
8087 Add @var{package}s to the front of the input list.
8088 @end table
8089
8090 The example below removes the GMP and ACL inputs of Coreutils and adds
8091 libcap to the back of the input list:
8092
8093 @lisp
8094 (modify-inputs (package-inputs coreutils)
8095 (delete "gmp" "acl")
8096 (append libcap))
8097 @end lisp
8098
8099 The example below replaces the @code{guile} package from the inputs of
8100 @code{guile-redis} with @code{guile-2.2}:
8101
8102 @lisp
8103 (modify-inputs (package-inputs guile-redis)
8104 (replace "guile" guile-2.2))
8105 @end lisp
8106
8107 The last type of clause is @code{prepend}, to add inputs to the front of
8108 the list.
8109 @end deffn
8110
8111 In some cases, you may find it useful to write functions
8112 (``procedures'', in Scheme parlance) that return a package based on some
8113 parameters. For example, consider the @code{luasocket} library for the
8114 Lua programming language. We want to create @code{luasocket} packages
8115 for major versions of Lua. One way to do that is to define a procedure
8116 that takes a Lua package and returns a @code{luasocket} package that
8117 depends on it:
8118
8119 @lisp
8120 (define (make-lua-socket name lua)
8121 ;; Return a luasocket package built with LUA.
8122 (package
8123 (name name)
8124 (version "3.0")
8125 ;; several fields omitted
8126 (inputs (list lua))
8127 (synopsis "Socket library for Lua")))
8128
8129 (define-public lua5.1-socket
8130 (make-lua-socket "lua5.1-socket" lua-5.1))
8131
8132 (define-public lua5.2-socket
8133 (make-lua-socket "lua5.2-socket" lua-5.2))
8134 @end lisp
8135
8136 Here we have defined packages @code{lua5.1-socket} and
8137 @code{lua5.2-socket} by calling @code{make-lua-socket} with different
8138 arguments. @xref{Procedures,,, guile, GNU Guile Reference Manual}, for
8139 more info on procedures. Having top-level public definitions for these
8140 two packages means that they can be referred to from the command line
8141 (@pxref{Package Modules}).
8142
8143 @cindex package transformations
8144 These are pretty simple package variants. As a convenience, the
8145 @code{(guix transformations)} module provides a high-level interface
8146 that directly maps to the more sophisticated package transformation
8147 options (@pxref{Package Transformation Options}):
8148
8149 @deffn {Scheme Procedure} options->transformation @var{opts}
8150 Return a procedure that, when passed an object to build (package,
8151 derivation, etc.), applies the transformations specified by @var{opts} and returns
8152 the resulting objects. @var{opts} must be a list of symbol/string pairs such as:
8153
8154 @lisp
8155 ((with-branch . "guile-gcrypt=master")
8156 (without-tests . "libgcrypt"))
8157 @end lisp
8158
8159 Each symbol names a transformation and the corresponding string is an argument
8160 to that transformation.
8161 @end deffn
8162
8163 For instance, a manifest equivalent to this command:
8164
8165 @example
8166 guix build guix \
8167 --with-branch=guile-gcrypt=master \
8168 --with-debug-info=zlib
8169 @end example
8170
8171 @noindent
8172 ... would look like this:
8173
8174 @lisp
8175 (use-modules (guix transformations))
8176
8177 (define transform
8178 ;; The package transformation procedure.
8179 (options->transformation
8180 '((with-branch . "guile-gcrypt=master")
8181 (with-debug-info . "zlib"))))
8182
8183 (packages->manifest
8184 (list (transform (specification->package "guix"))))
8185 @end lisp
8186
8187 @cindex input rewriting
8188 @cindex dependency graph rewriting
8189 The @code{options->transformation} procedure is convenient, but it's
8190 perhaps also not as flexible as you may like. How is it implemented?
8191 The astute reader probably noticed that most package transformation
8192 options go beyond the superficial changes shown in the first examples of
8193 this section: they involve @dfn{input rewriting}, whereby the dependency
8194 graph of a package is rewritten by replacing specific inputs by others.
8195
8196 Dependency graph rewriting, for the purposes of swapping packages in the
8197 graph, is what the @code{package-input-rewriting} procedure in
8198 @code{(guix packages)} implements.
8199
8200 @deffn {Scheme Procedure} package-input-rewriting @var{replacements} @
8201 [@var{rewrite-name}] [#:deep? #t]
8202 Return a procedure that, when passed a package, replaces its direct and
8203 indirect dependencies, including implicit inputs when @var{deep?} is
8204 true, according to @var{replacements}. @var{replacements} is a list of
8205 package pairs; the first element of each pair is the package to replace,
8206 and the second one is the replacement.
8207
8208 Optionally, @var{rewrite-name} is a one-argument procedure that takes
8209 the name of a package and returns its new name after rewrite.
8210 @end deffn
8211
8212 @noindent
8213 Consider this example:
8214
8215 @lisp
8216 (define libressl-instead-of-openssl
8217 ;; This is a procedure to replace OPENSSL by LIBRESSL,
8218 ;; recursively.
8219 (package-input-rewriting `((,openssl . ,libressl))))
8220
8221 (define git-with-libressl
8222 (libressl-instead-of-openssl git))
8223 @end lisp
8224
8225 @noindent
8226 Here we first define a rewriting procedure that replaces @var{openssl}
8227 with @var{libressl}. Then we use it to define a @dfn{variant} of the
8228 @var{git} package that uses @var{libressl} instead of @var{openssl}.
8229 This is exactly what the @option{--with-input} command-line option does
8230 (@pxref{Package Transformation Options, @option{--with-input}}).
8231
8232 The following variant of @code{package-input-rewriting} can match packages to
8233 be replaced by name rather than by identity.
8234
8235 @deffn {Scheme Procedure} package-input-rewriting/spec @var{replacements} [#:deep? #t]
8236 Return a procedure that, given a package, applies the given
8237 @var{replacements} to all the package graph, including implicit inputs
8238 unless @var{deep?} is false. @var{replacements} is a list of
8239 spec/procedures pair; each spec is a package specification such as
8240 @code{"gcc"} or @code{"guile@@2"}, and each procedure takes a matching
8241 package and returns a replacement for that package.
8242 @end deffn
8243
8244 The example above could be rewritten this way:
8245
8246 @lisp
8247 (define libressl-instead-of-openssl
8248 ;; Replace all the packages called "openssl" with LibreSSL.
8249 (package-input-rewriting/spec `(("openssl" . ,(const libressl)))))
8250 @end lisp
8251
8252 The key difference here is that, this time, packages are matched by spec and
8253 not by identity. In other words, any package in the graph that is called
8254 @code{openssl} will be replaced.
8255
8256 A more generic procedure to rewrite a package dependency graph is
8257 @code{package-mapping}: it supports arbitrary changes to nodes in the
8258 graph.
8259
8260 @deffn {Scheme Procedure} package-mapping @var{proc} [@var{cut?}] [#:deep? #f]
8261 Return a procedure that, given a package, applies @var{proc} to all the packages
8262 depended on and returns the resulting package. The procedure stops recursion
8263 when @var{cut?} returns true for a given package. When @var{deep?} is true, @var{proc} is
8264 applied to implicit inputs as well.
8265 @end deffn
8266
8267 @node Writing Manifests
8268 @section Writing Manifests
8269
8270 @cindex manifest
8271 @cindex bill of materials (manifests)
8272 @command{guix} commands let you specify package lists on the command
8273 line. This is convenient, but as the command line becomes longer and
8274 less trivial, it quickly becomes more convenient to have that package
8275 list in what we call a @dfn{manifest}. A manifest is some sort of a
8276 ``bill of materials'' that defines a package set. You would typically
8277 come up with a code snippet that builds the manifest, store it in a
8278 file, say @file{manifest.scm}, and then pass that file to the
8279 @option{-m} (or @option{--manifest}) option that many @command{guix}
8280 commands support. For example, here's what a manifest for a simple
8281 package set might look like:
8282
8283 @lisp
8284 ;; Manifest for three packages.
8285 (specifications->manifest '("gcc-toolchain" "make" "git"))
8286 @end lisp
8287
8288 Once you have that manifest, you can pass it, for example, to
8289 @command{guix package} to install just those three packages to your
8290 profile (@pxref{profile-manifest, @option{-m} option of @command{guix
8291 package}}):
8292
8293 @example
8294 guix package -m manifest.scm
8295 @end example
8296
8297 @noindent
8298 ... or you can pass it to @command{guix shell} (@pxref{shell-manifest,
8299 @command{-m} option of @command{guix shell}}) to spawn an ephemeral
8300 environment:
8301
8302 @example
8303 guix shell -m manifest.scm
8304 @end example
8305
8306 @noindent
8307 ... or you can pass it to @command{guix pack} in pretty much the same
8308 way (@pxref{pack-manifest, @option{-m} option of @command{guix pack}}).
8309 You can store the manifest under version control, share it with others
8310 so they can easily get set up, etc.
8311
8312 But how do you write your first manifest? To get started, maybe you'll
8313 want to write a manifest that mirrors what you already have in a
8314 profile. Rather than start from a blank page, @command{guix package}
8315 can generate a manifest for you (@pxref{export-manifest, @command{guix
8316 package --export-manifest}}):
8317
8318 @example
8319 # Write to 'manifest.scm' a manifest corresponding to the
8320 # default profile, ~/.guix-profile.
8321 guix package --export-manifest > manifest.scm
8322 @end example
8323
8324 Or maybe you'll want to ``translate'' command-line arguments into a
8325 manifest. In that case, @command{guix shell} can help
8326 (@pxref{shell-export-manifest, @command{guix shell --export-manifest}}):
8327
8328 @example
8329 # Write a manifest for the packages specified on the command line.
8330 guix shell --export-manifest gcc-toolchain make git > manifest.scm
8331 @end example
8332
8333 In both cases, the @option{--export-manifest} option tries hard to
8334 generate a faithful manifest; in particular, it takes package
8335 transformation options into account (@pxref{Package Transformation
8336 Options}).
8337
8338 @quotation Note
8339 Manifests are @emph{symbolic}: they refer to packages of the channels
8340 @emph{currently in use} (@pxref{Channels}). In the example above,
8341 @code{gcc-toolchain} might refer to version 11 today, but it might refer
8342 to version 13 two years from now.
8343
8344 If you want to ``pin'' your software environment to specific package
8345 versions and variants, you need an additional piece of information: the
8346 list of channel revisions in use, as returned by @command{guix
8347 describe}. @xref{Replicating Guix}, for more information.
8348 @end quotation
8349
8350 Once you've obtained your first manifest, perhaps you'll want to
8351 customize it. Since your manifest is code, you now have access to all
8352 the Guix programming interfaces!
8353
8354 Let's assume you want a manifest to deploy a custom variant of GDB, the
8355 GNU Debugger, that does not depend on Guile, together with another
8356 package. Building on the example seen in the previous section
8357 (@pxref{Defining Package Variants}), you can write a manifest along
8358 these lines:
8359
8360 @lisp
8361 (use-modules (guix packages)
8362 (gnu packages gdb) ;for 'gdb'
8363 (gnu packages version-control)) ;for 'git'
8364
8365 ;; Define a variant of GDB without a dependency on Guile.
8366 (define gdb-sans-guile
8367 (package
8368 (inherit gdb)
8369 (inputs (modify-inputs (package-inputs gdb)
8370 (delete "guile")))))
8371
8372 ;; Return a manifest containing that one package plus Git.
8373 (packages->manifest (list gdb-sans-guile git))
8374 @end lisp
8375
8376 Note that in this example, the manifest directly refers to the
8377 @code{gdb} and @code{git} variables, which are bound to a @code{package}
8378 object (@pxref{package Reference}), instead of calling
8379 @code{specifications->manifest} to look up packages by name as we did
8380 before. The @code{use-modules} form at the top lets us access the core
8381 package interface (@pxref{Defining Packages}) and the modules that
8382 define @code{gdb} and @code{git} (@pxref{Package Modules}). Seamlessly,
8383 we're weaving all this together---the possibilities are endless, unleash
8384 your creativity!
8385
8386 The data type for manifests as well as supporting procedures are defined
8387 in the @code{(guix profiles)} module, which is automatically available
8388 to code passed to @option{-m}. The reference follows.
8389
8390 @deftp {Data Type} manifest
8391 Data type representing a manifest.
8392
8393 It currently has one field:
8394
8395 @table @code
8396 @item entries
8397 This must be a list of @code{manifest-entry} records---see below.
8398 @end table
8399 @end deftp
8400
8401 @deftp {Data Type} manifest-entry
8402 Data type representing a manifest entry. A manifest entry contains
8403 essential metadata: a name and version string, the object (usually a
8404 package) for that entry, the desired output (@pxref{Packages with
8405 Multiple Outputs}), and a number of optional pieces of information
8406 detailed below.
8407
8408 Most of the time, you won't build a manifest entry directly; instead,
8409 you will pass a package to @code{package->manifest-entry}, described
8410 below. In some unusual cases though, you might want to create manifest
8411 entries for things that are @emph{not} packages, as in this example:
8412
8413 @lisp
8414 ;; Manually build a single manifest entry for a non-package object.
8415 (let ((hello (program-file "hello" #~(display "Hi!"))))
8416 (manifest-entry
8417 (name "foo")
8418 (version "42")
8419 (item
8420 (computed-file "hello-directory"
8421 #~(let ((bin (string-append #$output "/bin")))
8422 (mkdir #$output) (mkdir bin)
8423 (symlink #$hello
8424 (string-append bin "/hello")))))))
8425 @end lisp
8426
8427 The available fields are the following:
8428
8429 @table @asis
8430 @item @code{name}
8431 @itemx @code{version}
8432 Name and version string for this entry.
8433
8434 @item @code{item}
8435 A package or other file-like object (@pxref{G-Expressions, file-like
8436 objects}).
8437
8438 @item @code{output} (default: @code{"out"})
8439 Output of @code{item} to use, in case @code{item} has multiple outputs
8440 (@pxref{Packages with Multiple Outputs}).
8441
8442 @item @code{dependencies} (default: @code{'()})
8443 List of manifest entries this entry depends on. When building a
8444 profile, dependencies are added to the profile.
8445
8446 Typically, the propagated inputs of a package (@pxref{package Reference,
8447 @code{propagated-inputs}}) end up having a corresponding manifest entry
8448 in among the dependencies of the package's own manifest entry.
8449
8450 @item @code{search-paths} (default: @code{'()})
8451 The list of search path specifications honored by this entry
8452 (@pxref{Search Paths}).
8453
8454 @item @code{properties} (default: @code{'()})
8455 List of symbol/value pairs. When building a profile, those properties
8456 get serialized.
8457
8458 This can be used to piggyback additional metadata---e.g., the
8459 transformations applied to a package (@pxref{Package Transformation
8460 Options}).
8461
8462 @item @code{parent} (default: @code{(delay #f)})
8463 A promise pointing to the ``parent'' manifest entry.
8464
8465 This is used as a hint to provide context when reporting an error
8466 related to a manifest entry coming from a @code{dependencies} field.
8467 @end table
8468 @end deftp
8469
8470 @deffn {Scheme Procedure} concatenate-manifests @var{lst}
8471 Concatenate the manifests listed in @var{lst} and return the resulting
8472 manifest.
8473 @end deffn
8474
8475 @c TODO: <manifest-pattern>, manifest-lookup, manifest-remove, etc.
8476
8477 @deffn {Scheme Procedure} package->manifest-entry @var{package} @
8478 [@var{output}] [#:properties]
8479 Return a manifest entry for the @var{output} of package @var{package},
8480 where @var{output} defaults to @code{"out"}, and with the given
8481 @var{properties}. By default @var{properties} is the empty list or, if
8482 one or more package transformations were applied to @var{package}, it is
8483 an association list representing those transformations, suitable as an
8484 argument to @code{options->transformation} (@pxref{Defining Package
8485 Variants, @code{options->transformation}}).
8486
8487 The code snippet below builds a manifest with an entry for the default
8488 output and the @code{send-email} output of the @code{git} package:
8489
8490 @lisp
8491 (use-modules (gnu packages version-control))
8492
8493 (manifest (list (package->manifest-entry git)
8494 (package->manifest-entry git "send-email")))
8495 @end lisp
8496 @end deffn
8497
8498 @deffn {Scheme Procedure} packages->manifest @var{packages}
8499 Return a list of manifest entries, one for each item listed in
8500 @var{packages}. Elements of @var{packages} can be either package
8501 objects or package/string tuples denoting a specific output of a
8502 package.
8503
8504 Using this procedure, the manifest above may be rewritten more
8505 concisely:
8506
8507 @lisp
8508 (use-modules (gnu packages version-control))
8509
8510 (packages->manifest (list git `(,git "send-email")))
8511 @end lisp
8512 @end deffn
8513
8514 @anchor{package-development-manifest}
8515 @deffn {Scheme Procedure} package->development-manifest @var{package} @
8516 [@var{system}] [#:target]
8517 Return a manifest for the @dfn{development inputs} of @var{package} for
8518 @var{system}, optionally when cross-compiling to @var{target}.
8519 Development inputs include both explicit and implicit inputs of
8520 @var{package}.
8521
8522 Like the @option{-D} option of @command{guix shell}
8523 (@pxref{shell-development-option, @command{guix shell -D}}), the
8524 resulting manifest describes the environment in which one can develop
8525 @var{package}. For example, suppose you're willing to set up a
8526 development environment for Inkscape, with the addition of Git for
8527 version control; you can describe that ``bill of materials'' with the
8528 following manifest:
8529
8530 @lisp
8531 (use-modules (gnu packages inkscape) ;for 'inkscape'
8532 (gnu packages version-control)) ;for 'git'
8533
8534 (concatenate-manifests
8535 (list (package->development-manifest inkscape)
8536 (packages->manifest (list git))))
8537 @end lisp
8538
8539 In this example, the development manifest that
8540 @code{package->development-manifest} returns includes the compiler
8541 (GCC), the many supporting libraries (Boost, GLib, GTK, etc.), and a
8542 couple of additional development tools---these are the dependencies
8543 @command{guix show inkscape} lists.
8544 @end deffn
8545
8546 @c TODO: Move (gnu packages) interface to a section of its own.
8547
8548 Last, the @code{(gnu packages)} module provides higher-level facilities
8549 to build manifests. In particular, it lets you look up packages by
8550 name---see below.
8551
8552 @deffn {Scheme Procedure} specifications->manifest @var{specs}
8553 Given @var{specs}, a list of specifications such as @code{"emacs@@25.2"}
8554 or @code{"guile:debug"}, return a manifest. Specs have the format that
8555 command-line tools such as @command{guix install} and @command{guix
8556 package} understand (@pxref{Invoking guix package}).
8557
8558 As an example, it lets you rewrite the Git manifest that we saw earlier
8559 like this:
8560
8561 @lisp
8562 (specifications->manifest '("git" "git:send-email"))
8563 @end lisp
8564
8565 Notice that we do not need to worry about @code{use-modules}, importing
8566 the right set of modules, and referring to the right variables.
8567 Instead, we directly refer to packages in the same way as on the command
8568 line, which can often be more convenient.
8569 @end deffn
8570
8571 @c TODO: specifications->package, etc.
8572
8573
8574 @node Build Systems
8575 @section Build Systems
8576
8577 @cindex build system
8578 Each package definition specifies a @dfn{build system} and arguments for
8579 that build system (@pxref{Defining Packages}). This @code{build-system}
8580 field represents the build procedure of the package, as well as implicit
8581 dependencies of that build procedure.
8582
8583 Build systems are @code{<build-system>} objects. The interface to
8584 create and manipulate them is provided by the @code{(guix build-system)}
8585 module, and actual build systems are exported by specific modules.
8586
8587 @cindex bag (low-level package representation)
8588 Under the hood, build systems first compile package objects to
8589 @dfn{bags}. A @dfn{bag} is like a package, but with less
8590 ornamentation---in other words, a bag is a lower-level representation of
8591 a package, which includes all the inputs of that package, including some
8592 that were implicitly added by the build system. This intermediate
8593 representation is then compiled to a derivation (@pxref{Derivations}).
8594 The @code{package-with-c-toolchain} is an example of a way to change the
8595 implicit inputs that a package's build system pulls in (@pxref{package
8596 Reference, @code{package-with-c-toolchain}}).
8597
8598 Build systems accept an optional list of @dfn{arguments}. In package
8599 definitions, these are passed @i{via} the @code{arguments} field
8600 (@pxref{Defining Packages}). They are typically keyword arguments
8601 (@pxref{Optional Arguments, keyword arguments in Guile,, guile, GNU
8602 Guile Reference Manual}). The value of these arguments is usually
8603 evaluated in the @dfn{build stratum}---i.e., by a Guile process launched
8604 by the daemon (@pxref{Derivations}).
8605
8606 The main build system is @code{gnu-build-system}, which implements the
8607 standard build procedure for GNU and many other packages. It
8608 is provided by the @code{(guix build-system gnu)} module.
8609
8610 @defvr {Scheme Variable} gnu-build-system
8611 @code{gnu-build-system} represents the GNU Build System, and variants
8612 thereof (@pxref{Configuration, configuration and makefile conventions,,
8613 standards, GNU Coding Standards}).
8614
8615 @cindex build phases
8616 In a nutshell, packages using it are configured, built, and installed with
8617 the usual @code{./configure && make && make check && make install}
8618 command sequence. In practice, a few additional steps are often needed.
8619 All these steps are split up in separate @dfn{phases}.
8620 @xref{Build Phases}, for more info on build phases and ways to customize
8621 them.
8622
8623 In addition, this build system ensures that the ``standard'' environment
8624 for GNU packages is available. This includes tools such as GCC, libc,
8625 Coreutils, Bash, Make, Diffutils, grep, and sed (see the @code{(guix
8626 build-system gnu)} module for a complete list). We call these the
8627 @dfn{implicit inputs} of a package, because package definitions do not
8628 have to mention them.
8629
8630 This build system supports a number of keyword arguments, which can be
8631 passed @i{via} the @code{arguments} field of a package. Here are some
8632 of the main parameters:
8633
8634 @table @code
8635 @item #:phases
8636 This argument specifies build-side code that evaluates to an alist of
8637 build phases. @xref{Build Phases}, for more information.
8638
8639 @item #:configure-flags
8640 This is a list of flags (strings) passed to the @command{configure}
8641 script. @xref{Defining Packages}, for an example.
8642
8643 @item #:make-flags
8644 This list of strings contains flags passed as arguments to
8645 @command{make} invocations in the @code{build}, @code{check}, and
8646 @code{install} phases.
8647
8648 @item #:out-of-source?
8649 This Boolean, @code{#f} by default, indicates whether to run builds in a
8650 build directory separate from the source tree.
8651
8652 When it is true, the @code{configure} phase creates a separate build
8653 directory, changes to that directory, and runs the @code{configure}
8654 script from there. This is useful for packages that require it, such as
8655 @code{glibc}.
8656
8657 @item #:tests?
8658 This Boolean, @code{#t} by default, indicates whether the @code{check}
8659 phase should run the package's test suite.
8660
8661 @item #:test-target
8662 This string, @code{"check"} by default, gives the name of the makefile
8663 target used by the @code{check} phase.
8664
8665 @item #:parallel-build?
8666 @itemx #:parallel-tests?
8667 These Boolean values specify whether to build, respectively run the test
8668 suite, in parallel, with the @code{-j} flag of @command{make}. When
8669 they are true, @code{make} is passed @code{-j@var{n}}, where @var{n} is
8670 the number specified as the @option{--cores} option of
8671 @command{guix-daemon} or that of the @command{guix} client command
8672 (@pxref{Common Build Options, @option{--cores}}).
8673
8674 @cindex RUNPATH, validation
8675 @item #:validate-runpath?
8676 This Boolean, @code{#t} by default, determines whether to ``validate''
8677 the @code{RUNPATH} of ELF binaries (@code{.so} shared libraries as well
8678 as executables) previously installed by the @code{install} phase.
8679 @xref{phase-validate-runpath, the @code{validate-runpath} phase}, for
8680 details.
8681
8682 @item #:substitutable?
8683 This Boolean, @code{#t} by default, tells whether the package outputs
8684 should be substitutable---i.e., whether users should be able to obtain
8685 substitutes for them instead of building locally (@pxref{Substitutes}).
8686
8687 @item #:allowed-references
8688 @itemx #:disallowed-references
8689 When true, these arguments must be a list of dependencies that must not
8690 appear among the references of the build results. If, upon build
8691 completion, some of these references are retained, the build process
8692 fails.
8693
8694 This is useful to ensure that a package does not erroneously keep a
8695 reference to some of it build-time inputs, in cases where doing so
8696 would, for example, unnecessarily increase its size (@pxref{Invoking
8697 guix size}).
8698 @end table
8699
8700 Most other build systems support these keyword arguments.
8701 @end defvr
8702
8703 Other @code{<build-system>} objects are defined to support other
8704 conventions and tools used by free software packages. They inherit most
8705 of @code{gnu-build-system}, and differ mainly in the set of inputs
8706 implicitly added to the build process, and in the list of phases
8707 executed. Some of these build systems are listed below.
8708
8709 @defvr {Scheme Variable} ant-build-system
8710 This variable is exported by @code{(guix build-system ant)}. It
8711 implements the build procedure for Java packages that can be built with
8712 @url{https://ant.apache.org/, Ant build tool}.
8713
8714 It adds both @code{ant} and the @dfn{Java Development Kit} (JDK) as
8715 provided by the @code{icedtea} package to the set of inputs. Different
8716 packages can be specified with the @code{#:ant} and @code{#:jdk}
8717 parameters, respectively.
8718
8719 When the original package does not provide a suitable Ant build file,
8720 the parameter @code{#:jar-name} can be used to generate a minimal Ant
8721 build file @file{build.xml} with tasks to build the specified jar
8722 archive. In this case the parameter @code{#:source-dir} can be used to
8723 specify the source sub-directory, defaulting to ``src''.
8724
8725 The @code{#:main-class} parameter can be used with the minimal ant
8726 buildfile to specify the main class of the resulting jar. This makes the
8727 jar file executable. The @code{#:test-include} parameter can be used to
8728 specify the list of junit tests to run. It defaults to
8729 @code{(list "**/*Test.java")}. The @code{#:test-exclude} can be used to
8730 disable some tests. It defaults to @code{(list "**/Abstract*.java")},
8731 because abstract classes cannot be run as tests.
8732
8733 The parameter @code{#:build-target} can be used to specify the Ant task
8734 that should be run during the @code{build} phase. By default the
8735 ``jar'' task will be run.
8736
8737 @end defvr
8738
8739 @defvr {Scheme Variable} android-ndk-build-system
8740 @cindex Android distribution
8741 @cindex Android NDK build system
8742 This variable is exported by @code{(guix build-system android-ndk)}. It
8743 implements a build procedure for Android NDK (native development kit)
8744 packages using a Guix-specific build process.
8745
8746 The build system assumes that packages install their public interface
8747 (header) files to the subdirectory @file{include} of the @code{out} output and
8748 their libraries to the subdirectory @file{lib} the @code{out} output.
8749
8750 It's also assumed that the union of all the dependencies of a package
8751 has no conflicting files.
8752
8753 For the time being, cross-compilation is not supported - so right now
8754 the libraries and header files are assumed to be host tools.
8755
8756 @end defvr
8757
8758 @defvr {Scheme Variable} asdf-build-system/source
8759 @defvrx {Scheme Variable} asdf-build-system/sbcl
8760 @defvrx {Scheme Variable} asdf-build-system/ecl
8761
8762 These variables, exported by @code{(guix build-system asdf)}, implement
8763 build procedures for Common Lisp packages using
8764 @url{https://common-lisp.net/project/asdf/, ``ASDF''}. ASDF is a system
8765 definition facility for Common Lisp programs and libraries.
8766
8767 The @code{asdf-build-system/source} system installs the packages in
8768 source form, and can be loaded using any common lisp implementation, via
8769 ASDF@. The others, such as @code{asdf-build-system/sbcl}, install binary
8770 systems in the format which a particular implementation understands.
8771 These build systems can also be used to produce executable programs, or
8772 lisp images which contain a set of packages pre-loaded.
8773
8774 The build system uses naming conventions. For binary packages, the
8775 package name should be prefixed with the lisp implementation, such as
8776 @code{sbcl-} for @code{asdf-build-system/sbcl}.
8777
8778 Additionally, the corresponding source package should be labeled using
8779 the same convention as python packages (see @ref{Python Modules}), using
8780 the @code{cl-} prefix.
8781
8782 In order to create executable programs and images, the build-side
8783 procedures @code{build-program} and @code{build-image} can be used.
8784 They should be called in a build phase after the
8785 @code{create-asdf-configuration} phase, so that the system which was
8786 just built can be used within the resulting image. @code{build-program}
8787 requires a list of Common Lisp expressions to be passed as the
8788 @code{#:entry-program} argument.
8789
8790 By default, all the @file{.asd} files present in the sources are read to
8791 find system definitions. The @code{#:asd-files} parameter can be used
8792 to specify the list of @file{.asd} files to read. Furthermore, if the
8793 package defines a system for its tests in a separate file, it will be
8794 loaded before the tests are run if it is specified by the
8795 @code{#:test-asd-file} parameter. If it is not set, the files
8796 @code{<system>-tests.asd}, @code{<system>-test.asd}, @code{tests.asd},
8797 and @code{test.asd} will be tried if they exist.
8798
8799 If for some reason the package must be named in a different way than the
8800 naming conventions suggest, or if several systems must be compiled, the
8801 @code{#:asd-systems} parameter can be used to specify the list of system
8802 names.
8803
8804 @end defvr
8805
8806 @defvr {Scheme Variable} cargo-build-system
8807 @cindex Rust programming language
8808 @cindex Cargo (Rust build system)
8809 This variable is exported by @code{(guix build-system cargo)}. It
8810 supports builds of packages using Cargo, the build tool of the
8811 @uref{https://www.rust-lang.org, Rust programming language}.
8812
8813 It adds @code{rustc} and @code{cargo} to the set of inputs.
8814 A different Rust package can be specified with the @code{#:rust} parameter.
8815
8816 Regular cargo dependencies should be added to the package definition similarly
8817 to other packages; those needed only at build time to native-inputs, others to
8818 inputs. If you need to add source-only crates then you should add them to via
8819 the @code{#:cargo-inputs} parameter as a list of name and spec pairs, where the
8820 spec can be a package or a source definition. Note that the spec must
8821 evaluate to a path to a gzipped tarball which includes a @code{Cargo.toml}
8822 file at its root, or it will be ignored. Similarly, cargo dev-dependencies
8823 should be added to the package definition via the
8824 @code{#:cargo-development-inputs} parameter.
8825
8826 In its @code{configure} phase, this build system will make any source inputs
8827 specified in the @code{#:cargo-inputs} and @code{#:cargo-development-inputs}
8828 parameters available to cargo. It will also remove an included
8829 @code{Cargo.lock} file to be recreated by @code{cargo} during the
8830 @code{build} phase. The @code{package} phase will run @code{cargo package}
8831 to create a source crate for future use. The @code{install} phase installs
8832 the binaries defined by the crate. Unless @code{install-source? #f} is
8833 defined it will also install a source crate repository of itself and unpacked
8834 sources, to ease in future hacking on rust packages.
8835 @end defvr
8836
8837 @defvr {Scheme Variable} chicken-build-system
8838 This variable is exported by @code{(guix build-system chicken)}. It
8839 builds @uref{https://call-cc.org/, CHICKEN Scheme} modules, also called
8840 ``eggs'' or ``extensions''. CHICKEN generates C source code, which then
8841 gets compiled by a C compiler, in this case GCC.
8842
8843 This build system adds @code{chicken} to the package inputs, as well as
8844 the packages of @code{gnu-build-system}.
8845
8846 The build system can't (yet) deduce the egg's name automatically, so just like
8847 with @code{go-build-system} and its @code{#:import-path}, you should define
8848 @code{#:egg-name} in the package's @code{arguments} field.
8849
8850 For example, if you are packaging the @code{srfi-1} egg:
8851
8852 @lisp
8853 (arguments '(#:egg-name "srfi-1"))
8854 @end lisp
8855
8856 Egg dependencies must be defined in @code{propagated-inputs}, not @code{inputs}
8857 because CHICKEN doesn't embed absolute references in compiled eggs.
8858 Test dependencies should go to @code{native-inputs}, as usual.
8859 @end defvr
8860
8861 @defvr {Scheme Variable} copy-build-system
8862 This variable is exported by @code{(guix build-system copy)}. It
8863 supports builds of simple packages that don't require much compiling,
8864 mostly just moving files around.
8865
8866 It adds much of the @code{gnu-build-system} packages to the set of
8867 inputs. Because of this, the @code{copy-build-system} does not require
8868 all the boilerplate code often needed for the
8869 @code{trivial-build-system}.
8870
8871 To further simplify the file installation process, an
8872 @code{#:install-plan} argument is exposed to let the packager specify
8873 which files go where. The install plan is a list of @code{(@var{source}
8874 @var{target} [@var{filters}])}. @var{filters} are optional.
8875
8876 @itemize
8877 @item When @var{source} matches a file or directory without trailing slash, install it to @var{target}.
8878 @itemize
8879 @item If @var{target} has a trailing slash, install @var{source} basename beneath @var{target}.
8880 @item Otherwise install @var{source} as @var{target}.
8881 @end itemize
8882
8883 @item When @var{source} is a directory with a trailing slash, or when @var{filters} are used,
8884 the trailing slash of @var{target} is implied with the same meaning
8885 as above.
8886 @itemize
8887 @item Without @var{filters}, install the full @var{source} @emph{content} to @var{target}.
8888 @item With @var{filters} among @code{#:include}, @code{#:include-regexp}, @code{#:exclude},
8889 @code{#:exclude-regexp}, only select files are installed depending on
8890 the filters. Each filters is specified by a list of strings.
8891 @itemize
8892 @item With @code{#:include}, install all the files which the path suffix matches
8893 at least one of the elements in the given list.
8894 @item With @code{#:include-regexp}, install all the files which the
8895 subpaths match at least one of the regular expressions in the given
8896 list.
8897 @item The @code{#:exclude} and @code{#:exclude-regexp} filters
8898 are the complement of their inclusion counterpart. Without @code{#:include} flags,
8899 install all files but those matching the exclusion filters.
8900 If both inclusions and exclusions are specified, the exclusions are done
8901 on top of the inclusions.
8902 @end itemize
8903 @end itemize
8904 In all cases, the paths relative to @var{source} are preserved within
8905 @var{target}.
8906 @end itemize
8907
8908 Examples:
8909
8910 @itemize
8911 @item @code{("foo/bar" "share/my-app/")}: Install @file{bar} to @file{share/my-app/bar}.
8912 @item @code{("foo/bar" "share/my-app/baz")}: Install @file{bar} to @file{share/my-app/baz}.
8913 @item @code{("foo/" "share/my-app")}: Install the content of @file{foo} inside @file{share/my-app},
8914 e.g., install @file{foo/sub/file} to @file{share/my-app/sub/file}.
8915 @item @code{("foo/" "share/my-app" #:include ("sub/file"))}: Install only @file{foo/sub/file} to
8916 @file{share/my-app/sub/file}.
8917 @item @code{("foo/sub" "share/my-app" #:include ("file"))}: Install @file{foo/sub/file} to
8918 @file{share/my-app/file}.
8919 @end itemize
8920 @end defvr
8921
8922
8923 @cindex Clojure (programming language)
8924 @cindex simple Clojure build system
8925 @defvr {Scheme Variable} clojure-build-system
8926 This variable is exported by @code{(guix build-system clojure)}. It implements
8927 a simple build procedure for @uref{https://clojure.org/, Clojure} packages
8928 using plain old @code{compile} in Clojure. Cross-compilation is not supported
8929 yet.
8930
8931 It adds @code{clojure}, @code{icedtea} and @code{zip} to the set of inputs.
8932 Different packages can be specified with the @code{#:clojure}, @code{#:jdk} and
8933 @code{#:zip} parameters, respectively.
8934
8935 A list of source directories, test directories and jar names can be specified
8936 with the @code{#:source-dirs}, @code{#:test-dirs} and @code{#:jar-names}
8937 parameters, respectively. Compile directory and main class can be specified
8938 with the @code{#:compile-dir} and @code{#:main-class} parameters, respectively.
8939 Other parameters are documented below.
8940
8941 This build system is an extension of @code{ant-build-system}, but with the
8942 following phases changed:
8943
8944 @table @code
8945
8946 @item build
8947 This phase calls @code{compile} in Clojure to compile source files and runs
8948 @command{jar} to create jars from both source files and compiled files
8949 according to the include list and exclude list specified in
8950 @code{#:aot-include} and @code{#:aot-exclude}, respectively. The exclude list
8951 has priority over the include list. These lists consist of symbols
8952 representing Clojure libraries or the special keyword @code{#:all} representing
8953 all Clojure libraries found under the source directories. The parameter
8954 @code{#:omit-source?} decides if source should be included into the jars.
8955
8956 @item check
8957 This phase runs tests according to the include list and exclude list specified
8958 in @code{#:test-include} and @code{#:test-exclude}, respectively. Their
8959 meanings are analogous to that of @code{#:aot-include} and
8960 @code{#:aot-exclude}, except that the special keyword @code{#:all} now
8961 stands for all Clojure libraries found under the test directories. The
8962 parameter @code{#:tests?} decides if tests should be run.
8963
8964 @item install
8965 This phase installs all jars built previously.
8966 @end table
8967
8968 Apart from the above, this build system also contains an additional phase:
8969
8970 @table @code
8971
8972 @item install-doc
8973 This phase installs all top-level files with base name matching
8974 @code{%doc-regex}. A different regex can be specified with the
8975 @code{#:doc-regex} parameter. All files (recursively) inside the documentation
8976 directories specified in @code{#:doc-dirs} are installed as well.
8977 @end table
8978 @end defvr
8979
8980 @defvr {Scheme Variable} cmake-build-system
8981 This variable is exported by @code{(guix build-system cmake)}. It
8982 implements the build procedure for packages using the
8983 @url{https://www.cmake.org, CMake build tool}.
8984
8985 It automatically adds the @code{cmake} package to the set of inputs.
8986 Which package is used can be specified with the @code{#:cmake}
8987 parameter.
8988
8989 The @code{#:configure-flags} parameter is taken as a list of flags
8990 passed to the @command{cmake} command. The @code{#:build-type}
8991 parameter specifies in abstract terms the flags passed to the compiler;
8992 it defaults to @code{"RelWithDebInfo"} (short for ``release mode with
8993 debugging information''), which roughly means that code is compiled with
8994 @code{-O2 -g}, as is the case for Autoconf-based packages by default.
8995 @end defvr
8996
8997 @defvr {Scheme Variable} dune-build-system
8998 This variable is exported by @code{(guix build-system dune)}. It
8999 supports builds of packages using @uref{https://dune.build/, Dune}, a build
9000 tool for the OCaml programming language. It is implemented as an extension
9001 of the @code{ocaml-build-system} which is described below. As such, the
9002 @code{#:ocaml} and @code{#:findlib} parameters can be passed to this build
9003 system.
9004
9005 It automatically adds the @code{dune} package to the set of inputs.
9006 Which package is used can be specified with the @code{#:dune}
9007 parameter.
9008
9009 There is no @code{configure} phase because dune packages typically don't
9010 need to be configured. The @code{#:build-flags} parameter is taken as a
9011 list of flags passed to the @code{dune} command during the build.
9012
9013 The @code{#:jbuild?} parameter can be passed to use the @code{jbuild}
9014 command instead of the more recent @code{dune} command while building
9015 a package. Its default value is @code{#f}.
9016
9017 The @code{#:package} parameter can be passed to specify a package name, which
9018 is useful when a package contains multiple packages and you want to build
9019 only one of them. This is equivalent to passing the @code{-p} argument to
9020 @code{dune}.
9021
9022 @end defvr
9023
9024 @defvr {Scheme variable} elm-build-system
9025 This variable is exported by @code{(guix build-system elm)}. It implements a
9026 build procedure for @url{https://elm-lang.org, Elm} packages similar to
9027 @samp{elm install}.
9028
9029 The build system adds an Elm compiler package to the set of inputs. The
9030 default compiler package (currently @code{elm-sans-reactor}) can be overridden
9031 using the @code{#:elm} argument. Additionally, Elm packages needed by the
9032 build system itself are added as implicit inputs if they are not already
9033 present: to suppress this behavior, use the
9034 @code{#:implicit-elm-package-inputs?} argument, which is primarily useful for
9035 bootstrapping.
9036
9037 The @code{"dependencies"} and @code{"test-dependencies"} in an Elm package's
9038 @file{elm.json} file correspond to @code{propagated-inputs} and @code{inputs},
9039 respectively.
9040
9041 Elm requires a particular structure for package names: @pxref{Elm Packages}
9042 for more details, including utilities provided by @code{(guix build-system
9043 elm)}.
9044
9045 There are currently a few noteworthy limitations to @code{elm-build-system}:
9046
9047 @itemize
9048 @item
9049 The build system is focused on @dfn{packages} in the Elm sense of the word:
9050 Elm @dfn{projects} which declare @code{@{ "type": "package" @}} in their
9051 @file{elm.json} files. Using @code{elm-build-system} to build Elm
9052 @dfn{applications} (which declare @code{@{ "type": "application" @}}) is
9053 possible, but requires ad-hoc modifications to the build phases. For
9054 examples, see the definitions of the @code{elm-todomvc} example application and
9055 the @code{elm} package itself (because the front-end for the
9056 @samp{elm reactor} command is an Elm application).
9057
9058 @item
9059 Elm supports multiple versions of a package coexisting simultaneously under
9060 @env{ELM_HOME}, but this does not yet work well with @code{elm-build-system}.
9061 This limitation primarily affects Elm applications, because they specify
9062 exact versions for their dependencies, whereas Elm packages specify supported
9063 version ranges. As a workaround, the example applications mentioned above use
9064 the @code{patch-application-dependencies} procedure provided by
9065 @code{(guix build elm-build-system)} to rewrite their @file{elm.json} files to
9066 refer to the package versions actually present in the build environment.
9067 Alternatively, Guix package transformations (@pxref{Defining Package
9068 Variants}) could be used to rewrite an application's entire dependency graph.
9069
9070 @item
9071 We are not yet able to run tests for Elm projects because neither
9072 @url{https://github.com/mpizenberg/elm-test-rs, @command{elm-test-rs}} nor the
9073 Node.js-based @url{https://github.com/rtfeldman/node-test-runner,
9074 @command{elm-test}} runner has been packaged for Guix yet.
9075 @end itemize
9076 @end defvr
9077
9078 @defvr {Scheme Variable} go-build-system
9079 This variable is exported by @code{(guix build-system go)}. It
9080 implements a build procedure for Go packages using the standard
9081 @url{https://golang.org/cmd/go/#hdr-Compile_packages_and_dependencies,
9082 Go build mechanisms}.
9083
9084 The user is expected to provide a value for the key @code{#:import-path}
9085 and, in some cases, @code{#:unpack-path}. The
9086 @url{https://golang.org/doc/code.html#ImportPaths, import path}
9087 corresponds to the file system path expected by the package's build
9088 scripts and any referring packages, and provides a unique way to
9089 refer to a Go package. It is typically based on a combination of the
9090 package source code's remote URI and file system hierarchy structure. In
9091 some cases, you will need to unpack the package's source code to a
9092 different directory structure than the one indicated by the import path,
9093 and @code{#:unpack-path} should be used in such cases.
9094
9095 Packages that provide Go libraries should install their source code into
9096 the built output. The key @code{#:install-source?}, which defaults to
9097 @code{#t}, controls whether or not the source code is installed. It can
9098 be set to @code{#f} for packages that only provide executable files.
9099
9100 Packages can be cross-built, and if a specific architecture or operating
9101 system is desired then the keywords @code{#:goarch} and @code{#:goos}
9102 can be used to force the package to be built for that architecture and
9103 operating system. The combinations known to Go can be found
9104 @url{"https://golang.org/doc/install/source#environment", in their
9105 documentation}.
9106 @end defvr
9107
9108 @defvr {Scheme Variable} glib-or-gtk-build-system
9109 This variable is exported by @code{(guix build-system glib-or-gtk)}. It
9110 is intended for use with packages making use of GLib or GTK+.
9111
9112 This build system adds the following two phases to the ones defined by
9113 @code{gnu-build-system}:
9114
9115 @table @code
9116 @item glib-or-gtk-wrap
9117 The phase @code{glib-or-gtk-wrap} ensures that programs in
9118 @file{bin/} are able to find GLib ``schemas'' and
9119 @uref{https://developer.gnome.org/gtk3/stable/gtk-running.html, GTK+
9120 modules}. This is achieved by wrapping the programs in launch scripts
9121 that appropriately set the @env{XDG_DATA_DIRS} and @env{GTK_PATH}
9122 environment variables.
9123
9124 It is possible to exclude specific package outputs from that wrapping
9125 process by listing their names in the
9126 @code{#:glib-or-gtk-wrap-excluded-outputs} parameter. This is useful
9127 when an output is known not to contain any GLib or GTK+ binaries, and
9128 where wrapping would gratuitously add a dependency of that output on
9129 GLib and GTK+.
9130
9131 @item glib-or-gtk-compile-schemas
9132 The phase @code{glib-or-gtk-compile-schemas} makes sure that all
9133 @uref{https://developer.gnome.org/gio/stable/glib-compile-schemas.html,
9134 GSettings schemas} of GLib are compiled. Compilation is performed by the
9135 @command{glib-compile-schemas} program. It is provided by the package
9136 @code{glib:bin} which is automatically imported by the build system.
9137 The @code{glib} package providing @command{glib-compile-schemas} can be
9138 specified with the @code{#:glib} parameter.
9139 @end table
9140
9141 Both phases are executed after the @code{install} phase.
9142 @end defvr
9143
9144 @defvr {Scheme Variable} guile-build-system
9145 This build system is for Guile packages that consist exclusively of Scheme
9146 code and that are so lean that they don't even have a makefile, let alone a
9147 @file{configure} script. It compiles Scheme code using @command{guild
9148 compile} (@pxref{Compilation,,, guile, GNU Guile Reference Manual}) and
9149 installs the @file{.scm} and @file{.go} files in the right place. It also
9150 installs documentation.
9151
9152 This build system supports cross-compilation by using the
9153 @option{--target} option of @samp{guild compile}.
9154
9155 Packages built with @code{guile-build-system} must provide a Guile package in
9156 their @code{native-inputs} field.
9157 @end defvr
9158
9159 @defvr {Scheme Variable} julia-build-system
9160 This variable is exported by @code{(guix build-system julia)}. It
9161 implements the build procedure used by @uref{https://julialang.org/,
9162 julia} packages, which essentially is similar to running @samp{julia -e
9163 'using Pkg; Pkg.add(package)'} in an environment where
9164 @env{JULIA_LOAD_PATH} contains the paths to all Julia package inputs.
9165 Tests are run by calling @code{/test/runtests.jl}.
9166
9167 The Julia package name and uuid is read from the file
9168 @file{Project.toml}. These values can be overridden by passing the
9169 argument @code{#:julia-package-name} (which must be correctly
9170 capitalized) or @code{#:julia-package-uuid}.
9171
9172 Julia packages usually manage their binary dependencies via
9173 @code{JLLWrappers.jl}, a Julia package that creates a module (named
9174 after the wrapped library followed by @code{_jll.jl}.
9175
9176 To add the binary path @code{_jll.jl} packages, you need to patch the
9177 files under @file{src/wrappers/}, replacing the call to the macro
9178 @code{JLLWrappers.@@generate_wrapper_header}, adding as a second
9179 argument containing the store path the binary.
9180
9181 As an example, in the MbedTLS Julia package, we add a build phase
9182 (@pxref{Build Phases}) to insert the absolute file name of the wrapped
9183 MbedTLS package:
9184
9185 @lisp
9186 (add-after 'unpack 'override-binary-path
9187 (lambda* (#:key inputs #:allow-other-keys)
9188 (for-each (lambda (wrapper)
9189 (substitute* wrapper
9190 (("generate_wrapper_header.*")
9191 (string-append
9192 "generate_wrapper_header(\"MbedTLS\", \""
9193 (assoc-ref inputs "mbedtls-apache") "\")\n"))))
9194 ;; There's a Julia file for each platform, override them all.
9195 (find-files "src/wrappers/" "\\.jl$"))))
9196 @end lisp
9197
9198 Some older packages that aren't using @file{Project.toml} yet, will
9199 require this file to be created, too. It is internally done if the
9200 arguments @code{#:julia-package-name} and @code{#:julia-package-uuid}
9201 are provided.
9202 @end defvr
9203
9204 @defvr {Scheme Variable} maven-build-system
9205 This variable is exported by @code{(guix build-system maven)}. It implements
9206 a build procedure for @uref{https://maven.apache.org, Maven} packages. Maven
9207 is a dependency and lifecycle management tool for Java. A user of Maven
9208 specifies dependencies and plugins in a @file{pom.xml} file that Maven reads.
9209 When Maven does not have one of the dependencies or plugins in its repository,
9210 it will download them and use them to build the package.
9211
9212 The maven build system ensures that maven will not try to download any
9213 dependency by running in offline mode. Maven will fail if a dependency is
9214 missing. Before running Maven, the @file{pom.xml} (and subprojects) are
9215 modified to specify the version of dependencies and plugins that match the
9216 versions available in the guix build environment. Dependencies and plugins
9217 must be installed in the fake maven repository at @file{lib/m2}, and are
9218 symlinked into a proper repository before maven is run. Maven is instructed
9219 to use that repository for the build and installs built artifacts there.
9220 Changed files are copied to the @file{lib/m2} directory of the package output.
9221
9222 You can specify a @file{pom.xml} file with the @code{#:pom-file} argument,
9223 or let the build system use the default @file{pom.xml} file in the sources.
9224
9225 In case you need to specify a dependency's version manually, you can use the
9226 @code{#:local-packages} argument. It takes an association list where the key
9227 is the groupId of the package and its value is an association list where the
9228 key is the artifactId of the package and its value is the version you want to
9229 override in the @file{pom.xml}.
9230
9231 Some packages use dependencies or plugins that are not useful at runtime nor
9232 at build time in Guix. You can alter the @file{pom.xml} file to remove them
9233 using the @code{#:exclude} argument. Its value is an association list where
9234 the key is the groupId of the plugin or dependency you want to remove, and
9235 the value is a list of artifactId you want to remove.
9236
9237 You can override the default @code{jdk} and @code{maven} packages with the
9238 corresponding argument, @code{#:jdk} and @code{#:maven}.
9239
9240 The @code{#:maven-plugins} argument is a list of maven plugins used during
9241 the build, with the same format as the @code{inputs} fields of the package
9242 declaration. Its default value is @code{(default-maven-plugins)} which is
9243 also exported.
9244 @end defvr
9245
9246 @defvr {Scheme Variable} minetest-mod-build-system
9247 This variable is exported by @code{(guix build-system minetest)}. It
9248 implements a build procedure for @uref{https://www.minetest.net, Minetest}
9249 mods, which consists of copying Lua code, images and other resources to
9250 the location Minetest searches for mods. The build system also minimises
9251 PNG images and verifies that Minetest can load the mod without errors.
9252 @end defvr
9253
9254 @defvr {Scheme Variable} minify-build-system
9255 This variable is exported by @code{(guix build-system minify)}. It
9256 implements a minification procedure for simple JavaScript packages.
9257
9258 It adds @code{uglify-js} to the set of inputs and uses it to compress
9259 all JavaScript files in the @file{src} directory. A different minifier
9260 package can be specified with the @code{#:uglify-js} parameter, but it
9261 is expected that the package writes the minified code to the standard
9262 output.
9263
9264 When the input JavaScript files are not all located in the @file{src}
9265 directory, the parameter @code{#:javascript-files} can be used to
9266 specify a list of file names to feed to the minifier.
9267 @end defvr
9268
9269 @defvr {Scheme Variable} ocaml-build-system
9270 This variable is exported by @code{(guix build-system ocaml)}. It implements
9271 a build procedure for @uref{https://ocaml.org, OCaml} packages, which consists
9272 of choosing the correct set of commands to run for each package. OCaml
9273 packages can expect many different commands to be run. This build system will
9274 try some of them.
9275
9276 When the package has a @file{setup.ml} file present at the top-level, it will
9277 run @code{ocaml setup.ml -configure}, @code{ocaml setup.ml -build} and
9278 @code{ocaml setup.ml -install}. The build system will assume that this file
9279 was generated by @uref{http://oasis.forge.ocamlcore.org/, OASIS} and will take
9280 care of setting the prefix and enabling tests if they are not disabled. You
9281 can pass configure and build flags with the @code{#:configure-flags} and
9282 @code{#:build-flags}. The @code{#:test-flags} key can be passed to change the
9283 set of flags used to enable tests. The @code{#:use-make?} key can be used to
9284 bypass this system in the build and install phases.
9285
9286 When the package has a @file{configure} file, it is assumed that it is a
9287 hand-made configure script that requires a different argument format than
9288 in the @code{gnu-build-system}. You can add more flags with the
9289 @code{#:configure-flags} key.
9290
9291 When the package has a @file{Makefile} file (or @code{#:use-make?} is
9292 @code{#t}), it will be used and more flags can be passed to the build and
9293 install phases with the @code{#:make-flags} key.
9294
9295 Finally, some packages do not have these files and use a somewhat standard
9296 location for its build system. In that case, the build system will run
9297 @code{ocaml pkg/pkg.ml} or @code{ocaml pkg/build.ml} and take care of
9298 providing the path to the required findlib module. Additional flags can
9299 be passed via the @code{#:build-flags} key. Install is taken care of by
9300 @command{opam-installer}. In this case, the @code{opam} package must
9301 be added to the @code{native-inputs} field of the package definition.
9302
9303 Note that most OCaml packages assume they will be installed in the same
9304 directory as OCaml, which is not what we want in guix. In particular, they
9305 will install @file{.so} files in their module's directory, which is usually
9306 fine because it is in the OCaml compiler directory. In guix though, these
9307 libraries cannot be found and we use @env{CAML_LD_LIBRARY_PATH}. This
9308 variable points to @file{lib/ocaml/site-lib/stubslibs} and this is where
9309 @file{.so} libraries should be installed.
9310 @end defvr
9311
9312 @defvr {Scheme Variable} python-build-system
9313 This variable is exported by @code{(guix build-system python)}. It
9314 implements the more or less standard build procedure used by Python
9315 packages, which consists in running @code{python setup.py build} and
9316 then @code{python setup.py install --prefix=/gnu/store/@dots{}}.
9317
9318 For packages that install stand-alone Python programs under @code{bin/},
9319 it takes care of wrapping these programs so that their
9320 @env{GUIX_PYTHONPATH} environment variable points to all the Python
9321 libraries they depend on.
9322
9323 Which Python package is used to perform the build can be specified with
9324 the @code{#:python} parameter. This is a useful way to force a package
9325 to be built for a specific version of the Python interpreter, which
9326 might be necessary if the package is only compatible with a single
9327 interpreter version.
9328
9329 By default guix calls @code{setup.py} under control of
9330 @code{setuptools}, much like @command{pip} does. Some packages are not
9331 compatible with setuptools (and pip), thus you can disable this by
9332 setting the @code{#:use-setuptools?} parameter to @code{#f}.
9333
9334 If a @code{"python"} output is available, the package is installed into it
9335 instead of the default @code{"out"} output. This is useful for packages that
9336 include a Python package as only a part of the software, and thus want to
9337 combine the phases of @code{python-build-system} with another build system.
9338 Python bindings are a common usecase.
9339 @end defvr
9340
9341 @defvr {Scheme Variable} pyproject-build-system
9342 This is a variable exported by @code{guix build-system pyproject}. It
9343 is based on @var{python-build-system}, and adds support for
9344 @file{pyproject.toml} and @url{https://peps.python.org/pep-0517/, PEP 517}.
9345 It also supports a variety of build backends and test frameworks.
9346
9347 The API is slightly different from @var{python-build-system}:
9348 @itemize
9349 @item
9350 @code{#:use-setuptools?} and @code{#:test-target} is removed.
9351 @item
9352 @code{#:build-backend} is added. It defaults to @code{#false} and will try
9353 to guess the appropriate backend based on @file{pyproject.toml}.
9354 @item
9355 @code{#:test-backend} is added. It defaults to @code{#false} and will guess
9356 an appropriate test backend based on what is available in package inputs.
9357 @item
9358 @code{#:test-flags} is added. The default is @code{'()}. These flags are
9359 passed as arguments to the test command. Note that flags for verbose output
9360 is always enabled on supported backends.
9361 @end itemize
9362
9363 It is considered ``experimental'' in that the implementation details are
9364 not set in stone yet, however users are encouraged to try it for new
9365 Python projects (even those using @file{setup.py}). The API is subject to
9366 change, but any breaking changes in the Guix channel will be dealt with.
9367
9368 Eventually this build system will be deprecated and merged back into
9369 @var{python-build-system}, probably some time in 2024.
9370 @end defvr
9371
9372 @defvr {Scheme Variable} perl-build-system
9373 This variable is exported by @code{(guix build-system perl)}. It
9374 implements the standard build procedure for Perl packages, which either
9375 consists in running @code{perl Build.PL --prefix=/gnu/store/@dots{}},
9376 followed by @code{Build} and @code{Build install}; or in running
9377 @code{perl Makefile.PL PREFIX=/gnu/store/@dots{}}, followed by
9378 @code{make} and @code{make install}, depending on which of
9379 @code{Build.PL} or @code{Makefile.PL} is present in the package
9380 distribution. Preference is given to the former if both @code{Build.PL}
9381 and @code{Makefile.PL} exist in the package distribution. This
9382 preference can be reversed by specifying @code{#t} for the
9383 @code{#:make-maker?} parameter.
9384
9385 The initial @code{perl Makefile.PL} or @code{perl Build.PL} invocation
9386 passes flags specified by the @code{#:make-maker-flags} or
9387 @code{#:module-build-flags} parameter, respectively.
9388
9389 Which Perl package is used can be specified with @code{#:perl}.
9390 @end defvr
9391
9392 @defvr {Scheme Variable} renpy-build-system
9393 This variable is exported by @code{(guix build-system renpy)}. It implements
9394 the more or less standard build procedure used by Ren'py games, which consists
9395 of loading @code{#:game} once, thereby creating bytecode for it.
9396
9397 It further creates a wrapper script in @code{bin/} and a desktop entry in
9398 @code{share/applications}, both of which can be used to launch the game.
9399
9400 Which Ren'py package is used can be specified with @code{#:renpy}.
9401 Games can also be installed in outputs other than ``out'' by using
9402 @code{#:output}.
9403 @end defvr
9404
9405 @defvr {Scheme Variable} qt-build-system
9406 This variable is exported by @code{(guix build-system qt)}. It
9407 is intended for use with applications using Qt or KDE.
9408
9409 This build system adds the following two phases to the ones defined by
9410 @code{cmake-build-system}:
9411
9412 @table @code
9413 @item check-setup
9414 The phase @code{check-setup} prepares the environment for running
9415 the checks as commonly used by Qt test programs.
9416 For now this only sets some environment variables:
9417 @code{QT_QPA_PLATFORM=offscreen},
9418 @code{DBUS_FATAL_WARNINGS=0} and
9419 @code{CTEST_OUTPUT_ON_FAILURE=1}.
9420
9421 This phase is added before the @code{check} phase.
9422 It's a separate phase to ease adjusting if necessary.
9423
9424 @item qt-wrap
9425 The phase @code{qt-wrap}
9426 searches for Qt5 plugin paths, QML paths and some XDG in the inputs
9427 and output. In case some path is found, all programs in the output's
9428 @file{bin/}, @file{sbin/}, @file{libexec/} and @file{lib/libexec/} directories
9429 are wrapped in scripts defining the necessary environment variables.
9430
9431 It is possible to exclude specific package outputs from that wrapping process
9432 by listing their names in the @code{#:qt-wrap-excluded-outputs} parameter.
9433 This is useful when an output is known not to contain any Qt binaries, and
9434 where wrapping would gratuitously add a dependency of that output on Qt, KDE,
9435 or such.
9436
9437 This phase is added after the @code{install} phase.
9438 @end table
9439 @end defvr
9440
9441 @defvr {Scheme Variable} r-build-system
9442 This variable is exported by @code{(guix build-system r)}. It
9443 implements the build procedure used by @uref{https://r-project.org, R}
9444 packages, which essentially is little more than running @samp{R CMD
9445 INSTALL --library=/gnu/store/@dots{}} in an environment where
9446 @env{R_LIBS_SITE} contains the paths to all R package inputs. Tests are
9447 run after installation using the R function
9448 @code{tools::testInstalledPackage}.
9449 @end defvr
9450
9451 @defvr {Scheme Variable} rakudo-build-system
9452 This variable is exported by @code{(guix build-system rakudo)}. It
9453 implements the build procedure used by @uref{https://rakudo.org/,
9454 Rakudo} for @uref{https://perl6.org/, Perl6} packages. It installs the
9455 package to @code{/gnu/store/@dots{}/NAME-VERSION/share/perl6} and
9456 installs the binaries, library files and the resources, as well as wrap
9457 the files under the @code{bin/} directory. Tests can be skipped by
9458 passing @code{#f} to the @code{tests?} parameter.
9459
9460 Which rakudo package is used can be specified with @code{rakudo}.
9461 Which perl6-tap-harness package used for the tests can be specified with
9462 @code{#:prove6} or removed by passing @code{#f} to the
9463 @code{with-prove6?} parameter.
9464 Which perl6-zef package used for tests and installing can be specified
9465 with @code{#:zef} or removed by passing @code{#f} to the
9466 @code{with-zef?} parameter.
9467 @end defvr
9468
9469 @defvr {Scheme Variable} rebar-build-system
9470 This variable is exported by @code{(guix build-system rebar)}. It
9471 implements a build procedure around @uref{https://rebar3.org,rebar3},
9472 a build system for programs written in the Erlang language.
9473
9474 It adds both @code{rebar3} and the @code{erlang} to the set of inputs.
9475 Different packages can be specified with the @code{#:rebar} and
9476 @code{#:erlang} parameters, respectively.
9477
9478 This build system is based on @code{gnu-build-system}, but with the
9479 following phases changed:
9480
9481 @table @code
9482
9483 @item unpack
9484 This phase, after unpacking the source like the @code{gnu-build-system}
9485 does, checks for a file @code{contents.tar.gz} at the top-level of the
9486 source. If this file exists, it will be unpacked, too. This eases
9487 handling of package hosted at @uref{https://hex.pm/},
9488 the Erlang and Elixir package repository.
9489
9490 @item bootstrap
9491 @item configure
9492 There are no @code{bootstrap} and @code{configure} phase because erlang
9493 packages typically don’t need to be configured.
9494
9495 @item build
9496 This phase runs @code{rebar3 compile}
9497 with the flags listed in @code{#:rebar-flags}.
9498
9499 @item check
9500 Unless @code{#:tests? #f} is passed,
9501 this phase runs @code{rebar3 eunit},
9502 or some other target specified with @code{#:test-target},
9503 with the flags listed in @code{#:rebar-flags},
9504
9505 @item install
9506 This installs the files created in the @i{default} profile, or some
9507 other profile specified with @code{#:install-profile}.
9508
9509 @end table
9510 @end defvr
9511
9512 @defvr {Scheme Variable} texlive-build-system
9513 This variable is exported by @code{(guix build-system texlive)}. It is
9514 used to build TeX packages in batch mode with a specified engine. The
9515 build system sets the @env{TEXINPUTS} variable to find all TeX source
9516 files in the inputs.
9517
9518 By default it runs @code{luatex} on all files ending on @code{ins}. A
9519 different engine and format can be specified with the
9520 @code{#:tex-format} argument. Different build targets can be specified
9521 with the @code{#:build-targets} argument, which expects a list of file
9522 names. The build system adds only @code{texlive-bin} and
9523 @code{texlive-latex-base} (both from @code{(gnu packages tex}) to the
9524 inputs. Both can be overridden with the arguments @code{#:texlive-bin}
9525 and @code{#:texlive-latex-base}, respectively.
9526
9527 The @code{#:tex-directory} parameter tells the build system where to
9528 install the built files under the texmf tree.
9529 @end defvr
9530
9531 @defvr {Scheme Variable} ruby-build-system
9532 This variable is exported by @code{(guix build-system ruby)}. It
9533 implements the RubyGems build procedure used by Ruby packages, which
9534 involves running @code{gem build} followed by @code{gem install}.
9535
9536 The @code{source} field of a package that uses this build system
9537 typically references a gem archive, since this is the format that Ruby
9538 developers use when releasing their software. The build system unpacks
9539 the gem archive, potentially patches the source, runs the test suite,
9540 repackages the gem, and installs it. Additionally, directories and
9541 tarballs may be referenced to allow building unreleased gems from Git or
9542 a traditional source release tarball.
9543
9544 Which Ruby package is used can be specified with the @code{#:ruby}
9545 parameter. A list of additional flags to be passed to the @command{gem}
9546 command can be specified with the @code{#:gem-flags} parameter.
9547 @end defvr
9548
9549 @defvr {Scheme Variable} waf-build-system
9550 This variable is exported by @code{(guix build-system waf)}. It
9551 implements a build procedure around the @code{waf} script. The common
9552 phases---@code{configure}, @code{build}, and @code{install}---are
9553 implemented by passing their names as arguments to the @code{waf}
9554 script.
9555
9556 The @code{waf} script is executed by the Python interpreter. Which
9557 Python package is used to run the script can be specified with the
9558 @code{#:python} parameter.
9559 @end defvr
9560
9561 @defvr {Scheme Variable} scons-build-system
9562 This variable is exported by @code{(guix build-system scons)}. It
9563 implements the build procedure used by the SCons software construction
9564 tool. This build system runs @code{scons} to build the package,
9565 @code{scons test} to run tests, and then @code{scons install} to install
9566 the package.
9567
9568 Additional flags to be passed to @code{scons} can be specified with the
9569 @code{#:scons-flags} parameter. The default build and install targets
9570 can be overridden with @code{#:build-targets} and
9571 @code{#:install-targets} respectively. The version of Python used to
9572 run SCons can be specified by selecting the appropriate SCons package
9573 with the @code{#:scons} parameter.
9574 @end defvr
9575
9576 @defvr {Scheme Variable} haskell-build-system
9577 This variable is exported by @code{(guix build-system haskell)}. It
9578 implements the Cabal build procedure used by Haskell packages, which
9579 involves running @code{runhaskell Setup.hs configure
9580 --prefix=/gnu/store/@dots{}} and @code{runhaskell Setup.hs build}.
9581 Instead of installing the package by running @code{runhaskell Setup.hs
9582 install}, to avoid trying to register libraries in the read-only
9583 compiler store directory, the build system uses @code{runhaskell
9584 Setup.hs copy}, followed by @code{runhaskell Setup.hs register}. In
9585 addition, the build system generates the package documentation by
9586 running @code{runhaskell Setup.hs haddock}, unless @code{#:haddock? #f}
9587 is passed. Optional Haddock parameters can be passed with the help of
9588 the @code{#:haddock-flags} parameter. If the file @code{Setup.hs} is
9589 not found, the build system looks for @code{Setup.lhs} instead.
9590
9591 Which Haskell compiler is used can be specified with the @code{#:haskell}
9592 parameter which defaults to @code{ghc}.
9593 @end defvr
9594
9595 @defvr {Scheme Variable} dub-build-system
9596 This variable is exported by @code{(guix build-system dub)}. It
9597 implements the Dub build procedure used by D packages, which
9598 involves running @code{dub build} and @code{dub run}.
9599 Installation is done by copying the files manually.
9600
9601 Which D compiler is used can be specified with the @code{#:ldc}
9602 parameter which defaults to @code{ldc}.
9603 @end defvr
9604
9605 @anchor{emacs-build-system}
9606 @defvr {Scheme Variable} emacs-build-system
9607 This variable is exported by @code{(guix build-system emacs)}. It
9608 implements an installation procedure similar to the packaging system
9609 of Emacs itself (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
9610
9611 It first creates the @code{@code{package}-autoloads.el} file, then it
9612 byte compiles all Emacs Lisp files. Differently from the Emacs
9613 packaging system, the Info documentation files are moved to the standard
9614 documentation directory and the @file{dir} file is deleted. The Elisp
9615 package files are installed directly under @file{share/emacs/site-lisp}.
9616 @end defvr
9617
9618 @defvr {Scheme Variable} font-build-system
9619 This variable is exported by @code{(guix build-system font)}. It
9620 implements an installation procedure for font packages where upstream
9621 provides pre-compiled TrueType, OpenType, etc.@: font files that merely
9622 need to be copied into place. It copies font files to standard
9623 locations in the output directory.
9624 @end defvr
9625
9626 @defvr {Scheme Variable} meson-build-system
9627 This variable is exported by @code{(guix build-system meson)}. It
9628 implements the build procedure for packages that use
9629 @url{https://mesonbuild.com, Meson} as their build system.
9630
9631 It adds both Meson and @uref{https://ninja-build.org/, Ninja} to the set
9632 of inputs, and they can be changed with the parameters @code{#:meson}
9633 and @code{#:ninja} if needed.
9634
9635 This build system is an extension of @code{gnu-build-system}, but with the
9636 following phases changed to some specific for Meson:
9637
9638 @table @code
9639
9640 @item configure
9641 The phase runs @code{meson} with the flags specified in
9642 @code{#:configure-flags}. The flag @option{--buildtype} is always set to
9643 @code{debugoptimized} unless something else is specified in
9644 @code{#:build-type}.
9645
9646 @item build
9647 The phase runs @code{ninja} to build the package in parallel by default, but
9648 this can be changed with @code{#:parallel-build?}.
9649
9650 @item check
9651 The phase runs @samp{meson test} with a base set of options that cannot
9652 be overridden. This base set of options can be extended via the
9653 @code{#:test-options} argument, for example to select or skip a specific
9654 test suite.
9655
9656 @item install
9657 The phase runs @code{ninja install} and can not be changed.
9658 @end table
9659
9660 Apart from that, the build system also adds the following phases:
9661
9662 @table @code
9663
9664 @item fix-runpath
9665 This phase ensures that all binaries can find the libraries they need.
9666 It searches for required libraries in subdirectories of the package
9667 being built, and adds those to @code{RUNPATH} where needed. It also
9668 removes references to libraries left over from the build phase by
9669 @code{meson}, such as test dependencies, that aren't actually required
9670 for the program to run.
9671
9672 @item glib-or-gtk-wrap
9673 This phase is the phase provided by @code{glib-or-gtk-build-system}, and it
9674 is not enabled by default. It can be enabled with @code{#:glib-or-gtk?}.
9675
9676 @item glib-or-gtk-compile-schemas
9677 This phase is the phase provided by @code{glib-or-gtk-build-system}, and it
9678 is not enabled by default. It can be enabled with @code{#:glib-or-gtk?}.
9679 @end table
9680 @end defvr
9681
9682 @defvr {Scheme Variable} linux-module-build-system
9683 @code{linux-module-build-system} allows building Linux kernel modules.
9684
9685 @cindex build phases
9686 This build system is an extension of @code{gnu-build-system}, but with the
9687 following phases changed:
9688
9689 @table @code
9690
9691 @item configure
9692 This phase configures the environment so that the Linux kernel's Makefile
9693 can be used to build the external kernel module.
9694
9695 @item build
9696 This phase uses the Linux kernel's Makefile in order to build the external
9697 kernel module.
9698
9699 @item install
9700 This phase uses the Linux kernel's Makefile in order to install the external
9701 kernel module.
9702 @end table
9703
9704 It is possible and useful to specify the Linux kernel to use for building
9705 the module (in the @code{arguments} form of a package using the
9706 @code{linux-module-build-system}, use the key @code{#:linux} to specify it).
9707 @end defvr
9708
9709 @defvr {Scheme Variable} node-build-system
9710 This variable is exported by @code{(guix build-system node)}. It
9711 implements the build procedure used by @uref{https://nodejs.org,
9712 Node.js}, which implements an approximation of the @code{npm install}
9713 command, followed by an @code{npm test} command.
9714
9715 Which Node.js package is used to interpret the @code{npm} commands can
9716 be specified with the @code{#:node} parameter which defaults to
9717 @code{node}.
9718 @end defvr
9719
9720 Lastly, for packages that do not need anything as sophisticated, a
9721 ``trivial'' build system is provided. It is trivial in the sense that
9722 it provides basically no support: it does not pull any implicit inputs,
9723 and does not have a notion of build phases.
9724
9725 @defvr {Scheme Variable} trivial-build-system
9726 This variable is exported by @code{(guix build-system trivial)}.
9727
9728 This build system requires a @code{#:builder} argument. This argument
9729 must be a Scheme expression that builds the package output(s)---as
9730 with @code{build-expression->derivation} (@pxref{Derivations,
9731 @code{build-expression->derivation}}).
9732 @end defvr
9733
9734 @defvr {Scheme Variable} channel-build-system
9735 This variable is exported by @code{(guix build-system channel)}.
9736
9737 This build system is meant primarily for internal use. A package using
9738 this build system must have a channel specification as its @code{source}
9739 field (@pxref{Channels}); alternatively, its source can be a directory
9740 name, in which case an additional @code{#:commit} argument must be
9741 supplied to specify the commit being built (a hexadecimal string).
9742
9743 The resulting package is a Guix instance of the given channel, similar
9744 to how @command{guix time-machine} would build it.
9745 @end defvr
9746
9747 @node Build Phases
9748 @section Build Phases
9749
9750 @cindex build phases, for packages
9751 Almost all package build systems implement a notion @dfn{build phases}:
9752 a sequence of actions that the build system executes, when you build the
9753 package, leading to the installed byproducts in the store. A notable
9754 exception is the ``bare-bones'' @code{trivial-build-system}
9755 (@pxref{Build Systems}).
9756
9757 As discussed in the previous section, those build systems provide a
9758 standard list of phases. For @code{gnu-build-system}, the main build
9759 phases are the following:
9760
9761 @table @code
9762 @item set-paths
9763 Define search path environment variables for all the input packages,
9764 including @env{PATH} (@pxref{Search Paths}).
9765
9766 @item unpack
9767 Unpack the source tarball, and change the current directory to the
9768 extracted source tree. If the source is actually a directory, copy it
9769 to the build tree, and enter that directory.
9770
9771 @item patch-source-shebangs
9772 Patch shebangs encountered in source files so they refer to the right
9773 store file names. For instance, this changes @code{#!/bin/sh} to
9774 @code{#!/gnu/store/@dots{}-bash-4.3/bin/sh}.
9775
9776 @item configure
9777 Run the @file{configure} script with a number of default options, such
9778 as @option{--prefix=/gnu/store/@dots{}}, as well as the options specified
9779 by the @code{#:configure-flags} argument.
9780
9781 @item build
9782 Run @code{make} with the list of flags specified with
9783 @code{#:make-flags}. If the @code{#:parallel-build?} argument is true
9784 (the default), build with @code{make -j}.
9785
9786 @item check
9787 Run @code{make check}, or some other target specified with
9788 @code{#:test-target}, unless @code{#:tests? #f} is passed. If the
9789 @code{#:parallel-tests?} argument is true (the default), run @code{make
9790 check -j}.
9791
9792 @item install
9793 Run @code{make install} with the flags listed in @code{#:make-flags}.
9794
9795 @item patch-shebangs
9796 Patch shebangs on the installed executable files.
9797
9798 @item strip
9799 Strip debugging symbols from ELF files (unless @code{#:strip-binaries?}
9800 is false), copying them to the @code{debug} output when available
9801 (@pxref{Installing Debugging Files}).
9802
9803 @cindex RUNPATH, validation
9804 @anchor{phase-validate-runpath}
9805 @item validate-runpath
9806 Validate the @code{RUNPATH} of ELF binaries, unless
9807 @code{#:validate-runpath?} is false (@pxref{Build Systems}).
9808
9809 This validation step consists in making sure that all the shared
9810 libraries needed by an ELF binary, which are listed as @code{DT_NEEDED}
9811 entries in its @code{PT_DYNAMIC} segment, appear in the
9812 @code{DT_RUNPATH} entry of that binary. In other words, it ensures that
9813 running or using those binaries will not result in a ``file not found''
9814 error at run time. @xref{Options, @option{-rpath},, ld, The GNU
9815 Linker}, for more information on @code{RUNPATH}.
9816
9817 @end table
9818
9819 Other build systems have similar phases, with some variations. For
9820 example, @code{cmake-build-system} has same-named phases but its
9821 @code{configure} phases runs @code{cmake} instead of @code{./configure}.
9822 Others, such as @code{python-build-system}, have a wholly different list
9823 of standard phases. All this code runs on the @dfn{build side}: it is
9824 evaluated when you actually build the package, in a dedicated build
9825 process spawned by the build daemon (@pxref{Invoking guix-daemon}).
9826
9827 Build phases are represented as association lists or ``alists''
9828 (@pxref{Association Lists,,, guile, GNU Guile Reference Manual}) where
9829 each key is a symbol for the name of the phase and the associated value
9830 is a procedure that accepts an arbitrary number of arguments. By
9831 convention, those procedures receive information about the build in the
9832 form of @dfn{keyword parameters}, which they can use or ignore.
9833
9834 @vindex %standard-phases
9835 For example, here is how @code{(guix build gnu-build-system)} defines
9836 @code{%standard-phases}, the variable holding its alist of build
9837 phases@footnote{We present a simplified view of those build phases, but
9838 do take a look at @code{(guix build gnu-build-system)} to see all the
9839 details!}:
9840
9841 @lisp
9842 ;; The build phases of 'gnu-build-system'.
9843
9844 (define* (unpack #:key source #:allow-other-keys)
9845 ;; Extract the source tarball.
9846 (invoke "tar" "xvf" source))
9847
9848 (define* (configure #:key outputs #:allow-other-keys)
9849 ;; Run the 'configure' script. Install to output "out".
9850 (let ((out (assoc-ref outputs "out")))
9851 (invoke "./configure"
9852 (string-append "--prefix=" out))))
9853
9854 (define* (build #:allow-other-keys)
9855 ;; Compile.
9856 (invoke "make"))
9857
9858 (define* (check #:key (test-target "check") (tests? #true)
9859 #:allow-other-keys)
9860 ;; Run the test suite.
9861 (if tests?
9862 (invoke "make" test-target)
9863 (display "test suite not run\n")))
9864
9865 (define* (install #:allow-other-keys)
9866 ;; Install files to the prefix 'configure' specified.
9867 (invoke "make" "install"))
9868
9869 (define %standard-phases
9870 ;; The list of standard phases (quite a few are omitted
9871 ;; for brevity). Each element is a symbol/procedure pair.
9872 (list (cons 'unpack unpack)
9873 (cons 'configure configure)
9874 (cons 'build build)
9875 (cons 'check check)
9876 (cons 'install install)))
9877 @end lisp
9878
9879 This shows how @code{%standard-phases} is defined as a list of
9880 symbol/procedure pairs (@pxref{Pairs,,, guile, GNU Guile Reference
9881 Manual}). The first pair associates the @code{unpack} procedure with
9882 the @code{unpack} symbol---a name; the second pair defines the
9883 @code{configure} phase similarly, and so on. When building a package
9884 that uses @code{gnu-build-system} with its default list of phases, those
9885 phases are executed sequentially. You can see the name of each phase
9886 started and completed in the build log of packages that you build.
9887
9888 Let's now look at the procedures themselves. Each one is defined with
9889 @code{define*}: @code{#:key} lists keyword parameters the procedure
9890 accepts, possibly with a default value, and @code{#:allow-other-keys}
9891 specifies that other keyword parameters are ignored (@pxref{Optional
9892 Arguments,,, guile, GNU Guile Reference Manual}).
9893
9894 The @code{unpack} procedure honors the @code{source} parameter, which
9895 the build system uses to pass the file name of the source tarball (or
9896 version control checkout), and it ignores other parameters. The
9897 @code{configure} phase only cares about the @code{outputs} parameter, an
9898 alist mapping package output names to their store file name
9899 (@pxref{Packages with Multiple Outputs}). It extracts the file name of
9900 for @code{out}, the default output, and passes it to
9901 @command{./configure} as the installation prefix, meaning that
9902 @command{make install} will eventually copy all the files in that
9903 directory (@pxref{Configuration, configuration and makefile
9904 conventions,, standards, GNU Coding Standards}). @code{build} and
9905 @code{install} ignore all their arguments. @code{check} honors the
9906 @code{test-target} argument, which specifies the name of the Makefile
9907 target to run tests; it prints a message and skips tests when
9908 @code{tests?} is false.
9909
9910 @cindex build phases, customizing
9911 The list of phases used for a particular package can be changed with the
9912 @code{#:phases} parameter of the build system. Changing the set of
9913 build phases boils down to building a new alist of phases based on the
9914 @code{%standard-phases} alist described above. This can be done with
9915 standard alist procedures such as @code{alist-delete} (@pxref{SRFI-1
9916 Association Lists,,, guile, GNU Guile Reference Manual}); however, it is
9917 more convenient to do so with @code{modify-phases} (@pxref{Build
9918 Utilities, @code{modify-phases}}).
9919
9920 Here is an example of a package definition that removes the
9921 @code{configure} phase of @code{%standard-phases} and inserts a new
9922 phase before the @code{build} phase, called
9923 @code{set-prefix-in-makefile}:
9924
9925 @lisp
9926 (define-public example
9927 (package
9928 (name "example")
9929 ;; other fields omitted
9930 (build-system gnu-build-system)
9931 (arguments
9932 '(#:phases (modify-phases %standard-phases
9933 (delete 'configure)
9934 (add-before 'build 'set-prefix-in-makefile
9935 (lambda* (#:key outputs #:allow-other-keys)
9936 ;; Modify the makefile so that its
9937 ;; 'PREFIX' variable points to "out".
9938 (let ((out (assoc-ref outputs "out")))
9939 (substitute* "Makefile"
9940 (("PREFIX =.*")
9941 (string-append "PREFIX = "
9942 out "\n")))))))))))
9943 @end lisp
9944
9945 The new phase that is inserted is written as an anonymous procedure,
9946 introduced with @code{lambda*}; it honors the @code{outputs} parameter
9947 we have seen before. @xref{Build Utilities}, for more about the helpers
9948 used by this phase, and for more examples of @code{modify-phases}.
9949
9950 @cindex code staging
9951 @cindex staging, of code
9952 Keep in mind that build phases are code evaluated at the time the
9953 package is actually built. This explains why the whole
9954 @code{modify-phases} expression above is quoted (it comes after the
9955 @code{'} or apostrophe): it is @dfn{staged} for later execution.
9956 @xref{G-Expressions}, for an explanation of code staging and the
9957 @dfn{code strata} involved.
9958
9959 @node Build Utilities
9960 @section Build Utilities
9961
9962 As soon as you start writing non-trivial package definitions
9963 (@pxref{Defining Packages}) or other build actions
9964 (@pxref{G-Expressions}), you will likely start looking for helpers for
9965 ``shell-like'' actions---creating directories, copying and deleting
9966 files recursively, manipulating build phases, and so on. The
9967 @code{(guix build utils)} module provides such utility procedures.
9968
9969 Most build systems load @code{(guix build utils)} (@pxref{Build
9970 Systems}). Thus, when writing custom build phases for your package
9971 definitions, you can usually assume those procedures are in scope.
9972
9973 When writing G-expressions, you can import @code{(guix build utils)} on
9974 the ``build side'' using @code{with-imported-modules} and then put it in
9975 scope with the @code{use-modules} form (@pxref{Using Guile Modules,,,
9976 guile, GNU Guile Reference Manual}):
9977
9978 @lisp
9979 (with-imported-modules '((guix build utils)) ;import it
9980 (computed-file "empty-tree"
9981 #~(begin
9982 ;; Put it in scope.
9983 (use-modules (guix build utils))
9984
9985 ;; Happily use its 'mkdir-p' procedure.
9986 (mkdir-p (string-append #$output "/a/b/c")))))
9987 @end lisp
9988
9989 The remainder of this section is the reference for most of the utility
9990 procedures provided by @code{(guix build utils)}.
9991
9992 @c TODO Document what's missing.
9993
9994 @subsection Dealing with Store File Names
9995
9996 This section documents procedures that deal with store file names.
9997
9998 @deffn {Scheme Procedure} %store-directory
9999 Return the directory name of the store.
10000 @end deffn
10001
10002 @deffn {Scheme Procedure} store-file-name? @var{file}
10003 Return true if @var{file} is in the store.
10004 @end deffn
10005
10006 @deffn {Scheme Procedure} strip-store-file-name @var{file}
10007 Strip the @file{/gnu/store} and hash from @var{file}, a store file name.
10008 The result is typically a @code{"@var{package}-@var{version}"} string.
10009 @end deffn
10010
10011 @deffn {Scheme Procedure} package-name->name+version @var{name}
10012 Given @var{name}, a package name like @code{"foo-0.9.1b"}, return two
10013 values: @code{"foo"} and @code{"0.9.1b"}. When the version part is
10014 unavailable, @var{name} and @code{#f} are returned. The first hyphen
10015 followed by a digit is considered to introduce the version part.
10016 @end deffn
10017
10018 @subsection File Types
10019
10020 The procedures below deal with files and file types.
10021
10022 @deffn {Scheme Procedure} directory-exists? @var{dir}
10023 Return @code{#t} if @var{dir} exists and is a directory.
10024 @end deffn
10025
10026 @deffn {Scheme Procedure} executable-file? @var{file}
10027 Return @code{#t} if @var{file} exists and is executable.
10028 @end deffn
10029
10030 @deffn {Scheme Procedure} symbolic-link? @var{file}
10031 Return @code{#t} if @var{file} is a symbolic link (aka. a ``symlink'').
10032 @end deffn
10033
10034 @deffn {Scheme Procedure} elf-file? @var{file}
10035 @deffnx {Scheme Procedure} ar-file? @var{file}
10036 @deffnx {Scheme Procedure} gzip-file? @var{file}
10037 Return @code{#t} if @var{file} is, respectively, an ELF file, an
10038 @code{ar} archive (such as a @file{.a} static library), or a gzip file.
10039 @end deffn
10040
10041 @deffn {Scheme Procedure} reset-gzip-timestamp @var{file} [#:keep-mtime? #t]
10042 If @var{file} is a gzip file, reset its embedded timestamp (as with
10043 @command{gzip --no-name}) and return true. Otherwise return @code{#f}.
10044 When @var{keep-mtime?} is true, preserve @var{file}'s modification time.
10045 @end deffn
10046
10047 @subsection File Manipulation
10048
10049 The following procedures and macros help create, modify, and delete
10050 files. They provide functionality comparable to common shell utilities
10051 such as @command{mkdir -p}, @command{cp -r}, @command{rm -r}, and
10052 @command{sed}. They complement Guile's extensive, but low-level, file
10053 system interface (@pxref{POSIX,,, guile, GNU Guile Reference Manual}).
10054
10055 @deffn {Scheme Syntax} with-directory-excursion @var{directory} @var{body}@dots{}
10056 Run @var{body} with @var{directory} as the process's current directory.
10057
10058 Essentially, this macro changes the current directory to @var{directory}
10059 before evaluating @var{body}, using @code{chdir} (@pxref{Processes,,,
10060 guile, GNU Guile Reference Manual}). It changes back to the initial
10061 directory when the dynamic extent of @var{body} is left, be it @i{via}
10062 normal procedure return or @i{via} a non-local exit such as an
10063 exception.
10064 @end deffn
10065
10066 @deffn {Scheme Procedure} mkdir-p @var{dir}
10067 Create directory @var{dir} and all its ancestors.
10068 @end deffn
10069
10070 @deffn {Scheme Procedure} install-file @var{file} @var{directory}
10071 Create @var{directory} if it does not exist and copy @var{file} in there
10072 under the same name.
10073 @end deffn
10074
10075 @deffn {Scheme Procedure} make-file-writable @var{file}
10076 Make @var{file} writable for its owner.
10077 @end deffn
10078
10079 @deffn {Scheme Procedure} copy-recursively @var{source} @var{destination} @
10080 [#:log (current-output-port)] [#:follow-symlinks? #f] @
10081 [#:copy-file copy-file] [#:keep-mtime? #f] [#:keep-permissions? #t]
10082 Copy @var{source} directory to @var{destination}. Follow symlinks if
10083 @var{follow-symlinks?} is true; otherwise, just preserve them. Call
10084 @var{copy-file} to copy regular files. When @var{keep-mtime?} is true,
10085 keep the modification time of the files in @var{source} on those of
10086 @var{destination}. When @var{keep-permissions?} is true, preserve file
10087 permissions. Write verbose output to the @var{log} port.
10088 @end deffn
10089
10090 @deffn {Scheme Procedure} delete-file-recursively @var{dir} @
10091 [#:follow-mounts? #f]
10092 Delete @var{dir} recursively, like @command{rm -rf}, without following
10093 symlinks. Don't follow mount points either, unless @var{follow-mounts?}
10094 is true. Report but ignore errors.
10095 @end deffn
10096
10097 @deffn {Scheme Syntax} substitute* @var{file} @
10098 ((@var{regexp} @var{match-var}@dots{}) @var{body}@dots{}) @dots{}
10099 Substitute @var{regexp} in @var{file} by the string returned by
10100 @var{body}. @var{body} is evaluated with each @var{match-var} bound to
10101 the corresponding positional regexp sub-expression. For example:
10102
10103 @lisp
10104 (substitute* file
10105 (("hello")
10106 "good morning\n")
10107 (("foo([a-z]+)bar(.*)$" all letters end)
10108 (string-append "baz" letters end)))
10109 @end lisp
10110
10111 Here, anytime a line of @var{file} contains @code{hello}, it is replaced
10112 by @code{good morning}. Anytime a line of @var{file} matches the second
10113 regexp, @code{all} is bound to the complete match, @code{letters} is bound
10114 to the first sub-expression, and @code{end} is bound to the last one.
10115
10116 When one of the @var{match-var} is @code{_}, no variable is bound to the
10117 corresponding match substring.
10118
10119 Alternatively, @var{file} may be a list of file names, in which case
10120 they are all subject to the substitutions.
10121
10122 Be careful about using @code{$} to match the end of a line; by itself it
10123 won't match the terminating newline of a line.
10124 @end deffn
10125
10126 @subsection File Search
10127
10128 @cindex file, searching
10129 This section documents procedures to search and filter files.
10130
10131 @deffn {Scheme Procedure} file-name-predicate @var{regexp}
10132 Return a predicate that returns true when passed a file name whose base
10133 name matches @var{regexp}.
10134 @end deffn
10135
10136 @deffn {Scheme Procedure} find-files @var{dir} [@var{pred}] @
10137 [#:stat lstat] [#:directories? #f] [#:fail-on-error? #f]
10138 Return the lexicographically sorted list of files under @var{dir} for
10139 which @var{pred} returns true. @var{pred} is passed two arguments: the
10140 absolute file name, and its stat buffer; the default predicate always
10141 returns true. @var{pred} can also be a regular expression, in which
10142 case it is equivalent to @code{(file-name-predicate @var{pred})}.
10143 @var{stat} is used to obtain file information; using @code{lstat} means
10144 that symlinks are not followed. If @var{directories?} is true, then
10145 directories will also be included. If @var{fail-on-error?} is true,
10146 raise an exception upon error.
10147 @end deffn
10148
10149 Here are a few examples where we assume that the current directory is
10150 the root of the Guix source tree:
10151
10152 @lisp
10153 ;; List all the regular files in the current directory.
10154 (find-files ".")
10155 @result{} ("./.dir-locals.el" "./.gitignore" @dots{})
10156
10157 ;; List all the .scm files under gnu/services.
10158 (find-files "gnu/services" "\\.scm$")
10159 @result{} ("gnu/services/admin.scm" "gnu/services/audio.scm" @dots{})
10160
10161 ;; List ar files in the current directory.
10162 (find-files "." (lambda (file stat) (ar-file? file)))
10163 @result{} ("./libformat.a" "./libstore.a" @dots{})
10164 @end lisp
10165
10166 @deffn {Scheme Procedure} which @var{program}
10167 Return the complete file name for @var{program} as found in
10168 @code{$PATH}, or @code{#f} if @var{program} could not be found.
10169 @end deffn
10170
10171 @deffn {Scheme Procedure} search-input-file @var{inputs} @var{name}
10172 @deffnx {Scheme Procedure} search-input-directory @var{inputs} @var{name}
10173 Return the complete file name for @var{name} as found in @var{inputs};
10174 @code{search-input-file} searches for a regular file and
10175 @code{search-input-directory} searches for a directory. If @var{name}
10176 could not be found, an exception is raised.
10177
10178 Here, @var{inputs} must be an association list like @code{inputs} and
10179 @code{native-inputs} as available to build phases (@pxref{Build
10180 Phases}).
10181 @end deffn
10182
10183 Here is a (simplified) example of how @code{search-input-file} is used
10184 in a build phase of the @code{wireguard-tools} package:
10185
10186 @lisp
10187 (add-after 'install 'wrap-wg-quick
10188 (lambda* (#:key inputs outputs #:allow-other-keys)
10189 (let ((coreutils (string-append (assoc-ref inputs "coreutils")
10190 "/bin")))
10191 (wrap-program (search-input-file outputs "bin/wg-quick")
10192 #:sh (search-input-file inputs "bin/bash")
10193 `("PATH" ":" prefix ,(list coreutils))))))
10194 @end lisp
10195
10196 @subsection Program Invocation
10197
10198 @cindex program invocation, from Scheme
10199 @cindex invoking programs, from Scheme
10200 You'll find handy procedures to spawn processes in this module,
10201 essentially convenient wrappers around Guile's @code{system*}
10202 (@pxref{Processes, @code{system*},, guile, GNU Guile Reference Manual}).
10203
10204 @deffn {Scheme Procedure} invoke @var{program} @var{args}@dots{}
10205 Invoke @var{program} with the given @var{args}. Raise an
10206 @code{&invoke-error} exception if the exit code is non-zero; otherwise
10207 return @code{#t}.
10208
10209 The advantage compared to @code{system*} is that you do not need to
10210 check the return value. This reduces boilerplate in shell-script-like
10211 snippets for instance in package build phases.
10212 @end deffn
10213
10214 @deffn {Scheme Procedure} invoke-error? @var{c}
10215 Return true if @var{c} is an @code{&invoke-error} condition.
10216 @end deffn
10217
10218 @deffn {Scheme Procedure} invoke-error-program @var{c}
10219 @deffnx {Scheme Procedure} invoke-error-arguments @var{c}
10220 @deffnx {Scheme Procedure} invoke-error-exit-status @var{c}
10221 @deffnx {Scheme Procedure} invoke-error-term-signal @var{c}
10222 @deffnx {Scheme Procedure} invoke-error-stop-signal @var{c}
10223 Access specific fields of @var{c}, an @code{&invoke-error} condition.
10224 @end deffn
10225
10226 @deffn {Scheme Procedure} report-invoke-error @var{c} [@var{port}]
10227 Report to @var{port} (by default the current error port) about @var{c},
10228 an @code{&invoke-error} condition, in a human-friendly way.
10229
10230 Typical usage would look like this:
10231
10232 @lisp
10233 (use-modules (srfi srfi-34) ;for 'guard'
10234 (guix build utils))
10235
10236 (guard (c ((invoke-error? c)
10237 (report-invoke-error c)))
10238 (invoke "date" "--imaginary-option"))
10239
10240 @print{} command "date" "--imaginary-option" failed with status 1
10241 @end lisp
10242 @end deffn
10243
10244 @deffn {Scheme Procedure} invoke/quiet @var{program} @var{args}@dots{}
10245 Invoke @var{program} with @var{args} and capture @var{program}'s
10246 standard output and standard error. If @var{program} succeeds, print
10247 nothing and return the unspecified value; otherwise, raise a
10248 @code{&message} error condition that includes the status code and the
10249 output of @var{program}.
10250
10251 Here's an example:
10252
10253 @lisp
10254 (use-modules (srfi srfi-34) ;for 'guard'
10255 (srfi srfi-35) ;for 'message-condition?'
10256 (guix build utils))
10257
10258 (guard (c ((message-condition? c)
10259 (display (condition-message c))))
10260 (invoke/quiet "date") ;all is fine
10261 (invoke/quiet "date" "--imaginary-option"))
10262
10263 @print{} 'date --imaginary-option' exited with status 1; output follows:
10264
10265 date: unrecognized option '--imaginary-option'
10266 Try 'date --help' for more information.
10267 @end lisp
10268 @end deffn
10269
10270 @subsection Build Phases
10271
10272 @cindex build phases
10273 The @code{(guix build utils)} also contains tools to manipulate build
10274 phases as used by build systems (@pxref{Build Systems}). Build phases
10275 are represented as association lists or ``alists'' (@pxref{Association
10276 Lists,,, guile, GNU Guile Reference Manual}) where each key is a symbol
10277 naming the phase and the associated value is a procedure (@pxref{Build
10278 Phases}).
10279
10280 Guile core and the @code{(srfi srfi-1)} module both provide tools to
10281 manipulate alists. The @code{(guix build utils)} module complements
10282 those with tools written with build phases in mind.
10283
10284 @cindex build phases, modifying
10285 @deffn {Scheme Syntax} modify-phases @var{phases} @var{clause}@dots{}
10286 Modify @var{phases} sequentially as per each @var{clause}, which may
10287 have one of the following forms:
10288
10289 @lisp
10290 (delete @var{old-phase-name})
10291 (replace @var{old-phase-name} @var{new-phase})
10292 (add-before @var{old-phase-name} @var{new-phase-name} @var{new-phase})
10293 (add-after @var{old-phase-name} @var{new-phase-name} @var{new-phase})
10294 @end lisp
10295
10296 Where every @var{phase-name} above is an expression evaluating to a
10297 symbol, and @var{new-phase} an expression evaluating to a procedure.
10298 @end deffn
10299
10300 The example below is taken from the definition of the @code{grep}
10301 package. It adds a phase to run after the @code{install} phase, called
10302 @code{fix-egrep-and-fgrep}. That phase is a procedure (@code{lambda*}
10303 is for anonymous procedures) that takes a @code{#:outputs} keyword
10304 argument and ignores extra keyword arguments (@pxref{Optional
10305 Arguments,,, guile, GNU Guile Reference Manual}, for more on
10306 @code{lambda*} and optional and keyword arguments.) The phase uses
10307 @code{substitute*} to modify the installed @file{egrep} and @file{fgrep}
10308 scripts so that they refer to @code{grep} by its absolute file name:
10309
10310 @lisp
10311 (modify-phases %standard-phases
10312 (add-after 'install 'fix-egrep-and-fgrep
10313 ;; Patch 'egrep' and 'fgrep' to execute 'grep' via its
10314 ;; absolute file name instead of searching for it in $PATH.
10315 (lambda* (#:key outputs #:allow-other-keys)
10316 (let* ((out (assoc-ref outputs "out"))
10317 (bin (string-append out "/bin")))
10318 (substitute* (list (string-append bin "/egrep")
10319 (string-append bin "/fgrep"))
10320 (("^exec grep")
10321 (string-append "exec " bin "/grep")))))))
10322 @end lisp
10323
10324 In the example below, phases are modified in two ways: the standard
10325 @code{configure} phase is deleted, presumably because the package does
10326 not have a @file{configure} script or anything similar, and the default
10327 @code{install} phase is replaced by one that manually copies the
10328 executable files to be installed:
10329
10330 @lisp
10331 (modify-phases %standard-phases
10332 (delete 'configure) ;no 'configure' script
10333 (replace 'install
10334 (lambda* (#:key outputs #:allow-other-keys)
10335 ;; The package's Makefile doesn't provide an "install"
10336 ;; rule so do it by ourselves.
10337 (let ((bin (string-append (assoc-ref outputs "out")
10338 "/bin")))
10339 (install-file "footswitch" bin)
10340 (install-file "scythe" bin)))))
10341 @end lisp
10342
10343 @c TODO: Add more examples.
10344
10345 @subsection Wrappers
10346
10347 @cindex program wrappers
10348 @cindex wrapping programs
10349 It is not unusual for a command to require certain environment variables
10350 to be set for proper functioning, typically search paths (@pxref{Search
10351 Paths}). Failing to do that, the command might fail to find files or
10352 other commands it relies on, or it might pick the ``wrong''
10353 ones---depending on the environment in which it runs. Examples include:
10354
10355 @itemize
10356 @item
10357 a shell script that assumes all the commands it uses are in @env{PATH};
10358
10359 @item
10360 a Guile program that assumes all its modules are in @env{GUILE_LOAD_PATH}
10361 and @env{GUILE_LOAD_COMPILED_PATH};
10362
10363 @item
10364 a Qt application that expects to find certain plugins in
10365 @env{QT_PLUGIN_PATH}.
10366 @end itemize
10367
10368 For a package writer, the goal is to make sure commands always work the
10369 same rather than depend on some external settings. One way to achieve
10370 that is to @dfn{wrap} commands in a thin script that sets those
10371 environment variables, thereby ensuring that those run-time dependencies
10372 are always found. The wrapper would be used to set @env{PATH},
10373 @env{GUILE_LOAD_PATH}, or @env{QT_PLUGIN_PATH} in the examples above.
10374
10375 To ease that task, the @code{(guix build utils)} module provides a
10376 couple of helpers to wrap commands.
10377
10378 @deffn {Scheme Procedure} wrap-program @var{program} @
10379 [#:sh @var{sh}] [#:rest @var{variables}]
10380 Make a wrapper for @var{program}. @var{variables} should look like this:
10381
10382 @lisp
10383 '(@var{variable} @var{delimiter} @var{position} @var{list-of-directories})
10384 @end lisp
10385
10386 where @var{delimiter} is optional. @code{:} will be used if
10387 @var{delimiter} is not given.
10388
10389 For example, this call:
10390
10391 @lisp
10392 (wrap-program "foo"
10393 '("PATH" ":" = ("/gnu/.../bar/bin"))
10394 '("CERT_PATH" suffix ("/gnu/.../baz/certs"
10395 "/qux/certs")))
10396 @end lisp
10397
10398 will copy @file{foo} to @file{.foo-real} and create the file @file{foo}
10399 with the following contents:
10400
10401 @example
10402 #!location/of/bin/bash
10403 export PATH="/gnu/.../bar/bin"
10404 export CERT_PATH="$CERT_PATH$@{CERT_PATH:+:@}/gnu/.../baz/certs:/qux/certs"
10405 exec -a $0 location/of/.foo-real "$@@"
10406 @end example
10407
10408 If @var{program} has previously been wrapped by @code{wrap-program}, the
10409 wrapper is extended with definitions for @var{variables}. If it is not,
10410 @var{sh} will be used as the interpreter.
10411 @end deffn
10412
10413 @deffn {Scheme Procedure} wrap-script @var{program} @
10414 [#:guile @var{guile}] [#:rest @var{variables}]
10415 Wrap the script @var{program} such that @var{variables} are set first.
10416 The format of @var{variables} is the same as in the @code{wrap-program}
10417 procedure. This procedure differs from @code{wrap-program} in that it
10418 does not create a separate shell script. Instead, @var{program} is
10419 modified directly by prepending a Guile script, which is interpreted as
10420 a comment in the script's language.
10421
10422 Special encoding comments as supported by Python are recreated on the
10423 second line.
10424
10425 Note that this procedure can only be used once per file as Guile scripts are
10426 not supported.
10427 @end deffn
10428
10429 @node Search Paths
10430 @section Search Paths
10431
10432 @cindex search path
10433 Many programs and libraries look for input data in a @dfn{search path},
10434 a list of directories: shells like Bash look for executables in the
10435 command search path, a C compiler looks for @file{.h} files in its
10436 header search path, the Python interpreter looks for @file{.py}
10437 files in its search path, the spell checker has a search path for
10438 dictionaries, and so on.
10439
10440 Search paths can usually be defined or overridden @i{via} environment
10441 variables (@pxref{Environment Variables,,, libc, The GNU C Library
10442 Reference Manual}). For example, the search paths mentioned above can
10443 be changed by defining the @env{PATH}, @env{C_INCLUDE_PATH},
10444 @env{PYTHONPATH} (or @env{GUIX_PYTHONPATH}), and @env{DICPATH}
10445 environment variables---you know, all these something-PATH variables
10446 that you need to get right or things ``won't be found''.
10447
10448 You may have noticed from the command line that Guix ``knows'' which
10449 search path environment variables should be defined, and how. When you
10450 install packages in your default profile, the file
10451 @file{~/.guix-profile/etc/profile} is created, which you can ``source''
10452 from the shell to set those variables. Likewise, if you ask
10453 @command{guix shell} to create an environment containing Python and
10454 NumPy, a Python library, and if you pass it the @option{--search-paths}
10455 option, it will tell you about @env{PATH} and @env{GUIX_PYTHONPATH}
10456 (@pxref{Invoking guix shell}):
10457
10458 @example
10459 $ guix shell python python-numpy --pure --search-paths
10460 export PATH="/gnu/store/@dots{}-profile/bin"
10461 export GUIX_PYTHONPATH="/gnu/store/@dots{}-profile/lib/python3.9/site-packages"
10462 @end example
10463
10464 When you omit @option{--search-paths}, it defines these environment
10465 variables right away, such that Python can readily find NumPy:
10466
10467 @example
10468 $ guix shell python python-numpy -- python3
10469 Python 3.9.6 (default, Jan 1 1970, 00:00:01)
10470 [GCC 10.3.0] on linux
10471 Type "help", "copyright", "credits" or "license" for more information.
10472 >>> import numpy
10473 >>> numpy.version.version
10474 '1.20.3'
10475 @end example
10476
10477 For this to work, the definition of the @code{python} package
10478 @emph{declares} the search path it cares about and its associated
10479 environment variable, @env{GUIX_PYTHONPATH}. It looks like this:
10480
10481 @lisp
10482 (package
10483 (name "python")
10484 (version "3.9.9")
10485 ;; some fields omitted...
10486 (native-search-paths
10487 (list (search-path-specification
10488 (variable "GUIX_PYTHONPATH")
10489 (files (list "lib/python/3.9/site-packages"))))))
10490 @end lisp
10491
10492 What this @code{native-search-paths} field says is that, when the
10493 @code{python} package is used, the @env{GUIX_PYTHONPATH} environment
10494 variable must be defined to include all the
10495 @file{lib/python/3.9/site-packages} sub-directories encountered in its
10496 environment. (The @code{native-} bit means that, if we are in a
10497 cross-compilation environment, only native inputs may be added to the
10498 search path; @pxref{package Reference, @code{search-paths}}.)
10499 In the NumPy example above, the profile where
10500 @code{python} appears contains exactly one such sub-directory, and
10501 @env{GUIX_PYTHONPATH} is set to that. When there are several
10502 @file{lib/python/3.9/site-packages}---this is the case in package build
10503 environments---they are all added to @env{GUIX_PYTHONPATH}, separated by
10504 colons (@code{:}).
10505
10506 @quotation Note
10507 Notice that @env{GUIX_PYTHONPATH} is specified as part of the definition
10508 of the @code{python} package, and @emph{not} as part of that of
10509 @code{python-numpy}. This is because this environment variable
10510 ``belongs'' to Python, not NumPy: Python actually reads the value of
10511 that variable and honors it.
10512
10513 Corollary: if you create a profile that does not contain @code{python},
10514 @code{GUIX_PYTHONPATH} will @emph{not} be defined, even if it contains
10515 packages that provide @file{.py} files:
10516
10517 @example
10518 $ guix shell python-numpy --search-paths --pure
10519 export PATH="/gnu/store/@dots{}-profile/bin"
10520 @end example
10521
10522 This makes a lot of sense if we look at this profile in isolation: no
10523 software in this profile would read @env{GUIX_PYTHONPATH}.
10524 @end quotation
10525
10526 Of course, there are many variations on that theme: some packages honor
10527 more than one search path, some use separators other than colon, some
10528 accumulate several directories in their search path, and so on. A more
10529 complex example is the search path of libxml2: the value of the
10530 @env{XML_CATALOG_FILES} environment variable is space-separated, it must
10531 contain a list of @file{catalog.xml} files (not directories), which are
10532 to be found in @file{xml} sub-directories---nothing less. The search
10533 path specification looks like this:
10534
10535 @lisp
10536 (package
10537 (name "libxml2")
10538 ;; some fields omitted
10539 (native-search-paths
10540 (list (search-path-specification
10541 (variable "XML_CATALOG_FILES")
10542 (separator " ")
10543 (files '("xml"))
10544 (file-pattern "^catalog\\.xml$")
10545 (file-type 'regular)))))
10546 @end lisp
10547
10548 Worry not, search path specifications are usually not this tricky.
10549
10550 The @code{(guix search-paths)} module defines the data type of search
10551 path specifications and a number of helper procedures. Below is the
10552 reference of search path specifications.
10553
10554 @deftp {Data Type} search-path-specification
10555 The data type for search path specifications.
10556
10557 @table @asis
10558 @item @code{variable}
10559 The name of the environment variable for this search path (a string).
10560
10561 @item @code{files}
10562 The list of sub-directories (strings) that should be added to the search
10563 path.
10564
10565 @item @code{separator} (default: @code{":"})
10566 The string used to separate search path components.
10567
10568 As a special case, a @code{separator} value of @code{#f} specifies a
10569 ``single-component search path''---in other words, a search path that
10570 cannot contain more than one element. This is useful in some cases,
10571 such as the @code{SSL_CERT_DIR} variable (honored by OpenSSL, cURL, and
10572 a few other packages) or the @code{ASPELL_DICT_DIR} variable (honored by
10573 the GNU Aspell spell checker), both of which must point to a single
10574 directory.
10575
10576 @item @code{file-type} (default: @code{'directory})
10577 The type of file being matched---@code{'directory} or @code{'regular},
10578 though it can be any symbol returned by @code{stat:type} (@pxref{File
10579 System, @code{stat},, guile, GNU Guile Reference Manual}).
10580
10581 In the libxml2 example above, we would match regular files; in the
10582 Python example, we would match directories.
10583
10584 @item @code{file-pattern} (default: @code{#f})
10585 This must be either @code{#f} or a regular expression specifying
10586 files to be matched @emph{within} the sub-directories specified by the
10587 @code{files} field.
10588
10589 Again, the libxml2 example shows a situation where this is needed.
10590 @end table
10591 @end deftp
10592
10593 Some search paths are not tied by a single package but to many packages.
10594 To reduce duplications, some of them are pre-defined in @code{(guix
10595 search-paths)}.
10596
10597 @defvr {Scheme Variable} $SSL_CERT_DIR
10598 @defvrx {Scheme Variable} $SSL_CERT_FILE
10599 These two search paths indicate where X.509 certificates can be found
10600 (@pxref{X.509 Certificates}).
10601 @end defvr
10602
10603 These pre-defined search paths can be used as in the following example:
10604
10605 @lisp
10606 (package
10607 (name "curl")
10608 ;; some fields omitted ...
10609 (native-search-paths (list $SSL_CERT_DIR $SSL_CERT_FILE)))
10610 @end lisp
10611
10612 How do you turn search path specifications on one hand and a bunch of
10613 directories on the other hand in a set of environment variable
10614 definitions? That's the job of @code{evaluate-search-paths}.
10615
10616 @deffn {Scheme Procedure} evaluate-search-paths @var{search-paths} @
10617 @var{directories} [@var{getenv}]
10618 Evaluate @var{search-paths}, a list of search-path specifications, for
10619 @var{directories}, a list of directory names, and return a list of
10620 specification/value pairs. Use @var{getenv} to determine the current
10621 settings and report only settings not already effective.
10622 @end deffn
10623
10624 The @code{(guix profiles)} provides a higher-level helper procedure,
10625 @code{load-profile}, that sets the environment variables of a profile.
10626
10627 @node The Store
10628 @section The Store
10629
10630 @cindex store
10631 @cindex store items
10632 @cindex store paths
10633
10634 Conceptually, the @dfn{store} is the place where derivations that have
10635 been built successfully are stored---by default, @file{/gnu/store}.
10636 Sub-directories in the store are referred to as @dfn{store items} or
10637 sometimes @dfn{store paths}. The store has an associated database that
10638 contains information such as the store paths referred to by each store
10639 path, and the list of @emph{valid} store items---results of successful
10640 builds. This database resides in @file{@var{localstatedir}/guix/db},
10641 where @var{localstatedir} is the state directory specified @i{via}
10642 @option{--localstatedir} at configure time, usually @file{/var}.
10643
10644 The store is @emph{always} accessed by the daemon on behalf of its clients
10645 (@pxref{Invoking guix-daemon}). To manipulate the store, clients
10646 connect to the daemon over a Unix-domain socket, send requests to it,
10647 and read the result---these are remote procedure calls, or RPCs.
10648
10649 @quotation Note
10650 Users must @emph{never} modify files under @file{/gnu/store} directly.
10651 This would lead to inconsistencies and break the immutability
10652 assumptions of Guix's functional model (@pxref{Introduction}).
10653
10654 @xref{Invoking guix gc, @command{guix gc --verify}}, for information on
10655 how to check the integrity of the store and attempt recovery from
10656 accidental modifications.
10657 @end quotation
10658
10659 The @code{(guix store)} module provides procedures to connect to the
10660 daemon, and to perform RPCs. These are described below. By default,
10661 @code{open-connection}, and thus all the @command{guix} commands,
10662 connect to the local daemon or to the URI specified by the
10663 @env{GUIX_DAEMON_SOCKET} environment variable.
10664
10665 @defvr {Environment Variable} GUIX_DAEMON_SOCKET
10666 When set, the value of this variable should be a file name or a URI
10667 designating the daemon endpoint. When it is a file name, it denotes a
10668 Unix-domain socket to connect to. In addition to file names, the
10669 supported URI schemes are:
10670
10671 @table @code
10672 @item file
10673 @itemx unix
10674 These are for Unix-domain sockets.
10675 @code{file:///var/guix/daemon-socket/socket} is equivalent to
10676 @file{/var/guix/daemon-socket/socket}.
10677
10678 @item guix
10679 @cindex daemon, remote access
10680 @cindex remote access to the daemon
10681 @cindex daemon, cluster setup
10682 @cindex clusters, daemon setup
10683 These URIs denote connections over TCP/IP, without encryption nor
10684 authentication of the remote host. The URI must specify the host name
10685 and optionally a port number (by default port 44146 is used):
10686
10687 @example
10688 guix://master.guix.example.org:1234
10689 @end example
10690
10691 This setup is suitable on local networks, such as clusters, where only
10692 trusted nodes may connect to the build daemon at
10693 @code{master.guix.example.org}.
10694
10695 The @option{--listen} option of @command{guix-daemon} can be used to
10696 instruct it to listen for TCP connections (@pxref{Invoking guix-daemon,
10697 @option{--listen}}).
10698
10699 @item ssh
10700 @cindex SSH access to build daemons
10701 These URIs allow you to connect to a remote daemon over SSH@. This
10702 feature requires Guile-SSH (@pxref{Requirements}) and a working
10703 @command{guile} binary in @env{PATH} on the destination machine. It
10704 supports public key and GSSAPI authentication. A typical URL might look
10705 like this:
10706
10707 @example
10708 ssh://charlie@@guix.example.org:22
10709 @end example
10710
10711 As for @command{guix copy}, the usual OpenSSH client configuration files
10712 are honored (@pxref{Invoking guix copy}).
10713 @end table
10714
10715 Additional URI schemes may be supported in the future.
10716
10717 @c XXX: Remove this note when the protocol incurs fewer round trips
10718 @c and when (guix derivations) no longer relies on file system access.
10719 @quotation Note
10720 The ability to connect to remote build daemons is considered
10721 experimental as of @value{VERSION}. Please get in touch with us to
10722 share any problems or suggestions you may have (@pxref{Contributing}).
10723 @end quotation
10724 @end defvr
10725
10726 @deffn {Scheme Procedure} open-connection [@var{uri}] [#:reserve-space? #t]
10727 Connect to the daemon over the Unix-domain socket at @var{uri} (a string). When
10728 @var{reserve-space?} is true, instruct it to reserve a little bit of
10729 extra space on the file system so that the garbage collector can still
10730 operate should the disk become full. Return a server object.
10731
10732 @var{file} defaults to @code{%default-socket-path}, which is the normal
10733 location given the options that were passed to @command{configure}.
10734 @end deffn
10735
10736 @deffn {Scheme Procedure} close-connection @var{server}
10737 Close the connection to @var{server}.
10738 @end deffn
10739
10740 @defvr {Scheme Variable} current-build-output-port
10741 This variable is bound to a SRFI-39 parameter, which refers to the port
10742 where build and error logs sent by the daemon should be written.
10743 @end defvr
10744
10745 Procedures that make RPCs all take a server object as their first
10746 argument.
10747
10748 @deffn {Scheme Procedure} valid-path? @var{server} @var{path}
10749 @cindex invalid store items
10750 Return @code{#t} when @var{path} designates a valid store item and
10751 @code{#f} otherwise (an invalid item may exist on disk but still be
10752 invalid, for instance because it is the result of an aborted or failed
10753 build).
10754
10755 A @code{&store-protocol-error} condition is raised if @var{path} is not
10756 prefixed by the store directory (@file{/gnu/store}).
10757 @end deffn
10758
10759 @deffn {Scheme Procedure} add-text-to-store @var{server} @var{name} @var{text} [@var{references}]
10760 Add @var{text} under file @var{name} in the store, and return its store
10761 path. @var{references} is the list of store paths referred to by the
10762 resulting store path.
10763 @end deffn
10764
10765 @deffn {Scheme Procedure} build-derivations @var{store} @var{derivations} @
10766 [@var{mode}]
10767 Build @var{derivations}, a list of @code{<derivation>} objects, @file{.drv}
10768 file names, or derivation/output pairs, using the specified
10769 @var{mode}---@code{(build-mode normal)} by default.
10770 @end deffn
10771
10772 Note that the @code{(guix monads)} module provides a monad as well as
10773 monadic versions of the above procedures, with the goal of making it
10774 more convenient to work with code that accesses the store (@pxref{The
10775 Store Monad}).
10776
10777 @c FIXME
10778 @i{This section is currently incomplete.}
10779
10780 @node Derivations
10781 @section Derivations
10782
10783 @cindex derivations
10784 Low-level build actions and the environment in which they are performed
10785 are represented by @dfn{derivations}. A derivation contains the
10786 following pieces of information:
10787
10788 @itemize
10789 @item
10790 The outputs of the derivation---derivations produce at least one file or
10791 directory in the store, but may produce more.
10792
10793 @item
10794 @cindex build-time dependencies
10795 @cindex dependencies, build-time
10796 The inputs of the derivations---i.e., its build-time dependencies---which may
10797 be other derivations or plain files in the store (patches, build scripts,
10798 etc.).
10799
10800 @item
10801 The system type targeted by the derivation---e.g., @code{x86_64-linux}.
10802
10803 @item
10804 The file name of a build script in the store, along with the arguments
10805 to be passed.
10806
10807 @item
10808 A list of environment variables to be defined.
10809
10810 @end itemize
10811
10812 @cindex derivation path
10813 Derivations allow clients of the daemon to communicate build actions to
10814 the store. They exist in two forms: as an in-memory representation,
10815 both on the client- and daemon-side, and as files in the store whose
10816 name end in @file{.drv}---these files are referred to as @dfn{derivation
10817 paths}. Derivations paths can be passed to the @code{build-derivations}
10818 procedure to perform the build actions they prescribe (@pxref{The
10819 Store}).
10820
10821 @cindex fixed-output derivations
10822 Operations such as file downloads and version-control checkouts for
10823 which the expected content hash is known in advance are modeled as
10824 @dfn{fixed-output derivations}. Unlike regular derivations, the outputs
10825 of a fixed-output derivation are independent of its inputs---e.g., a
10826 source code download produces the same result regardless of the download
10827 method and tools being used.
10828
10829 @cindex references
10830 @cindex run-time dependencies
10831 @cindex dependencies, run-time
10832 The outputs of derivations---i.e., the build results---have a set of
10833 @dfn{references}, as reported by the @code{references} RPC or the
10834 @command{guix gc --references} command (@pxref{Invoking guix gc}). References
10835 are the set of run-time dependencies of the build results. References are a
10836 subset of the inputs of the derivation; this subset is automatically computed
10837 by the build daemon by scanning all the files in the outputs.
10838
10839 The @code{(guix derivations)} module provides a representation of
10840 derivations as Scheme objects, along with procedures to create and
10841 otherwise manipulate derivations. The lowest-level primitive to create
10842 a derivation is the @code{derivation} procedure:
10843
10844 @deffn {Scheme Procedure} derivation @var{store} @var{name} @var{builder} @
10845 @var{args} [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
10846 [#:recursive? #f] [#:inputs '()] [#:env-vars '()] @
10847 [#:system (%current-system)] [#:references-graphs #f] @
10848 [#:allowed-references #f] [#:disallowed-references #f] @
10849 [#:leaked-env-vars #f] [#:local-build? #f] @
10850 [#:substitutable? #t] [#:properties '()]
10851 Build a derivation with the given arguments, and return the resulting
10852 @code{<derivation>} object.
10853
10854 When @var{hash} and @var{hash-algo} are given, a
10855 @dfn{fixed-output derivation} is created---i.e., one whose result is
10856 known in advance, such as a file download. If, in addition,
10857 @var{recursive?} is true, then that fixed output may be an executable
10858 file or a directory and @var{hash} must be the hash of an archive
10859 containing this output.
10860
10861 When @var{references-graphs} is true, it must be a list of file
10862 name/store path pairs. In that case, the reference graph of each store
10863 path is exported in the build environment in the corresponding file, in
10864 a simple text format.
10865
10866 When @var{allowed-references} is true, it must be a list of store items
10867 or outputs that the derivation's output may refer to. Likewise,
10868 @var{disallowed-references}, if true, must be a list of things the
10869 outputs may @emph{not} refer to.
10870
10871 When @var{leaked-env-vars} is true, it must be a list of strings
10872 denoting environment variables that are allowed to ``leak'' from the
10873 daemon's environment to the build environment. This is only applicable
10874 to fixed-output derivations---i.e., when @var{hash} is true. The main
10875 use is to allow variables such as @code{http_proxy} to be passed to
10876 derivations that download files.
10877
10878 When @var{local-build?} is true, declare that the derivation is not a
10879 good candidate for offloading and should rather be built locally
10880 (@pxref{Daemon Offload Setup}). This is the case for small derivations
10881 where the costs of data transfers would outweigh the benefits.
10882
10883 When @var{substitutable?} is false, declare that substitutes of the
10884 derivation's output should not be used (@pxref{Substitutes}). This is
10885 useful, for instance, when building packages that capture details of the
10886 host CPU instruction set.
10887
10888 @var{properties} must be an association list describing ``properties'' of the
10889 derivation. It is kept as-is, uninterpreted, in the derivation.
10890 @end deffn
10891
10892 @noindent
10893 Here's an example with a shell script as its builder, assuming
10894 @var{store} is an open connection to the daemon, and @var{bash} points
10895 to a Bash executable in the store:
10896
10897 @lisp
10898 (use-modules (guix utils)
10899 (guix store)
10900 (guix derivations))
10901
10902 (let ((builder ; add the Bash script to the store
10903 (add-text-to-store store "my-builder.sh"
10904 "echo hello world > $out\n" '())))
10905 (derivation store "foo"
10906 bash `("-e" ,builder)
10907 #:inputs `((,bash) (,builder))
10908 #:env-vars '(("HOME" . "/homeless"))))
10909 @result{} #<derivation /gnu/store/@dots{}-foo.drv => /gnu/store/@dots{}-foo>
10910 @end lisp
10911
10912 As can be guessed, this primitive is cumbersome to use directly. A
10913 better approach is to write build scripts in Scheme, of course! The
10914 best course of action for that is to write the build code as a
10915 ``G-expression'', and to pass it to @code{gexp->derivation}. For more
10916 information, @pxref{G-Expressions}.
10917
10918 Once upon a time, @code{gexp->derivation} did not exist and constructing
10919 derivations with build code written in Scheme was achieved with
10920 @code{build-expression->derivation}, documented below. This procedure
10921 is now deprecated in favor of the much nicer @code{gexp->derivation}.
10922
10923 @deffn {Scheme Procedure} build-expression->derivation @var{store} @
10924 @var{name} @var{exp} @
10925 [#:system (%current-system)] [#:inputs '()] @
10926 [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
10927 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
10928 [#:references-graphs #f] [#:allowed-references #f] @
10929 [#:disallowed-references #f] @
10930 [#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
10931 Return a derivation that executes Scheme expression @var{exp} as a
10932 builder for derivation @var{name}. @var{inputs} must be a list of
10933 @code{(name drv-path sub-drv)} tuples; when @var{sub-drv} is omitted,
10934 @code{"out"} is assumed. @var{modules} is a list of names of Guile
10935 modules from the current search path to be copied in the store,
10936 compiled, and made available in the load path during the execution of
10937 @var{exp}---e.g., @code{((guix build utils) (guix build
10938 gnu-build-system))}.
10939
10940 @var{exp} is evaluated in an environment where @code{%outputs} is bound
10941 to a list of output/path pairs, and where @code{%build-inputs} is bound
10942 to a list of string/output-path pairs made from @var{inputs}.
10943 Optionally, @var{env-vars} is a list of string pairs specifying the name
10944 and value of environment variables visible to the builder. The builder
10945 terminates by passing the result of @var{exp} to @code{exit}; thus, when
10946 @var{exp} returns @code{#f}, the build is considered to have failed.
10947
10948 @var{exp} is built using @var{guile-for-build} (a derivation). When
10949 @var{guile-for-build} is omitted or is @code{#f}, the value of the
10950 @code{%guile-for-build} fluid is used instead.
10951
10952 See the @code{derivation} procedure for the meaning of
10953 @var{references-graphs}, @var{allowed-references},
10954 @var{disallowed-references}, @var{local-build?}, and
10955 @var{substitutable?}.
10956 @end deffn
10957
10958 @noindent
10959 Here's an example of a single-output derivation that creates a directory
10960 containing one file:
10961
10962 @lisp
10963 (let ((builder '(let ((out (assoc-ref %outputs "out")))
10964 (mkdir out) ; create /gnu/store/@dots{}-goo
10965 (call-with-output-file (string-append out "/test")
10966 (lambda (p)
10967 (display '(hello guix) p))))))
10968 (build-expression->derivation store "goo" builder))
10969
10970 @result{} #<derivation /gnu/store/@dots{}-goo.drv => @dots{}>
10971 @end lisp
10972
10973
10974 @node The Store Monad
10975 @section The Store Monad
10976
10977 @cindex monad
10978
10979 The procedures that operate on the store described in the previous
10980 sections all take an open connection to the build daemon as their first
10981 argument. Although the underlying model is functional, they either have
10982 side effects or depend on the current state of the store.
10983
10984 The former is inconvenient: the connection to the build daemon has to be
10985 carried around in all those functions, making it impossible to compose
10986 functions that do not take that parameter with functions that do. The
10987 latter can be problematic: since store operations have side effects
10988 and/or depend on external state, they have to be properly sequenced.
10989
10990 @cindex monadic values
10991 @cindex monadic functions
10992 This is where the @code{(guix monads)} module comes in. This module
10993 provides a framework for working with @dfn{monads}, and a particularly
10994 useful monad for our uses, the @dfn{store monad}. Monads are a
10995 construct that allows two things: associating ``context'' with values
10996 (in our case, the context is the store), and building sequences of
10997 computations (here computations include accesses to the store). Values
10998 in a monad---values that carry this additional context---are called
10999 @dfn{monadic values}; procedures that return such values are called
11000 @dfn{monadic procedures}.
11001
11002 Consider this ``normal'' procedure:
11003
11004 @lisp
11005 (define (sh-symlink store)
11006 ;; Return a derivation that symlinks the 'bash' executable.
11007 (let* ((drv (package-derivation store bash))
11008 (out (derivation->output-path drv))
11009 (sh (string-append out "/bin/bash")))
11010 (build-expression->derivation store "sh"
11011 `(symlink ,sh %output))))
11012 @end lisp
11013
11014 Using @code{(guix monads)} and @code{(guix gexp)}, it may be rewritten
11015 as a monadic function:
11016
11017 @lisp
11018 (define (sh-symlink)
11019 ;; Same, but return a monadic value.
11020 (mlet %store-monad ((drv (package->derivation bash)))
11021 (gexp->derivation "sh"
11022 #~(symlink (string-append #$drv "/bin/bash")
11023 #$output))))
11024 @end lisp
11025
11026 There are several things to note in the second version: the @code{store}
11027 parameter is now implicit and is ``threaded'' in the calls to the
11028 @code{package->derivation} and @code{gexp->derivation} monadic
11029 procedures, and the monadic value returned by @code{package->derivation}
11030 is @dfn{bound} using @code{mlet} instead of plain @code{let}.
11031
11032 As it turns out, the call to @code{package->derivation} can even be
11033 omitted since it will take place implicitly, as we will see later
11034 (@pxref{G-Expressions}):
11035
11036 @lisp
11037 (define (sh-symlink)
11038 (gexp->derivation "sh"
11039 #~(symlink (string-append #$bash "/bin/bash")
11040 #$output)))
11041 @end lisp
11042
11043 @c See
11044 @c <https://syntaxexclamation.wordpress.com/2014/06/26/escaping-continuations/>
11045 @c for the funny quote.
11046 Calling the monadic @code{sh-symlink} has no effect. As someone once
11047 said, ``you exit a monad like you exit a building on fire: by running''.
11048 So, to exit the monad and get the desired effect, one must use
11049 @code{run-with-store}:
11050
11051 @lisp
11052 (run-with-store (open-connection) (sh-symlink))
11053 @result{} /gnu/store/...-sh-symlink
11054 @end lisp
11055
11056 Note that the @code{(guix monad-repl)} module extends the Guile REPL with
11057 new ``commands'' to make it easier to deal with monadic procedures:
11058 @code{run-in-store}, and @code{enter-store-monad} (@pxref{Using Guix
11059 Interactively}). The former is used
11060 to ``run'' a single monadic value through the store:
11061
11062 @example
11063 scheme@@(guile-user)> ,run-in-store (package->derivation hello)
11064 $1 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
11065 @end example
11066
11067 The latter enters a recursive REPL, where all the return values are
11068 automatically run through the store:
11069
11070 @example
11071 scheme@@(guile-user)> ,enter-store-monad
11072 store-monad@@(guile-user) [1]> (package->derivation hello)
11073 $2 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
11074 store-monad@@(guile-user) [1]> (text-file "foo" "Hello!")
11075 $3 = "/gnu/store/@dots{}-foo"
11076 store-monad@@(guile-user) [1]> ,q
11077 scheme@@(guile-user)>
11078 @end example
11079
11080 @noindent
11081 Note that non-monadic values cannot be returned in the
11082 @code{store-monad} REPL.
11083
11084 Other meta-commands are available at the REPL, such as @code{,build} to
11085 build a file-like object (@pxref{Using Guix Interactively}).
11086
11087 The main syntactic forms to deal with monads in general are provided by
11088 the @code{(guix monads)} module and are described below.
11089
11090 @deffn {Scheme Syntax} with-monad @var{monad} @var{body} ...
11091 Evaluate any @code{>>=} or @code{return} forms in @var{body} as being
11092 in @var{monad}.
11093 @end deffn
11094
11095 @deffn {Scheme Syntax} return @var{val}
11096 Return a monadic value that encapsulates @var{val}.
11097 @end deffn
11098
11099 @deffn {Scheme Syntax} >>= @var{mval} @var{mproc} ...
11100 @dfn{Bind} monadic value @var{mval}, passing its ``contents'' to monadic
11101 procedures @var{mproc}@dots{}@footnote{This operation is commonly
11102 referred to as ``bind'', but that name denotes an unrelated procedure in
11103 Guile. Thus we use this somewhat cryptic symbol inherited from the
11104 Haskell language.}. There can be one @var{mproc} or several of them, as
11105 in this example:
11106
11107 @lisp
11108 (run-with-state
11109 (with-monad %state-monad
11110 (>>= (return 1)
11111 (lambda (x) (return (+ 1 x)))
11112 (lambda (x) (return (* 2 x)))))
11113 'some-state)
11114
11115 @result{} 4
11116 @result{} some-state
11117 @end lisp
11118 @end deffn
11119
11120 @deffn {Scheme Syntax} mlet @var{monad} ((@var{var} @var{mval}) ...) @
11121 @var{body} ...
11122 @deffnx {Scheme Syntax} mlet* @var{monad} ((@var{var} @var{mval}) ...) @
11123 @var{body} ...
11124 Bind the variables @var{var} to the monadic values @var{mval} in
11125 @var{body}, which is a sequence of expressions. As with the bind
11126 operator, this can be thought of as ``unpacking'' the raw, non-monadic
11127 value ``contained'' in @var{mval} and making @var{var} refer to that
11128 raw, non-monadic value within the scope of the @var{body}. The form
11129 (@var{var} -> @var{val}) binds @var{var} to the ``normal'' value
11130 @var{val}, as per @code{let}. The binding operations occur in sequence
11131 from left to right. The last expression of @var{body} must be a monadic
11132 expression, and its result will become the result of the @code{mlet} or
11133 @code{mlet*} when run in the @var{monad}.
11134
11135 @code{mlet*} is to @code{mlet} what @code{let*} is to @code{let}
11136 (@pxref{Local Bindings,,, guile, GNU Guile Reference Manual}).
11137 @end deffn
11138
11139 @deffn {Scheme System} mbegin @var{monad} @var{mexp} ...
11140 Bind @var{mexp} and the following monadic expressions in sequence,
11141 returning the result of the last expression. Every expression in the
11142 sequence must be a monadic expression.
11143
11144 This is akin to @code{mlet}, except that the return values of the
11145 monadic expressions are ignored. In that sense, it is analogous to
11146 @code{begin}, but applied to monadic expressions.
11147 @end deffn
11148
11149 @deffn {Scheme System} mwhen @var{condition} @var{mexp0} @var{mexp*} ...
11150 When @var{condition} is true, evaluate the sequence of monadic
11151 expressions @var{mexp0}..@var{mexp*} as in an @code{mbegin}. When
11152 @var{condition} is false, return @code{*unspecified*} in the current
11153 monad. Every expression in the sequence must be a monadic expression.
11154 @end deffn
11155
11156 @deffn {Scheme System} munless @var{condition} @var{mexp0} @var{mexp*} ...
11157 When @var{condition} is false, evaluate the sequence of monadic
11158 expressions @var{mexp0}..@var{mexp*} as in an @code{mbegin}. When
11159 @var{condition} is true, return @code{*unspecified*} in the current
11160 monad. Every expression in the sequence must be a monadic expression.
11161 @end deffn
11162
11163 @cindex state monad
11164 The @code{(guix monads)} module provides the @dfn{state monad}, which
11165 allows an additional value---the state---to be @emph{threaded} through
11166 monadic procedure calls.
11167
11168 @defvr {Scheme Variable} %state-monad
11169 The state monad. Procedures in the state monad can access and change
11170 the state that is threaded.
11171
11172 Consider the example below. The @code{square} procedure returns a value
11173 in the state monad. It returns the square of its argument, but also
11174 increments the current state value:
11175
11176 @lisp
11177 (define (square x)
11178 (mlet %state-monad ((count (current-state)))
11179 (mbegin %state-monad
11180 (set-current-state (+ 1 count))
11181 (return (* x x)))))
11182
11183 (run-with-state (sequence %state-monad (map square (iota 3))) 0)
11184 @result{} (0 1 4)
11185 @result{} 3
11186 @end lisp
11187
11188 When ``run'' through @code{%state-monad}, we obtain that additional state
11189 value, which is the number of @code{square} calls.
11190 @end defvr
11191
11192 @deffn {Monadic Procedure} current-state
11193 Return the current state as a monadic value.
11194 @end deffn
11195
11196 @deffn {Monadic Procedure} set-current-state @var{value}
11197 Set the current state to @var{value} and return the previous state as a
11198 monadic value.
11199 @end deffn
11200
11201 @deffn {Monadic Procedure} state-push @var{value}
11202 Push @var{value} to the current state, which is assumed to be a list,
11203 and return the previous state as a monadic value.
11204 @end deffn
11205
11206 @deffn {Monadic Procedure} state-pop
11207 Pop a value from the current state and return it as a monadic value.
11208 The state is assumed to be a list.
11209 @end deffn
11210
11211 @deffn {Scheme Procedure} run-with-state @var{mval} [@var{state}]
11212 Run monadic value @var{mval} starting with @var{state} as the initial
11213 state. Return two values: the resulting value, and the resulting state.
11214 @end deffn
11215
11216 The main interface to the store monad, provided by the @code{(guix
11217 store)} module, is as follows.
11218
11219 @defvr {Scheme Variable} %store-monad
11220 The store monad---an alias for @code{%state-monad}.
11221
11222 Values in the store monad encapsulate accesses to the store. When its
11223 effect is needed, a value of the store monad must be ``evaluated'' by
11224 passing it to the @code{run-with-store} procedure (see below).
11225 @end defvr
11226
11227 @deffn {Scheme Procedure} run-with-store @var{store} @var{mval} [#:guile-for-build] [#:system (%current-system)]
11228 Run @var{mval}, a monadic value in the store monad, in @var{store}, an
11229 open store connection.
11230 @end deffn
11231
11232 @deffn {Monadic Procedure} text-file @var{name} @var{text} [@var{references}]
11233 Return as a monadic value the absolute file name in the store of the file
11234 containing @var{text}, a string. @var{references} is a list of store items that the
11235 resulting text file refers to; it defaults to the empty list.
11236 @end deffn
11237
11238 @deffn {Monadic Procedure} binary-file @var{name} @var{data} [@var{references}]
11239 Return as a monadic value the absolute file name in the store of the file
11240 containing @var{data}, a bytevector. @var{references} is a list of store
11241 items that the resulting binary file refers to; it defaults to the empty list.
11242 @end deffn
11243
11244 @deffn {Monadic Procedure} interned-file @var{file} [@var{name}] @
11245 [#:recursive? #t] [#:select? (const #t)]
11246 Return the name of @var{file} once interned in the store. Use
11247 @var{name} as its store name, or the basename of @var{file} if
11248 @var{name} is omitted.
11249
11250 When @var{recursive?} is true, the contents of @var{file} are added
11251 recursively; if @var{file} designates a flat file and @var{recursive?}
11252 is true, its contents are added, and its permission bits are kept.
11253
11254 When @var{recursive?} is true, call @code{(@var{select?} @var{file}
11255 @var{stat})} for each directory entry, where @var{file} is the entry's
11256 absolute file name and @var{stat} is the result of @code{lstat}; exclude
11257 entries for which @var{select?} does not return true.
11258
11259 The example below adds a file to the store, under two different names:
11260
11261 @lisp
11262 (run-with-store (open-connection)
11263 (mlet %store-monad ((a (interned-file "README"))
11264 (b (interned-file "README" "LEGU-MIN")))
11265 (return (list a b))))
11266
11267 @result{} ("/gnu/store/rwm@dots{}-README" "/gnu/store/44i@dots{}-LEGU-MIN")
11268 @end lisp
11269
11270 @end deffn
11271
11272 The @code{(guix packages)} module exports the following package-related
11273 monadic procedures:
11274
11275 @deffn {Monadic Procedure} package-file @var{package} [@var{file}] @
11276 [#:system (%current-system)] [#:target #f] @
11277 [#:output "out"]
11278 Return as a monadic
11279 value in the absolute file name of @var{file} within the @var{output}
11280 directory of @var{package}. When @var{file} is omitted, return the name
11281 of the @var{output} directory of @var{package}. When @var{target} is
11282 true, use it as a cross-compilation target triplet.
11283
11284 Note that this procedure does @emph{not} build @var{package}. Thus, the
11285 result might or might not designate an existing file. We recommend not
11286 using this procedure unless you know what you are doing.
11287 @end deffn
11288
11289 @deffn {Monadic Procedure} package->derivation @var{package} [@var{system}]
11290 @deffnx {Monadic Procedure} package->cross-derivation @var{package} @
11291 @var{target} [@var{system}]
11292 Monadic version of @code{package-derivation} and
11293 @code{package-cross-derivation} (@pxref{Defining Packages}).
11294 @end deffn
11295
11296
11297 @node G-Expressions
11298 @section G-Expressions
11299
11300 @cindex G-expression
11301 @cindex build code quoting
11302 So we have ``derivations'', which represent a sequence of build actions
11303 to be performed to produce an item in the store (@pxref{Derivations}).
11304 These build actions are performed when asking the daemon to actually
11305 build the derivations; they are run by the daemon in a container
11306 (@pxref{Invoking guix-daemon}).
11307
11308 @cindex code staging
11309 @cindex staging, of code
11310 @cindex strata of code
11311 It should come as no surprise that we like to write these build actions
11312 in Scheme. When we do that, we end up with two @dfn{strata} of Scheme
11313 code@footnote{The term @dfn{stratum} in this context was coined by
11314 Manuel Serrano et al.@: in the context of their work on Hop. Oleg
11315 Kiselyov, who has written insightful
11316 @url{http://okmij.org/ftp/meta-programming/#meta-scheme, essays and code
11317 on this topic}, refers to this kind of code generation as
11318 @dfn{staging}.}: the ``host code''---code that defines packages, talks
11319 to the daemon, etc.---and the ``build code''---code that actually
11320 performs build actions, such as making directories, invoking
11321 @command{make}, and so on (@pxref{Build Phases}).
11322
11323 To describe a derivation and its build actions, one typically needs to
11324 embed build code inside host code. It boils down to manipulating build
11325 code as data, and the homoiconicity of Scheme---code has a direct
11326 representation as data---comes in handy for that. But we need more than
11327 the normal @code{quasiquote} mechanism in Scheme to construct build
11328 expressions.
11329
11330 The @code{(guix gexp)} module implements @dfn{G-expressions}, a form of
11331 S-expressions adapted to build expressions. G-expressions, or
11332 @dfn{gexps}, consist essentially of three syntactic forms: @code{gexp},
11333 @code{ungexp}, and @code{ungexp-splicing} (or simply: @code{#~},
11334 @code{#$}, and @code{#$@@}), which are comparable to
11335 @code{quasiquote}, @code{unquote}, and @code{unquote-splicing},
11336 respectively (@pxref{Expression Syntax, @code{quasiquote},, guile,
11337 GNU Guile Reference Manual}). However, there are major differences:
11338
11339 @itemize
11340 @item
11341 Gexps are meant to be written to a file and run or manipulated by other
11342 processes.
11343
11344 @item
11345 When a high-level object such as a package or derivation is unquoted
11346 inside a gexp, the result is as if its output file name had been
11347 introduced.
11348
11349 @item
11350 Gexps carry information about the packages or derivations they refer to,
11351 and these dependencies are automatically added as inputs to the build
11352 processes that use them.
11353 @end itemize
11354
11355 @cindex lowering, of high-level objects in gexps
11356 This mechanism is not limited to package and derivation
11357 objects: @dfn{compilers} able to ``lower'' other high-level objects to
11358 derivations or files in the store can be defined,
11359 such that these objects can also be inserted
11360 into gexps. For example, a useful type of high-level objects that can be
11361 inserted in a gexp is ``file-like objects'', which make it easy to
11362 add files to the store and to refer to them in
11363 derivations and such (see @code{local-file} and @code{plain-file}
11364 below).
11365
11366 To illustrate the idea, here is an example of a gexp:
11367
11368 @lisp
11369 (define build-exp
11370 #~(begin
11371 (mkdir #$output)
11372 (chdir #$output)
11373 (symlink (string-append #$coreutils "/bin/ls")
11374 "list-files")))
11375 @end lisp
11376
11377 This gexp can be passed to @code{gexp->derivation}; we obtain a
11378 derivation that builds a directory containing exactly one symlink to
11379 @file{/gnu/store/@dots{}-coreutils-8.22/bin/ls}:
11380
11381 @lisp
11382 (gexp->derivation "the-thing" build-exp)
11383 @end lisp
11384
11385 As one would expect, the @code{"/gnu/store/@dots{}-coreutils-8.22"} string is
11386 substituted to the reference to the @var{coreutils} package in the
11387 actual build code, and @var{coreutils} is automatically made an input to
11388 the derivation. Likewise, @code{#$output} (equivalent to @code{(ungexp
11389 output)}) is replaced by a string containing the directory name of the
11390 output of the derivation.
11391
11392 @cindex cross compilation
11393 In a cross-compilation context, it is useful to distinguish between
11394 references to the @emph{native} build of a package---that can run on the
11395 host---versus references to cross builds of a package. To that end, the
11396 @code{#+} plays the same role as @code{#$}, but is a reference to a
11397 native package build:
11398
11399 @lisp
11400 (gexp->derivation "vi"
11401 #~(begin
11402 (mkdir #$output)
11403 (mkdir (string-append #$output "/bin"))
11404 (system* (string-append #+coreutils "/bin/ln")
11405 "-s"
11406 (string-append #$emacs "/bin/emacs")
11407 (string-append #$output "/bin/vi")))
11408 #:target "aarch64-linux-gnu")
11409 @end lisp
11410
11411 @noindent
11412 In the example above, the native build of @var{coreutils} is used, so
11413 that @command{ln} can actually run on the host; but then the
11414 cross-compiled build of @var{emacs} is referenced.
11415
11416 @cindex imported modules, for gexps
11417 @findex with-imported-modules
11418 Another gexp feature is @dfn{imported modules}: sometimes you want to be
11419 able to use certain Guile modules from the ``host environment'' in the
11420 gexp, so those modules should be imported in the ``build environment''.
11421 The @code{with-imported-modules} form allows you to express that:
11422
11423 @lisp
11424 (let ((build (with-imported-modules '((guix build utils))
11425 #~(begin
11426 (use-modules (guix build utils))
11427 (mkdir-p (string-append #$output "/bin"))))))
11428 (gexp->derivation "empty-dir"
11429 #~(begin
11430 #$build
11431 (display "success!\n")
11432 #t)))
11433 @end lisp
11434
11435 @noindent
11436 In this example, the @code{(guix build utils)} module is automatically
11437 pulled into the isolated build environment of our gexp, such that
11438 @code{(use-modules (guix build utils))} works as expected.
11439
11440 @cindex module closure
11441 @findex source-module-closure
11442 Usually you want the @emph{closure} of the module to be imported---i.e.,
11443 the module itself and all the modules it depends on---rather than just
11444 the module; failing to do that, attempts to use the module will fail
11445 because of missing dependent modules. The @code{source-module-closure}
11446 procedure computes the closure of a module by looking at its source file
11447 headers, which comes in handy in this case:
11448
11449 @lisp
11450 (use-modules (guix modules)) ;for 'source-module-closure'
11451
11452 (with-imported-modules (source-module-closure
11453 '((guix build utils)
11454 (gnu build image)))
11455 (gexp->derivation "something-with-vms"
11456 #~(begin
11457 (use-modules (guix build utils)
11458 (gnu build image))
11459 @dots{})))
11460 @end lisp
11461
11462 @cindex extensions, for gexps
11463 @findex with-extensions
11464 In the same vein, sometimes you want to import not just pure-Scheme
11465 modules, but also ``extensions'' such as Guile bindings to C libraries
11466 or other ``full-blown'' packages. Say you need the @code{guile-json}
11467 package available on the build side, here's how you would do it:
11468
11469 @lisp
11470 (use-modules (gnu packages guile)) ;for 'guile-json'
11471
11472 (with-extensions (list guile-json)
11473 (gexp->derivation "something-with-json"
11474 #~(begin
11475 (use-modules (json))
11476 @dots{})))
11477 @end lisp
11478
11479 The syntactic form to construct gexps is summarized below.
11480
11481 @deffn {Scheme Syntax} #~@var{exp}
11482 @deffnx {Scheme Syntax} (gexp @var{exp})
11483 Return a G-expression containing @var{exp}. @var{exp} may contain one
11484 or more of the following forms:
11485
11486 @table @code
11487 @item #$@var{obj}
11488 @itemx (ungexp @var{obj})
11489 Introduce a reference to @var{obj}. @var{obj} may have one of the
11490 supported types, for example a package or a
11491 derivation, in which case the @code{ungexp} form is replaced by its
11492 output file name---e.g., @code{"/gnu/store/@dots{}-coreutils-8.22}.
11493
11494 If @var{obj} is a list, it is traversed and references to supported
11495 objects are substituted similarly.
11496
11497 If @var{obj} is another gexp, its contents are inserted and its
11498 dependencies are added to those of the containing gexp.
11499
11500 If @var{obj} is another kind of object, it is inserted as is.
11501
11502 @item #$@var{obj}:@var{output}
11503 @itemx (ungexp @var{obj} @var{output})
11504 This is like the form above, but referring explicitly to the
11505 @var{output} of @var{obj}---this is useful when @var{obj} produces
11506 multiple outputs (@pxref{Packages with Multiple Outputs}).
11507
11508 @item #+@var{obj}
11509 @itemx #+@var{obj}:output
11510 @itemx (ungexp-native @var{obj})
11511 @itemx (ungexp-native @var{obj} @var{output})
11512 Same as @code{ungexp}, but produces a reference to the @emph{native}
11513 build of @var{obj} when used in a cross compilation context.
11514
11515 @item #$output[:@var{output}]
11516 @itemx (ungexp output [@var{output}])
11517 Insert a reference to derivation output @var{output}, or to the main
11518 output when @var{output} is omitted.
11519
11520 This only makes sense for gexps passed to @code{gexp->derivation}.
11521
11522 @item #$@@@var{lst}
11523 @itemx (ungexp-splicing @var{lst})
11524 Like the above, but splices the contents of @var{lst} inside the
11525 containing list.
11526
11527 @item #+@@@var{lst}
11528 @itemx (ungexp-native-splicing @var{lst})
11529 Like the above, but refers to native builds of the objects listed in
11530 @var{lst}.
11531
11532 @end table
11533
11534 G-expressions created by @code{gexp} or @code{#~} are run-time objects
11535 of the @code{gexp?} type (see below).
11536 @end deffn
11537
11538 @deffn {Scheme Syntax} with-imported-modules @var{modules} @var{body}@dots{}
11539 Mark the gexps defined in @var{body}@dots{} as requiring @var{modules}
11540 in their execution environment.
11541
11542 Each item in @var{modules} can be the name of a module, such as
11543 @code{(guix build utils)}, or it can be a module name, followed by an
11544 arrow, followed by a file-like object:
11545
11546 @lisp
11547 `((guix build utils)
11548 (guix gcrypt)
11549 ((guix config) => ,(scheme-file "config.scm"
11550 #~(define-module @dots{}))))
11551 @end lisp
11552
11553 @noindent
11554 In the example above, the first two modules are taken from the search
11555 path, and the last one is created from the given file-like object.
11556
11557 This form has @emph{lexical} scope: it has an effect on the gexps
11558 directly defined in @var{body}@dots{}, but not on those defined, say, in
11559 procedures called from @var{body}@dots{}.
11560 @end deffn
11561
11562 @deffn {Scheme Syntax} with-extensions @var{extensions} @var{body}@dots{}
11563 Mark the gexps defined in @var{body}@dots{} as requiring
11564 @var{extensions} in their build and execution environment.
11565 @var{extensions} is typically a list of package objects such as those
11566 defined in the @code{(gnu packages guile)} module.
11567
11568 Concretely, the packages listed in @var{extensions} are added to the
11569 load path while compiling imported modules in @var{body}@dots{}; they
11570 are also added to the load path of the gexp returned by
11571 @var{body}@dots{}.
11572 @end deffn
11573
11574 @deffn {Scheme Procedure} gexp? @var{obj}
11575 Return @code{#t} if @var{obj} is a G-expression.
11576 @end deffn
11577
11578 G-expressions are meant to be written to disk, either as code building
11579 some derivation, or as plain files in the store. The monadic procedures
11580 below allow you to do that (@pxref{The Store Monad}, for more
11581 information about monads).
11582
11583 @deffn {Monadic Procedure} gexp->derivation @var{name} @var{exp} @
11584 [#:system (%current-system)] [#:target #f] [#:graft? #t] @
11585 [#:hash #f] [#:hash-algo #f] @
11586 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
11587 [#:module-path @code{%load-path}] @
11588 [#:effective-version "2.2"] @
11589 [#:references-graphs #f] [#:allowed-references #f] @
11590 [#:disallowed-references #f] @
11591 [#:leaked-env-vars #f] @
11592 [#:script-name (string-append @var{name} "-builder")] @
11593 [#:deprecation-warnings #f] @
11594 [#:local-build? #f] [#:substitutable? #t] @
11595 [#:properties '()] [#:guile-for-build #f]
11596 Return a derivation @var{name} that runs @var{exp} (a gexp) with
11597 @var{guile-for-build} (a derivation) on @var{system}; @var{exp} is
11598 stored in a file called @var{script-name}. When @var{target} is true,
11599 it is used as the cross-compilation target triplet for packages referred
11600 to by @var{exp}.
11601
11602 @var{modules} is deprecated in favor of @code{with-imported-modules}.
11603 Its meaning is to
11604 make @var{modules} available in the evaluation context of @var{exp};
11605 @var{modules} is a list of names of Guile modules searched in
11606 @var{module-path} to be copied in the store, compiled, and made available in
11607 the load path during the execution of @var{exp}---e.g., @code{((guix
11608 build utils) (guix build gnu-build-system))}.
11609
11610 @var{effective-version} determines the string to use when adding extensions of
11611 @var{exp} (see @code{with-extensions}) to the search path---e.g., @code{"2.2"}.
11612
11613 @var{graft?} determines whether packages referred to by @var{exp} should be grafted when
11614 applicable.
11615
11616 When @var{references-graphs} is true, it must be a list of tuples of one of the
11617 following forms:
11618
11619 @example
11620 (@var{file-name} @var{package})
11621 (@var{file-name} @var{package} @var{output})
11622 (@var{file-name} @var{derivation})
11623 (@var{file-name} @var{derivation} @var{output})
11624 (@var{file-name} @var{store-item})
11625 @end example
11626
11627 The right-hand-side of each element of @var{references-graphs} is automatically made
11628 an input of the build process of @var{exp}. In the build environment, each
11629 @var{file-name} contains the reference graph of the corresponding item, in a simple
11630 text format.
11631
11632 @var{allowed-references} must be either @code{#f} or a list of output names and packages.
11633 In the latter case, the list denotes store items that the result is allowed to
11634 refer to. Any reference to another store item will lead to a build error.
11635 Similarly for @var{disallowed-references}, which can list items that must not be
11636 referenced by the outputs.
11637
11638 @var{deprecation-warnings} determines whether to show deprecation warnings while
11639 compiling modules. It can be @code{#f}, @code{#t}, or @code{'detailed}.
11640
11641 The other arguments are as for @code{derivation} (@pxref{Derivations}).
11642 @end deffn
11643
11644 @cindex file-like objects
11645 The @code{local-file}, @code{plain-file}, @code{computed-file},
11646 @code{program-file}, and @code{scheme-file} procedures below return
11647 @dfn{file-like objects}. That is, when unquoted in a G-expression,
11648 these objects lead to a file in the store. Consider this G-expression:
11649
11650 @lisp
11651 #~(system* #$(file-append glibc "/sbin/nscd") "-f"
11652 #$(local-file "/tmp/my-nscd.conf"))
11653 @end lisp
11654
11655 The effect here is to ``intern'' @file{/tmp/my-nscd.conf} by copying it
11656 to the store. Once expanded, for instance @i{via}
11657 @code{gexp->derivation}, the G-expression refers to that copy under
11658 @file{/gnu/store}; thus, modifying or removing the file in @file{/tmp}
11659 does not have any effect on what the G-expression does.
11660 @code{plain-file} can be used similarly; it differs in that the file
11661 content is directly passed as a string.
11662
11663 @deffn {Scheme Procedure} local-file @var{file} [@var{name}] @
11664 [#:recursive? #f] [#:select? (const #t)]
11665 Return an object representing local file @var{file} to add to the store;
11666 this object can be used in a gexp. If @var{file} is a literal string
11667 denoting a relative file name, it is looked up relative to the source
11668 file where it appears; if @var{file} is not a literal string, it is
11669 looked up relative to the current working directory at run time.
11670 @var{file} will be added to the store under @var{name}--by default the
11671 base name of @var{file}.
11672
11673 When @var{recursive?} is true, the contents of @var{file} are added recursively; if @var{file}
11674 designates a flat file and @var{recursive?} is true, its contents are added, and its
11675 permission bits are kept.
11676
11677 When @var{recursive?} is true, call @code{(@var{select?} @var{file}
11678 @var{stat})} for each directory entry, where @var{file} is the entry's
11679 absolute file name and @var{stat} is the result of @code{lstat}; exclude
11680 entries for which @var{select?} does not return true.
11681
11682 This is the declarative counterpart of the @code{interned-file} monadic
11683 procedure (@pxref{The Store Monad, @code{interned-file}}).
11684 @end deffn
11685
11686 @deffn {Scheme Procedure} plain-file @var{name} @var{content}
11687 Return an object representing a text file called @var{name} with the given
11688 @var{content} (a string or a bytevector) to be added to the store.
11689
11690 This is the declarative counterpart of @code{text-file}.
11691 @end deffn
11692
11693 @deffn {Scheme Procedure} computed-file @var{name} @var{gexp} @
11694 [#:local-build? #t]
11695 [#:options '()]
11696 Return an object representing the store item @var{name}, a file or
11697 directory computed by @var{gexp}. When @var{local-build?} is true (the
11698 default), the derivation is built locally. @var{options} is a list of
11699 additional arguments to pass to @code{gexp->derivation}.
11700
11701 This is the declarative counterpart of @code{gexp->derivation}.
11702 @end deffn
11703
11704 @deffn {Monadic Procedure} gexp->script @var{name} @var{exp} @
11705 [#:guile (default-guile)] [#:module-path %load-path] @
11706 [#:system (%current-system)] [#:target #f]
11707 Return an executable script @var{name} that runs @var{exp} using
11708 @var{guile}, with @var{exp}'s imported modules in its search path.
11709 Look up @var{exp}'s modules in @var{module-path}.
11710
11711 The example below builds a script that simply invokes the @command{ls}
11712 command:
11713
11714 @lisp
11715 (use-modules (guix gexp) (gnu packages base))
11716
11717 (gexp->script "list-files"
11718 #~(execl #$(file-append coreutils "/bin/ls")
11719 "ls"))
11720 @end lisp
11721
11722 When ``running'' it through the store (@pxref{The Store Monad,
11723 @code{run-with-store}}), we obtain a derivation that produces an
11724 executable file @file{/gnu/store/@dots{}-list-files} along these lines:
11725
11726 @example
11727 #!/gnu/store/@dots{}-guile-2.0.11/bin/guile -ds
11728 !#
11729 (execl "/gnu/store/@dots{}-coreutils-8.22"/bin/ls" "ls")
11730 @end example
11731 @end deffn
11732
11733 @deffn {Scheme Procedure} program-file @var{name} @var{exp} @
11734 [#:guile #f] [#:module-path %load-path]
11735 Return an object representing the executable store item @var{name} that
11736 runs @var{gexp}. @var{guile} is the Guile package used to execute that
11737 script. Imported modules of @var{gexp} are looked up in @var{module-path}.
11738
11739 This is the declarative counterpart of @code{gexp->script}.
11740 @end deffn
11741
11742 @deffn {Monadic Procedure} gexp->file @var{name} @var{exp} @
11743 [#:set-load-path? #t] [#:module-path %load-path] @
11744 [#:splice? #f] @
11745 [#:guile (default-guile)]
11746 Return a derivation that builds a file @var{name} containing @var{exp}.
11747 When @var{splice?} is true, @var{exp} is considered to be a list of
11748 expressions that will be spliced in the resulting file.
11749
11750 When @var{set-load-path?} is true, emit code in the resulting file to
11751 set @code{%load-path} and @code{%load-compiled-path} to honor
11752 @var{exp}'s imported modules. Look up @var{exp}'s modules in
11753 @var{module-path}.
11754
11755 The resulting file holds references to all the dependencies of @var{exp}
11756 or a subset thereof.
11757 @end deffn
11758
11759 @deffn {Scheme Procedure} scheme-file @var{name} @var{exp} @
11760 [#:splice? #f] [#:set-load-path? #t]
11761 Return an object representing the Scheme file @var{name} that contains
11762 @var{exp}.
11763
11764 This is the declarative counterpart of @code{gexp->file}.
11765 @end deffn
11766
11767 @deffn {Monadic Procedure} text-file* @var{name} @var{text} @dots{}
11768 Return as a monadic value a derivation that builds a text file
11769 containing all of @var{text}. @var{text} may list, in addition to
11770 strings, objects of any type that can be used in a gexp: packages,
11771 derivations, local file objects, etc. The resulting store file holds
11772 references to all these.
11773
11774 This variant should be preferred over @code{text-file} anytime the file
11775 to create will reference items from the store. This is typically the
11776 case when building a configuration file that embeds store file names,
11777 like this:
11778
11779 @lisp
11780 (define (profile.sh)
11781 ;; Return the name of a shell script in the store that
11782 ;; initializes the 'PATH' environment variable.
11783 (text-file* "profile.sh"
11784 "export PATH=" coreutils "/bin:"
11785 grep "/bin:" sed "/bin\n"))
11786 @end lisp
11787
11788 In this example, the resulting @file{/gnu/store/@dots{}-profile.sh} file
11789 will reference @var{coreutils}, @var{grep}, and @var{sed}, thereby
11790 preventing them from being garbage-collected during its lifetime.
11791 @end deffn
11792
11793 @deffn {Scheme Procedure} mixed-text-file @var{name} @var{text} @dots{}
11794 Return an object representing store file @var{name} containing
11795 @var{text}. @var{text} is a sequence of strings and file-like objects,
11796 as in:
11797
11798 @lisp
11799 (mixed-text-file "profile"
11800 "export PATH=" coreutils "/bin:" grep "/bin")
11801 @end lisp
11802
11803 This is the declarative counterpart of @code{text-file*}.
11804 @end deffn
11805
11806 @deffn {Scheme Procedure} file-union @var{name} @var{files}
11807 Return a @code{<computed-file>} that builds a directory containing all of @var{files}.
11808 Each item in @var{files} must be a two-element list where the first element is the
11809 file name to use in the new directory, and the second element is a gexp
11810 denoting the target file. Here's an example:
11811
11812 @lisp
11813 (file-union "etc"
11814 `(("hosts" ,(plain-file "hosts"
11815 "127.0.0.1 localhost"))
11816 ("bashrc" ,(plain-file "bashrc"
11817 "alias ls='ls --color=auto'"))))
11818 @end lisp
11819
11820 This yields an @code{etc} directory containing these two files.
11821 @end deffn
11822
11823 @deffn {Scheme Procedure} directory-union @var{name} @var{things}
11824 Return a directory that is the union of @var{things}, where @var{things} is a list of
11825 file-like objects denoting directories. For example:
11826
11827 @lisp
11828 (directory-union "guile+emacs" (list guile emacs))
11829 @end lisp
11830
11831 yields a directory that is the union of the @code{guile} and @code{emacs} packages.
11832 @end deffn
11833
11834 @deffn {Scheme Procedure} file-append @var{obj} @var{suffix} @dots{}
11835 Return a file-like object that expands to the concatenation of @var{obj}
11836 and @var{suffix}, where @var{obj} is a lowerable object and each
11837 @var{suffix} is a string.
11838
11839 As an example, consider this gexp:
11840
11841 @lisp
11842 (gexp->script "run-uname"
11843 #~(system* #$(file-append coreutils
11844 "/bin/uname")))
11845 @end lisp
11846
11847 The same effect could be achieved with:
11848
11849 @lisp
11850 (gexp->script "run-uname"
11851 #~(system* (string-append #$coreutils
11852 "/bin/uname")))
11853 @end lisp
11854
11855 There is one difference though: in the @code{file-append} case, the
11856 resulting script contains the absolute file name as a string, whereas in
11857 the second case, the resulting script contains a @code{(string-append
11858 @dots{})} expression to construct the file name @emph{at run time}.
11859 @end deffn
11860
11861 @deffn {Scheme Syntax} let-system @var{system} @var{body}@dots{}
11862 @deffnx {Scheme Syntax} let-system (@var{system} @var{target}) @var{body}@dots{}
11863 Bind @var{system} to the currently targeted system---e.g.,
11864 @code{"x86_64-linux"}---within @var{body}.
11865
11866 In the second case, additionally bind @var{target} to the current
11867 cross-compilation target---a GNU triplet such as
11868 @code{"arm-linux-gnueabihf"}---or @code{#f} if we are not
11869 cross-compiling.
11870
11871 @code{let-system} is useful in the occasional case where the object
11872 spliced into the gexp depends on the target system, as in this example:
11873
11874 @lisp
11875 #~(system*
11876 #+(let-system system
11877 (cond ((string-prefix? "armhf-" system)
11878 (file-append qemu "/bin/qemu-system-arm"))
11879 ((string-prefix? "x86_64-" system)
11880 (file-append qemu "/bin/qemu-system-x86_64"))
11881 (else
11882 (error "dunno!"))))
11883 "-net" "user" #$image)
11884 @end lisp
11885 @end deffn
11886
11887 @deffn {Scheme Syntax} with-parameters ((@var{parameter} @var{value}) @dots{}) @var{exp}
11888 This macro is similar to the @code{parameterize} form for
11889 dynamically-bound @dfn{parameters} (@pxref{Parameters,,, guile, GNU
11890 Guile Reference Manual}). The key difference is that it takes effect
11891 when the file-like object returned by @var{exp} is lowered to a
11892 derivation or store item.
11893
11894 A typical use of @code{with-parameters} is to force the system in effect
11895 for a given object:
11896
11897 @lisp
11898 (with-parameters ((%current-system "i686-linux"))
11899 coreutils)
11900 @end lisp
11901
11902 The example above returns an object that corresponds to the i686 build
11903 of Coreutils, regardless of the current value of @code{%current-system}.
11904 @end deffn
11905
11906
11907 Of course, in addition to gexps embedded in ``host'' code, there are
11908 also modules containing build tools. To make it clear that they are
11909 meant to be used in the build stratum, these modules are kept in the
11910 @code{(guix build @dots{})} name space.
11911
11912 @cindex lowering, of high-level objects in gexps
11913 Internally, high-level objects are @dfn{lowered}, using their compiler,
11914 to either derivations or store items. For instance, lowering a package
11915 yields a derivation, and lowering a @code{plain-file} yields a store
11916 item. This is achieved using the @code{lower-object} monadic procedure.
11917
11918 @deffn {Monadic Procedure} lower-object @var{obj} [@var{system}] @
11919 [#:target #f]
11920 Return as a value in @code{%store-monad} the derivation or store item
11921 corresponding to @var{obj} for @var{system}, cross-compiling for
11922 @var{target} if @var{target} is true. @var{obj} must be an object that
11923 has an associated gexp compiler, such as a @code{<package>}.
11924 @end deffn
11925
11926 @deffn {Procedure} gexp->approximate-sexp @var{gexp}
11927 Sometimes, it may be useful to convert a G-exp into a S-exp. For
11928 example, some linters (@pxref{Invoking guix lint}) peek into the build
11929 phases of a package to detect potential problems. This conversion can
11930 be achieved with this procedure. However, some information can be lost
11931 in the process. More specifically, lowerable objects will be silently
11932 replaced with some arbitrary object -- currently the list
11933 @code{(*approximate*)}, but this may change.
11934 @end deffn
11935
11936 @node Invoking guix repl
11937 @section Invoking @command{guix repl}
11938
11939 @cindex @command{guix repl}
11940 @cindex REPL, read-eval-print loop, script
11941 The @command{guix repl} command makes it easier to program Guix in Guile
11942 by launching a Guile @dfn{read-eval-print loop} (REPL) for interactive
11943 programming (@pxref{Using Guile Interactively,,, guile,
11944 GNU Guile Reference Manual}), or by running Guile scripts
11945 (@pxref{Running Guile Scripts,,, guile,
11946 GNU Guile Reference Manual}).
11947 Compared to just launching the @command{guile}
11948 command, @command{guix repl} guarantees that all the Guix modules and all its
11949 dependencies are available in the search path.
11950
11951 The general syntax is:
11952
11953 @example
11954 guix repl @var{options} [@var{file} @var{args}]
11955 @end example
11956
11957 When a @var{file} argument is provided, @var{file} is
11958 executed as a Guile scripts:
11959
11960 @example
11961 guix repl my-script.scm
11962 @end example
11963
11964 To pass arguments to the script, use @code{--} to prevent them from
11965 being interpreted as arguments to @command{guix repl} itself:
11966
11967 @example
11968 guix repl -- my-script.scm --input=foo.txt
11969 @end example
11970
11971 To make a script executable directly from the shell, using the guix
11972 executable that is on the user's search path, add the following two
11973 lines at the top of the script:
11974
11975 @example
11976 @code{#!/usr/bin/env -S guix repl --}
11977 @code{!#}
11978 @end example
11979
11980 Without a file name argument, a Guile REPL is started, allowing for
11981 interactive use (@pxref{Using Guix Interactively}):
11982
11983 @example
11984 $ guix repl
11985 scheme@@(guile-user)> ,use (gnu packages base)
11986 scheme@@(guile-user)> coreutils
11987 $1 = #<package coreutils@@8.29 gnu/packages/base.scm:327 3e28300>
11988 @end example
11989
11990 @cindex inferiors
11991 In addition, @command{guix repl} implements a simple machine-readable REPL
11992 protocol for use by @code{(guix inferior)}, a facility to interact with
11993 @dfn{inferiors}, separate processes running a potentially different revision
11994 of Guix.
11995
11996 The available options are as follows:
11997
11998 @table @code
11999 @item --type=@var{type}
12000 @itemx -t @var{type}
12001 Start a REPL of the given @var{TYPE}, which can be one of the following:
12002
12003 @table @code
12004 @item guile
12005 This is default, and it spawns a standard full-featured Guile REPL.
12006 @item machine
12007 Spawn a REPL that uses the machine-readable protocol. This is the protocol
12008 that the @code{(guix inferior)} module speaks.
12009 @end table
12010
12011 @item --listen=@var{endpoint}
12012 By default, @command{guix repl} reads from standard input and writes to
12013 standard output. When this option is passed, it will instead listen for
12014 connections on @var{endpoint}. Here are examples of valid options:
12015
12016 @table @code
12017 @item --listen=tcp:37146
12018 Accept connections on localhost on port 37146.
12019
12020 @item --listen=unix:/tmp/socket
12021 Accept connections on the Unix-domain socket @file{/tmp/socket}.
12022 @end table
12023
12024 @item --load-path=@var{directory}
12025 @itemx -L @var{directory}
12026 Add @var{directory} to the front of the package module search path
12027 (@pxref{Package Modules}).
12028
12029 This allows users to define their own packages and make them visible to
12030 the script or REPL.
12031
12032 @item -q
12033 Inhibit loading of the @file{~/.guile} file. By default, that
12034 configuration file is loaded when spawning a @code{guile} REPL.
12035 @end table
12036
12037 @node Using Guix Interactively
12038 @section Using Guix Interactively
12039
12040 @cindex interactive use
12041 @cindex REPL, read-eval-print loop
12042 The @command{guix repl} command gives you access to a warm and friendly
12043 @dfn{read-eval-print loop} (REPL) (@pxref{Invoking guix repl}). If
12044 you're getting into Guix programming---defining your own packages,
12045 writing manifests, defining services for Guix System or Guix Home,
12046 etc.---you will surely find it convenient to toy with ideas at the REPL.
12047
12048 If you use Emacs, the most convenient way to do that is with Geiser
12049 (@pxref{The Perfect Setup}), but you do not have to use Emacs to enjoy
12050 the REPL@. When using @command{guix repl} or @command{guile} in the
12051 terminal, we recommend using Readline for completion and Colorized to
12052 get colorful output. To do that, you can run:
12053
12054 @example
12055 guix install guile guile-readline guile-colorized
12056 @end example
12057
12058 @noindent
12059 ... and then create a @file{.guile} file in your home directory containing
12060 this:
12061
12062 @lisp
12063 (use-modules (ice-9 readline) (ice-9 colorized))
12064
12065 (activate-readline)
12066 (activate-colorized)
12067 @end lisp
12068
12069 The REPL lets you evaluate Scheme code; you type a Scheme expression at
12070 the prompt, and the REPL prints what it evaluates to:
12071
12072 @example
12073 $ guix repl
12074 scheme@@(guix-user)> (+ 2 3)
12075 $1 = 5
12076 scheme@@(guix-user)> (string-append "a" "b")
12077 $2 = "ab"
12078 @end example
12079
12080 It becomes interesting when you start fiddling with Guix at the REPL.
12081 The first thing you'll want to do is to ``import'' the @code{(guix)}
12082 module, which gives access to the main part of the programming
12083 interface, and perhaps a bunch of useful Guix modules. You could type
12084 @code{(use-modules (guix))}, which is valid Scheme code to import a
12085 module (@pxref{Using Guile Modules,,, guile, GNU Guile Reference
12086 Manual}), but the REPL provides the @code{use} @dfn{command} as a
12087 shorthand notation (@pxref{REPL Commands,,, guile, GNU Guile Reference
12088 Manual}):
12089
12090 @example
12091 scheme@@(guix-user)> ,use (guix)
12092 scheme@@(guix-user)> ,use (gnu packages base)
12093 @end example
12094
12095 Notice that REPL commands are introduced by a leading comma. A REPL
12096 command like @code{use} is not valid Scheme code; it's interpreted
12097 specially by the REPL.
12098
12099 Guix extends the Guile REPL with additional commands for convenience.
12100 Among those, the @code{build} command comes in handy: it ensures that
12101 the given file-like object is built, building it if needed, and returns
12102 its output file name(s). In the example below, we build the
12103 @code{coreutils} and @code{grep} packages, as well as a ``computed
12104 file'' (@pxref{G-Expressions, @code{computed-file}}), and we use the
12105 @code{scandir} procedure to list the files in Grep's @code{/bin}
12106 directory:
12107
12108 @example
12109 scheme@@(guix-user)> ,build coreutils
12110 $1 = "/gnu/store/@dots{}-coreutils-8.32-debug"
12111 $2 = "/gnu/store/@dots{}-coreutils-8.32"
12112 scheme@@(guix-user)> ,build grep
12113 $3 = "/gnu/store/@dots{}-grep-3.6"
12114 scheme@@(guix-user)> ,build (computed-file "x" #~(mkdir #$output))
12115 building /gnu/store/@dots{}-x.drv...
12116 $4 = "/gnu/store/@dots{}-x"
12117 scheme@@(guix-user)> ,use(ice-9 ftw)
12118 scheme@@(guix-user)> (scandir (string-append $3 "/bin"))
12119 $5 = ("." ".." "egrep" "fgrep" "grep")
12120 @end example
12121
12122 At a lower-level, a useful command is @code{lower}: it takes a file-like
12123 object and ``lowers'' it into a derivation (@pxref{Derivations}) or a
12124 store file:
12125
12126 @example
12127 scheme@@(guix-user)> ,lower grep
12128 $6 = #<derivation /gnu/store/@dots{}-grep-3.6.drv => /gnu/store/@dots{}-grep-3.6 7f0e639115f0>
12129 scheme@@(guix-user)> ,lower (plain-file "x" "Hello!")
12130 $7 = "/gnu/store/@dots{}-x"
12131 @end example
12132
12133 The full list of REPL commands can be seen by typing @code{,help guix}
12134 and is given below for reference.
12135
12136 @deffn {REPL command} build @var{object}
12137 Lower @var{object} and build it if it's not already built, returning its
12138 output file name(s).
12139 @end deffn
12140
12141 @deffn {REPL command} lower @var{object}
12142 Lower @var{object} into a derivation or store file name and return it.
12143 @end deffn
12144
12145 @deffn {REPL command} verbosity @var{level}
12146 Change build verbosity to @var{level}.
12147
12148 This is similar to the @option{--verbosity} command-line option
12149 (@pxref{Common Build Options}): level 0 means total silence, level 1
12150 shows build events only, and higher levels print build logs.
12151 @end deffn
12152
12153 @deffn {REPL command} run-in-store @var{exp}
12154 Run @var{exp}, a monadic expresssion, through the store monad.
12155 @xref{The Store Monad}, for more information.
12156 @end deffn
12157
12158 @deffn {REPL command} enter-store-monad
12159 Enter a new REPL to evaluate monadic expressions (@pxref{The Store
12160 Monad}). You can quit this ``inner'' REPL by typing @code{,q}.
12161 @end deffn
12162
12163 @c *********************************************************************
12164 @node Utilities
12165 @chapter Utilities
12166
12167 This section describes Guix command-line utilities. Some of them are
12168 primarily targeted at developers and users who write new package
12169 definitions, while others are more generally useful. They complement
12170 the Scheme programming interface of Guix in a convenient way.
12171
12172 @menu
12173 * Invoking guix build:: Building packages from the command line.
12174 * Invoking guix edit:: Editing package definitions.
12175 * Invoking guix download:: Downloading a file and printing its hash.
12176 * Invoking guix hash:: Computing the cryptographic hash of a file.
12177 * Invoking guix import:: Importing package definitions.
12178 * Invoking guix refresh:: Updating package definitions.
12179 * Invoking guix style:: Styling package definitions.
12180 * Invoking guix lint:: Finding errors in package definitions.
12181 * Invoking guix size:: Profiling disk usage.
12182 * Invoking guix graph:: Visualizing the graph of packages.
12183 * Invoking guix publish:: Sharing substitutes.
12184 * Invoking guix challenge:: Challenging substitute servers.
12185 * Invoking guix copy:: Copying to and from a remote store.
12186 * Invoking guix container:: Process isolation.
12187 * Invoking guix weather:: Assessing substitute availability.
12188 * Invoking guix processes:: Listing client processes.
12189 @end menu
12190
12191 @node Invoking guix build
12192 @section Invoking @command{guix build}
12193
12194 @cindex package building
12195 @cindex @command{guix build}
12196 The @command{guix build} command builds packages or derivations and
12197 their dependencies, and prints the resulting store paths. Note that it
12198 does not modify the user's profile---this is the job of the
12199 @command{guix package} command (@pxref{Invoking guix package}). Thus,
12200 it is mainly useful for distribution developers.
12201
12202 The general syntax is:
12203
12204 @example
12205 guix build @var{options} @var{package-or-derivation}@dots{}
12206 @end example
12207
12208 As an example, the following command builds the latest versions of Emacs
12209 and of Guile, displays their build logs, and finally displays the
12210 resulting directories:
12211
12212 @example
12213 guix build emacs guile
12214 @end example
12215
12216 Similarly, the following command builds all the available packages:
12217
12218 @example
12219 guix build --quiet --keep-going \
12220 $(guix package -A | awk '@{ print $1 "@@" $2 @}')
12221 @end example
12222
12223 @var{package-or-derivation} may be either the name of a package found in
12224 the software distribution such as @code{coreutils} or
12225 @code{coreutils@@8.20}, or a derivation such as
12226 @file{/gnu/store/@dots{}-coreutils-8.19.drv}. In the former case, a
12227 package with the corresponding name (and optionally version) is searched
12228 for among the GNU distribution modules (@pxref{Package Modules}).
12229
12230 Alternatively, the @option{--expression} option may be used to specify a
12231 Scheme expression that evaluates to a package; this is useful when
12232 disambiguating among several same-named packages or package variants is
12233 needed.
12234
12235 There may be zero or more @var{options}. The available options are
12236 described in the subsections below.
12237
12238 @menu
12239 * Common Build Options:: Build options for most commands.
12240 * Package Transformation Options:: Creating variants of packages.
12241 * Additional Build Options:: Options specific to 'guix build'.
12242 * Debugging Build Failures:: Real life packaging experience.
12243 @end menu
12244
12245 @node Common Build Options
12246 @subsection Common Build Options
12247
12248 A number of options that control the build process are common to
12249 @command{guix build} and other commands that can spawn builds, such as
12250 @command{guix package} or @command{guix archive}. These are the
12251 following:
12252
12253 @table @code
12254
12255 @item --load-path=@var{directory}
12256 @itemx -L @var{directory}
12257 Add @var{directory} to the front of the package module search path
12258 (@pxref{Package Modules}).
12259
12260 This allows users to define their own packages and make them visible to
12261 the command-line tools.
12262
12263 @item --keep-failed
12264 @itemx -K
12265 Keep the build tree of failed builds. Thus, if a build fails, its build
12266 tree is kept under @file{/tmp}, in a directory whose name is shown at
12267 the end of the build log. This is useful when debugging build issues.
12268 @xref{Debugging Build Failures}, for tips and tricks on how to debug
12269 build issues.
12270
12271 This option implies @option{--no-offload}, and it has no effect when
12272 connecting to a remote daemon with a @code{guix://} URI (@pxref{The
12273 Store, the @env{GUIX_DAEMON_SOCKET} variable}).
12274
12275 @item --keep-going
12276 @itemx -k
12277 Keep going when some of the derivations fail to build; return only once
12278 all the builds have either completed or failed.
12279
12280 The default behavior is to stop as soon as one of the specified
12281 derivations has failed.
12282
12283 @item --dry-run
12284 @itemx -n
12285 Do not build the derivations.
12286
12287 @anchor{fallback-option}
12288 @item --fallback
12289 When substituting a pre-built binary fails, fall back to building
12290 packages locally (@pxref{Substitution Failure}).
12291
12292 @item --substitute-urls=@var{urls}
12293 @anchor{client-substitute-urls}
12294 Consider @var{urls} the whitespace-separated list of substitute source
12295 URLs, overriding the default list of URLs of @command{guix-daemon}
12296 (@pxref{daemon-substitute-urls,, @command{guix-daemon} URLs}).
12297
12298 This means that substitutes may be downloaded from @var{urls}, provided
12299 they are signed by a key authorized by the system administrator
12300 (@pxref{Substitutes}).
12301
12302 When @var{urls} is the empty string, substitutes are effectively
12303 disabled.
12304
12305 @item --no-substitutes
12306 Do not use substitutes for build products. That is, always build things
12307 locally instead of allowing downloads of pre-built binaries
12308 (@pxref{Substitutes}).
12309
12310 @item --no-grafts
12311 Do not ``graft'' packages. In practice, this means that package updates
12312 available as grafts are not applied. @xref{Security Updates}, for more
12313 information on grafts.
12314
12315 @item --rounds=@var{n}
12316 Build each derivation @var{n} times in a row, and raise an error if
12317 consecutive build results are not bit-for-bit identical.
12318
12319 This is a useful way to detect non-deterministic builds processes.
12320 Non-deterministic build processes are a problem because they make it
12321 practically impossible for users to @emph{verify} whether third-party
12322 binaries are genuine. @xref{Invoking guix challenge}, for more.
12323
12324 When used in conjunction with @option{--keep-failed}, the differing
12325 output is kept in the store, under @file{/gnu/store/@dots{}-check}.
12326 This makes it easy to look for differences between the two results.
12327
12328 @item --no-offload
12329 Do not use offload builds to other machines (@pxref{Daemon Offload
12330 Setup}). That is, always build things locally instead of offloading
12331 builds to remote machines.
12332
12333 @item --max-silent-time=@var{seconds}
12334 When the build or substitution process remains silent for more than
12335 @var{seconds}, terminate it and report a build failure.
12336
12337 By default, the daemon's setting is honored (@pxref{Invoking
12338 guix-daemon, @option{--max-silent-time}}).
12339
12340 @item --timeout=@var{seconds}
12341 Likewise, when the build or substitution process lasts for more than
12342 @var{seconds}, terminate it and report a build failure.
12343
12344 By default, the daemon's setting is honored (@pxref{Invoking
12345 guix-daemon, @option{--timeout}}).
12346
12347 @c Note: This option is actually not part of %standard-build-options but
12348 @c most programs honor it.
12349 @cindex verbosity, of the command-line tools
12350 @cindex build logs, verbosity
12351 @item -v @var{level}
12352 @itemx --verbosity=@var{level}
12353 Use the given verbosity @var{level}, an integer. Choosing 0 means that
12354 no output is produced, 1 is for quiet output; 2 is similar to 1 but it
12355 additionally displays download URLs; 3 shows all the build log output on
12356 standard error.
12357
12358 @item --cores=@var{n}
12359 @itemx -c @var{n}
12360 Allow the use of up to @var{n} CPU cores for the build. The special
12361 value @code{0} means to use as many CPU cores as available.
12362
12363 @item --max-jobs=@var{n}
12364 @itemx -M @var{n}
12365 Allow at most @var{n} build jobs in parallel. @xref{Invoking
12366 guix-daemon, @option{--max-jobs}}, for details about this option and the
12367 equivalent @command{guix-daemon} option.
12368
12369 @item --debug=@var{level}
12370 Produce debugging output coming from the build daemon. @var{level} must be an
12371 integer between 0 and 5; higher means more verbose output. Setting a level of
12372 4 or more may be helpful when debugging setup issues with the build daemon.
12373
12374 @end table
12375
12376 Behind the scenes, @command{guix build} is essentially an interface to
12377 the @code{package-derivation} procedure of the @code{(guix packages)}
12378 module, and to the @code{build-derivations} procedure of the @code{(guix
12379 derivations)} module.
12380
12381 In addition to options explicitly passed on the command line,
12382 @command{guix build} and other @command{guix} commands that support
12383 building honor the @env{GUIX_BUILD_OPTIONS} environment variable.
12384
12385 @defvr {Environment Variable} GUIX_BUILD_OPTIONS
12386 Users can define this variable to a list of command line options that
12387 will automatically be used by @command{guix build} and other
12388 @command{guix} commands that can perform builds, as in the example
12389 below:
12390
12391 @example
12392 $ export GUIX_BUILD_OPTIONS="--no-substitutes -c 2 -L /foo/bar"
12393 @end example
12394
12395 These options are parsed independently, and the result is appended to
12396 the parsed command-line options.
12397 @end defvr
12398
12399
12400 @node Package Transformation Options
12401 @subsection Package Transformation Options
12402
12403 @cindex package variants
12404 Another set of command-line options supported by @command{guix build}
12405 and also @command{guix package} are @dfn{package transformation
12406 options}. These are options that make it possible to define @dfn{package
12407 variants}---for instance, packages built from different source code.
12408 This is a convenient way to create customized packages on the fly
12409 without having to type in the definitions of package variants
12410 (@pxref{Defining Packages}).
12411
12412 Package transformation options are preserved across upgrades:
12413 @command{guix upgrade} attempts to apply transformation options
12414 initially used when creating the profile to the upgraded packages.
12415
12416 The available options are listed below. Most commands support them and
12417 also support a @option{--help-transform} option that lists all the
12418 available options and a synopsis (these options are not shown in the
12419 @option{--help} output for brevity).
12420
12421 @table @code
12422
12423 @cindex performance, tuning code
12424 @cindex optimization, of package code
12425 @cindex tuning, of package code
12426 @cindex SIMD support
12427 @cindex tunable packages
12428 @cindex package multi-versioning
12429 @item --tune[=@var{cpu}]
12430 Use versions of the packages marked as ``tunable'' optimized for
12431 @var{cpu}. When @var{cpu} is @code{native}, or when it is omitted, tune
12432 for the CPU on which the @command{guix} command is running.
12433
12434 Valid @var{cpu} names are those recognized by the underlying compiler,
12435 by default the GNU Compiler Collection. On x86_64 processors, this
12436 includes CPU names such as @code{nehalem}, @code{haswell}, and
12437 @code{skylake} (@pxref{x86 Options, @code{-march},, gcc, Using the GNU
12438 Compiler Collection (GCC)}).
12439
12440 As new generations of CPUs come out, they augment the standard
12441 instruction set architecture (ISA) with additional instructions, in
12442 particular instructions for single-instruction/multiple-data (SIMD)
12443 parallel processing. For example, while Core2 and Skylake CPUs both
12444 implement the x86_64 ISA, only the latter supports AVX2 SIMD
12445 instructions.
12446
12447 The primary gain one can expect from @option{--tune} is for programs
12448 that can make use of those SIMD capabilities @emph{and} that do not
12449 already have a mechanism to select the right optimized code at run time.
12450 Packages that have the @code{tunable?} property set are considered
12451 @dfn{tunable packages} by the @option{--tune} option; a package
12452 definition with the property set looks like this:
12453
12454 @lisp
12455 (package
12456 (name "hello-simd")
12457 ;; ...
12458
12459 ;; This package may benefit from SIMD extensions so
12460 ;; mark it as "tunable".
12461 (properties '((tunable? . #t))))
12462 @end lisp
12463
12464 Other packages are not considered tunable. This allows Guix to use
12465 generic binaries in the cases where tuning for a specific CPU is
12466 unlikely to provide any gain.
12467
12468 Tuned packages are built with @code{-march=@var{CPU}}; under the hood,
12469 the @option{-march} option is passed to the actual wrapper by a compiler
12470 wrapper. Since the build machine may not be able to run code for the
12471 target CPU micro-architecture, the test suite is not run when building a
12472 tuned package.
12473
12474 To reduce rebuilds to the minimum, tuned packages are @emph{grafted}
12475 onto packages that depend on them (@pxref{Security Updates, grafts}).
12476 Thus, using @option{--no-grafts} cancels the effect of @option{--tune}.
12477
12478 We call this technique @dfn{package multi-versioning}: several variants
12479 of tunable packages may be built, one for each CPU variant. It is the
12480 coarse-grain counterpart of @dfn{function multi-versioning} as
12481 implemented by the GNU tool chain (@pxref{Function Multiversioning,,,
12482 gcc, Using the GNU Compiler Collection (GCC)}).
12483
12484 @item --with-source=@var{source}
12485 @itemx --with-source=@var{package}=@var{source}
12486 @itemx --with-source=@var{package}@@@var{version}=@var{source}
12487 Use @var{source} as the source of @var{package}, and @var{version} as
12488 its version number.
12489 @var{source} must be a file name or a URL, as for @command{guix
12490 download} (@pxref{Invoking guix download}).
12491
12492 When @var{package} is omitted,
12493 it is taken to be the package name specified on the
12494 command line that matches the base of @var{source}---e.g.,
12495 if @var{source} is @code{/src/guile-2.0.10.tar.gz}, the corresponding
12496 package is @code{guile}.
12497
12498 Likewise, when @var{version} is omitted, the version string is inferred from
12499 @var{source}; in the previous example, it is @code{2.0.10}.
12500
12501 This option allows users to try out versions of packages other than the
12502 one provided by the distribution. The example below downloads
12503 @file{ed-1.7.tar.gz} from a GNU mirror and uses that as the source for
12504 the @code{ed} package:
12505
12506 @example
12507 guix build ed --with-source=mirror://gnu/ed/ed-1.4.tar.gz
12508 @end example
12509
12510 As a developer, @option{--with-source} makes it easy to test release
12511 candidates, and even to test their impact on packages that depend on
12512 them:
12513
12514 @example
12515 guix build elogind --with-source=@dots{}/shepherd-0.9.0rc1.tar.gz
12516 @end example
12517
12518 @dots{} or to build from a checkout in a pristine environment:
12519
12520 @example
12521 $ git clone git://git.sv.gnu.org/guix.git
12522 $ guix build guix --with-source=guix@@1.0=./guix
12523 @end example
12524
12525 @item --with-input=@var{package}=@var{replacement}
12526 Replace dependency on @var{package} by a dependency on
12527 @var{replacement}. @var{package} must be a package name, and
12528 @var{replacement} must be a package specification such as @code{guile}
12529 or @code{guile@@1.8}.
12530
12531 For instance, the following command builds Guix, but replaces its
12532 dependency on the current stable version of Guile with a dependency on
12533 the legacy version of Guile, @code{guile@@2.0}:
12534
12535 @example
12536 guix build --with-input=guile=guile@@2.0 guix
12537 @end example
12538
12539 This is a recursive, deep replacement. So in this example, both
12540 @code{guix} and its dependency @code{guile-json} (which also depends on
12541 @code{guile}) get rebuilt against @code{guile@@2.0}.
12542
12543 This is implemented using the @code{package-input-rewriting} Scheme
12544 procedure (@pxref{Defining Packages, @code{package-input-rewriting}}).
12545
12546 @item --with-graft=@var{package}=@var{replacement}
12547 This is similar to @option{--with-input} but with an important difference:
12548 instead of rebuilding the whole dependency chain, @var{replacement} is
12549 built and then @dfn{grafted} onto the binaries that were initially
12550 referring to @var{package}. @xref{Security Updates}, for more
12551 information on grafts.
12552
12553 For example, the command below grafts version 3.5.4 of GnuTLS onto Wget
12554 and all its dependencies, replacing references to the version of GnuTLS
12555 they currently refer to:
12556
12557 @example
12558 guix build --with-graft=gnutls=gnutls@@3.5.4 wget
12559 @end example
12560
12561 This has the advantage of being much faster than rebuilding everything.
12562 But there is a caveat: it works if and only if @var{package} and
12563 @var{replacement} are strictly compatible---for example, if they provide
12564 a library, the application binary interface (ABI) of those libraries
12565 must be compatible. If @var{replacement} is somehow incompatible with
12566 @var{package}, then the resulting package may be unusable. Use with
12567 care!
12568
12569 @cindex debugging info, rebuilding
12570 @item --with-debug-info=@var{package}
12571 Build @var{package} in a way that preserves its debugging info and graft
12572 it onto packages that depend on it. This is useful if @var{package}
12573 does not already provide debugging info as a @code{debug} output
12574 (@pxref{Installing Debugging Files}).
12575
12576 For example, suppose you're experiencing a crash in Inkscape and would
12577 like to see what's up in GLib, a library deep down in Inkscape's
12578 dependency graph. GLib lacks a @code{debug} output, so debugging is
12579 tough. Fortunately, you rebuild GLib with debugging info and tack it on
12580 Inkscape:
12581
12582 @example
12583 guix install inkscape --with-debug-info=glib
12584 @end example
12585
12586 Only GLib needs to be recompiled so this takes a reasonable amount of
12587 time. @xref{Installing Debugging Files}, for more info.
12588
12589 @quotation Note
12590 Under the hood, this option works by passing the @samp{#:strip-binaries?
12591 #f} to the build system of the package of interest (@pxref{Build
12592 Systems}). Most build systems support that option but some do not. In
12593 that case, an error is raised.
12594
12595 Likewise, if a C/C++ package is built without @code{-g} (which is rarely
12596 the case), debugging info will remain unavailable even when
12597 @code{#:strip-binaries?} is false.
12598 @end quotation
12599
12600 @cindex tool chain, changing the build tool chain of a package
12601 @item --with-c-toolchain=@var{package}=@var{toolchain}
12602 This option changes the compilation of @var{package} and everything that
12603 depends on it so that they get built with @var{toolchain} instead of the
12604 default GNU tool chain for C/C++.
12605
12606 Consider this example:
12607
12608 @example
12609 guix build octave-cli \
12610 --with-c-toolchain=fftw=gcc-toolchain@@10 \
12611 --with-c-toolchain=fftwf=gcc-toolchain@@10
12612 @end example
12613
12614 The command above builds a variant of the @code{fftw} and @code{fftwf}
12615 packages using version 10 of @code{gcc-toolchain} instead of the default
12616 tool chain, and then builds a variant of the GNU@tie{}Octave
12617 command-line interface using them. GNU@tie{}Octave itself is also built
12618 with @code{gcc-toolchain@@10}.
12619
12620 This other example builds the Hardware Locality (@code{hwloc}) library
12621 and its dependents up to @code{intel-mpi-benchmarks} with the Clang C
12622 compiler:
12623
12624 @example
12625 guix build --with-c-toolchain=hwloc=clang-toolchain \
12626 intel-mpi-benchmarks
12627 @end example
12628
12629 @quotation Note
12630 There can be application binary interface (ABI) incompatibilities among
12631 tool chains. This is particularly true of the C++ standard library and
12632 run-time support libraries such as that of OpenMP@. By rebuilding all
12633 dependents with the same tool chain, @option{--with-c-toolchain} minimizes
12634 the risks of incompatibility but cannot entirely eliminate them. Choose
12635 @var{package} wisely.
12636 @end quotation
12637
12638 @item --with-git-url=@var{package}=@var{url}
12639 @cindex Git, using the latest commit
12640 @cindex latest commit, building
12641 Build @var{package} from the latest commit of the @code{master} branch of the
12642 Git repository at @var{url}. Git sub-modules of the repository are fetched,
12643 recursively.
12644
12645 For example, the following command builds the NumPy Python library against the
12646 latest commit of the master branch of Python itself:
12647
12648 @example
12649 guix build python-numpy \
12650 --with-git-url=python=https://github.com/python/cpython
12651 @end example
12652
12653 This option can also be combined with @option{--with-branch} or
12654 @option{--with-commit} (see below).
12655
12656 @cindex continuous integration
12657 Obviously, since it uses the latest commit of the given branch, the result of
12658 such a command varies over time. Nevertheless it is a convenient way to
12659 rebuild entire software stacks against the latest commit of one or more
12660 packages. This is particularly useful in the context of continuous
12661 integration (CI).
12662
12663 Checkouts are kept in a cache under @file{~/.cache/guix/checkouts} to speed up
12664 consecutive accesses to the same repository. You may want to clean it up once
12665 in a while to save disk space.
12666
12667 @item --with-branch=@var{package}=@var{branch}
12668 Build @var{package} from the latest commit of @var{branch}. If the
12669 @code{source} field of @var{package} is an origin with the @code{git-fetch}
12670 method (@pxref{origin Reference}) or a @code{git-checkout} object, the
12671 repository URL is taken from that @code{source}. Otherwise you have to use
12672 @option{--with-git-url} to specify the URL of the Git repository.
12673
12674 For instance, the following command builds @code{guile-sqlite3} from the
12675 latest commit of its @code{master} branch, and then builds @code{guix} (which
12676 depends on it) and @code{cuirass} (which depends on @code{guix}) against this
12677 specific @code{guile-sqlite3} build:
12678
12679 @example
12680 guix build --with-branch=guile-sqlite3=master cuirass
12681 @end example
12682
12683 @item --with-commit=@var{package}=@var{commit}
12684 This is similar to @option{--with-branch}, except that it builds from
12685 @var{commit} rather than the tip of a branch. @var{commit} must be a valid
12686 Git commit SHA1 identifier, a tag, or a @command{git describe} style
12687 identifier such as @code{1.0-3-gabc123}.
12688
12689 @item --with-patch=@var{package}=@var{file}
12690 Add @var{file} to the list of patches applied to @var{package}, where
12691 @var{package} is a spec such as @code{python@@3.8} or @code{glibc}.
12692 @var{file} must contain a patch; it is applied with the flags specified
12693 in the @code{origin} of @var{package} (@pxref{origin Reference}), which
12694 by default includes @code{-p1} (@pxref{patch Directories,,, diffutils,
12695 Comparing and Merging Files}).
12696
12697 As an example, the command below rebuilds Coreutils with the GNU C
12698 Library (glibc) patched with the given patch:
12699
12700 @example
12701 guix build coreutils --with-patch=glibc=./glibc-frob.patch
12702 @end example
12703
12704 In this example, glibc itself as well as everything that leads to
12705 Coreutils in the dependency graph is rebuilt.
12706
12707 @cindex upstream, latest version
12708 @item --with-latest=@var{package}
12709 So you like living on the bleeding edge? This option is for you! It
12710 replaces occurrences of @var{package} in the dependency graph with its
12711 latest upstream version, as reported by @command{guix refresh}
12712 (@pxref{Invoking guix refresh}).
12713
12714 It does so by determining the latest upstream release of @var{package}
12715 (if possible), downloading it, and authenticating it @emph{if} it comes
12716 with an OpenPGP signature.
12717
12718 As an example, the command below builds Guix against the latest version
12719 of Guile-JSON:
12720
12721 @example
12722 guix build guix --with-latest=guile-json
12723 @end example
12724
12725 There are limitations. First, in cases where the tool cannot or does
12726 not know how to authenticate source code, you are at risk of running
12727 malicious code; a warning is emitted in this case. Second, this option
12728 simply changes the source used in the existing package definitions,
12729 which is not always sufficient: there might be additional dependencies
12730 that need to be added, patches to apply, and more generally the quality
12731 assurance work that Guix developers normally do will be missing.
12732
12733 You've been warned! In all the other cases, it's a snappy way to stay
12734 on top. We encourage you to submit patches updating the actual package
12735 definitions once you have successfully tested an upgrade
12736 (@pxref{Contributing}).
12737
12738 @cindex test suite, skipping
12739 @item --without-tests=@var{package}
12740 Build @var{package} without running its tests. This can be useful in
12741 situations where you want to skip the lengthy test suite of a
12742 intermediate package, or if a package's test suite fails in a
12743 non-deterministic fashion. It should be used with care because running
12744 the test suite is a good way to ensure a package is working as intended.
12745
12746 Turning off tests leads to a different store item. Consequently, when
12747 using this option, anything that depends on @var{package} must be
12748 rebuilt, as in this example:
12749
12750 @example
12751 guix install --without-tests=python python-notebook
12752 @end example
12753
12754 The command above installs @code{python-notebook} on top of
12755 @code{python} built without running its test suite. To do so, it also
12756 rebuilds everything that depends on @code{python}, including
12757 @code{python-notebook} itself.
12758
12759 Internally, @option{--without-tests} relies on changing the
12760 @code{#:tests?} option of a package's @code{check} phase (@pxref{Build
12761 Systems}). Note that some packages use a customized @code{check} phase
12762 that does not respect a @code{#:tests? #f} setting. Therefore,
12763 @option{--without-tests} has no effect on these packages.
12764
12765 @end table
12766
12767 Wondering how to achieve the same effect using Scheme code, for example
12768 in your manifest, or how to write your own package transformation?
12769 @xref{Defining Package Variants}, for an overview of the programming
12770 interfaces available.
12771
12772 @node Additional Build Options
12773 @subsection Additional Build Options
12774
12775 The command-line options presented below are specific to @command{guix
12776 build}.
12777
12778 @table @code
12779
12780 @item --quiet
12781 @itemx -q
12782 Build quietly, without displaying the build log; this is equivalent to
12783 @option{--verbosity=0}. Upon completion, the build log is kept in @file{/var}
12784 (or similar) and can always be retrieved using the @option{--log-file} option.
12785
12786 @item --file=@var{file}
12787 @itemx -f @var{file}
12788 Build the package, derivation, or other file-like object that the code within
12789 @var{file} evaluates to (@pxref{G-Expressions, file-like objects}).
12790
12791 As an example, @var{file} might contain a package definition like this
12792 (@pxref{Defining Packages}):
12793
12794 @lisp
12795 @include package-hello.scm
12796 @end lisp
12797
12798 The @var{file} may also contain a JSON representation of one or more
12799 package definitions. Running @code{guix build -f} on @file{hello.json}
12800 with the following contents would result in building the packages
12801 @code{myhello} and @code{greeter}:
12802
12803 @example
12804 @verbatiminclude package-hello.json
12805 @end example
12806
12807 @item --manifest=@var{manifest}
12808 @itemx -m @var{manifest}
12809 Build all packages listed in the given @var{manifest}
12810 (@pxref{profile-manifest, @option{--manifest}}).
12811
12812 @item --expression=@var{expr}
12813 @itemx -e @var{expr}
12814 Build the package or derivation @var{expr} evaluates to.
12815
12816 For example, @var{expr} may be @code{(@@ (gnu packages guile)
12817 guile-1.8)}, which unambiguously designates this specific variant of
12818 version 1.8 of Guile.
12819
12820 Alternatively, @var{expr} may be a G-expression, in which case it is used
12821 as a build program passed to @code{gexp->derivation}
12822 (@pxref{G-Expressions}).
12823
12824 Lastly, @var{expr} may refer to a zero-argument monadic procedure
12825 (@pxref{The Store Monad}). The procedure must return a derivation as a
12826 monadic value, which is then passed through @code{run-with-store}.
12827
12828 @item --source
12829 @itemx -S
12830 Build the source derivations of the packages, rather than the packages
12831 themselves.
12832
12833 For instance, @code{guix build -S gcc} returns something like
12834 @file{/gnu/store/@dots{}-gcc-4.7.2.tar.bz2}, which is the GCC
12835 source tarball.
12836
12837 The returned source tarball is the result of applying any patches and
12838 code snippets specified in the package @code{origin} (@pxref{Defining
12839 Packages}).
12840
12841 @cindex source, verification
12842 As with other derivations, the result of building a source derivation
12843 can be verified using the @option{--check} option (@pxref{build-check}).
12844 This is useful to validate that a (potentially already built or
12845 substituted, thus cached) package source matches against its declared
12846 hash.
12847
12848 Note that @command{guix build -S} compiles the sources only of the
12849 specified packages. They do not include the sources of statically
12850 linked dependencies and by themselves are insufficient for reproducing
12851 the packages.
12852
12853 @item --sources
12854 Fetch and return the source of @var{package-or-derivation} and all their
12855 dependencies, recursively. This is a handy way to obtain a local copy
12856 of all the source code needed to build @var{packages}, allowing you to
12857 eventually build them even without network access. It is an extension
12858 of the @option{--source} option and can accept one of the following
12859 optional argument values:
12860
12861 @table @code
12862 @item package
12863 This value causes the @option{--sources} option to behave in the same way
12864 as the @option{--source} option.
12865
12866 @item all
12867 Build the source derivations of all packages, including any source that
12868 might be listed as @code{inputs}. This is the default value.
12869
12870 @example
12871 $ guix build --sources tzdata
12872 The following derivations will be built:
12873 /gnu/store/@dots{}-tzdata2015b.tar.gz.drv
12874 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
12875 @end example
12876
12877 @item transitive
12878 Build the source derivations of all packages, as well of all transitive
12879 inputs to the packages. This can be used e.g.@: to
12880 prefetch package source for later offline building.
12881
12882 @example
12883 $ guix build --sources=transitive tzdata
12884 The following derivations will be built:
12885 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
12886 /gnu/store/@dots{}-findutils-4.4.2.tar.xz.drv
12887 /gnu/store/@dots{}-grep-2.21.tar.xz.drv
12888 /gnu/store/@dots{}-coreutils-8.23.tar.xz.drv
12889 /gnu/store/@dots{}-make-4.1.tar.xz.drv
12890 /gnu/store/@dots{}-bash-4.3.tar.xz.drv
12891 @dots{}
12892 @end example
12893
12894 @end table
12895
12896 @item --system=@var{system}
12897 @itemx -s @var{system}
12898 Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of
12899 the system type of the build host. The @command{guix build} command allows
12900 you to repeat this option several times, in which case it builds for all the
12901 specified systems; other commands ignore extraneous @option{-s} options.
12902
12903 @quotation Note
12904 The @option{--system} flag is for @emph{native} compilation and must not
12905 be confused with cross-compilation. See @option{--target} below for
12906 information on cross-compilation.
12907 @end quotation
12908
12909 An example use of this is on Linux-based systems, which can emulate
12910 different personalities. For instance, passing
12911 @option{--system=i686-linux} on an @code{x86_64-linux} system or
12912 @option{--system=armhf-linux} on an @code{aarch64-linux} system allows
12913 you to build packages in a complete 32-bit environment.
12914
12915 @quotation Note
12916 Building for an @code{armhf-linux} system is unconditionally enabled on
12917 @code{aarch64-linux} machines, although certain aarch64 chipsets do not
12918 allow for this functionality, notably the ThunderX.
12919 @end quotation
12920
12921 Similarly, when transparent emulation with QEMU and @code{binfmt_misc}
12922 is enabled (@pxref{Virtualization Services,
12923 @code{qemu-binfmt-service-type}}), you can build for any system for
12924 which a QEMU @code{binfmt_misc} handler is installed.
12925
12926 Builds for a system other than that of the machine you are using can
12927 also be offloaded to a remote machine of the right architecture.
12928 @xref{Daemon Offload Setup}, for more information on offloading.
12929
12930 @item --target=@var{triplet}
12931 @cindex cross-compilation
12932 Cross-build for @var{triplet}, which must be a valid GNU triplet, such
12933 as @code{"aarch64-linux-gnu"} (@pxref{Specifying Target Triplets, GNU
12934 configuration triplets,, autoconf, Autoconf}).
12935
12936 @item --list-systems
12937 List all the supported systems, that can be passed as an argument to
12938 @option{--system}.
12939
12940 @item --list-targets
12941 List all the supported targets, that can be passed as an argument to
12942 @option{--target}.
12943
12944 @anchor{build-check}
12945 @item --check
12946 @cindex determinism, checking
12947 @cindex reproducibility, checking
12948 Rebuild @var{package-or-derivation}, which are already available in the
12949 store, and raise an error if the build results are not bit-for-bit
12950 identical.
12951
12952 This mechanism allows you to check whether previously installed
12953 substitutes are genuine (@pxref{Substitutes}), or whether the build result
12954 of a package is deterministic. @xref{Invoking guix challenge}, for more
12955 background information and tools.
12956
12957 When used in conjunction with @option{--keep-failed}, the differing
12958 output is kept in the store, under @file{/gnu/store/@dots{}-check}.
12959 This makes it easy to look for differences between the two results.
12960
12961 @item --repair
12962 @cindex repairing store items
12963 @cindex corruption, recovering from
12964 Attempt to repair the specified store items, if they are corrupt, by
12965 re-downloading or rebuilding them.
12966
12967 This operation is not atomic and thus restricted to @code{root}.
12968
12969 @item --derivations
12970 @itemx -d
12971 Return the derivation paths, not the output paths, of the given
12972 packages.
12973
12974 @item --root=@var{file}
12975 @itemx -r @var{file}
12976 @cindex GC roots, adding
12977 @cindex garbage collector roots, adding
12978 Make @var{file} a symlink to the result, and register it as a garbage
12979 collector root.
12980
12981 Consequently, the results of this @command{guix build} invocation are
12982 protected from garbage collection until @var{file} is removed. When
12983 that option is omitted, build results are eligible for garbage
12984 collection as soon as the build completes. @xref{Invoking guix gc}, for
12985 more on GC roots.
12986
12987 @item --log-file
12988 @cindex build logs, access
12989 Return the build log file names or URLs for the given
12990 @var{package-or-derivation}, or raise an error if build logs are
12991 missing.
12992
12993 This works regardless of how packages or derivations are specified. For
12994 instance, the following invocations are equivalent:
12995
12996 @example
12997 guix build --log-file $(guix build -d guile)
12998 guix build --log-file $(guix build guile)
12999 guix build --log-file guile
13000 guix build --log-file -e '(@@ (gnu packages guile) guile-2.0)'
13001 @end example
13002
13003 If a log is unavailable locally, and unless @option{--no-substitutes} is
13004 passed, the command looks for a corresponding log on one of the
13005 substitute servers (as specified with @option{--substitute-urls}).
13006
13007 So for instance, imagine you want to see the build log of GDB on
13008 @code{aarch64}, but you are actually on an @code{x86_64} machine:
13009
13010 @example
13011 $ guix build --log-file gdb -s aarch64-linux
13012 https://@value{SUBSTITUTE-SERVER-1}/log/@dots{}-gdb-7.10
13013 @end example
13014
13015 You can freely access a huge library of build logs!
13016 @end table
13017
13018 @node Debugging Build Failures
13019 @subsection Debugging Build Failures
13020
13021 @cindex build failures, debugging
13022 When defining a new package (@pxref{Defining Packages}), you will
13023 probably find yourself spending some time debugging and tweaking the
13024 build until it succeeds. To do that, you need to operate the build
13025 commands yourself in an environment as close as possible to the one the
13026 build daemon uses.
13027
13028 To that end, the first thing to do is to use the @option{--keep-failed}
13029 or @option{-K} option of @command{guix build}, which will keep the
13030 failed build tree in @file{/tmp} or whatever directory you specified as
13031 @env{TMPDIR} (@pxref{Common Build Options, @option{--keep-failed}}).
13032
13033 From there on, you can @command{cd} to the failed build tree and source
13034 the @file{environment-variables} file, which contains all the
13035 environment variable definitions that were in place when the build
13036 failed. So let's say you're debugging a build failure in package
13037 @code{foo}; a typical session would look like this:
13038
13039 @example
13040 $ guix build foo -K
13041 @dots{} @i{build fails}
13042 $ cd /tmp/guix-build-foo.drv-0
13043 $ source ./environment-variables
13044 $ cd foo-1.2
13045 @end example
13046
13047 Now, you can invoke commands as if you were the daemon (almost) and
13048 troubleshoot your build process.
13049
13050 Sometimes it happens that, for example, a package's tests pass when you
13051 run them manually but they fail when the daemon runs them. This can
13052 happen because the daemon runs builds in containers where, unlike in our
13053 environment above, network access is missing, @file{/bin/sh} does not
13054 exist, etc. (@pxref{Build Environment Setup}).
13055
13056 In such cases, you may need to run inspect the build process from within
13057 a container similar to the one the build daemon creates:
13058
13059 @example
13060 $ guix build -K foo
13061 @dots{}
13062 $ cd /tmp/guix-build-foo.drv-0
13063 $ guix shell --no-grafts -C -D foo strace gdb
13064 [env]# source ./environment-variables
13065 [env]# cd foo-1.2
13066 @end example
13067
13068 Here, @command{guix shell -C} creates a container and spawns a new
13069 shell in it (@pxref{Invoking guix shell}). The @command{strace gdb}
13070 part adds the @command{strace} and @command{gdb} commands to
13071 the container, which you may find handy while debugging. The
13072 @option{--no-grafts} option makes sure we get the exact same
13073 environment, with ungrafted packages (@pxref{Security Updates}, for more
13074 info on grafts).
13075
13076 To get closer to a container like that used by the build daemon, we can
13077 remove @file{/bin/sh}:
13078
13079 @example
13080 [env]# rm /bin/sh
13081 @end example
13082
13083 (Don't worry, this is harmless: this is all happening in the throw-away
13084 container created by @command{guix shell}.)
13085
13086 The @command{strace} command is probably not in the search path, but we
13087 can run:
13088
13089 @example
13090 [env]# $GUIX_ENVIRONMENT/bin/strace -f -o log make check
13091 @end example
13092
13093 In this way, not only you will have reproduced the environment variables
13094 the daemon uses, you will also be running the build process in a container
13095 similar to the one the daemon uses.
13096
13097
13098 @node Invoking guix edit
13099 @section Invoking @command{guix edit}
13100
13101 @cindex @command{guix edit}
13102 @cindex package definition, editing
13103 So many packages, so many source files! The @command{guix edit} command
13104 facilitates the life of users and packagers by pointing their editor at
13105 the source file containing the definition of the specified packages.
13106 For instance:
13107
13108 @example
13109 guix edit gcc@@4.9 vim
13110 @end example
13111
13112 @noindent
13113 launches the program specified in the @env{VISUAL} or in the
13114 @env{EDITOR} environment variable to view the recipe of GCC@tie{}4.9.3
13115 and that of Vim.
13116
13117 If you are using a Guix Git checkout (@pxref{Building from Git}), or
13118 have created your own packages on @env{GUIX_PACKAGE_PATH}
13119 (@pxref{Package Modules}), you will be able to edit the package
13120 recipes. In other cases, you will be able to examine the read-only recipes
13121 for packages currently in the store.
13122
13123 Instead of @env{GUIX_PACKAGE_PATH}, the command-line option
13124 @option{--load-path=@var{directory}} (or in short @option{-L
13125 @var{directory}}) allows you to add @var{directory} to the front of the
13126 package module search path and so make your own packages visible.
13127
13128 @node Invoking guix download
13129 @section Invoking @command{guix download}
13130
13131 @cindex @command{guix download}
13132 @cindex downloading package sources
13133 When writing a package definition, developers typically need to download
13134 a source tarball, compute its SHA256 hash, and write that
13135 hash in the package definition (@pxref{Defining Packages}). The
13136 @command{guix download} tool helps with this task: it downloads a file
13137 from the given URI, adds it to the store, and prints both its file name
13138 in the store and its SHA256 hash.
13139
13140 The fact that the downloaded file is added to the store saves bandwidth:
13141 when the developer eventually tries to build the newly defined package
13142 with @command{guix build}, the source tarball will not have to be
13143 downloaded again because it is already in the store. It is also a
13144 convenient way to temporarily stash files, which may be deleted
13145 eventually (@pxref{Invoking guix gc}).
13146
13147 The @command{guix download} command supports the same URIs as used in
13148 package definitions. In particular, it supports @code{mirror://} URIs.
13149 @code{https} URIs (HTTP over TLS) are supported @emph{provided} the
13150 Guile bindings for GnuTLS are available in the user's environment; when
13151 they are not available, an error is raised. @xref{Guile Preparations,
13152 how to install the GnuTLS bindings for Guile,, gnutls-guile,
13153 GnuTLS-Guile}, for more information.
13154
13155 @command{guix download} verifies HTTPS server certificates by loading
13156 the certificates of X.509 authorities from the directory pointed to by
13157 the @env{SSL_CERT_DIR} environment variable (@pxref{X.509
13158 Certificates}), unless @option{--no-check-certificate} is used.
13159
13160 The following options are available:
13161
13162 @table @code
13163 @item --hash=@var{algorithm}
13164 @itemx -H @var{algorithm}
13165 Compute a hash using the specified @var{algorithm}. @xref{Invoking guix
13166 hash}, for more information.
13167
13168 @item --format=@var{fmt}
13169 @itemx -f @var{fmt}
13170 Write the hash in the format specified by @var{fmt}. For more
13171 information on the valid values for @var{fmt}, @pxref{Invoking guix hash}.
13172
13173 @item --no-check-certificate
13174 Do not validate the X.509 certificates of HTTPS servers.
13175
13176 When using this option, you have @emph{absolutely no guarantee} that you
13177 are communicating with the authentic server responsible for the given
13178 URL, which makes you vulnerable to ``man-in-the-middle'' attacks.
13179
13180 @item --output=@var{file}
13181 @itemx -o @var{file}
13182 Save the downloaded file to @var{file} instead of adding it to the
13183 store.
13184 @end table
13185
13186 @node Invoking guix hash
13187 @section Invoking @command{guix hash}
13188
13189 @cindex @command{guix hash}
13190 The @command{guix hash} command computes the hash of a file.
13191 It is primarily a convenience tool for anyone contributing to the
13192 distribution: it computes the cryptographic hash of one or more files, which can be
13193 used in the definition of a package (@pxref{Defining Packages}).
13194
13195 The general syntax is:
13196
13197 @example
13198 guix hash @var{option} @var{file} ...
13199 @end example
13200
13201 When @var{file} is @code{-} (a hyphen), @command{guix hash} computes the
13202 hash of data read from standard input. @command{guix hash} has the
13203 following options:
13204
13205 @table @code
13206
13207 @item --hash=@var{algorithm}
13208 @itemx -H @var{algorithm}
13209 Compute a hash using the specified @var{algorithm}, @code{sha256} by
13210 default.
13211
13212 @var{algorithm} must be the name of a cryptographic hash algorithm
13213 supported by Libgcrypt @i{via} Guile-Gcrypt---e.g., @code{sha512} or
13214 @code{sha3-256} (@pxref{Hash Functions,,, guile-gcrypt, Guile-Gcrypt
13215 Reference Manual}).
13216
13217 @item --format=@var{fmt}
13218 @itemx -f @var{fmt}
13219 Write the hash in the format specified by @var{fmt}.
13220
13221 Supported formats: @code{base64}, @code{nix-base32}, @code{base32}, @code{base16}
13222 (@code{hex} and @code{hexadecimal} can be used as well).
13223
13224 If the @option{--format} option is not specified, @command{guix hash}
13225 will output the hash in @code{nix-base32}. This representation is used
13226 in the definitions of packages.
13227
13228 @item --recursive
13229 @itemx -r
13230 The @option{--recursive} option is deprecated in favor of
13231 @option{--serializer=nar} (see below); @option{-r} remains accepted as a
13232 convenient shorthand.
13233
13234 @item --serializer=@var{type}
13235 @itemx -S @var{type}
13236 Compute the hash on @var{file} using @var{type} serialization.
13237
13238 @var{type} may be one of the following:
13239
13240 @table @code
13241 @item none
13242 This is the default: it computes the hash of a file's contents.
13243
13244 @item nar
13245 Compute the hash of a ``normalized archive'' (or ``nar'') containing
13246 @var{file}, including its children if it is a directory. Some of the
13247 metadata of @var{file} is part of the archive; for instance, when
13248 @var{file} is a regular file, the hash is different depending on whether
13249 @var{file} is executable or not. Metadata such as time stamps have no
13250 impact on the hash (@pxref{Invoking guix archive}, for more info on the
13251 nar format).
13252 @c FIXME: Replace xref above with xref to an ``Archive'' section when
13253 @c it exists.
13254
13255 @item git
13256 Compute the hash of the file or directory as a Git ``tree'', following
13257 the same method as the Git version control system.
13258 @end table
13259
13260 @item --exclude-vcs
13261 @itemx -x
13262 When combined with @option{--recursive}, exclude version control system
13263 directories (@file{.bzr}, @file{.git}, @file{.hg}, etc.).
13264
13265 @vindex git-fetch
13266 As an example, here is how you would compute the hash of a Git checkout,
13267 which is useful when using the @code{git-fetch} method (@pxref{origin
13268 Reference}):
13269
13270 @example
13271 $ git clone http://example.org/foo.git
13272 $ cd foo
13273 $ guix hash -x --serializer=nar .
13274 @end example
13275 @end table
13276
13277 @node Invoking guix import
13278 @section Invoking @command{guix import}
13279
13280 @cindex importing packages
13281 @cindex package import
13282 @cindex package conversion
13283 @cindex Invoking @command{guix import}
13284 The @command{guix import} command is useful for people who would like to
13285 add a package to the distribution with as little work as
13286 possible---a legitimate demand. The command knows of a few
13287 repositories from which it can ``import'' package metadata. The result
13288 is a package definition, or a template thereof, in the format we know
13289 (@pxref{Defining Packages}).
13290
13291 The general syntax is:
13292
13293 @example
13294 guix import @var{importer} @var{options}@dots{}
13295 @end example
13296
13297 @var{importer} specifies the source from which to import package
13298 metadata, and @var{options} specifies a package identifier and other
13299 options specific to @var{importer}.
13300
13301 Some of the importers rely on the ability to run the @command{gpgv} command.
13302 For these, GnuPG must be installed and in @code{$PATH}; run @code{guix install
13303 gnupg} if needed.
13304
13305 Currently, the available ``importers'' are:
13306
13307 @table @code
13308 @item gnu
13309 Import metadata for the given GNU package. This provides a template
13310 for the latest version of that GNU package, including the hash of its
13311 source tarball, and its canonical synopsis and description.
13312
13313 Additional information such as the package dependencies and its
13314 license needs to be figured out manually.
13315
13316 For example, the following command returns a package definition for
13317 GNU@tie{}Hello:
13318
13319 @example
13320 guix import gnu hello
13321 @end example
13322
13323 Specific command-line options are:
13324
13325 @table @code
13326 @item --key-download=@var{policy}
13327 As for @command{guix refresh}, specify the policy to handle missing
13328 OpenPGP keys when verifying the package signature. @xref{Invoking guix
13329 refresh, @option{--key-download}}.
13330 @end table
13331
13332 @item pypi
13333 @cindex pypi
13334 Import metadata from the @uref{https://pypi.python.org/, Python Package
13335 Index}. Information is taken from the JSON-formatted description
13336 available at @code{pypi.python.org} and usually includes all the relevant
13337 information, including package dependencies. For maximum efficiency, it
13338 is recommended to install the @command{unzip} utility, so that the
13339 importer can unzip Python wheels and gather data from them.
13340
13341 The command below imports metadata for the latest version of the
13342 @code{itsdangerous} Python package:
13343
13344 @example
13345 guix import pypi itsdangerous
13346 @end example
13347
13348 You can also ask for a specific version:
13349
13350 @example
13351 guix import pypi itsdangerous@@1.1.0
13352 @end example
13353
13354 @table @code
13355 @item --recursive
13356 @itemx -r
13357 Traverse the dependency graph of the given upstream package recursively
13358 and generate package expressions for all those packages that are not yet
13359 in Guix.
13360 @end table
13361
13362 @item gem
13363 @cindex gem
13364 Import metadata from @uref{https://rubygems.org/, RubyGems}. Information
13365 is taken from the JSON-formatted description available at
13366 @code{rubygems.org} and includes most relevant information, including
13367 runtime dependencies. There are some caveats, however. The metadata
13368 doesn't distinguish between synopses and descriptions, so the same string
13369 is used for both fields. Additionally, the details of non-Ruby
13370 dependencies required to build native extensions is unavailable and left
13371 as an exercise to the packager.
13372
13373 The command below imports metadata for the @code{rails} Ruby package:
13374
13375 @example
13376 guix import gem rails
13377 @end example
13378
13379 You can also ask for a specific version:
13380
13381 @example
13382 guix import gem rails@@7.0.4
13383 @end example
13384
13385 @table @code
13386 @item --recursive
13387 @itemx -r
13388 Traverse the dependency graph of the given upstream package recursively
13389 and generate package expressions for all those packages that are not yet
13390 in Guix.
13391 @end table
13392
13393 @item minetest
13394 @cindex minetest
13395 @cindex ContentDB
13396 Import metadata from @uref{https://content.minetest.net, ContentDB}.
13397 Information is taken from the JSON-formatted metadata provided through
13398 @uref{https://content.minetest.net/help/api/, ContentDB's API} and
13399 includes most relevant information, including dependencies. There are
13400 some caveats, however. The license information is often incomplete.
13401 The commit hash is sometimes missing. The descriptions are in the
13402 Markdown format, but Guix uses Texinfo instead. Texture packs and
13403 subgames are unsupported.
13404
13405 The command below imports metadata for the Mesecons mod by Jeija:
13406
13407 @example
13408 guix import minetest Jeija/mesecons
13409 @end example
13410
13411 The author name can also be left out:
13412
13413 @example
13414 guix import minetest mesecons
13415 @end example
13416
13417 @table @code
13418 @item --recursive
13419 @itemx -r
13420 Traverse the dependency graph of the given upstream package recursively
13421 and generate package expressions for all those packages that are not yet
13422 in Guix.
13423 @end table
13424
13425 @item cpan
13426 @cindex CPAN
13427 Import metadata from @uref{https://www.metacpan.org/, MetaCPAN}.
13428 Information is taken from the JSON-formatted metadata provided through
13429 @uref{https://fastapi.metacpan.org/, MetaCPAN's API} and includes most
13430 relevant information, such as module dependencies. License information
13431 should be checked closely. If Perl is available in the store, then the
13432 @code{corelist} utility will be used to filter core modules out of the
13433 list of dependencies.
13434
13435 The command command below imports metadata for the Acme::Boolean Perl
13436 module:
13437
13438 @example
13439 guix import cpan Acme::Boolean
13440 @end example
13441
13442 @item cran
13443 @cindex CRAN
13444 @cindex Bioconductor
13445 Import metadata from @uref{https://cran.r-project.org/, CRAN}, the
13446 central repository for the @uref{https://r-project.org, GNU@tie{}R
13447 statistical and graphical environment}.
13448
13449 Information is extracted from the @file{DESCRIPTION} file of the package.
13450
13451 The command command below imports metadata for the Cairo R package:
13452
13453 @example
13454 guix import cran Cairo
13455 @end example
13456
13457 You can also ask for a specific version:
13458
13459 @example
13460 guix import cran rasterVis@@0.50.3
13461 @end example
13462
13463 When @option{--recursive} is added, the importer will traverse the
13464 dependency graph of the given upstream package recursively and generate
13465 package expressions for all those packages that are not yet in Guix.
13466
13467 When @option{--style=specification} is added, the importer will generate
13468 package definitions whose inputs are package specifications instead of
13469 references to package variables. This is useful when generated package
13470 definitions are to be appended to existing user modules, as the list of
13471 used package modules need not be changed. The default is
13472 @option{--style=variable}.
13473
13474 When @option{--archive=bioconductor} is added, metadata is imported from
13475 @uref{https://www.bioconductor.org/, Bioconductor}, a repository of R
13476 packages for the analysis and comprehension of high-throughput
13477 genomic data in bioinformatics.
13478
13479 Information is extracted from the @file{DESCRIPTION} file contained in the
13480 package archive.
13481
13482 The command below imports metadata for the GenomicRanges R package:
13483
13484 @example
13485 guix import cran --archive=bioconductor GenomicRanges
13486 @end example
13487
13488 Finally, you can also import R packages that have not yet been published on
13489 CRAN or Bioconductor as long as they are in a git repository. Use
13490 @option{--archive=git} followed by the URL of the git repository:
13491
13492 @example
13493 guix import cran --archive=git https://github.com/immunogenomics/harmony
13494 @end example
13495
13496 @item texlive
13497 @cindex TeX Live
13498 @cindex CTAN
13499 Import TeX package information from the TeX Live package database for
13500 TeX packages that are part of the @uref{https://www.tug.org/texlive/,
13501 TeX Live distribution}.
13502
13503 Information about the package is obtained from the TeX Live package
13504 database, a plain text file that is included in the @code{texlive-bin}
13505 package. The source code is downloaded from possibly multiple locations
13506 in the SVN repository of the Tex Live project.
13507
13508 The command command below imports metadata for the @code{fontspec}
13509 TeX package:
13510
13511 @example
13512 guix import texlive fontspec
13513 @end example
13514
13515 @item json
13516 @cindex JSON, import
13517 Import package metadata from a local JSON file. Consider the following
13518 example package definition in JSON format:
13519
13520 @example
13521 @{
13522 "name": "hello",
13523 "version": "2.10",
13524 "source": "mirror://gnu/hello/hello-2.10.tar.gz",
13525 "build-system": "gnu",
13526 "home-page": "https://www.gnu.org/software/hello/",
13527 "synopsis": "Hello, GNU world: An example GNU package",
13528 "description": "GNU Hello prints a greeting.",
13529 "license": "GPL-3.0+",
13530 "native-inputs": ["gettext"]
13531 @}
13532 @end example
13533
13534 The field names are the same as for the @code{<package>} record
13535 (@xref{Defining Packages}). References to other packages are provided
13536 as JSON lists of quoted package specification strings such as
13537 @code{guile} or @code{guile@@2.0}.
13538
13539 The importer also supports a more explicit source definition using the
13540 common fields for @code{<origin>} records:
13541
13542 @example
13543 @{
13544 @dots{}
13545 "source": @{
13546 "method": "url-fetch",
13547 "uri": "mirror://gnu/hello/hello-2.10.tar.gz",
13548 "sha256": @{
13549 "base32": "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"
13550 @}
13551 @}
13552 @dots{}
13553 @}
13554 @end example
13555
13556 The command below reads metadata from the JSON file @code{hello.json}
13557 and outputs a package expression:
13558
13559 @example
13560 guix import json hello.json
13561 @end example
13562
13563 @item hackage
13564 @cindex hackage
13565 Import metadata from the Haskell community's central package archive
13566 @uref{https://hackage.haskell.org/, Hackage}. Information is taken from
13567 Cabal files and includes all the relevant information, including package
13568 dependencies.
13569
13570 Specific command-line options are:
13571
13572 @table @code
13573 @item --stdin
13574 @itemx -s
13575 Read a Cabal file from standard input.
13576 @item --no-test-dependencies
13577 @itemx -t
13578 Do not include dependencies required only by the test suites.
13579 @item --cabal-environment=@var{alist}
13580 @itemx -e @var{alist}
13581 @var{alist} is a Scheme alist defining the environment in which the
13582 Cabal conditionals are evaluated. The accepted keys are: @code{os},
13583 @code{arch}, @code{impl} and a string representing the name of a flag.
13584 The value associated with a flag has to be either the symbol
13585 @code{true} or @code{false}. The value associated with other keys
13586 has to conform to the Cabal file format definition. The default value
13587 associated with the keys @code{os}, @code{arch} and @code{impl} is
13588 @samp{linux}, @samp{x86_64} and @samp{ghc}, respectively.
13589 @item --recursive
13590 @itemx -r
13591 Traverse the dependency graph of the given upstream package recursively
13592 and generate package expressions for all those packages that are not yet
13593 in Guix.
13594 @end table
13595
13596 The command below imports metadata for the latest version of the
13597 HTTP Haskell package without including test dependencies and
13598 specifying the value of the flag @samp{network-uri} as @code{false}:
13599
13600 @example
13601 guix import hackage -t -e "'((\"network-uri\" . false))" HTTP
13602 @end example
13603
13604 A specific package version may optionally be specified by following the
13605 package name by an at-sign and a version number as in the following example:
13606
13607 @example
13608 guix import hackage mtl@@2.1.3.1
13609 @end example
13610
13611 @item stackage
13612 @cindex stackage
13613 The @code{stackage} importer is a wrapper around the @code{hackage} one.
13614 It takes a package name, looks up the package version included in a
13615 long-term support (LTS) @uref{https://www.stackage.org, Stackage}
13616 release and uses the @code{hackage} importer to retrieve its metadata.
13617 Note that it is up to you to select an LTS release compatible with the
13618 GHC compiler used by Guix.
13619
13620 Specific command-line options are:
13621
13622 @table @code
13623 @item --no-test-dependencies
13624 @itemx -t
13625 Do not include dependencies required only by the test suites.
13626 @item --lts-version=@var{version}
13627 @itemx -l @var{version}
13628 @var{version} is the desired LTS release version. If omitted the latest
13629 release is used.
13630 @item --recursive
13631 @itemx -r
13632 Traverse the dependency graph of the given upstream package recursively
13633 and generate package expressions for all those packages that are not yet
13634 in Guix.
13635 @end table
13636
13637 The command below imports metadata for the HTTP Haskell package
13638 included in the LTS Stackage release version 7.18:
13639
13640 @example
13641 guix import stackage --lts-version=7.18 HTTP
13642 @end example
13643
13644 @item elpa
13645 @cindex elpa
13646 Import metadata from an Emacs Lisp Package Archive (ELPA) package
13647 repository (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
13648
13649 Specific command-line options are:
13650
13651 @table @code
13652 @item --archive=@var{repo}
13653 @itemx -a @var{repo}
13654 @var{repo} identifies the archive repository from which to retrieve the
13655 information. Currently the supported repositories and their identifiers
13656 are:
13657 @itemize -
13658 @item
13659 @uref{https://elpa.gnu.org/packages, GNU}, selected by the @code{gnu}
13660 identifier. This is the default.
13661
13662 Packages from @code{elpa.gnu.org} are signed with one of the keys
13663 contained in the GnuPG keyring at
13664 @file{share/emacs/25.1/etc/package-keyring.gpg} (or similar) in the
13665 @code{emacs} package (@pxref{Package Installation, ELPA package
13666 signatures,, emacs, The GNU Emacs Manual}).
13667
13668 @item
13669 @uref{https://elpa.nongnu.org/nongnu/, NonGNU}, selected by the
13670 @code{nongnu} identifier.
13671
13672 @item
13673 @uref{https://stable.melpa.org/packages, MELPA-Stable}, selected by the
13674 @code{melpa-stable} identifier.
13675
13676 @item
13677 @uref{https://melpa.org/packages, MELPA}, selected by the @code{melpa}
13678 identifier.
13679 @end itemize
13680
13681 @item --recursive
13682 @itemx -r
13683 Traverse the dependency graph of the given upstream package recursively
13684 and generate package expressions for all those packages that are not yet
13685 in Guix.
13686 @end table
13687
13688 @item crate
13689 @cindex crate
13690 Import metadata from the crates.io Rust package repository
13691 @uref{https://crates.io, crates.io}, as in this example:
13692
13693 @example
13694 guix import crate blake2-rfc
13695 @end example
13696
13697 The crate importer also allows you to specify a version string:
13698
13699 @example
13700 guix import crate constant-time-eq@@0.1.0
13701 @end example
13702
13703 Additional options include:
13704
13705 @table @code
13706 @item --recursive
13707 @itemx -r
13708 Traverse the dependency graph of the given upstream package recursively
13709 and generate package expressions for all those packages that are not yet
13710 in Guix.
13711 @end table
13712
13713 @item elm
13714 @cindex elm
13715 Import metadata from the Elm package repository
13716 @uref{https://package.elm-lang.org, package.elm-lang.org}, as in this example:
13717
13718 @example
13719 guix import elm elm-explorations/webgl
13720 @end example
13721
13722 The Elm importer also allows you to specify a version string:
13723
13724 @example
13725 guix import elm elm-explorations/webgl@@1.1.3
13726 @end example
13727
13728 Additional options include:
13729
13730 @table @code
13731 @item --recursive
13732 @itemx -r
13733 Traverse the dependency graph of the given upstream package recursively
13734 and generate package expressions for all those packages that are not yet
13735 in Guix.
13736 @end table
13737
13738 @item opam
13739 @cindex OPAM
13740 @cindex OCaml
13741 Import metadata from the @uref{https://opam.ocaml.org/, OPAM} package
13742 repository used by the OCaml community.
13743
13744 Additional options include:
13745
13746 @table @code
13747 @item --recursive
13748 @itemx -r
13749 Traverse the dependency graph of the given upstream package recursively
13750 and generate package expressions for all those packages that are not yet
13751 in Guix.
13752 @item --repo
13753 By default, packages are searched in the official OPAM repository. This
13754 option, which can be used more than once, lets you add other repositories
13755 which will be searched for packages. It accepts as valid arguments:
13756
13757 @itemize
13758 @item the name of a known repository - can be one of @code{opam},
13759 @code{coq} (equivalent to @code{coq-released}),
13760 @code{coq-core-dev}, @code{coq-extra-dev} or @code{grew}.
13761 @item the URL of a repository as expected by the
13762 @code{opam repository add} command (for instance, the URL equivalent
13763 of the above @code{opam} name would be
13764 @uref{https://opam.ocaml.org}).
13765 @item the path to a local copy of a repository (a directory containing a
13766 @file{packages/} sub-directory).
13767 @end itemize
13768
13769 Repositories are assumed to be passed to this option by order of
13770 preference. The additional repositories will not replace the default
13771 @code{opam} repository, which is always kept as a fallback.
13772
13773 Also, please note that versions are not compared across repositories.
13774 The first repository (from left to right) that has at least one version
13775 of a given package will prevail over any others, and the version
13776 imported will be the latest one found @emph{in this repository only}.
13777
13778 @end table
13779
13780 @item go
13781 @cindex go
13782 Import metadata for a Go module using
13783 @uref{https://proxy.golang.org, proxy.golang.org}.
13784
13785 @example
13786 guix import go gopkg.in/yaml.v2
13787 @end example
13788
13789 It is possible to use a package specification with a @code{@@VERSION}
13790 suffix to import a specific version.
13791
13792 Additional options include:
13793
13794 @table @code
13795 @item --recursive
13796 @itemx -r
13797 Traverse the dependency graph of the given upstream package recursively
13798 and generate package expressions for all those packages that are not yet
13799 in Guix.
13800 @item --pin-versions
13801 When using this option, the importer preserves the exact versions of the
13802 Go modules dependencies instead of using their latest available
13803 versions. This can be useful when attempting to import packages that
13804 recursively depend on former versions of themselves to build. When
13805 using this mode, the symbol of the package is made by appending the
13806 version to its name, so that multiple versions of the same package can
13807 coexist.
13808 @end table
13809
13810 @item egg
13811 @cindex egg
13812 Import metadata for @uref{https://wiki.call-cc.org/eggs, CHICKEN eggs}.
13813 The information is taken from @file{PACKAGE.egg} files found in the
13814 @uref{git://code.call-cc.org/eggs-5-all, eggs-5-all} Git
13815 repository. However, it does not provide all the information that we
13816 need, there is no ``description'' field, and the licenses used are not
13817 always precise (BSD is often used instead of BSD-N).
13818
13819 @example
13820 guix import egg sourcehut
13821 @end example
13822
13823 You can also ask for a specific version:
13824
13825 @example
13826 guix import egg arrays@@1.0
13827 @end example
13828
13829 Additional options include:
13830 @table @code
13831 @item --recursive
13832 @itemx -r
13833 Traverse the dependency graph of the given upstream package recursively
13834 and generate package expressions for all those packages that are not yet
13835 in Guix.
13836 @end table
13837
13838 @item hexpm
13839 @cindex hexpm
13840 Import metadata from the hex.pm Erlang and Elixir package repository
13841 @uref{https://hex.pm, hex.pm}, as in this example:
13842
13843 @example
13844 guix import hexpm stun
13845 @end example
13846
13847 The importer tries to determine the build system used by the package.
13848
13849 The hexpm importer also allows you to specify a version string:
13850
13851 @example
13852 guix import hexpm cf@@0.3.0
13853 @end example
13854
13855 Additional options include:
13856
13857 @table @code
13858 @item --recursive
13859 @itemx -r
13860 Traverse the dependency graph of the given upstream package recursively
13861 and generate package expressions for all those packages that are not yet
13862 in Guix.
13863 @end table
13864 @end table
13865
13866 The structure of the @command{guix import} code is modular. It would be
13867 useful to have more importers for other package formats, and your help
13868 is welcome here (@pxref{Contributing}).
13869
13870 @node Invoking guix refresh
13871 @section Invoking @command{guix refresh}
13872
13873 @cindex @command {guix refresh}
13874 The primary audience of the @command{guix refresh} command is packagers.
13875 As a user, you may be interested in the @option{--with-latest} option,
13876 which can bring you package update superpowers built upon @command{guix
13877 refresh} (@pxref{Package Transformation Options,
13878 @option{--with-latest}}). By default, @command{guix refresh} reports
13879 any packages provided by the distribution that are outdated compared to
13880 the latest upstream version, like this:
13881
13882 @example
13883 $ guix refresh
13884 gnu/packages/gettext.scm:29:13: gettext would be upgraded from 0.18.1.1 to 0.18.2.1
13885 gnu/packages/glib.scm:77:12: glib would be upgraded from 2.34.3 to 2.37.0
13886 @end example
13887
13888 Alternatively, one can specify packages to consider, in which case a
13889 warning is emitted for packages that lack an updater:
13890
13891 @example
13892 $ guix refresh coreutils guile guile-ssh
13893 gnu/packages/ssh.scm:205:2: warning: no updater for guile-ssh
13894 gnu/packages/guile.scm:136:12: guile would be upgraded from 2.0.12 to 2.0.13
13895 @end example
13896
13897 @command{guix refresh} browses the upstream repository of each package and determines
13898 the highest version number of the releases therein. The command
13899 knows how to update specific types of packages: GNU packages, ELPA
13900 packages, etc.---see the documentation for @option{--type} below. There
13901 are many packages, though, for which it lacks a method to determine
13902 whether a new upstream release is available. However, the mechanism is
13903 extensible, so feel free to get in touch with us to add a new method!
13904
13905 @table @code
13906
13907 @item --recursive
13908 Consider the packages specified, and all the packages upon which they depend.
13909
13910 @example
13911 $ guix refresh --recursive coreutils
13912 gnu/packages/acl.scm:40:13: acl would be upgraded from 2.2.53 to 2.3.1
13913 gnu/packages/m4.scm:30:12: 1.4.18 is already the latest version of m4
13914 gnu/packages/xml.scm:68:2: warning: no updater for expat
13915 gnu/packages/multiprecision.scm:40:12: 6.1.2 is already the latest version of gmp
13916 @dots{}
13917 @end example
13918
13919 @end table
13920
13921 Sometimes the upstream name differs from the package name used in Guix,
13922 and @command{guix refresh} needs a little help. Most updaters honor the
13923 @code{upstream-name} property in package definitions, which can be used
13924 to that effect:
13925
13926 @lisp
13927 (define-public network-manager
13928 (package
13929 (name "network-manager")
13930 ;; @dots{}
13931 (properties '((upstream-name . "NetworkManager")))))
13932 @end lisp
13933
13934 When passed @option{--update}, it modifies distribution source files to
13935 update the version numbers and source tarball hashes of those package
13936 recipes (@pxref{Defining Packages}). This is achieved by downloading
13937 each package's latest source tarball and its associated OpenPGP
13938 signature, authenticating the downloaded tarball against its signature
13939 using @command{gpgv}, and finally computing its hash---note that GnuPG must be
13940 installed and in @code{$PATH}; run @code{guix install gnupg} if needed.
13941
13942 When the public
13943 key used to sign the tarball is missing from the user's keyring, an
13944 attempt is made to automatically retrieve it from a public key server;
13945 when this is successful, the key is added to the user's keyring; otherwise,
13946 @command{guix refresh} reports an error.
13947
13948 The following options are supported:
13949
13950 @table @code
13951
13952 @item --expression=@var{expr}
13953 @itemx -e @var{expr}
13954 Consider the package @var{expr} evaluates to.
13955
13956 This is useful to precisely refer to a package, as in this example:
13957
13958 @example
13959 guix refresh -l -e '(@@@@ (gnu packages commencement) glibc-final)'
13960 @end example
13961
13962 This command lists the dependents of the ``final'' libc (essentially all
13963 the packages).
13964
13965 @item --update
13966 @itemx -u
13967 Update distribution source files (package recipes) in place. This is
13968 usually run from a checkout of the Guix source tree (@pxref{Running
13969 Guix Before It Is Installed}):
13970
13971 @example
13972 $ ./pre-inst-env guix refresh -s non-core -u
13973 @end example
13974
13975 @xref{Defining Packages}, for more information on package definitions.
13976
13977 @item --select=[@var{subset}]
13978 @itemx -s @var{subset}
13979 Select all the packages in @var{subset}, one of @code{core} or
13980 @code{non-core}.
13981
13982 The @code{core} subset refers to all the packages at the core of the
13983 distribution---i.e., packages that are used to build ``everything
13984 else''. This includes GCC, libc, Binutils, Bash, etc. Usually,
13985 changing one of these packages in the distribution entails a rebuild of
13986 all the others. Thus, such updates are an inconvenience to users in
13987 terms of build time or bandwidth used to achieve the upgrade.
13988
13989 The @code{non-core} subset refers to the remaining packages. It is
13990 typically useful in cases where an update of the core packages would be
13991 inconvenient.
13992
13993 @item --manifest=@var{file}
13994 @itemx -m @var{file}
13995 Select all the packages from the manifest in @var{file}. This is useful to
13996 check if any packages of the user manifest can be updated.
13997
13998 @item --type=@var{updater}
13999 @itemx -t @var{updater}
14000 Select only packages handled by @var{updater} (may be a comma-separated
14001 list of updaters). Currently, @var{updater} may be one of:
14002
14003 @table @code
14004 @item gnu
14005 the updater for GNU packages;
14006 @item savannah
14007 the updater for packages hosted at @uref{https://savannah.gnu.org, Savannah};
14008 @item sourceforge
14009 the updater for packages hosted at @uref{https://sourceforge.net, SourceForge};
14010 @item gnome
14011 the updater for GNOME packages;
14012 @item kde
14013 the updater for KDE packages;
14014 @item xorg
14015 the updater for X.org packages;
14016 @item kernel.org
14017 the updater for packages hosted on kernel.org;
14018 @item egg
14019 the updater for @uref{https://wiki.call-cc.org/eggs/, Egg} packages;
14020 @item elpa
14021 the updater for @uref{https://elpa.gnu.org/, ELPA} packages;
14022 @item cran
14023 the updater for @uref{https://cran.r-project.org/, CRAN} packages;
14024 @item bioconductor
14025 the updater for @uref{https://www.bioconductor.org/, Bioconductor} R packages;
14026 @item cpan
14027 the updater for @uref{https://www.cpan.org/, CPAN} packages;
14028 @item pypi
14029 the updater for @uref{https://pypi.python.org, PyPI} packages.
14030 @item gem
14031 the updater for @uref{https://rubygems.org, RubyGems} packages.
14032 @item github
14033 the updater for @uref{https://github.com, GitHub} packages.
14034 @item hackage
14035 the updater for @uref{https://hackage.haskell.org, Hackage} packages.
14036 @item stackage
14037 the updater for @uref{https://www.stackage.org, Stackage} packages.
14038 @item crate
14039 the updater for @uref{https://crates.io, Crates} packages.
14040 @item launchpad
14041 the updater for @uref{https://launchpad.net, Launchpad} packages.
14042 @item generic-html
14043 a generic updater that crawls the HTML page where the source tarball of
14044 the package is hosted, when applicable.
14045
14046 @item generic-git
14047 a generic updater for packages hosted on Git repositories. It tries to
14048 be smart about parsing Git tag names, but if it is not able to parse the
14049 tag name and compare tags correctly, users can define the following
14050 properties for a package.
14051
14052 @itemize
14053 @item @code{release-tag-prefix}: a regular expression for matching a prefix of
14054 the tag name.
14055
14056 @item @code{release-tag-suffix}: a regular expression for matching a suffix of
14057 the tag name.
14058
14059 @item @code{release-tag-version-delimiter}: a string used as the delimiter in
14060 the tag name for separating the numbers of the version.
14061
14062 @item @code{accept-pre-releases}: by default, the updater will ignore
14063 pre-releases; to make it also look for pre-releases, set the this
14064 property to @code{#t}.
14065
14066 @end itemize
14067
14068 @lisp
14069 (package
14070 (name "foo")
14071 ;; ...
14072 (properties
14073 '((release-tag-prefix . "^release0-")
14074 (release-tag-suffix . "[a-z]?$")
14075 (release-tag-version-delimiter . ":"))))
14076 @end lisp
14077
14078
14079 @end table
14080
14081 For instance, the following command only checks for updates of Emacs
14082 packages hosted at @code{elpa.gnu.org} and for updates of CRAN packages:
14083
14084 @example
14085 $ guix refresh --type=elpa,cran
14086 gnu/packages/statistics.scm:819:13: r-testthat would be upgraded from 0.10.0 to 0.11.0
14087 gnu/packages/emacs.scm:856:13: emacs-auctex would be upgraded from 11.88.6 to 11.88.9
14088 @end example
14089
14090 @item --list-updaters
14091 List available updaters and exit (see @option{--type} above).
14092
14093 For each updater, display the fraction of packages it covers; at the
14094 end, display the fraction of packages covered by all these updaters.
14095 @end table
14096
14097 In addition, @command{guix refresh} can be passed one or more package
14098 names, as in this example:
14099
14100 @example
14101 $ ./pre-inst-env guix refresh -u emacs idutils gcc@@4.8
14102 @end example
14103
14104 @noindent
14105 The command above specifically updates the @code{emacs} and
14106 @code{idutils} packages. The @option{--select} option would have no
14107 effect in this case. You might also want to update definitions that
14108 correspond to the packages installed in your profile:
14109
14110 @example
14111 $ ./pre-inst-env guix refresh -u \
14112 $(guix package --list-installed | cut -f1)
14113 @end example
14114
14115 When considering whether to upgrade a package, it is sometimes
14116 convenient to know which packages would be affected by the upgrade and
14117 should be checked for compatibility. For this the following option may
14118 be used when passing @command{guix refresh} one or more package names:
14119
14120 @table @code
14121
14122 @item --list-dependent
14123 @itemx -l
14124 List top-level dependent packages that would need to be rebuilt as a
14125 result of upgrading one or more packages.
14126
14127 @xref{Invoking guix graph, the @code{reverse-package} type of
14128 @command{guix graph}}, for information on how to visualize the list of
14129 dependents of a package.
14130
14131 @end table
14132
14133 Be aware that the @option{--list-dependent} option only
14134 @emph{approximates} the rebuilds that would be required as a result of
14135 an upgrade. More rebuilds might be required under some circumstances.
14136
14137 @example
14138 $ guix refresh --list-dependent flex
14139 Building the following 120 packages would ensure 213 dependent packages are rebuilt:
14140 hop@@2.4.0 emacs-geiser@@0.13 notmuch@@0.18 mu@@0.9.9.5 cflow@@1.4 idutils@@4.6 @dots{}
14141 @end example
14142
14143 The command above lists a set of packages that could be built to check
14144 for compatibility with an upgraded @code{flex} package.
14145
14146 @table @code
14147
14148 @item --list-transitive
14149 List all the packages which one or more packages depend upon.
14150
14151 @example
14152 $ guix refresh --list-transitive flex
14153 flex@@2.6.4 depends on the following 25 packages: perl@@5.28.0 help2man@@1.47.6
14154 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{}
14155 @end example
14156
14157 @end table
14158
14159 The command above lists a set of packages which, when changed, would cause
14160 @code{flex} to be rebuilt.
14161
14162 The following options can be used to customize GnuPG operation:
14163
14164 @table @code
14165
14166 @item --gpg=@var{command}
14167 Use @var{command} as the GnuPG 2.x command. @var{command} is searched
14168 for in @code{$PATH}.
14169
14170 @item --keyring=@var{file}
14171 Use @var{file} as the keyring for upstream keys. @var{file} must be in the
14172 @dfn{keybox format}. Keybox files usually have a name ending in @file{.kbx}
14173 and the GNU@tie{}Privacy Guard (GPG) can manipulate these files
14174 (@pxref{kbxutil, @command{kbxutil},, gnupg, Using the GNU Privacy Guard}, for
14175 information on a tool to manipulate keybox files).
14176
14177 When this option is omitted, @command{guix refresh} uses
14178 @file{~/.config/guix/upstream/trustedkeys.kbx} as the keyring for upstream
14179 signing keys. OpenPGP signatures are checked against keys from this keyring;
14180 missing keys are downloaded to this keyring as well (see
14181 @option{--key-download} below).
14182
14183 You can export keys from your default GPG keyring into a keybox file using
14184 commands like this one:
14185
14186 @example
14187 gpg --export rms@@gnu.org | kbxutil --import-openpgp >> mykeyring.kbx
14188 @end example
14189
14190 Likewise, you can fetch keys to a specific keybox file like this:
14191
14192 @example
14193 gpg --no-default-keyring --keyring mykeyring.kbx \
14194 --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
14195 @end example
14196
14197 @xref{GPG Configuration Options, @option{--keyring},, gnupg, Using the GNU
14198 Privacy Guard}, for more information on GPG's @option{--keyring} option.
14199
14200 @item --key-download=@var{policy}
14201 Handle missing OpenPGP keys according to @var{policy}, which may be one
14202 of:
14203
14204 @table @code
14205 @item always
14206 Always download missing OpenPGP keys from the key server, and add them
14207 to the user's GnuPG keyring.
14208
14209 @item never
14210 Never try to download missing OpenPGP keys. Instead just bail out.
14211
14212 @item interactive
14213 When a package signed with an unknown OpenPGP key is encountered, ask
14214 the user whether to download it or not. This is the default behavior.
14215 @end table
14216
14217 @item --key-server=@var{host}
14218 Use @var{host} as the OpenPGP key server when importing a public key.
14219
14220 @item --load-path=@var{directory}
14221 @itemx -L @var{directory}
14222 Add @var{directory} to the front of the package module search path
14223 (@pxref{Package Modules}).
14224
14225 This allows users to define their own packages and make them visible to
14226 the command-line tools.
14227
14228 @end table
14229
14230 The @code{github} updater uses the
14231 @uref{https://developer.github.com/v3/, GitHub API} to query for new
14232 releases. When used repeatedly e.g.@: when refreshing all packages,
14233 GitHub will eventually refuse to answer any further API requests. By
14234 default 60 API requests per hour are allowed, and a full refresh on all
14235 GitHub packages in Guix requires more than this. Authentication with
14236 GitHub through the use of an API token alleviates these limits. To use
14237 an API token, set the environment variable @env{GUIX_GITHUB_TOKEN} to a
14238 token procured from @uref{https://github.com/settings/tokens} or
14239 otherwise.
14240
14241
14242 @node Invoking guix style
14243 @section Invoking @command{guix style}
14244
14245 @cindex @command{guix style}
14246 @cindex styling rules
14247 @cindex lint, code style
14248 @cindex format, code style
14249 @cindex format conventions
14250 The @command{guix style} command helps users and packagers alike style
14251 their package definitions and configuration files according to the
14252 latest fashionable trends. It can either reformat whole files, with the
14253 @option{--whole-file} option, or apply specific @dfn{styling rules} to
14254 individual package definitions. The command currently provides the
14255 following styling rules:
14256
14257 @itemize
14258 @item
14259 formatting package definitions according to the project's conventions
14260 (@pxref{Formatting Code});
14261
14262 @item
14263 rewriting package inputs to the ``new style'', as explained below.
14264 @end itemize
14265
14266 The way package inputs are written is going through a transition
14267 (@pxref{package Reference}, for more on package inputs). Until version
14268 1.3.0, package inputs were written using the ``old style'', where each
14269 input was given an explicit label, most of the time the package name:
14270
14271 @lisp
14272 (package
14273 ;; @dots{}
14274 ;; The "old style" (deprecated).
14275 (inputs `(("libunistring" ,libunistring)
14276 ("libffi" ,libffi))))
14277 @end lisp
14278
14279 Today, the old style is deprecated and the preferred style looks like
14280 this:
14281
14282 @lisp
14283 (package
14284 ;; @dots{}
14285 ;; The "new style".
14286 (inputs (list libunistring libffi)))
14287 @end lisp
14288
14289 Likewise, uses of @code{alist-delete} and friends to manipulate inputs
14290 is now deprecated in favor of @code{modify-inputs} (@pxref{Defining
14291 Package Variants}, for more info on @code{modify-inputs}).
14292
14293 In the vast majority of cases, this is a purely mechanical change on the
14294 surface syntax that does not even incur a package rebuild. Running
14295 @command{guix style -S inputs} can do that for you, whether you're working on
14296 packages in Guix proper or in an external channel.
14297
14298 The general syntax is:
14299
14300 @example
14301 guix style [@var{options}] @var{package}@dots{}
14302 @end example
14303
14304 This causes @command{guix style} to analyze and rewrite the definition
14305 of @var{package}@dots{} or, when @var{package} is omitted, of @emph{all}
14306 the packages. The @option{--styling} or @option{-S} option allows you
14307 to select the style rule, the default rule being @code{format}---see
14308 below.
14309
14310 To reformat entire source files, the syntax is:
14311
14312 @example
14313 guix style --whole-file @var{file}@dots{}
14314 @end example
14315
14316 The available options are listed below.
14317
14318 @table @code
14319 @item --dry-run
14320 @itemx -n
14321 Show source file locations that would be edited but do not modify them.
14322
14323 @item --whole-file
14324 @itemx -f
14325 Reformat the given files in their entirety. In that case, subsequent
14326 arguments are interpreted as file names (rather than package names), and
14327 the @option{--styling} option has no effect.
14328
14329 As an example, here is how you might reformat your operating system
14330 configuration (you need write permissions for the file):
14331
14332 @example
14333 guix style -f /etc/config.scm
14334 @end example
14335
14336 @item --styling=@var{rule}
14337 @itemx -S @var{rule}
14338 Apply @var{rule}, one of the following styling rules:
14339
14340 @table @code
14341 @item format
14342 Format the given package definition(s)---this is the default styling
14343 rule. For example, a packager running Guix on a checkout
14344 (@pxref{Running Guix Before It Is Installed}) might want to reformat the
14345 definition of the Coreutils package like so:
14346
14347 @example
14348 ./pre-inst-env guix style coreutils
14349 @end example
14350
14351 @item inputs
14352 Rewrite package inputs to the ``new style'', as described above. This
14353 is how you would rewrite inputs of package @code{whatnot} in your own
14354 channel:
14355
14356 @example
14357 guix style -L ~/my/channel -S inputs whatnot
14358 @end example
14359
14360 Rewriting is done in a conservative way: preserving comments and bailing
14361 out if it cannot make sense of the code that appears in an inputs field.
14362 The @option{--input-simplification} option described below provides
14363 fine-grain control over when inputs should be simplified.
14364 @end table
14365
14366 @item --list-stylings
14367 @itemx -l
14368 List and describe the available styling rules and exit.
14369
14370 @item --load-path=@var{directory}
14371 @itemx -L @var{directory}
14372 Add @var{directory} to the front of the package module search path
14373 (@pxref{Package Modules}).
14374
14375 @item --expression=@var{expr}
14376 @itemx -e @var{expr}
14377 Style the package @var{expr} evaluates to.
14378
14379 For example, running:
14380
14381 @example
14382 guix style -e '(@@ (gnu packages gcc) gcc-5)'
14383 @end example
14384
14385 styles the @code{gcc-5} package definition.
14386
14387 @item --input-simplification=@var{policy}
14388 When using the @code{inputs} styling rule, with @samp{-S inputs}, this
14389 option specifies the package input simplification policy for cases where
14390 an input label does not match the corresponding package name.
14391 @var{policy} may be one of the following:
14392
14393 @table @code
14394 @item silent
14395 Simplify inputs only when the change is ``silent'', meaning that the
14396 package does not need to be rebuilt (its derivation is unchanged).
14397
14398 @item safe
14399 Simplify inputs only when that is ``safe'' to do: the package might need
14400 to be rebuilt, but the change is known to have no observable effect.
14401
14402 @item always
14403 Simplify inputs even when input labels do not match package names, and
14404 even if that might have an observable effect.
14405 @end table
14406
14407 The default is @code{silent}, meaning that input simplifications do not
14408 trigger any package rebuild.
14409 @end table
14410
14411 @node Invoking guix lint
14412 @section Invoking @command{guix lint}
14413
14414 @cindex @command{guix lint}
14415 @cindex package, checking for errors
14416 The @command{guix lint} command is meant to help package developers avoid
14417 common errors and use a consistent style. It runs a number of checks on
14418 a given set of packages in order to find common mistakes in their
14419 definitions. Available @dfn{checkers} include (see
14420 @option{--list-checkers} for a complete list):
14421
14422 @table @code
14423 @item synopsis
14424 @itemx description
14425 Validate certain typographical and stylistic rules about package
14426 descriptions and synopses.
14427
14428 @item inputs-should-be-native
14429 Identify inputs that should most likely be native inputs.
14430
14431 @item source
14432 @itemx home-page
14433 @itemx mirror-url
14434 @itemx github-url
14435 @itemx source-file-name
14436 Probe @code{home-page} and @code{source} URLs and report those that are
14437 invalid. Suggest a @code{mirror://} URL when applicable. If the
14438 @code{source} URL redirects to a GitHub URL, recommend usage of the GitHub
14439 URL@. Check that the source file name is meaningful, e.g.@: is not just a
14440 version number or ``git-checkout'', without a declared @code{file-name}
14441 (@pxref{origin Reference}).
14442
14443 @item source-unstable-tarball
14444 Parse the @code{source} URL to determine if a tarball from GitHub is
14445 autogenerated or if it is a release tarball. Unfortunately GitHub's
14446 autogenerated tarballs are sometimes regenerated.
14447
14448 @item derivation
14449 Check that the derivation of the given packages can be successfully
14450 computed for all the supported systems (@pxref{Derivations}).
14451
14452 @item profile-collisions
14453 Check whether installing the given packages in a profile would lead to
14454 collisions. Collisions occur when several packages with the same name
14455 but a different version or a different store file name are propagated.
14456 @xref{package Reference, @code{propagated-inputs}}, for more information
14457 on propagated inputs.
14458
14459 @item archival
14460 @cindex Software Heritage, source code archive
14461 @cindex archival of source code, Software Heritage
14462 Checks whether the package's source code is archived at
14463 @uref{https://www.softwareheritage.org, Software Heritage}.
14464
14465 When the source code that is not archived comes from a version-control system
14466 (VCS)---e.g., it's obtained with @code{git-fetch}, send Software Heritage a
14467 ``save'' request so that it eventually archives it. This ensures that the
14468 source will remain available in the long term, and that Guix can fall back to
14469 Software Heritage should the source code disappear from its original host.
14470 The status of recent ``save'' requests can be
14471 @uref{https://archive.softwareheritage.org/save/#requests, viewed on-line}.
14472
14473 When source code is a tarball obtained with @code{url-fetch}, simply print a
14474 message when it is not archived. As of this writing, Software Heritage does
14475 not allow requests to save arbitrary tarballs; we are working on ways to
14476 ensure that non-VCS source code is also archived.
14477
14478 Software Heritage
14479 @uref{https://archive.softwareheritage.org/api/#rate-limiting, limits the
14480 request rate per IP address}. When the limit is reached, @command{guix lint}
14481 prints a message and the @code{archival} checker stops doing anything until
14482 that limit has been reset.
14483
14484 @item cve
14485 @cindex security vulnerabilities
14486 @cindex CVE, Common Vulnerabilities and Exposures
14487 Report known vulnerabilities found in the Common Vulnerabilities and
14488 Exposures (CVE) databases of the current and past year
14489 @uref{https://nvd.nist.gov/vuln/data-feeds, published by the US
14490 NIST}.
14491
14492 To view information about a particular vulnerability, visit pages such as:
14493
14494 @itemize
14495 @item
14496 @indicateurl{https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-YYYY-ABCD}
14497 @item
14498 @indicateurl{https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-YYYY-ABCD}
14499 @end itemize
14500
14501 @noindent
14502 where @code{CVE-YYYY-ABCD} is the CVE identifier---e.g.,
14503 @code{CVE-2015-7554}.
14504
14505 Package developers can specify in package recipes the
14506 @uref{https://nvd.nist.gov/products/cpe,Common Platform Enumeration (CPE)}
14507 name and version of the package when they differ from the name or version
14508 that Guix uses, as in this example:
14509
14510 @lisp
14511 (package
14512 (name "grub")
14513 ;; @dots{}
14514 ;; CPE calls this package "grub2".
14515 (properties '((cpe-name . "grub2")
14516 (cpe-version . "2.3"))))
14517 @end lisp
14518
14519 @c See <https://www.openwall.com/lists/oss-security/2017/03/15/3>.
14520 Some entries in the CVE database do not specify which version of a
14521 package they apply to, and would thus ``stick around'' forever. Package
14522 developers who found CVE alerts and verified they can be ignored can
14523 declare them as in this example:
14524
14525 @lisp
14526 (package
14527 (name "t1lib")
14528 ;; @dots{}
14529 ;; These CVEs no longer apply and can be safely ignored.
14530 (properties `((lint-hidden-cve . ("CVE-2011-0433"
14531 "CVE-2011-1553"
14532 "CVE-2011-1554"
14533 "CVE-2011-5244")))))
14534 @end lisp
14535
14536 @item formatting
14537 Warn about obvious source code formatting issues: trailing white space,
14538 use of tabulations, etc.
14539
14540 @item input-labels
14541 Report old-style input labels that do not match the name of the
14542 corresponding package. This aims to help migrate from the ``old input
14543 style''. @xref{package Reference}, for more information on package
14544 inputs and input styles. @xref{Invoking guix style}, on how to migrate
14545 to the new style.
14546 @end table
14547
14548 The general syntax is:
14549
14550 @example
14551 guix lint @var{options} @var{package}@dots{}
14552 @end example
14553
14554 If no package is given on the command line, then all packages are checked.
14555 The @var{options} may be zero or more of the following:
14556
14557 @table @code
14558 @item --list-checkers
14559 @itemx -l
14560 List and describe all the available checkers that will be run on packages
14561 and exit.
14562
14563 @item --checkers
14564 @itemx -c
14565 Only enable the checkers specified in a comma-separated list using the
14566 names returned by @option{--list-checkers}.
14567
14568 @item --exclude
14569 @itemx -x
14570 Only disable the checkers specified in a comma-separated list using the
14571 names returned by @option{--list-checkers}.
14572
14573 @item --expression=@var{expr}
14574 @itemx -e @var{expr}
14575 Consider the package @var{expr} evaluates to.
14576
14577 This is useful to unambiguously designate packages, as in this example:
14578
14579 @example
14580 guix lint -c archival -e '(@@ (gnu packages guile) guile-3.0)'
14581 @end example
14582
14583 @item --no-network
14584 @itemx -n
14585 Only enable the checkers that do not depend on Internet access.
14586
14587 @item --load-path=@var{directory}
14588 @itemx -L @var{directory}
14589 Add @var{directory} to the front of the package module search path
14590 (@pxref{Package Modules}).
14591
14592 This allows users to define their own packages and make them visible to
14593 the command-line tools.
14594
14595 @end table
14596
14597 @node Invoking guix size
14598 @section Invoking @command{guix size}
14599
14600 @cindex size
14601 @cindex package size
14602 @cindex closure
14603 @cindex @command{guix size}
14604 The @command{guix size} command helps package developers profile the
14605 disk usage of packages. It is easy to overlook the impact of an
14606 additional dependency added to a package, or the impact of using a
14607 single output for a package that could easily be split (@pxref{Packages
14608 with Multiple Outputs}). Such are the typical issues that
14609 @command{guix size} can highlight.
14610
14611 The command can be passed one or more package specifications
14612 such as @code{gcc@@4.8}
14613 or @code{guile:debug}, or a file name in the store. Consider this
14614 example:
14615
14616 @example
14617 $ guix size coreutils
14618 store item total self
14619 /gnu/store/@dots{}-gcc-5.5.0-lib 60.4 30.1 38.1%
14620 /gnu/store/@dots{}-glibc-2.27 30.3 28.8 36.6%
14621 /gnu/store/@dots{}-coreutils-8.28 78.9 15.0 19.0%
14622 /gnu/store/@dots{}-gmp-6.1.2 63.1 2.7 3.4%
14623 /gnu/store/@dots{}-bash-static-4.4.12 1.5 1.5 1.9%
14624 /gnu/store/@dots{}-acl-2.2.52 61.1 0.4 0.5%
14625 /gnu/store/@dots{}-attr-2.4.47 60.6 0.2 0.3%
14626 /gnu/store/@dots{}-libcap-2.25 60.5 0.2 0.2%
14627 total: 78.9 MiB
14628 @end example
14629
14630 @cindex closure
14631 The store items listed here constitute the @dfn{transitive closure} of
14632 Coreutils---i.e., Coreutils and all its dependencies, recursively---as
14633 would be returned by:
14634
14635 @example
14636 $ guix gc -R /gnu/store/@dots{}-coreutils-8.23
14637 @end example
14638
14639 Here the output shows three columns next to store items. The first column,
14640 labeled ``total'', shows the size in mebibytes (MiB) of the closure of
14641 the store item---that is, its own size plus the size of all its
14642 dependencies. The next column, labeled ``self'', shows the size of the
14643 item itself. The last column shows the ratio of the size of the item
14644 itself to the space occupied by all the items listed here.
14645
14646 In this example, we see that the closure of Coreutils weighs in at
14647 79@tie{}MiB, most of which is taken by libc and GCC's run-time support
14648 libraries. (That libc and GCC's libraries represent a large fraction of
14649 the closure is not a problem @i{per se} because they are always available
14650 on the system anyway.)
14651
14652 Since the command also accepts store file names, assessing the size of
14653 a build result is straightforward:
14654
14655 @example
14656 guix size $(guix system build config.scm)
14657 @end example
14658
14659 When the package(s) passed to @command{guix size} are available in the
14660 store@footnote{More precisely, @command{guix size} looks for the
14661 @emph{ungrafted} variant of the given package(s), as returned by
14662 @code{guix build @var{package} --no-grafts}. @xref{Security Updates},
14663 for information on grafts.}, @command{guix size} queries the daemon to determine its
14664 dependencies, and measures its size in the store, similar to @command{du
14665 -ms --apparent-size} (@pxref{du invocation,,, coreutils, GNU
14666 Coreutils}).
14667
14668 When the given packages are @emph{not} in the store, @command{guix size}
14669 reports information based on the available substitutes
14670 (@pxref{Substitutes}). This makes it possible it to profile disk usage of
14671 store items that are not even on disk, only available remotely.
14672
14673 You can also specify several package names:
14674
14675 @example
14676 $ guix size coreutils grep sed bash
14677 store item total self
14678 /gnu/store/@dots{}-coreutils-8.24 77.8 13.8 13.4%
14679 /gnu/store/@dots{}-grep-2.22 73.1 0.8 0.8%
14680 /gnu/store/@dots{}-bash-4.3.42 72.3 4.7 4.6%
14681 /gnu/store/@dots{}-readline-6.3 67.6 1.2 1.2%
14682 @dots{}
14683 total: 102.3 MiB
14684 @end example
14685
14686 @noindent
14687 In this example we see that the combination of the four packages takes
14688 102.3@tie{}MiB in total, which is much less than the sum of each closure
14689 since they have a lot of dependencies in common.
14690
14691 When looking at the profile returned by @command{guix size}, you may
14692 find yourself wondering why a given package shows up in the profile at
14693 all. To understand it, you can use @command{guix graph --path -t
14694 references} to display the shortest path between the two packages
14695 (@pxref{Invoking guix graph}).
14696
14697 The available options are:
14698
14699 @table @option
14700
14701 @item --substitute-urls=@var{urls}
14702 Use substitute information from @var{urls}.
14703 @xref{client-substitute-urls, the same option for @code{guix build}}.
14704
14705 @item --sort=@var{key}
14706 Sort lines according to @var{key}, one of the following options:
14707
14708 @table @code
14709 @item self
14710 the size of each item (the default);
14711 @item closure
14712 the total size of the item's closure.
14713 @end table
14714
14715 @item --map-file=@var{file}
14716 Write a graphical map of disk usage in PNG format to @var{file}.
14717
14718 For the example above, the map looks like this:
14719
14720 @image{images/coreutils-size-map,5in,, map of Coreutils disk usage
14721 produced by @command{guix size}}
14722
14723 This option requires that
14724 @uref{https://wingolog.org/software/guile-charting/, Guile-Charting} be
14725 installed and visible in Guile's module search path. When that is not
14726 the case, @command{guix size} fails as it tries to load it.
14727
14728 @item --system=@var{system}
14729 @itemx -s @var{system}
14730 Consider packages for @var{system}---e.g., @code{x86_64-linux}.
14731
14732 @item --load-path=@var{directory}
14733 @itemx -L @var{directory}
14734 Add @var{directory} to the front of the package module search path
14735 (@pxref{Package Modules}).
14736
14737 This allows users to define their own packages and make them visible to
14738 the command-line tools.
14739 @end table
14740
14741 @node Invoking guix graph
14742 @section Invoking @command{guix graph}
14743
14744 @cindex DAG
14745 @cindex @command{guix graph}
14746 @cindex package dependencies
14747 Packages and their dependencies form a @dfn{graph}, specifically a
14748 directed acyclic graph (DAG). It can quickly become difficult to have a
14749 mental model of the package DAG, so the @command{guix graph} command
14750 provides a visual representation of the DAG@. By default,
14751 @command{guix graph} emits a DAG representation in the input format of
14752 @uref{https://www.graphviz.org/, Graphviz}, so its output can be passed
14753 directly to the @command{dot} command of Graphviz. It can also emit an
14754 HTML page with embedded JavaScript code to display a ``chord diagram''
14755 in a Web browser, using the @uref{https://d3js.org/, d3.js} library, or
14756 emit Cypher queries to construct a graph in a graph database supporting
14757 the @uref{https://www.opencypher.org/, openCypher} query language. With
14758 @option{--path}, it simply displays the shortest path between two
14759 packages. The general syntax is:
14760
14761 @example
14762 guix graph @var{options} @var{package}@dots{}
14763 @end example
14764
14765 For example, the following command generates a PDF file representing the
14766 package DAG for the GNU@tie{}Core Utilities, showing its build-time
14767 dependencies:
14768
14769 @example
14770 guix graph coreutils | dot -Tpdf > dag.pdf
14771 @end example
14772
14773 The output looks like this:
14774
14775 @image{images/coreutils-graph,2in,,Dependency graph of the GNU Coreutils}
14776
14777 Nice little graph, no?
14778
14779 You may find it more pleasant to navigate the graph interactively with
14780 @command{xdot} (from the @code{xdot} package):
14781
14782 @example
14783 guix graph coreutils | xdot -
14784 @end example
14785
14786 But there is more than one graph! The one above is concise: it is the
14787 graph of package objects, omitting implicit inputs such as GCC, libc,
14788 grep, etc. It is often useful to have such a concise graph, but
14789 sometimes one may want to see more details. @command{guix graph} supports
14790 several types of graphs, allowing you to choose the level of detail:
14791
14792 @table @code
14793 @item package
14794 This is the default type used in the example above. It shows the DAG of
14795 package objects, excluding implicit dependencies. It is concise, but
14796 filters out many details.
14797
14798 @item reverse-package
14799 This shows the @emph{reverse} DAG of packages. For example:
14800
14801 @example
14802 guix graph --type=reverse-package ocaml
14803 @end example
14804
14805 ...@: yields the graph of packages that @emph{explicitly} depend on OCaml (if
14806 you are also interested in cases where OCaml is an implicit dependency, see
14807 @code{reverse-bag} below).
14808
14809 Note that for core packages this can yield huge graphs. If all you want
14810 is to know the number of packages that depend on a given package, use
14811 @command{guix refresh --list-dependent} (@pxref{Invoking guix refresh,
14812 @option{--list-dependent}}).
14813
14814 @item bag-emerged
14815 This is the package DAG, @emph{including} implicit inputs.
14816
14817 For instance, the following command:
14818
14819 @example
14820 guix graph --type=bag-emerged coreutils
14821 @end example
14822
14823 ...@: yields this bigger graph:
14824
14825 @image{images/coreutils-bag-graph,,5in,Detailed dependency graph of the GNU Coreutils}
14826
14827 At the bottom of the graph, we see all the implicit inputs of
14828 @var{gnu-build-system} (@pxref{Build Systems, @code{gnu-build-system}}).
14829
14830 Now, note that the dependencies of these implicit inputs---that is, the
14831 @dfn{bootstrap dependencies} (@pxref{Bootstrapping})---are not shown
14832 here, for conciseness.
14833
14834 @item bag
14835 Similar to @code{bag-emerged}, but this time including all the bootstrap
14836 dependencies.
14837
14838 @item bag-with-origins
14839 Similar to @code{bag}, but also showing origins and their dependencies.
14840
14841 @item reverse-bag
14842 This shows the @emph{reverse} DAG of packages. Unlike @code{reverse-package},
14843 it also takes implicit dependencies into account. For example:
14844
14845 @example
14846 guix graph -t reverse-bag dune
14847 @end example
14848
14849 @noindent
14850 ...@: yields the graph of all packages that depend on Dune, directly or
14851 indirectly. Since Dune is an @emph{implicit} dependency of many packages
14852 @i{via} @code{dune-build-system}, this shows a large number of packages,
14853 whereas @code{reverse-package} would show very few if any.
14854
14855 @item derivation
14856 This is the most detailed representation: It shows the DAG of
14857 derivations (@pxref{Derivations}) and plain store items. Compared to
14858 the above representation, many additional nodes are visible, including
14859 build scripts, patches, Guile modules, etc.
14860
14861 For this type of graph, it is also possible to pass a @file{.drv} file
14862 name instead of a package name, as in:
14863
14864 @example
14865 guix graph -t derivation $(guix system build -d my-config.scm)
14866 @end example
14867
14868 @item module
14869 This is the graph of @dfn{package modules} (@pxref{Package Modules}).
14870 For example, the following command shows the graph for the package
14871 module that defines the @code{guile} package:
14872
14873 @example
14874 guix graph -t module guile | xdot -
14875 @end example
14876 @end table
14877
14878 All the types above correspond to @emph{build-time dependencies}. The
14879 following graph type represents the @emph{run-time dependencies}:
14880
14881 @table @code
14882 @item references
14883 This is the graph of @dfn{references} of a package output, as returned
14884 by @command{guix gc --references} (@pxref{Invoking guix gc}).
14885
14886 If the given package output is not available in the store, @command{guix
14887 graph} attempts to obtain dependency information from substitutes.
14888
14889 Here you can also pass a store file name instead of a package name. For
14890 example, the command below produces the reference graph of your profile
14891 (which can be big!):
14892
14893 @example
14894 guix graph -t references $(readlink -f ~/.guix-profile)
14895 @end example
14896
14897 @item referrers
14898 This is the graph of the @dfn{referrers} of a store item, as returned by
14899 @command{guix gc --referrers} (@pxref{Invoking guix gc}).
14900
14901 This relies exclusively on local information from your store. For
14902 instance, let us suppose that the current Inkscape is available in 10
14903 profiles on your machine; @command{guix graph -t referrers inkscape}
14904 will show a graph rooted at Inkscape and with those 10 profiles linked
14905 to it.
14906
14907 It can help determine what is preventing a store item from being garbage
14908 collected.
14909
14910 @end table
14911
14912 @cindex shortest path, between packages
14913 Often, the graph of the package you are interested in does not fit on
14914 your screen, and anyway all you want to know is @emph{why} that package
14915 actually depends on some seemingly unrelated package. The
14916 @option{--path} option instructs @command{guix graph} to display the
14917 shortest path between two packages (or derivations, or store items,
14918 etc.):
14919
14920 @example
14921 $ guix graph --path emacs libunistring
14922 emacs@@26.3
14923 mailutils@@3.9
14924 libunistring@@0.9.10
14925 $ guix graph --path -t derivation emacs libunistring
14926 /gnu/store/@dots{}-emacs-26.3.drv
14927 /gnu/store/@dots{}-mailutils-3.9.drv
14928 /gnu/store/@dots{}-libunistring-0.9.10.drv
14929 $ guix graph --path -t references emacs libunistring
14930 /gnu/store/@dots{}-emacs-26.3
14931 /gnu/store/@dots{}-libidn2-2.2.0
14932 /gnu/store/@dots{}-libunistring-0.9.10
14933 @end example
14934
14935 Sometimes you still want to visualize the graph but would like to trim
14936 it so it can actually be displayed. One way to do it is via the
14937 @option{--max-depth} (or @option{-M}) option, which lets you specify the
14938 maximum depth of the graph. In the example below, we visualize only
14939 @code{libreoffice} and the nodes whose distance to @code{libreoffice} is
14940 at most 2:
14941
14942 @example
14943 guix graph -M 2 libreoffice | xdot -f fdp -
14944 @end example
14945
14946 Mind you, that's still a big ball of spaghetti, but at least
14947 @command{dot} can render it quickly and it can be browsed somewhat.
14948
14949 The available options are the following:
14950
14951 @table @option
14952 @item --type=@var{type}
14953 @itemx -t @var{type}
14954 Produce a graph output of @var{type}, where @var{type} must be one of
14955 the values listed above.
14956
14957 @item --list-types
14958 List the supported graph types.
14959
14960 @item --backend=@var{backend}
14961 @itemx -b @var{backend}
14962 Produce a graph using the selected @var{backend}.
14963
14964 @item --list-backends
14965 List the supported graph backends.
14966
14967 Currently, the available backends are Graphviz and d3.js.
14968
14969 @item --path
14970 Display the shortest path between two nodes of the type specified by
14971 @option{--type}. The example below shows the shortest path between
14972 @code{libreoffice} and @code{llvm} according to the references of
14973 @code{libreoffice}:
14974
14975 @example
14976 $ guix graph --path -t references libreoffice llvm
14977 /gnu/store/@dots{}-libreoffice-6.4.2.2
14978 /gnu/store/@dots{}-libepoxy-1.5.4
14979 /gnu/store/@dots{}-mesa-19.3.4
14980 /gnu/store/@dots{}-llvm-9.0.1
14981 @end example
14982
14983 @item --expression=@var{expr}
14984 @itemx -e @var{expr}
14985 Consider the package @var{expr} evaluates to.
14986
14987 This is useful to precisely refer to a package, as in this example:
14988
14989 @example
14990 guix graph -e '(@@@@ (gnu packages commencement) gnu-make-final)'
14991 @end example
14992
14993 @item --system=@var{system}
14994 @itemx -s @var{system}
14995 Display the graph for @var{system}---e.g., @code{i686-linux}.
14996
14997 The package dependency graph is largely architecture-independent, but there
14998 are some architecture-dependent bits that this option allows you to visualize.
14999
15000 @item --load-path=@var{directory}
15001 @itemx -L @var{directory}
15002 Add @var{directory} to the front of the package module search path
15003 (@pxref{Package Modules}).
15004
15005 This allows users to define their own packages and make them visible to
15006 the command-line tools.
15007 @end table
15008
15009 On top of that, @command{guix graph} supports all the usual package
15010 transformation options (@pxref{Package Transformation Options}). This
15011 makes it easy to view the effect of a graph-rewriting transformation
15012 such as @option{--with-input}. For example, the command below outputs
15013 the graph of @code{git} once @code{openssl} has been replaced by
15014 @code{libressl} everywhere in the graph:
15015
15016 @example
15017 guix graph git --with-input=openssl=libressl
15018 @end example
15019
15020 So many possibilities, so much fun!
15021
15022 @node Invoking guix publish
15023 @section Invoking @command{guix publish}
15024
15025 @cindex @command{guix publish}
15026 The purpose of @command{guix publish} is to enable users to easily share
15027 their store with others, who can then use it as a substitute server
15028 (@pxref{Substitutes}).
15029
15030 When @command{guix publish} runs, it spawns an HTTP server which allows
15031 anyone with network access to obtain substitutes from it. This means
15032 that any machine running Guix can also act as if it were a build farm,
15033 since the HTTP interface is compatible with Cuirass, the software behind
15034 the @code{@value{SUBSTITUTE-SERVER-1}} build farm.
15035
15036 For security, each substitute is signed, allowing recipients to check
15037 their authenticity and integrity (@pxref{Substitutes}). Because
15038 @command{guix publish} uses the signing key of the system, which is only
15039 readable by the system administrator, it must be started as root; the
15040 @option{--user} option makes it drop root privileges early on.
15041
15042 The signing key pair must be generated before @command{guix publish} is
15043 launched, using @command{guix archive --generate-key} (@pxref{Invoking
15044 guix archive}).
15045
15046 When the @option{--advertise} option is passed, the server advertises
15047 its availability on the local network using multicast DNS (mDNS) and DNS
15048 service discovery (DNS-SD), currently @i{via} Guile-Avahi (@pxref{Top,,,
15049 guile-avahi, Using Avahi in Guile Scheme Programs}).
15050
15051 The general syntax is:
15052
15053 @example
15054 guix publish @var{options}@dots{}
15055 @end example
15056
15057 Running @command{guix publish} without any additional arguments will
15058 spawn an HTTP server on port 8080:
15059
15060 @example
15061 guix publish
15062 @end example
15063
15064 @cindex socket activation, for @command{guix publish}
15065 @command{guix publish} can also be started following the systemd
15066 ``socket activation'' protocol (@pxref{Service De- and Constructors,
15067 @code{make-systemd-constructor},, shepherd, The GNU Shepherd Manual}).
15068
15069 Once a publishing server has been authorized, the daemon may download
15070 substitutes from it. @xref{Getting Substitutes from Other Servers}.
15071
15072 By default, @command{guix publish} compresses archives on the fly as it
15073 serves them. This ``on-the-fly'' mode is convenient in that it requires
15074 no setup and is immediately available. However, when serving lots of
15075 clients, we recommend using the @option{--cache} option, which enables
15076 caching of the archives before they are sent to clients---see below for
15077 details. The @command{guix weather} command provides a handy way to
15078 check what a server provides (@pxref{Invoking guix weather}).
15079
15080 As a bonus, @command{guix publish} also serves as a content-addressed
15081 mirror for source files referenced in @code{origin} records
15082 (@pxref{origin Reference}). For instance, assuming @command{guix
15083 publish} is running on @code{example.org}, the following URL returns the
15084 raw @file{hello-2.10.tar.gz} file with the given SHA256 hash
15085 (represented in @code{nix-base32} format, @pxref{Invoking guix hash}):
15086
15087 @example
15088 http://example.org/file/hello-2.10.tar.gz/sha256/0ssi1@dots{}ndq1i
15089 @end example
15090
15091 Obviously, these URLs only work for files that are in the store; in
15092 other cases, they return 404 (``Not Found'').
15093
15094 @cindex build logs, publication
15095 Build logs are available from @code{/log} URLs like:
15096
15097 @example
15098 http://example.org/log/gwspk@dots{}-guile-2.2.3
15099 @end example
15100
15101 @noindent
15102 When @command{guix-daemon} is configured to save compressed build logs,
15103 as is the case by default (@pxref{Invoking guix-daemon}), @code{/log}
15104 URLs return the compressed log as-is, with an appropriate
15105 @code{Content-Type} and/or @code{Content-Encoding} header. We recommend
15106 running @command{guix-daemon} with @option{--log-compression=gzip} since
15107 Web browsers can automatically decompress it, which is not the case with
15108 Bzip2 compression.
15109
15110 The following options are available:
15111
15112 @table @code
15113 @item --port=@var{port}
15114 @itemx -p @var{port}
15115 Listen for HTTP requests on @var{port}.
15116
15117 @item --listen=@var{host}
15118 Listen on the network interface for @var{host}. The default is to
15119 accept connections from any interface.
15120
15121 @item --user=@var{user}
15122 @itemx -u @var{user}
15123 Change privileges to @var{user} as soon as possible---i.e., once the
15124 server socket is open and the signing key has been read.
15125
15126 @item --compression[=@var{method}[:@var{level}]]
15127 @itemx -C [@var{method}[:@var{level}]]
15128 Compress data using the given @var{method} and @var{level}. @var{method} is
15129 one of @code{lzip}, @code{zstd}, and @code{gzip}; when @var{method} is
15130 omitted, @code{gzip} is used.
15131
15132 When @var{level} is zero, disable compression. The range 1 to 9 corresponds
15133 to different compression levels: 1 is the fastest, and 9 is the best
15134 (CPU-intensive). The default is 3.
15135
15136 Usually, @code{lzip} compresses noticeably better than @code{gzip} for a
15137 small increase in CPU usage; see
15138 @uref{https://nongnu.org/lzip/lzip_benchmark.html,benchmarks on the lzip
15139 Web page}. However, @code{lzip} achieves low decompression throughput
15140 (on the order of 50@tie{}MiB/s on modern hardware), which can be a
15141 bottleneck for someone who downloads over a fast network connection.
15142
15143 The compression ratio of @code{zstd} is between that of @code{lzip} and
15144 that of @code{gzip}; its main advantage is a
15145 @uref{https://facebook.github.io/zstd/,high decompression speed}.
15146
15147 Unless @option{--cache} is used, compression occurs on the fly and
15148 the compressed streams are not
15149 cached. Thus, to reduce load on the machine that runs @command{guix
15150 publish}, it may be a good idea to choose a low compression level, to
15151 run @command{guix publish} behind a caching proxy, or to use
15152 @option{--cache}. Using @option{--cache} has the advantage that it
15153 allows @command{guix publish} to add @code{Content-Length} HTTP header
15154 to its responses.
15155
15156 This option can be repeated, in which case every substitute gets compressed
15157 using all the selected methods, and all of them are advertised. This is
15158 useful when users may not support all the compression methods: they can select
15159 the one they support.
15160
15161 @item --cache=@var{directory}
15162 @itemx -c @var{directory}
15163 Cache archives and meta-data (@code{.narinfo} URLs) to @var{directory}
15164 and only serve archives that are in cache.
15165
15166 When this option is omitted, archives and meta-data are created
15167 on-the-fly. This can reduce the available bandwidth, especially when
15168 compression is enabled, since this may become CPU-bound. Another
15169 drawback of the default mode is that the length of archives is not known
15170 in advance, so @command{guix publish} does not add a
15171 @code{Content-Length} HTTP header to its responses, which in turn
15172 prevents clients from knowing the amount of data being downloaded.
15173
15174 Conversely, when @option{--cache} is used, the first request for a store
15175 item (@i{via} a @code{.narinfo} URL) triggers a
15176 background process to @dfn{bake} the archive---computing its
15177 @code{.narinfo} and compressing the archive, if needed. Once the
15178 archive is cached in @var{directory}, subsequent requests succeed and
15179 are served directly from the cache, which guarantees that clients get
15180 the best possible bandwidth.
15181
15182 That first @code{.narinfo} request nonetheless returns 200, provided the
15183 requested store item is ``small enough'', below the cache bypass
15184 threshold---see @option{--cache-bypass-threshold} below. That way,
15185 clients do not have to wait until the archive is baked. For larger
15186 store items, the first @code{.narinfo} request returns 404, meaning that
15187 clients have to wait until the archive is baked.
15188
15189 The ``baking'' process is performed by worker threads. By default, one
15190 thread per CPU core is created, but this can be customized. See
15191 @option{--workers} below.
15192
15193 When @option{--ttl} is used, cached entries are automatically deleted
15194 when they have expired.
15195
15196 @item --workers=@var{N}
15197 When @option{--cache} is used, request the allocation of @var{N} worker
15198 threads to ``bake'' archives.
15199
15200 @item --ttl=@var{ttl}
15201 Produce @code{Cache-Control} HTTP headers that advertise a time-to-live
15202 (TTL) of @var{ttl}. @var{ttl} must denote a duration: @code{5d} means 5
15203 days, @code{1m} means 1 month, and so on.
15204
15205 This allows the user's Guix to keep substitute information in cache for
15206 @var{ttl}. However, note that @code{guix publish} does not itself
15207 guarantee that the store items it provides will indeed remain available
15208 for as long as @var{ttl}.
15209
15210 Additionally, when @option{--cache} is used, cached entries that have
15211 not been accessed for @var{ttl} and that no longer have a corresponding
15212 item in the store, may be deleted.
15213
15214 @item --negative-ttl=@var{ttl}
15215 Similarly produce @code{Cache-Control} HTTP headers to advertise the
15216 time-to-live (TTL) of @emph{negative} lookups---missing store items, for
15217 which the HTTP 404 code is returned. By default, no negative TTL is
15218 advertised.
15219
15220 This parameter can help adjust server load and substitute latency by
15221 instructing cooperating clients to be more or less patient when a store
15222 item is missing.
15223
15224 @item --cache-bypass-threshold=@var{size}
15225 When used in conjunction with @option{--cache}, store items smaller than
15226 @var{size} are immediately available, even when they are not yet in
15227 cache. @var{size} is a size in bytes, or it can be suffixed by @code{M}
15228 for megabytes and so on. The default is @code{10M}.
15229
15230 ``Cache bypass'' allows you to reduce the publication delay for clients
15231 at the expense of possibly additional I/O and CPU use on the server
15232 side: depending on the client access patterns, those store items can end
15233 up being baked several times until a copy is available in cache.
15234
15235 Increasing the threshold may be useful for sites that have few users, or
15236 to guarantee that users get substitutes even for store items that are
15237 not popular.
15238
15239 @item --nar-path=@var{path}
15240 Use @var{path} as the prefix for the URLs of ``nar'' files
15241 (@pxref{Invoking guix archive, normalized archives}).
15242
15243 By default, nars are served at a URL such as
15244 @code{/nar/gzip/@dots{}-coreutils-8.25}. This option allows you to
15245 change the @code{/nar} part to @var{path}.
15246
15247 @item --public-key=@var{file}
15248 @itemx --private-key=@var{file}
15249 Use the specific @var{file}s as the public/private key pair used to sign
15250 the store items being published.
15251
15252 The files must correspond to the same key pair (the private key is used
15253 for signing and the public key is merely advertised in the signature
15254 metadata). They must contain keys in the canonical s-expression format
15255 as produced by @command{guix archive --generate-key} (@pxref{Invoking
15256 guix archive}). By default, @file{/etc/guix/signing-key.pub} and
15257 @file{/etc/guix/signing-key.sec} are used.
15258
15259 @item --repl[=@var{port}]
15260 @itemx -r [@var{port}]
15261 Spawn a Guile REPL server (@pxref{REPL Servers,,, guile, GNU Guile
15262 Reference Manual}) on @var{port} (37146 by default). This is used
15263 primarily for debugging a running @command{guix publish} server.
15264 @end table
15265
15266 Enabling @command{guix publish} on Guix System is a one-liner: just
15267 instantiate a @code{guix-publish-service-type} service in the @code{services} field
15268 of the @code{operating-system} declaration (@pxref{guix-publish-service-type,
15269 @code{guix-publish-service-type}}).
15270
15271 If you are instead running Guix on a ``foreign distro'', follow these
15272 instructions:
15273
15274 @itemize
15275 @item
15276 If your host distro uses the systemd init system:
15277
15278 @example
15279 # ln -s ~root/.guix-profile/lib/systemd/system/guix-publish.service \
15280 /etc/systemd/system/
15281 # systemctl start guix-publish && systemctl enable guix-publish
15282 @end example
15283
15284 @item
15285 If your host distro uses the Upstart init system:
15286
15287 @example
15288 # ln -s ~root/.guix-profile/lib/upstart/system/guix-publish.conf /etc/init/
15289 # start guix-publish
15290 @end example
15291
15292 @item
15293 Otherwise, proceed similarly with your distro's init system.
15294 @end itemize
15295
15296 @node Invoking guix challenge
15297 @section Invoking @command{guix challenge}
15298
15299 @cindex reproducible builds
15300 @cindex verifiable builds
15301 @cindex @command{guix challenge}
15302 @cindex challenge
15303 Do the binaries provided by this server really correspond to the source
15304 code it claims to build? Is a package build process deterministic?
15305 These are the questions the @command{guix challenge} command attempts to
15306 answer.
15307
15308 The former is obviously an important question: Before using a substitute
15309 server (@pxref{Substitutes}), one had better @emph{verify} that it
15310 provides the right binaries, and thus @emph{challenge} it. The latter
15311 is what enables the former: If package builds are deterministic, then
15312 independent builds of the package should yield the exact same result,
15313 bit for bit; if a server provides a binary different from the one
15314 obtained locally, it may be either corrupt or malicious.
15315
15316 We know that the hash that shows up in @file{/gnu/store} file names is
15317 the hash of all the inputs of the process that built the file or
15318 directory---compilers, libraries, build scripts,
15319 etc. (@pxref{Introduction}). Assuming deterministic build processes,
15320 one store file name should map to exactly one build output.
15321 @command{guix challenge} checks whether there is, indeed, a single
15322 mapping by comparing the build outputs of several independent builds of
15323 any given store item.
15324
15325 The command output looks like this:
15326
15327 @smallexample
15328 $ guix challenge \
15329 --substitute-urls="https://@value{SUBSTITUTE-SERVER-1} https://guix.example.org" \
15330 openssl git pius coreutils grep
15331 updating substitutes from 'https://@value{SUBSTITUTE-SERVER-1}'... 100.0%
15332 updating substitutes from 'https://guix.example.org'... 100.0%
15333 /gnu/store/@dots{}-openssl-1.0.2d contents differ:
15334 local hash: 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
15335 https://@value{SUBSTITUTE-SERVER-1}/nar/@dots{}-openssl-1.0.2d: 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
15336 https://guix.example.org/nar/@dots{}-openssl-1.0.2d: 1zy4fmaaqcnjrzzajkdn3f5gmjk754b43qkq47llbyak9z0qjyim
15337 differing files:
15338 /lib/libcrypto.so.1.1
15339 /lib/libssl.so.1.1
15340
15341 /gnu/store/@dots{}-git-2.5.0 contents differ:
15342 local hash: 00p3bmryhjxrhpn2gxs2fy0a15lnip05l97205pgbk5ra395hyha
15343 https://@value{SUBSTITUTE-SERVER-1}/nar/@dots{}-git-2.5.0: 069nb85bv4d4a6slrwjdy8v1cn4cwspm3kdbmyb81d6zckj3nq9f
15344 https://guix.example.org/nar/@dots{}-git-2.5.0: 0mdqa9w1p6cmli6976v4wi0sw9r4p5prkj7lzfd1877wk11c9c73
15345 differing file:
15346 /libexec/git-core/git-fsck
15347
15348 /gnu/store/@dots{}-pius-2.1.1 contents differ:
15349 local hash: 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
15350 https://@value{SUBSTITUTE-SERVER-1}/nar/@dots{}-pius-2.1.1: 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
15351 https://guix.example.org/nar/@dots{}-pius-2.1.1: 1cy25x1a4fzq5rk0pmvc8xhwyffnqz95h2bpvqsz2mpvlbccy0gs
15352 differing file:
15353 /share/man/man1/pius.1.gz
15354
15355 @dots{}
15356
15357 5 store items were analyzed:
15358 - 2 (40.0%) were identical
15359 - 3 (60.0%) differed
15360 - 0 (0.0%) were inconclusive
15361 @end smallexample
15362
15363 @noindent
15364 In this example, @command{guix challenge} queries all the substitute
15365 servers for each of the fives packages specified on the command line.
15366 It then reports those store items for which the servers obtained a
15367 result different from the local build (if it exists) and/or different
15368 from one another; here, the @samp{local hash} lines indicate that a
15369 local build result was available for each of these packages and shows
15370 its hash.
15371
15372 @cindex non-determinism, in package builds
15373 As an example, @code{guix.example.org} always gets a different answer.
15374 Conversely, @code{@value{SUBSTITUTE-SERVER-1}} agrees with local builds, except in the
15375 case of Git. This might indicate that the build process of Git is
15376 non-deterministic, meaning that its output varies as a function of
15377 various things that Guix does not fully control, in spite of building
15378 packages in isolated environments (@pxref{Features}). Most common
15379 sources of non-determinism include the addition of timestamps in build
15380 results, the inclusion of random numbers, and directory listings sorted
15381 by inode number. See @uref{https://reproducible-builds.org/docs/}, for
15382 more information.
15383
15384 To find out what is wrong with this Git binary, the easiest approach is
15385 to run:
15386
15387 @example
15388 guix challenge git \
15389 --diff=diffoscope \
15390 --substitute-urls="https://@value{SUBSTITUTE-SERVER-1} https://guix.example.org"
15391 @end example
15392
15393 This automatically invokes @command{diffoscope}, which displays detailed
15394 information about files that differ.
15395
15396 Alternatively, we can do something along these lines (@pxref{Invoking guix
15397 archive}):
15398
15399 @example
15400 $ wget -q -O - https://@value{SUBSTITUTE-SERVER-1}/nar/lzip/@dots{}-git-2.5.0 \
15401 | lzip -d | guix archive -x /tmp/git
15402 $ diff -ur --no-dereference /gnu/store/@dots{}-git.2.5.0 /tmp/git
15403 @end example
15404
15405 This command shows the difference between the files resulting from the
15406 local build, and the files resulting from the build on
15407 @code{@value{SUBSTITUTE-SERVER-1}} (@pxref{Overview, Comparing and Merging Files,,
15408 diffutils, Comparing and Merging Files}). The @command{diff} command
15409 works great for text files. When binary files differ, a better option
15410 is @uref{https://diffoscope.org/, Diffoscope}, a tool that helps
15411 visualize differences for all kinds of files.
15412
15413 Once you have done that work, you can tell whether the differences are due
15414 to a non-deterministic build process or to a malicious server. We try
15415 hard to remove sources of non-determinism in packages to make it easier
15416 to verify substitutes, but of course, this is a process that
15417 involves not just Guix, but a large part of the free software community.
15418 In the meantime, @command{guix challenge} is one tool to help address
15419 the problem.
15420
15421 If you are writing packages for Guix, you are encouraged to check
15422 whether @code{@value{SUBSTITUTE-SERVER-1}} and other substitute servers obtain the
15423 same build result as you did with:
15424
15425 @example
15426 guix challenge @var{package}
15427 @end example
15428
15429 The general syntax is:
15430
15431 @example
15432 guix challenge @var{options} @var{argument}@dots{}
15433 @end example
15434
15435 @noindent
15436 where @var{argument} is a package specification such as
15437 @code{guile@@2.0} or @code{glibc:debug} or, alternatively, a store file
15438 name as returned, for example, by @command{guix build} or @command{guix
15439 gc --list-live}.
15440
15441 When a difference is found between the hash of a locally-built item and
15442 that of a server-provided substitute, or among substitutes provided by
15443 different servers, the command displays it as in the example above and
15444 its exit code is 2 (other non-zero exit codes denote other kinds of
15445 errors).
15446
15447 The one option that matters is:
15448
15449 @table @code
15450
15451 @item --substitute-urls=@var{urls}
15452 Consider @var{urls} the whitespace-separated list of substitute source
15453 URLs to compare to.
15454
15455 @item --diff=@var{mode}
15456 Upon mismatches, show differences according to @var{mode}, one of:
15457
15458 @table @asis
15459 @item @code{simple} (the default)
15460 Show the list of files that differ.
15461
15462 @item @code{diffoscope}
15463 @itemx @var{command}
15464 Invoke @uref{https://diffoscope.org/, Diffoscope}, passing it
15465 two directories whose contents do not match.
15466
15467 When @var{command} is an absolute file name, run @var{command} instead
15468 of Diffoscope.
15469
15470 @item @code{none}
15471 Do not show further details about the differences.
15472 @end table
15473
15474 Thus, unless @option{--diff=none} is passed, @command{guix challenge}
15475 downloads the store items from the given substitute servers so that it
15476 can compare them.
15477
15478 @item --verbose
15479 @itemx -v
15480 Show details about matches (identical contents) in addition to
15481 information about mismatches.
15482
15483 @end table
15484
15485 @node Invoking guix copy
15486 @section Invoking @command{guix copy}
15487
15488 @cindex @command{guix copy}
15489 @cindex copy, of store items, over SSH
15490 @cindex SSH, copy of store items
15491 @cindex sharing store items across machines
15492 @cindex transferring store items across machines
15493 The @command{guix copy} command copies items from the store of one
15494 machine to that of another machine over a secure shell (SSH)
15495 connection@footnote{This command is available only when Guile-SSH was
15496 found. @xref{Requirements}, for details.}. For example, the following
15497 command copies the @code{coreutils} package, the user's profile, and all
15498 their dependencies over to @var{host}, logged in as @var{user}:
15499
15500 @example
15501 guix copy --to=@var{user}@@@var{host} \
15502 coreutils $(readlink -f ~/.guix-profile)
15503 @end example
15504
15505 If some of the items to be copied are already present on @var{host},
15506 they are not actually sent.
15507
15508 The command below retrieves @code{libreoffice} and @code{gimp} from
15509 @var{host}, assuming they are available there:
15510
15511 @example
15512 guix copy --from=@var{host} libreoffice gimp
15513 @end example
15514
15515 The SSH connection is established using the Guile-SSH client, which is
15516 compatible with OpenSSH: it honors @file{~/.ssh/known_hosts} and
15517 @file{~/.ssh/config}, and uses the SSH agent for authentication.
15518
15519 The key used to sign items that are sent must be accepted by the remote
15520 machine. Likewise, the key used by the remote machine to sign items you
15521 are retrieving must be in @file{/etc/guix/acl} so it is accepted by your
15522 own daemon. @xref{Invoking guix archive}, for more information about
15523 store item authentication.
15524
15525 The general syntax is:
15526
15527 @example
15528 guix copy [--to=@var{spec}|--from=@var{spec}] @var{items}@dots{}
15529 @end example
15530
15531 You must always specify one of the following options:
15532
15533 @table @code
15534 @item --to=@var{spec}
15535 @itemx --from=@var{spec}
15536 Specify the host to send to or receive from. @var{spec} must be an SSH
15537 spec such as @code{example.org}, @code{charlie@@example.org}, or
15538 @code{charlie@@example.org:2222}.
15539 @end table
15540
15541 The @var{items} can be either package names, such as @code{gimp}, or
15542 store items, such as @file{/gnu/store/@dots{}-idutils-4.6}.
15543
15544 When specifying the name of a package to send, it is first built if
15545 needed, unless @option{--dry-run} was specified. Common build options
15546 are supported (@pxref{Common Build Options}).
15547
15548
15549 @node Invoking guix container
15550 @section Invoking @command{guix container}
15551 @cindex container
15552 @cindex @command{guix container}
15553 @quotation Note
15554 As of version @value{VERSION}, this tool is experimental. The interface
15555 is subject to radical change in the future.
15556 @end quotation
15557
15558 The purpose of @command{guix container} is to manipulate processes
15559 running within an isolated environment, commonly known as a
15560 ``container'', typically created by the @command{guix shell}
15561 (@pxref{Invoking guix shell}) and @command{guix system container}
15562 (@pxref{Invoking guix system}) commands.
15563
15564 The general syntax is:
15565
15566 @example
15567 guix container @var{action} @var{options}@dots{}
15568 @end example
15569
15570 @var{action} specifies the operation to perform with a container, and
15571 @var{options} specifies the context-specific arguments for the action.
15572
15573 The following actions are available:
15574
15575 @table @code
15576 @item exec
15577 Execute a command within the context of a running container.
15578
15579 The syntax is:
15580
15581 @example
15582 guix container exec @var{pid} @var{program} @var{arguments}@dots{}
15583 @end example
15584
15585 @var{pid} specifies the process ID of the running container.
15586 @var{program} specifies an executable file name within the root file
15587 system of the container. @var{arguments} are the additional options that
15588 will be passed to @var{program}.
15589
15590 The following command launches an interactive login shell inside a
15591 Guix system container, started by @command{guix system container}, and whose
15592 process ID is 9001:
15593
15594 @example
15595 guix container exec 9001 /run/current-system/profile/bin/bash --login
15596 @end example
15597
15598 Note that the @var{pid} cannot be the parent process of a container. It
15599 must be PID 1 of the container or one of its child processes.
15600
15601 @end table
15602
15603 @node Invoking guix weather
15604 @section Invoking @command{guix weather}
15605
15606 @cindex @command{guix weather}
15607 Occasionally you're grumpy because substitutes are lacking and you end
15608 up building packages by yourself (@pxref{Substitutes}). The
15609 @command{guix weather} command reports on substitute availability on the
15610 specified servers so you can have an idea of whether you'll be grumpy
15611 today. It can sometimes be useful info as a user, but it is primarily
15612 useful to people running @command{guix publish} (@pxref{Invoking guix
15613 publish}).
15614
15615 @cindex statistics, for substitutes
15616 @cindex availability of substitutes
15617 @cindex substitute availability
15618 @cindex weather, substitute availability
15619 Here's a sample run:
15620
15621 @example
15622 $ guix weather --substitute-urls=https://guix.example.org
15623 computing 5,872 package derivations for x86_64-linux...
15624 looking for 6,128 store items on https://guix.example.org..
15625 updating substitutes from 'https://guix.example.org'... 100.0%
15626 https://guix.example.org
15627 43.4% substitutes available (2,658 out of 6,128)
15628 7,032.5 MiB of nars (compressed)
15629 19,824.2 MiB on disk (uncompressed)
15630 0.030 seconds per request (182.9 seconds in total)
15631 33.5 requests per second
15632
15633 9.8% (342 out of 3,470) of the missing items are queued
15634 867 queued builds
15635 x86_64-linux: 518 (59.7%)
15636 i686-linux: 221 (25.5%)
15637 aarch64-linux: 128 (14.8%)
15638 build rate: 23.41 builds per hour
15639 x86_64-linux: 11.16 builds per hour
15640 i686-linux: 6.03 builds per hour
15641 aarch64-linux: 6.41 builds per hour
15642 @end example
15643
15644 @cindex continuous integration, statistics
15645 As you can see, it reports the fraction of all the packages for which
15646 substitutes are available on the server---regardless of whether
15647 substitutes are enabled, and regardless of whether this server's signing
15648 key is authorized. It also reports the size of the compressed archives
15649 (``nars'') provided by the server, the size the corresponding store
15650 items occupy in the store (assuming deduplication is turned off), and
15651 the server's throughput. The second part gives continuous integration
15652 (CI) statistics, if the server supports it. In addition, using the
15653 @option{--coverage} option, @command{guix weather} can list ``important''
15654 package substitutes missing on the server (see below).
15655
15656 To achieve that, @command{guix weather} queries over HTTP(S) meta-data
15657 (@dfn{narinfos}) for all the relevant store items. Like @command{guix
15658 challenge}, it ignores signatures on those substitutes, which is
15659 innocuous since the command only gathers statistics and cannot install
15660 those substitutes.
15661
15662 The general syntax is:
15663
15664 @example
15665 guix weather @var{options}@dots{} [@var{packages}@dots{}]
15666 @end example
15667
15668 When @var{packages} is omitted, @command{guix weather} checks the availability
15669 of substitutes for @emph{all} the packages, or for those specified with
15670 @option{--manifest}; otherwise it only considers the specified packages. It
15671 is also possible to query specific system types with @option{--system}.
15672 @command{guix weather} exits with a non-zero code when the fraction of
15673 available substitutes is below 100%.
15674
15675 The available options are listed below.
15676
15677 @table @code
15678 @item --substitute-urls=@var{urls}
15679 @var{urls} is the space-separated list of substitute server URLs to
15680 query. When this option is omitted, the default set of substitute
15681 servers is queried.
15682
15683 @item --system=@var{system}
15684 @itemx -s @var{system}
15685 Query substitutes for @var{system}---e.g., @code{aarch64-linux}. This
15686 option can be repeated, in which case @command{guix weather} will query
15687 substitutes for several system types.
15688
15689 @item --manifest=@var{file}
15690 Instead of querying substitutes for all the packages, only ask for those
15691 specified in @var{file}. @var{file} must contain a @dfn{manifest}, as
15692 with the @code{-m} option of @command{guix package} (@pxref{Invoking
15693 guix package}).
15694
15695 This option can be repeated several times, in which case the manifests
15696 are concatenated.
15697
15698 @item --coverage[=@var{count}]
15699 @itemx -c [@var{count}]
15700 Report on substitute coverage for packages: list packages with at least
15701 @var{count} dependents (zero by default) for which substitutes are
15702 unavailable. Dependent packages themselves are not listed: if @var{b} depends
15703 on @var{a} and @var{a} has no substitutes, only @var{a} is listed, even though
15704 @var{b} usually lacks substitutes as well. The result looks like this:
15705
15706 @example
15707 $ guix weather --substitute-urls=@value{SUBSTITUTE-URLS} -c 10
15708 computing 8,983 package derivations for x86_64-linux...
15709 looking for 9,343 store items on @value{SUBSTITUTE-URLS}...
15710 updating substitutes from '@value{SUBSTITUTE-URLS}'... 100.0%
15711 @value{SUBSTITUTE-URLS}
15712 64.7% substitutes available (6,047 out of 9,343)
15713 @dots{}
15714 2502 packages are missing from '@value{SUBSTITUTE-URLS}' for 'x86_64-linux', among which:
15715 58 kcoreaddons@@5.49.0 /gnu/store/@dots{}-kcoreaddons-5.49.0
15716 46 qgpgme@@1.11.1 /gnu/store/@dots{}-qgpgme-1.11.1
15717 37 perl-http-cookiejar@@0.008 /gnu/store/@dots{}-perl-http-cookiejar-0.008
15718 @dots{}
15719 @end example
15720
15721 What this example shows is that @code{kcoreaddons} and presumably the 58
15722 packages that depend on it have no substitutes at
15723 @code{@value{SUBSTITUTE-SERVER-1}}; likewise for @code{qgpgme} and the 46
15724 packages that depend on it.
15725
15726 If you are a Guix developer, or if you are taking care of this build farm,
15727 you'll probably want to have a closer look at these packages: they may simply
15728 fail to build.
15729
15730 @item --display-missing
15731 Display the list of store items for which substitutes are missing.
15732 @end table
15733
15734 @node Invoking guix processes
15735 @section Invoking @command{guix processes}
15736
15737 @cindex @command{guix processes}
15738 The @command{guix processes} command can be useful to developers and system
15739 administrators, especially on multi-user machines and on build farms: it lists
15740 the current sessions (connections to the daemon), as well as information about
15741 the processes involved@footnote{Remote sessions, when @command{guix-daemon} is
15742 started with @option{--listen} specifying a TCP endpoint, are @emph{not}
15743 listed.}. Here's an example of the information it returns:
15744
15745 @example
15746 $ sudo guix processes
15747 SessionPID: 19002
15748 ClientPID: 19090
15749 ClientCommand: guix shell python
15750
15751 SessionPID: 19402
15752 ClientPID: 19367
15753 ClientCommand: guix publish -u guix-publish -p 3000 -C 9 @dots{}
15754
15755 SessionPID: 19444
15756 ClientPID: 19419
15757 ClientCommand: cuirass --cache-directory /var/cache/cuirass @dots{}
15758 LockHeld: /gnu/store/@dots{}-perl-ipc-cmd-0.96.lock
15759 LockHeld: /gnu/store/@dots{}-python-six-bootstrap-1.11.0.lock
15760 LockHeld: /gnu/store/@dots{}-libjpeg-turbo-2.0.0.lock
15761 ChildPID: 20495
15762 ChildCommand: guix offload x86_64-linux 7200 1 28800
15763 ChildPID: 27733
15764 ChildCommand: guix offload x86_64-linux 7200 1 28800
15765 ChildPID: 27793
15766 ChildCommand: guix offload x86_64-linux 7200 1 28800
15767 @end example
15768
15769 In this example we see that @command{guix-daemon} has three clients:
15770 @command{guix environment}, @command{guix publish}, and the Cuirass continuous
15771 integration tool; their process identifier (PID) is given by the
15772 @code{ClientPID} field. The @code{SessionPID} field gives the PID of the
15773 @command{guix-daemon} sub-process of this particular session.
15774
15775 The @code{LockHeld} fields show which store items are currently locked
15776 by this session, which corresponds to store items being built or
15777 substituted (the @code{LockHeld} field is not displayed when
15778 @command{guix processes} is not running as root). Last, by looking at
15779 the @code{ChildPID} and @code{ChildCommand} fields, we understand that
15780 these three builds are being offloaded (@pxref{Daemon Offload Setup}).
15781
15782 The output is in Recutils format so we can use the handy @command{recsel}
15783 command to select sessions of interest (@pxref{Selection Expressions,,,
15784 recutils, GNU recutils manual}). As an example, the command shows the command
15785 line and PID of the client that triggered the build of a Perl package:
15786
15787 @example
15788 $ sudo guix processes | \
15789 recsel -p ClientPID,ClientCommand -e 'LockHeld ~ "perl"'
15790 ClientPID: 19419
15791 ClientCommand: cuirass --cache-directory /var/cache/cuirass @dots{}
15792 @end example
15793
15794 Additional options are listed below.
15795
15796 @table @code
15797 @item --format=@var{format}
15798 @itemx -f @var{format}
15799 Produce output in the specified @var{format}, one of:
15800
15801 @table @code
15802 @item recutils
15803 The default option. It outputs a set of Session recutils records
15804 that include each @code{ChildProcess} as a field.
15805
15806 @item normalized
15807 Normalize the output records into record sets (@pxref{Record Sets,,,
15808 recutils, GNU recutils manual}). Normalizing into record sets allows
15809 joins across record types. The example below lists the PID of each
15810 @code{ChildProcess} and the associated PID for @code{Session} that
15811 spawned the @code{ChildProcess} where the @code{Session} was started
15812 using @command{guix build}.
15813
15814 @example
15815 $ guix processes --format=normalized | \
15816 recsel \
15817 -j Session \
15818 -t ChildProcess \
15819 -p Session.PID,PID \
15820 -e 'Session.ClientCommand ~ "guix build"'
15821 PID: 4435
15822 Session_PID: 4278
15823
15824 PID: 4554
15825 Session_PID: 4278
15826
15827 PID: 4646
15828 Session_PID: 4278
15829 @end example
15830 @end table
15831 @end table
15832
15833 @node Foreign Architectures
15834 @chapter Foreign Architectures
15835
15836 You can target computers of different CPU architectures when producing
15837 packages (@pxref{Invoking guix package}), packs (@pxref{Invoking guix
15838 pack}) or full systems (@pxref{Invoking guix system}).
15839
15840 GNU Guix supports two distinct mechanisms to target foreign
15841 architectures:
15842
15843 @enumerate
15844 @item
15845 The traditional
15846 @uref{https://en.wikipedia.org/wiki/Cross_compiler,cross-compilation}
15847 mechanism.
15848 @item
15849 The native building mechanism which consists in building using the CPU
15850 instruction set of the foreign system you are targeting. It often
15851 requires emulation, using the QEMU program for instance.
15852 @end enumerate
15853
15854 @menu
15855 * Cross-Compilation:: Cross-compiling for another architecture.
15856 * Native Builds:: Targeting another architecture through native builds.
15857 @end menu
15858
15859 @node Cross-Compilation
15860 @section Cross-Compilation
15861
15862 @cindex foreign architectures
15863 The commands supporting cross-compilation are proposing the
15864 @option{--list-targets} and @option{--target} options.
15865
15866 The @option{--list-targets} option lists all the supported targets that
15867 can be passed as an argument to @option{--target}.
15868
15869 @example
15870 $ guix build --list-targets
15871 The available targets are:
15872
15873 - aarch64-linux-gnu
15874 - arm-linux-gnueabihf
15875 - i586-pc-gnu
15876 - i686-linux-gnu
15877 - i686-w64-mingw32
15878 - mips64el-linux-gnu
15879 - powerpc-linux-gnu
15880 - powerpc64le-linux-gnu
15881 - riscv64-linux-gnu
15882 - x86_64-linux-gnu
15883 - x86_64-w64-mingw32
15884 @end example
15885
15886 Targets are specified as GNU triplets (@pxref{Specifying Target
15887 Triplets, GNU configuration triplets,, autoconf, Autoconf}).
15888
15889 Those triplets are passed to GCC and the other underlying compilers
15890 possibly involved when building a package, a system image or any other
15891 GNU Guix output.
15892
15893 @example
15894 $ guix build --target=aarch64-linux-gnu hello
15895 /gnu/store/9926by9qrxa91ijkhw9ndgwp4bn24g9h-hello-2.12
15896
15897 $ file /gnu/store/9926by9qrxa91ijkhw9ndgwp4bn24g9h-hello-2.12/bin/hello
15898 /gnu/store/9926by9qrxa91ijkhw9ndgwp4bn24g9h-hello-2.12/bin/hello: ELF
15899 64-bit LSB executable, ARM aarch64 @dots{}
15900 @end example
15901
15902 The major benefit of cross-compilation is that there are no performance
15903 penaly compared to emulation using QEMU. There are however higher risks
15904 that some packages fail to cross-compile because few users are using
15905 this mechanism extensively.
15906
15907 @node Native Builds
15908 @section Native Builds
15909
15910 The commands that support impersonating a specific system have the
15911 @option{--list-systems} and @option{--system} options.
15912
15913 The @option{--list-systems} option lists all the supported systems that
15914 can be passed as an argument to @option{--system}.
15915
15916 @example
15917 $ guix build --list-systems
15918 The available systems are:
15919
15920 - x86_64-linux [current]
15921 - aarch64-linux
15922 - armhf-linux
15923 - i586-gnu
15924 - i686-linux
15925 - mips64el-linux
15926 - powerpc-linux
15927 - powerpc64le-linux
15928 - riscv64-linux
15929
15930 $ guix build --system=i686-linux hello
15931 /gnu/store/cc0km35s8x2z4pmwkrqqjx46i8b1i3gm-hello-2.12
15932
15933 $ file /gnu/store/cc0km35s8x2z4pmwkrqqjx46i8b1i3gm-hello-2.12/bin/hello
15934 /gnu/store/cc0km35s8x2z4pmwkrqqjx46i8b1i3gm-hello-2.12/bin/hello: ELF
15935 32-bit LSB executable, Intel 80386 @dots{}
15936 @end example
15937
15938 In the above example, the current system is @var{x86_64-linux}. The
15939 @var{hello} package is however built for the @var{i686-linux} system.
15940
15941 This is possible because the @var{i686} CPU instruction set is a subset
15942 of the @var{x86_64}, hence @var{i686} targeting binaries can be run on
15943 @var{x86_64}.
15944
15945 Still in the context of the previous example, if picking the
15946 @var{aarch64-linux} system and the @command{guix build
15947 --system=aarch64-linux hello} has to build some derivations, an extra
15948 step might be needed.
15949
15950 The @var{aarch64-linux} targeting binaries cannot directly be run on a
15951 @var{x86_64-linux} system. An emulation layer is requested. The GNU
15952 Guix daemon can take advantage of the Linux kernel
15953 @uref{https://en.wikipedia.org/wiki/Binfmt_misc,binfmt_misc} mechanism
15954 for that. In short, the Linux kernel can defer the execution of a
15955 binary targeting a foreign platform, here @var{aarch64-linux}, to a
15956 userspace program, usually an emulator.
15957
15958 There is a service that registers QEMU as a backend for the
15959 @code{binfmt_misc} mechanism (@pxref{Virtualization Services,
15960 @code{qemu-binfmt-service-type}}). On Debian based foreign
15961 distributions, the alternative would be the @code{qemu-user-static}
15962 package.
15963
15964 If the @code{binfmt_misc} mechanism is not setup correctly, the building
15965 will fail this way:
15966
15967 @example
15968 $ guix build --system=armhf-linux hello --check
15969 @dots{}
15970 @ unsupported-platform /gnu/store/jjn969pijv7hff62025yxpfmc8zy0aq0-hello-2.12.drv aarch64-linux
15971 while setting up the build environment: a `aarch64-linux' is required to
15972 build `/gnu/store/jjn969pijv7hff62025yxpfmc8zy0aq0-hello-2.12.drv', but
15973 I am a `x86_64-linux'@dots{}
15974 @end example
15975
15976 whereas, with the @code{binfmt_misc} mechanism correctly linked with
15977 QEMU, one can expect to see:
15978
15979 @example
15980 $ guix build --system=armhf-linux hello --check
15981 /gnu/store/13xz4nghg39wpymivlwghy08yzj97hlj-hello-2.12
15982 @end example
15983
15984 The main advantage of native building compared to cross-compiling, is
15985 that more packages are likely to build correctly. However it comes at a
15986 price: compilation backed by QEMU is @emph{way slower} than
15987 cross-compilation, because every instruction needs to be emulated.
15988
15989 The availability of substitutes for the architecture targeted by the
15990 @code{--system} option can mitigate this problem. An other way to work
15991 around it is to install GNU Guix on a machine whose CPU supports
15992 the targeted instruction set, and set it up as an offload machine
15993 (@pxref{Daemon Offload Setup}).
15994
15995 @node System Configuration
15996 @chapter System Configuration
15997
15998 @cindex system configuration
15999 Guix System supports a consistent whole-system configuration
16000 mechanism. By that we mean that all aspects of the global system
16001 configuration---such as the available system services, timezone and
16002 locale settings, user accounts---are declared in a single place. Such
16003 a @dfn{system configuration} can be @dfn{instantiated}---i.e., effected.
16004
16005 One of the advantages of putting all the system configuration under the
16006 control of Guix is that it supports transactional system upgrades, and
16007 makes it possible to roll back to a previous system instantiation,
16008 should something go wrong with the new one (@pxref{Features}). Another
16009 advantage is that it makes it easy to replicate the exact same configuration
16010 across different machines, or at different points in time, without
16011 having to resort to additional administration tools layered on top of
16012 the own tools of the system.
16013 @c Yes, we're talking of Puppet, Chef, & co. here. ↑
16014
16015 This section describes this mechanism. First we focus on the system
16016 administrator's viewpoint---explaining how the system is configured and
16017 instantiated. Then we show how this mechanism can be extended, for
16018 instance to support new system services.
16019
16020 @menu
16021 * Using the Configuration System:: Customizing your GNU system.
16022 * operating-system Reference:: Detail of operating-system declarations.
16023 * File Systems:: Configuring file system mounts.
16024 * Mapped Devices:: Block device extra processing.
16025 * Swap Space:: Backing RAM with disk space.
16026 * User Accounts:: Specifying user accounts.
16027 * Keyboard Layout:: How the system interprets key strokes.
16028 * Locales:: Language and cultural convention settings.
16029 * Services:: Specifying system services.
16030 * Setuid Programs:: Programs running with elevated privileges.
16031 * X.509 Certificates:: Authenticating HTTPS servers.
16032 * Name Service Switch:: Configuring libc's name service switch.
16033 * Initial RAM Disk:: Linux-Libre bootstrapping.
16034 * Bootloader Configuration:: Configuring the boot loader.
16035 * Invoking guix system:: Instantiating a system configuration.
16036 * Invoking guix deploy:: Deploying a system configuration to a remote host.
16037 * Running Guix in a VM:: How to run Guix System in a virtual machine.
16038 * Defining Services:: Adding new service definitions.
16039 @end menu
16040
16041 @node Using the Configuration System
16042 @section Using the Configuration System
16043
16044 The operating system is configured by providing an
16045 @code{operating-system} declaration in a file that can then be passed to
16046 the @command{guix system} command (@pxref{Invoking guix system}). A
16047 simple setup, with the default system services, the default Linux-Libre
16048 kernel, initial RAM disk, and boot loader looks like this:
16049
16050 @findex operating-system
16051 @lisp
16052 @include os-config-bare-bones.texi
16053 @end lisp
16054
16055 This example should be self-describing. Some of the fields defined
16056 above, such as @code{host-name} and @code{bootloader}, are mandatory.
16057 Others, such as @code{packages} and @code{services}, can be omitted, in
16058 which case they get a default value.
16059
16060 Below we discuss the effect of some of the most important fields
16061 (@pxref{operating-system Reference}, for details about all the available
16062 fields), and how to @dfn{instantiate} the operating system using
16063 @command{guix system}.
16064
16065 @unnumberedsubsec Bootloader
16066
16067 @cindex legacy boot, on Intel machines
16068 @cindex BIOS boot, on Intel machines
16069 @cindex UEFI boot
16070 @cindex EFI boot
16071 The @code{bootloader} field describes the method that will be used to boot
16072 your system. Machines based on Intel processors can boot in ``legacy'' BIOS
16073 mode, as in the example above. However, more recent machines rely instead on
16074 the @dfn{Unified Extensible Firmware Interface} (UEFI) to boot. In that case,
16075 the @code{bootloader} field should contain something along these lines:
16076
16077 @lisp
16078 (bootloader-configuration
16079 (bootloader grub-efi-bootloader)
16080 (targets '("/boot/efi")))
16081 @end lisp
16082
16083 @xref{Bootloader Configuration}, for more information on the available
16084 configuration options.
16085
16086 @unnumberedsubsec Globally-Visible Packages
16087
16088 @vindex %base-packages
16089 The @code{packages} field lists packages that will be globally visible
16090 on the system, for all user accounts---i.e., in every user's @env{PATH}
16091 environment variable---in addition to the per-user profiles
16092 (@pxref{Invoking guix package}). The @code{%base-packages} variable
16093 provides all the tools one would expect for basic user and administrator
16094 tasks---including the GNU Core Utilities, the GNU Networking Utilities,
16095 the @command{mg} lightweight text editor, @command{find}, @command{grep},
16096 etc. The example above adds GNU@tie{}Screen to those,
16097 taken from the @code{(gnu packages screen)}
16098 module (@pxref{Package Modules}). The
16099 @code{(list package output)} syntax can be used to add a specific output
16100 of a package:
16101
16102 @lisp
16103 (use-modules (gnu packages))
16104 (use-modules (gnu packages dns))
16105
16106 (operating-system
16107 ;; ...
16108 (packages (cons (list isc-bind "utils")
16109 %base-packages)))
16110 @end lisp
16111
16112 @findex specification->package
16113 Referring to packages by variable name, like @code{isc-bind} above, has
16114 the advantage of being unambiguous; it also allows typos and such to be
16115 diagnosed right away as ``unbound variables''. The downside is that one
16116 needs to know which module defines which package, and to augment the
16117 @code{use-package-modules} line accordingly. To avoid that, one can use
16118 the @code{specification->package} procedure of the @code{(gnu packages)}
16119 module, which returns the best package for a given name or name and
16120 version:
16121
16122 @lisp
16123 (use-modules (gnu packages))
16124
16125 (operating-system
16126 ;; ...
16127 (packages (append (map specification->package
16128 '("tcpdump" "htop" "gnupg@@2.0"))
16129 %base-packages)))
16130 @end lisp
16131
16132 @unnumberedsubsec System Services
16133
16134 @cindex services
16135 @vindex %base-services
16136 The @code{services} field lists @dfn{system services} to be made
16137 available when the system starts (@pxref{Services}).
16138 The @code{operating-system} declaration above specifies that, in
16139 addition to the basic services, we want the OpenSSH secure shell
16140 daemon listening on port 2222 (@pxref{Networking Services,
16141 @code{openssh-service-type}}). Under the hood,
16142 @code{openssh-service-type} arranges so that @command{sshd} is started with the
16143 right command-line options, possibly with supporting configuration files
16144 generated as needed (@pxref{Defining Services}).
16145
16146 @cindex customization, of services
16147 @findex modify-services
16148 Occasionally, instead of using the base services as is, you will want to
16149 customize them. To do this, use @code{modify-services} (@pxref{Service
16150 Reference, @code{modify-services}}) to modify the list.
16151
16152 @anchor{auto-login to TTY} For example, suppose you want to modify
16153 @code{guix-daemon} and Mingetty (the console log-in) in the
16154 @code{%base-services} list (@pxref{Base Services,
16155 @code{%base-services}}). To do that, you can write the following in
16156 your operating system declaration:
16157
16158 @lisp
16159 (define %my-services
16160 ;; My very own list of services.
16161 (modify-services %base-services
16162 (guix-service-type config =>
16163 (guix-configuration
16164 (inherit config)
16165 ;; Fetch substitutes from example.org.
16166 (substitute-urls
16167 (list "https://example.org/guix"
16168 "https://ci.guix.gnu.org"))))
16169 (mingetty-service-type config =>
16170 (mingetty-configuration
16171 (inherit config)
16172 ;; Automatically log in as "guest".
16173 (auto-login "guest")))))
16174
16175 (operating-system
16176 ;; @dots{}
16177 (services %my-services))
16178 @end lisp
16179
16180 This changes the configuration---i.e., the service parameters---of the
16181 @code{guix-service-type} instance, and that of all the
16182 @code{mingetty-service-type} instances in the @code{%base-services} list
16183 (@pxref{Auto-Login to a Specific TTY, see the cookbook for how to
16184 auto-login one user to a specific TTY,, guix-cookbook, GNU Guix Cookbook})).
16185 Observe how this is accomplished: first, we arrange for the original
16186 configuration to be bound to the identifier @code{config} in the
16187 @var{body}, and then we write the @var{body} so that it evaluates to the
16188 desired configuration. In particular, notice how we use @code{inherit}
16189 to create a new configuration which has the same values as the old
16190 configuration, but with a few modifications.
16191
16192 @cindex encrypted disk
16193 The configuration for a typical ``desktop'' usage, with an encrypted
16194 root partition, a swap file on the root partition, the X11 display
16195 server, GNOME and Xfce (users can choose which of these desktop
16196 environments to use at the log-in screen by pressing @kbd{F1}), network
16197 management, power management, and more, would look like this:
16198
16199 @lisp
16200 @include os-config-desktop.texi
16201 @end lisp
16202
16203 A graphical system with a choice of lightweight window managers
16204 instead of full-blown desktop environments would look like this:
16205
16206 @lisp
16207 @include os-config-lightweight-desktop.texi
16208 @end lisp
16209
16210 This example refers to the @file{/boot/efi} file system by its UUID,
16211 @code{1234-ABCD}. Replace this UUID with the right UUID on your system,
16212 as returned by the @command{blkid} command.
16213
16214 @xref{Desktop Services}, for the exact list of services provided by
16215 @code{%desktop-services}. @xref{X.509 Certificates}, for background
16216 information about the @code{nss-certs} package that is used here.
16217
16218 Again, @code{%desktop-services} is just a list of service objects. If
16219 you want to remove services from there, you can do so using the
16220 procedures for list filtering (@pxref{SRFI-1 Filtering and
16221 Partitioning,,, guile, GNU Guile Reference Manual}). For instance, the
16222 following expression returns a list that contains all the services in
16223 @code{%desktop-services} minus the Avahi service:
16224
16225 @lisp
16226 (remove (lambda (service)
16227 (eq? (service-kind service) avahi-service-type))
16228 %desktop-services)
16229 @end lisp
16230
16231 Alternatively, the @code{modify-services} macro can be used:
16232
16233 @lisp
16234 (modify-services %desktop-services
16235 (delete avahi-service-type))
16236 @end lisp
16237
16238
16239 @unnumberedsubsec Instantiating the System
16240
16241 Assuming the @code{operating-system} declaration
16242 is stored in the @file{my-system-config.scm}
16243 file, the @command{guix system reconfigure my-system-config.scm} command
16244 instantiates that configuration, and makes it the default GRUB boot
16245 entry (@pxref{Invoking guix system}).
16246
16247 @quotation Note
16248 We recommend that you keep this @file{my-system-config.scm} file safe
16249 and under version control to easily track changes to your configuration.
16250 @end quotation
16251
16252 The normal way to change the system configuration is by updating this
16253 file and re-running @command{guix system reconfigure}. One should never
16254 have to touch files in @file{/etc} or to run commands that modify the
16255 system state such as @command{useradd} or @command{grub-install}. In
16256 fact, you must avoid that since that would not only void your warranty
16257 but also prevent you from rolling back to previous versions of your
16258 system, should you ever need to.
16259
16260 @cindex roll-back, of the operating system
16261 Speaking of roll-back, each time you run @command{guix system
16262 reconfigure}, a new @dfn{generation} of the system is created---without
16263 modifying or deleting previous generations. Old system generations get
16264 an entry in the bootloader boot menu, allowing you to boot them in case
16265 something went wrong with the latest generation. Reassuring, no? The
16266 @command{guix system list-generations} command lists the system
16267 generations available on disk. It is also possible to roll back the
16268 system via the commands @command{guix system roll-back} and
16269 @command{guix system switch-generation}.
16270
16271 Although the @command{guix system reconfigure} command will not modify
16272 previous generations, you must take care when the current generation is not
16273 the latest (e.g., after invoking @command{guix system roll-back}), since
16274 the operation might overwrite a later generation (@pxref{Invoking guix
16275 system}).
16276
16277 @unnumberedsubsec The Programming Interface
16278
16279 At the Scheme level, the bulk of an @code{operating-system} declaration
16280 is instantiated with the following monadic procedure (@pxref{The Store
16281 Monad}):
16282
16283 @deffn {Monadic Procedure} operating-system-derivation os
16284 Return a derivation that builds @var{os}, an @code{operating-system}
16285 object (@pxref{Derivations}).
16286
16287 The output of the derivation is a single directory that refers to all
16288 the packages, configuration files, and other supporting files needed to
16289 instantiate @var{os}.
16290 @end deffn
16291
16292 This procedure is provided by the @code{(gnu system)} module. Along
16293 with @code{(gnu services)} (@pxref{Services}), this module contains the
16294 guts of Guix System. Make sure to visit it!
16295
16296
16297 @node operating-system Reference
16298 @section @code{operating-system} Reference
16299
16300 This section summarizes all the options available in
16301 @code{operating-system} declarations (@pxref{Using the Configuration
16302 System}).
16303
16304 @deftp {Data Type} operating-system
16305 This is the data type representing an operating system configuration.
16306 By that, we mean all the global system configuration, not per-user
16307 configuration (@pxref{Using the Configuration System}).
16308
16309 @table @asis
16310 @item @code{kernel} (default: @code{linux-libre})
16311 The package object of the operating system kernel to
16312 use@footnote{Currently only the Linux-libre kernel is fully supported.
16313 Using GNU@tie{}mach with the GNU@tie{}Hurd is experimental and only
16314 available when building a virtual machine disk image.}.
16315
16316 @cindex hurd
16317 @item @code{hurd} (default: @code{#f})
16318 The package object of the Hurd to be started by the kernel. When this
16319 field is set, produce a GNU/Hurd operating system. In that case,
16320 @code{kernel} must also be set to the @code{gnumach} package---the
16321 microkernel the Hurd runs on.
16322
16323 @quotation Warning
16324 This feature is experimental and only supported for disk images.
16325 @end quotation
16326
16327 @item @code{kernel-loadable-modules} (default: '())
16328 A list of objects (usually packages) to collect loadable kernel modules
16329 from--e.g. @code{(list ddcci-driver-linux)}.
16330
16331 @item @code{kernel-arguments} (default: @code{%default-kernel-arguments})
16332 List of strings or gexps representing additional arguments to pass on
16333 the command-line of the kernel---e.g., @code{("console=ttyS0")}.
16334
16335 @item @code{bootloader}
16336 The system bootloader configuration object. @xref{Bootloader Configuration}.
16337
16338 @item @code{label}
16339 This is the label (a string) as it appears in the bootloader's menu entry.
16340 The default label includes the kernel name and version.
16341
16342 @item @code{keyboard-layout} (default: @code{#f})
16343 This field specifies the keyboard layout to use in the console. It can be
16344 either @code{#f}, in which case the default keyboard layout is used (usually
16345 US English), or a @code{<keyboard-layout>} record. @xref{Keyboard Layout},
16346 for more information.
16347
16348 This keyboard layout is in effect as soon as the kernel has booted. For
16349 instance, it is the keyboard layout in effect when you type a passphrase if
16350 your root file system is on a @code{luks-device-mapping} mapped device
16351 (@pxref{Mapped Devices}).
16352
16353 @quotation Note
16354 This does @emph{not} specify the keyboard layout used by the bootloader, nor
16355 that used by the graphical display server. @xref{Bootloader Configuration},
16356 for information on how to specify the bootloader's keyboard layout. @xref{X
16357 Window}, for information on how to specify the keyboard layout used by the X
16358 Window System.
16359 @end quotation
16360
16361 @item @code{initrd-modules} (default: @code{%base-initrd-modules})
16362 @cindex initrd
16363 @cindex initial RAM disk
16364 The list of Linux kernel modules that need to be available in the
16365 initial RAM disk. @xref{Initial RAM Disk}.
16366
16367 @item @code{initrd} (default: @code{base-initrd})
16368 A procedure that returns an initial RAM disk for the Linux
16369 kernel. This field is provided to support low-level customization and
16370 should rarely be needed for casual use. @xref{Initial RAM Disk}.
16371
16372 @item @code{firmware} (default: @code{%base-firmware})
16373 @cindex firmware
16374 List of firmware packages loadable by the operating system kernel.
16375
16376 The default includes firmware needed for Atheros- and Broadcom-based
16377 WiFi devices (Linux-libre modules @code{ath9k} and @code{b43-open},
16378 respectively). @xref{Hardware Considerations}, for more info on
16379 supported hardware.
16380
16381 @item @code{host-name}
16382 The host name.
16383
16384 @item @code{hosts-file}
16385 @cindex hosts file
16386 A file-like object (@pxref{G-Expressions, file-like objects}) for use as
16387 @file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C Library
16388 Reference Manual}). The default is a file with entries for
16389 @code{localhost} and @var{host-name}.
16390
16391 @item @code{mapped-devices} (default: @code{'()})
16392 A list of mapped devices. @xref{Mapped Devices}.
16393
16394 @item @code{file-systems}
16395 A list of file systems. @xref{File Systems}.
16396
16397 @item @code{swap-devices} (default: @code{'()})
16398 @cindex swap devices
16399 A list of swap spaces. @xref{Swap Space}.
16400
16401 @item @code{users} (default: @code{%base-user-accounts})
16402 @itemx @code{groups} (default: @code{%base-groups})
16403 List of user accounts and groups. @xref{User Accounts}.
16404
16405 If the @code{users} list lacks a user account with UID@tie{}0, a
16406 ``root'' account with UID@tie{}0 is automatically added.
16407
16408 @item @code{skeletons} (default: @code{(default-skeletons)})
16409 A list of target file name/file-like object tuples (@pxref{G-Expressions,
16410 file-like objects}). These are the skeleton files that will be added to
16411 the home directory of newly-created user accounts.
16412
16413 For instance, a valid value may look like this:
16414
16415 @lisp
16416 `((".bashrc" ,(plain-file "bashrc" "echo Hello\n"))
16417 (".guile" ,(plain-file "guile"
16418 "(use-modules (ice-9 readline))
16419 (activate-readline)")))
16420 @end lisp
16421
16422 @item @code{issue} (default: @code{%default-issue})
16423 A string denoting the contents of the @file{/etc/issue} file, which is
16424 displayed when users log in on a text console.
16425
16426 @item @code{packages} (default: @code{%base-packages})
16427 A list of packages to be installed in the global profile, which is accessible
16428 at @file{/run/current-system/profile}. Each element is either a package
16429 variable or a package/output tuple. Here's a simple example of both:
16430
16431 @lisp
16432 (cons* git ; the default "out" output
16433 (list git "send-email") ; another output of git
16434 %base-packages) ; the default set
16435 @end lisp
16436
16437 The default set includes core utilities and it is good practice to
16438 install non-core utilities in user profiles (@pxref{Invoking guix
16439 package}).
16440
16441 @item @code{timezone} (default: @code{"Etc/UTC"})
16442 A timezone identifying string---e.g., @code{"Europe/Paris"}.
16443
16444 You can run the @command{tzselect} command to find out which timezone
16445 string corresponds to your region. Choosing an invalid timezone name
16446 causes @command{guix system} to fail.
16447
16448 @item @code{locale} (default: @code{"en_US.utf8"})
16449 The name of the default locale (@pxref{Locale Names,,, libc, The GNU C
16450 Library Reference Manual}). @xref{Locales}, for more information.
16451
16452 @item @code{locale-definitions} (default: @code{%default-locale-definitions})
16453 The list of locale definitions to be compiled and that may be used at
16454 run time. @xref{Locales}.
16455
16456 @item @code{locale-libcs} (default: @code{(list @var{glibc})})
16457 The list of GNU@tie{}libc packages whose locale data and tools are used
16458 to build the locale definitions. @xref{Locales}, for compatibility
16459 considerations that justify this option.
16460
16461 @item @code{name-service-switch} (default: @code{%default-nss})
16462 Configuration of the libc name service switch (NSS)---a
16463 @code{<name-service-switch>} object. @xref{Name Service Switch}, for
16464 details.
16465
16466 @item @code{services} (default: @code{%base-services})
16467 A list of service objects denoting system services. @xref{Services}.
16468
16469 @cindex essential services
16470 @item @code{essential-services} (default: ...)
16471 The list of ``essential services''---i.e., things like instances of
16472 @code{system-service-type} and @code{host-name-service-type} (@pxref{Service
16473 Reference}), which are derived from the operating system definition itself.
16474 As a user you should @emph{never} need to touch this field.
16475
16476 @item @code{pam-services} (default: @code{(base-pam-services)})
16477 @cindex PAM
16478 @cindex pluggable authentication modules
16479 Linux @dfn{pluggable authentication module} (PAM) services.
16480 @c FIXME: Add xref to PAM services section.
16481
16482 @item @code{setuid-programs} (default: @code{%setuid-programs})
16483 List of @code{<setuid-program>}. @xref{Setuid Programs}, for more
16484 information.
16485
16486 @item @code{sudoers-file} (default: @code{%sudoers-specification})
16487 @cindex sudoers file
16488 The contents of the @file{/etc/sudoers} file as a file-like object
16489 (@pxref{G-Expressions, @code{local-file} and @code{plain-file}}).
16490
16491 This file specifies which users can use the @command{sudo} command, what
16492 they are allowed to do, and what privileges they may gain. The default
16493 is that only @code{root} and members of the @code{wheel} group may use
16494 @code{sudo}.
16495
16496 @end table
16497
16498 @deffn {Scheme Syntax} this-operating-system
16499 When used in the @emph{lexical scope} of an operating system field definition,
16500 this identifier resolves to the operating system being defined.
16501
16502 The example below shows how to refer to the operating system being defined in
16503 the definition of the @code{label} field:
16504
16505 @lisp
16506 (use-modules (gnu) (guix))
16507
16508 (operating-system
16509 ;; ...
16510 (label (package-full-name
16511 (operating-system-kernel this-operating-system))))
16512 @end lisp
16513
16514 It is an error to refer to @code{this-operating-system} outside an operating
16515 system definition.
16516 @end deffn
16517
16518 @end deftp
16519
16520 @node File Systems
16521 @section File Systems
16522
16523 The list of file systems to be mounted is specified in the
16524 @code{file-systems} field of the operating system declaration
16525 (@pxref{Using the Configuration System}). Each file system is declared
16526 using the @code{file-system} form, like this:
16527
16528 @lisp
16529 (file-system
16530 (mount-point "/home")
16531 (device "/dev/sda3")
16532 (type "ext4"))
16533 @end lisp
16534
16535 As usual, some of the fields are mandatory---those shown in the example
16536 above---while others can be omitted. These are described below.
16537
16538 @deftp {Data Type} file-system
16539 Objects of this type represent file systems to be mounted. They
16540 contain the following members:
16541
16542 @table @asis
16543 @item @code{type}
16544 This is a string specifying the type of the file system---e.g.,
16545 @code{"ext4"}.
16546
16547 @item @code{mount-point}
16548 This designates the place where the file system is to be mounted.
16549
16550 @item @code{device}
16551 This names the ``source'' of the file system. It can be one of three
16552 things: a file system label, a file system UUID, or the name of a
16553 @file{/dev} node. Labels and UUIDs offer a way to refer to file
16554 systems without having to hard-code their actual device
16555 name@footnote{Note that, while it is tempting to use
16556 @file{/dev/disk/by-uuid} and similar device names to achieve the same
16557 result, this is not recommended: These special device nodes are created
16558 by the udev daemon and may be unavailable at the time the device is
16559 mounted.}.
16560
16561 @findex file-system-label
16562 File system labels are created using the @code{file-system-label}
16563 procedure, UUIDs are created using @code{uuid}, and @file{/dev} node are
16564 plain strings. Here's an example of a file system referred to by its
16565 label, as shown by the @command{e2label} command:
16566
16567 @lisp
16568 (file-system
16569 (mount-point "/home")
16570 (type "ext4")
16571 (device (file-system-label "my-home")))
16572 @end lisp
16573
16574 @findex uuid
16575 UUIDs are converted from their string representation (as shown by the
16576 @command{tune2fs -l} command) using the @code{uuid} form@footnote{The
16577 @code{uuid} form expects 16-byte UUIDs as defined in
16578 @uref{https://tools.ietf.org/html/rfc4122, RFC@tie{}4122}. This is the
16579 form of UUID used by the ext2 family of file systems and others, but it
16580 is different from ``UUIDs'' found in FAT file systems, for instance.},
16581 like this:
16582
16583 @lisp
16584 (file-system
16585 (mount-point "/home")
16586 (type "ext4")
16587 (device (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")))
16588 @end lisp
16589
16590 When the source of a file system is a mapped device (@pxref{Mapped
16591 Devices}), its @code{device} field @emph{must} refer to the mapped
16592 device name---e.g., @file{"/dev/mapper/root-partition"}.
16593 This is required so that
16594 the system knows that mounting the file system depends on having the
16595 corresponding device mapping established.
16596
16597 @item @code{flags} (default: @code{'()})
16598 This is a list of symbols denoting mount flags. Recognized flags
16599 include @code{read-only}, @code{bind-mount}, @code{no-dev} (disallow
16600 access to special files), @code{no-suid} (ignore setuid and setgid
16601 bits), @code{no-atime} (do not update file access times),
16602 @code{no-diratime} (likewise for directories only),
16603 @code{strict-atime} (update file access time), @code{lazy-time} (only
16604 update time on the in-memory version of the file inode),
16605 @code{no-exec} (disallow program execution), and @code{shared} (make the
16606 mount shared).
16607 @xref{Mount-Unmount-Remount,,, libc, The GNU C Library Reference
16608 Manual}, for more information on these flags.
16609
16610 @item @code{options} (default: @code{#f})
16611 This is either @code{#f}, or a string denoting mount options passed to
16612 the file system driver. @xref{Mount-Unmount-Remount,,, libc, The GNU C
16613 Library Reference Manual}, for details.
16614
16615 Run @command{man 8 mount} for options for various file systems, but
16616 beware that what it lists as file-system-independent ``mount options'' are
16617 in fact flags, and belong in the @code{flags} field described above.
16618
16619 The @code{file-system-options->alist} and @code{alist->file-system-options}
16620 procedures from @code{(gnu system file-systems)} can be used to convert
16621 file system options given as an association list to the string
16622 representation, and vice-versa.
16623
16624 @item @code{mount?} (default: @code{#t})
16625 This value indicates whether to automatically mount the file system when
16626 the system is brought up. When set to @code{#f}, the file system gets
16627 an entry in @file{/etc/fstab} (read by the @command{mount} command) but
16628 is not automatically mounted.
16629
16630 @item @code{needed-for-boot?} (default: @code{#f})
16631 This Boolean value indicates whether the file system is needed when
16632 booting. If that is true, then the file system is mounted when the
16633 initial RAM disk (initrd) is loaded. This is always the case, for
16634 instance, for the root file system.
16635
16636 @item @code{check?} (default: @code{#t})
16637 This Boolean indicates whether the file system should be checked for
16638 errors before being mounted. How and when this happens can be further
16639 adjusted with the following options.
16640
16641 @item @code{skip-check-if-clean?} (default: @code{#t})
16642 When true, this Boolean indicates that a file system check triggered
16643 by @code{check?} may exit early if the file system is marked as
16644 ``clean'', meaning that it was previously correctly unmounted and
16645 should not contain errors.
16646
16647 Setting this to false will always force a full consistency check when
16648 @code{check?} is true. This may take a very long time and is not
16649 recommended on healthy systems---in fact, it may reduce reliability!
16650
16651 Conversely, some primitive file systems like @code{fat} do not keep
16652 track of clean shutdowns and will perform a full scan regardless of the
16653 value of this option.
16654
16655 @item @code{repair} (default: @code{'preen})
16656 When @code{check?} finds errors, it can (try to) repair them and
16657 continue booting. This option controls when and how to do so.
16658
16659 If false, try not to modify the file system at all. Checking certain
16660 file systems like @code{jfs} may still write to the device to replay
16661 the journal. No repairs will be attempted.
16662
16663 If @code{#t}, try to repair any errors found and assume ``yes'' to
16664 all questions. This will fix the most errors, but may be risky.
16665
16666 If @code{'preen}, repair only errors that are safe to fix without
16667 human interaction. What that means is left up to the developers of
16668 each file system and may be equivalent to ``none'' or ``all''.
16669
16670 @item @code{create-mount-point?} (default: @code{#f})
16671 When true, the mount point is created if it does not exist yet.
16672
16673 @item @code{mount-may-fail?} (default: @code{#f})
16674 When true, this indicates that mounting this file system can fail but
16675 that should not be considered an error. This is useful in unusual
16676 cases; an example of this is @code{efivarfs}, a file system that can
16677 only be mounted on EFI/UEFI systems.
16678
16679 @item @code{dependencies} (default: @code{'()})
16680 This is a list of @code{<file-system>} or @code{<mapped-device>} objects
16681 representing file systems that must be mounted or mapped devices that
16682 must be opened before (and unmounted or closed after) this one.
16683
16684 As an example, consider a hierarchy of mounts: @file{/sys/fs/cgroup} is
16685 a dependency of @file{/sys/fs/cgroup/cpu} and
16686 @file{/sys/fs/cgroup/memory}.
16687
16688 Another example is a file system that depends on a mapped device, for
16689 example for an encrypted partition (@pxref{Mapped Devices}).
16690 @end table
16691 @end deftp
16692
16693 @deffn {Scheme Procedure} file-system-label @var{str}
16694 This procedure returns an opaque file system label from @var{str}, a
16695 string:
16696
16697 @lisp
16698 (file-system-label "home")
16699 @result{} #<file-system-label "home">
16700 @end lisp
16701
16702 File system labels are used to refer to file systems by label rather
16703 than by device name. See above for examples.
16704 @end deffn
16705
16706 The @code{(gnu system file-systems)} exports the following useful
16707 variables.
16708
16709 @defvr {Scheme Variable} %base-file-systems
16710 These are essential file systems that are required on normal systems,
16711 such as @code{%pseudo-terminal-file-system} and @code{%immutable-store} (see
16712 below). Operating system declarations should always contain at least
16713 these.
16714 @end defvr
16715
16716 @defvr {Scheme Variable} %pseudo-terminal-file-system
16717 This is the file system to be mounted as @file{/dev/pts}. It supports
16718 @dfn{pseudo-terminals} created @i{via} @code{openpty} and similar
16719 functions (@pxref{Pseudo-Terminals,,, libc, The GNU C Library Reference
16720 Manual}). Pseudo-terminals are used by terminal emulators such as
16721 @command{xterm}.
16722 @end defvr
16723
16724 @defvr {Scheme Variable} %shared-memory-file-system
16725 This file system is mounted as @file{/dev/shm} and is used to support
16726 memory sharing across processes (@pxref{Memory-mapped I/O,
16727 @code{shm_open},, libc, The GNU C Library Reference Manual}).
16728 @end defvr
16729
16730 @defvr {Scheme Variable} %immutable-store
16731 This file system performs a read-only ``bind mount'' of
16732 @file{/gnu/store}, making it read-only for all the users including
16733 @code{root}. This prevents against accidental modification by software
16734 running as @code{root} or by system administrators.
16735
16736 The daemon itself is still able to write to the store: it remounts it
16737 read-write in its own ``name space.''
16738 @end defvr
16739
16740 @defvr {Scheme Variable} %binary-format-file-system
16741 The @code{binfmt_misc} file system, which allows handling of arbitrary
16742 executable file types to be delegated to user space. This requires the
16743 @code{binfmt.ko} kernel module to be loaded.
16744 @end defvr
16745
16746 @defvr {Scheme Variable} %fuse-control-file-system
16747 The @code{fusectl} file system, which allows unprivileged users to mount
16748 and unmount user-space FUSE file systems. This requires the
16749 @code{fuse.ko} kernel module to be loaded.
16750 @end defvr
16751
16752 The @code{(gnu system uuid)} module provides tools to deal with file
16753 system ``unique identifiers'' (UUIDs).
16754
16755 @deffn {Scheme Procedure} uuid @var{str} [@var{type}]
16756 Return an opaque UUID (unique identifier) object of the given @var{type}
16757 (a symbol) by parsing @var{str} (a string):
16758
16759 @lisp
16760 (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")
16761 @result{} #<<uuid> type: dce bv: @dots{}>
16762
16763 (uuid "1234-ABCD" 'fat)
16764 @result{} #<<uuid> type: fat bv: @dots{}>
16765 @end lisp
16766
16767 @var{type} may be one of @code{dce}, @code{iso9660}, @code{fat},
16768 @code{ntfs}, or one of the commonly found synonyms for these.
16769
16770 UUIDs are another way to unambiguously refer to file systems in
16771 operating system configuration. See the examples above.
16772 @end deffn
16773
16774
16775 @node Btrfs file system
16776 @subsection Btrfs file system
16777
16778 The Btrfs has special features, such as subvolumes, that merit being
16779 explained in more details. The following section attempts to cover
16780 basic as well as complex uses of a Btrfs file system with the Guix
16781 System.
16782
16783 In its simplest usage, a Btrfs file system can be described, for
16784 example, by:
16785
16786 @lisp
16787 (file-system
16788 (mount-point "/home")
16789 (type "btrfs")
16790 (device (file-system-label "my-home")))
16791 @end lisp
16792
16793 The example below is more complex, as it makes use of a Btrfs
16794 subvolume, named @code{rootfs}. The parent Btrfs file system is labeled
16795 @code{my-btrfs-pool}, and is located on an encrypted device (hence the
16796 dependency on @code{mapped-devices}):
16797
16798 @lisp
16799 (file-system
16800 (device (file-system-label "my-btrfs-pool"))
16801 (mount-point "/")
16802 (type "btrfs")
16803 (options "subvol=rootfs")
16804 (dependencies mapped-devices))
16805 @end lisp
16806
16807 Some bootloaders, for example GRUB, only mount a Btrfs partition at its
16808 top level during the early boot, and rely on their configuration to
16809 refer to the correct subvolume path within that top level. The
16810 bootloaders operating in this way typically produce their configuration
16811 on a running system where the Btrfs partitions are already mounted and
16812 where the subvolume information is readily available. As an example,
16813 @command{grub-mkconfig}, the configuration generator command shipped
16814 with GRUB, reads @file{/proc/self/mountinfo} to determine the top-level
16815 path of a subvolume.
16816
16817 The Guix System produces a bootloader configuration using the operating
16818 system configuration as its sole input; it is therefore necessary to
16819 extract the subvolume name on which @file{/gnu/store} lives (if any)
16820 from that operating system configuration. To better illustrate,
16821 consider a subvolume named 'rootfs' which contains the root file system
16822 data. In such situation, the GRUB bootloader would only see the top
16823 level of the root Btrfs partition, e.g.:
16824
16825 @example
16826 / (top level)
16827 ├── rootfs (subvolume directory)
16828 ├── gnu (normal directory)
16829 ├── store (normal directory)
16830 [...]
16831 @end example
16832
16833 Thus, the subvolume name must be prepended to the @file{/gnu/store} path
16834 of the kernel, initrd binaries and any other files referred to in the
16835 GRUB configuration that must be found during the early boot.
16836
16837 The next example shows a nested hierarchy of subvolumes and
16838 directories:
16839
16840 @example
16841 / (top level)
16842 ├── rootfs (subvolume)
16843 ├── gnu (normal directory)
16844 ├── store (subvolume)
16845 [...]
16846 @end example
16847
16848 This scenario would work without mounting the 'store' subvolume.
16849 Mounting 'rootfs' is sufficient, since the subvolume name matches its
16850 intended mount point in the file system hierarchy. Alternatively, the
16851 'store' subvolume could be referred to by setting the @code{subvol}
16852 option to either @code{/rootfs/gnu/store} or @code{rootfs/gnu/store}.
16853
16854 Finally, a more contrived example of nested subvolumes:
16855
16856 @example
16857 / (top level)
16858 ├── root-snapshots (subvolume)
16859 ├── root-current (subvolume)
16860 ├── guix-store (subvolume)
16861 [...]
16862 @end example
16863
16864 Here, the 'guix-store' subvolume doesn't match its intended mount point,
16865 so it is necessary to mount it. The subvolume must be fully specified,
16866 by passing its file name to the @code{subvol} option. To illustrate,
16867 the 'guix-store' subvolume could be mounted on @file{/gnu/store} by using
16868 a file system declaration such as:
16869
16870 @lisp
16871 (file-system
16872 (device (file-system-label "btrfs-pool-1"))
16873 (mount-point "/gnu/store")
16874 (type "btrfs")
16875 (options "subvol=root-snapshots/root-current/guix-store,\
16876 compress-force=zstd,space_cache=v2"))
16877 @end lisp
16878
16879 @node Mapped Devices
16880 @section Mapped Devices
16881
16882 @cindex device mapping
16883 @cindex mapped devices
16884 The Linux kernel has a notion of @dfn{device mapping}: a block device,
16885 such as a hard disk partition, can be @dfn{mapped} into another device,
16886 usually in @code{/dev/mapper/},
16887 with additional processing over the data that flows through
16888 it@footnote{Note that the GNU@tie{}Hurd makes no difference between the
16889 concept of a ``mapped device'' and that of a file system: both boil down
16890 to @emph{translating} input/output operations made on a file to
16891 operations on its backing store. Thus, the Hurd implements mapped
16892 devices, like file systems, using the generic @dfn{translator} mechanism
16893 (@pxref{Translators,,, hurd, The GNU Hurd Reference Manual}).}. A
16894 typical example is encryption device mapping: all writes to the mapped
16895 device are encrypted, and all reads are deciphered, transparently.
16896 Guix extends this notion by considering any device or set of devices that
16897 are @dfn{transformed} in some way to create a new device; for instance,
16898 RAID devices are obtained by @dfn{assembling} several other devices, such
16899 as hard disks or partitions, into a new one that behaves as one partition.
16900
16901 Mapped devices are declared using the @code{mapped-device} form,
16902 defined as follows; for examples, see below.
16903
16904 @deftp {Data Type} mapped-device
16905 Objects of this type represent device mappings that will be made when
16906 the system boots up.
16907
16908 @table @code
16909 @item source
16910 This is either a string specifying the name of the block device to be mapped,
16911 such as @code{"/dev/sda3"}, or a list of such strings when several devices
16912 need to be assembled for creating a new one. In case of LVM this is a
16913 string specifying name of the volume group to be mapped.
16914
16915 @item target
16916 This string specifies the name of the resulting mapped device. For
16917 kernel mappers such as encrypted devices of type @code{luks-device-mapping},
16918 specifying @code{"my-partition"} leads to the creation of
16919 the @code{"/dev/mapper/my-partition"} device.
16920 For RAID devices of type @code{raid-device-mapping}, the full device name
16921 such as @code{"/dev/md0"} needs to be given.
16922 LVM logical volumes of type @code{lvm-device-mapping} need to
16923 be specified as @code{"VGNAME-LVNAME"}.
16924
16925 @item targets
16926 This list of strings specifies names of the resulting mapped devices in case
16927 there are several. The format is identical to @var{target}.
16928
16929 @item type
16930 This must be a @code{mapped-device-kind} object, which specifies how
16931 @var{source} is mapped to @var{target}.
16932 @end table
16933 @end deftp
16934
16935 @defvr {Scheme Variable} luks-device-mapping
16936 This defines LUKS block device encryption using the @command{cryptsetup}
16937 command from the package with the same name. It relies on the
16938 @code{dm-crypt} Linux kernel module.
16939 @end defvr
16940
16941 @defvr {Scheme Variable} raid-device-mapping
16942 This defines a RAID device, which is assembled using the @code{mdadm}
16943 command from the package with the same name. It requires a Linux kernel
16944 module for the appropriate RAID level to be loaded, such as @code{raid456}
16945 for RAID-4, RAID-5 or RAID-6, or @code{raid10} for RAID-10.
16946 @end defvr
16947
16948 @cindex LVM, logical volume manager
16949 @defvr {Scheme Variable} lvm-device-mapping
16950 This defines one or more logical volumes for the Linux
16951 @uref{https://www.sourceware.org/lvm2/, Logical Volume Manager (LVM)}.
16952 The volume group is activated by the @command{vgchange} command from the
16953 @code{lvm2} package.
16954 @end defvr
16955
16956 @cindex disk encryption
16957 @cindex LUKS
16958 The following example specifies a mapping from @file{/dev/sda3} to
16959 @file{/dev/mapper/home} using LUKS---the
16960 @url{https://gitlab.com/cryptsetup/cryptsetup,Linux Unified Key Setup}, a
16961 standard mechanism for disk encryption.
16962 The @file{/dev/mapper/home}
16963 device can then be used as the @code{device} of a @code{file-system}
16964 declaration (@pxref{File Systems}).
16965
16966 @lisp
16967 (mapped-device
16968 (source "/dev/sda3")
16969 (target "home")
16970 (type luks-device-mapping))
16971 @end lisp
16972
16973 Alternatively, to become independent of device numbering, one may obtain
16974 the LUKS UUID (@dfn{unique identifier}) of the source device by a
16975 command like:
16976
16977 @example
16978 cryptsetup luksUUID /dev/sda3
16979 @end example
16980
16981 and use it as follows:
16982
16983 @lisp
16984 (mapped-device
16985 (source (uuid "cb67fc72-0d54-4c88-9d4b-b225f30b0f44"))
16986 (target "home")
16987 (type luks-device-mapping))
16988 @end lisp
16989
16990 @cindex swap encryption
16991 It is also desirable to encrypt swap space, since swap space may contain
16992 sensitive data. One way to accomplish that is to use a swap file in a
16993 file system on a device mapped via LUKS encryption. In this way, the
16994 swap file is encrypted because the entire device is encrypted.
16995 @xref{Swap Space}, or @xref{Preparing for Installation,,Disk
16996 Partitioning}, for an example.
16997
16998 A RAID device formed of the partitions @file{/dev/sda1} and @file{/dev/sdb1}
16999 may be declared as follows:
17000
17001 @lisp
17002 (mapped-device
17003 (source (list "/dev/sda1" "/dev/sdb1"))
17004 (target "/dev/md0")
17005 (type raid-device-mapping))
17006 @end lisp
17007
17008 The @file{/dev/md0} device can then be used as the @code{device} of a
17009 @code{file-system} declaration (@pxref{File Systems}).
17010 Note that the RAID level need not be given; it is chosen during the
17011 initial creation and formatting of the RAID device and is determined
17012 automatically later.
17013
17014 LVM logical volumes ``alpha'' and ``beta'' from volume group ``vg0'' can
17015 be declared as follows:
17016
17017 @lisp
17018 (mapped-device
17019 (source "vg0")
17020 (targets (list "vg0-alpha" "vg0-beta"))
17021 (type lvm-device-mapping))
17022 @end lisp
17023
17024 Devices @file{/dev/mapper/vg0-alpha} and @file{/dev/mapper/vg0-beta} can
17025 then be used as the @code{device} of a @code{file-system} declaration
17026 (@pxref{File Systems}).
17027
17028 @node Swap Space
17029 @section Swap Space
17030 @cindex swap space
17031
17032 Swap space, as it is commonly called, is a disk area specifically
17033 designated for paging: the process in charge of memory management
17034 (the Linux kernel or Hurd's default pager) can decide that some memory
17035 pages stored in RAM which belong to a running program but are unused
17036 should be stored on disk instead. It unloads those from the RAM,
17037 freeing up precious fast memory, and writes them to the swap space. If
17038 the program tries to access that very page, the memory management
17039 process loads it back into memory for the program to use.
17040
17041 A common misconception about swap is that it is only useful when small
17042 amounts of RAM are available to the system. However, it should be noted
17043 that kernels often use all available RAM for disk access caching to make
17044 I/O faster, and thus paging out unused portions of program memory will
17045 expand the RAM available for such caching.
17046
17047 For a more detailed description of how memory is managed from the
17048 viewpoint of a monolithic kernel, @xref{Memory
17049 Concepts,,, libc, The GNU C Library Reference Manual}.
17050
17051 The Linux kernel has support for swap partitions and swap files: the
17052 former uses a whole disk partition for paging, whereas the second uses a
17053 file on a file system for that (the file system driver needs to support
17054 it). On a comparable setup, both have the same performance, so one
17055 should consider ease of use when deciding between them. Partitions are
17056 ``simpler'' and do not need file system support, but need to be
17057 allocated at disk formatting time (logical volumes notwithstanding),
17058 whereas files can be allocated and deallocated at any time.
17059
17060 Note that swap space is not zeroed on shutdown, so sensitive data (such
17061 as passwords) may linger on it if it was paged out. As such, you should
17062 consider having your swap reside on an encrypted device (@pxref{Mapped
17063 Devices}).
17064
17065 @deftp {Data Type} swap-space
17066 Objects of this type represent swap spaces. They contain the following
17067 members:
17068
17069 @table @asis
17070 @item @code{target}
17071 The device or file to use, either a UUID, a @code{file-system-label} or
17072 a string, as in the definition of a @code{file-system} (@pxref{File
17073 Systems}).
17074
17075 @item @code{dependencies} (default: @code{'()})
17076 A list of @code{file-system} or @code{mapped-device} objects, upon which
17077 the availability of the space depends. Note that just like for
17078 @code{file-system} objects, dependencies which are needed for boot and
17079 mounted in early userspace are not managed by the Shepherd, and so
17080 automatically filtered out for you.
17081
17082 @item @code{priority} (default: @code{#f})
17083 Only supported by the Linux kernel. Either @code{#f} to disable swap
17084 priority, or an integer between 0 and 32767. The kernel will first use
17085 swap spaces of higher priority when paging, and use same priority spaces
17086 on a round-robin basis. The kernel will use swap spaces without a set
17087 priority after prioritized spaces, and in the order that they appeared in
17088 (not round-robin).
17089
17090 @item @code{discard?} (default: @code{#f})
17091 Only supported by the Linux kernel. When true, the kernel will notify
17092 the disk controller of discarded pages, for example with the TRIM
17093 operation on Solid State Drives.
17094
17095 @end table
17096 @end deftp
17097
17098 Here are some examples:
17099
17100 @lisp
17101 (swap-space (target (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")))
17102 @end lisp
17103
17104 Use the swap partition with the given UUID@. You can learn the UUID of a
17105 Linux swap partition by running @command{swaplabel @var{device}}, where
17106 @var{device} is the @file{/dev} file name of that partition.
17107
17108 @lisp
17109 (swap-space
17110 (target (file-system-label "swap"))
17111 (dependencies mapped-devices))
17112 @end lisp
17113
17114 Use the partition with label @code{swap}, which can be found after all
17115 the @var{mapped-devices} mapped devices have been opened. Again, the
17116 @command{swaplabel} command allows you to view and change the label of a
17117 Linux swap partition.
17118
17119 Here's a more involved example with the corresponding @code{file-systems} part
17120 of an @code{operating-system} declaration.
17121
17122 @lisp
17123 (file-systems
17124 (list (file-system
17125 (device (file-system-label "root"))
17126 (mount-point "/")
17127 (type "ext4"))
17128 (file-system
17129 (device (file-system-label "btrfs"))
17130 (mount-point "/btrfs")
17131 (type "btrfs"))))
17132
17133 (swap-devices
17134 (list
17135 (swap-space
17136 (target "/btrfs/swapfile")
17137 (dependencies (filter (file-system-mount-point-predicate "/btrfs")
17138 file-systems)))))
17139 @end lisp
17140
17141 Use the file @file{/btrfs/swapfile} as swap space, which depends on the
17142 file system mounted at @file{/btrfs}. Note how we use Guile's filter to
17143 select the file system in an elegant fashion!
17144
17145 @node User Accounts
17146 @section User Accounts
17147
17148 @cindex users
17149 @cindex accounts
17150 @cindex user accounts
17151 User accounts and groups are entirely managed through the
17152 @code{operating-system} declaration. They are specified with the
17153 @code{user-account} and @code{user-group} forms:
17154
17155 @lisp
17156 (user-account
17157 (name "alice")
17158 (group "users")
17159 (supplementary-groups '("wheel" ;allow use of sudo, etc.
17160 "audio" ;sound card
17161 "video" ;video devices such as webcams
17162 "cdrom")) ;the good ol' CD-ROM
17163 (comment "Bob's sister"))
17164 @end lisp
17165
17166 Here's a user account that uses a different shell and a custom home
17167 directory (the default would be @file{"/home/bob"}):
17168
17169 @lisp
17170 (user-account
17171 (name "bob")
17172 (group "users")
17173 (comment "Alice's bro")
17174 (shell (file-append zsh "/bin/zsh"))
17175 (home-directory "/home/robert"))
17176 @end lisp
17177
17178 When booting or upon completion of @command{guix system reconfigure},
17179 the system ensures that only the user accounts and groups specified in
17180 the @code{operating-system} declaration exist, and with the specified
17181 properties. Thus, account or group creations or modifications made by
17182 directly invoking commands such as @command{useradd} are lost upon
17183 reconfiguration or reboot. This ensures that the system remains exactly
17184 as declared.
17185
17186 @deftp {Data Type} user-account
17187 Objects of this type represent user accounts. The following members may
17188 be specified:
17189
17190 @table @asis
17191 @item @code{name}
17192 The name of the user account.
17193
17194 @item @code{group}
17195 @cindex groups
17196 This is the name (a string) or identifier (a number) of the user group
17197 this account belongs to.
17198
17199 @item @code{supplementary-groups} (default: @code{'()})
17200 Optionally, this can be defined as a list of group names that this
17201 account belongs to.
17202
17203 @item @code{uid} (default: @code{#f})
17204 This is the user ID for this account (a number), or @code{#f}. In the
17205 latter case, a number is automatically chosen by the system when the
17206 account is created.
17207
17208 @item @code{comment} (default: @code{""})
17209 A comment about the account, such as the account owner's full name.
17210
17211 Note that, for non-system accounts, users are free to change their real
17212 name as it appears in @file{/etc/passwd} using the @command{chfn}
17213 command. When they do, their choice prevails over the system
17214 administrator's choice; reconfiguring does @emph{not} change their name.
17215
17216 @item @code{home-directory}
17217 This is the name of the home directory for the account.
17218
17219 @item @code{create-home-directory?} (default: @code{#t})
17220 Indicates whether the home directory of this account should be created
17221 if it does not exist yet.
17222
17223 @item @code{shell} (default: Bash)
17224 This is a G-expression denoting the file name of a program to be used as
17225 the shell (@pxref{G-Expressions}). For example, you would refer to the
17226 Bash executable like this:
17227
17228 @lisp
17229 (file-append bash "/bin/bash")
17230 @end lisp
17231
17232 @noindent
17233 ... and to the Zsh executable like that:
17234
17235 @lisp
17236 (file-append zsh "/bin/zsh")
17237 @end lisp
17238
17239 @item @code{system?} (default: @code{#f})
17240 This Boolean value indicates whether the account is a ``system''
17241 account. System accounts are sometimes treated specially; for instance,
17242 graphical login managers do not list them.
17243
17244 @anchor{user-account-password}
17245 @cindex password, for user accounts
17246 @item @code{password} (default: @code{#f})
17247 You would normally leave this field to @code{#f}, initialize user
17248 passwords as @code{root} with the @command{passwd} command, and then let
17249 users change it with @command{passwd}. Passwords set with
17250 @command{passwd} are of course preserved across reboot and
17251 reconfiguration.
17252
17253 If you @emph{do} want to set an initial password for an account, then
17254 this field must contain the encrypted password, as a string. You can use the
17255 @code{crypt} procedure for this purpose:
17256
17257 @lisp
17258 (user-account
17259 (name "charlie")
17260 (group "users")
17261
17262 ;; Specify a SHA-512-hashed initial password.
17263 (password (crypt "InitialPassword!" "$6$abc")))
17264 @end lisp
17265
17266 @quotation Note
17267 The hash of this initial password will be available in a file in
17268 @file{/gnu/store}, readable by all the users, so this method must be used with
17269 care.
17270 @end quotation
17271
17272 @xref{Passphrase Storage,,, libc, The GNU C Library Reference Manual}, for
17273 more information on password encryption, and @ref{Encryption,,, guile, GNU
17274 Guile Reference Manual}, for information on Guile's @code{crypt} procedure.
17275
17276 @end table
17277 @end deftp
17278
17279 @cindex groups
17280 User group declarations are even simpler:
17281
17282 @lisp
17283 (user-group (name "students"))
17284 @end lisp
17285
17286 @deftp {Data Type} user-group
17287 This type is for, well, user groups. There are just a few fields:
17288
17289 @table @asis
17290 @item @code{name}
17291 The name of the group.
17292
17293 @item @code{id} (default: @code{#f})
17294 The group identifier (a number). If @code{#f}, a new number is
17295 automatically allocated when the group is created.
17296
17297 @item @code{system?} (default: @code{#f})
17298 This Boolean value indicates whether the group is a ``system'' group.
17299 System groups have low numerical IDs.
17300
17301 @item @code{password} (default: @code{#f})
17302 What, user groups can have a password? Well, apparently yes. Unless
17303 @code{#f}, this field specifies the password of the group.
17304
17305 @end table
17306 @end deftp
17307
17308 For convenience, a variable lists all the basic user groups one may
17309 expect:
17310
17311 @defvr {Scheme Variable} %base-groups
17312 This is the list of basic user groups that users and/or packages expect
17313 to be present on the system. This includes groups such as ``root'',
17314 ``wheel'', and ``users'', as well as groups used to control access to
17315 specific devices such as ``audio'', ``disk'', and ``cdrom''.
17316 @end defvr
17317
17318 @defvr {Scheme Variable} %base-user-accounts
17319 This is the list of basic system accounts that programs may expect to
17320 find on a GNU/Linux system, such as the ``nobody'' account.
17321
17322 Note that the ``root'' account is not included here. It is a
17323 special-case and is automatically added whether or not it is specified.
17324 @end defvr
17325
17326 @node Keyboard Layout
17327 @section Keyboard Layout
17328
17329 @cindex keyboard layout
17330 @cindex keymap
17331 To specify what each key of your keyboard does, you need to tell the operating
17332 system what @dfn{keyboard layout} you want to use. The default, when nothing
17333 is specified, is the US English QWERTY layout for 105-key PC keyboards.
17334 However, German speakers will usually prefer the German QWERTZ layout, French
17335 speakers will want the AZERTY layout, and so on; hackers might prefer Dvorak
17336 or bépo, and they might even want to further customize the effect of some of
17337 the keys. This section explains how to get that done.
17338
17339 @cindex keyboard layout, definition
17340 There are three components that will want to know about your keyboard layout:
17341
17342 @itemize
17343 @item
17344 The @emph{bootloader} may want to know what keyboard layout you want to use
17345 (@pxref{Bootloader Configuration, @code{keyboard-layout}}). This is useful if
17346 you want, for instance, to make sure that you can type the passphrase of your
17347 encrypted root partition using the right layout.
17348
17349 @item
17350 The @emph{operating system kernel}, Linux, will need that so that the console
17351 is properly configured (@pxref{operating-system Reference,
17352 @code{keyboard-layout}}).
17353
17354 @item
17355 The @emph{graphical display server}, usually Xorg, also has its own idea of
17356 the keyboard layout (@pxref{X Window, @code{keyboard-layout}}).
17357 @end itemize
17358
17359 Guix allows you to configure all three separately but, fortunately, it allows
17360 you to share the same keyboard layout for all three components.
17361
17362 @cindex XKB, keyboard layouts
17363 Keyboard layouts are represented by records created by the
17364 @code{keyboard-layout} procedure of @code{(gnu system keyboard)}. Following
17365 the X Keyboard extension (XKB), each layout has four attributes: a name (often
17366 a language code such as ``fi'' for Finnish or ``jp'' for Japanese), an
17367 optional variant name, an optional keyboard model name, and a possibly empty
17368 list of additional options. In most cases the layout name is all you care
17369 about.
17370
17371 @deffn {Scheme Procedure} keyboard-layout @var{name} [@var{variant}] @
17372 [#:model] [#:options '()]
17373 Return a new keyboard layout with the given @var{name} and @var{variant}.
17374
17375 @var{name} must be a string such as @code{"fr"}; @var{variant} must be a
17376 string such as @code{"bepo"} or @code{"nodeadkeys"}. See the
17377 @code{xkeyboard-config} package for valid options.
17378 @end deffn
17379
17380 Here are a few examples:
17381
17382 @lisp
17383 ;; The German QWERTZ layout. Here we assume a standard
17384 ;; "pc105" keyboard model.
17385 (keyboard-layout "de")
17386
17387 ;; The bépo variant of the French layout.
17388 (keyboard-layout "fr" "bepo")
17389
17390 ;; The Catalan layout.
17391 (keyboard-layout "es" "cat")
17392
17393 ;; Arabic layout with "Alt-Shift" to switch to US layout.
17394 (keyboard-layout "ar,us" #:options '("grp:alt_shift_toggle"))
17395
17396 ;; The Latin American Spanish layout. In addition, the
17397 ;; "Caps Lock" key is used as an additional "Ctrl" key,
17398 ;; and the "Menu" key is used as a "Compose" key to enter
17399 ;; accented letters.
17400 (keyboard-layout "latam"
17401 #:options '("ctrl:nocaps" "compose:menu"))
17402
17403 ;; The Russian layout for a ThinkPad keyboard.
17404 (keyboard-layout "ru" #:model "thinkpad")
17405
17406 ;; The "US international" layout, which is the US layout plus
17407 ;; dead keys to enter accented characters. This is for an
17408 ;; Apple MacBook keyboard.
17409 (keyboard-layout "us" "intl" #:model "macbook78")
17410 @end lisp
17411
17412 See the @file{share/X11/xkb} directory of the @code{xkeyboard-config} package
17413 for a complete list of supported layouts, variants, and models.
17414
17415 @cindex keyboard layout, configuration
17416 Let's say you want your system to use the Turkish keyboard layout throughout
17417 your system---bootloader, console, and Xorg. Here's what your system
17418 configuration would look like:
17419
17420 @findex set-xorg-configuration
17421 @lisp
17422 ;; Using the Turkish layout for the bootloader, the console,
17423 ;; and for Xorg.
17424
17425 (operating-system
17426 ;; ...
17427 (keyboard-layout (keyboard-layout "tr")) ;for the console
17428 (bootloader (bootloader-configuration
17429 (bootloader grub-efi-bootloader)
17430 (targets '("/boot/efi"))
17431 (keyboard-layout keyboard-layout))) ;for GRUB
17432 (services (cons (set-xorg-configuration
17433 (xorg-configuration ;for Xorg
17434 (keyboard-layout keyboard-layout)))
17435 %desktop-services)))
17436 @end lisp
17437
17438 In the example above, for GRUB and for Xorg, we just refer to the
17439 @code{keyboard-layout} field defined above, but we could just as well refer to
17440 a different layout. The @code{set-xorg-configuration} procedure communicates
17441 the desired Xorg configuration to the graphical log-in manager, by default
17442 GDM.
17443
17444 We've discussed how to specify the @emph{default} keyboard layout of your
17445 system when it starts, but you can also adjust it at run time:
17446
17447 @itemize
17448 @item
17449 If you're using GNOME, its settings panel has a ``Region & Language'' entry
17450 where you can select one or more keyboard layouts.
17451
17452 @item
17453 Under Xorg, the @command{setxkbmap} command (from the same-named package)
17454 allows you to change the current layout. For example, this is how you would
17455 change the layout to US Dvorak:
17456
17457 @example
17458 setxkbmap us dvorak
17459 @end example
17460
17461 @item
17462 The @code{loadkeys} command changes the keyboard layout in effect in the Linux
17463 console. However, note that @code{loadkeys} does @emph{not} use the XKB
17464 keyboard layout categorization described above. The command below loads the
17465 French bépo layout:
17466
17467 @example
17468 loadkeys fr-bepo
17469 @end example
17470 @end itemize
17471
17472 @node Locales
17473 @section Locales
17474
17475 @cindex locale
17476 A @dfn{locale} defines cultural conventions for a particular language
17477 and region of the world (@pxref{Locales,,, libc, The GNU C Library
17478 Reference Manual}). Each locale has a name that typically has the form
17479 @code{@var{language}_@var{territory}.@var{codeset}}---e.g.,
17480 @code{fr_LU.utf8} designates the locale for the French language, with
17481 cultural conventions from Luxembourg, and using the UTF-8 encoding.
17482
17483 @cindex locale definition
17484 Usually, you will want to specify the default locale for the machine
17485 using the @code{locale} field of the @code{operating-system} declaration
17486 (@pxref{operating-system Reference, @code{locale}}).
17487
17488 The selected locale is automatically added to the @dfn{locale
17489 definitions} known to the system if needed, with its codeset inferred
17490 from its name---e.g., @code{bo_CN.utf8} will be assumed to use the
17491 @code{UTF-8} codeset. Additional locale definitions can be specified in
17492 the @code{locale-definitions} slot of @code{operating-system}---this is
17493 useful, for instance, if the codeset could not be inferred from the
17494 locale name. The default set of locale definitions includes some widely
17495 used locales, but not all the available locales, in order to save space.
17496
17497 For instance, to add the North Frisian locale for Germany, the value of
17498 that field may be:
17499
17500 @lisp
17501 (cons (locale-definition
17502 (name "fy_DE.utf8") (source "fy_DE"))
17503 %default-locale-definitions)
17504 @end lisp
17505
17506 Likewise, to save space, one might want @code{locale-definitions} to
17507 list only the locales that are actually used, as in:
17508
17509 @lisp
17510 (list (locale-definition
17511 (name "ja_JP.eucjp") (source "ja_JP")
17512 (charset "EUC-JP")))
17513 @end lisp
17514
17515 @vindex LOCPATH
17516 The compiled locale definitions are available at
17517 @file{/run/current-system/locale/X.Y}, where @code{X.Y} is the libc
17518 version, which is the default location where the GNU@tie{}libc provided
17519 by Guix looks for locale data. This can be overridden using the
17520 @env{LOCPATH} environment variable (@pxref{locales-and-locpath,
17521 @env{LOCPATH} and locale packages}).
17522
17523 The @code{locale-definition} form is provided by the @code{(gnu system
17524 locale)} module. Details are given below.
17525
17526 @deftp {Data Type} locale-definition
17527 This is the data type of a locale definition.
17528
17529 @table @asis
17530
17531 @item @code{name}
17532 The name of the locale. @xref{Locale Names,,, libc, The GNU C Library
17533 Reference Manual}, for more information on locale names.
17534
17535 @item @code{source}
17536 The name of the source for that locale. This is typically the
17537 @code{@var{language}_@var{territory}} part of the locale name.
17538
17539 @item @code{charset} (default: @code{"UTF-8"})
17540 The ``character set'' or ``code set'' for that locale,
17541 @uref{https://www.iana.org/assignments/character-sets, as defined by
17542 IANA}.
17543
17544 @end table
17545 @end deftp
17546
17547 @defvr {Scheme Variable} %default-locale-definitions
17548 A list of commonly used UTF-8 locales, used as the default
17549 value of the @code{locale-definitions} field of @code{operating-system}
17550 declarations.
17551
17552 @cindex locale name
17553 @cindex normalized codeset in locale names
17554 These locale definitions use the @dfn{normalized codeset} for the part
17555 that follows the dot in the name (@pxref{Using gettextized software,
17556 normalized codeset,, libc, The GNU C Library Reference Manual}). So for
17557 instance it has @code{uk_UA.utf8} but @emph{not}, say,
17558 @code{uk_UA.UTF-8}.
17559 @end defvr
17560
17561 @subsection Locale Data Compatibility Considerations
17562
17563 @cindex incompatibility, of locale data
17564 @code{operating-system} declarations provide a @code{locale-libcs} field
17565 to specify the GNU@tie{}libc packages that are used to compile locale
17566 declarations (@pxref{operating-system Reference}). ``Why would I
17567 care?'', you may ask. Well, it turns out that the binary format of
17568 locale data is occasionally incompatible from one libc version to
17569 another.
17570
17571 @c See <https://sourceware.org/ml/libc-alpha/2015-09/msg00575.html>
17572 @c and <https://lists.gnu.org/archive/html/guix-devel/2015-08/msg00737.html>.
17573 For instance, a program linked against libc version 2.21 is unable to
17574 read locale data produced with libc 2.22; worse, that program
17575 @emph{aborts} instead of simply ignoring the incompatible locale
17576 data@footnote{Versions 2.23 and later of GNU@tie{}libc will simply skip
17577 the incompatible locale data, which is already an improvement.}.
17578 Similarly, a program linked against libc 2.22 can read most, but not
17579 all, of the locale data from libc 2.21 (specifically, @env{LC_COLLATE}
17580 data is incompatible); thus calls to @code{setlocale} may fail, but
17581 programs will not abort.
17582
17583 The ``problem'' with Guix is that users have a lot of freedom: They can
17584 choose whether and when to upgrade software in their profiles, and might
17585 be using a libc version different from the one the system administrator
17586 used to build the system-wide locale data.
17587
17588 Fortunately, unprivileged users can also install their own locale data
17589 and define @env{GUIX_LOCPATH} accordingly (@pxref{locales-and-locpath,
17590 @env{GUIX_LOCPATH} and locale packages}).
17591
17592 Still, it is best if the system-wide locale data at
17593 @file{/run/current-system/locale} is built for all the libc versions
17594 actually in use on the system, so that all the programs can access
17595 it---this is especially crucial on a multi-user system. To do that, the
17596 administrator can specify several libc packages in the
17597 @code{locale-libcs} field of @code{operating-system}:
17598
17599 @lisp
17600 (use-package-modules base)
17601
17602 (operating-system
17603 ;; @dots{}
17604 (locale-libcs (list glibc-2.21 (canonical-package glibc))))
17605 @end lisp
17606
17607 This example would lead to a system containing locale definitions for
17608 both libc 2.21 and the current version of libc in
17609 @file{/run/current-system/locale}.
17610
17611
17612 @node Services
17613 @section Services
17614
17615 @cindex system services
17616 An important part of preparing an @code{operating-system} declaration is
17617 listing @dfn{system services} and their configuration (@pxref{Using the
17618 Configuration System}). System services are typically daemons launched
17619 when the system boots, or other actions needed at that time---e.g.,
17620 configuring network access.
17621
17622 Guix has a broad definition of ``service'' (@pxref{Service
17623 Composition}), but many services are managed by the GNU@tie{}Shepherd
17624 (@pxref{Shepherd Services}). On a running system, the @command{herd}
17625 command allows you to list the available services, show their status,
17626 start and stop them, or do other specific operations (@pxref{Jump
17627 Start,,, shepherd, The GNU Shepherd Manual}). For example:
17628
17629 @example
17630 # herd status
17631 @end example
17632
17633 The above command, run as @code{root}, lists the currently defined
17634 services. The @command{herd doc} command shows a synopsis of the given
17635 service and its associated actions:
17636
17637 @example
17638 # herd doc nscd
17639 Run libc's name service cache daemon (nscd).
17640
17641 # herd doc nscd action invalidate
17642 invalidate: Invalidate the given cache--e.g., 'hosts' for host name lookups.
17643 @end example
17644
17645 The @command{start}, @command{stop}, and @command{restart} sub-commands
17646 have the effect you would expect. For instance, the commands below stop
17647 the nscd service and restart the Xorg display server:
17648
17649 @example
17650 # herd stop nscd
17651 Service nscd has been stopped.
17652 # herd restart xorg-server
17653 Service xorg-server has been stopped.
17654 Service xorg-server has been started.
17655 @end example
17656
17657 The following sections document the available services, starting with
17658 the core services, that may be used in an @code{operating-system}
17659 declaration.
17660
17661 @menu
17662 * Base Services:: Essential system services.
17663 * Scheduled Job Execution:: The mcron service.
17664 * Log Rotation:: The rottlog service.
17665 * Networking Setup:: Setting up network interfaces.
17666 * Networking Services:: Firewall, SSH daemon, etc.
17667 * Unattended Upgrades:: Automated system upgrades.
17668 * X Window:: Graphical display.
17669 * Printing Services:: Local and remote printer support.
17670 * Desktop Services:: D-Bus and desktop services.
17671 * Sound Services:: ALSA and Pulseaudio services.
17672 * Database Services:: SQL databases, key-value stores, etc.
17673 * Mail Services:: IMAP, POP3, SMTP, and all that.
17674 * Messaging Services:: Messaging services.
17675 * Telephony Services:: Telephony services.
17676 * File-Sharing Services:: File-sharing services.
17677 * Monitoring Services:: Monitoring services.
17678 * Kerberos Services:: Kerberos services.
17679 * LDAP Services:: LDAP services.
17680 * Web Services:: Web servers.
17681 * Certificate Services:: TLS certificates via Let's Encrypt.
17682 * DNS Services:: DNS daemons.
17683 * VNC Services:: VNC daemons.
17684 * VPN Services:: VPN daemons.
17685 * Network File System:: NFS related services.
17686 * Samba Services:: Samba services.
17687 * Continuous Integration:: Cuirass and Laminar services.
17688 * Power Management Services:: Extending battery life.
17689 * Audio Services:: The MPD.
17690 * Virtualization Services:: Virtualization services.
17691 * Version Control Services:: Providing remote access to Git repositories.
17692 * Game Services:: Game servers.
17693 * PAM Mount Service:: Service to mount volumes when logging in.
17694 * Guix Services:: Services relating specifically to Guix.
17695 * Linux Services:: Services tied to the Linux kernel.
17696 * Hurd Services:: Services specific for a Hurd System.
17697 * Miscellaneous Services:: Other services.
17698 @end menu
17699
17700 @node Base Services
17701 @subsection Base Services
17702
17703 The @code{(gnu services base)} module provides definitions for the basic
17704 services that one expects from the system. The services exported by
17705 this module are listed below.
17706
17707 @defvr {Scheme Variable} %base-services
17708 This variable contains a list of basic services (@pxref{Service Types
17709 and Services}, for more information on service objects) one would
17710 expect from the system: a login service (mingetty) on each tty, syslogd,
17711 the libc name service cache daemon (nscd), the udev device manager, and
17712 more.
17713
17714 This is the default value of the @code{services} field of
17715 @code{operating-system} declarations. Usually, when customizing a
17716 system, you will want to append services to @code{%base-services}, like
17717 this:
17718
17719 @lisp
17720 (append (list (service avahi-service-type)
17721 (service openssh-service-type))
17722 %base-services)
17723 @end lisp
17724 @end defvr
17725
17726 @defvr {Scheme Variable} special-files-service-type
17727 This is the service that sets up ``special files'' such as
17728 @file{/bin/sh}; an instance of it is part of @code{%base-services}.
17729
17730 The value associated with @code{special-files-service-type} services
17731 must be a list of tuples where the first element is the ``special file''
17732 and the second element is its target. By default it is:
17733
17734 @cindex @file{/bin/sh}
17735 @cindex @file{sh}, in @file{/bin}
17736 @lisp
17737 `(("/bin/sh" ,(file-append bash "/bin/sh"))
17738 ("/usr/bin/env" ,(file-append coreutils "/bin/env")))
17739 @end lisp
17740
17741 @cindex @file{/usr/bin/env}
17742 @cindex @file{env}, in @file{/usr/bin}
17743 If you want to add, say, @code{/bin/bash} to your system, you can
17744 change it to:
17745
17746 @lisp
17747 `(("/bin/sh" ,(file-append bash "/bin/sh"))
17748 ("/usr/bin/env" ,(file-append coreutils "/bin/env"))
17749 ("/bin/bash" ,(file-append bash "/bin/bash")))
17750 @end lisp
17751
17752 Since this is part of @code{%base-services}, you can use
17753 @code{modify-services} to customize the set of special files
17754 (@pxref{Service Reference, @code{modify-services}}). But the simple way
17755 to add a special file is @i{via} the @code{extra-special-file} procedure
17756 (see below).
17757 @end defvr
17758
17759 @deffn {Scheme Procedure} extra-special-file @var{file} @var{target}
17760 Use @var{target} as the ``special file'' @var{file}.
17761
17762 For example, adding the following lines to the @code{services} field of
17763 your operating system declaration leads to a @file{/usr/bin/env}
17764 symlink:
17765
17766 @lisp
17767 (extra-special-file "/usr/bin/env"
17768 (file-append coreutils "/bin/env"))
17769 @end lisp
17770 @end deffn
17771
17772 @deffn {Scheme Procedure} host-name-service @var{name}
17773 Return a service that sets the host name to @var{name}.
17774 @end deffn
17775
17776 @defvr {Scheme Variable} console-font-service-type
17777 Install the given fonts on the specified ttys (fonts are per
17778 virtual console on the kernel Linux). The value of this service is a list of
17779 tty/font pairs. The font can be the name of a font provided by the @code{kbd}
17780 package or any valid argument to @command{setfont}, as in this example:
17781
17782 @lisp
17783 `(("tty1" . "LatGrkCyr-8x16")
17784 ("tty2" . ,(file-append
17785 font-tamzen
17786 "/share/kbd/consolefonts/TamzenForPowerline10x20.psf"))
17787 ("tty3" . ,(file-append
17788 font-terminus
17789 "/share/consolefonts/ter-132n"))) ; for HDPI
17790 @end lisp
17791 @end defvr
17792
17793 @deffn {Scheme Procedure} login-service @var{config}
17794 Return a service to run login according to @var{config}, a
17795 @code{<login-configuration>} object, which specifies the message of the day,
17796 among other things.
17797 @end deffn
17798
17799 @deftp {Data Type} login-configuration
17800 This is the data type representing the configuration of login.
17801
17802 @table @asis
17803
17804 @item @code{motd}
17805 @cindex message of the day
17806 A file-like object containing the ``message of the day''.
17807
17808 @item @code{allow-empty-passwords?} (default: @code{#t})
17809 Allow empty passwords by default so that first-time users can log in when
17810 the 'root' account has just been created.
17811
17812 @end table
17813 @end deftp
17814
17815 @deffn {Scheme Procedure} mingetty-service @var{config}
17816 Return a service to run mingetty according to @var{config}, a
17817 @code{<mingetty-configuration>} object, which specifies the tty to run, among
17818 other things.
17819 @end deffn
17820
17821 @deftp {Data Type} mingetty-configuration
17822 This is the data type representing the configuration of Mingetty, which
17823 provides the default implementation of virtual console log-in.
17824
17825 @table @asis
17826
17827 @item @code{tty}
17828 The name of the console this Mingetty runs on---e.g., @code{"tty1"}.
17829
17830 @item @code{auto-login} (default: @code{#f})
17831 When true, this field must be a string denoting the user name under
17832 which the system automatically logs in. When it is @code{#f}, a
17833 user name and password must be entered to log in.
17834
17835 @item @code{login-program} (default: @code{#f})
17836 This must be either @code{#f}, in which case the default log-in program
17837 is used (@command{login} from the Shadow tool suite), or a gexp denoting
17838 the name of the log-in program.
17839
17840 @item @code{login-pause?} (default: @code{#f})
17841 When set to @code{#t} in conjunction with @var{auto-login}, the user
17842 will have to press a key before the log-in shell is launched.
17843
17844 @item @code{clear-on-logout?} (default: @code{#t})
17845 When set to @code{#t}, the screen will be cleared after logout.
17846
17847 @item @code{mingetty} (default: @var{mingetty})
17848 The Mingetty package to use.
17849
17850 @end table
17851 @end deftp
17852
17853 @deffn {Scheme Procedure} agetty-service @var{config}
17854 Return a service to run agetty according to @var{config}, an
17855 @code{<agetty-configuration>} object, which specifies the tty to run,
17856 among other things.
17857 @end deffn
17858
17859 @deftp {Data Type} agetty-configuration
17860 This is the data type representing the configuration of agetty, which
17861 implements virtual and serial console log-in. See the @code{agetty(8)}
17862 man page for more information.
17863
17864 @table @asis
17865
17866 @item @code{tty}
17867 The name of the console this agetty runs on, as a string---e.g.,
17868 @code{"ttyS0"}. This argument is optional, it will default to
17869 a reasonable default serial port used by the kernel Linux.
17870
17871 For this, if there is a value for an option @code{agetty.tty} in the kernel
17872 command line, agetty will extract the device name of the serial port
17873 from it and use that.
17874
17875 If not and if there is a value for an option @code{console} with a tty in
17876 the Linux command line, agetty will extract the device name of the
17877 serial port from it and use that.
17878
17879 In both cases, agetty will leave the other serial device settings
17880 (baud rate etc.)@: alone---in the hope that Linux pinned them to the
17881 correct values.
17882
17883 @item @code{baud-rate} (default: @code{#f})
17884 A string containing a comma-separated list of one or more baud rates, in
17885 descending order.
17886
17887 @item @code{term} (default: @code{#f})
17888 A string containing the value used for the @env{TERM} environment
17889 variable.
17890
17891 @item @code{eight-bits?} (default: @code{#f})
17892 When @code{#t}, the tty is assumed to be 8-bit clean, and parity detection is
17893 disabled.
17894
17895 @item @code{auto-login} (default: @code{#f})
17896 When passed a login name, as a string, the specified user will be logged
17897 in automatically without prompting for their login name or password.
17898
17899 @item @code{no-reset?} (default: @code{#f})
17900 When @code{#t}, don't reset terminal cflags (control modes).
17901
17902 @item @code{host} (default: @code{#f})
17903 This accepts a string containing the ``login_host'', which will be written
17904 into the @file{/var/run/utmpx} file.
17905
17906 @item @code{remote?} (default: @code{#f})
17907 When set to @code{#t} in conjunction with @var{host}, this will add an
17908 @code{-r} fakehost option to the command line of the login program
17909 specified in @var{login-program}.
17910
17911 @item @code{flow-control?} (default: @code{#f})
17912 When set to @code{#t}, enable hardware (RTS/CTS) flow control.
17913
17914 @item @code{no-issue?} (default: @code{#f})
17915 When set to @code{#t}, the contents of the @file{/etc/issue} file will
17916 not be displayed before presenting the login prompt.
17917
17918 @item @code{init-string} (default: @code{#f})
17919 This accepts a string that will be sent to the tty or modem before
17920 sending anything else. It can be used to initialize a modem.
17921
17922 @item @code{no-clear?} (default: @code{#f})
17923 When set to @code{#t}, agetty will not clear the screen before showing
17924 the login prompt.
17925
17926 @item @code{login-program} (default: (file-append shadow "/bin/login"))
17927 This must be either a gexp denoting the name of a log-in program, or
17928 unset, in which case the default value is the @command{login} from the
17929 Shadow tool suite.
17930
17931 @item @code{local-line} (default: @code{#f})
17932 Control the CLOCAL line flag. This accepts one of three symbols as
17933 arguments, @code{'auto}, @code{'always}, or @code{'never}. If @code{#f},
17934 the default value chosen by agetty is @code{'auto}.
17935
17936 @item @code{extract-baud?} (default: @code{#f})
17937 When set to @code{#t}, instruct agetty to try to extract the baud rate
17938 from the status messages produced by certain types of modems.
17939
17940 @item @code{skip-login?} (default: @code{#f})
17941 When set to @code{#t}, do not prompt the user for a login name. This
17942 can be used with @var{login-program} field to use non-standard login
17943 systems.
17944
17945 @item @code{no-newline?} (default: @code{#f})
17946 When set to @code{#t}, do not print a newline before printing the
17947 @file{/etc/issue} file.
17948
17949 @c Is this dangerous only when used with login-program, or always?
17950 @item @code{login-options} (default: @code{#f})
17951 This option accepts a string containing options that are passed to the
17952 login program. When used with the @var{login-program}, be aware that a
17953 malicious user could try to enter a login name containing embedded
17954 options that could be parsed by the login program.
17955
17956 @item @code{login-pause} (default: @code{#f})
17957 When set to @code{#t}, wait for any key before showing the login prompt.
17958 This can be used in conjunction with @var{auto-login} to save memory by
17959 lazily spawning shells.
17960
17961 @item @code{chroot} (default: @code{#f})
17962 Change root to the specified directory. This option accepts a directory
17963 path as a string.
17964
17965 @item @code{hangup?} (default: @code{#f})
17966 Use the Linux system call @code{vhangup} to do a virtual hangup of the
17967 specified terminal.
17968
17969 @item @code{keep-baud?} (default: @code{#f})
17970 When set to @code{#t}, try to keep the existing baud rate. The baud
17971 rates from @var{baud-rate} are used when agetty receives a @key{BREAK}
17972 character.
17973
17974 @item @code{timeout} (default: @code{#f})
17975 When set to an integer value, terminate if no user name could be read
17976 within @var{timeout} seconds.
17977
17978 @item @code{detect-case?} (default: @code{#f})
17979 When set to @code{#t}, turn on support for detecting an uppercase-only
17980 terminal. This setting will detect a login name containing only
17981 uppercase letters as indicating an uppercase-only terminal and turn on
17982 some upper-to-lower case conversions. Note that this will not support
17983 Unicode characters.
17984
17985 @item @code{wait-cr?} (default: @code{#f})
17986 When set to @code{#t}, wait for the user or modem to send a
17987 carriage-return or linefeed character before displaying
17988 @file{/etc/issue} or login prompt. This is typically used with the
17989 @var{init-string} option.
17990
17991 @item @code{no-hints?} (default: @code{#f})
17992 When set to @code{#t}, do not print hints about Num, Caps, and Scroll
17993 locks.
17994
17995 @item @code{no-hostname?} (default: @code{#f})
17996 By default, the hostname is printed. When this option is set to
17997 @code{#t}, no hostname will be shown at all.
17998
17999 @item @code{long-hostname?} (default: @code{#f})
18000 By default, the hostname is only printed until the first dot. When this
18001 option is set to @code{#t}, the fully qualified hostname by
18002 @code{gethostname} or @code{getaddrinfo} is shown.
18003
18004 @item @code{erase-characters} (default: @code{#f})
18005 This option accepts a string of additional characters that should be
18006 interpreted as backspace when the user types their login name.
18007
18008 @item @code{kill-characters} (default: @code{#f})
18009 This option accepts a string that should be interpreted to mean ``ignore
18010 all previous characters'' (also called a ``kill'' character) when the user
18011 types their login name.
18012
18013 @item @code{chdir} (default: @code{#f})
18014 This option accepts, as a string, a directory path that will be changed
18015 to before login.
18016
18017 @item @code{delay} (default: @code{#f})
18018 This options accepts, as an integer, the number of seconds to sleep
18019 before opening the tty and displaying the login prompt.
18020
18021 @item @code{nice} (default: @code{#f})
18022 This option accepts, as an integer, the nice value with which to run the
18023 @command{login} program.
18024
18025 @item @code{extra-options} (default: @code{'()})
18026 This option provides an ``escape hatch'' for the user to provide arbitrary
18027 command-line arguments to @command{agetty} as a list of strings.
18028
18029 @item @code{shepherd-requirement} (default: @code{'()})
18030 The option can be used to provides extra shepherd requirements (for example
18031 @code{'syslogd}) to the respective @code{'term-}* shepherd service.
18032
18033 @end table
18034 @end deftp
18035
18036 @deffn {Scheme Procedure} kmscon-service-type @var{config}
18037 Return a service to run @uref{https://www.freedesktop.org/wiki/Software/kmscon,kmscon}
18038 according to @var{config}, a @code{<kmscon-configuration>} object, which
18039 specifies the tty to run, among other things.
18040 @end deffn
18041
18042 @deftp {Data Type} kmscon-configuration
18043 This is the data type representing the configuration of Kmscon, which
18044 implements virtual console log-in.
18045
18046 @table @asis
18047
18048 @item @code{virtual-terminal}
18049 The name of the console this Kmscon runs on---e.g., @code{"tty1"}.
18050
18051 @item @code{login-program} (default: @code{#~(string-append #$shadow "/bin/login")})
18052 A gexp denoting the name of the log-in program. The default log-in program is
18053 @command{login} from the Shadow tool suite.
18054
18055 @item @code{login-arguments} (default: @code{'("-p")})
18056 A list of arguments to pass to @command{login}.
18057
18058 @item @code{auto-login} (default: @code{#f})
18059 When passed a login name, as a string, the specified user will be logged
18060 in automatically without prompting for their login name or password.
18061
18062 @item @code{hardware-acceleration?} (default: #f)
18063 Whether to use hardware acceleration.
18064
18065 @item @code{font-engine} (default: @code{"pango"})
18066 Font engine used in Kmscon.
18067
18068 @item @code{font-size} (default: @code{12})
18069 Font size used in Kmscon.
18070
18071 @item @code{keyboard-layout} (default: @code{#f})
18072 If this is @code{#f}, Kmscon uses the default keyboard layout---usually US
18073 English (``qwerty'') for a 105-key PC keyboard.
18074
18075 Otherwise this must be a @code{keyboard-layout} object specifying the
18076 keyboard layout. @xref{Keyboard Layout}, for more information on how to
18077 specify the keyboard layout.
18078
18079 @item @code{kmscon} (default: @var{kmscon})
18080 The Kmscon package to use.
18081
18082 @end table
18083 @end deftp
18084
18085 @cindex name service cache daemon
18086 @cindex nscd
18087 @deffn {Scheme Procedure} nscd-service [@var{config}] [#:glibc glibc] @
18088 [#:name-services '()]
18089 Return a service that runs the libc name service cache daemon (nscd) with the
18090 given @var{config}---an @code{<nscd-configuration>} object. @xref{Name
18091 Service Switch}, for an example.
18092
18093 For convenience, the Shepherd service for nscd provides the following actions:
18094
18095 @table @code
18096 @item invalidate
18097 @cindex cache invalidation, nscd
18098 @cindex nscd, cache invalidation
18099 This invalidate the given cache. For instance, running:
18100
18101 @example
18102 herd invalidate nscd hosts
18103 @end example
18104
18105 @noindent
18106 invalidates the host name lookup cache of nscd.
18107
18108 @item statistics
18109 Running @command{herd statistics nscd} displays information about nscd usage
18110 and caches.
18111 @end table
18112
18113 @end deffn
18114
18115 @defvr {Scheme Variable} %nscd-default-configuration
18116 This is the default @code{<nscd-configuration>} value (see below) used
18117 by @code{nscd-service}. It uses the caches defined by
18118 @code{%nscd-default-caches}; see below.
18119 @end defvr
18120
18121 @deftp {Data Type} nscd-configuration
18122 This is the data type representing the name service cache daemon (nscd)
18123 configuration.
18124
18125 @table @asis
18126
18127 @item @code{name-services} (default: @code{'()})
18128 List of packages denoting @dfn{name services} that must be visible to
18129 the nscd---e.g., @code{(list @var{nss-mdns})}.
18130
18131 @item @code{glibc} (default: @var{glibc})
18132 Package object denoting the GNU C Library providing the @command{nscd}
18133 command.
18134
18135 @item @code{log-file} (default: @code{"/var/log/nscd.log"})
18136 Name of the nscd log file. This is where debugging output goes when
18137 @code{debug-level} is strictly positive.
18138
18139 @item @code{debug-level} (default: @code{0})
18140 Integer denoting the debugging levels. Higher numbers mean that more
18141 debugging output is logged.
18142
18143 @item @code{caches} (default: @code{%nscd-default-caches})
18144 List of @code{<nscd-cache>} objects denoting things to be cached; see
18145 below.
18146
18147 @end table
18148 @end deftp
18149
18150 @deftp {Data Type} nscd-cache
18151 Data type representing a cache database of nscd and its parameters.
18152
18153 @table @asis
18154
18155 @item @code{database}
18156 This is a symbol representing the name of the database to be cached.
18157 Valid values are @code{passwd}, @code{group}, @code{hosts}, and
18158 @code{services}, which designate the corresponding NSS database
18159 (@pxref{NSS Basics,,, libc, The GNU C Library Reference Manual}).
18160
18161 @item @code{positive-time-to-live}
18162 @itemx @code{negative-time-to-live} (default: @code{20})
18163 A number representing the number of seconds during which a positive or
18164 negative lookup result remains in cache.
18165
18166 @item @code{check-files?} (default: @code{#t})
18167 Whether to check for updates of the files corresponding to
18168 @var{database}.
18169
18170 For instance, when @var{database} is @code{hosts}, setting this flag
18171 instructs nscd to check for updates in @file{/etc/hosts} and to take
18172 them into account.
18173
18174 @item @code{persistent?} (default: @code{#t})
18175 Whether the cache should be stored persistently on disk.
18176
18177 @item @code{shared?} (default: @code{#t})
18178 Whether the cache should be shared among users.
18179
18180 @item @code{max-database-size} (default: 32@tie{}MiB)
18181 Maximum size in bytes of the database cache.
18182
18183 @c XXX: 'suggested-size' and 'auto-propagate?' seem to be expert
18184 @c settings, so leave them out.
18185
18186 @end table
18187 @end deftp
18188
18189 @defvr {Scheme Variable} %nscd-default-caches
18190 List of @code{<nscd-cache>} objects used by default by
18191 @code{nscd-configuration} (see above).
18192
18193 It enables persistent and aggressive caching of service and host name
18194 lookups. The latter provides better host name lookup performance,
18195 resilience in the face of unreliable name servers, and also better
18196 privacy---often the result of host name lookups is in local cache, so
18197 external name servers do not even need to be queried.
18198 @end defvr
18199
18200 @anchor{syslog-configuration-type}
18201 @cindex syslog
18202 @cindex logging
18203 @deftp {Data Type} syslog-configuration
18204 This data type represents the configuration of the syslog daemon.
18205
18206 @table @asis
18207 @item @code{syslogd} (default: @code{#~(string-append #$inetutils "/libexec/syslogd")})
18208 The syslog daemon to use.
18209
18210 @item @code{config-file} (default: @code{%default-syslog.conf})
18211 The syslog configuration file to use.
18212
18213 @end table
18214 @end deftp
18215
18216 @anchor{syslog-service}
18217 @cindex syslog
18218 @deffn {Scheme Procedure} syslog-service @var{config}
18219 Return a service that runs a syslog daemon according to @var{config}.
18220
18221 @xref{syslogd invocation,,, inetutils, GNU Inetutils}, for more
18222 information on the configuration file syntax.
18223 @end deffn
18224
18225 @defvr {Scheme Variable} guix-service-type
18226 This is the type of the service that runs the build daemon,
18227 @command{guix-daemon} (@pxref{Invoking guix-daemon}). Its value must be a
18228 @code{guix-configuration} record as described below.
18229 @end defvr
18230
18231 @anchor{guix-configuration-type}
18232 @deftp {Data Type} guix-configuration
18233 This data type represents the configuration of the Guix build daemon.
18234 @xref{Invoking guix-daemon}, for more information.
18235
18236 @table @asis
18237 @item @code{guix} (default: @var{guix})
18238 The Guix package to use.
18239
18240 @item @code{build-group} (default: @code{"guixbuild"})
18241 Name of the group for build user accounts.
18242
18243 @item @code{build-accounts} (default: @code{10})
18244 Number of build user accounts to create.
18245
18246 @item @code{authorize-key?} (default: @code{#t})
18247 @cindex substitutes, authorization thereof
18248 Whether to authorize the substitute keys listed in
18249 @code{authorized-keys}---by default that of
18250 @code{@value{SUBSTITUTE-SERVER-1}} and
18251 @code{@value{SUBSTITUTE-SERVER-2}}
18252 (@pxref{Substitutes}).
18253
18254 When @code{authorize-key?} is true, @file{/etc/guix/acl} cannot be
18255 changed by invoking @command{guix archive --authorize}. You must
18256 instead adjust @code{guix-configuration} as you wish and reconfigure the
18257 system. This ensures that your operating system configuration file is
18258 self-contained.
18259
18260 @quotation Note
18261 When booting or reconfiguring to a system where @code{authorize-key?}
18262 is true, the existing @file{/etc/guix/acl} file is backed up as
18263 @file{/etc/guix/acl.bak} if it was determined to be a manually modified
18264 file. This is to facilitate migration from earlier versions, which
18265 allowed for in-place modifications to @file{/etc/guix/acl}.
18266 @end quotation
18267
18268 @vindex %default-authorized-guix-keys
18269 @item @code{authorized-keys} (default: @code{%default-authorized-guix-keys})
18270 The list of authorized key files for archive imports, as a list of
18271 string-valued gexps (@pxref{Invoking guix archive}). By default, it
18272 contains that of @code{@value{SUBSTITUTE-SERVER-1}} and
18273 @code{@value{SUBSTITUTE-SERVER-2}} (@pxref{Substitutes}). See
18274 @code{substitute-urls} below for an example on how to change it.
18275
18276 @item @code{use-substitutes?} (default: @code{#t})
18277 Whether to use substitutes.
18278
18279 @item @code{substitute-urls} (default: @code{%default-substitute-urls})
18280 The list of URLs where to look for substitutes by default.
18281
18282 Suppose you would like to fetch substitutes from @code{guix.example.org}
18283 in addition to @code{@value{SUBSTITUTE-SERVER-1}}. You will need to do
18284 two things: (1) add @code{guix.example.org} to @code{substitute-urls},
18285 and (2) authorize its signing key, having done appropriate checks
18286 (@pxref{Substitute Server Authorization}). The configuration below does
18287 exactly that:
18288
18289 @lisp
18290 (guix-configuration
18291 (substitute-urls
18292 (append (list "https://guix.example.org")
18293 %default-substitute-urls))
18294 (authorized-keys
18295 (append (list (local-file "./guix.example.org-key.pub"))
18296 %default-authorized-guix-keys)))
18297 @end lisp
18298
18299 This example assumes that the file @file{./guix.example.org-key.pub}
18300 contains the public key that @code{guix.example.org} uses to sign
18301 substitutes.
18302
18303 @item @code{generate-substitute-key?} (default: @code{#t})
18304 Whether to generate a @dfn{substitute key pair} under
18305 @file{/etc/guix/signing-key.pub} and @file{/etc/guix/signing-key.sec} if
18306 there is not already one.
18307
18308 This key pair is used when exporting store items, for instance with
18309 @command{guix publish} (@pxref{Invoking guix publish}) or @command{guix
18310 archive} (@pxref{Invoking guix archive}). Generating a key pair takes a
18311 few seconds when enough entropy is available and is only done once; you
18312 might want to turn it off for instance in a virtual machine that does
18313 not need it and where the extra boot time is a problem.
18314
18315 @item @code{max-silent-time} (default: @code{0})
18316 @itemx @code{timeout} (default: @code{0})
18317 The number of seconds of silence and the number of seconds of activity,
18318 respectively, after which a build process times out. A value of zero
18319 disables the timeout.
18320
18321 @item @code{log-compression} (default: @code{'gzip})
18322 The type of compression used for build logs---one of @code{gzip},
18323 @code{bzip2}, or @code{none}.
18324
18325 @item @code{discover?} (default: @code{#f})
18326 Whether to discover substitute servers on the local network using mDNS
18327 and DNS-SD.
18328
18329 @item @code{extra-options} (default: @code{'()})
18330 List of extra command-line options for @command{guix-daemon}.
18331
18332 @item @code{log-file} (default: @code{"/var/log/guix-daemon.log"})
18333 File where @command{guix-daemon}'s standard output and standard error
18334 are written.
18335
18336 @cindex HTTP proxy, for @code{guix-daemon}
18337 @cindex proxy, for @code{guix-daemon} HTTP access
18338 @item @code{http-proxy} (default: @code{#f})
18339 The URL of the HTTP and HTTPS proxy used for downloading fixed-output
18340 derivations and substitutes.
18341
18342 It is also possible to change the daemon's proxy at run time through the
18343 @code{set-http-proxy} action, which restarts it:
18344
18345 @example
18346 herd set-http-proxy guix-daemon http://localhost:8118
18347 @end example
18348
18349 To clear the proxy settings, run:
18350
18351 @example
18352 herd set-http-proxy guix-daemon
18353 @end example
18354
18355 @item @code{tmpdir} (default: @code{#f})
18356 A directory path where the @command{guix-daemon} will perform builds.
18357
18358 @end table
18359 @end deftp
18360
18361 @deftp {Data Type} guix-extension
18362
18363 This data type represents the parameters of the Guix build daemon that
18364 are extendable. This is the type of the object that must be used within
18365 a guix service extension.
18366 @xref{Service Composition}, for more information.
18367
18368 @table @asis
18369 @item @code{authorized-keys} (default: @code{'()})
18370 A list of file-like objects where each element contains a public key.
18371
18372 @item @code{substitute-urls} (default: @code{'()})
18373 A list of strings where each element is a substitute URL.
18374
18375 @item @code{chroot-directories} (default: @code{'()})
18376 A list of file-like objects or strings pointing to additional directories the build daemon can use.
18377 @end table
18378 @end deftp
18379
18380 @deffn {Scheme Procedure} udev-service [#:udev @var{eudev} #:rules @code{'()}]
18381 Run @var{udev}, which populates the @file{/dev} directory dynamically.
18382 udev rules can be provided as a list of files through the @var{rules}
18383 variable. The procedures @code{udev-rule}, @code{udev-rules-service}
18384 and @code{file->udev-rule} from @code{(gnu services base)} simplify the
18385 creation of such rule files.
18386
18387 The @command{herd rules udev} command, as root, returns the name of the
18388 directory containing all the active udev rules.
18389 @end deffn
18390
18391 @deffn {Scheme Procedure} udev-rule [@var{file-name} @var{contents}]
18392 Return a udev-rule file named @var{file-name} containing the rules
18393 defined by the @var{contents} literal.
18394
18395 In the following example, a rule for a USB device is defined to be
18396 stored in the file @file{90-usb-thing.rules}. The rule runs a script
18397 upon detecting a USB device with a given product identifier.
18398
18399 @lisp
18400 (define %example-udev-rule
18401 (udev-rule
18402 "90-usb-thing.rules"
18403 (string-append "ACTION==\"add\", SUBSYSTEM==\"usb\", "
18404 "ATTR@{product@}==\"Example\", "
18405 "RUN+=\"/path/to/script\"")))
18406 @end lisp
18407 @end deffn
18408
18409 @deffn {Scheme Procedure} udev-rules-service [@var{name} @var{rules}] @
18410 [#:groups @var{groups}]
18411 Return a service that extends @code{udev-service-type } with @var{rules}
18412 and @code{account-service-type} with @var{groups} as system groups.
18413 This works by creating a singleton service type
18414 @code{@var{name}-udev-rules}, of which the returned service is an
18415 instance.
18416
18417 Here we show how it can be used to extend @code{udev-service-type} with the
18418 previously defined rule @code{%example-udev-rule}.
18419
18420 @lisp
18421 (operating-system
18422 ;; @dots{}
18423 (services
18424 (cons (udev-rules-service 'usb-thing %example-udev-rule)
18425 %desktop-services)))
18426 @end lisp
18427 @end deffn
18428
18429 @deffn {Scheme Procedure} file->udev-rule [@var{file-name} @var{file}]
18430 Return a udev file named @var{file-name} containing the rules defined
18431 within @var{file}, a file-like object.
18432
18433 The following example showcases how we can use an existing rule file.
18434
18435 @lisp
18436 (use-modules (guix download) ;for url-fetch
18437 (guix packages) ;for origin
18438 @dots{})
18439
18440 (define %android-udev-rules
18441 (file->udev-rule
18442 "51-android-udev.rules"
18443 (let ((version "20170910"))
18444 (origin
18445 (method url-fetch)
18446 (uri (string-append "https://raw.githubusercontent.com/M0Rf30/"
18447 "android-udev-rules/" version "/51-android.rules"))
18448 (sha256
18449 (base32 "0lmmagpyb6xsq6zcr2w1cyx9qmjqmajkvrdbhjx32gqf1d9is003"))))))
18450 @end lisp
18451 @end deffn
18452
18453 Additionally, Guix package definitions can be included in @var{rules} in
18454 order to extend the udev rules with the definitions found under their
18455 @file{lib/udev/rules.d} sub-directory. In lieu of the previous
18456 @var{file->udev-rule} example, we could have used the
18457 @var{android-udev-rules} package which exists in Guix in the @code{(gnu
18458 packages android)} module.
18459
18460 The following example shows how to use the @var{android-udev-rules}
18461 package so that the Android tool @command{adb} can detect devices
18462 without root privileges. It also details how to create the
18463 @code{adbusers} group, which is required for the proper functioning of
18464 the rules defined within the @code{android-udev-rules} package. To
18465 create such a group, we must define it both as part of the
18466 @code{supplementary-groups} of our @code{user-account} declaration, as
18467 well as in the @var{groups} of the @code{udev-rules-service} procedure.
18468
18469 @lisp
18470 (use-modules (gnu packages android) ;for android-udev-rules
18471 (gnu system shadow) ;for user-group
18472 @dots{})
18473
18474 (operating-system
18475 ;; @dots{}
18476 (users (cons (user-account
18477 ;; @dots{}
18478 (supplementary-groups
18479 '("adbusers" ;for adb
18480 "wheel" "netdev" "audio" "video")))))
18481 ;; @dots{}
18482 (services
18483 (cons (udev-rules-service 'android android-udev-rules
18484 #:groups '("adbusers"))
18485 %desktop-services)))
18486 @end lisp
18487
18488 @defvr {Scheme Variable} urandom-seed-service-type
18489 Save some entropy in @code{%random-seed-file} to seed @file{/dev/urandom}
18490 when rebooting. It also tries to seed @file{/dev/urandom} from
18491 @file{/dev/hwrng} while booting, if @file{/dev/hwrng} exists and is
18492 readable.
18493 @end defvr
18494
18495 @defvr {Scheme Variable} %random-seed-file
18496 This is the name of the file where some random bytes are saved by
18497 @var{urandom-seed-service} to seed @file{/dev/urandom} when rebooting.
18498 It defaults to @file{/var/lib/random-seed}.
18499 @end defvr
18500
18501 @cindex mouse
18502 @cindex gpm
18503 @defvr {Scheme Variable} gpm-service-type
18504 This is the type of the service that runs GPM, the @dfn{general-purpose
18505 mouse daemon}, which provides mouse support to the Linux console. GPM
18506 allows users to use the mouse in the console, notably to select, copy,
18507 and paste text.
18508
18509 The value for services of this type must be a @code{gpm-configuration}
18510 (see below). This service is not part of @code{%base-services}.
18511 @end defvr
18512
18513 @deftp {Data Type} gpm-configuration
18514 Data type representing the configuration of GPM.
18515
18516 @table @asis
18517 @item @code{options} (default: @code{%default-gpm-options})
18518 Command-line options passed to @command{gpm}. The default set of
18519 options instruct @command{gpm} to listen to mouse events on
18520 @file{/dev/input/mice}. @xref{Command Line,,, gpm, gpm manual}, for
18521 more information.
18522
18523 @item @code{gpm} (default: @code{gpm})
18524 The GPM package to use.
18525
18526 @end table
18527 @end deftp
18528
18529 @anchor{guix-publish-service-type}
18530 @deffn {Scheme Variable} guix-publish-service-type
18531 This is the service type for @command{guix publish} (@pxref{Invoking
18532 guix publish}). Its value must be a @code{guix-publish-configuration}
18533 object, as described below.
18534
18535 This assumes that @file{/etc/guix} already contains a signing key pair as
18536 created by @command{guix archive --generate-key} (@pxref{Invoking guix
18537 archive}). If that is not the case, the service will fail to start.
18538 @end deffn
18539
18540 @deftp {Data Type} guix-publish-configuration
18541 Data type representing the configuration of the @code{guix publish}
18542 service.
18543
18544 @table @asis
18545 @item @code{guix} (default: @code{guix})
18546 The Guix package to use.
18547
18548 @item @code{port} (default: @code{80})
18549 The TCP port to listen for connections.
18550
18551 @item @code{host} (default: @code{"localhost"})
18552 The host (and thus, network interface) to listen to. Use
18553 @code{"0.0.0.0"} to listen on all the network interfaces.
18554
18555 @item @code{advertise?} (default: @code{#f})
18556 When true, advertise the service on the local network @i{via} the DNS-SD
18557 protocol, using Avahi.
18558
18559 This allows neighboring Guix devices with discovery on (see
18560 @code{guix-configuration} above) to discover this @command{guix publish}
18561 instance and to automatically download substitutes from it.
18562
18563 @item @code{compression} (default: @code{'(("gzip" 3) ("zstd" 3))})
18564 This is a list of compression method/level tuple used when compressing
18565 substitutes. For example, to compress all substitutes with @emph{both} lzip
18566 at level 7 and gzip at level 9, write:
18567
18568 @lisp
18569 '(("lzip" 7) ("gzip" 9))
18570 @end lisp
18571
18572 Level 9 achieves the best compression ratio at the expense of increased CPU
18573 usage, whereas level 1 achieves fast compression. @xref{Invoking guix
18574 publish}, for more information on the available compression methods and
18575 the tradeoffs involved.
18576
18577 An empty list disables compression altogether.
18578
18579 @item @code{nar-path} (default: @code{"nar"})
18580 The URL path at which ``nars'' can be fetched. @xref{Invoking guix
18581 publish, @option{--nar-path}}, for details.
18582
18583 @item @code{cache} (default: @code{#f})
18584 When it is @code{#f}, disable caching and instead generate archives on
18585 demand. Otherwise, this should be the name of a directory---e.g.,
18586 @code{"/var/cache/guix/publish"}---where @command{guix publish} caches
18587 archives and meta-data ready to be sent. @xref{Invoking guix publish,
18588 @option{--cache}}, for more information on the tradeoffs involved.
18589
18590 @item @code{workers} (default: @code{#f})
18591 When it is an integer, this is the number of worker threads used for
18592 caching; when @code{#f}, the number of processors is used.
18593 @xref{Invoking guix publish, @option{--workers}}, for more information.
18594
18595 @item @code{cache-bypass-threshold} (default: 10 MiB)
18596 When @code{cache} is true, this is the maximum size in bytes of a store
18597 item for which @command{guix publish} may bypass its cache in case of a
18598 cache miss. @xref{Invoking guix publish,
18599 @option{--cache-bypass-threshold}}, for more information.
18600
18601 @item @code{ttl} (default: @code{#f})
18602 When it is an integer, this denotes the @dfn{time-to-live} in seconds
18603 of the published archives. @xref{Invoking guix publish, @option{--ttl}},
18604 for more information.
18605
18606 @item @code{negative-ttl} (default: @code{#f})
18607 When it is an integer, this denotes the @dfn{time-to-live} in
18608 seconds for the negative lookups. @xref{Invoking guix publish,
18609 @option{--negative-ttl}}, for more information.
18610 @end table
18611 @end deftp
18612
18613 @anchor{rngd-service}
18614 @deffn {Scheme Procedure} rngd-service [#:rng-tools @var{rng-tools}] @
18615 [#:device "/dev/hwrng"]
18616 Return a service that runs the @command{rngd} program from @var{rng-tools}
18617 to add @var{device} to the kernel's entropy pool. The service will fail if
18618 @var{device} does not exist.
18619 @end deffn
18620
18621 @anchor{pam-limits-service}
18622 @cindex session limits
18623 @cindex ulimit
18624 @cindex priority
18625 @cindex realtime
18626 @cindex jackd
18627 @cindex nofile
18628 @cindex open file descriptors
18629 @deffn {Scheme Procedure} pam-limits-service [#:limits @code{'()}]
18630
18631 Return a service that installs a configuration file for the
18632 @uref{http://linux-pam.org/Linux-PAM-html/sag-pam_limits.html,
18633 @code{pam_limits} module}. The procedure optionally takes a list of
18634 @code{pam-limits-entry} values, which can be used to specify
18635 @code{ulimit} limits and @code{nice} priority limits to user sessions.
18636
18637 The following limits definition sets two hard and soft limits for all
18638 login sessions of users in the @code{realtime} group:
18639
18640 @lisp
18641 (pam-limits-service
18642 (list
18643 (pam-limits-entry "@@realtime" 'both 'rtprio 99)
18644 (pam-limits-entry "@@realtime" 'both 'memlock 'unlimited)))
18645 @end lisp
18646
18647 The first entry increases the maximum realtime priority for
18648 non-privileged processes; the second entry lifts any restriction of the
18649 maximum address space that can be locked in memory. These settings are
18650 commonly used for real-time audio systems.
18651
18652 Another useful example is raising the maximum number of open file
18653 descriptors that can be used:
18654
18655 @lisp
18656 (pam-limits-service
18657 (list
18658 (pam-limits-entry "*" 'both 'nofile 100000)))
18659 @end lisp
18660
18661 In the above example, the asterisk means the limit should apply to any
18662 user. It is important to ensure the chosen value doesn't exceed the
18663 maximum system value visible in the @file{/proc/sys/fs/file-max} file,
18664 else the users would be prevented from login in. For more information
18665 about the Pluggable Authentication Module (PAM) limits, refer to the
18666 @samp{pam_limits} man page from the @code{linux-pam} package.
18667 @end deffn
18668
18669 @defvr {Scheme Variable} greetd-service-type
18670 @uref{https://git.sr.ht/~kennylevinsen/greetd, @code{greetd}} is a minimal and
18671 flexible login manager daemon, that makes no assumptions about what you
18672 want to launch.
18673
18674 If you can run it from your shell in a TTY, greetd can start it. If it
18675 can be taught to speak a simple JSON-based IPC protocol, then it can be
18676 a geeter.
18677
18678 @code{greetd-service-type} provides necessary infrastructure for logging
18679 in users, including:
18680
18681 @itemize @bullet
18682 @item
18683 @code{greetd} PAM service
18684
18685 @item
18686 Special variation of @code{pam-mount} to mount @code{XDG_RUNTIME_DIR}
18687 @end itemize
18688
18689 Here is example of switching from @code{mingetty-service-type} to
18690 @code{greetd-service-type}, and how different terminals could be:
18691
18692 @lisp
18693 (append
18694 (modify-services %base-services
18695 ;; greetd-service-type provides "greetd" PAM service
18696 (delete login-service-type)
18697 ;; and can be used in place of mingetty-service-type
18698 (delete mingetty-service-type))
18699 (list
18700 (service greetd-service-type
18701 (greetd-configuration
18702 (terminals
18703 (list
18704 ;; we can make any terminal active by default
18705 (greetd-terminal-configuration (terminal-vt "1") (terminal-switch #t))
18706 ;; we can make environment without XDG_RUNTIME_DIR set
18707 ;; even provide our own environment variables
18708 (greetd-terminal-configuration
18709 (terminal-vt "2")
18710 (default-session-command
18711 (greetd-agreety-session
18712 (extra-env '(("MY_VAR" . "1")))
18713 (xdg-env? #f))))
18714 ;; we can use different shell instead of default bash
18715 (greetd-terminal-configuration
18716 (terminal-vt "3")
18717 (default-session-command
18718 (greetd-agreety-session (command (file-append zsh "/bin/zsh")))))
18719 ;; we can use any other executable command as greeter
18720 (greetd-terminal-configuration
18721 (terminal-vt "4")
18722 (default-session-command (program-file "my-noop-greeter" #~(exit))))
18723 (greetd-terminal-configuration (terminal-vt "5"))
18724 (greetd-terminal-configuration (terminal-vt "6"))))))
18725 ;; mingetty-service-type can be used in parallel
18726 ;; if needed to do so, do not (delete login-service-type)
18727 ;; as illustrated above
18728 #| (service mingetty-service-type (mingetty-configuration (tty "tty8"))) |#))
18729 @end lisp
18730 @end defvr
18731
18732 @deftp {Data Type} greetd-configuration
18733 Configuration record for the @code{greetd-service-type}.
18734 @table @asis
18735
18736 @item @code{motd}
18737 A file-like object containing the ``message of the day''.
18738
18739 @item @code{allow-empty-passwords?} (default: @code{#t})
18740 Allow empty passwords by default so that first-time users can log in when
18741 the 'root' account has just been created.
18742
18743 @item @code{terminals} (default: @code{'()})
18744 List of @code{greetd-terminal-configuration} per terminal for which
18745 @code{greetd} should be started.
18746
18747 @item @code{greeter-supplementary-groups} (default: @code{'()})
18748 List of groups which should be added to @code{greeter} user. For instance:
18749 @lisp
18750 (greeter-supplementary-groups '("seat" "video"))
18751 @end lisp
18752 Note that this example will fail if @code{seat} group does not exist.
18753 @end table
18754 @end deftp
18755
18756 @deftp {Data Type} greetd-terminal-configuration
18757 Configuration record for per terminal greetd daemon service.
18758
18759 @table @asis
18760 @item @code{greetd} (default: @code{greetd})
18761 The greetd package to use.
18762
18763 @item @code{config-file-name}
18764 Configuration file name to use for greetd daemon. Generally, autogenerated
18765 derivation based on @code{terminal-vt} value.
18766
18767 @item @code{log-file-name}
18768 Log file name to use for greetd daemon. Generally, autogenerated
18769 name based on @code{terminal-vt} value.
18770
18771 @item @code{terminal-vt} (default: @samp{"7"})
18772 The VT to run on. Use of a specific VT with appropriate conflict avoidance
18773 is recommended.
18774
18775 @item @code{terminal-switch} (default: @code{#f})
18776 Make this terminal active on start of @code{greetd}.
18777
18778 @item @code{default-session-user} (default: @samp{"greeter"})
18779 The user to use for running the greeter.
18780
18781 @item @code{default-session-command} (default: @code{(greetd-agreety-session)})
18782 Can be either instance of @code{greetd-agreety-session} configuration or
18783 @code{gexp->script} like object to use as greeter.
18784
18785 @end table
18786 @end deftp
18787
18788 @deftp {Data Type} greetd-agreety-session
18789 Configuration record for the agreety greetd greeter.
18790
18791 @table @asis
18792 @item @code{agreety} (default: @code{greetd})
18793 The package with @command{/bin/agreety} command.
18794
18795 @item @code{command} (default: @code{(file-append bash "/bin/bash")})
18796 Command to be started by @command{/bin/agreety} on successful login.
18797
18798 @item @code{command-args} (default: @code{'("-l")})
18799 Command arguments to pass to command.
18800
18801 @item @code{extra-env} (default: @code{'()})
18802 Extra environment variables to set on login.
18803
18804 @item @code{xdg-env?} (default: @code{#t})
18805 If true @code{XDG_RUNTIME_DIR} and @code{XDG_SESSION_TYPE} will be set
18806 before starting command. One should note that, @code{extra-env} variables
18807 are set right after mentioned variables, so that they can be overriden.
18808
18809 @end table
18810 @end deftp
18811
18812 @deftp {Data Type} greetd-wlgreet-session
18813 Generic configuration record for the wlgreet greetd greeter.
18814
18815 @table @asis
18816 @item @code{wlgreet} (default: @code{wlgreet})
18817 The package with the @command{/bin/wlgreet} command.
18818
18819 @item @code{command} (default: @code{(file-append sway "/bin/sway")})
18820 Command to be started by @command{/bin/wlgreet} on successful login.
18821
18822 @item @code{command-args} (default: @code{'()})
18823 Command arguments to pass to command.
18824
18825 @item @code{output-mode} (default: @code{"all"})
18826 Option to use for @code{outputMode} in the TOML configuration file.
18827
18828 @item @code{scale} (default: @code{1})
18829 Option to use for @code{scale} in the TOML configuration file.
18830
18831 @item @code{background} (default: @code{'(0 0 0 0.9)})
18832 RGBA list to use as the background colour of the login prompt.
18833
18834 @item @code{headline} (default: @code{'(1 1 1 1)})
18835 RGBA list to use as the headline colour of the UI popup.
18836
18837 @item @code{prompt} (default: @code{'(1 1 1 1)})
18838 RGBA list to use as the prompt colour of the UI popup.
18839
18840 @item @code{prompt-error} (default: @code{'(1 1 1 1)})
18841 RGBA list to use as the error colour of the UI popup.
18842
18843 @item @code{border} (default: @code{'(1 1 1 1)})
18844 RGBA list to use as the border colour of the UI popup.
18845
18846 @item @code{extra-env} (default: @code{'()})
18847 Extra environment variables to set on login.
18848
18849 @end table
18850 @end deftp
18851
18852 @deftp {Data Type} greetd-wlgreet-sway-session
18853 Sway-specific configuration record for the wlgreet greetd greeter.
18854
18855 @table @asis
18856 @item @code{wlgreet-session} (default: @code{(greetd-wlgreet-session)})
18857 A @code{greetd-wlgreet-session} record for generic wlgreet configuration,
18858 on top of the Sway-specific @code{greetd-wlgreet-sway-session}.
18859
18860 @item @code{sway} (default: @code{sway})
18861 The package providing the @command{/bin/sway} command.
18862
18863 @item @code{sway-configuration} (default: #f)
18864 File-like object providing an additional Sway configuration file to be
18865 prepended to the mandatory part of the configuration.
18866
18867 @end table
18868
18869 Here is an example of a greetd configuration that uses wlgreet and Sway:
18870
18871 @lisp
18872 (greetd-configuration
18873 ;; We need to give the greeter user these permissions, otherwise
18874 ;; Sway will crash on launch.
18875 (greeter-supplementary-groups (list "video" "input" "seat"))
18876 (terminals
18877 (list (greetd-terminal-configuration
18878 (terminal-vt "1")
18879 (terminal-switch #t)
18880 (default-session-command
18881 (greetd-wlgreet-sway-session
18882 (sway-configuration
18883 (local-file "sway-greetd.conf"))))))))
18884 @end lisp
18885 @end deftp
18886
18887 @node Scheduled Job Execution
18888 @subsection Scheduled Job Execution
18889
18890 @cindex cron
18891 @cindex mcron
18892 @cindex scheduling jobs
18893 The @code{(gnu services mcron)} module provides an interface to
18894 GNU@tie{}mcron, a daemon to run jobs at scheduled times (@pxref{Top,,,
18895 mcron, GNU@tie{}mcron}). GNU@tie{}mcron is similar to the traditional
18896 Unix @command{cron} daemon; the main difference is that it is
18897 implemented in Guile Scheme, which provides a lot of flexibility when
18898 specifying the scheduling of jobs and their actions.
18899
18900 The example below defines an operating system that runs the
18901 @command{updatedb} (@pxref{Invoking updatedb,,, find, Finding Files})
18902 and the @command{guix gc} commands (@pxref{Invoking guix gc}) daily, as
18903 well as the @command{mkid} command on behalf of an unprivileged user
18904 (@pxref{mkid invocation,,, idutils, ID Database Utilities}). It uses
18905 gexps to introduce job definitions that are passed to mcron
18906 (@pxref{G-Expressions}).
18907
18908 @lisp
18909 (use-modules (guix) (gnu) (gnu services mcron))
18910 (use-package-modules base idutils)
18911
18912 (define updatedb-job
18913 ;; Run 'updatedb' at 3AM every day. Here we write the
18914 ;; job's action as a Scheme procedure.
18915 #~(job '(next-hour '(3))
18916 (lambda ()
18917 (execl (string-append #$findutils "/bin/updatedb")
18918 "updatedb"
18919 "--prunepaths=/tmp /var/tmp /gnu/store"))
18920 "updatedb"))
18921
18922 (define garbage-collector-job
18923 ;; Collect garbage 5 minutes after midnight every day.
18924 ;; The job's action is a shell command.
18925 #~(job "5 0 * * *" ;Vixie cron syntax
18926 "guix gc -F 1G"))
18927
18928 (define idutils-job
18929 ;; Update the index database as user "charlie" at 12:15PM
18930 ;; and 19:15PM. This runs from the user's home directory.
18931 #~(job '(next-minute-from (next-hour '(12 19)) '(15))
18932 (string-append #$idutils "/bin/mkid src")
18933 #:user "charlie"))
18934
18935 (operating-system
18936 ;; @dots{}
18937
18938 ;; %BASE-SERVICES already includes an instance of
18939 ;; 'mcron-service-type', which we extend with additional
18940 ;; jobs using 'simple-service'.
18941 (services (cons (simple-service 'my-cron-jobs
18942 mcron-service-type
18943 (list garbage-collector-job
18944 updatedb-job
18945 idutils-job))
18946 %base-services)))
18947 @end lisp
18948
18949 @quotation Tip
18950 When providing the action of a job specification as a procedure, you
18951 should provide an explicit name for the job via the optional 3rd
18952 argument as done in the @code{updatedb-job} example above. Otherwise,
18953 the job would appear as ``Lambda function'' in the output of
18954 @command{herd schedule mcron}, which is not nearly descriptive enough!
18955 @end quotation
18956
18957 For more complex jobs defined in Scheme where you need control over the top
18958 level, for instance to introduce a @code{use-modules} form, you can move your
18959 code to a separate program using the @code{program-file} procedure of the
18960 @code{(guix gexp)} module (@pxref{G-Expressions}). The example below
18961 illustrates that.
18962
18963 @lisp
18964 (define %battery-alert-job
18965 ;; Beep when the battery percentage falls below %MIN-LEVEL.
18966 #~(job
18967 '(next-minute (range 0 60 1))
18968 #$(program-file
18969 "battery-alert.scm"
18970 (with-imported-modules (source-module-closure
18971 '((guix build utils)))
18972 #~(begin
18973 (use-modules (guix build utils)
18974 (ice-9 popen)
18975 (ice-9 regex)
18976 (ice-9 textual-ports)
18977 (srfi srfi-2))
18978
18979 (define %min-level 20)
18980
18981 (setenv "LC_ALL" "C") ;ensure English output
18982 (and-let* ((input-pipe (open-pipe*
18983 OPEN_READ
18984 #$(file-append acpi "/bin/acpi")))
18985 (output (get-string-all input-pipe))
18986 (m (string-match "Discharging, ([0-9]+)%" output))
18987 (level (string->number (match:substring m 1)))
18988 ((< level %min-level)))
18989 (format #t "warning: Battery level is low (~a%)~%" level)
18990 (invoke #$(file-append beep "/bin/beep") "-r5")))))))
18991 @end lisp
18992
18993 @xref{Guile Syntax, mcron job specifications,, mcron, GNU@tie{}mcron},
18994 for more information on mcron job specifications. Below is the
18995 reference of the mcron service.
18996
18997 On a running system, you can use the @code{schedule} action of the service to
18998 visualize the mcron jobs that will be executed next:
18999
19000 @example
19001 # herd schedule mcron
19002 @end example
19003
19004 @noindent
19005 The example above lists the next five tasks that will be executed, but you can
19006 also specify the number of tasks to display:
19007
19008 @example
19009 # herd schedule mcron 10
19010 @end example
19011
19012 @defvr {Scheme Variable} mcron-service-type
19013 This is the type of the @code{mcron} service, whose value is an
19014 @code{mcron-configuration} object.
19015
19016 This service type can be the target of a service extension that provides
19017 additional job specifications (@pxref{Service Composition}). In other
19018 words, it is possible to define services that provide additional mcron
19019 jobs to run.
19020 @end defvr
19021
19022 @c Generated via (generate-documentation) at the bottom of (gnu services
19023 @c mcron).
19024 @c %start of fragment
19025 @deftp {Data Type} mcron-configuration
19026 Available @code{mcron-configuration} fields are:
19027
19028 @table @asis
19029 @item @code{mcron} (default: @code{mcron}) (type: file-like)
19030 The mcron package to use.
19031
19032 @item @code{jobs} (default: @code{()}) (type: list-of-gexps)
19033 This is a list of gexps (@pxref{G-Expressions}), where each gexp
19034 corresponds to an mcron job specification (@pxref{Syntax, mcron job
19035 specifications,, mcron,GNU@tie{}mcron}).
19036
19037 @item @code{log?} (default: @code{#t}) (type: boolean)
19038 Log messages to standard output.
19039
19040 @item @code{log-format} (default: @code{"~1@@*~a ~a: ~a~%"}) (type: string)
19041 @code{(ice-9 format)} format string for log messages. The default value
19042 produces messages like "@samp{@var{pid} @var{name}: @var{message}"}
19043 (@pxref{Invoking mcron, Invoking,, mcron,GNU@tie{}mcron}). Each message
19044 is also prefixed by a timestamp by GNU Shepherd.
19045
19046 @end table
19047 @end deftp
19048 @c %end of fragment
19049
19050 @node Log Rotation
19051 @subsection Log Rotation
19052
19053 @cindex rottlog
19054 @cindex log rotation
19055 @cindex logging
19056 Log files such as those found in @file{/var/log} tend to grow endlessly,
19057 so it's a good idea to @dfn{rotate} them once in a while---i.e., archive
19058 their contents in separate files, possibly compressed. The @code{(gnu
19059 services admin)} module provides an interface to GNU@tie{}Rot[t]log, a
19060 log rotation tool (@pxref{Top,,, rottlog, GNU Rot[t]log Manual}).
19061
19062 This service is part of @code{%base-services}, and thus enabled by
19063 default, with the default settings, for commonly encountered log files.
19064 The example below shows how to extend it with an additional
19065 @dfn{rotation}, should you need to do that (usually, services that
19066 produce log files already take care of that):
19067
19068 @lisp
19069 (use-modules (guix) (gnu))
19070 (use-service-modules admin)
19071
19072 (define my-log-files
19073 ;; Log files that I want to rotate.
19074 '("/var/log/something.log" "/var/log/another.log"))
19075
19076 (operating-system
19077 ;; @dots{}
19078 (services (cons (simple-service 'rotate-my-stuff
19079 rottlog-service-type
19080 (list (log-rotation
19081 (frequency 'daily)
19082 (files my-log-files))))
19083 %base-services)))
19084 @end lisp
19085
19086 @defvr {Scheme Variable} rottlog-service-type
19087 This is the type of the Rottlog service, whose value is a
19088 @code{rottlog-configuration} object.
19089
19090 Other services can extend this one with new @code{log-rotation} objects
19091 (see below), thereby augmenting the set of files to be rotated.
19092
19093 This service type can define mcron jobs (@pxref{Scheduled Job
19094 Execution}) to run the rottlog service.
19095 @end defvr
19096
19097 @deftp {Data Type} rottlog-configuration
19098 Data type representing the configuration of rottlog.
19099
19100 @table @asis
19101 @item @code{rottlog} (default: @code{rottlog})
19102 The Rottlog package to use.
19103
19104 @item @code{rc-file} (default: @code{(file-append rottlog "/etc/rc")})
19105 The Rottlog configuration file to use (@pxref{Mandatory RC Variables,,,
19106 rottlog, GNU Rot[t]log Manual}).
19107
19108 @item @code{rotations} (default: @code{%default-rotations})
19109 A list of @code{log-rotation} objects as defined below.
19110
19111 @item @code{jobs}
19112 This is a list of gexps where each gexp corresponds to an mcron job
19113 specification (@pxref{Scheduled Job Execution}).
19114 @end table
19115 @end deftp
19116
19117 @deftp {Data Type} log-rotation
19118 Data type representing the rotation of a group of log files.
19119
19120 Taking an example from the Rottlog manual (@pxref{Period Related File
19121 Examples,,, rottlog, GNU Rot[t]log Manual}), a log rotation might be
19122 defined like this:
19123
19124 @lisp
19125 (log-rotation
19126 (frequency 'daily)
19127 (files '("/var/log/apache/*"))
19128 (options '("storedir apache-archives"
19129 "rotate 6"
19130 "notifempty"
19131 "nocompress")))
19132 @end lisp
19133
19134 The list of fields is as follows:
19135
19136 @table @asis
19137 @item @code{frequency} (default: @code{'weekly})
19138 The log rotation frequency, a symbol.
19139
19140 @item @code{files}
19141 The list of files or file glob patterns to rotate.
19142
19143 @vindex %default-log-rotation-options
19144 @item @code{options} (default: @code{%default-log-rotation-options})
19145 The list of rottlog options for this rotation (@pxref{Configuration
19146 parameters,,, rottlog, GNU Rot[t]log Manual}).
19147
19148 @item @code{post-rotate} (default: @code{#f})
19149 Either @code{#f} or a gexp to execute once the rotation has completed.
19150 @end table
19151 @end deftp
19152
19153 @defvr {Scheme Variable} %default-rotations
19154 Specifies weekly rotation of @code{%rotated-files} and of
19155 @file{/var/log/guix-daemon.log}.
19156 @end defvr
19157
19158 @defvr {Scheme Variable} %rotated-files
19159 The list of syslog-controlled files to be rotated. By default it is:
19160 @code{'("/var/log/messages" "/var/log/secure" "/var/log/debug" \
19161 "/var/log/maillog")}.
19162 @end defvr
19163
19164 Some log files just need to be deleted periodically once they are old,
19165 without any other criterion and without any archival step. This is the
19166 case of build logs stored by @command{guix-daemon} under
19167 @file{/var/log/guix/drvs} (@pxref{Invoking guix-daemon}). The
19168 @code{log-cleanup} service addresses this use case. For example,
19169 @code{%base-services} (@pxref{Base Services}) includes the following:
19170
19171 @lisp
19172 ;; Periodically delete old build logs.
19173 (service log-cleanup-service-type
19174 (log-cleanup-configuration
19175 (directory "/var/log/guix/drvs")))
19176 @end lisp
19177
19178 That ensures build logs do not accumulate endlessly.
19179
19180 @defvr {Scheme Variable} log-cleanup-service-type
19181 This is the type of the service to delete old logs. Its value must be a
19182 @code{log-cleanup-configuration} record as described below.
19183 @end defvr
19184
19185 @deftp {Data Type} log-cleanup-configuration
19186 Data type representing the log cleanup configuration
19187
19188 @table @asis
19189 @item @code{directory}
19190 Name of the directory containing log files.
19191
19192 @item @code{expiry} (default: @code{(* 6 30 24 3600)})
19193 Age in seconds after which a file is subject to deletion (six months by
19194 default).
19195
19196 @item @code{schedule} (default: @code{"30 12 01,08,15,22 * *"})
19197 String or gexp denoting the corresponding mcron job schedule
19198 (@pxref{Scheduled Job Execution}).
19199 @end table
19200 @end deftp
19201
19202 @cindex logging, anonymization
19203 @subheading Anonip Service
19204
19205 Anonip is a privacy filter that removes IP address from web server logs.
19206 This service creates a FIFO and filters any written lines with anonip
19207 before writing the filtered log to a target file.
19208
19209 The following example sets up the FIFO
19210 @file{/var/run/anonip/https.access.log} and writes the filtered log file
19211 @file{/var/log/anonip/https.access.log}.
19212
19213 @lisp
19214 (service anonip-service-type
19215 (anonip-configuration
19216 (input "/var/run/anonip/https.access.log")
19217 (output "/var/log/anonip/https.access.log")))
19218 @end lisp
19219
19220 Configure your web server to write its logs to the FIFO at
19221 @file{/var/run/anonip/https.access.log} and collect the anonymized log
19222 file at @file{/var/web-logs/https.access.log}.
19223
19224 @deftp {Data Type} anonip-configuration
19225 This data type represents the configuration of anonip.
19226 It has the following parameters:
19227
19228 @table @asis
19229 @item @code{anonip} (default: @code{anonip})
19230 The anonip package to use.
19231
19232 @item @code{input}
19233 The file name of the input log file to process. The service creates a
19234 FIFO of this name. The web server should write its logs to this FIFO.
19235
19236 @item @code{output}
19237 The file name of the processed log file.
19238 @end table
19239
19240 The following optional settings may be provided:
19241
19242 @table @asis
19243 @item @code{skip-private?}
19244 When @code{#true} do not mask addresses in private ranges.
19245
19246 @item @code{column}
19247 A 1-based indexed column number. Assume IP address is in the specified
19248 column (default is 1).
19249
19250 @item @code{replacement}
19251 Replacement string in case address parsing fails, e.g. @code{"0.0.0.0"}.
19252
19253 @item @code{ipv4mask}
19254 Number of bits to mask in IPv4 addresses.
19255
19256 @item @code{ipv6mask}
19257 Number of bits to mask in IPv6 addresses.
19258
19259 @item @code{increment}
19260 Increment the IP address by the given number. By default this is zero.
19261
19262 @item @code{delimiter}
19263 Log delimiter string.
19264
19265 @item @code{regex}
19266 Regular expression for detecting IP addresses. Use this instead of @code{column}.
19267 @end table
19268 @end deftp
19269
19270
19271 @node Networking Setup
19272 @subsection Networking Setup
19273
19274 The @code{(gnu services networking)} module provides services to
19275 configure network interfaces and set up networking on your machine.
19276 Those services provide different ways for you to set up your machine: by
19277 declaring a static network configuration, by running a Dynamic Host
19278 Configuration Protocol (DHCP) client, or by running daemons such as
19279 NetworkManager and Connman that automate the whole process,
19280 automatically adapt to connectivity changes, and provide a high-level
19281 user interface.
19282
19283 On a laptop, NetworkManager and Connman are by far the most convenient
19284 options, which is why the default desktop services include
19285 NetworkManager (@pxref{Desktop Services, @code{%desktop-services}}).
19286 For a server, or for a virtual machine or a container, static network
19287 configuration or a simple DHCP client are often more appropriate.
19288
19289 This section describes the various network setup services available,
19290 starting with static network configuration.
19291
19292 @defvr {Scheme Variable} static-networking-service-type
19293 This is the type for statically-configured network interfaces. Its
19294 value must be a list of @code{static-networking} records. Each of them
19295 declares a set of @dfn{addresses}, @dfn{routes}, and @dfn{links}, as
19296 shown below.
19297
19298 @cindex network interface controller (NIC)
19299 @cindex NIC, networking interface controller
19300 Here is the simplest configuration, with only one network interface
19301 controller (NIC) and only IPv4 connectivity:
19302
19303 @lisp
19304 ;; Static networking for one NIC, IPv4-only.
19305 (service static-networking-service-type
19306 (list (static-networking
19307 (addresses
19308 (list (network-address
19309 (device "eno1")
19310 (value "10.0.2.15/24"))))
19311 (routes
19312 (list (network-route
19313 (destination "default")
19314 (gateway "10.0.2.2"))))
19315 (name-servers '("10.0.2.3")))))
19316 @end lisp
19317
19318 The snippet above can be added to the @code{services} field of your
19319 operating system configuration (@pxref{Using the Configuration System}).
19320 It will configure your machine to have 10.0.2.15 as its IP address, with
19321 a 24-bit netmask for the local network---meaning that any 10.0.2.@var{x}
19322 address is on the local area network (LAN). Traffic to addresses
19323 outside the local network is routed @i{via} 10.0.2.2. Host names are
19324 resolved by sending domain name system (DNS) queries to 10.0.2.3.
19325 @end defvr
19326
19327 @deftp {Data Type} static-networking
19328 This is the data type representing a static network configuration.
19329
19330 As an example, here is how you would declare the configuration of a
19331 machine with a single network interface controller (NIC) available as
19332 @code{eno1}, and with one IPv4 and one IPv6 address:
19333
19334 @lisp
19335 ;; Network configuration for one NIC, IPv4 + IPv6.
19336 (static-networking
19337 (addresses (list (network-address
19338 (device "eno1")
19339 (value "10.0.2.15/24"))
19340 (network-address
19341 (device "eno1")
19342 (value "2001:123:4567:101::1/64"))))
19343 (routes (list (network-route
19344 (destination "default")
19345 (gateway "10.0.2.2"))
19346 (network-route
19347 (destination "default")
19348 (gateway "2020:321:4567:42::1"))))
19349 (name-servers '("10.0.2.3")))
19350 @end lisp
19351
19352 If you are familiar with the @command{ip} command of the
19353 @uref{https://wiki.linuxfoundation.org/networking/iproute2,
19354 @code{iproute2} package} found on Linux-based systems, the declaration
19355 above is equivalent to typing:
19356
19357 @example
19358 ip address add 10.0.2.15/24 dev eno1
19359 ip address add 2001:123:4567:101::1/64 dev eno1
19360 ip route add default via inet 10.0.2.2
19361 ip route add default via inet6 2020:321:4567:42::1
19362 @end example
19363
19364 Run @command{man 8 ip} for more info. Venerable GNU/Linux users will
19365 certainly know how to do it with @command{ifconfig} and @command{route},
19366 but we'll spare you that.
19367
19368 The available fields of this data type are as follows:
19369
19370 @table @asis
19371 @item @code{addresses}
19372 @itemx @code{links} (default: @code{'()})
19373 @itemx @code{routes} (default: @code{'()})
19374 The list of @code{network-address}, @code{network-link}, and
19375 @code{network-route} records for this network (see below).
19376
19377 @item @code{name-servers} (default: @code{'()})
19378 The list of IP addresses (strings) of domain name servers. These IP
19379 addresses go to @file{/etc/resolv.conf}.
19380
19381 @item @code{provision} (default: @code{'(networking)})
19382 If true, this should be a list of symbols for the Shepherd service
19383 corresponding to this network configuration.
19384
19385 @item @code{requirement} (default @code{'()})
19386 The list of Shepherd services depended on.
19387 @end table
19388 @end deftp
19389
19390 @deftp {Data Type} network-address
19391 This is the data type representing the IP address of a network
19392 interface.
19393
19394 @table @code
19395 @item device
19396 The name of the network interface for this address---e.g.,
19397 @code{"eno1"}.
19398
19399 @item value
19400 The actual IP address and network mask, in
19401 @uref{https://en.wikipedia.org/wiki/CIDR#CIDR_notation, @acronym{CIDR,
19402 Classless Inter-Domain Routing} notation}, as a string.
19403
19404 For example, @code{"10.0.2.15/24"} denotes IPv4 address 10.0.2.15 on a
19405 24-bit sub-network---all 10.0.2.@var{x} addresses are on the same local
19406 network.
19407
19408 @item ipv6?
19409 Whether @code{value} denotes an IPv6 address. By default this is
19410 automatically determined.
19411 @end table
19412 @end deftp
19413
19414 @deftp {Data Type} network-route
19415 This is the data type representing a network route.
19416
19417 @table @asis
19418 @item @code{destination}
19419 The route destination (a string), either an IP address and network mask
19420 or @code{"default"} to denote the default route.
19421
19422 @item @code{source} (default: @code{#f})
19423 The route source.
19424
19425 @item @code{device} (default: @code{#f})
19426 The device used for this route---e.g., @code{"eno2"}.
19427
19428 @item @code{ipv6?} (default: auto)
19429 Whether this is an IPv6 route. By default this is automatically
19430 determined based on @code{destination} or @code{gateway}.
19431
19432 @item @code{gateway} (default: @code{#f})
19433 IP address (a string) through which traffic is routed.
19434 @end table
19435 @end deftp
19436
19437 @deftp {Data Type} network-link
19438 Data type for a network link (@pxref{Link,,, guile-netlink,
19439 Guile-Netlink Manual}).
19440
19441 @table @code
19442 @item name
19443 The name of the link---e.g., @code{"v0p0"}.
19444
19445 @item type
19446 A symbol denoting the type of the link---e.g., @code{'veth}.
19447
19448 @item arguments
19449 List of arguments for this type of link.
19450 @end table
19451 @end deftp
19452
19453 @cindex loopback device
19454 @defvr {Scheme Variable} %loopback-static-networking
19455 This is the @code{static-networking} record representing the ``loopback
19456 device'', @code{lo}, for IP addresses 127.0.0.1 and ::1, and providing
19457 the @code{loopback} Shepherd service.
19458 @end defvr
19459
19460 @cindex networking, with QEMU
19461 @cindex QEMU, networking
19462 @defvr {Scheme Variable} %qemu-static-networking
19463 This is the @code{static-networking} record representing network setup
19464 when using QEMU's user-mode network stack on @code{eth0} (@pxref{Using
19465 the user mode network stack,,, QEMU, QEMU Documentation}).
19466 @end defvr
19467
19468 @cindex DHCP, networking service
19469 @defvr {Scheme Variable} dhcp-client-service-type
19470 This is the type of services that run @var{dhcp}, a Dynamic Host Configuration
19471 Protocol (DHCP) client.
19472 @end defvr
19473
19474 @deftp {Data Type} dhcp-client-configuration
19475 Data type representing the configuration of the DHCP client service.
19476
19477 @table @asis
19478 @item @code{package} (default: @code{isc-dhcp})
19479 DHCP client package to use.
19480
19481 @item @code{interfaces} (default: @code{'all})
19482 Either @code{'all} or the list of interface names that the DHCP client
19483 should listen on---e.g., @code{'("eno1")}.
19484
19485 When set to @code{'all}, the DHCP client listens on all the available
19486 non-loopback interfaces that can be activated. Otherwise the DHCP
19487 client listens only on the specified interfaces.
19488 @end table
19489 @end deftp
19490
19491 @cindex NetworkManager
19492
19493 @defvr {Scheme Variable} network-manager-service-type
19494 This is the service type for the
19495 @uref{https://wiki.gnome.org/Projects/NetworkManager, NetworkManager}
19496 service. The value for this service type is a
19497 @code{network-manager-configuration} record.
19498
19499 This service is part of @code{%desktop-services} (@pxref{Desktop
19500 Services}).
19501 @end defvr
19502
19503 @deftp {Data Type} network-manager-configuration
19504 Data type representing the configuration of NetworkManager.
19505
19506 @table @asis
19507 @item @code{network-manager} (default: @code{network-manager})
19508 The NetworkManager package to use.
19509
19510 @item @code{dns} (default: @code{"default"})
19511 Processing mode for DNS, which affects how NetworkManager uses the
19512 @code{resolv.conf} configuration file.
19513
19514 @table @samp
19515 @item default
19516 NetworkManager will update @code{resolv.conf} to reflect the nameservers
19517 provided by currently active connections.
19518
19519 @item dnsmasq
19520 NetworkManager will run @code{dnsmasq} as a local caching nameserver, using a
19521 @dfn{conditional forwarding} configuration if you are connected to a VPN, and
19522 then update @code{resolv.conf} to point to the local nameserver.
19523
19524 With this setting, you can share your network connection. For example when
19525 you want to share your network connection to another laptop @i{via} an
19526 Ethernet cable, you can open @command{nm-connection-editor} and configure the
19527 Wired connection's method for IPv4 and IPv6 to be ``Shared to other computers''
19528 and reestablish the connection (or reboot).
19529
19530 You can also set up a @dfn{host-to-guest connection} to QEMU VMs
19531 (@pxref{Installing Guix in a VM}). With a host-to-guest connection, you can
19532 e.g.@: access a Web server running on the VM (@pxref{Web Services}) from a Web
19533 browser on your host system, or connect to the VM @i{via} SSH
19534 (@pxref{Networking Services, @code{openssh-service-type}}). To set up a
19535 host-to-guest connection, run this command once:
19536
19537 @example
19538 nmcli connection add type tun \
19539 connection.interface-name tap0 \
19540 tun.mode tap tun.owner $(id -u) \
19541 ipv4.method shared \
19542 ipv4.addresses 172.28.112.1/24
19543 @end example
19544
19545 Then each time you launch your QEMU VM (@pxref{Running Guix in a VM}), pass
19546 @option{-nic tap,ifname=tap0,script=no,downscript=no} to
19547 @command{qemu-system-...}.
19548
19549 @item none
19550 NetworkManager will not modify @code{resolv.conf}.
19551 @end table
19552
19553 @item @code{vpn-plugins} (default: @code{'()})
19554 This is the list of available plugins for virtual private networks
19555 (VPNs). An example of this is the @code{network-manager-openvpn}
19556 package, which allows NetworkManager to manage VPNs @i{via} OpenVPN.
19557
19558 @end table
19559 @end deftp
19560
19561 @cindex Connman
19562 @deffn {Scheme Variable} connman-service-type
19563 This is the service type to run @url{https://01.org/connman,Connman},
19564 a network connection manager.
19565
19566 Its value must be an
19567 @code{connman-configuration} record as in this example:
19568
19569 @lisp
19570 (service connman-service-type
19571 (connman-configuration
19572 (disable-vpn? #t)))
19573 @end lisp
19574
19575 See below for details about @code{connman-configuration}.
19576 @end deffn
19577
19578 @deftp {Data Type} connman-configuration
19579 Data Type representing the configuration of connman.
19580
19581 @table @asis
19582 @item @code{connman} (default: @var{connman})
19583 The connman package to use.
19584
19585 @item @code{disable-vpn?} (default: @code{#f})
19586 When true, disable connman's vpn plugin.
19587 @end table
19588 @end deftp
19589
19590 @cindex WPA Supplicant
19591 @defvr {Scheme Variable} wpa-supplicant-service-type
19592 This is the service type to run @url{https://w1.fi/wpa_supplicant/,WPA
19593 supplicant}, an authentication daemon required to authenticate against
19594 encrypted WiFi or ethernet networks.
19595 @end defvr
19596
19597 @deftp {Data Type} wpa-supplicant-configuration
19598 Data type representing the configuration of WPA Supplicant.
19599
19600 It takes the following parameters:
19601
19602 @table @asis
19603 @item @code{wpa-supplicant} (default: @code{wpa-supplicant})
19604 The WPA Supplicant package to use.
19605
19606 @item @code{requirement} (default: @code{'(user-processes loopback syslogd)}
19607 List of services that should be started before WPA Supplicant starts.
19608
19609 @item @code{dbus?} (default: @code{#t})
19610 Whether to listen for requests on D-Bus.
19611
19612 @item @code{pid-file} (default: @code{"/var/run/wpa_supplicant.pid"})
19613 Where to store the PID file.
19614
19615 @item @code{interface} (default: @code{#f})
19616 If this is set, it must specify the name of a network interface that
19617 WPA supplicant will control.
19618
19619 @item @code{config-file} (default: @code{#f})
19620 Optional configuration file to use.
19621
19622 @item @code{extra-options} (default: @code{'()})
19623 List of additional command-line arguments to pass to the daemon.
19624 @end table
19625 @end deftp
19626
19627 @cindex ModemManager
19628 Some networking devices such as modems require special care, and this is
19629 what the services below focus on.
19630
19631 @defvr {Scheme Variable} modem-manager-service-type
19632 This is the service type for the
19633 @uref{https://wiki.gnome.org/Projects/ModemManager, ModemManager}
19634 service. The value for this service type is a
19635 @code{modem-manager-configuration} record.
19636
19637 This service is part of @code{%desktop-services} (@pxref{Desktop
19638 Services}).
19639 @end defvr
19640
19641 @deftp {Data Type} modem-manager-configuration
19642 Data type representing the configuration of ModemManager.
19643
19644 @table @asis
19645 @item @code{modem-manager} (default: @code{modem-manager})
19646 The ModemManager package to use.
19647
19648 @end table
19649 @end deftp
19650
19651 @cindex USB_ModeSwitch
19652 @cindex Modeswitching
19653
19654 @defvr {Scheme Variable} usb-modeswitch-service-type
19655 This is the service type for the
19656 @uref{https://www.draisberghof.de/usb_modeswitch/, USB_ModeSwitch}
19657 service. The value for this service type is
19658 a @code{usb-modeswitch-configuration} record.
19659
19660 When plugged in, some USB modems (and other USB devices) initially present
19661 themselves as a read-only storage medium and not as a modem. They need to be
19662 @dfn{modeswitched} before they are usable. The USB_ModeSwitch service type
19663 installs udev rules to automatically modeswitch these devices when they are
19664 plugged in.
19665
19666 This service is part of @code{%desktop-services} (@pxref{Desktop
19667 Services}).
19668 @end defvr
19669
19670 @deftp {Data Type} usb-modeswitch-configuration
19671 Data type representing the configuration of USB_ModeSwitch.
19672
19673 @table @asis
19674 @item @code{usb-modeswitch} (default: @code{usb-modeswitch})
19675 The USB_ModeSwitch package providing the binaries for modeswitching.
19676
19677 @item @code{usb-modeswitch-data} (default: @code{usb-modeswitch-data})
19678 The package providing the device data and udev rules file used by
19679 USB_ModeSwitch.
19680
19681 @item @code{config-file} (default: @code{#~(string-append #$usb-modeswitch:dispatcher "/etc/usb_modeswitch.conf")})
19682 Which config file to use for the USB_ModeSwitch dispatcher. By default the
19683 config file shipped with USB_ModeSwitch is used which disables logging to
19684 @file{/var/log} among other default settings. If set to @code{#f}, no config
19685 file is used.
19686
19687 @end table
19688 @end deftp
19689
19690
19691 @node Networking Services
19692 @subsection Networking Services
19693
19694 The @code{(gnu services networking)} module discussed in the previous
19695 section provides services for more advanced setups: providing a DHCP
19696 service for others to use, filtering packets with iptables or nftables,
19697 running a WiFi access point with @command{hostapd}, running the
19698 @command{inetd} ``superdaemon'', and more. This section describes
19699 those.
19700
19701 @deffn {Scheme Procedure} dhcpd-service-type
19702 This type defines a service that runs a DHCP daemon. To create a
19703 service of this type, you must supply a @code{<dhcpd-configuration>}.
19704 For example:
19705
19706 @lisp
19707 (service dhcpd-service-type
19708 (dhcpd-configuration
19709 (config-file (local-file "my-dhcpd.conf"))
19710 (interfaces '("enp0s25"))))
19711 @end lisp
19712 @end deffn
19713
19714 @deftp {Data Type} dhcpd-configuration
19715 @table @asis
19716 @item @code{package} (default: @code{isc-dhcp})
19717 The package that provides the DHCP daemon. This package is expected to
19718 provide the daemon at @file{sbin/dhcpd} relative to its output
19719 directory. The default package is the
19720 @uref{https://www.isc.org/dhcp/, ISC's DHCP server}.
19721 @item @code{config-file} (default: @code{#f})
19722 The configuration file to use. This is required. It will be passed to
19723 @code{dhcpd} via its @code{-cf} option. This may be any ``file-like''
19724 object (@pxref{G-Expressions, file-like objects}). See @code{man
19725 dhcpd.conf} for details on the configuration file syntax.
19726 @item @code{version} (default: @code{"4"})
19727 The DHCP version to use. The ISC DHCP server supports the values ``4'',
19728 ``6'', and ``4o6''. These correspond to the @code{dhcpd} program
19729 options @code{-4}, @code{-6}, and @code{-4o6}. See @code{man dhcpd} for
19730 details.
19731 @item @code{run-directory} (default: @code{"/run/dhcpd"})
19732 The run directory to use. At service activation time, this directory
19733 will be created if it does not exist.
19734 @item @code{pid-file} (default: @code{"/run/dhcpd/dhcpd.pid"})
19735 The PID file to use. This corresponds to the @code{-pf} option of
19736 @code{dhcpd}. See @code{man dhcpd} for details.
19737 @item @code{interfaces} (default: @code{'()})
19738 The names of the network interfaces on which dhcpd should listen for
19739 broadcasts. If this list is not empty, then its elements (which must be
19740 strings) will be appended to the @code{dhcpd} invocation when starting
19741 the daemon. It may not be necessary to explicitly specify any
19742 interfaces here; see @code{man dhcpd} for details.
19743 @end table
19744 @end deftp
19745
19746 @cindex hostapd service, for Wi-Fi access points
19747 @cindex Wi-Fi access points, hostapd service
19748 @defvr {Scheme Variable} hostapd-service-type
19749 This is the service type to run the @uref{https://w1.fi/hostapd/,
19750 hostapd} daemon to set up WiFi (IEEE 802.11) access points and
19751 authentication servers. Its associated value must be a
19752 @code{hostapd-configuration} as shown below:
19753
19754 @lisp
19755 ;; Use wlan1 to run the access point for "My Network".
19756 (service hostapd-service-type
19757 (hostapd-configuration
19758 (interface "wlan1")
19759 (ssid "My Network")
19760 (channel 12)))
19761 @end lisp
19762 @end defvr
19763
19764 @deftp {Data Type} hostapd-configuration
19765 This data type represents the configuration of the hostapd service, with
19766 the following fields:
19767
19768 @table @asis
19769 @item @code{package} (default: @code{hostapd})
19770 The hostapd package to use.
19771
19772 @item @code{interface} (default: @code{"wlan0"})
19773 The network interface to run the WiFi access point.
19774
19775 @item @code{ssid}
19776 The SSID (@dfn{service set identifier}), a string that identifies this
19777 network.
19778
19779 @item @code{broadcast-ssid?} (default: @code{#t})
19780 Whether to broadcast this SSID.
19781
19782 @item @code{channel} (default: @code{1})
19783 The WiFi channel to use.
19784
19785 @item @code{driver} (default: @code{"nl80211"})
19786 The driver interface type. @code{"nl80211"} is used with all Linux
19787 mac80211 drivers. Use @code{"none"} if building hostapd as a standalone
19788 RADIUS server that does # not control any wireless/wired driver.
19789
19790 @item @code{extra-settings} (default: @code{""})
19791 Extra settings to append as-is to the hostapd configuration file. See
19792 @uref{https://w1.fi/cgit/hostap/plain/hostapd/hostapd.conf} for the
19793 configuration file reference.
19794 @end table
19795 @end deftp
19796
19797 @defvr {Scheme Variable} simulated-wifi-service-type
19798 This is the type of a service to simulate WiFi networking, which can be
19799 useful in virtual machines for testing purposes. The service loads the
19800 Linux kernel
19801 @uref{https://www.kernel.org/doc/html/latest/networking/mac80211_hwsim/mac80211_hwsim.html,
19802 @code{mac80211_hwsim} module} and starts hostapd to create a pseudo WiFi
19803 network that can be seen on @code{wlan0}, by default.
19804
19805 The service's value is a @code{hostapd-configuration} record.
19806 @end defvr
19807
19808
19809 @cindex iptables
19810 @defvr {Scheme Variable} iptables-service-type
19811 This is the service type to set up an iptables configuration. iptables is a
19812 packet filtering framework supported by the Linux kernel. This service
19813 supports configuring iptables for both IPv4 and IPv6. A simple example
19814 configuration rejecting all incoming connections except those to the ssh port
19815 22 is shown below.
19816
19817 @lisp
19818 (service iptables-service-type
19819 (iptables-configuration
19820 (ipv4-rules (plain-file "iptables.rules" "*filter
19821 :INPUT ACCEPT
19822 :FORWARD ACCEPT
19823 :OUTPUT ACCEPT
19824 -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
19825 -A INPUT -p tcp --dport 22 -j ACCEPT
19826 -A INPUT -j REJECT --reject-with icmp-port-unreachable
19827 COMMIT
19828 "))
19829 (ipv6-rules (plain-file "ip6tables.rules" "*filter
19830 :INPUT ACCEPT
19831 :FORWARD ACCEPT
19832 :OUTPUT ACCEPT
19833 -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
19834 -A INPUT -p tcp --dport 22 -j ACCEPT
19835 -A INPUT -j REJECT --reject-with icmp6-port-unreachable
19836 COMMIT
19837 "))))
19838 @end lisp
19839 @end defvr
19840
19841 @deftp {Data Type} iptables-configuration
19842 The data type representing the configuration of iptables.
19843
19844 @table @asis
19845 @item @code{iptables} (default: @code{iptables})
19846 The iptables package that provides @code{iptables-restore} and
19847 @code{ip6tables-restore}.
19848 @item @code{ipv4-rules} (default: @code{%iptables-accept-all-rules})
19849 The iptables rules to use. It will be passed to @code{iptables-restore}.
19850 This may be any ``file-like'' object (@pxref{G-Expressions, file-like
19851 objects}).
19852 @item @code{ipv6-rules} (default: @code{%iptables-accept-all-rules})
19853 The ip6tables rules to use. It will be passed to @code{ip6tables-restore}.
19854 This may be any ``file-like'' object (@pxref{G-Expressions, file-like
19855 objects}).
19856 @end table
19857 @end deftp
19858
19859 @cindex nftables
19860 @defvr {Scheme Variable} nftables-service-type
19861 This is the service type to set up a nftables configuration. nftables is a
19862 netfilter project that aims to replace the existing iptables, ip6tables,
19863 arptables and ebtables framework. It provides a new packet filtering
19864 framework, a new user-space utility @command{nft}, and a compatibility layer
19865 for iptables. This service comes with a default ruleset
19866 @code{%default-nftables-ruleset} that rejecting all incoming connections
19867 except those to the ssh port 22. To use it, simply write:
19868
19869 @lisp
19870 (service nftables-service-type)
19871 @end lisp
19872 @end defvr
19873
19874 @deftp {Data Type} nftables-configuration
19875 The data type representing the configuration of nftables.
19876
19877 @table @asis
19878 @item @code{package} (default: @code{nftables})
19879 The nftables package that provides @command{nft}.
19880 @item @code{ruleset} (default: @code{%default-nftables-ruleset})
19881 The nftables ruleset to use. This may be any ``file-like'' object
19882 (@pxref{G-Expressions, file-like objects}).
19883 @end table
19884 @end deftp
19885
19886 @cindex NTP (Network Time Protocol), service
19887 @cindex ntpd, service for the Network Time Protocol daemon
19888 @cindex real time clock
19889 @defvr {Scheme Variable} ntp-service-type
19890 This is the type of the service running the @uref{https://www.ntp.org,
19891 Network Time Protocol (NTP)} daemon, @command{ntpd}. The daemon will keep the
19892 system clock synchronized with that of the specified NTP servers.
19893
19894 The value of this service is an @code{ntpd-configuration} object, as described
19895 below.
19896 @end defvr
19897
19898 @deftp {Data Type} ntp-configuration
19899 This is the data type for the NTP service configuration.
19900
19901 @table @asis
19902 @item @code{servers} (default: @code{%ntp-servers})
19903 This is the list of servers (@code{<ntp-server>} records) with which
19904 @command{ntpd} will be synchronized. See the @code{ntp-server} data type
19905 definition below.
19906
19907 @item @code{allow-large-adjustment?} (default: @code{#t})
19908 This determines whether @command{ntpd} is allowed to make an initial
19909 adjustment of more than 1,000 seconds.
19910
19911 @item @code{ntp} (default: @code{ntp})
19912 The NTP package to use.
19913 @end table
19914 @end deftp
19915
19916 @defvr {Scheme Variable} %ntp-servers
19917 List of host names used as the default NTP servers. These are servers of the
19918 @uref{https://www.ntppool.org/en/, NTP Pool Project}.
19919 @end defvr
19920
19921 @deftp {Data Type} ntp-server
19922 The data type representing the configuration of a NTP server.
19923
19924 @table @asis
19925 @item @code{type} (default: @code{'server})
19926 The type of the NTP server, given as a symbol. One of @code{'pool},
19927 @code{'server}, @code{'peer}, @code{'broadcast} or @code{'manycastclient}.
19928
19929 @item @code{address}
19930 The address of the server, as a string.
19931
19932 @item @code{options}
19933 NTPD options to use with that specific server, given as a list of option names
19934 and/or of option names and values tuples. The following example define a server
19935 to use with the options @option{iburst} and @option{prefer}, as well as
19936 @option{version} 3 and a @option{maxpoll} time of 16 seconds.
19937
19938 @example
19939 (ntp-server
19940 (type 'server)
19941 (address "some.ntp.server.org")
19942 (options `(iburst (version 3) (maxpoll 16) prefer))))
19943 @end example
19944 @end table
19945 @end deftp
19946
19947 @cindex OpenNTPD
19948 @deffn {Scheme Procedure} openntpd-service-type
19949 Run the @command{ntpd}, the Network Time Protocol (NTP) daemon, as implemented
19950 by @uref{http://www.openntpd.org, OpenNTPD}. The daemon will keep the system
19951 clock synchronized with that of the given servers.
19952
19953 @lisp
19954 (service
19955 openntpd-service-type
19956 (openntpd-configuration
19957 (listen-on '("127.0.0.1" "::1"))
19958 (sensor '("udcf0 correction 70000"))
19959 (constraint-from '("www.gnu.org"))
19960 (constraints-from '("https://www.google.com/"))))
19961
19962 @end lisp
19963 @end deffn
19964
19965 @defvr {Scheme Variable} %openntpd-servers
19966 This variable is a list of the server addresses defined in
19967 @code{%ntp-servers}.
19968 @end defvr
19969
19970 @deftp {Data Type} openntpd-configuration
19971 @table @asis
19972 @item @code{openntpd} (default: @code{(file-append openntpd "/sbin/ntpd")})
19973 The openntpd executable to use.
19974 @item @code{listen-on} (default: @code{'("127.0.0.1" "::1")})
19975 A list of local IP addresses or hostnames the ntpd daemon should listen on.
19976 @item @code{query-from} (default: @code{'()})
19977 A list of local IP address the ntpd daemon should use for outgoing queries.
19978 @item @code{sensor} (default: @code{'()})
19979 Specify a list of timedelta sensor devices ntpd should use. @code{ntpd}
19980 will listen to each sensor that actually exists and ignore non-existent ones.
19981 See @uref{https://man.openbsd.org/ntpd.conf, upstream documentation} for more
19982 information.
19983 @item @code{server} (default: @code{'()})
19984 Specify a list of IP addresses or hostnames of NTP servers to synchronize to.
19985 @item @code{servers} (default: @code{%openntp-servers})
19986 Specify a list of IP addresses or hostnames of NTP pools to synchronize to.
19987 @item @code{constraint-from} (default: @code{'()})
19988 @code{ntpd} can be configured to query the ‘Date’ from trusted HTTPS servers via TLS.
19989 This time information is not used for precision but acts as an authenticated
19990 constraint, thereby reducing the impact of unauthenticated NTP
19991 man-in-the-middle attacks.
19992 Specify a list of URLs, IP addresses or hostnames of HTTPS servers to provide
19993 a constraint.
19994 @item @code{constraints-from} (default: @code{'()})
19995 As with constraint from, specify a list of URLs, IP addresses or hostnames of
19996 HTTPS servers to provide a constraint. Should the hostname resolve to multiple
19997 IP addresses, @code{ntpd} will calculate a median constraint from all of them.
19998 @end table
19999 @end deftp
20000
20001 @cindex inetd
20002 @deffn {Scheme variable} inetd-service-type
20003 This service runs the @command{inetd} (@pxref{inetd invocation,,,
20004 inetutils, GNU Inetutils}) daemon. @command{inetd} listens for
20005 connections on internet sockets, and lazily starts the specified server
20006 program when a connection is made on one of these sockets.
20007
20008 The value of this service is an @code{inetd-configuration} object. The
20009 following example configures the @command{inetd} daemon to provide the
20010 built-in @command{echo} service, as well as an smtp service which
20011 forwards smtp traffic over ssh to a server @code{smtp-server} behind a
20012 gateway @code{hostname}:
20013
20014 @lisp
20015 (service
20016 inetd-service-type
20017 (inetd-configuration
20018 (entries (list
20019 (inetd-entry
20020 (name "echo")
20021 (socket-type 'stream)
20022 (protocol "tcp")
20023 (wait? #f)
20024 (user "root"))
20025 (inetd-entry
20026 (node "127.0.0.1")
20027 (name "smtp")
20028 (socket-type 'stream)
20029 (protocol "tcp")
20030 (wait? #f)
20031 (user "root")
20032 (program (file-append openssh "/bin/ssh"))
20033 (arguments
20034 '("ssh" "-qT" "-i" "/path/to/ssh_key"
20035 "-W" "smtp-server:25" "user@@hostname")))))))
20036 @end lisp
20037
20038 See below for more details about @code{inetd-configuration}.
20039 @end deffn
20040
20041 @deftp {Data Type} inetd-configuration
20042 Data type representing the configuration of @command{inetd}.
20043
20044 @table @asis
20045 @item @code{program} (default: @code{(file-append inetutils "/libexec/inetd")})
20046 The @command{inetd} executable to use.
20047
20048 @item @code{entries} (default: @code{'()})
20049 A list of @command{inetd} service entries. Each entry should be created
20050 by the @code{inetd-entry} constructor.
20051 @end table
20052 @end deftp
20053
20054 @deftp {Data Type} inetd-entry
20055 Data type representing an entry in the @command{inetd} configuration.
20056 Each entry corresponds to a socket where @command{inetd} will listen for
20057 requests.
20058
20059 @table @asis
20060 @item @code{node} (default: @code{#f})
20061 Optional string, a comma-separated list of local addresses
20062 @command{inetd} should use when listening for this service.
20063 @xref{Configuration file,,, inetutils, GNU Inetutils} for a complete
20064 description of all options.
20065 @item @code{name}
20066 A string, the name must correspond to an entry in @code{/etc/services}.
20067 @item @code{socket-type}
20068 One of @code{'stream}, @code{'dgram}, @code{'raw}, @code{'rdm} or
20069 @code{'seqpacket}.
20070 @item @code{protocol}
20071 A string, must correspond to an entry in @code{/etc/protocols}.
20072 @item @code{wait?} (default: @code{#t})
20073 Whether @command{inetd} should wait for the server to exit before
20074 listening to new service requests.
20075 @item @code{user}
20076 A string containing the user (and, optionally, group) name of the user
20077 as whom the server should run. The group name can be specified in a
20078 suffix, separated by a colon or period, i.e.@: @code{"user"},
20079 @code{"user:group"} or @code{"user.group"}.
20080 @item @code{program} (default: @code{"internal"})
20081 The server program which will serve the requests, or @code{"internal"}
20082 if @command{inetd} should use a built-in service.
20083 @item @code{arguments} (default: @code{'()})
20084 A list strings or file-like objects, which are the server program's
20085 arguments, starting with the zeroth argument, i.e.@: the name of the
20086 program itself. For @command{inetd}'s internal services, this entry
20087 must be @code{'()} or @code{'("internal")}.
20088 @end table
20089
20090 @xref{Configuration file,,, inetutils, GNU Inetutils} for a more
20091 detailed discussion of each configuration field.
20092 @end deftp
20093
20094 @cindex opendht, distributed hash table network service
20095 @cindex dhtproxy, for use with jami
20096 @defvr {Scheme Variable} opendht-service-type
20097 This is the type of the service running a @uref{https://opendht.net,
20098 OpenDHT} node, @command{dhtnode}. The daemon can be used to host your
20099 own proxy service to the distributed hash table (DHT), for example to
20100 connect to with Jami, among other applications.
20101
20102 @quotation Important
20103 When using the OpenDHT proxy server, the IP addresses it ``sees'' from
20104 the clients should be addresses reachable from other peers. In practice
20105 this means that a publicly reachable address is best suited for a proxy
20106 server, outside of your private network. For example, hosting the proxy
20107 server on a IPv4 private local network and exposing it via port
20108 forwarding could work for external peers, but peers local to the proxy
20109 would have their private addresses shared with the external peers,
20110 leading to connectivity problems.
20111 @end quotation
20112
20113 The value of this service is a @code{opendht-configuration} object, as
20114 described below.
20115 @end defvr
20116
20117 @c The fields documentation has been auto-generated using the
20118 @c configuration->documentation procedure from
20119 @c (gnu services configuration).
20120 @deftp {Data Type} opendht-configuration
20121 Available @code{opendht-configuration} fields are:
20122
20123 @table @asis
20124 @item @code{opendht} (default: @code{opendht}) (type: file-like)
20125 The @code{opendht} package to use.
20126
20127 @item @code{peer-discovery?} (default: @code{#f}) (type: boolean)
20128 Whether to enable the multicast local peer discovery mechanism.
20129
20130 @item @code{enable-logging?} (default: @code{#f}) (type: boolean)
20131 Whether to enable logging messages to syslog. It is disabled by default
20132 as it is rather verbose.
20133
20134 @item @code{debug?} (default: @code{#f}) (type: boolean)
20135 Whether to enable debug-level logging messages. This has no effect if
20136 logging is disabled.
20137
20138 @item @code{bootstrap-host} (default: @code{"bootstrap.jami.net:4222"}) (type: maybe-string)
20139 The node host name that is used to make the first connection to the
20140 network. A specific port value can be provided by appending the
20141 @code{:PORT} suffix. By default, it uses the Jami bootstrap nodes, but
20142 any host can be specified here. It's also possible to disable
20143 bootstrapping by explicitly setting this field to the
20144 @code{%unset-value} value.
20145
20146 @item @code{port} (default: @code{4222}) (type: maybe-number)
20147 The UDP port to bind to. When left unspecified, an available port is
20148 automatically selected.
20149
20150 @item @code{proxy-server-port} (type: maybe-number)
20151 Spawn a proxy server listening on the specified port.
20152
20153 @item @code{proxy-server-port-tls} (type: maybe-number)
20154 Spawn a proxy server listening to TLS connections on the specified port.
20155
20156 @end table
20157 @end deftp
20158
20159 @cindex Tor
20160 @defvr {Scheme Variable} tor-service-type
20161 This is the type for a service that runs the @uref{https://torproject.org,
20162 Tor} anonymous networking daemon. The service is configured using a
20163 @code{<tor-configuration>} record. By default, the Tor daemon runs as the
20164 @code{tor} unprivileged user, which is a member of the @code{tor} group.
20165
20166 @end defvr
20167
20168 @deftp {Data Type} tor-configuration
20169 @table @asis
20170 @item @code{tor} (default: @code{tor})
20171 The package that provides the Tor daemon. This package is expected to provide
20172 the daemon at @file{bin/tor} relative to its output directory. The default
20173 package is the @uref{https://www.torproject.org, Tor Project's}
20174 implementation.
20175
20176 @item @code{config-file} (default: @code{(plain-file "empty" "")})
20177 The configuration file to use. It will be appended to a default configuration
20178 file, and the final configuration file will be passed to @code{tor} via its
20179 @code{-f} option. This may be any ``file-like'' object (@pxref{G-Expressions,
20180 file-like objects}). See @code{man tor} for details on the configuration file
20181 syntax.
20182
20183 @item @code{hidden-services} (default: @code{'()})
20184 The list of @code{<hidden-service>} records to use. For any hidden service
20185 you include in this list, appropriate configuration to enable the hidden
20186 service will be automatically added to the default configuration file. You
20187 may conveniently create @code{<hidden-service>} records using the
20188 @code{tor-hidden-service} procedure described below.
20189
20190 @item @code{socks-socket-type} (default: @code{'tcp})
20191 The default socket type that Tor should use for its SOCKS socket. This must
20192 be either @code{'tcp} or @code{'unix}. If it is @code{'tcp}, then by default
20193 Tor will listen on TCP port 9050 on the loopback interface (i.e., localhost).
20194 If it is @code{'unix}, then Tor will listen on the UNIX domain socket
20195 @file{/var/run/tor/socks-sock}, which will be made writable by members of the
20196 @code{tor} group.
20197
20198 If you want to customize the SOCKS socket in more detail, leave
20199 @code{socks-socket-type} at its default value of @code{'tcp} and use
20200 @code{config-file} to override the default by providing your own
20201 @code{SocksPort} option.
20202
20203 @item @code{control-socket?} (default: @code{#f})
20204 Whether or not to provide a ``control socket'' by which Tor can be
20205 controlled to, for instance, dynamically instantiate tor onion services.
20206 If @code{#t}, Tor will listen for control commands on the UNIX domain socket
20207 @file{/var/run/tor/control-sock}, which will be made writable by members of the
20208 @code{tor} group.
20209
20210 @end table
20211 @end deftp
20212
20213 @cindex hidden service
20214 @deffn {Scheme Procedure} tor-hidden-service @var{name} @var{mapping}
20215 Define a new Tor @dfn{hidden service} called @var{name} and implementing
20216 @var{mapping}. @var{mapping} is a list of port/host tuples, such as:
20217
20218 @example
20219 '((22 "127.0.0.1:22")
20220 (80 "127.0.0.1:8080"))
20221 @end example
20222
20223 In this example, port 22 of the hidden service is mapped to local port 22, and
20224 port 80 is mapped to local port 8080.
20225
20226 This creates a @file{/var/lib/tor/hidden-services/@var{name}} directory, where
20227 the @file{hostname} file contains the @code{.onion} host name for the hidden
20228 service.
20229
20230 See @uref{https://www.torproject.org/docs/tor-hidden-service.html.en, the Tor
20231 project's documentation} for more information.
20232 @end deffn
20233
20234 The @code{(gnu services rsync)} module provides the following services:
20235
20236 You might want an rsync daemon if you have files that you want available
20237 so anyone (or just yourself) can download existing files or upload new
20238 files.
20239
20240 @deffn {Scheme Variable} rsync-service-type
20241 This is the service type for the @uref{https://rsync.samba.org, rsync} daemon,
20242 The value for this service type is a
20243 @command{rsync-configuration} record as in this example:
20244
20245 @lisp
20246 ;; Export two directories over rsync. By default rsync listens on
20247 ;; all the network interfaces.
20248 (service rsync-service-type
20249 (rsync-configuration
20250 (modules (list (rsync-module
20251 (name "music")
20252 (file-name "/srv/zik")
20253 (read-only? #f))
20254 (rsync-module
20255 (name "movies")
20256 (file-name "/home/charlie/movies"))))))
20257 @end lisp
20258
20259 See below for details about @code{rsync-configuration}.
20260 @end deffn
20261
20262 @deftp {Data Type} rsync-configuration
20263 Data type representing the configuration for @code{rsync-service}.
20264
20265 @table @asis
20266 @item @code{package} (default: @var{rsync})
20267 @code{rsync} package to use.
20268
20269 @item @code{address} (default: @code{#f})
20270 IP address on which @command{rsync} listens for incoming connections.
20271 If unspecified, it defaults to listening on all available addresses.
20272
20273 @item @code{port-number} (default: @code{873})
20274 TCP port on which @command{rsync} listens for incoming connections. If port
20275 is less than @code{1024} @command{rsync} needs to be started as the
20276 @code{root} user and group.
20277
20278 @item @code{pid-file} (default: @code{"/var/run/rsyncd/rsyncd.pid"})
20279 Name of the file where @command{rsync} writes its PID.
20280
20281 @item @code{lock-file} (default: @code{"/var/run/rsyncd/rsyncd.lock"})
20282 Name of the file where @command{rsync} writes its lock file.
20283
20284 @item @code{log-file} (default: @code{"/var/log/rsyncd.log"})
20285 Name of the file where @command{rsync} writes its log file.
20286
20287 @item @code{user} (default: @code{"root"})
20288 Owner of the @code{rsync} process.
20289
20290 @item @code{group} (default: @code{"root"})
20291 Group of the @code{rsync} process.
20292
20293 @item @code{uid} (default: @code{"rsyncd"})
20294 User name or user ID that file transfers to and from that module should take
20295 place as when the daemon was run as @code{root}.
20296
20297 @item @code{gid} (default: @code{"rsyncd"})
20298 Group name or group ID that will be used when accessing the module.
20299
20300 @item @code{modules} (default: @code{%default-modules})
20301 List of ``modules''---i.e., directories exported over rsync. Each
20302 element must be a @code{rsync-module} record, as described below.
20303 @end table
20304 @end deftp
20305
20306 @deftp {Data Type} rsync-module
20307 This is the data type for rsync ``modules''. A module is a directory
20308 exported over the rsync protocol. The available fields are as follows:
20309
20310 @table @asis
20311 @item @code{name}
20312 The module name. This is the name that shows up in URLs. For example,
20313 if the module is called @code{music}, the corresponding URL will be
20314 @code{rsync://host.example.org/music}.
20315
20316 @item @code{file-name}
20317 Name of the directory being exported.
20318
20319 @item @code{comment} (default: @code{""})
20320 Comment associated with the module. Client user interfaces may display
20321 it when they obtain the list of available modules.
20322
20323 @item @code{read-only?} (default: @code{#t})
20324 Whether or not client will be able to upload files. If this is false,
20325 the uploads will be authorized if permissions on the daemon side permit
20326 it.
20327
20328 @item @code{chroot?} (default: @code{#t})
20329 When this is true, the rsync daemon changes root to the module's
20330 directory before starting file transfers with the client. This improves
20331 security, but requires rsync to run as root.
20332
20333 @item @code{timeout} (default: @code{300})
20334 Idle time in seconds after which the daemon closes a connection with the
20335 client.
20336 @end table
20337 @end deftp
20338
20339 The @code{(gnu services syncthing)} module provides the following services:
20340 @cindex syncthing
20341
20342 You might want a syncthing daemon if you have files between two or more
20343 computers and want to sync them in real time, safely protected from
20344 prying eyes.
20345
20346 @deffn {Scheme Variable} syncthing-service-type
20347 This is the service type for the @uref{https://syncthing.net/,
20348 syncthing} daemon, The value for this service type is a
20349 @command{syncthing-configuration} record as in this example:
20350
20351 @lisp
20352 (service syncthing-service-type
20353 (syncthing-configuration (user "alice")))
20354 @end lisp
20355
20356 See below for details about @code{syncthing-configuration}.
20357
20358 @deftp {Data Type} syncthing-configuration
20359 Data type representing the configuration for @code{syncthing-service-type}.
20360
20361 @table @asis
20362 @item @code{syncthing} (default: @var{syncthing})
20363 @code{syncthing} package to use.
20364
20365 @item @code{arguments} (default: @var{'()})
20366 List of command-line arguments passing to @code{syncthing} binary.
20367
20368 @item @code{logflags} (default: @var{0})
20369 Sum of logging flags, see
20370 @uref{https://docs.syncthing.net/users/syncthing.html#cmdoption-logflags, Syncthing documentation logflags}.
20371
20372 @item @code{user} (default: @var{#f})
20373 The user as which the Syncthing service is to be run.
20374 This assumes that the specified user exists.
20375
20376 @item @code{group} (default: @var{"users"})
20377 The group as which the Syncthing service is to be run.
20378 This assumes that the specified group exists.
20379
20380 @item @code{home} (default: @var{#f})
20381 Common configuration and data directory. The default configuration
20382 directory is @file{$HOME} of the specified Syncthing @code{user}.
20383
20384 @end table
20385 @end deftp
20386 @end deffn
20387
20388 Furthermore, @code{(gnu services ssh)} provides the following services.
20389 @cindex SSH
20390 @cindex SSH server
20391
20392 @deffn {Scheme Procedure} lsh-service [#:host-key "/etc/lsh/host-key"] @
20393 [#:daemonic? #t] [#:interfaces '()] [#:port-number 22] @
20394 [#:allow-empty-passwords? #f] [#:root-login? #f] @
20395 [#:syslog-output? #t] [#:x11-forwarding? #t] @
20396 [#:tcp/ip-forwarding? #t] [#:password-authentication? #t] @
20397 [#:public-key-authentication? #t] [#:initialize? #t]
20398 Run the @command{lshd} program from @var{lsh} to listen on port @var{port-number}.
20399 @var{host-key} must designate a file containing the host key, and readable
20400 only by root.
20401
20402 When @var{daemonic?} is true, @command{lshd} will detach from the
20403 controlling terminal and log its output to syslogd, unless one sets
20404 @var{syslog-output?} to false. Obviously, it also makes lsh-service
20405 depend on existence of syslogd service. When @var{pid-file?} is true,
20406 @command{lshd} writes its PID to the file called @var{pid-file}.
20407
20408 When @var{initialize?} is true, automatically create the seed and host key
20409 upon service activation if they do not exist yet. This may take long and
20410 require interaction.
20411
20412 When @var{initialize?} is false, it is up to the user to initialize the
20413 randomness generator (@pxref{lsh-make-seed,,, lsh, LSH Manual}), and to create
20414 a key pair with the private key stored in file @var{host-key} (@pxref{lshd
20415 basics,,, lsh, LSH Manual}).
20416
20417 When @var{interfaces} is empty, lshd listens for connections on all the
20418 network interfaces; otherwise, @var{interfaces} must be a list of host names
20419 or addresses.
20420
20421 @var{allow-empty-passwords?} specifies whether to accept log-ins with empty
20422 passwords, and @var{root-login?} specifies whether to accept log-ins as
20423 root.
20424
20425 The other options should be self-descriptive.
20426 @end deffn
20427
20428 @cindex SSH
20429 @cindex SSH server
20430 @deffn {Scheme Variable} openssh-service-type
20431 This is the type for the @uref{http://www.openssh.org, OpenSSH} secure
20432 shell daemon, @command{sshd}. Its value must be an
20433 @code{openssh-configuration} record as in this example:
20434
20435 @lisp
20436 (service openssh-service-type
20437 (openssh-configuration
20438 (x11-forwarding? #t)
20439 (permit-root-login 'prohibit-password)
20440 (authorized-keys
20441 `(("alice" ,(local-file "alice.pub"))
20442 ("bob" ,(local-file "bob.pub"))))))
20443 @end lisp
20444
20445 See below for details about @code{openssh-configuration}.
20446
20447 This service can be extended with extra authorized keys, as in this
20448 example:
20449
20450 @lisp
20451 (service-extension openssh-service-type
20452 (const `(("charlie"
20453 ,(local-file "charlie.pub")))))
20454 @end lisp
20455 @end deffn
20456
20457 @deftp {Data Type} openssh-configuration
20458 This is the configuration record for OpenSSH's @command{sshd}.
20459
20460 @table @asis
20461 @item @code{openssh} (default @var{openssh})
20462 The OpenSSH package to use.
20463
20464 @item @code{pid-file} (default: @code{"/var/run/sshd.pid"})
20465 Name of the file where @command{sshd} writes its PID.
20466
20467 @item @code{port-number} (default: @code{22})
20468 TCP port on which @command{sshd} listens for incoming connections.
20469
20470 @item @code{max-connections} (default: @code{200})
20471 Hard limit on the maximum number of simultaneous client connections,
20472 enforced by the inetd-style Shepherd service (@pxref{Service De- and
20473 Constructors, @code{make-inetd-constructor},, shepherd, The GNU Shepherd
20474 Manual}).
20475
20476 @item @code{permit-root-login} (default: @code{#f})
20477 This field determines whether and when to allow logins as root. If
20478 @code{#f}, root logins are disallowed; if @code{#t}, they are allowed.
20479 If it's the symbol @code{'prohibit-password}, then root logins are
20480 permitted but not with password-based authentication.
20481
20482 @item @code{allow-empty-passwords?} (default: @code{#f})
20483 When true, users with empty passwords may log in. When false, they may
20484 not.
20485
20486 @item @code{password-authentication?} (default: @code{#t})
20487 When true, users may log in with their password. When false, they have
20488 other authentication methods.
20489
20490 @item @code{public-key-authentication?} (default: @code{#t})
20491 When true, users may log in using public key authentication. When
20492 false, users have to use other authentication method.
20493
20494 Authorized public keys are stored in @file{~/.ssh/authorized_keys}.
20495 This is used only by protocol version 2.
20496
20497 @item @code{x11-forwarding?} (default: @code{#f})
20498 When true, forwarding of X11 graphical client connections is
20499 enabled---in other words, @command{ssh} options @option{-X} and
20500 @option{-Y} will work.
20501
20502 @item @code{allow-agent-forwarding?} (default: @code{#t})
20503 Whether to allow agent forwarding.
20504
20505 @item @code{allow-tcp-forwarding?} (default: @code{#t})
20506 Whether to allow TCP forwarding.
20507
20508 @item @code{gateway-ports?} (default: @code{#f})
20509 Whether to allow gateway ports.
20510
20511 @item @code{challenge-response-authentication?} (default: @code{#f})
20512 Specifies whether challenge response authentication is allowed (e.g.@: via
20513 PAM).
20514
20515 @item @code{use-pam?} (default: @code{#t})
20516 Enables the Pluggable Authentication Module interface. If set to
20517 @code{#t}, this will enable PAM authentication using
20518 @code{challenge-response-authentication?} and
20519 @code{password-authentication?}, in addition to PAM account and session
20520 module processing for all authentication types.
20521
20522 Because PAM challenge response authentication usually serves an
20523 equivalent role to password authentication, you should disable either
20524 @code{challenge-response-authentication?} or
20525 @code{password-authentication?}.
20526
20527 @item @code{print-last-log?} (default: @code{#t})
20528 Specifies whether @command{sshd} should print the date and time of the
20529 last user login when a user logs in interactively.
20530
20531 @item @code{subsystems} (default: @code{'(("sftp" "internal-sftp"))})
20532 Configures external subsystems (e.g.@: file transfer daemon).
20533
20534 This is a list of two-element lists, each of which containing the
20535 subsystem name and a command (with optional arguments) to execute upon
20536 subsystem request.
20537
20538 The command @command{internal-sftp} implements an in-process SFTP
20539 server. Alternatively, one can specify the @command{sftp-server} command:
20540 @lisp
20541 (service openssh-service-type
20542 (openssh-configuration
20543 (subsystems
20544 `(("sftp" ,(file-append openssh "/libexec/sftp-server"))))))
20545 @end lisp
20546
20547 @item @code{accepted-environment} (default: @code{'()})
20548 List of strings describing which environment variables may be exported.
20549
20550 Each string gets on its own line. See the @code{AcceptEnv} option in
20551 @code{man sshd_config}.
20552
20553 This example allows ssh-clients to export the @env{COLORTERM} variable.
20554 It is set by terminal emulators, which support colors. You can use it in
20555 your shell's resource file to enable colors for the prompt and commands
20556 if this variable is set.
20557
20558 @lisp
20559 (service openssh-service-type
20560 (openssh-configuration
20561 (accepted-environment '("COLORTERM"))))
20562 @end lisp
20563
20564 @item @code{authorized-keys} (default: @code{'()})
20565 @cindex authorized keys, SSH
20566 @cindex SSH authorized keys
20567 This is the list of authorized keys. Each element of the list is a user
20568 name followed by one or more file-like objects that represent SSH public
20569 keys. For example:
20570
20571 @lisp
20572 (openssh-configuration
20573 (authorized-keys
20574 `(("rekado" ,(local-file "rekado.pub"))
20575 ("chris" ,(local-file "chris.pub"))
20576 ("root" ,(local-file "rekado.pub") ,(local-file "chris.pub")))))
20577 @end lisp
20578
20579 @noindent
20580 registers the specified public keys for user accounts @code{rekado},
20581 @code{chris}, and @code{root}.
20582
20583 Additional authorized keys can be specified @i{via}
20584 @code{service-extension}.
20585
20586 Note that this does @emph{not} interfere with the use of
20587 @file{~/.ssh/authorized_keys}.
20588
20589 @item @code{generate-host-keys?} (default: @code{#t})
20590 Whether to generate host key pairs with @command{ssh-keygen -A} under
20591 @file{/etc/ssh} if there are none.
20592
20593 Generating key pairs takes a few seconds when enough entropy is
20594 available and is only done once. You might want to turn it off for
20595 instance in a virtual machine that does not need it because host keys
20596 are provided in some other way, and where the extra boot time is a
20597 problem.
20598
20599 @item @code{log-level} (default: @code{'info})
20600 This is a symbol specifying the logging level: @code{quiet}, @code{fatal},
20601 @code{error}, @code{info}, @code{verbose}, @code{debug}, etc. See the man
20602 page for @file{sshd_config} for the full list of level names.
20603
20604 @item @code{extra-content} (default: @code{""})
20605 This field can be used to append arbitrary text to the configuration file. It
20606 is especially useful for elaborate configurations that cannot be expressed
20607 otherwise. This configuration, for example, would generally disable root
20608 logins, but permit them from one specific IP address:
20609
20610 @lisp
20611 (openssh-configuration
20612 (extra-content "\
20613 Match Address 192.168.0.1
20614 PermitRootLogin yes"))
20615 @end lisp
20616
20617 @end table
20618 @end deftp
20619
20620 @deffn {Scheme Procedure} dropbear-service [@var{config}]
20621 Run the @uref{https://matt.ucc.asn.au/dropbear/dropbear.html,Dropbear SSH
20622 daemon} with the given @var{config}, a @code{<dropbear-configuration>}
20623 object.
20624
20625 For example, to specify a Dropbear service listening on port 1234, add
20626 this call to the operating system's @code{services} field:
20627
20628 @lisp
20629 (dropbear-service (dropbear-configuration
20630 (port-number 1234)))
20631 @end lisp
20632 @end deffn
20633
20634 @deftp {Data Type} dropbear-configuration
20635 This data type represents the configuration of a Dropbear SSH daemon.
20636
20637 @table @asis
20638 @item @code{dropbear} (default: @var{dropbear})
20639 The Dropbear package to use.
20640
20641 @item @code{port-number} (default: 22)
20642 The TCP port where the daemon waits for incoming connections.
20643
20644 @item @code{syslog-output?} (default: @code{#t})
20645 Whether to enable syslog output.
20646
20647 @item @code{pid-file} (default: @code{"/var/run/dropbear.pid"})
20648 File name of the daemon's PID file.
20649
20650 @item @code{root-login?} (default: @code{#f})
20651 Whether to allow @code{root} logins.
20652
20653 @item @code{allow-empty-passwords?} (default: @code{#f})
20654 Whether to allow empty passwords.
20655
20656 @item @code{password-authentication?} (default: @code{#t})
20657 Whether to enable password-based authentication.
20658 @end table
20659 @end deftp
20660
20661 @cindex AutoSSH
20662 @deffn {Scheme Variable} autossh-service-type
20663 This is the type for the @uref{https://www.harding.motd.ca/autossh,
20664 AutoSSH} program that runs a copy of @command{ssh} and monitors it,
20665 restarting it as necessary should it die or stop passing traffic.
20666 AutoSSH can be run manually from the command-line by passing arguments
20667 to the binary @command{autossh} from the package @code{autossh}, but it
20668 can also be run as a Guix service. This latter use case is documented
20669 here.
20670
20671 AutoSSH can be used to forward local traffic to a remote machine using
20672 an SSH tunnel, and it respects the @file{~/.ssh/config} of the user it
20673 is run as.
20674
20675 For example, to specify a service running autossh as the user
20676 @code{pino} and forwarding all local connections to port @code{8081} to
20677 @code{remote:8081} using an SSH tunnel, add this call to the operating
20678 system's @code{services} field:
20679
20680 @lisp
20681 (service autossh-service-type
20682 (autossh-configuration
20683 (user "pino")
20684 (ssh-options (list "-T" "-N" "-L" "8081:localhost:8081" "remote.net"))))
20685 @end lisp
20686 @end deffn
20687
20688 @deftp {Data Type} autossh-configuration
20689 This data type represents the configuration of an AutoSSH service.
20690
20691 @table @asis
20692
20693 @item @code{user} (default @code{"autossh"})
20694 The user as which the AutoSSH service is to be run.
20695 This assumes that the specified user exists.
20696
20697 @item @code{poll} (default @code{600})
20698 Specifies the connection poll time in seconds.
20699
20700 @item @code{first-poll} (default @code{#f})
20701 Specifies how many seconds AutoSSH waits before the first connection
20702 test. After this first test, polling is resumed at the pace defined in
20703 @code{poll}. When set to @code{#f}, the first poll is not treated
20704 specially and will also use the connection poll specified in
20705 @code{poll}.
20706
20707 @item @code{gate-time} (default @code{30})
20708 Specifies how many seconds an SSH connection must be active before it is
20709 considered successful.
20710
20711 @item @code{log-level} (default @code{1})
20712 The log level, corresponding to the levels used by syslog---so @code{0}
20713 is the most silent while @code{7} is the chattiest.
20714
20715 @item @code{max-start} (default @code{#f})
20716 The maximum number of times SSH may be (re)started before AutoSSH exits.
20717 When set to @code{#f}, no maximum is configured and AutoSSH may restart indefinitely.
20718
20719 @item @code{message} (default @code{""})
20720 The message to append to the echo message sent when testing connections.
20721
20722 @item @code{port} (default @code{"0"})
20723 The ports used for monitoring the connection. When set to @code{"0"},
20724 monitoring is disabled. When set to @code{"@var{n}"} where @var{n} is
20725 a positive integer, ports @var{n} and @var{n}+1 are used for
20726 monitoring the connection, such that port @var{n} is the base
20727 monitoring port and @code{n+1} is the echo port. When set to
20728 @code{"@var{n}:@var{m}"} where @var{n} and @var{m} are positive
20729 integers, the ports @var{n} and @var{m} are used for monitoring the
20730 connection, such that port @var{n} is the base monitoring port and
20731 @var{m} is the echo port.
20732
20733 @item @code{ssh-options} (default @code{'()})
20734 The list of command-line arguments to pass to @command{ssh} when it is
20735 run. Options @option{-f} and @option{-M} are reserved for AutoSSH and
20736 may cause undefined behaviour.
20737
20738 @end table
20739 @end deftp
20740
20741 @cindex WebSSH
20742 @deffn {Scheme Variable} webssh-service-type
20743 This is the type for the @uref{https://webssh.huashengdun.org/, WebSSH}
20744 program that runs a web SSH client. WebSSH can be run manually from the
20745 command-line by passing arguments to the binary @command{wssh} from the
20746 package @code{webssh}, but it can also be run as a Guix service. This
20747 latter use case is documented here.
20748
20749 For example, to specify a service running WebSSH on loopback interface
20750 on port @code{8888} with reject policy with a list of allowed to
20751 connection hosts, and NGINX as a reverse-proxy to this service listening
20752 for HTTPS connection, add this call to the operating system's
20753 @code{services} field:
20754
20755 @lisp
20756 (service webssh-service-type
20757 (webssh-configuration (address "127.0.0.1")
20758 (port 8888)
20759 (policy 'reject)
20760 (known-hosts '("localhost ecdsa-sha2-nistp256 AAAA…"
20761 "127.0.0.1 ecdsa-sha2-nistp256 AAAA…"))))
20762
20763 (service nginx-service-type
20764 (nginx-configuration
20765 (server-blocks
20766 (list
20767 (nginx-server-configuration
20768 (inherit %webssh-configuration-nginx)
20769 (server-name '("webssh.example.com"))
20770 (listen '("443 ssl"))
20771 (ssl-certificate (letsencrypt-certificate "webssh.example.com"))
20772 (ssl-certificate-key (letsencrypt-key "webssh.example.com"))
20773 (locations
20774 (cons (nginx-location-configuration
20775 (uri "/.well-known")
20776 (body '("root /var/www;")))
20777 (nginx-server-configuration-locations %webssh-configuration-nginx))))))))
20778 @end lisp
20779 @end deffn
20780
20781 @deftp {Data Type} webssh-configuration
20782 Data type representing the configuration for @code{webssh-service}.
20783
20784 @table @asis
20785 @item @code{package} (default: @var{webssh})
20786 @code{webssh} package to use.
20787
20788 @item @code{user-name} (default: @var{"webssh"})
20789 User name or user ID that file transfers to and from that module should take
20790 place.
20791
20792 @item @code{group-name} (default: @var{"webssh"})
20793 Group name or group ID that will be used when accessing the module.
20794
20795 @item @code{address} (default: @var{#f})
20796 IP address on which @command{webssh} listens for incoming connections.
20797
20798 @item @code{port} (default: @var{8888})
20799 TCP port on which @command{webssh} listens for incoming connections.
20800
20801 @item @code{policy} (default: @var{#f})
20802 Connection policy. @var{reject} policy requires to specify @var{known-hosts}.
20803
20804 @item @code{known-hosts} (default: @var{'()})
20805 List of hosts which allowed for SSH connection from @command{webssh}.
20806
20807 @item @code{log-file} (default: @file{"/var/log/webssh.log"})
20808 Name of the file where @command{webssh} writes its log file.
20809
20810 @item @code{log-level} (default: @var{#f})
20811 Logging level.
20812
20813 @end table
20814 @end deftp
20815
20816 @defvr {Scheme Variable} %facebook-host-aliases
20817 This variable contains a string for use in @file{/etc/hosts}
20818 (@pxref{Host Names,,, libc, The GNU C Library Reference Manual}). Each
20819 line contains a entry that maps a known server name of the Facebook
20820 on-line service---e.g., @code{www.facebook.com}---to the local
20821 host---@code{127.0.0.1} or its IPv6 equivalent, @code{::1}.
20822
20823 This variable is typically used in the @code{hosts-file} field of an
20824 @code{operating-system} declaration (@pxref{operating-system Reference,
20825 @file{/etc/hosts}}):
20826
20827 @lisp
20828 (use-modules (gnu) (guix))
20829
20830 (operating-system
20831 (host-name "mymachine")
20832 ;; ...
20833 (hosts-file
20834 ;; Create a /etc/hosts file with aliases for "localhost"
20835 ;; and "mymachine", as well as for Facebook servers.
20836 (plain-file "hosts"
20837 (string-append (local-host-aliases host-name)
20838 %facebook-host-aliases))))
20839 @end lisp
20840
20841 This mechanism can prevent programs running locally, such as Web
20842 browsers, from accessing Facebook.
20843 @end defvr
20844
20845 The @code{(gnu services avahi)} provides the following definition.
20846
20847 @defvr {Scheme Variable} avahi-service-type
20848 This is the service that runs @command{avahi-daemon}, a system-wide
20849 mDNS/DNS-SD responder that allows for service discovery and
20850 ``zero-configuration'' host name lookups (see @uref{https://avahi.org/}).
20851 Its value must be an @code{avahi-configuration} record---see below.
20852
20853 This service extends the name service cache daemon (nscd) so that it can
20854 resolve @code{.local} host names using
20855 @uref{https://0pointer.de/lennart/projects/nss-mdns/, nss-mdns}. @xref{Name
20856 Service Switch}, for information on host name resolution.
20857
20858 Additionally, add the @var{avahi} package to the system profile so that
20859 commands such as @command{avahi-browse} are directly usable.
20860 @end defvr
20861
20862 @deftp {Data Type} avahi-configuration
20863 Data type representation the configuration for Avahi.
20864
20865 @table @asis
20866
20867 @item @code{host-name} (default: @code{#f})
20868 If different from @code{#f}, use that as the host name to
20869 publish for this machine; otherwise, use the machine's actual host name.
20870
20871 @item @code{publish?} (default: @code{#t})
20872 When true, allow host names and services to be published (broadcast) over the
20873 network.
20874
20875 @item @code{publish-workstation?} (default: @code{#t})
20876 When true, @command{avahi-daemon} publishes the machine's host name and IP
20877 address via mDNS on the local network. To view the host names published on
20878 your local network, you can run:
20879
20880 @example
20881 avahi-browse _workstation._tcp
20882 @end example
20883
20884 @item @code{wide-area?} (default: @code{#f})
20885 When true, DNS-SD over unicast DNS is enabled.
20886
20887 @item @code{ipv4?} (default: @code{#t})
20888 @itemx @code{ipv6?} (default: @code{#t})
20889 These fields determine whether to use IPv4/IPv6 sockets.
20890
20891 @item @code{domains-to-browse} (default: @code{'()})
20892 This is a list of domains to browse.
20893 @end table
20894 @end deftp
20895
20896 @deffn {Scheme Variable} openvswitch-service-type
20897 This is the type of the @uref{https://www.openvswitch.org, Open vSwitch}
20898 service, whose value should be an @code{openvswitch-configuration}
20899 object.
20900 @end deffn
20901
20902 @deftp {Data Type} openvswitch-configuration
20903 Data type representing the configuration of Open vSwitch, a multilayer
20904 virtual switch which is designed to enable massive network automation
20905 through programmatic extension.
20906
20907 @table @asis
20908 @item @code{package} (default: @var{openvswitch})
20909 Package object of the Open vSwitch.
20910
20911 @end table
20912 @end deftp
20913
20914 @defvr {Scheme Variable} pagekite-service-type
20915 This is the service type for the @uref{https://pagekite.net, PageKite} service,
20916 a tunneling solution for making localhost servers publicly visible, even from
20917 behind restrictive firewalls or NAT without forwarded ports. The value for
20918 this service type is a @code{pagekite-configuration} record.
20919
20920 Here's an example exposing the local HTTP and SSH daemons:
20921
20922 @lisp
20923 (service pagekite-service-type
20924 (pagekite-configuration
20925 (kites '("http:@@kitename:localhost:80:@@kitesecret"
20926 "raw/22:@@kitename:localhost:22:@@kitesecret"))
20927 (extra-file "/etc/pagekite.rc")))
20928 @end lisp
20929 @end defvr
20930
20931 @deftp {Data Type} pagekite-configuration
20932 Data type representing the configuration of PageKite.
20933
20934 @table @asis
20935 @item @code{package} (default: @var{pagekite})
20936 Package object of PageKite.
20937
20938 @item @code{kitename} (default: @code{#f})
20939 PageKite name for authenticating to the frontend server.
20940
20941 @item @code{kitesecret} (default: @code{#f})
20942 Shared secret for authenticating to the frontend server. You should probably
20943 put this inside @code{extra-file} instead.
20944
20945 @item @code{frontend} (default: @code{#f})
20946 Connect to the named PageKite frontend server instead of the
20947 @uref{https://pagekite.net,,pagekite.net} service.
20948
20949 @item @code{kites} (default: @code{'("http:@@kitename:localhost:80:@@kitesecret")})
20950 List of service kites to use. Exposes HTTP on port 80 by default. The format
20951 is @code{proto:kitename:host:port:secret}.
20952
20953 @item @code{extra-file} (default: @code{#f})
20954 Extra configuration file to read, which you are expected to create manually.
20955 Use this to add additional options and manage shared secrets out-of-band.
20956
20957 @end table
20958 @end deftp
20959
20960 @defvr {Scheme Variable} yggdrasil-service-type
20961 The service type for connecting to the @uref{https://yggdrasil-network.github.io/,
20962 Yggdrasil network}, an early-stage implementation of a fully end-to-end
20963 encrypted IPv6 network.
20964
20965 @quotation
20966 Yggdrasil provides name-independent routing with cryptographically generated
20967 addresses. Static addressing means you can keep the same address as long as
20968 you want, even if you move to a new location, or generate a new address (by
20969 generating new keys) whenever you want.
20970 @uref{https://yggdrasil-network.github.io/2018/07/28/addressing.html}
20971 @end quotation
20972
20973 Pass it a value of @code{yggdrasil-configuration} to connect it to public
20974 peers and/or local peers.
20975
20976 Here is an example using public peers and a static address. The static
20977 signing and encryption keys are defined in @file{/etc/yggdrasil-private.conf}
20978 (the default value for @code{config-file}).
20979
20980 @lisp
20981 ;; part of the operating-system declaration
20982 (service yggdrasil-service-type
20983 (yggdrasil-configuration
20984 (autoconf? #f) ;; use only the public peers
20985 (json-config
20986 ;; choose one from
20987 ;; https://github.com/yggdrasil-network/public-peers
20988 '((peers . #("tcp://1.2.3.4:1337"))))
20989 ;; /etc/yggdrasil-private.conf is the default value for config-file
20990 ))
20991 @end lisp
20992 @example
20993 # sample content for /etc/yggdrasil-private.conf
20994 @{
20995 # Your public key. Your peers may ask you for this to put
20996 # into their AllowedPublicKeys configuration.
20997 PublicKey: 64277...
20998
20999 # Your private key. DO NOT share this with anyone!
21000 PrivateKey: 5c750...
21001 @}
21002 @end example
21003 @end defvr
21004
21005 @deftp {Data Type} yggdrasil-configuration
21006 Data type representing the configuration of Yggdrasil.
21007
21008 @table @asis
21009 @item @code{package} (default: @code{yggdrasil})
21010 Package object of Yggdrasil.
21011
21012 @item @code{json-config} (default: @code{'()})
21013 Contents of @file{/etc/yggdrasil.conf}. Will be merged with
21014 @file{/etc/yggdrasil-private.conf}. Note that these settings are stored in
21015 the Guix store, which is readable to all users. @strong{Do not store your
21016 private keys in it}. See the output of @code{yggdrasil -genconf} for a
21017 quick overview of valid keys and their default values.
21018
21019 @item @code{autoconf?} (default: @code{#f})
21020 Whether to use automatic mode. Enabling it makes Yggdrasil use adynamic IP
21021 and peer with IPv6 neighbors.
21022
21023 @item @code{log-level} (default: @code{'info})
21024 How much detail to include in logs. Use @code{'debug} for more detail.
21025
21026 @item @code{log-to} (default: @code{'stdout})
21027 Where to send logs. By default, the service logs standard output to
21028 @file{/var/log/yggdrasil.log}. The alternative is @code{'syslog}, which
21029 sends output to the running syslog service.
21030
21031 @item @code{config-file} (default: @code{"/etc/yggdrasil-private.conf"})
21032 What HJSON file to load sensitive data from. This is where private keys
21033 should be stored, which are necessary to specify if you don't want a
21034 randomized address after each restart. Use @code{#f} to disable. Options
21035 defined in this file take precedence over @code{json-config}. Use the output
21036 of @code{yggdrasil -genconf} as a starting point. To configure a static
21037 address, delete everything except these options:
21038
21039 @itemize
21040 @item @code{EncryptionPublicKey}
21041 @item @code{EncryptionPrivateKey}
21042 @item @code{SigningPublicKey}
21043 @item @code{SigningPrivateKey}
21044 @end itemize
21045 @end table
21046 @end deftp
21047
21048 @cindex IPFS
21049 @defvr {Scheme Variable} ipfs-service-type
21050 The service type for connecting to the @uref{https://ipfs.io,IPFS network},
21051 a global, versioned, peer-to-peer file system. Pass it a
21052 @code{ipfs-configuration} to change the ports used for the gateway and API.
21053
21054 Here's an example configuration, using some non-standard ports:
21055
21056 @lisp
21057 (service ipfs-service-type
21058 (ipfs-configuration
21059 (gateway "/ip4/127.0.0.1/tcp/8880")
21060 (api "/ip4/127.0.0.1/tcp/8881")))
21061 @end lisp
21062 @end defvr
21063
21064 @deftp {Data Type} ipfs-configuration
21065 Data type representing the configuration of IPFS.
21066
21067 @table @asis
21068 @item @code{package} (default: @code{go-ipfs})
21069 Package object of IPFS.
21070
21071 @item @code{gateway} (default: @code{"/ip4/127.0.0.1/tcp/8082"})
21072 Address of the gateway, in ‘multiaddress’ format.
21073
21074 @item @code{api} (default: @code{"/ip4/127.0.0.1/tcp/5001"})
21075 Address of the API endpoint, in ‘multiaddress’ format.
21076 @end table
21077 @end deftp
21078
21079 @cindex keepalived
21080 @deffn {Scheme Variable} keepalived-service-type
21081 This is the type for the @uref{https://www.keepalived.org/, Keepalived}
21082 routing software, @command{keepalived}. Its value must be an
21083 @code{keepalived-configuration} record as in this example for master
21084 machine:
21085
21086 @lisp
21087 (service keepalived-service-type
21088 (keepalived-configuration
21089 (config-file (local-file "keepalived-master.conf"))))
21090 @end lisp
21091
21092 where @file{keepalived-master.conf}:
21093
21094 @example
21095 vrrp_instance my-group @{
21096 state MASTER
21097 interface enp9s0
21098 virtual_router_id 100
21099 priority 100
21100 unicast_peer @{ 10.0.0.2 @}
21101 virtual_ipaddress @{
21102 10.0.0.4/24
21103 @}
21104 @}
21105 @end example
21106
21107 and for backup machine:
21108
21109 @lisp
21110 (service keepalived-service-type
21111 (keepalived-configuration
21112 (config-file (local-file "keepalived-backup.conf"))))
21113 @end lisp
21114
21115 where @file{keepalived-backup.conf}:
21116
21117 @example
21118 vrrp_instance my-group @{
21119 state BACKUP
21120 interface enp9s0
21121 virtual_router_id 100
21122 priority 99
21123 unicast_peer @{ 10.0.0.3 @}
21124 virtual_ipaddress @{
21125 10.0.0.4/24
21126 @}
21127 @}
21128 @end example
21129 @end deffn
21130
21131 @node Unattended Upgrades
21132 @subsection Unattended Upgrades
21133
21134 @cindex unattended upgrades
21135 @cindex upgrades, unattended
21136 Guix provides a service to perform @emph{unattended upgrades}:
21137 periodically, the system automatically reconfigures itself from the
21138 latest Guix. Guix System has several properties that make unattended
21139 upgrades safe:
21140
21141 @itemize
21142 @item
21143 upgrades are transactional (either the upgrade succeeds or it fails, but
21144 you cannot end up with an ``in-between'' system state);
21145 @item
21146 the upgrade log is kept---you can view it with @command{guix system
21147 list-generations}---and you can roll back to any previous generation,
21148 should the upgraded system fail to behave as intended;
21149 @item
21150 channel code is authenticated so you know you can only run genuine code
21151 (@pxref{Channels});
21152 @item
21153 @command{guix system reconfigure} prevents downgrades, which makes it
21154 immune to @dfn{downgrade attacks}.
21155 @end itemize
21156
21157 To set up unattended upgrades, add an instance of
21158 @code{unattended-upgrade-service-type} like the one below to the list of
21159 your operating system services:
21160
21161 @lisp
21162 (service unattended-upgrade-service-type)
21163 @end lisp
21164
21165 The defaults above set up weekly upgrades: every Sunday at midnight.
21166 You do not need to provide the operating system configuration file: it
21167 uses @file{/run/current-system/configuration.scm}, which ensures it
21168 always uses your latest configuration---@pxref{provenance-service-type},
21169 for more information about this file.
21170
21171 There are several things that can be configured, in particular the
21172 periodicity and services (daemons) to be restarted upon completion.
21173 When the upgrade is successful, the service takes care of deleting
21174 system generations older that some threshold, as per @command{guix
21175 system delete-generations}. See the reference below for details.
21176
21177 To ensure that upgrades are actually happening, you can run
21178 @command{guix system describe}. To investigate upgrade failures, visit
21179 the unattended upgrade log file (see below).
21180
21181 @defvr {Scheme Variable} unattended-upgrade-service-type
21182 This is the service type for unattended upgrades. It sets up an mcron
21183 job (@pxref{Scheduled Job Execution}) that runs @command{guix system
21184 reconfigure} from the latest version of the specified channels.
21185
21186 Its value must be a @code{unattended-upgrade-configuration} record (see
21187 below).
21188 @end defvr
21189
21190 @deftp {Data Type} unattended-upgrade-configuration
21191 This data type represents the configuration of the unattended upgrade
21192 service. The following fields are available:
21193
21194 @table @asis
21195 @item @code{schedule} (default: @code{"30 01 * * 0"})
21196 This is the schedule of upgrades, expressed as a gexp containing an
21197 mcron job schedule (@pxref{Guile Syntax, mcron job specifications,,
21198 mcron, GNU@tie{}mcron}).
21199
21200 @item @code{channels} (default: @code{#~%default-channels})
21201 This gexp specifies the channels to use for the upgrade
21202 (@pxref{Channels}). By default, the tip of the official @code{guix}
21203 channel is used.
21204
21205 @item @code{operating-system-file} (default: @code{"/run/current-system/configuration.scm"})
21206 This field specifies the operating system configuration file to use.
21207 The default is to reuse the config file of the current configuration.
21208
21209 There are cases, though, where referring to
21210 @file{/run/current-system/configuration.scm} is not enough, for instance
21211 because that file refers to extra files (SSH public keys, extra
21212 configuration files, etc.) @i{via} @code{local-file} and similar
21213 constructs. For those cases, we recommend something along these lines:
21214
21215 @lisp
21216 (unattended-upgrade-configuration
21217 (operating-system-file
21218 (file-append (local-file "." "config-dir" #:recursive? #t)
21219 "/config.scm")))
21220 @end lisp
21221
21222 The effect here is to import all of the current directory into the
21223 store, and to refer to @file{config.scm} within that directory.
21224 Therefore, uses of @code{local-file} within @file{config.scm} will work
21225 as expected. @xref{G-Expressions}, for information about
21226 @code{local-file} and @code{file-append}.
21227
21228 @item @code{services-to-restart} (default: @code{'(mcron)})
21229 This field specifies the Shepherd services to restart when the upgrade
21230 completes.
21231
21232 Those services are restarted right away upon completion, as with
21233 @command{herd restart}, which ensures that the latest version is
21234 running---remember that by default @command{guix system reconfigure}
21235 only restarts services that are not currently running, which is
21236 conservative: it minimizes disruption but leaves outdated services
21237 running.
21238
21239 Use @command{herd status} to find out candidates for restarting.
21240 @xref{Services}, for general information about services. Common
21241 services to restart would include @code{ntpd} and @code{ssh-daemon}.
21242
21243 By default, the @code{mcron} service is restarted. This ensures that
21244 the latest version of the unattended upgrade job will be used next time.
21245
21246 @item @code{system-expiration} (default: @code{(* 3 30 24 3600)})
21247 This is the expiration time in seconds for system generations. System
21248 generations older that this amount of time are deleted with
21249 @command{guix system delete-generations} when an upgrade completes.
21250
21251 @quotation Note
21252 The unattended upgrade service does not run the garbage collector. You
21253 will probably want to set up your own mcron job to run @command{guix gc}
21254 periodically.
21255 @end quotation
21256
21257 @item @code{maximum-duration} (default: @code{3600})
21258 Maximum duration in seconds for the upgrade; past that time, the upgrade
21259 aborts.
21260
21261 This is primarily useful to ensure the upgrade does not end up
21262 rebuilding or re-downloading ``the world''.
21263
21264 @item @code{log-file} (default: @code{"/var/log/unattended-upgrade.log"})
21265 File where unattended upgrades are logged.
21266 @end table
21267 @end deftp
21268
21269 @node X Window
21270 @subsection X Window
21271
21272 @cindex X11
21273 @cindex X Window System
21274 @cindex login manager
21275 Support for the X Window graphical display system---specifically
21276 Xorg---is provided by the @code{(gnu services xorg)} module. Note that
21277 there is no @code{xorg-service} procedure. Instead, the X server is
21278 started by the @dfn{login manager}, by default the GNOME Display Manager (GDM).
21279
21280 @cindex GDM
21281 @cindex GNOME, login manager
21282 @anchor{gdm}
21283 GDM of course allows users to log in into window managers and desktop
21284 environments other than GNOME; for those using GNOME, GDM is required for
21285 features such as automatic screen locking.
21286
21287 @cindex window manager
21288 To use X11, you must install at least one @dfn{window manager}---for
21289 example the @code{windowmaker} or @code{openbox} packages---preferably
21290 by adding it to the @code{packages} field of your operating system
21291 definition (@pxref{operating-system Reference, system-wide packages}).
21292
21293 @anchor{wayland-gdm}
21294 GDM also supports Wayland: it can itself use Wayland instead of X11 for
21295 its user interface, and it can also start Wayland sessions. The former is
21296 required for the latter, to enable, set @code{wayland?} to @code{#t} in
21297 @code{gdm-configuration}.
21298
21299 @defvr {Scheme Variable} gdm-service-type
21300 This is the type for the @uref{https://wiki.gnome.org/Projects/GDM/, GNOME
21301 Desktop Manager} (GDM), a program that manages graphical display servers and
21302 handles graphical user logins. Its value must be a @code{gdm-configuration}
21303 (see below).
21304
21305 @cindex session types
21306 GDM looks for @dfn{session types} described by the @file{.desktop} files in
21307 @file{/run/current-system/profile/share/xsessions} (for X11 sessions) and
21308 @file{/run/current-system/profile/share/wayland-sessions} (for Wayland
21309 sessions) and allows users to choose a session from the log-in screen.
21310 Packages such as @code{gnome}, @code{xfce}, @code{i3} and @code{sway} provide
21311 @file{.desktop} files; adding them to the system-wide set of packages
21312 automatically makes them available at the log-in screen.
21313
21314 In addition, @file{~/.xsession} files are honored. When available,
21315 @file{~/.xsession} must be an executable that starts a window manager
21316 and/or other X clients.
21317 @end defvr
21318
21319 @deftp {Data Type} gdm-configuration
21320 @table @asis
21321 @item @code{auto-login?} (default: @code{#f})
21322 @itemx @code{default-user} (default: @code{#f})
21323 When @code{auto-login?} is false, GDM presents a log-in screen.
21324
21325 When @code{auto-login?} is true, GDM logs in directly as
21326 @code{default-user}.
21327
21328 @item @code{auto-suspend?} (default @code{#t})
21329 When true, GDM will automatically suspend to RAM when nobody is
21330 physically connected. When a machine is used via remote desktop or SSH,
21331 this should be set to false to avoid GDM interrupting remote sessions or
21332 rendering the machine unavailable.
21333
21334 @item @code{debug?} (default: @code{#f})
21335 When true, GDM writes debug messages to its log.
21336
21337 @item @code{gnome-shell-assets} (default: ...)
21338 List of GNOME Shell assets needed by GDM: icon theme, fonts, etc.
21339
21340 @item @code{xorg-configuration} (default: @code{(xorg-configuration)})
21341 Configuration of the Xorg graphical server.
21342
21343 @item @code{x-session} (default: @code{(xinitrc)})
21344 Script to run before starting a X session.
21345
21346 @item @code{xdmcp?} (default: @code{#f})
21347 When true, enable the X Display Manager Control Protocol (XDMCP). This
21348 should only be enabled in trusted environments, as the protocol is not
21349 secure. When enabled, GDM listens for XDMCP queries on the UDP port
21350 177.
21351
21352 @item @code{dbus-daemon} (default: @code{dbus-daemon-wrapper})
21353 File name of the @code{dbus-daemon} executable.
21354
21355 @item @code{gdm} (default: @code{gdm})
21356 The GDM package to use.
21357
21358 @item @code{wayland?} (default: @code{#f})
21359 When true, enables Wayland in GDM, necessary to use Wayland sessions.
21360
21361 @item @code{wayland-session} (default: @code{gdm-wayland-session-wrapper})
21362 The Wayland session wrapper to use, needed to setup the
21363 environment.
21364 @end table
21365 @end deftp
21366
21367 @defvr {Scheme Variable} slim-service-type
21368 This is the type for the SLiM graphical login manager for X11.
21369
21370 Like GDM, SLiM looks for session types described by @file{.desktop} files and
21371 allows users to choose a session from the log-in screen using @kbd{F1}. It
21372 also honors @file{~/.xsession} files.
21373
21374 Unlike GDM, SLiM does not spawn the user session on a different VT after
21375 logging in, which means that you can only start one graphical session. If you
21376 want to be able to run multiple graphical sessions at the same time you have
21377 to add multiple SLiM services to your system services. The following example
21378 shows how to replace the default GDM service with two SLiM services on tty7
21379 and tty8.
21380
21381 @lisp
21382 (use-modules (gnu services)
21383 (gnu services desktop)
21384 (gnu services xorg))
21385
21386 (operating-system
21387 ;; ...
21388 (services (cons* (service slim-service-type (slim-configuration
21389 (display ":0")
21390 (vt "vt7")))
21391 (service slim-service-type (slim-configuration
21392 (display ":1")
21393 (vt "vt8")))
21394 (modify-services %desktop-services
21395 (delete gdm-service-type)))))
21396 @end lisp
21397
21398 @end defvr
21399
21400 @deftp {Data Type} slim-configuration
21401 Data type representing the configuration of @code{slim-service-type}.
21402
21403 @table @asis
21404 @item @code{allow-empty-passwords?} (default: @code{#t})
21405 Whether to allow logins with empty passwords.
21406
21407 @item @code{gnupg?} (default: @code{#f})
21408 If enabled, @code{pam-gnupg} will attempt to automatically unlock the
21409 user's GPG keys with the login password via @code{gpg-agent}. The
21410 keygrips of all keys to be unlocked should be written to
21411 @file{~/.pam-gnupg}, and can be queried with @code{gpg -K
21412 --with-keygrip}. Presetting passphrases must be enabled by adding
21413 @code{allow-preset-passphrase} in @file{~/.gnupg/gpg-agent.conf}.
21414
21415 @item @code{auto-login?} (default: @code{#f})
21416 @itemx @code{default-user} (default: @code{""})
21417 When @code{auto-login?} is false, SLiM presents a log-in screen.
21418
21419 When @code{auto-login?} is true, SLiM logs in directly as
21420 @code{default-user}.
21421
21422 @item @code{theme} (default: @code{%default-slim-theme})
21423 @itemx @code{theme-name} (default: @code{%default-slim-theme-name})
21424 The graphical theme to use and its name.
21425
21426 @item @code{auto-login-session} (default: @code{#f})
21427 If true, this must be the name of the executable to start as the default
21428 session---e.g., @code{(file-append windowmaker "/bin/windowmaker")}.
21429
21430 If false, a session described by one of the available @file{.desktop}
21431 files in @code{/run/current-system/profile} and @code{~/.guix-profile}
21432 will be used.
21433
21434 @quotation Note
21435 You must install at least one window manager in the system profile or in
21436 your user profile. Failing to do that, if @code{auto-login-session} is
21437 false, you will be unable to log in.
21438 @end quotation
21439
21440 @item @code{xorg-configuration} (default @code{(xorg-configuration)})
21441 Configuration of the Xorg graphical server.
21442
21443 @item @code{display} (default @code{":0"})
21444 The display on which to start the Xorg graphical server.
21445
21446 @item @code{vt} (default @code{"vt7"})
21447 The VT on which to start the Xorg graphical server.
21448
21449 @item @code{xauth} (default: @code{xauth})
21450 The XAuth package to use.
21451
21452 @item @code{shepherd} (default: @code{shepherd})
21453 The Shepherd package used when invoking @command{halt} and
21454 @command{reboot}.
21455
21456 @item @code{sessreg} (default: @code{sessreg})
21457 The sessreg package used in order to register the session.
21458
21459 @item @code{slim} (default: @code{slim})
21460 The SLiM package to use.
21461 @end table
21462 @end deftp
21463
21464 @defvr {Scheme Variable} %default-theme
21465 @defvrx {Scheme Variable} %default-theme-name
21466 The default SLiM theme and its name.
21467 @end defvr
21468
21469
21470 @cindex login manager
21471 @cindex X11 login
21472 @defvr {Scheme Variable} sddm-service-type
21473 This is the type of the service to run the
21474 @uref{https://github.com/sddm/sddm,SDDM display manager}. Its value
21475 must be a @code{sddm-configuration} record (see below).
21476
21477 Here's an example use:
21478
21479 @lisp
21480 (service sddm-service-type
21481 (sddm-configuration
21482 (auto-login-user "alice")
21483 (auto-login-session "xfce.desktop")))
21484 @end lisp
21485 @end defvr
21486
21487 @deftp {Data Type} sddm-configuration
21488 This data type represents the configuration of the SDDM login manager.
21489 The available fields are:
21490
21491 @table @asis
21492 @item @code{sddm} (default: @code{sddm})
21493 The SDDM package to use.
21494
21495 @item @code{display-server} (default: "x11")
21496 Select display server to use for the greeter. Valid values are
21497 @samp{"x11"} or @samp{"wayland"}.
21498
21499 @item @code{numlock} (default: "on")
21500 Valid values are @samp{"on"}, @samp{"off"} or @samp{"none"}.
21501
21502 @item @code{halt-command} (default @code{#~(string-append #$shepherd "/sbin/halt")})
21503 Command to run when halting.
21504
21505 @item @code{reboot-command} (default @code{#~(string-append #$shepherd "/sbin/reboot")})
21506 Command to run when rebooting.
21507
21508 @item @code{theme} (default "maldives")
21509 Theme to use. Default themes provided by SDDM are @samp{"elarun"},
21510 @samp{"maldives"} or @samp{"maya"}.
21511
21512 @item @code{themes-directory} (default "/run/current-system/profile/share/sddm/themes")
21513 Directory to look for themes.
21514
21515 @item @code{faces-directory} (default "/run/current-system/profile/share/sddm/faces")
21516 Directory to look for faces.
21517
21518 @item @code{default-path} (default "/run/current-system/profile/bin")
21519 Default PATH to use.
21520
21521 @item @code{minimum-uid} (default: 1000)
21522 Minimum UID displayed in SDDM and allowed for log-in.
21523
21524 @item @code{maximum-uid} (default: 2000)
21525 Maximum UID to display in SDDM.
21526
21527 @item @code{remember-last-user?} (default #t)
21528 Remember last user.
21529
21530 @item @code{remember-last-session?} (default #t)
21531 Remember last session.
21532
21533 @item @code{hide-users} (default "")
21534 Usernames to hide from SDDM greeter.
21535
21536 @item @code{hide-shells} (default @code{#~(string-append #$shadow "/sbin/nologin")})
21537 Users with shells listed will be hidden from the SDDM greeter.
21538
21539 @item @code{session-command} (default @code{#~(string-append #$sddm "/share/sddm/scripts/wayland-session")})
21540 Script to run before starting a wayland session.
21541
21542 @item @code{sessions-directory} (default "/run/current-system/profile/share/wayland-sessions")
21543 Directory to look for desktop files starting wayland sessions.
21544
21545 @item @code{xorg-configuration} (default @code{(xorg-configuration)})
21546 Configuration of the Xorg graphical server.
21547
21548 @item @code{xauth-path} (default @code{#~(string-append #$xauth "/bin/xauth")})
21549 Path to xauth.
21550
21551 @item @code{xephyr-path} (default @code{#~(string-append #$xorg-server "/bin/Xephyr")})
21552 Path to Xephyr.
21553
21554 @item @code{xdisplay-start} (default @code{#~(string-append #$sddm "/share/sddm/scripts/Xsetup")})
21555 Script to run after starting xorg-server.
21556
21557 @item @code{xdisplay-stop} (default @code{#~(string-append #$sddm "/share/sddm/scripts/Xstop")})
21558 Script to run before stopping xorg-server.
21559
21560 @item @code{xsession-command} (default: @code{xinitrc})
21561 Script to run before starting a X session.
21562
21563 @item @code{xsessions-directory} (default: "/run/current-system/profile/share/xsessions")
21564 Directory to look for desktop files starting X sessions.
21565
21566 @item @code{minimum-vt} (default: 7)
21567 Minimum VT to use.
21568
21569 @item @code{auto-login-user} (default "")
21570 User account that will be automatically logged in.
21571 Setting this to the empty string disables auto-login.
21572
21573 @item @code{auto-login-session} (default "")
21574 The @file{.desktop} file name to use as the auto-login session, or the empty string.
21575
21576 @item @code{relogin?} (default #f)
21577 Relogin after logout.
21578
21579 @end table
21580 @end deftp
21581
21582 @cindex lightdm, graphical login manager
21583 @cindex display manager, lightdm
21584 @anchor{lightdm}
21585 @defvr {Scheme Variable} lightdm-service-type
21586 This is the type of the service to run the
21587 @url{https://github.com/canonical/lightdm,LightDM display manager}. Its
21588 value must be a @code{lightdm-configuration} record, which is documented
21589 below. Among its distinguishing features are TigerVNC integration for
21590 easily remoting your desktop as well as support for the XDMCP protocol,
21591 which can be used by remote clients to start a session from the login
21592 manager.
21593
21594 In its most basic form, it can be used simply as:
21595
21596 @lisp
21597 (service lightdm-service-type)
21598 @end lisp
21599
21600 A more elaborate example making use of the VNC capabilities and enabling
21601 more features and verbose logs could look like:
21602
21603 @lisp
21604 (service lightdm-service-type
21605 (lightdm-configuration
21606 (allow-empty-passwords? #t)
21607 (xdmcp? #t)
21608 (vnc-server? #t)
21609 (vnc-server-command
21610 (file-append tigervnc-server "/bin/Xvnc"
21611 " -SecurityTypes None"))
21612 (seats
21613 (list (lightdm-seat-configuration
21614 (name "*")
21615 (user-session "ratpoison"))))))
21616 @end lisp
21617 @end defvr
21618
21619 @c The LightDM service documentation can be auto-generated via the
21620 @c 'generate-doc' procedure at the bottom of the (gnu services lightdm)
21621 @c module.
21622 @c %start of fragment
21623 @deftp {Data Type} lightdm-configuration
21624 Available @code{lightdm-configuration} fields are:
21625
21626 @table @asis
21627 @item @code{lightdm} (default: @code{lightdm}) (type: file-like)
21628 The lightdm package to use.
21629
21630 @item @code{allow-empty-passwords?} (default: @code{#f}) (type: boolean)
21631 Whether users not having a password set can login.
21632
21633 @item @code{debug?} (default: @code{#f}) (type: boolean)
21634 Enable verbose output.
21635
21636 @item @code{xorg-configuration} (type: xorg-configuration)
21637 The default Xorg server configuration to use to generate the Xorg server
21638 start script. It can be refined per seat via the @code{xserver-command}
21639 of the @code{<lightdm-seat-configuration>} record, if desired.
21640
21641 @item @code{greeters} (type: list-of-greeter-configurations)
21642 The LightDM greeter configurations specifying the greeters to use.
21643
21644 @item @code{seats} (type: list-of-seat-configurations)
21645 The seat configurations to use. A LightDM seat is akin to a user.
21646
21647 @item @code{xdmcp?} (default: @code{#f}) (type: boolean)
21648 Whether a XDMCP server should listen on port UDP 177.
21649
21650 @item @code{xdmcp-listen-address} (type: maybe-string)
21651 The host or IP address the XDMCP server listens for incoming
21652 connections. When unspecified, listen on for any hosts/IP addresses.
21653
21654 @item @code{vnc-server?} (default: @code{#f}) (type: boolean)
21655 Whether a VNC server is started.
21656
21657 @item @code{vnc-server-command} (type: file-like)
21658 The Xvnc command to use for the VNC server, it's possible to provide
21659 extra options not otherwise exposed along the command, for example to
21660 disable security:
21661
21662 @lisp
21663 (vnc-server-command (file-append tigervnc-server "/bin/Xvnc"
21664 " -SecurityTypes None" ))
21665 @end lisp
21666
21667 Or to set a PasswordFile for the classic (unsecure) VncAuth
21668 mecanism:
21669
21670 @lisp
21671 (vnc-server-command (file-append tigervnc-server "/bin/Xvnc"
21672 " -PasswordFile /var/lib/lightdm/.vnc/passwd"))
21673 @end lisp
21674
21675 The password file should be manually created using the
21676 @command{vncpasswd} command. Note that LightDM will create new sessions
21677 for VNC users, which means they need to authenticate in the same way as
21678 local users would.
21679
21680 @item @code{vnc-server-listen-address} (type: maybe-string)
21681 The host or IP address the VNC server listens for incoming connections.
21682 When unspecified, listen for any hosts/IP addresses.
21683
21684 @item @code{vnc-server-port} (default: @code{5900}) (type: number)
21685 The TCP port the VNC server should listen to.
21686
21687 @item @code{extra-config} (default: @code{()}) (type: list-of-strings)
21688 Extra configuration values to append to the LightDM configuration file.
21689
21690 @end table
21691 @end deftp
21692
21693
21694 @c %end of fragment
21695 @c %start of fragment
21696
21697 @deftp {Data Type} lightdm-gtk-greeter-configuration
21698 Available @code{lightdm-gtk-greeter-configuration} fields are:
21699
21700 @table @asis
21701 @item @code{lightdm-gtk-greeter} (default: @code{lightdm-gtk-greeter}) (type: file-like)
21702 The lightdm-gtk-greeter package to use.
21703
21704 @item @code{assets} @
21705 (default: @code{(adwaita-icon-theme gnome-themes-extrahicolor-icon-theme)}) @
21706 (type: list-of-file-likes)
21707 The list of packages complementing the greeter, such as package
21708 providing icon themes.
21709
21710 @item @code{theme-name} (default: @code{"Adwaita"}) (type: string)
21711 The name of the theme to use.
21712
21713 @item @code{icon-theme-name} (default: @code{"Adwaita"}) (type: string)
21714 The name of the icon theme to use.
21715
21716 @item @code{cursor-theme-name} (default: @code{"Adwaita"}) (type: string)
21717 The name of the cursor theme to use.
21718
21719 @item @code{cursor-theme-size} (default: @code{16}) (type: number)
21720 The size to use for the cursor theme.
21721
21722 @item @code{allow-debugging?} (type: maybe-boolean)
21723 Set to #t to enable debug log level.
21724
21725 @item @code{background} (type: file-like)
21726 The background image to use.
21727
21728 @item @code{at-spi-enabled?} (default: @code{#f}) (type: boolean)
21729 Enable accessibility support through the Assistive Technology Service
21730 Provider Interface (AT-SPI).
21731
21732 @item @code{a11y-states} @
21733 (default: @code{(contrast font keyboard reader)}) (type: list-of-a11y-states)
21734 The accessibility features to enable, given as list of symbols.
21735
21736 @item @code{reader} (type: maybe-file-like)
21737 The command to use to launch a screen reader.
21738
21739 @item @code{extra-config} (default: @code{()}) (type: list-of-strings)
21740 Extra configuration values to append to the LightDM GTK Greeter
21741 configuration file.
21742
21743 @end table
21744 @end deftp
21745
21746 @c %end of fragment
21747 @c %start of fragment
21748
21749 @deftp {Data Type} lightdm-seat-configuration
21750 Available @code{lightdm-seat-configuration} fields are:
21751
21752 @table @asis
21753 @item @code{name} (type: seat-name)
21754 The name of the seat. An asterisk (*) can be used in the name to apply
21755 the seat configuration to all the seat names it matches.
21756
21757 @item @code{user-session} (type: maybe-string)
21758 The session to use by default. The session name must be provided as a
21759 lowercase string, such as @code{"gnome"}, @code{"ratpoison"}, etc.
21760
21761 @item @code{type} (default: @code{local}) (type: seat-type)
21762 The type of the seat, either the @code{local} or @code{xremote} symbol.
21763
21764 @item @code{autologin-user} (type: maybe-string)
21765 The username to automatically log in with by default.
21766
21767 @item @code{greeter-session} @
21768 (default: @code{lightdm-gtk-greeter}) (type: greeter-session)
21769 The greeter session to use, specified as a symbol. Currently, only
21770 @code{lightdm-gtk-greeter} is supported.
21771
21772 @item @code{xserver-command} (type: maybe-file-like)
21773 The Xorg server command to run.
21774
21775 @item @code{session-wrapper} (type: file-like)
21776 The xinitrc session wrapper to use.
21777
21778 @item @code{extra-config} (default: @code{()}) (type: list-of-strings)
21779 Extra configuration values to append to the seat configuration section.
21780
21781 @end table
21782 @end deftp
21783 @c %end of fragment
21784
21785
21786 @cindex Xorg, configuration
21787 @deftp {Data Type} xorg-configuration
21788 This data type represents the configuration of the Xorg graphical
21789 display server. Note that there is no Xorg service; instead, the X
21790 server is started by a ``display manager'' such as GDM, SDDM, LightDM or
21791 SLiM@. Thus, the configuration of these display managers aggregates an
21792 @code{xorg-configuration} record.
21793
21794 @table @asis
21795 @item @code{modules} (default: @code{%default-xorg-modules})
21796 This is a list of @dfn{module packages} loaded by the Xorg
21797 server---e.g., @code{xf86-video-vesa}, @code{xf86-input-keyboard}, and so on.
21798
21799 @item @code{fonts} (default: @code{%default-xorg-fonts})
21800 This is a list of font directories to add to the server's @dfn{font path}.
21801
21802 @item @code{drivers} (default: @code{'()})
21803 This must be either the empty list, in which case Xorg chooses a graphics
21804 driver automatically, or a list of driver names that will be tried in this
21805 order---e.g., @code{("modesetting" "vesa")}.
21806
21807 @item @code{resolutions} (default: @code{'()})
21808 When @code{resolutions} is the empty list, Xorg chooses an appropriate screen
21809 resolution. Otherwise, it must be a list of resolutions---e.g., @code{((1024
21810 768) (640 480))}.
21811
21812 @cindex keyboard layout, for Xorg
21813 @cindex keymap, for Xorg
21814 @item @code{keyboard-layout} (default: @code{#f})
21815 If this is @code{#f}, Xorg uses the default keyboard layout---usually US
21816 English (``qwerty'') for a 105-key PC keyboard.
21817
21818 Otherwise this must be a @code{keyboard-layout} object specifying the keyboard
21819 layout in use when Xorg is running. @xref{Keyboard Layout}, for more
21820 information on how to specify the keyboard layout.
21821
21822 @item @code{extra-config} (default: @code{'()})
21823 This is a list of strings or objects appended to the configuration file. It
21824 is used to pass extra text to be added verbatim to the configuration file.
21825
21826 @item @code{server} (default: @code{xorg-server})
21827 This is the package providing the Xorg server.
21828
21829 @item @code{server-arguments} (default: @code{%default-xorg-server-arguments})
21830 This is the list of command-line arguments to pass to the X server. The
21831 default is @code{-nolisten tcp}.
21832 @end table
21833 @end deftp
21834
21835 @deffn {Scheme Procedure} set-xorg-configuration @var{config} @
21836 [@var{login-manager-service-type}]
21837 Tell the log-in manager (of type @var{login-manager-service-type}) to use
21838 @var{config}, an @code{<xorg-configuration>} record.
21839
21840 Since the Xorg configuration is embedded in the log-in manager's
21841 configuration---e.g., @code{gdm-configuration}---this procedure provides a
21842 shorthand to set the Xorg configuration.
21843 @end deffn
21844
21845 @deffn {Scheme Procedure} xorg-start-command [@var{config}]
21846 Return a @code{startx} script in which the modules, fonts, etc. specified
21847 in @var{config}, are available. The result should be used in place of
21848 @code{startx}.
21849
21850 Usually the X server is started by a login manager.
21851 @end deffn
21852
21853
21854 @deffn {Scheme Procedure} screen-locker-service @var{package} [@var{program}]
21855 Add @var{package}, a package for a screen locker or screen saver whose
21856 command is @var{program}, to the set of setuid programs and add a PAM entry
21857 for it. For example:
21858
21859 @lisp
21860 (screen-locker-service xlockmore "xlock")
21861 @end lisp
21862
21863 makes the good ol' XlockMore usable.
21864 @end deffn
21865
21866
21867 @node Printing Services
21868 @subsection Printing Services
21869
21870 @cindex printer support with CUPS
21871 The @code{(gnu services cups)} module provides a Guix service definition
21872 for the CUPS printing service. To add printer support to a Guix
21873 system, add a @code{cups-service} to the operating system definition:
21874
21875 @deffn {Scheme Variable} cups-service-type
21876 The service type for the CUPS print server. Its value should be a valid
21877 CUPS configuration (see below). To use the default settings, simply
21878 write:
21879 @lisp
21880 (service cups-service-type)
21881 @end lisp
21882 @end deffn
21883
21884 The CUPS configuration controls the basic things about your CUPS
21885 installation: what interfaces it listens on, what to do if a print job
21886 fails, how much logging to do, and so on. To actually add a printer,
21887 you have to visit the @url{http://localhost:631} URL, or use a tool such
21888 as GNOME's printer configuration services. By default, configuring a
21889 CUPS service will generate a self-signed certificate if needed, for
21890 secure connections to the print server.
21891
21892 Suppose you want to enable the Web interface of CUPS and also add
21893 support for Epson printers @i{via} the @code{epson-inkjet-printer-escpr}
21894 package and for HP printers @i{via} the @code{hplip-minimal} package.
21895 You can do that directly, like this (you need to use the
21896 @code{(gnu packages cups)} module):
21897
21898 @lisp
21899 (service cups-service-type
21900 (cups-configuration
21901 (web-interface? #t)
21902 (extensions
21903 (list cups-filters epson-inkjet-printer-escpr hplip-minimal))))
21904 @end lisp
21905
21906 @quotation Note
21907 If you wish to use the Qt5 based GUI which comes with the hplip
21908 package then it is suggested that you install the @code{hplip} package,
21909 either in your OS configuration file or as your user.
21910 @end quotation
21911
21912 The available configuration parameters follow. Each parameter
21913 definition is preceded by its type; for example, @samp{string-list foo}
21914 indicates that the @code{foo} parameter should be specified as a list of
21915 strings. There is also a way to specify the configuration as a string,
21916 if you have an old @code{cupsd.conf} file that you want to port over
21917 from some other system; see the end for more details.
21918
21919 @c The following documentation was initially generated by
21920 @c (generate-documentation) in (gnu services cups). Manually maintained
21921 @c documentation is better, so we shouldn't hesitate to edit below as
21922 @c needed. However if the change you want to make to this documentation
21923 @c can be done in an automated way, it's probably easier to change
21924 @c (generate-documentation) than to make it below and have to deal with
21925 @c the churn as CUPS updates.
21926
21927
21928 Available @code{cups-configuration} fields are:
21929
21930 @deftypevr {@code{cups-configuration} parameter} package cups
21931 The CUPS package.
21932 @end deftypevr
21933
21934 @deftypevr {@code{cups-configuration} parameter} package-list extensions (default: @code{(list brlaser cups-filters epson-inkjet-printer-escpr foomatic-filters hplip-minimal splix)})
21935 Drivers and other extensions to the CUPS package.
21936 @end deftypevr
21937
21938 @deftypevr {@code{cups-configuration} parameter} files-configuration files-configuration
21939 Configuration of where to write logs, what directories to use for print
21940 spools, and related privileged configuration parameters.
21941
21942 Available @code{files-configuration} fields are:
21943
21944 @deftypevr {@code{files-configuration} parameter} log-location access-log
21945 Defines the access log filename. Specifying a blank filename disables
21946 access log generation. The value @code{stderr} causes log entries to be
21947 sent to the standard error file when the scheduler is running in the
21948 foreground, or to the system log daemon when run in the background. The
21949 value @code{syslog} causes log entries to be sent to the system log
21950 daemon. The server name may be included in filenames using the string
21951 @code{%s}, as in @code{/var/log/cups/%s-access_log}.
21952
21953 Defaults to @samp{"/var/log/cups/access_log"}.
21954 @end deftypevr
21955
21956 @deftypevr {@code{files-configuration} parameter} file-name cache-dir
21957 Where CUPS should cache data.
21958
21959 Defaults to @samp{"/var/cache/cups"}.
21960 @end deftypevr
21961
21962 @deftypevr {@code{files-configuration} parameter} string config-file-perm
21963 Specifies the permissions for all configuration files that the scheduler
21964 writes.
21965
21966 Note that the permissions for the printers.conf file are currently
21967 masked to only allow access from the scheduler user (typically root).
21968 This is done because printer device URIs sometimes contain sensitive
21969 authentication information that should not be generally known on the
21970 system. There is no way to disable this security feature.
21971
21972 Defaults to @samp{"0640"}.
21973 @end deftypevr
21974
21975 @deftypevr {@code{files-configuration} parameter} log-location error-log
21976 Defines the error log filename. Specifying a blank filename disables
21977 error log generation. The value @code{stderr} causes log entries to be
21978 sent to the standard error file when the scheduler is running in the
21979 foreground, or to the system log daemon when run in the background. The
21980 value @code{syslog} causes log entries to be sent to the system log
21981 daemon. The server name may be included in filenames using the string
21982 @code{%s}, as in @code{/var/log/cups/%s-error_log}.
21983
21984 Defaults to @samp{"/var/log/cups/error_log"}.
21985 @end deftypevr
21986
21987 @deftypevr {@code{files-configuration} parameter} string fatal-errors
21988 Specifies which errors are fatal, causing the scheduler to exit. The
21989 kind strings are:
21990
21991 @table @code
21992 @item none
21993 No errors are fatal.
21994
21995 @item all
21996 All of the errors below are fatal.
21997
21998 @item browse
21999 Browsing initialization errors are fatal, for example failed connections
22000 to the DNS-SD daemon.
22001
22002 @item config
22003 Configuration file syntax errors are fatal.
22004
22005 @item listen
22006 Listen or Port errors are fatal, except for IPv6 failures on the
22007 loopback or @code{any} addresses.
22008
22009 @item log
22010 Log file creation or write errors are fatal.
22011
22012 @item permissions
22013 Bad startup file permissions are fatal, for example shared TLS
22014 certificate and key files with world-read permissions.
22015 @end table
22016
22017 Defaults to @samp{"all -browse"}.
22018 @end deftypevr
22019
22020 @deftypevr {@code{files-configuration} parameter} boolean file-device?
22021 Specifies whether the file pseudo-device can be used for new printer
22022 queues. The URI @uref{file:///dev/null} is always allowed.
22023
22024 Defaults to @samp{#f}.
22025 @end deftypevr
22026
22027 @deftypevr {@code{files-configuration} parameter} string group
22028 Specifies the group name or ID that will be used when executing external
22029 programs.
22030
22031 Defaults to @samp{"lp"}.
22032 @end deftypevr
22033
22034 @deftypevr {@code{files-configuration} parameter} string log-file-group
22035 Specifies the group name or ID that will be used for log files.
22036
22037 Defaults to @samp{"lpadmin"}.
22038 @end deftypevr
22039
22040 @deftypevr {@code{files-configuration} parameter} string log-file-perm
22041 Specifies the permissions for all log files that the scheduler writes.
22042
22043 Defaults to @samp{"0644"}.
22044 @end deftypevr
22045
22046 @deftypevr {@code{files-configuration} parameter} log-location page-log
22047 Defines the page log filename. Specifying a blank filename disables
22048 page log generation. The value @code{stderr} causes log entries to be
22049 sent to the standard error file when the scheduler is running in the
22050 foreground, or to the system log daemon when run in the background. The
22051 value @code{syslog} causes log entries to be sent to the system log
22052 daemon. The server name may be included in filenames using the string
22053 @code{%s}, as in @code{/var/log/cups/%s-page_log}.
22054
22055 Defaults to @samp{"/var/log/cups/page_log"}.
22056 @end deftypevr
22057
22058 @deftypevr {@code{files-configuration} parameter} string remote-root
22059 Specifies the username that is associated with unauthenticated accesses
22060 by clients claiming to be the root user. The default is @code{remroot}.
22061
22062 Defaults to @samp{"remroot"}.
22063 @end deftypevr
22064
22065 @deftypevr {@code{files-configuration} parameter} file-name request-root
22066 Specifies the directory that contains print jobs and other HTTP request
22067 data.
22068
22069 Defaults to @samp{"/var/spool/cups"}.
22070 @end deftypevr
22071
22072 @deftypevr {@code{files-configuration} parameter} sandboxing sandboxing
22073 Specifies the level of security sandboxing that is applied to print
22074 filters, backends, and other child processes of the scheduler; either
22075 @code{relaxed} or @code{strict}. This directive is currently only
22076 used/supported on macOS.
22077
22078 Defaults to @samp{strict}.
22079 @end deftypevr
22080
22081 @deftypevr {@code{files-configuration} parameter} file-name server-keychain
22082 Specifies the location of TLS certificates and private keys. CUPS will
22083 look for public and private keys in this directory: @file{.crt} files
22084 for PEM-encoded certificates and corresponding @file{.key} files for
22085 PEM-encoded private keys.
22086
22087 Defaults to @samp{"/etc/cups/ssl"}.
22088 @end deftypevr
22089
22090 @deftypevr {@code{files-configuration} parameter} file-name server-root
22091 Specifies the directory containing the server configuration files.
22092
22093 Defaults to @samp{"/etc/cups"}.
22094 @end deftypevr
22095
22096 @deftypevr {@code{files-configuration} parameter} boolean sync-on-close?
22097 Specifies whether the scheduler calls fsync(2) after writing
22098 configuration or state files.
22099
22100 Defaults to @samp{#f}.
22101 @end deftypevr
22102
22103 @deftypevr {@code{files-configuration} parameter} space-separated-string-list system-group
22104 Specifies the group(s) to use for @code{@@SYSTEM} group authentication.
22105 @end deftypevr
22106
22107 @deftypevr {@code{files-configuration} parameter} file-name temp-dir
22108 Specifies the directory where temporary files are stored.
22109
22110 Defaults to @samp{"/var/spool/cups/tmp"}.
22111 @end deftypevr
22112
22113 @deftypevr {@code{files-configuration} parameter} string user
22114 Specifies the user name or ID that is used when running external
22115 programs.
22116
22117 Defaults to @samp{"lp"}.
22118 @end deftypevr
22119
22120 @deftypevr {@code{files-configuration} parameter} string set-env
22121 Set the specified environment variable to be passed to child processes.
22122
22123 Defaults to @samp{"variable value"}.
22124 @end deftypevr
22125 @end deftypevr
22126
22127 @deftypevr {@code{cups-configuration} parameter} access-log-level access-log-level
22128 Specifies the logging level for the AccessLog file. The @code{config}
22129 level logs when printers and classes are added, deleted, or modified and
22130 when configuration files are accessed or updated. The @code{actions}
22131 level logs when print jobs are submitted, held, released, modified, or
22132 canceled, and any of the conditions for @code{config}. The @code{all}
22133 level logs all requests.
22134
22135 Defaults to @samp{actions}.
22136 @end deftypevr
22137
22138 @deftypevr {@code{cups-configuration} parameter} boolean auto-purge-jobs?
22139 Specifies whether to purge job history data automatically when it is no
22140 longer required for quotas.
22141
22142 Defaults to @samp{#f}.
22143 @end deftypevr
22144
22145 @deftypevr {@code{cups-configuration} parameter} comma-separated-string-list browse-dns-sd-sub-types
22146 Specifies a list of DNS-SD sub-types to advertise for each shared printer.
22147 For example, @samp{"_cups" "_print"} will tell network clients that both
22148 CUPS sharing and IPP Everywhere are supported.
22149
22150 Defaults to @samp{"_cups"}.
22151 @end deftypevr
22152
22153 @deftypevr {@code{cups-configuration} parameter} browse-local-protocols browse-local-protocols
22154 Specifies which protocols to use for local printer sharing.
22155
22156 Defaults to @samp{dnssd}.
22157 @end deftypevr
22158
22159 @deftypevr {@code{cups-configuration} parameter} boolean browse-web-if?
22160 Specifies whether the CUPS web interface is advertised.
22161
22162 Defaults to @samp{#f}.
22163 @end deftypevr
22164
22165 @deftypevr {@code{cups-configuration} parameter} boolean browsing?
22166 Specifies whether shared printers are advertised.
22167
22168 Defaults to @samp{#f}.
22169 @end deftypevr
22170
22171 @deftypevr {@code{cups-configuration} parameter} string classification
22172 Specifies the security classification of the server. Any valid banner
22173 name can be used, including @samp{"classified"}, @samp{"confidential"},
22174 @samp{"secret"}, @samp{"topsecret"}, and @samp{"unclassified"}, or the
22175 banner can be omitted to disable secure printing functions.
22176
22177 Defaults to @samp{""}.
22178 @end deftypevr
22179
22180 @deftypevr {@code{cups-configuration} parameter} boolean classify-override?
22181 Specifies whether users may override the classification (cover page) of
22182 individual print jobs using the @code{job-sheets} option.
22183
22184 Defaults to @samp{#f}.
22185 @end deftypevr
22186
22187 @deftypevr {@code{cups-configuration} parameter} default-auth-type default-auth-type
22188 Specifies the default type of authentication to use.
22189
22190 Defaults to @samp{Basic}.
22191 @end deftypevr
22192
22193 @deftypevr {@code{cups-configuration} parameter} default-encryption default-encryption
22194 Specifies whether encryption will be used for authenticated requests.
22195
22196 Defaults to @samp{Required}.
22197 @end deftypevr
22198
22199 @deftypevr {@code{cups-configuration} parameter} string default-language
22200 Specifies the default language to use for text and web content.
22201
22202 Defaults to @samp{"en"}.
22203 @end deftypevr
22204
22205 @deftypevr {@code{cups-configuration} parameter} string default-paper-size
22206 Specifies the default paper size for new print queues. @samp{"Auto"}
22207 uses a locale-specific default, while @samp{"None"} specifies there is
22208 no default paper size. Specific size names are typically
22209 @samp{"Letter"} or @samp{"A4"}.
22210
22211 Defaults to @samp{"Auto"}.
22212 @end deftypevr
22213
22214 @deftypevr {@code{cups-configuration} parameter} string default-policy
22215 Specifies the default access policy to use.
22216
22217 Defaults to @samp{"default"}.
22218 @end deftypevr
22219
22220 @deftypevr {@code{cups-configuration} parameter} boolean default-shared?
22221 Specifies whether local printers are shared by default.
22222
22223 Defaults to @samp{#t}.
22224 @end deftypevr
22225
22226 @deftypevr {@code{cups-configuration} parameter} non-negative-integer dirty-clean-interval
22227 Specifies the delay for updating of configuration and state files, in
22228 seconds. A value of 0 causes the update to happen as soon as possible,
22229 typically within a few milliseconds.
22230
22231 Defaults to @samp{30}.
22232 @end deftypevr
22233
22234 @deftypevr {@code{cups-configuration} parameter} error-policy error-policy
22235 Specifies what to do when an error occurs. Possible values are
22236 @code{abort-job}, which will discard the failed print job;
22237 @code{retry-job}, which will retry the job at a later time;
22238 @code{retry-current-job}, which retries the failed job immediately; and
22239 @code{stop-printer}, which stops the printer.
22240
22241 Defaults to @samp{stop-printer}.
22242 @end deftypevr
22243
22244 @deftypevr {@code{cups-configuration} parameter} non-negative-integer filter-limit
22245 Specifies the maximum cost of filters that are run concurrently, which
22246 can be used to minimize disk, memory, and CPU resource problems. A
22247 limit of 0 disables filter limiting. An average print to a
22248 non-PostScript printer needs a filter limit of about 200. A PostScript
22249 printer needs about half that (100). Setting the limit below these
22250 thresholds will effectively limit the scheduler to printing a single job
22251 at any time.
22252
22253 Defaults to @samp{0}.
22254 @end deftypevr
22255
22256 @deftypevr {@code{cups-configuration} parameter} non-negative-integer filter-nice
22257 Specifies the scheduling priority of filters that are run to print a
22258 job. The nice value ranges from 0, the highest priority, to 19, the
22259 lowest priority.
22260
22261 Defaults to @samp{0}.
22262 @end deftypevr
22263
22264 @deftypevr {@code{cups-configuration} parameter} host-name-lookups host-name-lookups
22265 Specifies whether to do reverse lookups on connecting clients. The
22266 @code{double} setting causes @code{cupsd} to verify that the hostname
22267 resolved from the address matches one of the addresses returned for that
22268 hostname. Double lookups also prevent clients with unregistered
22269 addresses from connecting to your server. Only set this option to
22270 @code{#t} or @code{double} if absolutely required.
22271
22272 Defaults to @samp{#f}.
22273 @end deftypevr
22274
22275 @deftypevr {@code{cups-configuration} parameter} non-negative-integer job-kill-delay
22276 Specifies the number of seconds to wait before killing the filters and
22277 backend associated with a canceled or held job.
22278
22279 Defaults to @samp{30}.
22280 @end deftypevr
22281
22282 @deftypevr {@code{cups-configuration} parameter} non-negative-integer job-retry-interval
22283 Specifies the interval between retries of jobs in seconds. This is
22284 typically used for fax queues but can also be used with normal print
22285 queues whose error policy is @code{retry-job} or
22286 @code{retry-current-job}.
22287
22288 Defaults to @samp{30}.
22289 @end deftypevr
22290
22291 @deftypevr {@code{cups-configuration} parameter} non-negative-integer job-retry-limit
22292 Specifies the number of retries that are done for jobs. This is
22293 typically used for fax queues but can also be used with normal print
22294 queues whose error policy is @code{retry-job} or
22295 @code{retry-current-job}.
22296
22297 Defaults to @samp{5}.
22298 @end deftypevr
22299
22300 @deftypevr {@code{cups-configuration} parameter} boolean keep-alive?
22301 Specifies whether to support HTTP keep-alive connections.
22302
22303 Defaults to @samp{#t}.
22304 @end deftypevr
22305
22306 @deftypevr {@code{cups-configuration} parameter} non-negative-integer limit-request-body
22307 Specifies the maximum size of print files, IPP requests, and HTML form
22308 data. A limit of 0 disables the limit check.
22309
22310 Defaults to @samp{0}.
22311 @end deftypevr
22312
22313 @deftypevr {@code{cups-configuration} parameter} multiline-string-list listen
22314 Listens on the specified interfaces for connections. Valid values are
22315 of the form @var{address}:@var{port}, where @var{address} is either an
22316 IPv6 address enclosed in brackets, an IPv4 address, or @code{*} to
22317 indicate all addresses. Values can also be file names of local UNIX
22318 domain sockets. The Listen directive is similar to the Port directive
22319 but allows you to restrict access to specific interfaces or networks.
22320 @end deftypevr
22321
22322 @deftypevr {@code{cups-configuration} parameter} non-negative-integer listen-back-log
22323 Specifies the number of pending connections that will be allowed. This
22324 normally only affects very busy servers that have reached the MaxClients
22325 limit, but can also be triggered by large numbers of simultaneous
22326 connections. When the limit is reached, the operating system will
22327 refuse additional connections until the scheduler can accept the pending
22328 ones.
22329
22330 Defaults to @samp{128}.
22331 @end deftypevr
22332
22333 @deftypevr {@code{cups-configuration} parameter} location-access-control-list location-access-controls
22334 Specifies a set of additional access controls.
22335
22336 Available @code{location-access-controls} fields are:
22337
22338 @deftypevr {@code{location-access-controls} parameter} file-name path
22339 Specifies the URI path to which the access control applies.
22340 @end deftypevr
22341
22342 @deftypevr {@code{location-access-controls} parameter} access-control-list access-controls
22343 Access controls for all access to this path, in the same format as the
22344 @code{access-controls} of @code{operation-access-control}.
22345
22346 Defaults to @samp{()}.
22347 @end deftypevr
22348
22349 @deftypevr {@code{location-access-controls} parameter} method-access-control-list method-access-controls
22350 Access controls for method-specific access to this path.
22351
22352 Defaults to @samp{()}.
22353
22354 Available @code{method-access-controls} fields are:
22355
22356 @deftypevr {@code{method-access-controls} parameter} boolean reverse?
22357 If @code{#t}, apply access controls to all methods except the listed
22358 methods. Otherwise apply to only the listed methods.
22359
22360 Defaults to @samp{#f}.
22361 @end deftypevr
22362
22363 @deftypevr {@code{method-access-controls} parameter} method-list methods
22364 Methods to which this access control applies.
22365
22366 Defaults to @samp{()}.
22367 @end deftypevr
22368
22369 @deftypevr {@code{method-access-controls} parameter} access-control-list access-controls
22370 Access control directives, as a list of strings. Each string should be
22371 one directive, such as @samp{"Order allow,deny"}.
22372
22373 Defaults to @samp{()}.
22374 @end deftypevr
22375 @end deftypevr
22376 @end deftypevr
22377
22378 @deftypevr {@code{cups-configuration} parameter} non-negative-integer log-debug-history
22379 Specifies the number of debugging messages that are retained for logging
22380 if an error occurs in a print job. Debug messages are logged regardless
22381 of the LogLevel setting.
22382
22383 Defaults to @samp{100}.
22384 @end deftypevr
22385
22386 @deftypevr {@code{cups-configuration} parameter} log-level log-level
22387 Specifies the level of logging for the ErrorLog file. The value
22388 @code{none} stops all logging while @code{debug2} logs everything.
22389
22390 Defaults to @samp{info}.
22391 @end deftypevr
22392
22393 @deftypevr {@code{cups-configuration} parameter} log-time-format log-time-format
22394 Specifies the format of the date and time in the log files. The value
22395 @code{standard} logs whole seconds while @code{usecs} logs microseconds.
22396
22397 Defaults to @samp{standard}.
22398 @end deftypevr
22399
22400 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-clients
22401 Specifies the maximum number of simultaneous clients that are allowed by
22402 the scheduler.
22403
22404 Defaults to @samp{100}.
22405 @end deftypevr
22406
22407 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-clients-per-host
22408 Specifies the maximum number of simultaneous clients that are allowed
22409 from a single address.
22410
22411 Defaults to @samp{100}.
22412 @end deftypevr
22413
22414 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-copies
22415 Specifies the maximum number of copies that a user can print of each
22416 job.
22417
22418 Defaults to @samp{9999}.
22419 @end deftypevr
22420
22421 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-hold-time
22422 Specifies the maximum time a job may remain in the @code{indefinite}
22423 hold state before it is canceled. A value of 0 disables cancellation of
22424 held jobs.
22425
22426 Defaults to @samp{0}.
22427 @end deftypevr
22428
22429 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs
22430 Specifies the maximum number of simultaneous jobs that are allowed. Set
22431 to 0 to allow an unlimited number of jobs.
22432
22433 Defaults to @samp{500}.
22434 @end deftypevr
22435
22436 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs-per-printer
22437 Specifies the maximum number of simultaneous jobs that are allowed per
22438 printer. A value of 0 allows up to MaxJobs jobs per printer.
22439
22440 Defaults to @samp{0}.
22441 @end deftypevr
22442
22443 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs-per-user
22444 Specifies the maximum number of simultaneous jobs that are allowed per
22445 user. A value of 0 allows up to MaxJobs jobs per user.
22446
22447 Defaults to @samp{0}.
22448 @end deftypevr
22449
22450 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-job-time
22451 Specifies the maximum time a job may take to print before it is
22452 canceled, in seconds. Set to 0 to disable cancellation of ``stuck'' jobs.
22453
22454 Defaults to @samp{10800}.
22455 @end deftypevr
22456
22457 @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-log-size
22458 Specifies the maximum size of the log files before they are rotated, in
22459 bytes. The value 0 disables log rotation.
22460
22461 Defaults to @samp{1048576}.
22462 @end deftypevr
22463
22464 @deftypevr {@code{cups-configuration} parameter} non-negative-integer multiple-operation-timeout
22465 Specifies the maximum amount of time to allow between files in a
22466 multiple file print job, in seconds.
22467
22468 Defaults to @samp{900}.
22469 @end deftypevr
22470
22471 @deftypevr {@code{cups-configuration} parameter} string page-log-format
22472 Specifies the format of PageLog lines. Sequences beginning with percent
22473 (@samp{%}) characters are replaced with the corresponding information,
22474 while all other characters are copied literally. The following percent
22475 sequences are recognized:
22476
22477 @table @samp
22478 @item %%
22479 insert a single percent character
22480
22481 @item %@{name@}
22482 insert the value of the specified IPP attribute
22483
22484 @item %C
22485 insert the number of copies for the current page
22486
22487 @item %P
22488 insert the current page number
22489
22490 @item %T
22491 insert the current date and time in common log format
22492
22493 @item %j
22494 insert the job ID
22495
22496 @item %p
22497 insert the printer name
22498
22499 @item %u
22500 insert the username
22501 @end table
22502
22503 A value of the empty string disables page logging. The string @code{%p
22504 %u %j %T %P %C %@{job-billing@} %@{job-originating-host-name@}
22505 %@{job-name@} %@{media@} %@{sides@}} creates a page log with the
22506 standard items.
22507
22508 Defaults to @samp{""}.
22509 @end deftypevr
22510
22511 @deftypevr {@code{cups-configuration} parameter} environment-variables environment-variables
22512 Passes the specified environment variable(s) to child processes; a list
22513 of strings.
22514
22515 Defaults to @samp{()}.
22516 @end deftypevr
22517
22518 @deftypevr {@code{cups-configuration} parameter} policy-configuration-list policies
22519 Specifies named access control policies.
22520
22521 Available @code{policy-configuration} fields are:
22522
22523 @deftypevr {@code{policy-configuration} parameter} string name
22524 Name of the policy.
22525 @end deftypevr
22526
22527 @deftypevr {@code{policy-configuration} parameter} string job-private-access
22528 Specifies an access list for a job's private values. @code{@@ACL} maps
22529 to the printer's requesting-user-name-allowed or
22530 requesting-user-name-denied values. @code{@@OWNER} maps to the job's
22531 owner. @code{@@SYSTEM} maps to the groups listed for the
22532 @code{system-group} field of the @code{files-configuration},
22533 which is reified into the @code{cups-files.conf(5)} file. Other
22534 possible elements of the access list include specific user names, and
22535 @code{@@@var{group}} to indicate members of a specific group. The
22536 access list may also be simply @code{all} or @code{default}.
22537
22538 Defaults to @samp{"@@OWNER @@SYSTEM"}.
22539 @end deftypevr
22540
22541 @deftypevr {@code{policy-configuration} parameter} string job-private-values
22542 Specifies the list of job values to make private, or @code{all},
22543 @code{default}, or @code{none}.
22544
22545 Defaults to @samp{"job-name job-originating-host-name
22546 job-originating-user-name phone"}.
22547 @end deftypevr
22548
22549 @deftypevr {@code{policy-configuration} parameter} string subscription-private-access
22550 Specifies an access list for a subscription's private values.
22551 @code{@@ACL} maps to the printer's requesting-user-name-allowed or
22552 requesting-user-name-denied values. @code{@@OWNER} maps to the job's
22553 owner. @code{@@SYSTEM} maps to the groups listed for the
22554 @code{system-group} field of the @code{files-configuration},
22555 which is reified into the @code{cups-files.conf(5)} file. Other
22556 possible elements of the access list include specific user names, and
22557 @code{@@@var{group}} to indicate members of a specific group. The
22558 access list may also be simply @code{all} or @code{default}.
22559
22560 Defaults to @samp{"@@OWNER @@SYSTEM"}.
22561 @end deftypevr
22562
22563 @deftypevr {@code{policy-configuration} parameter} string subscription-private-values
22564 Specifies the list of job values to make private, or @code{all},
22565 @code{default}, or @code{none}.
22566
22567 Defaults to @samp{"notify-events notify-pull-method notify-recipient-uri
22568 notify-subscriber-user-name notify-user-data"}.
22569 @end deftypevr
22570
22571 @deftypevr {@code{policy-configuration} parameter} operation-access-control-list access-controls
22572 Access control by IPP operation.
22573
22574 Defaults to @samp{()}.
22575 @end deftypevr
22576 @end deftypevr
22577
22578 @deftypevr {@code{cups-configuration} parameter} boolean-or-non-negative-integer preserve-job-files
22579 Specifies whether job files (documents) are preserved after a job is
22580 printed. If a numeric value is specified, job files are preserved for
22581 the indicated number of seconds after printing. Otherwise a boolean
22582 value applies indefinitely.
22583
22584 Defaults to @samp{86400}.
22585 @end deftypevr
22586
22587 @deftypevr {@code{cups-configuration} parameter} boolean-or-non-negative-integer preserve-job-history
22588 Specifies whether the job history is preserved after a job is printed.
22589 If a numeric value is specified, the job history is preserved for the
22590 indicated number of seconds after printing. If @code{#t}, the job
22591 history is preserved until the MaxJobs limit is reached.
22592
22593 Defaults to @samp{#t}.
22594 @end deftypevr
22595
22596 @deftypevr {@code{cups-configuration} parameter} non-negative-integer reload-timeout
22597 Specifies the amount of time to wait for job completion before
22598 restarting the scheduler.
22599
22600 Defaults to @samp{30}.
22601 @end deftypevr
22602
22603 @deftypevr {@code{cups-configuration} parameter} string rip-cache
22604 Specifies the maximum amount of memory to use when converting documents
22605 into bitmaps for a printer.
22606
22607 Defaults to @samp{"128m"}.
22608 @end deftypevr
22609
22610 @deftypevr {@code{cups-configuration} parameter} string server-admin
22611 Specifies the email address of the server administrator.
22612
22613 Defaults to @samp{"root@@localhost.localdomain"}.
22614 @end deftypevr
22615
22616 @deftypevr {@code{cups-configuration} parameter} host-name-list-or-* server-alias
22617 The ServerAlias directive is used for HTTP Host header validation when
22618 clients connect to the scheduler from external interfaces. Using the
22619 special name @code{*} can expose your system to known browser-based DNS
22620 rebinding attacks, even when accessing sites through a firewall. If the
22621 auto-discovery of alternate names does not work, we recommend listing
22622 each alternate name with a ServerAlias directive instead of using
22623 @code{*}.
22624
22625 Defaults to @samp{*}.
22626 @end deftypevr
22627
22628 @deftypevr {@code{cups-configuration} parameter} string server-name
22629 Specifies the fully-qualified host name of the server.
22630
22631 Defaults to @samp{"localhost"}.
22632 @end deftypevr
22633
22634 @deftypevr {@code{cups-configuration} parameter} server-tokens server-tokens
22635 Specifies what information is included in the Server header of HTTP
22636 responses. @code{None} disables the Server header. @code{ProductOnly}
22637 reports @code{CUPS}. @code{Major} reports @code{CUPS 2}. @code{Minor}
22638 reports @code{CUPS 2.0}. @code{Minimal} reports @code{CUPS 2.0.0}.
22639 @code{OS} reports @code{CUPS 2.0.0 (@var{uname})} where @var{uname} is
22640 the output of the @code{uname} command. @code{Full} reports @code{CUPS
22641 2.0.0 (@var{uname}) IPP/2.0}.
22642
22643 Defaults to @samp{Minimal}.
22644 @end deftypevr
22645
22646 @deftypevr {@code{cups-configuration} parameter} multiline-string-list ssl-listen
22647 Listens on the specified interfaces for encrypted connections. Valid
22648 values are of the form @var{address}:@var{port}, where @var{address} is
22649 either an IPv6 address enclosed in brackets, an IPv4 address, or
22650 @code{*} to indicate all addresses.
22651
22652 Defaults to @samp{()}.
22653 @end deftypevr
22654
22655 @deftypevr {@code{cups-configuration} parameter} ssl-options ssl-options
22656 Sets encryption options. By default, CUPS only supports encryption
22657 using TLS v1.0 or higher using known secure cipher suites. Security is
22658 reduced when @code{Allow} options are used, and enhanced when @code{Deny}
22659 options are used. The @code{AllowRC4} option enables the 128-bit RC4 cipher
22660 suites, which are required for some older clients. The @code{AllowSSL3} option
22661 enables SSL v3.0, which is required for some older clients that do not support
22662 TLS v1.0. The @code{DenyCBC} option disables all CBC cipher suites. The
22663 @code{DenyTLS1.0} option disables TLS v1.0 support - this sets the minimum
22664 protocol version to TLS v1.1.
22665
22666 Defaults to @samp{()}.
22667 @end deftypevr
22668
22669 @deftypevr {@code{cups-configuration} parameter} boolean strict-conformance?
22670 Specifies whether the scheduler requires clients to strictly adhere to
22671 the IPP specifications.
22672
22673 Defaults to @samp{#f}.
22674 @end deftypevr
22675
22676 @deftypevr {@code{cups-configuration} parameter} non-negative-integer timeout
22677 Specifies the HTTP request timeout, in seconds.
22678
22679 Defaults to @samp{900}.
22680
22681 @end deftypevr
22682
22683 @deftypevr {@code{cups-configuration} parameter} boolean web-interface?
22684 Specifies whether the web interface is enabled.
22685
22686 Defaults to @samp{#f}.
22687 @end deftypevr
22688
22689 At this point you're probably thinking ``oh dear, Guix manual, I like
22690 you but you can stop already with the configuration options''. Indeed.
22691 However, one more point: it could be that you have an existing
22692 @code{cupsd.conf} that you want to use. In that case, you can pass an
22693 @code{opaque-cups-configuration} as the configuration of a
22694 @code{cups-service-type}.
22695
22696 Available @code{opaque-cups-configuration} fields are:
22697
22698 @deftypevr {@code{opaque-cups-configuration} parameter} package cups
22699 The CUPS package.
22700 @end deftypevr
22701
22702 @deftypevr {@code{opaque-cups-configuration} parameter} string cupsd.conf
22703 The contents of the @code{cupsd.conf}, as a string.
22704 @end deftypevr
22705
22706 @deftypevr {@code{opaque-cups-configuration} parameter} string cups-files.conf
22707 The contents of the @code{cups-files.conf} file, as a string.
22708 @end deftypevr
22709
22710 For example, if your @code{cupsd.conf} and @code{cups-files.conf} are in
22711 strings of the same name, you could instantiate a CUPS service like
22712 this:
22713
22714 @lisp
22715 (service cups-service-type
22716 (opaque-cups-configuration
22717 (cupsd.conf cupsd.conf)
22718 (cups-files.conf cups-files.conf)))
22719 @end lisp
22720
22721
22722 @node Desktop Services
22723 @subsection Desktop Services
22724
22725 The @code{(gnu services desktop)} module provides services that are
22726 usually useful in the context of a ``desktop'' setup---that is, on a
22727 machine running a graphical display server, possibly with graphical user
22728 interfaces, etc. It also defines services that provide specific desktop
22729 environments like GNOME, Xfce or MATE.
22730
22731 To simplify things, the module defines a variable containing the set of
22732 services that users typically expect on a machine with a graphical
22733 environment and networking:
22734
22735 @defvr {Scheme Variable} %desktop-services
22736 This is a list of services that builds upon @code{%base-services} and
22737 adds or adjusts services for a typical ``desktop'' setup.
22738
22739 In particular, it adds a graphical login manager (@pxref{X Window,
22740 @code{gdm-service-type}}), screen lockers, a network management tool
22741 (@pxref{Networking Services, @code{network-manager-service-type}}) with modem
22742 support (@pxref{Networking Services, @code{modem-manager-service-type}}),
22743 energy and color management services, the @code{elogind} login and seat
22744 manager, the Polkit privilege service, the GeoClue location service, the
22745 AccountsService daemon that allows authorized users change system passwords,
22746 an NTP client (@pxref{Networking Services}), the Avahi daemon, and has the
22747 name service switch service configured to be able to use @code{nss-mdns}
22748 (@pxref{Name Service Switch, mDNS}).
22749 @end defvr
22750
22751 The @code{%desktop-services} variable can be used as the @code{services}
22752 field of an @code{operating-system} declaration (@pxref{operating-system
22753 Reference, @code{services}}).
22754
22755 Additionally, the @code{gnome-desktop-service-type},
22756 @code{xfce-desktop-service}, @code{mate-desktop-service-type},
22757 @code{lxqt-desktop-service-type} and @code{enlightenment-desktop-service-type}
22758 procedures can add GNOME, Xfce, MATE and/or Enlightenment to a system. To
22759 ``add GNOME'' means that system-level services like the backlight adjustment
22760 helpers and the power management utilities are added to the system, extending
22761 @code{polkit} and @code{dbus} appropriately, allowing GNOME to operate with
22762 elevated privileges on a limited number of special-purpose system interfaces.
22763 Additionally, adding a service made by @code{gnome-desktop-service-type} adds
22764 the GNOME metapackage to the system profile. Likewise, adding the Xfce
22765 service not only adds the @code{xfce} metapackage to the system profile, but
22766 it also gives the Thunar file manager the ability to open a ``root-mode'' file
22767 management window, if the user authenticates using the administrator's
22768 password via the standard polkit graphical interface. To ``add MATE'' means
22769 that @code{polkit} and @code{dbus} are extended appropriately, allowing MATE
22770 to operate with elevated privileges on a limited number of special-purpose
22771 system interfaces. Additionally, adding a service of type
22772 @code{mate-desktop-service-type} adds the MATE metapackage to the system
22773 profile. ``Adding Enlightenment'' means that @code{dbus} is extended
22774 appropriately, and several of Enlightenment's binaries are set as setuid,
22775 allowing Enlightenment's screen locker and other functionality to work as
22776 expected.
22777
22778 The desktop environments in Guix use the Xorg display server by
22779 default. If you'd like to use the newer display server protocol
22780 called Wayland, you need to enable Wayland support in GDM
22781 (@pxref{wayland-gdm}). Another solution is to use the
22782 @code{sddm-service} instead of GDM as the graphical login manager.
22783 You should then select the ``GNOME (Wayland)'' session in SDDM@.
22784 Alternatively you can also try starting GNOME on Wayland manually from a
22785 TTY with the command ``XDG_SESSION_TYPE=wayland exec dbus-run-session
22786 gnome-session``. Currently only GNOME has support for Wayland.
22787
22788 @defvr {Scheme Variable} gnome-desktop-service-type
22789 This is the type of the service that adds the @uref{https://www.gnome.org,
22790 GNOME} desktop environment. Its value is a @code{gnome-desktop-configuration}
22791 object (see below).
22792
22793 This service adds the @code{gnome} package to the system profile, and extends
22794 polkit with the actions from @code{gnome-settings-daemon}.
22795 @end defvr
22796
22797 @deftp {Data Type} gnome-desktop-configuration
22798 Configuration record for the GNOME desktop environment.
22799
22800 @table @asis
22801 @item @code{gnome} (default: @code{gnome})
22802 The GNOME package to use.
22803 @end table
22804 @end deftp
22805
22806 @defvr {Scheme Variable} xfce-desktop-service-type
22807 This is the type of a service to run the @uref{Xfce, https://xfce.org/}
22808 desktop environment. Its value is an @code{xfce-desktop-configuration} object
22809 (see below).
22810
22811 This service adds the @code{xfce} package to the system profile, and
22812 extends polkit with the ability for @code{thunar} to manipulate the file
22813 system as root from within a user session, after the user has authenticated
22814 with the administrator's password.
22815
22816 Note that @code{xfce4-panel} and its plugin packages should be installed in
22817 the same profile to ensure compatibility. When using this service, you should
22818 add extra plugins (@code{xfce4-whiskermenu-plugin},
22819 @code{xfce4-weather-plugin}, etc.) to the @code{packages} field of your
22820 @code{operating-system}.
22821 @end defvr
22822
22823 @deftp {Data Type} xfce-desktop-configuration
22824 Configuration record for the Xfce desktop environment.
22825
22826 @table @asis
22827 @item @code{xfce} (default: @code{xfce})
22828 The Xfce package to use.
22829 @end table
22830 @end deftp
22831
22832 @deffn {Scheme Variable} mate-desktop-service-type
22833 This is the type of the service that runs the @uref{https://mate-desktop.org/,
22834 MATE desktop environment}. Its value is a @code{mate-desktop-configuration}
22835 object (see below).
22836
22837 This service adds the @code{mate} package to the system
22838 profile, and extends polkit with the actions from
22839 @code{mate-settings-daemon}.
22840 @end deffn
22841
22842 @deftp {Data Type} mate-desktop-configuration
22843 Configuration record for the MATE desktop environment.
22844
22845 @table @asis
22846 @item @code{mate} (default: @code{mate})
22847 The MATE package to use.
22848 @end table
22849 @end deftp
22850
22851 @deffn {Scheme Variable} lxqt-desktop-service-type
22852 This is the type of the service that runs the @uref{https://lxqt-project.org,
22853 LXQt desktop environment}. Its value is a @code{lxqt-desktop-configuration}
22854 object (see below).
22855
22856 This service adds the @code{lxqt} package to the system
22857 profile.
22858 @end deffn
22859
22860 @deftp {Data Type} lxqt-desktop-configuration
22861 Configuration record for the LXQt desktop environment.
22862
22863 @table @asis
22864 @item @code{lxqt} (default: @code{lxqt})
22865 The LXQT package to use.
22866 @end table
22867 @end deftp
22868
22869 @deffn {Scheme Variable} enlightenment-desktop-service-type
22870 Return a service that adds the @code{enlightenment} package to the system
22871 profile, and extends dbus with actions from @code{efl}.
22872 @end deffn
22873
22874 @deftp {Data Type} enlightenment-desktop-service-configuration
22875 @table @asis
22876 @item @code{enlightenment} (default: @code{enlightenment})
22877 The enlightenment package to use.
22878 @end table
22879 @end deftp
22880
22881 Because the GNOME, Xfce and MATE desktop services pull in so many packages,
22882 the default @code{%desktop-services} variable doesn't include any of
22883 them by default. To add GNOME, Xfce or MATE, just @code{cons} them onto
22884 @code{%desktop-services} in the @code{services} field of your
22885 @code{operating-system}:
22886
22887 @lisp
22888 (use-modules (gnu))
22889 (use-service-modules desktop)
22890 (operating-system
22891 ...
22892 ;; cons* adds items to the list given as its last argument.
22893 (services (cons* (service gnome-desktop-service-type)
22894 (service xfce-desktop-service)
22895 %desktop-services))
22896 ...)
22897 @end lisp
22898
22899 These desktop environments will then be available as options in the
22900 graphical login window.
22901
22902 The actual service definitions included in @code{%desktop-services} and
22903 provided by @code{(gnu services dbus)} and @code{(gnu services desktop)}
22904 are described below.
22905
22906 @deffn {Scheme Procedure} dbus-service [#:dbus @var{dbus}] [#:services '()] @
22907 [#:verbose?]
22908 Return a service that runs the ``system bus'', using @var{dbus}, with
22909 support for @var{services}. When @var{verbose?} is true, it causes the
22910 @samp{DBUS_VERBOSE} environment variable to be set to @samp{1}; a
22911 verbose-enabled D-Bus package such as @code{dbus-verbose} should be
22912 provided as @var{dbus} in this scenario. The verbose output is logged
22913 to @file{/var/log/dbus-daemon.log}.
22914
22915 @uref{https://dbus.freedesktop.org/, D-Bus} is an inter-process communication
22916 facility. Its system bus is used to allow system services to communicate
22917 and to be notified of system-wide events.
22918
22919 @var{services} must be a list of packages that provide an
22920 @file{etc/dbus-1/system.d} directory containing additional D-Bus configuration
22921 and policy files. For example, to allow avahi-daemon to use the system bus,
22922 @var{services} must be equal to @code{(list avahi)}.
22923 @end deffn
22924
22925 @deffn {Scheme Procedure} elogind-service [#:config @var{config}]
22926 Return a service that runs the @code{elogind} login and
22927 seat management daemon. @uref{https://github.com/elogind/elogind,
22928 Elogind} exposes a D-Bus interface that can be used to know which users
22929 are logged in, know what kind of sessions they have open, suspend the
22930 system, inhibit system suspend, reboot the system, and other tasks.
22931
22932 Elogind handles most system-level power events for a computer, for
22933 example suspending the system when a lid is closed, or shutting it down
22934 when the power button is pressed.
22935
22936 The @var{config} keyword argument specifies the configuration for
22937 elogind, and should be the result of an @code{(elogind-configuration
22938 (@var{parameter} @var{value})...)} invocation. Available parameters and
22939 their default values are:
22940
22941 @table @code
22942 @item kill-user-processes?
22943 @code{#f}
22944 @item kill-only-users
22945 @code{()}
22946 @item kill-exclude-users
22947 @code{("root")}
22948 @item inhibit-delay-max-seconds
22949 @code{5}
22950 @item handle-power-key
22951 @code{poweroff}
22952 @item handle-suspend-key
22953 @code{suspend}
22954 @item handle-hibernate-key
22955 @code{hibernate}
22956 @item handle-lid-switch
22957 @code{suspend}
22958 @item handle-lid-switch-docked
22959 @code{ignore}
22960 @item handle-lid-switch-external-power
22961 @code{*unspecified*}
22962 @item power-key-ignore-inhibited?
22963 @code{#f}
22964 @item suspend-key-ignore-inhibited?
22965 @code{#f}
22966 @item hibernate-key-ignore-inhibited?
22967 @code{#f}
22968 @item lid-switch-ignore-inhibited?
22969 @code{#t}
22970 @item holdoff-timeout-seconds
22971 @code{30}
22972 @item idle-action
22973 @code{ignore}
22974 @item idle-action-seconds
22975 @code{(* 30 60)}
22976 @item runtime-directory-size-percent
22977 @code{10}
22978 @item runtime-directory-size
22979 @code{#f}
22980 @item remove-ipc?
22981 @code{#t}
22982 @item suspend-state
22983 @code{("mem" "standby" "freeze")}
22984 @item suspend-mode
22985 @code{()}
22986 @item hibernate-state
22987 @code{("disk")}
22988 @item hibernate-mode
22989 @code{("platform" "shutdown")}
22990 @item hybrid-sleep-state
22991 @code{("disk")}
22992 @item hybrid-sleep-mode
22993 @code{("suspend" "platform" "shutdown")}
22994 @end table
22995 @end deffn
22996
22997 @deffn {Scheme Procedure} accountsservice-service @
22998 [#:accountsservice @var{accountsservice}]
22999 Return a service that runs AccountsService, a system service that can
23000 list available accounts, change their passwords, and so on.
23001 AccountsService integrates with PolicyKit to enable unprivileged users
23002 to acquire the capability to modify their system configuration.
23003 @uref{https://www.freedesktop.org/wiki/Software/AccountsService/, the
23004 accountsservice web site} for more information.
23005
23006 The @var{accountsservice} keyword argument is the @code{accountsservice}
23007 package to expose as a service.
23008 @end deffn
23009
23010 @deffn {Scheme Procedure} polkit-service @
23011 [#:polkit @var{polkit}]
23012 Return a service that runs the
23013 @uref{https://www.freedesktop.org/wiki/Software/polkit/, Polkit privilege
23014 management service}, which allows system administrators to grant access to
23015 privileged operations in a structured way. By querying the Polkit service, a
23016 privileged system component can know when it should grant additional
23017 capabilities to ordinary users. For example, an ordinary user can be granted
23018 the capability to suspend the system if the user is logged in locally.
23019 @end deffn
23020
23021 @defvr {Scheme Variable} polkit-wheel-service
23022 Service that adds the @code{wheel} group as admins to the Polkit
23023 service. This makes it so that users in the @code{wheel} group are queried
23024 for their own passwords when performing administrative actions instead of
23025 @code{root}'s, similar to the behaviour used by @code{sudo}.
23026 @end defvr
23027
23028 @defvr {Scheme Variable} upower-service-type
23029 Service that runs @uref{https://upower.freedesktop.org/, @command{upowerd}}, a
23030 system-wide monitor for power consumption and battery levels, with the given
23031 configuration settings.
23032
23033 It implements the @code{org.freedesktop.UPower} D-Bus interface, and is
23034 notably used by GNOME.
23035 @end defvr
23036
23037 @deftp {Data Type} upower-configuration
23038 Data type representation the configuration for UPower.
23039
23040 @table @asis
23041
23042 @item @code{upower} (default: @var{upower})
23043 Package to use for @code{upower}.
23044
23045 @item @code{watts-up-pro?} (default: @code{#f})
23046 Enable the Watts Up Pro device.
23047
23048 @item @code{poll-batteries?} (default: @code{#t})
23049 Enable polling the kernel for battery level changes.
23050
23051 @item @code{ignore-lid?} (default: @code{#f})
23052 Ignore the lid state, this can be useful if it's incorrect on a device.
23053
23054 @item @code{use-percentage-for-policy?} (default: @code{#t})
23055 Whether to use a policy based on battery percentage rather than on
23056 estimated time left. A policy based on battery percentage is usually
23057 more reliable.
23058
23059 @item @code{percentage-low} (default: @code{20})
23060 When @code{use-percentage-for-policy?} is @code{#t}, this sets the percentage
23061 at which the battery is considered low.
23062
23063 @item @code{percentage-critical} (default: @code{5})
23064 When @code{use-percentage-for-policy?} is @code{#t}, this sets the percentage
23065 at which the battery is considered critical.
23066
23067 @item @code{percentage-action} (default: @code{2})
23068 When @code{use-percentage-for-policy?} is @code{#t}, this sets the percentage
23069 at which action will be taken.
23070
23071 @item @code{time-low} (default: @code{1200})
23072 When @code{use-time-for-policy?} is @code{#f}, this sets the time remaining in
23073 seconds at which the battery is considered low.
23074
23075 @item @code{time-critical} (default: @code{300})
23076 When @code{use-time-for-policy?} is @code{#f}, this sets the time remaining in
23077 seconds at which the battery is considered critical.
23078
23079 @item @code{time-action} (default: @code{120})
23080 When @code{use-time-for-policy?} is @code{#f}, this sets the time remaining in
23081 seconds at which action will be taken.
23082
23083 @item @code{critical-power-action} (default: @code{'hybrid-sleep})
23084 The action taken when @code{percentage-action} or @code{time-action} is
23085 reached (depending on the configuration of @code{use-percentage-for-policy?}).
23086
23087 Possible values are:
23088
23089 @itemize @bullet
23090 @item
23091 @code{'power-off}
23092
23093 @item
23094 @code{'hibernate}
23095
23096 @item
23097 @code{'hybrid-sleep}.
23098 @end itemize
23099
23100 @end table
23101 @end deftp
23102
23103 @deffn {Scheme Procedure} udisks-service [#:udisks @var{udisks}]
23104 Return a service for @uref{https://udisks.freedesktop.org/docs/latest/,
23105 UDisks}, a @dfn{disk management} daemon that provides user interfaces
23106 with notifications and ways to mount/unmount disks. Programs that talk
23107 to UDisks include the @command{udisksctl} command, part of UDisks, and
23108 GNOME Disks. Note that Udisks relies on the @command{mount} command, so
23109 it will only be able to use the file-system utilities installed in the
23110 system profile. For example if you want to be able to mount NTFS
23111 file-systems in read and write fashion, you'll need to have
23112 @code{ntfs-3g} installed system-wide.
23113 @end deffn
23114
23115 @deffn {Scheme Variable} colord-service-type
23116 This is the type of the service that runs @command{colord}, a system
23117 service with a D-Bus
23118 interface to manage the color profiles of input and output devices such as
23119 screens and scanners. It is notably used by the GNOME Color Manager graphical
23120 tool. See @uref{https://www.freedesktop.org/software/colord/, the colord web
23121 site} for more information.
23122 @end deffn
23123
23124 @cindex scanner access
23125 @defvr {Scheme Variable} sane-service-type
23126 This service provides access to scanners @i{via}
23127 @uref{http://www.sane-project.org, SANE} by installing the necessary
23128 udev rules. It is included in @code{%desktop-services} (@pxref{Desktop
23129 Services}) and relies by default on @code{sane-backends-minimal} package
23130 (see below) for hardware support.
23131 @end defvr
23132
23133 @defvr {Scheme Variable} sane-backends-minimal
23134 The default package which the @code{sane-service-type} installs. It
23135 supports many recent scanners.
23136 @end defvr
23137
23138 @defvr {Scheme Variable} sane-backends
23139 This package includes support for all scanners that
23140 @code{sane-backends-minimal} supports, plus older Hewlett-Packard
23141 scanners supported by @code{hplip} package. In order to use this on
23142 a system which relies on @code{%desktop-services}, you may use
23143 @code{modify-services} (@pxref{Service Reference,
23144 @code{modify-services}}) as illustrated below:
23145
23146 @lisp
23147 (use-modules (gnu))
23148 (use-service-modules
23149 @dots{}
23150 desktop)
23151 (use-package-modules
23152 @dots{}
23153 scanner)
23154
23155 (define %my-desktop-services
23156 ;; List of desktop services that supports a broader range of scanners.
23157 (modify-services %desktop-services
23158 (sane-service-type _ => sane-backends)))
23159
23160 (operating-system
23161 @dots{}
23162 (services %my-desktop-services))
23163 @end lisp
23164 @end defvr
23165
23166 @deffn {Scheme Procedure} geoclue-application name [#:allowed? #t] [#:system? #f] [#:users '()]
23167 Return a configuration allowing an application to access GeoClue
23168 location data. @var{name} is the Desktop ID of the application, without
23169 the @code{.desktop} part. If @var{allowed?} is true, the application
23170 will have access to location information by default. The boolean
23171 @var{system?} value indicates whether an application is a system component
23172 or not. Finally @var{users} is a list of UIDs of all users for which
23173 this application is allowed location info access. An empty users list
23174 means that all users are allowed.
23175 @end deffn
23176
23177 @defvr {Scheme Variable} %standard-geoclue-applications
23178 The standard list of well-known GeoClue application configurations,
23179 granting authority to the GNOME date-and-time utility to ask for the
23180 current location in order to set the time zone, and allowing the
23181 IceCat and Epiphany web browsers to request location information.
23182 IceCat and Epiphany both query the user before allowing a web page to
23183 know the user's location.
23184 @end defvr
23185
23186 @deffn {Scheme Procedure} geoclue-service [#:colord @var{colord}] @
23187 [#:whitelist '()] @
23188 [#:wifi-geolocation-url "https://location.services.mozilla.com/v1/geolocate?key=geoclue"] @
23189 [#:submit-data? #f]
23190 [#:wifi-submission-url "https://location.services.mozilla.com/v1/submit?key=geoclue"] @
23191 [#:submission-nick "geoclue"] @
23192 [#:applications %standard-geoclue-applications]
23193 Return a service that runs the GeoClue location service. This service
23194 provides a D-Bus interface to allow applications to request access to a
23195 user's physical location, and optionally to add information to online
23196 location databases. See
23197 @uref{https://wiki.freedesktop.org/www/Software/GeoClue/, the GeoClue
23198 web site} for more information.
23199 @end deffn
23200
23201 @deffn {Scheme Procedure} bluetooth-service [#:bluez @var{bluez}] @
23202 [@w{#:auto-enable? #f}]
23203 Return a service that runs the @command{bluetoothd} daemon, which
23204 manages all the Bluetooth devices and provides a number of D-Bus
23205 interfaces. When AUTO-ENABLE? is true, the bluetooth controller is
23206 powered automatically at boot, which can be useful when using a
23207 bluetooth keyboard or mouse.
23208
23209 Users need to be in the @code{lp} group to access the D-Bus service.
23210 @end deffn
23211
23212 @deffn {Scheme Variable} bluetooth-service-type
23213 This is the type for the @uref{https://bluez.org/, Linux Bluetooth Protocol
23214 Stack} (BlueZ) system, which generates the @file{/etc/bluetooth/main.conf}
23215 configuration file. The value for this type is a @command{bluetooth-configuration}
23216 record as in this example:
23217
23218 @lisp
23219 (service bluetooth-service-type)
23220 @end lisp
23221
23222 See below for details about @code{bluetooth-configuration}.
23223 @end deffn
23224
23225 @deftp {Data Type} bluetooth-configuration
23226 Data type representing the configuration for @code{bluetooth-service}.
23227
23228 @table @asis
23229 @item @code{bluez} (default: @code{bluez})
23230 @code{bluez} package to use.
23231
23232 @item @code{name} (default: @code{"BlueZ"})
23233 Default adapter name.
23234
23235 @item @code{class} (default: @code{#x000000})
23236 Default device class. Only the major and minor device class bits are considered.
23237
23238 @item @code{discoverable-timeout} (default: @code{180})
23239 How long to stay in discoverable mode before going back to non-discoverable. The
23240 value is in seconds.
23241
23242 @item @code{always-pairable?} (default: @code{#f})
23243 Always allow pairing even if there are no agents registered.
23244
23245 @item @code{pairable-timeout} (default: @code{0})
23246 How long to stay in pairable mode before going back to non-discoverable. The
23247 value is in seconds.
23248
23249 @item @code{device-id} (default: @code{#f})
23250 Use vendor id source (assigner), vendor, product and version information for
23251 DID profile support. The values are separated by ":" and @var{assigner}, @var{VID},
23252 @var{PID} and @var{version}.
23253
23254 Possible values are:
23255
23256 @itemize @bullet
23257 @item
23258 @code{#f} to disable it,
23259
23260 @item
23261 @code{"assigner:1234:5678:abcd"}, where @var{assigner} is either @code{usb} (default)
23262 or @code{bluetooth}.
23263
23264 @end itemize
23265
23266 @item @code{reverse-service-discovery?} (default: @code{#t})
23267 Do reverse service discovery for previously unknown devices that connect to
23268 us. For BR/EDR this option is really only needed for qualification since the
23269 BITE tester doesn't like us doing reverse SDP for some test cases, for LE
23270 this disables the GATT client functionally so it can be used in system which
23271 can only operate as peripheral.
23272
23273 @item @code{name-resolving?} (default: @code{#t})
23274 Enable name resolving after inquiry. Set it to @code{#f} if you don't need
23275 remote devices name and want shorter discovery cycle.
23276
23277 @item @code{debug-keys?} (default: @code{#f})
23278 Enable runtime persistency of debug link keys. Default is false which makes
23279 debug link keys valid only for the duration of the connection that they were
23280 created for.
23281
23282 @item @code{controller-mode} (default: @code{'dual})
23283 Restricts all controllers to the specified transport. @code{'dual} means both
23284 BR/EDR and LE are enabled (if supported by the hardware).
23285
23286 Possible values are:
23287
23288 @itemize @bullet
23289 @item
23290 @code{'dual}
23291
23292 @item
23293 @code{'bredr}
23294
23295 @item
23296 @code{'le}
23297
23298 @end itemize
23299
23300 @item @code{multi-profile} (default: @code{'off})
23301 Enables Multi Profile Specification support. This allows to specify if system
23302 supports only Multiple Profiles Single Device (MPSD) configuration or both
23303 Multiple Profiles Single Device (MPSD) and Multiple Profiles Multiple Devices
23304 (MPMD) configurations.
23305
23306 Possible values are:
23307
23308 @itemize @bullet
23309 @item
23310 @code{'off}
23311
23312 @item
23313 @code{'single}
23314
23315 @item
23316 @code{'multiple}
23317
23318 @end itemize
23319
23320 @item @code{fast-connectable?} (default: @code{#f})
23321 Permanently enables the Fast Connectable setting for adapters that support
23322 it. When enabled other devices can connect faster to us, however the
23323 tradeoff is increased power consumptions. This feature will fully work only
23324 on kernel version 4.1 and newer.
23325
23326 @item @code{privacy} (default: @code{'off})
23327 Default privacy settings.
23328
23329 @itemize @bullet
23330 @item
23331 @code{'off}: Disable local privacy
23332
23333 @item
23334 @code{'network/on}: A device will only accept advertising packets from peer
23335 devices that contain private addresses. It may not be compatible with some
23336 legacy devices since it requires the use of RPA(s) all the time
23337
23338 @item
23339 @code{'device}: A device in device privacy mode is only concerned about the
23340 privacy of the device and will accept advertising packets from peer devices
23341 that contain their Identity Address as well as ones that contain a private
23342 address, even if the peer device has distributed its IRK in the past
23343
23344 @end itemize
23345
23346 and additionally, if @var{controller-mode} is set to @code{'dual}:
23347
23348 @itemize @bullet
23349 @item
23350 @code{'limited-network}: Apply Limited Discoverable Mode to advertising, which
23351 follows the same policy as to BR/EDR that publishes the identity address when
23352 discoverable, and Network Privacy Mode for scanning
23353
23354 @item
23355 @code{'limited-device}: Apply Limited Discoverable Mode to advertising, which
23356 follows the same policy as to BR/EDR that publishes the identity address when
23357 discoverable, and Device Privacy Mode for scanning.
23358
23359 @end itemize
23360
23361 @item @code{just-works-repairing} (default: @code{'never})
23362 Specify the policy to the JUST-WORKS repairing initiated by peer.
23363
23364 Possible values:
23365 @itemize @bullet
23366 @item
23367 @code{'never}
23368
23369 @item
23370 @code{'confirm}
23371
23372 @item
23373 @code{'always}
23374
23375 @end itemize
23376
23377 @item @code{temporary-timeout} (default: @code{30})
23378 How long to keep temporary devices around. The value is in seconds. @code{0}
23379 disables the timer completely.
23380
23381 @item @code{refresh-discovery?} (default: @code{#t})
23382 Enables the device to issue an SDP request to update known services when
23383 profile is connected.
23384
23385 @item @code{experimental} (default: @code{#f})
23386 Enables experimental features and interfaces, alternatively a list of UUIDs
23387 can be given.
23388
23389 Possible values:
23390
23391 @itemize @bullet
23392 @item
23393 @code{#t}
23394
23395 @item
23396 @code{#f}
23397
23398 @item
23399 @code{(list (uuid <uuid-1>) (uuid <uuid-2>) ...)}.
23400 @end itemize
23401
23402 List of possible UUIDs:
23403 @itemize @bullet
23404 @item
23405 @code{d4992530-b9ec-469f-ab01-6c481c47da1c}: BlueZ Experimental Debug,
23406
23407 @item
23408 @code{671b10b5-42c0-4696-9227-eb28d1b049d6}: BlueZ Experimental Simultaneous Central and Peripheral,
23409
23410 @item
23411 @code{"15c0a148-c273-11ea-b3de-0242ac130004}: BlueZ Experimental LL privacy,
23412
23413 @item
23414 @code{330859bc-7506-492d-9370-9a6f0614037f}: BlueZ Experimental Bluetooth Quality Report,
23415
23416 @item
23417 @code{a6695ace-ee7f-4fb9-881a-5fac66c629af}: BlueZ Experimental Offload Codecs.
23418 @end itemize
23419
23420 @item @code{remote-name-request-retry-delay} (default: @code{300})
23421 The duration to avoid retrying to resolve a peer's name, if the previous
23422 try failed.
23423
23424 @item @code{page-scan-type} (default: @code{#f})
23425 BR/EDR Page scan activity type.
23426
23427 @item @code{page-scan-interval} (default: @code{#f})
23428 BR/EDR Page scan activity interval.
23429
23430 @item @code{page-scan-window} (default: @code{#f})
23431 BR/EDR Page scan activity window.
23432
23433 @item @code{inquiry-scan-type} (default: @code{#f})
23434 BR/EDR Inquiry scan activity type.
23435
23436 @item @code{inquiry-scan-interval} (default: @code{#f})
23437 BR/EDR Inquiry scan activity interval.
23438
23439 @item @code{inquiry-scan-window} (default: @code{#f})
23440 BR/EDR Inquiry scan activity window.
23441
23442 @item @code{link-supervision-timeout} (default: @code{#f})
23443 BR/EDR Link supervision timeout.
23444
23445 @item @code{page-timeout} (default: @code{#f})
23446 BR/EDR Page timeout.
23447
23448 @item @code{min-sniff-interval} (default: @code{#f})
23449 BR/EDR minimum sniff interval.
23450
23451 @item @code{max-sniff-interval} (default: @code{#f})
23452 BR/EDR maximum sniff interval.
23453
23454 @item @code{min-advertisement-interval} (default: @code{#f})
23455 LE minimum advertisement interval (used for legacy advertisement only).
23456
23457 @item @code{max-advertisement-interval} (default: @code{#f})
23458 LE maximum advertisement interval (used for legacy advertisement only).
23459
23460 @item @code{multi-advertisement-rotation-interval} (default: @code{#f})
23461 LE multiple advertisement rotation interval.
23462
23463 @item @code{scan-interval-auto-connect} (default: @code{#f})
23464 LE scanning interval used for passive scanning supporting auto connect.
23465
23466 @item @code{scan-window-auto-connect} (default: @code{#f})
23467 LE scanning window used for passive scanning supporting auto connect.
23468
23469 @item @code{scan-interval-suspend} (default: @code{#f})
23470 LE scanning interval used for active scanning supporting wake from suspend.
23471
23472 @item @code{scan-window-suspend} (default: @code{#f})
23473 LE scanning window used for active scanning supporting wake from suspend.
23474
23475 @item @code{scan-interval-discovery} (default: @code{#f})
23476 LE scanning interval used for active scanning supporting discovery.
23477
23478 @item @code{scan-window-discovery} (default: @code{#f})
23479 LE scanning window used for active scanning supporting discovery.
23480
23481 @item @code{scan-interval-adv-monitor} (default: @code{#f})
23482 LE scanning interval used for passive scanning supporting the advertisement monitor APIs.
23483
23484 @item @code{scan-window-adv-monitor} (default: @code{#f})
23485 LE scanning window used for passive scanning supporting the advertisement monitor APIs.
23486
23487 @item @code{scan-interval-connect} (default: @code{#f})
23488 LE scanning interval used for connection establishment.
23489
23490 @item @code{scan-window-connect} (default: @code{#f})
23491 LE scanning window used for connection establishment.
23492
23493 @item @code{min-connection-interval} (default: @code{#f})
23494 LE default minimum connection interval. This value is superseded by any specific
23495 value provided via the Load Connection Parameters interface.
23496
23497 @item @code{max-connection-interval} (default: @code{#f})
23498 LE default maximum connection interval. This value is superseded by any specific
23499 value provided via the Load Connection Parameters interface.
23500
23501 @item @code{connection-latency} (default: @code{#f})
23502 LE default connection latency. This value is superseded by any specific
23503 value provided via the Load Connection Parameters interface.
23504
23505 @item @code{connection-supervision-timeout} (default: @code{#f})
23506 LE default connection supervision timeout. This value is superseded by any specific
23507 value provided via the Load Connection Parameters interface.
23508
23509 @item @code{autoconnect-timeout} (default: @code{#f})
23510 LE default autoconnect timeout. This value is superseded by any specific
23511 value provided via the Load Connection Parameters interface.
23512
23513 @item @code{adv-mon-allowlist-scan-duration} (default: @code{300})
23514 Allowlist scan duration during interleaving scan. Only used when scanning for ADV
23515 monitors. The units are msec.
23516
23517 @item @code{adv-mon-no-filter-scan-duration} (default: @code{500})
23518 No filter scan duration during interleaving scan. Only used when scanning for ADV
23519 monitors. The units are msec.
23520
23521 @item @code{enable-adv-mon-interleave-scan?} (default: @code{#t})
23522 Enable/Disable Advertisement Monitor interleave scan for power saving.
23523
23524 @item @code{cache} (default: @code{'always})
23525 GATT attribute cache.
23526
23527 Possible values are:
23528 @itemize @bullet
23529 @item
23530 @code{'always}: Always cache attributes even for devices not paired, this is
23531 recommended as it is best for interoperability, with more consistent
23532 reconnection times and enables proper tracking of notifications for all
23533 devices
23534
23535 @item
23536 @code{'yes}: Only cache attributes of paired devices
23537
23538 @item
23539 @code{'no}: Never cache attributes.
23540 @end itemize
23541
23542 @item @code{key-size} (default: @code{0})
23543 Minimum required Encryption Key Size for accessing secured characteristics.
23544
23545 Possible values are:
23546 @itemize @bullet
23547 @item
23548 @code{0}: Don't care
23549
23550 @item
23551 @code{7 <= N <= 16}
23552 @end itemize
23553
23554 @item @code{exchange-mtu} (default: @code{517})
23555 Exchange MTU size. Possible values are:
23556
23557 @itemize @bullet
23558 @item
23559 @code{23 <= N <= 517}
23560 @end itemize
23561
23562 @item @code{att-channels} (default: @code{3})
23563 Number of ATT channels. Possible values are:
23564
23565 @itemize @bullet
23566 @item
23567 @code{1}: Disables EATT
23568
23569 @item
23570 @code{2 <= N <= 5}
23571 @end itemize
23572
23573 @item @code{session-mode} (default: @code{'basic})
23574 AVDTP L2CAP signalling channel mode.
23575
23576 Possible values are:
23577
23578 @itemize @bullet
23579 @item
23580 @code{'basic}: Use L2CAP basic mode
23581
23582 @item
23583 @code{'ertm}: Use L2CAP enhanced retransmission mode.
23584 @end itemize
23585
23586 @item @code{stream-mode} (default: @code{'basic})
23587 AVDTP L2CAP transport channel mode.
23588
23589 Possible values are:
23590
23591 @itemize @bullet
23592 @item
23593 @code{'basic}: Use L2CAP basic mode
23594
23595 @item
23596 @code{'streaming}: Use L2CAP streaming mode.
23597 @end itemize
23598
23599 @item @code{reconnect-uuids} (default: @code{'()})
23600 The ReconnectUUIDs defines the set of remote services that should try
23601 to be reconnected to in case of a link loss (link supervision
23602 timeout). The policy plugin should contain a sane set of values by
23603 default, but this list can be overridden here. By setting the list to
23604 empty the reconnection feature gets disabled.
23605
23606 Possible values:
23607
23608 @itemize @bullet
23609 @item
23610 @code{'()}
23611
23612 @item
23613 @code{(list (uuid <uuid-1>) (uuid <uuid-2>) ...)}.
23614 @end itemize
23615
23616 @item @code{reconnect-attempts} (default: @code{7})
23617 Defines the number of attempts to reconnect after a link lost. Setting
23618 the value to 0 disables reconnecting feature.
23619
23620 @item @code{reconnect-intervals} (default: @code{'(1 2 4 8 16 32 64)})
23621 Defines a list of intervals in seconds to use in between attempts. If
23622 the number of attempts defined in @var{reconnect-attempts} is bigger than
23623 the list of intervals the last interval is repeated until the last attempt.
23624
23625 @item @code{auto-enable?} (default: @code{#f})
23626 Defines option to enable all controllers when they are found. This includes
23627 adapters present on start as well as adapters that are plugged in later on.
23628
23629 @item @code{resume-delay} (default: @code{2})
23630 Audio devices that were disconnected due to suspend will be reconnected on
23631 resume. @var{resume-delay} determines the delay between when the controller
23632 resumes from suspend and a connection attempt is made. A longer delay is
23633 better for better co-existence with Wi-Fi. The value is in seconds.
23634
23635 @item @code{rssi-sampling-period} (default: @code{#xFF})
23636 Default RSSI Sampling Period. This is used when a client registers an
23637 advertisement monitor and leaves the RSSISamplingPeriod unset.
23638
23639 Possible values are:
23640 @itemize @bullet
23641 @item
23642 @code{#x0}: Report all advertisements
23643
23644 @item
23645 @code{N = #xXX}: Report advertisements every N x 100 msec (range: #x01 to #xFE)
23646
23647 @item
23648 @code{#xFF}: Report only one advertisement per device during monitoring period.
23649 @end itemize
23650
23651 @end table
23652 @end deftp
23653
23654 @defvr {Scheme Variable} gnome-keyring-service-type
23655 This is the type of the service that adds the
23656 @uref{https://wiki.gnome.org/Projects/GnomeKeyring, GNOME Keyring}. Its
23657 value is a @code{gnome-keyring-configuration} object (see below).
23658
23659 This service adds the @code{gnome-keyring} package to the system profile
23660 and extends PAM with entries using @code{pam_gnome_keyring.so}, unlocking
23661 a user's login keyring when they log in or setting its password with passwd.
23662 @end defvr
23663
23664 @deftp {Data Type} gnome-keyring-configuration
23665 Configuration record for the GNOME Keyring service.
23666
23667 @table @asis
23668 @item @code{keyring} (default: @code{gnome-keyring})
23669 The GNOME keyring package to use.
23670
23671 @item @code{pam-services}
23672 A list of @code{(@var{service} . @var{kind})} pairs denoting PAM
23673 services to extend, where @var{service} is the name of an existing
23674 service to extend and @var{kind} is one of @code{login} or
23675 @code{passwd}.
23676
23677 If @code{login} is given, it adds an optional
23678 @code{pam_gnome_keyring.so} to the auth block without arguments and to
23679 the session block with @code{auto_start}. If @code{passwd} is given, it
23680 adds an optional @code{pam_gnome_keyring.so} to the password block
23681 without arguments.
23682
23683 By default, this field contains ``gdm-password'' with the value @code{login}
23684 and ``passwd'' is with the value @code{passwd}.
23685 @end table
23686 @end deftp
23687
23688 @defvr {Scheme Variable} seatd-service-type
23689 @uref{https://sr.ht/~kennylevinsen/seatd/, seatd} is a minimal seat
23690 management daemon.
23691
23692 Seat management takes care of mediating access to shared devices (graphics,
23693 input), without requiring the applications needing access to be root.
23694
23695 @lisp
23696 (append
23697 (list
23698 ;; make sure seatd is running
23699 (service seatd-service-type))
23700
23701 ;; normally one would want %base-services
23702 %base-services)
23703
23704 @end lisp
23705
23706 @code{seatd} operates over a UNIX domain socket, with @code{libseat}
23707 providing the client side of the protocol. Applications that acquire
23708 access to the shared resources via @code{seatd} (e.g. @code{sway})
23709 need to be able to talk to this socket.
23710 This can be achieved by adding the user they run under to the group
23711 owning @code{seatd}'s socket (usually ``seat''), like so:
23712
23713 @lisp
23714 (user-account
23715 (name "alice")
23716 (group "users")
23717 (supplementary-groups '("wheel" ; allow use of sudo, etc.
23718 "seat" ; seat management
23719 "audio" ; sound card
23720 "video" ; video devices such as webcams
23721 "cdrom")) ; the good ol' CD-ROM
23722 (comment "Bob's sister"))
23723 @end lisp
23724
23725 Depending on your setup, you will have to not only add regular users,
23726 but also system users to this group. For instance, some greetd greeters
23727 require graphics and therefore also need to negotiate with seatd.
23728
23729 @end defvr
23730
23731 @deftp {Data Type} seatd-configuration
23732 Configuration record for the seatd daemon service.
23733
23734 @table @asis
23735 @item @code{seatd} (default: @code{seatd})
23736 The seatd package to use.
23737
23738 @item @code{group} (default: @samp{"seat"})
23739 Group to own the seatd socket.
23740
23741 @item @code{socket} (default: @samp{"/run/seatd.sock"})
23742 Where to create the seatd socket.
23743
23744 @item @code{logfile} (default: @samp{"/var/log/seatd.log"})
23745 Log file to write to.
23746
23747 @item @code{loglevel} (default: @samp{"error"})
23748 Log level to output logs. Possible values: @samp{"silent"}, @samp{"error"},
23749 @samp{"info"} and @samp{"debug"}.
23750
23751 @end table
23752 @end deftp
23753
23754
23755 @node Sound Services
23756 @subsection Sound Services
23757
23758 @cindex sound support
23759 @cindex ALSA
23760 @cindex PulseAudio, sound support
23761
23762 The @code{(gnu services sound)} module provides a service to configure the
23763 Advanced Linux Sound Architecture (ALSA) system, which makes PulseAudio the
23764 preferred ALSA output driver.
23765
23766 @deffn {Scheme Variable} alsa-service-type
23767 This is the type for the @uref{https://alsa-project.org/, Advanced Linux Sound
23768 Architecture} (ALSA) system, which generates the @file{/etc/asound.conf}
23769 configuration file. The value for this type is a @command{alsa-configuration}
23770 record as in this example:
23771
23772 @lisp
23773 (service alsa-service-type)
23774 @end lisp
23775
23776 See below for details about @code{alsa-configuration}.
23777 @end deffn
23778
23779 @deftp {Data Type} alsa-configuration
23780 Data type representing the configuration for @code{alsa-service}.
23781
23782 @table @asis
23783 @item @code{alsa-plugins} (default: @var{alsa-plugins})
23784 @code{alsa-plugins} package to use.
23785
23786 @item @code{pulseaudio?} (default: @var{#t})
23787 Whether ALSA applications should transparently be made to use the
23788 @uref{https://www.pulseaudio.org/, PulseAudio} sound server.
23789
23790 Using PulseAudio allows you to run several sound-producing applications
23791 at the same time and to individual control them @i{via}
23792 @command{pavucontrol}, among other things.
23793
23794 @item @code{extra-options} (default: @var{""})
23795 String to append to the @file{/etc/asound.conf} file.
23796
23797 @end table
23798 @end deftp
23799
23800 Individual users who want to override the system configuration of ALSA can do
23801 it with the @file{~/.asoundrc} file:
23802
23803 @example
23804 # In guix, we have to specify the absolute path for plugins.
23805 pcm_type.jack @{
23806 lib "/home/alice/.guix-profile/lib/alsa-lib/libasound_module_pcm_jack.so"
23807 @}
23808
23809 # Routing ALSA to jack:
23810 # <http://jackaudio.org/faq/routing_alsa.html>.
23811 pcm.rawjack @{
23812 type jack
23813 playback_ports @{
23814 0 system:playback_1
23815 1 system:playback_2
23816 @}
23817
23818 capture_ports @{
23819 0 system:capture_1
23820 1 system:capture_2
23821 @}
23822 @}
23823
23824 pcm.!default @{
23825 type plug
23826 slave @{
23827 pcm "rawjack"
23828 @}
23829 @}
23830 @end example
23831
23832 See @uref{https://www.alsa-project.org/main/index.php/Asoundrc} for the
23833 details.
23834
23835 @deffn {Scheme Variable} pulseaudio-service-type
23836 This is the type for the @uref{https://www.pulseaudio.org/, PulseAudio}
23837 sound server. It exists to allow system overrides of the default settings
23838 via @code{pulseaudio-configuration}, see below.
23839
23840 @quotation Warning
23841 This service overrides per-user configuration files. If you want
23842 PulseAudio to honor configuration files in @file{~/.config/pulse} you
23843 have to unset the environment variables @env{PULSE_CONFIG} and
23844 @env{PULSE_CLIENTCONFIG} in your @file{~/.bash_profile}.
23845 @end quotation
23846
23847 @quotation Warning
23848 This service on its own does not ensure, that the @code{pulseaudio} package
23849 exists on your machine. It merely adds configuration files for it, as
23850 detailed below. In the (admittedly unlikely) case, that you find yourself
23851 without a @code{pulseaudio} package, consider enabling it through the
23852 @code{alsa-service-type} above.
23853 @end quotation
23854 @end deffn
23855
23856 @deftp {Data Type} pulseaudio-configuration
23857 Data type representing the configuration for @code{pulseaudio-service}.
23858
23859 @table @asis
23860 @item @code{client-conf} (default: @code{'()})
23861 List of settings to set in @file{client.conf}.
23862 Accepts a list of strings or symbol-value pairs. A string will be
23863 inserted as-is with a newline added. A pair will be formatted as
23864 ``key = value'', again with a newline added.
23865
23866 @item @code{daemon-conf} (default: @code{'((flat-volumes . no))})
23867 List of settings to set in @file{daemon.conf}, formatted just like
23868 @var{client-conf}.
23869
23870 @item @code{script-file} (default: @code{(file-append pulseaudio "/etc/pulse/default.pa")})
23871 Script file to use as @file{default.pa}. In case the
23872 @code{extra-script-files} field below is used, an @code{.include}
23873 directive pointing to @file{/etc/pulse/default.pa.d} is appended to the
23874 provided script.
23875
23876 @item @code{extra-script-files} (default: @code{'()})
23877 A list of file-like objects defining extra PulseAudio scripts to run at
23878 the initialization of the @command{pulseaudio} daemon, after the main
23879 @code{script-file}. The scripts are deployed to the
23880 @file{/etc/pulse/default.pa.d} directory; they should have the
23881 @samp{.pa} file name extension. For a reference of the available
23882 commands, refer to @command{man pulse-cli-syntax}.
23883
23884 @item @code{system-script-file} (default: @code{(file-append pulseaudio "/etc/pulse/system.pa")})
23885 Script file to use as @file{system.pa}.
23886 @end table
23887
23888 The example below sets the default PulseAudio card profile, the default
23889 sink and the default source to use for a old SoundBlaster Audigy sound
23890 card:
23891 @lisp
23892 (pulseaudio-configuration
23893 (extra-script-files
23894 (list (plain-file "audigy.pa"
23895 (string-append "\
23896 set-card-profile alsa_card.pci-0000_01_01.0 \
23897 output:analog-surround-40+input:analog-mono
23898 set-default-source alsa_input.pci-0000_01_01.0.analog-mono
23899 set-default-sink alsa_output.pci-0000_01_01.0.analog-surround-40\n")))))
23900 @end lisp
23901
23902 Note that @code{pulseaudio-service-type} is part of
23903 @code{%desktop-services}; if your operating system declaration was
23904 derived from one of the desktop templates, you'll want to adjust the
23905 above example to modify the existing @code{pulseaudio-service-type} via
23906 @code{modify-services} (@pxref{Service Reference,
23907 @code{modify-services}}), instead of defining a new one.
23908
23909 @end deftp
23910
23911 @deffn {Scheme Variable} ladspa-service-type
23912 This service sets the @var{LADSPA_PATH} variable, so that programs, which
23913 respect it, e.g. PulseAudio, can load LADSPA plugins.
23914
23915 The following example will setup the service to enable modules from the
23916 @code{swh-plugins} package:
23917
23918 @lisp
23919 (service ladspa-service-type
23920 (ladspa-configuration (plugins (list swh-plugins))))
23921 @end lisp
23922
23923 See @uref{http://plugin.org.uk/ladspa-swh/docs/ladspa-swh.html} for the
23924 details.
23925
23926 @end deffn
23927
23928 @node Database Services
23929 @subsection Database Services
23930
23931 @cindex database
23932 @cindex SQL
23933 The @code{(gnu services databases)} module provides the following services.
23934
23935 @subsubheading PostgreSQL
23936
23937 The following example describes a PostgreSQL service with the default
23938 configuration.
23939
23940 @lisp
23941 (service postgresql-service-type
23942 (postgresql-configuration
23943 (postgresql postgresql-10)))
23944 @end lisp
23945
23946 If the services fails to start, it may be due to an incompatible
23947 cluster already present in @var{data-directory}. Adjust it (or, if you
23948 don't need the cluster anymore, delete @var{data-directory}), then
23949 restart the service.
23950
23951 Peer authentication is used by default and the @code{postgres} user
23952 account has no shell, which prevents the direct execution of @code{psql}
23953 commands as this user. To use @code{psql}, you can temporarily log in
23954 as @code{postgres} using a shell, create a PostgreSQL superuser with the
23955 same name as one of the system users and then create the associated
23956 database.
23957
23958 @example
23959 sudo -u postgres -s /bin/sh
23960 createuser --interactive
23961 createdb $MY_USER_LOGIN # Replace appropriately.
23962 @end example
23963
23964 @deftp {Data Type} postgresql-configuration
23965 Data type representing the configuration for the
23966 @code{postgresql-service-type}.
23967
23968 @table @asis
23969 @item @code{postgresql}
23970 PostgreSQL package to use for the service.
23971
23972 @item @code{port} (default: @code{5432})
23973 Port on which PostgreSQL should listen.
23974
23975 @item @code{locale} (default: @code{"en_US.utf8"})
23976 Locale to use as the default when creating the database cluster.
23977
23978 @item @code{config-file} (default: @code{(postgresql-config-file)})
23979 The configuration file to use when running PostgreSQL@. The default
23980 behaviour uses the postgresql-config-file record with the default values
23981 for the fields.
23982
23983 @item @code{log-directory} (default: @code{"/var/log/postgresql"})
23984 The directory where @command{pg_ctl} output will be written in a file
23985 named @code{"pg_ctl.log"}. This file can be useful to debug PostgreSQL
23986 configuration errors for instance.
23987
23988 @item @code{data-directory} (default: @code{"/var/lib/postgresql/data"})
23989 Directory in which to store the data.
23990
23991 @item @code{extension-packages} (default: @code{'()})
23992 @cindex postgresql extension-packages
23993 Additional extensions are loaded from packages listed in
23994 @var{extension-packages}. Extensions are available at runtime. For instance,
23995 to create a geographic database using the @code{postgis} extension, a user can
23996 configure the postgresql-service as in this example:
23997
23998 @cindex postgis
23999 @lisp
24000 (use-package-modules databases geo)
24001
24002 (operating-system
24003 ...
24004 ;; postgresql is required to run `psql' but postgis is not required for
24005 ;; proper operation.
24006 (packages (cons* postgresql %base-packages))
24007 (services
24008 (cons*
24009 (service postgresql-service-type
24010 (postgresql-configuration
24011 (postgresql postgresql-10)
24012 (extension-packages (list postgis))))
24013 %base-services)))
24014 @end lisp
24015
24016 Then the extension becomes visible and you can initialise an empty geographic
24017 database in this way:
24018
24019 @example
24020 psql -U postgres
24021 > create database postgistest;
24022 > \connect postgistest;
24023 > create extension postgis;
24024 > create extension postgis_topology;
24025 @end example
24026
24027 There is no need to add this field for contrib extensions such as hstore or
24028 dblink as they are already loadable by postgresql. This field is only
24029 required to add extensions provided by other packages.
24030
24031 @end table
24032 @end deftp
24033
24034 @deftp {Data Type} postgresql-config-file
24035 Data type representing the PostgreSQL configuration file. As shown in
24036 the following example, this can be used to customize the configuration
24037 of PostgreSQL@. Note that you can use any G-expression or filename in
24038 place of this record, if you already have a configuration file you'd
24039 like to use for example.
24040
24041 @lisp
24042 (service postgresql-service-type
24043 (postgresql-configuration
24044 (config-file
24045 (postgresql-config-file
24046 (log-destination "stderr")
24047 (hba-file
24048 (plain-file "pg_hba.conf"
24049 "
24050 local all all trust
24051 host all all 127.0.0.1/32 md5
24052 host all all ::1/128 md5"))
24053 (extra-config
24054 '(("session_preload_libraries" "auto_explain")
24055 ("random_page_cost" 2)
24056 ("auto_explain.log_min_duration" "100 ms")
24057 ("work_mem" "500 MB")
24058 ("logging_collector" #t)
24059 ("log_directory" "/var/log/postgresql")))))))
24060 @end lisp
24061
24062 @table @asis
24063 @item @code{log-destination} (default: @code{"syslog"})
24064 The logging method to use for PostgreSQL@. Multiple values are accepted,
24065 separated by commas.
24066
24067 @item @code{hba-file} (default: @code{%default-postgres-hba})
24068 Filename or G-expression for the host-based authentication
24069 configuration.
24070
24071 @item @code{ident-file} (default: @code{%default-postgres-ident})
24072 Filename or G-expression for the user name mapping configuration.
24073
24074 @item @code{socket-directory} (default: @code{"/var/run/postgresql"})
24075 Specifies the directory of the Unix-domain socket(s) on which PostgreSQL
24076 is to listen for connections from client applications. If set to
24077 @code{""} PostgreSQL does not listen on any Unix-domain sockets, in
24078 which case only TCP/IP sockets can be used to connect to the server.
24079
24080 By default, the @code{#false} value means the PostgreSQL default value
24081 will be used, which is currently @samp{/tmp}.
24082
24083 @item @code{extra-config} (default: @code{'()})
24084 List of additional keys and values to include in the PostgreSQL config
24085 file. Each entry in the list should be a list where the first element
24086 is the key, and the remaining elements are the values.
24087
24088 The values can be numbers, booleans or strings and will be mapped to
24089 PostgreSQL parameters types @code{Boolean}, @code{String},
24090 @code{Numeric}, @code{Numeric with Unit} and @code{Enumerated} described
24091 @uref{https://www.postgresql.org/docs/current/config-setting.html,
24092 here}.
24093
24094 @end table
24095 @end deftp
24096
24097 @deffn {Scheme Variable} postgresql-role-service-type
24098 This service allows to create PostgreSQL roles and databases after
24099 PostgreSQL service start. Here is an example of its use.
24100
24101 @lisp
24102 (service postgresql-role-service-type
24103 (postgresql-role-configuration
24104 (roles
24105 (list (postgresql-role
24106 (name "test")
24107 (create-database? #t))))))
24108 @end lisp
24109
24110 This service can be extended with extra roles, as in this
24111 example:
24112
24113 @lisp
24114 (service-extension postgresql-role-service-type
24115 (const (postgresql-role
24116 (name "alice")
24117 (create-database? #t))))
24118 @end lisp
24119 @end deffn
24120
24121 @deftp {Data Type} postgresql-role
24122 PostgreSQL manages database access permissions using the concept of
24123 roles. A role can be thought of as either a database user, or a group
24124 of database users, depending on how the role is set up. Roles can own
24125 database objects (for example, tables) and can assign privileges on
24126 those objects to other roles to control who has access to which objects.
24127
24128 @table @asis
24129 @item @code{name}
24130 The role name.
24131
24132 @item @code{permissions} (default: @code{'(createdb login)})
24133 The role permissions list. Supported permissions are @code{bypassrls},
24134 @code{createdb}, @code{createrole}, @code{login}, @code{replication} and
24135 @code{superuser}.
24136
24137 @item @code{create-database?} (default: @code{#f})
24138 Whether to create a database with the same name as the role.
24139
24140 @end table
24141 @end deftp
24142
24143 @deftp {Data Type} postgresql-role-configuration
24144 Data type representing the configuration of
24145 @var{postgresql-role-service-type}.
24146
24147 @table @asis
24148 @item @code{host} (default: @code{"/var/run/postgresql"})
24149 The PostgreSQL host to connect to.
24150
24151 @item @code{log} (default: @code{"/var/log/postgresql_roles.log"})
24152 File name of the log file.
24153
24154 @item @code{roles} (default: @code{'()})
24155 The initial PostgreSQL roles to create.
24156 @end table
24157 @end deftp
24158
24159 @subsubheading MariaDB/MySQL
24160
24161 @defvr {Scheme Variable} mysql-service-type
24162 This is the service type for a MySQL or MariaDB database server. Its value
24163 is a @code{mysql-configuration} object that specifies which package to use,
24164 as well as various settings for the @command{mysqld} daemon.
24165 @end defvr
24166
24167 @deftp {Data Type} mysql-configuration
24168 Data type representing the configuration of @var{mysql-service-type}.
24169
24170 @table @asis
24171 @item @code{mysql} (default: @var{mariadb})
24172 Package object of the MySQL database server, can be either @var{mariadb}
24173 or @var{mysql}.
24174
24175 For MySQL, a temporary root password will be displayed at activation time.
24176 For MariaDB, the root password is empty.
24177
24178 @item @code{bind-address} (default: @code{"127.0.0.1"})
24179 The IP on which to listen for network connections. Use @code{"0.0.0.0"}
24180 to bind to all available network interfaces.
24181
24182 @item @code{port} (default: @code{3306})
24183 TCP port on which the database server listens for incoming connections.
24184
24185 @item @code{socket} (default: @code{"/run/mysqld/mysqld.sock"})
24186 Socket file to use for local (non-network) connections.
24187
24188 @item @code{extra-content} (default: @code{""})
24189 Additional settings for the @file{my.cnf} configuration file.
24190
24191 @item @code{extra-environment} (default: @code{#~'()})
24192 List of environment variables passed to the @command{mysqld} process.
24193
24194 @item @code{auto-upgrade?} (default: @code{#t})
24195 Whether to automatically run @command{mysql_upgrade} after starting the
24196 service. This is necessary to upgrade the @dfn{system schema} after
24197 ``major'' updates (such as switching from MariaDB 10.4 to 10.5), but can
24198 be disabled if you would rather do that manually.
24199
24200 @end table
24201 @end deftp
24202
24203 @subsubheading Memcached
24204
24205 @defvr {Scheme Variable} memcached-service-type
24206 This is the service type for the @uref{https://memcached.org/,
24207 Memcached} service, which provides a distributed in memory cache. The
24208 value for the service type is a @code{memcached-configuration} object.
24209 @end defvr
24210
24211 @lisp
24212 (service memcached-service-type)
24213 @end lisp
24214
24215 @deftp {Data Type} memcached-configuration
24216 Data type representing the configuration of memcached.
24217
24218 @table @asis
24219 @item @code{memcached} (default: @code{memcached})
24220 The Memcached package to use.
24221
24222 @item @code{interfaces} (default: @code{'("0.0.0.0")})
24223 Network interfaces on which to listen.
24224
24225 @item @code{tcp-port} (default: @code{11211})
24226 Port on which to accept connections.
24227
24228 @item @code{udp-port} (default: @code{11211})
24229 Port on which to accept UDP connections on, a value of 0 will disable
24230 listening on a UDP socket.
24231
24232 @item @code{additional-options} (default: @code{'()})
24233 Additional command line options to pass to @code{memcached}.
24234 @end table
24235 @end deftp
24236
24237 @subsubheading Redis
24238
24239 @defvr {Scheme Variable} redis-service-type
24240 This is the service type for the @uref{https://redis.io/, Redis}
24241 key/value store, whose value is a @code{redis-configuration} object.
24242 @end defvr
24243
24244 @deftp {Data Type} redis-configuration
24245 Data type representing the configuration of redis.
24246
24247 @table @asis
24248 @item @code{redis} (default: @code{redis})
24249 The Redis package to use.
24250
24251 @item @code{bind} (default: @code{"127.0.0.1"})
24252 Network interface on which to listen.
24253
24254 @item @code{port} (default: @code{6379})
24255 Port on which to accept connections on, a value of 0 will disable
24256 listening on a TCP socket.
24257
24258 @item @code{working-directory} (default: @code{"/var/lib/redis"})
24259 Directory in which to store the database and related files.
24260 @end table
24261 @end deftp
24262
24263 @node Mail Services
24264 @subsection Mail Services
24265
24266 @cindex mail
24267 @cindex email
24268 The @code{(gnu services mail)} module provides Guix service definitions
24269 for email services: IMAP, POP3, and LMTP servers, as well as mail
24270 transport agents (MTAs). Lots of acronyms! These services are detailed
24271 in the subsections below.
24272
24273 @subsubheading Dovecot Service
24274
24275 @deffn {Scheme Procedure} dovecot-service [#:config (dovecot-configuration)]
24276 Return a service that runs the Dovecot IMAP/POP3/LMTP mail server.
24277 @end deffn
24278
24279 By default, Dovecot does not need much configuration; the default
24280 configuration object created by @code{(dovecot-configuration)} will
24281 suffice if your mail is delivered to @code{~/Maildir}. A self-signed
24282 certificate will be generated for TLS-protected connections, though
24283 Dovecot will also listen on cleartext ports by default. There are a
24284 number of options, though, which mail administrators might need to change,
24285 and as is the case with other services, Guix allows the system
24286 administrator to specify these parameters via a uniform Scheme interface.
24287
24288 For example, to specify that mail is located at @code{maildir~/.mail},
24289 one would instantiate the Dovecot service like this:
24290
24291 @lisp
24292 (dovecot-service #:config
24293 (dovecot-configuration
24294 (mail-location "maildir:~/.mail")))
24295 @end lisp
24296
24297 The available configuration parameters follow. Each parameter
24298 definition is preceded by its type; for example, @samp{string-list foo}
24299 indicates that the @code{foo} parameter should be specified as a list of
24300 strings. There is also a way to specify the configuration as a string,
24301 if you have an old @code{dovecot.conf} file that you want to port over
24302 from some other system; see the end for more details.
24303
24304 @c The following documentation was initially generated by
24305 @c (generate-documentation) in (gnu services mail). Manually maintained
24306 @c documentation is better, so we shouldn't hesitate to edit below as
24307 @c needed. However if the change you want to make to this documentation
24308 @c can be done in an automated way, it's probably easier to change
24309 @c (generate-documentation) than to make it below and have to deal with
24310 @c the churn as dovecot updates.
24311
24312 Available @code{dovecot-configuration} fields are:
24313
24314 @deftypevr {@code{dovecot-configuration} parameter} package dovecot
24315 The dovecot package.
24316 @end deftypevr
24317
24318 @deftypevr {@code{dovecot-configuration} parameter} comma-separated-string-list listen
24319 A list of IPs or hosts where to listen for connections. @samp{*}
24320 listens on all IPv4 interfaces, @samp{::} listens on all IPv6
24321 interfaces. If you want to specify non-default ports or anything more
24322 complex, customize the address and port fields of the
24323 @samp{inet-listener} of the specific services you are interested in.
24324 @end deftypevr
24325
24326 @deftypevr {@code{dovecot-configuration} parameter} protocol-configuration-list protocols
24327 List of protocols we want to serve. Available protocols include
24328 @samp{imap}, @samp{pop3}, and @samp{lmtp}.
24329
24330 Available @code{protocol-configuration} fields are:
24331
24332 @deftypevr {@code{protocol-configuration} parameter} string name
24333 The name of the protocol.
24334 @end deftypevr
24335
24336 @deftypevr {@code{protocol-configuration} parameter} string auth-socket-path
24337 UNIX socket path to the master authentication server to find users.
24338 This is used by imap (for shared users) and lda.
24339 It defaults to @samp{"/var/run/dovecot/auth-userdb"}.
24340 @end deftypevr
24341
24342 @deftypevr {@code{protocol-configuration} parameter} boolean imap-metadata?
24343 Whether to enable the @code{IMAP METADATA} extension as defined in
24344 @uref{https://tools.ietf.org/html/rfc5464,RFC@tie{}5464}, which provides
24345 a means for clients to set and retrieve per-mailbox, per-user metadata
24346 and annotations over IMAP.
24347
24348 If this is @samp{#t}, you must also specify a dictionary @i{via} the
24349 @code{mail-attribute-dict} setting.
24350
24351 Defaults to @samp{#f}.
24352
24353 @end deftypevr
24354
24355 @deftypevr {@code{protocol-configuration} parameter} space-separated-string-list managesieve-notify-capabilities
24356 Which NOTIFY capabilities to report to clients that first connect to
24357 the ManageSieve service, before authentication. These may differ from the
24358 capabilities offered to authenticated users. If this field is left empty,
24359 report what the Sieve interpreter supports by default.
24360
24361 Defaults to @samp{()}.
24362 @end deftypevr
24363
24364 @deftypevr {@code{protocol-configuration} parameter} space-separated-string-list managesieve-sieve-capability
24365 Which SIEVE capabilities to report to clients that first connect to
24366 the ManageSieve service, before authentication. These may differ from the
24367 capabilities offered to authenticated users. If this field is left empty,
24368 report what the Sieve interpreter supports by default.
24369
24370 Defaults to @samp{()}.
24371
24372 @end deftypevr
24373
24374 @deftypevr {@code{protocol-configuration} parameter} space-separated-string-list mail-plugins
24375 Space separated list of plugins to load.
24376 @end deftypevr
24377
24378 @deftypevr {@code{protocol-configuration} parameter} non-negative-integer mail-max-userip-connections
24379 Maximum number of IMAP connections allowed for a user from each IP
24380 address. NOTE: The username is compared case-sensitively.
24381 Defaults to @samp{10}.
24382 @end deftypevr
24383
24384 @end deftypevr
24385
24386 @deftypevr {@code{dovecot-configuration} parameter} service-configuration-list services
24387 List of services to enable. Available services include @samp{imap},
24388 @samp{imap-login}, @samp{pop3}, @samp{pop3-login}, @samp{auth}, and
24389 @samp{lmtp}.
24390
24391 Available @code{service-configuration} fields are:
24392
24393 @deftypevr {@code{service-configuration} parameter} string kind
24394 The service kind. Valid values include @code{director},
24395 @code{imap-login}, @code{pop3-login}, @code{lmtp}, @code{imap},
24396 @code{pop3}, @code{auth}, @code{auth-worker}, @code{dict},
24397 @code{tcpwrap}, @code{quota-warning}, or anything else.
24398 @end deftypevr
24399
24400 @deftypevr {@code{service-configuration} parameter} listener-configuration-list listeners
24401 Listeners for the service. A listener is either a
24402 @code{unix-listener-configuration}, a @code{fifo-listener-configuration}, or
24403 an @code{inet-listener-configuration}.
24404 Defaults to @samp{()}.
24405
24406 Available @code{unix-listener-configuration} fields are:
24407
24408 @deftypevr {@code{unix-listener-configuration} parameter} string path
24409 Path to the file, relative to @code{base-dir} field. This is also used as
24410 the section name.
24411 @end deftypevr
24412
24413 @deftypevr {@code{unix-listener-configuration} parameter} string mode
24414 The access mode for the socket.
24415 Defaults to @samp{"0600"}.
24416 @end deftypevr
24417
24418 @deftypevr {@code{unix-listener-configuration} parameter} string user
24419 The user to own the socket.
24420 Defaults to @samp{""}.
24421 @end deftypevr
24422
24423 @deftypevr {@code{unix-listener-configuration} parameter} string group
24424 The group to own the socket.
24425 Defaults to @samp{""}.
24426 @end deftypevr
24427
24428
24429 Available @code{fifo-listener-configuration} fields are:
24430
24431 @deftypevr {@code{fifo-listener-configuration} parameter} string path
24432 Path to the file, relative to @code{base-dir} field. This is also used as
24433 the section name.
24434 @end deftypevr
24435
24436 @deftypevr {@code{fifo-listener-configuration} parameter} string mode
24437 The access mode for the socket.
24438 Defaults to @samp{"0600"}.
24439 @end deftypevr
24440
24441 @deftypevr {@code{fifo-listener-configuration} parameter} string user
24442 The user to own the socket.
24443 Defaults to @samp{""}.
24444 @end deftypevr
24445
24446 @deftypevr {@code{fifo-listener-configuration} parameter} string group
24447 The group to own the socket.
24448 Defaults to @samp{""}.
24449 @end deftypevr
24450
24451
24452 Available @code{inet-listener-configuration} fields are:
24453
24454 @deftypevr {@code{inet-listener-configuration} parameter} string protocol
24455 The protocol to listen for.
24456 @end deftypevr
24457
24458 @deftypevr {@code{inet-listener-configuration} parameter} string address
24459 The address on which to listen, or empty for all addresses.
24460 Defaults to @samp{""}.
24461 @end deftypevr
24462
24463 @deftypevr {@code{inet-listener-configuration} parameter} non-negative-integer port
24464 The port on which to listen.
24465 @end deftypevr
24466
24467 @deftypevr {@code{inet-listener-configuration} parameter} boolean ssl?
24468 Whether to use SSL for this service; @samp{yes}, @samp{no}, or
24469 @samp{required}.
24470 Defaults to @samp{#t}.
24471 @end deftypevr
24472
24473 @end deftypevr
24474
24475 @deftypevr {@code{service-configuration} parameter} non-negative-integer client-limit
24476 Maximum number of simultaneous client connections per process. Once
24477 this number of connections is received, the next incoming connection
24478 will prompt Dovecot to spawn another process. If set to 0,
24479 @code{default-client-limit} is used instead.
24480
24481 Defaults to @samp{0}.
24482
24483 @end deftypevr
24484
24485 @deftypevr {@code{service-configuration} parameter} non-negative-integer service-count
24486 Number of connections to handle before starting a new process.
24487 Typically the only useful values are 0 (unlimited) or 1. 1 is more
24488 secure, but 0 is faster. <doc/wiki/LoginProcess.txt>.
24489 Defaults to @samp{1}.
24490
24491 @end deftypevr
24492
24493 @deftypevr {@code{service-configuration} parameter} non-negative-integer process-limit
24494 Maximum number of processes that can exist for this service. If set to
24495 0, @code{default-process-limit} is used instead.
24496
24497 Defaults to @samp{0}.
24498
24499 @end deftypevr
24500
24501 @deftypevr {@code{service-configuration} parameter} non-negative-integer process-min-avail
24502 Number of processes to always keep waiting for more connections.
24503 Defaults to @samp{0}.
24504 @end deftypevr
24505
24506 @deftypevr {@code{service-configuration} parameter} non-negative-integer vsz-limit
24507 If you set @samp{service-count 0}, you probably need to grow
24508 this.
24509 Defaults to @samp{256000000}.
24510 @end deftypevr
24511
24512 @end deftypevr
24513
24514 @deftypevr {@code{dovecot-configuration} parameter} dict-configuration dict
24515 Dict configuration, as created by the @code{dict-configuration}
24516 constructor.
24517
24518 Available @code{dict-configuration} fields are:
24519
24520 @deftypevr {@code{dict-configuration} parameter} free-form-fields entries
24521 A list of key-value pairs that this dict should hold.
24522 Defaults to @samp{()}.
24523 @end deftypevr
24524
24525 @end deftypevr
24526
24527 @deftypevr {@code{dovecot-configuration} parameter} passdb-configuration-list passdbs
24528 A list of passdb configurations, each one created by the
24529 @code{passdb-configuration} constructor.
24530
24531 Available @code{passdb-configuration} fields are:
24532
24533 @deftypevr {@code{passdb-configuration} parameter} string driver
24534 The driver that the passdb should use. Valid values include
24535 @samp{pam}, @samp{passwd}, @samp{shadow}, @samp{bsdauth}, and
24536 @samp{static}.
24537 Defaults to @samp{"pam"}.
24538 @end deftypevr
24539
24540 @deftypevr {@code{passdb-configuration} parameter} space-separated-string-list args
24541 Space separated list of arguments to the passdb driver.
24542 Defaults to @samp{""}.
24543 @end deftypevr
24544
24545 @end deftypevr
24546
24547 @deftypevr {@code{dovecot-configuration} parameter} userdb-configuration-list userdbs
24548 List of userdb configurations, each one created by the
24549 @code{userdb-configuration} constructor.
24550
24551 Available @code{userdb-configuration} fields are:
24552
24553 @deftypevr {@code{userdb-configuration} parameter} string driver
24554 The driver that the userdb should use. Valid values include
24555 @samp{passwd} and @samp{static}.
24556 Defaults to @samp{"passwd"}.
24557 @end deftypevr
24558
24559 @deftypevr {@code{userdb-configuration} parameter} space-separated-string-list args
24560 Space separated list of arguments to the userdb driver.
24561 Defaults to @samp{""}.
24562 @end deftypevr
24563
24564 @deftypevr {@code{userdb-configuration} parameter} free-form-args override-fields
24565 Override fields from passwd.
24566 Defaults to @samp{()}.
24567 @end deftypevr
24568
24569 @end deftypevr
24570
24571 @deftypevr {@code{dovecot-configuration} parameter} plugin-configuration plugin-configuration
24572 Plug-in configuration, created by the @code{plugin-configuration}
24573 constructor.
24574 @end deftypevr
24575
24576 @deftypevr {@code{dovecot-configuration} parameter} list-of-namespace-configuration namespaces
24577 List of namespaces. Each item in the list is created by the
24578 @code{namespace-configuration} constructor.
24579
24580 Available @code{namespace-configuration} fields are:
24581
24582 @deftypevr {@code{namespace-configuration} parameter} string name
24583 Name for this namespace.
24584 @end deftypevr
24585
24586 @deftypevr {@code{namespace-configuration} parameter} string type
24587 Namespace type: @samp{private}, @samp{shared} or @samp{public}.
24588 Defaults to @samp{"private"}.
24589 @end deftypevr
24590
24591 @deftypevr {@code{namespace-configuration} parameter} string separator
24592 Hierarchy separator to use. You should use the same separator for
24593 all namespaces or some clients get confused. @samp{/} is usually a good
24594 one. The default however depends on the underlying mail storage
24595 format.
24596 Defaults to @samp{""}.
24597 @end deftypevr
24598
24599 @deftypevr {@code{namespace-configuration} parameter} string prefix
24600 Prefix required to access this namespace. This needs to be
24601 different for all namespaces. For example @samp{Public/}.
24602 Defaults to @samp{""}.
24603 @end deftypevr
24604
24605 @deftypevr {@code{namespace-configuration} parameter} string location
24606 Physical location of the mailbox. This is in the same format as
24607 mail_location, which is also the default for it.
24608 Defaults to @samp{""}.
24609 @end deftypevr
24610
24611 @deftypevr {@code{namespace-configuration} parameter} boolean inbox?
24612 There can be only one INBOX, and this setting defines which
24613 namespace has it.
24614 Defaults to @samp{#f}.
24615 @end deftypevr
24616
24617 @deftypevr {@code{namespace-configuration} parameter} boolean hidden?
24618 If namespace is hidden, it's not advertised to clients via NAMESPACE
24619 extension. You'll most likely also want to set @samp{list? #f}. This is mostly
24620 useful when converting from another server with different namespaces
24621 which you want to deprecate but still keep working. For example you can
24622 create hidden namespaces with prefixes @samp{~/mail/}, @samp{~%u/mail/}
24623 and @samp{mail/}.
24624 Defaults to @samp{#f}.
24625 @end deftypevr
24626
24627 @deftypevr {@code{namespace-configuration} parameter} boolean list?
24628 Show the mailboxes under this namespace with the LIST command. This
24629 makes the namespace visible for clients that do not support the NAMESPACE
24630 extension. The special @code{children} value lists child mailboxes, but
24631 hides the namespace prefix.
24632 Defaults to @samp{#t}.
24633 @end deftypevr
24634
24635 @deftypevr {@code{namespace-configuration} parameter} boolean subscriptions?
24636 Namespace handles its own subscriptions. If set to @code{#f}, the
24637 parent namespace handles them. The empty prefix should always have this
24638 as @code{#t}).
24639 Defaults to @samp{#t}.
24640 @end deftypevr
24641
24642 @deftypevr {@code{namespace-configuration} parameter} mailbox-configuration-list mailboxes
24643 List of predefined mailboxes in this namespace.
24644 Defaults to @samp{()}.
24645
24646 Available @code{mailbox-configuration} fields are:
24647
24648 @deftypevr {@code{mailbox-configuration} parameter} string name
24649 Name for this mailbox.
24650 @end deftypevr
24651
24652 @deftypevr {@code{mailbox-configuration} parameter} string auto
24653 @samp{create} will automatically create this mailbox.
24654 @samp{subscribe} will both create and subscribe to the mailbox.
24655 Defaults to @samp{"no"}.
24656 @end deftypevr
24657
24658 @deftypevr {@code{mailbox-configuration} parameter} space-separated-string-list special-use
24659 List of IMAP @code{SPECIAL-USE} attributes as specified by RFC 6154.
24660 Valid values are @code{\All}, @code{\Archive}, @code{\Drafts},
24661 @code{\Flagged}, @code{\Junk}, @code{\Sent}, and @code{\Trash}.
24662 Defaults to @samp{()}.
24663 @end deftypevr
24664
24665 @end deftypevr
24666
24667 @end deftypevr
24668
24669 @deftypevr {@code{dovecot-configuration} parameter} file-name base-dir
24670 Base directory where to store runtime data.
24671 Defaults to @samp{"/var/run/dovecot/"}.
24672 @end deftypevr
24673
24674 @deftypevr {@code{dovecot-configuration} parameter} string login-greeting
24675 Greeting message for clients.
24676 Defaults to @samp{"Dovecot ready."}.
24677 @end deftypevr
24678
24679 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-trusted-networks
24680 List of trusted network ranges. Connections from these IPs are
24681 allowed to override their IP addresses and ports (for logging and for
24682 authentication checks). @samp{disable-plaintext-auth} is also ignored
24683 for these networks. Typically you would specify your IMAP proxy servers
24684 here.
24685 Defaults to @samp{()}.
24686 @end deftypevr
24687
24688 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-access-sockets
24689 List of login access check sockets (e.g.@: tcpwrap).
24690 Defaults to @samp{()}.
24691 @end deftypevr
24692
24693 @deftypevr {@code{dovecot-configuration} parameter} boolean verbose-proctitle?
24694 Show more verbose process titles (in ps). Currently shows user name
24695 and IP address. Useful for seeing who is actually using the IMAP
24696 processes (e.g.@: shared mailboxes or if the same uid is used for multiple
24697 accounts).
24698 Defaults to @samp{#f}.
24699 @end deftypevr
24700
24701 @deftypevr {@code{dovecot-configuration} parameter} boolean shutdown-clients?
24702 Should all processes be killed when Dovecot master process shuts down.
24703 Setting this to @code{#f} means that Dovecot can be upgraded without
24704 forcing existing client connections to close (although that could also
24705 be a problem if the upgrade is e.g.@: due to a security fix).
24706 Defaults to @samp{#t}.
24707 @end deftypevr
24708
24709 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer doveadm-worker-count
24710 If non-zero, run mail commands via this many connections to doveadm
24711 server, instead of running them directly in the same process.
24712 Defaults to @samp{0}.
24713 @end deftypevr
24714
24715 @deftypevr {@code{dovecot-configuration} parameter} string doveadm-socket-path
24716 UNIX socket or host:port used for connecting to doveadm server.
24717 Defaults to @samp{"doveadm-server"}.
24718 @end deftypevr
24719
24720 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list import-environment
24721 List of environment variables that are preserved on Dovecot startup
24722 and passed down to all of its child processes. You can also give
24723 key=value pairs to always set specific settings.
24724 @end deftypevr
24725
24726 @deftypevr {@code{dovecot-configuration} parameter} boolean disable-plaintext-auth?
24727 Disable LOGIN command and all other plaintext authentications unless
24728 SSL/TLS is used (LOGINDISABLED capability). Note that if the remote IP
24729 matches the local IP (i.e.@: you're connecting from the same computer),
24730 the connection is considered secure and plaintext authentication is
24731 allowed. See also ssl=required setting.
24732 Defaults to @samp{#t}.
24733 @end deftypevr
24734
24735 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer auth-cache-size
24736 Authentication cache size (e.g.@: @samp{#e10e6}). 0 means it's disabled.
24737 Note that bsdauth, PAM and vpopmail require @samp{cache-key} to be set
24738 for caching to be used.
24739 Defaults to @samp{0}.
24740 @end deftypevr
24741
24742 @deftypevr {@code{dovecot-configuration} parameter} string auth-cache-ttl
24743 Time to live for cached data. After TTL expires the cached record
24744 is no longer used, *except* if the main database lookup returns internal
24745 failure. We also try to handle password changes automatically: If
24746 user's previous authentication was successful, but this one wasn't, the
24747 cache isn't used. For now this works only with plaintext
24748 authentication.
24749 Defaults to @samp{"1 hour"}.
24750 @end deftypevr
24751
24752 @deftypevr {@code{dovecot-configuration} parameter} string auth-cache-negative-ttl
24753 TTL for negative hits (user not found, password mismatch).
24754 0 disables caching them completely.
24755 Defaults to @samp{"1 hour"}.
24756 @end deftypevr
24757
24758 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list auth-realms
24759 List of realms for SASL authentication mechanisms that need them.
24760 You can leave it empty if you don't want to support multiple realms.
24761 Many clients simply use the first one listed here, so keep the default
24762 realm first.
24763 Defaults to @samp{()}.
24764 @end deftypevr
24765
24766 @deftypevr {@code{dovecot-configuration} parameter} string auth-default-realm
24767 Default realm/domain to use if none was specified. This is used for
24768 both SASL realms and appending @@domain to username in plaintext
24769 logins.
24770 Defaults to @samp{""}.
24771 @end deftypevr
24772
24773 @deftypevr {@code{dovecot-configuration} parameter} string auth-username-chars
24774 List of allowed characters in username. If the user-given username
24775 contains a character not listed in here, the login automatically fails.
24776 This is just an extra check to make sure user can't exploit any
24777 potential quote escaping vulnerabilities with SQL/LDAP databases. If
24778 you want to allow all characters, set this value to empty.
24779 Defaults to @samp{"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@@"}.
24780 @end deftypevr
24781
24782 @deftypevr {@code{dovecot-configuration} parameter} string auth-username-translation
24783 Username character translations before it's looked up from
24784 databases. The value contains series of from -> to characters. For
24785 example @samp{#@@/@@} means that @samp{#} and @samp{/} characters are
24786 translated to @samp{@@}.
24787 Defaults to @samp{""}.
24788 @end deftypevr
24789
24790 @deftypevr {@code{dovecot-configuration} parameter} string auth-username-format
24791 Username formatting before it's looked up from databases. You can
24792 use the standard variables here, e.g.@: %Lu would lowercase the username,
24793 %n would drop away the domain if it was given, or @samp{%n-AT-%d} would
24794 change the @samp{@@} into @samp{-AT-}. This translation is done after
24795 @samp{auth-username-translation} changes.
24796 Defaults to @samp{"%Lu"}.
24797 @end deftypevr
24798
24799 @deftypevr {@code{dovecot-configuration} parameter} string auth-master-user-separator
24800 If you want to allow master users to log in by specifying the master
24801 username within the normal username string (i.e.@: not using SASL
24802 mechanism's support for it), you can specify the separator character
24803 here. The format is then <username><separator><master username>.
24804 UW-IMAP uses @samp{*} as the separator, so that could be a good
24805 choice.
24806 Defaults to @samp{""}.
24807 @end deftypevr
24808
24809 @deftypevr {@code{dovecot-configuration} parameter} string auth-anonymous-username
24810 Username to use for users logging in with ANONYMOUS SASL
24811 mechanism.
24812 Defaults to @samp{"anonymous"}.
24813 @end deftypevr
24814
24815 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer auth-worker-max-count
24816 Maximum number of dovecot-auth worker processes. They're used to
24817 execute blocking passdb and userdb queries (e.g.@: MySQL and PAM).
24818 They're automatically created and destroyed as needed.
24819 Defaults to @samp{30}.
24820 @end deftypevr
24821
24822 @deftypevr {@code{dovecot-configuration} parameter} string auth-gssapi-hostname
24823 Host name to use in GSSAPI principal names. The default is to use
24824 the name returned by gethostname(). Use @samp{$ALL} (with quotes) to
24825 allow all keytab entries.
24826 Defaults to @samp{""}.
24827 @end deftypevr
24828
24829 @deftypevr {@code{dovecot-configuration} parameter} string auth-krb5-keytab
24830 Kerberos keytab to use for the GSSAPI mechanism. Will use the
24831 system default (usually @file{/etc/krb5.keytab}) if not specified. You may
24832 need to change the auth service to run as root to be able to read this
24833 file.
24834 Defaults to @samp{""}.
24835 @end deftypevr
24836
24837 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-use-winbind?
24838 Do NTLM and GSS-SPNEGO authentication using Samba's winbind daemon
24839 and @samp{ntlm-auth} helper.
24840 <doc/wiki/Authentication/Mechanisms/Winbind.txt>.
24841 Defaults to @samp{#f}.
24842 @end deftypevr
24843
24844 @deftypevr {@code{dovecot-configuration} parameter} file-name auth-winbind-helper-path
24845 Path for Samba's @samp{ntlm-auth} helper binary.
24846 Defaults to @samp{"/usr/bin/ntlm_auth"}.
24847 @end deftypevr
24848
24849 @deftypevr {@code{dovecot-configuration} parameter} string auth-failure-delay
24850 Time to delay before replying to failed authentications.
24851 Defaults to @samp{"2 secs"}.
24852 @end deftypevr
24853
24854 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-ssl-require-client-cert?
24855 Require a valid SSL client certificate or the authentication
24856 fails.
24857 Defaults to @samp{#f}.
24858 @end deftypevr
24859
24860 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-ssl-username-from-cert?
24861 Take the username from client's SSL certificate, using
24862 @code{X509_NAME_get_text_by_NID()} which returns the subject's DN's
24863 CommonName.
24864 Defaults to @samp{#f}.
24865 @end deftypevr
24866
24867 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list auth-mechanisms
24868 List of wanted authentication mechanisms. Supported mechanisms are:
24869 @samp{plain}, @samp{login}, @samp{digest-md5}, @samp{cram-md5},
24870 @samp{ntlm}, @samp{rpa}, @samp{apop}, @samp{anonymous}, @samp{gssapi},
24871 @samp{otp}, @samp{skey}, and @samp{gss-spnego}. NOTE: See also
24872 @samp{disable-plaintext-auth} setting.
24873 @end deftypevr
24874
24875 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list director-servers
24876 List of IPs or hostnames to all director servers, including ourself.
24877 Ports can be specified as ip:port. The default port is the same as what
24878 director service's @samp{inet-listener} is using.
24879 Defaults to @samp{()}.
24880 @end deftypevr
24881
24882 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list director-mail-servers
24883 List of IPs or hostnames to all backend mail servers. Ranges are
24884 allowed too, like 10.0.0.10-10.0.0.30.
24885 Defaults to @samp{()}.
24886 @end deftypevr
24887
24888 @deftypevr {@code{dovecot-configuration} parameter} string director-user-expire
24889 How long to redirect users to a specific server after it no longer
24890 has any connections.
24891 Defaults to @samp{"15 min"}.
24892 @end deftypevr
24893
24894 @deftypevr {@code{dovecot-configuration} parameter} string director-username-hash
24895 How the username is translated before being hashed. Useful values
24896 include %Ln if user can log in with or without @@domain, %Ld if mailboxes
24897 are shared within domain.
24898 Defaults to @samp{"%Lu"}.
24899 @end deftypevr
24900
24901 @deftypevr {@code{dovecot-configuration} parameter} string log-path
24902 Log file to use for error messages. @samp{syslog} logs to syslog,
24903 @samp{/dev/stderr} logs to stderr.
24904 Defaults to @samp{"syslog"}.
24905 @end deftypevr
24906
24907 @deftypevr {@code{dovecot-configuration} parameter} string info-log-path
24908 Log file to use for informational messages. Defaults to
24909 @samp{log-path}.
24910 Defaults to @samp{""}.
24911 @end deftypevr
24912
24913 @deftypevr {@code{dovecot-configuration} parameter} string debug-log-path
24914 Log file to use for debug messages. Defaults to
24915 @samp{info-log-path}.
24916 Defaults to @samp{""}.
24917 @end deftypevr
24918
24919 @deftypevr {@code{dovecot-configuration} parameter} string syslog-facility
24920 Syslog facility to use if you're logging to syslog. Usually if you
24921 don't want to use @samp{mail}, you'll use local0..local7. Also other
24922 standard facilities are supported.
24923 Defaults to @samp{"mail"}.
24924 @end deftypevr
24925
24926 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-verbose?
24927 Log unsuccessful authentication attempts and the reasons why they
24928 failed.
24929 Defaults to @samp{#f}.
24930 @end deftypevr
24931
24932 @deftypevr {@code{dovecot-configuration} parameter} string auth-verbose-passwords
24933 In case of password mismatches, log the attempted password. Valid
24934 values are no, plain and sha1. sha1 can be useful for detecting brute
24935 force password attempts vs. user simply trying the same password over
24936 and over again. You can also truncate the value to n chars by appending
24937 ":n" (e.g.@: sha1:6).
24938 Defaults to @samp{"no"}.
24939 @end deftypevr
24940
24941 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-debug?
24942 Even more verbose logging for debugging purposes. Shows for example
24943 SQL queries.
24944 Defaults to @samp{#f}.
24945 @end deftypevr
24946
24947 @deftypevr {@code{dovecot-configuration} parameter} boolean auth-debug-passwords?
24948 In case of password mismatches, log the passwords and used scheme so
24949 the problem can be debugged. Enabling this also enables
24950 @samp{auth-debug}.
24951 Defaults to @samp{#f}.
24952 @end deftypevr
24953
24954 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-debug?
24955 Enable mail process debugging. This can help you figure out why
24956 Dovecot isn't finding your mails.
24957 Defaults to @samp{#f}.
24958 @end deftypevr
24959
24960 @deftypevr {@code{dovecot-configuration} parameter} boolean verbose-ssl?
24961 Show protocol level SSL errors.
24962 Defaults to @samp{#f}.
24963 @end deftypevr
24964
24965 @deftypevr {@code{dovecot-configuration} parameter} string log-timestamp
24966 Prefix for each line written to log file. % codes are in
24967 strftime(3) format.
24968 Defaults to @samp{"\"%b %d %H:%M:%S \""}.
24969 @end deftypevr
24970
24971 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-log-format-elements
24972 List of elements we want to log. The elements which have a
24973 non-empty variable value are joined together to form a comma-separated
24974 string.
24975 @end deftypevr
24976
24977 @deftypevr {@code{dovecot-configuration} parameter} string login-log-format
24978 Login log format. %s contains @samp{login-log-format-elements}
24979 string, %$ contains the data we want to log.
24980 Defaults to @samp{"%$: %s"}.
24981 @end deftypevr
24982
24983 @deftypevr {@code{dovecot-configuration} parameter} string mail-log-prefix
24984 Log prefix for mail processes. See doc/wiki/Variables.txt for list
24985 of possible variables you can use.
24986 Defaults to @samp{"\"%s(%u)<%@{pid@}><%@{session@}>: \""}.
24987 @end deftypevr
24988
24989 @deftypevr {@code{dovecot-configuration} parameter} string deliver-log-format
24990 Format to use for logging mail deliveries. You can use variables:
24991 @table @code
24992 @item %$
24993 Delivery status message (e.g.@: @samp{saved to INBOX})
24994 @item %m
24995 Message-ID
24996 @item %s
24997 Subject
24998 @item %f
24999 From address
25000 @item %p
25001 Physical size
25002 @item %w
25003 Virtual size.
25004 @end table
25005 Defaults to @samp{"msgid=%m: %$"}.
25006 @end deftypevr
25007
25008 @deftypevr {@code{dovecot-configuration} parameter} string mail-location
25009 Location for users' mailboxes. The default is empty, which means
25010 that Dovecot tries to find the mailboxes automatically. This won't work
25011 if the user doesn't yet have any mail, so you should explicitly tell
25012 Dovecot the full location.
25013
25014 If you're using mbox, giving a path to the INBOX
25015 file (e.g.@: @file{/var/mail/%u}) isn't enough. You'll also need to tell Dovecot
25016 where the other mailboxes are kept. This is called the @emph{root mail
25017 directory}, and it must be the first path given in the
25018 @samp{mail-location} setting.
25019
25020 There are a few special variables you can use, e.g.:
25021
25022 @table @samp
25023 @item %u
25024 username
25025 @item %n
25026 user part in user@@domain, same as %u if there's no domain
25027 @item %d
25028 domain part in user@@domain, empty if there's no domain
25029 @item %h
25030 home director
25031 @end table
25032
25033 See doc/wiki/Variables.txt for full list. Some examples:
25034 @table @samp
25035 @item maildir:~/Maildir
25036 @item mbox:~/mail:INBOX=/var/mail/%u
25037 @item mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%
25038 @end table
25039 Defaults to @samp{""}.
25040 @end deftypevr
25041
25042 @deftypevr {@code{dovecot-configuration} parameter} string mail-uid
25043 System user and group used to access mails. If you use multiple,
25044 userdb can override these by returning uid or gid fields. You can use
25045 either numbers or names. <doc/wiki/UserIds.txt>.
25046 Defaults to @samp{""}.
25047 @end deftypevr
25048
25049 @deftypevr {@code{dovecot-configuration} parameter} string mail-gid
25050
25051 Defaults to @samp{""}.
25052 @end deftypevr
25053
25054 @deftypevr {@code{dovecot-configuration} parameter} string mail-privileged-group
25055 Group to enable temporarily for privileged operations. Currently
25056 this is used only with INBOX when either its initial creation or
25057 dotlocking fails. Typically this is set to @samp{"mail"} to give access to
25058 @file{/var/mail}.
25059 Defaults to @samp{""}.
25060 @end deftypevr
25061
25062 @deftypevr {@code{dovecot-configuration} parameter} string mail-access-groups
25063 Grant access to these supplementary groups for mail processes.
25064 Typically these are used to set up access to shared mailboxes. Note
25065 that it may be dangerous to set these if users can create symlinks
25066 (e.g.@: if @samp{mail} group is set here, @code{ln -s /var/mail ~/mail/var}
25067 could allow a user to delete others' mailboxes, or @code{ln -s
25068 /secret/shared/box ~/mail/mybox} would allow reading it). Defaults to
25069 @samp{""}.
25070 @end deftypevr
25071
25072 @deftypevr {@code{dovecot-configuration} parameter} string mail-attribute-dict
25073 The location of a dictionary used to store @code{IMAP METADATA}
25074 as defined by @uref{https://tools.ietf.org/html/rfc5464, RFC@tie{}5464}.
25075
25076 The IMAP METADATA commands are available only if the ``imap''
25077 protocol configuration's @code{imap-metadata?} field is @samp{#t}.
25078
25079 Defaults to @samp{""}.
25080
25081 @end deftypevr
25082
25083 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-full-filesystem-access?
25084 Allow full file system access to clients. There's no access checks
25085 other than what the operating system does for the active UID/GID@. It
25086 works with both maildir and mboxes, allowing you to prefix mailboxes
25087 names with e.g.@: @file{/path/} or @file{~user/}.
25088 Defaults to @samp{#f}.
25089 @end deftypevr
25090
25091 @deftypevr {@code{dovecot-configuration} parameter} boolean mmap-disable?
25092 Don't use @code{mmap()} at all. This is required if you store indexes to
25093 shared file systems (NFS or clustered file system).
25094 Defaults to @samp{#f}.
25095 @end deftypevr
25096
25097 @deftypevr {@code{dovecot-configuration} parameter} boolean dotlock-use-excl?
25098 Rely on @samp{O_EXCL} to work when creating dotlock files. NFS
25099 supports @samp{O_EXCL} since version 3, so this should be safe to use
25100 nowadays by default.
25101 Defaults to @samp{#t}.
25102 @end deftypevr
25103
25104 @deftypevr {@code{dovecot-configuration} parameter} string mail-fsync
25105 When to use fsync() or fdatasync() calls:
25106 @table @code
25107 @item optimized
25108 Whenever necessary to avoid losing important data
25109 @item always
25110 Useful with e.g.@: NFS when @code{write()}s are delayed
25111 @item never
25112 Never use it (best performance, but crashes can lose data).
25113 @end table
25114 Defaults to @samp{"optimized"}.
25115 @end deftypevr
25116
25117 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-nfs-storage?
25118 Mail storage exists in NFS@. Set this to yes to make Dovecot flush
25119 NFS caches whenever needed. If you're using only a single mail server
25120 this isn't needed.
25121 Defaults to @samp{#f}.
25122 @end deftypevr
25123
25124 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-nfs-index?
25125 Mail index files also exist in NFS@. Setting this to yes requires
25126 @samp{mmap-disable? #t} and @samp{fsync-disable? #f}.
25127 Defaults to @samp{#f}.
25128 @end deftypevr
25129
25130 @deftypevr {@code{dovecot-configuration} parameter} string lock-method
25131 Locking method for index files. Alternatives are fcntl, flock and
25132 dotlock. Dotlocking uses some tricks which may create more disk I/O
25133 than other locking methods. NFS users: flock doesn't work, remember to
25134 change @samp{mmap-disable}.
25135 Defaults to @samp{"fcntl"}.
25136 @end deftypevr
25137
25138 @deftypevr {@code{dovecot-configuration} parameter} file-name mail-temp-dir
25139 Directory in which LDA/LMTP temporarily stores incoming mails >128
25140 kB.
25141 Defaults to @samp{"/tmp"}.
25142 @end deftypevr
25143
25144 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer first-valid-uid
25145 Valid UID range for users. This is mostly to make sure that users can't
25146 log in as daemons or other system users. Note that denying root logins is
25147 hardcoded to dovecot binary and can't be done even if @samp{first-valid-uid}
25148 is set to 0.
25149 Defaults to @samp{500}.
25150 @end deftypevr
25151
25152 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer last-valid-uid
25153
25154 Defaults to @samp{0}.
25155 @end deftypevr
25156
25157 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer first-valid-gid
25158 Valid GID range for users. Users having non-valid GID as primary group ID
25159 aren't allowed to log in. If user belongs to supplementary groups with
25160 non-valid GIDs, those groups are not set.
25161 Defaults to @samp{1}.
25162 @end deftypevr
25163
25164 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer last-valid-gid
25165
25166 Defaults to @samp{0}.
25167 @end deftypevr
25168
25169 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-max-keyword-length
25170 Maximum allowed length for mail keyword name. It's only forced when
25171 trying to create new keywords.
25172 Defaults to @samp{50}.
25173 @end deftypevr
25174
25175 @deftypevr {@code{dovecot-configuration} parameter} colon-separated-file-name-list valid-chroot-dirs
25176 List of directories under which chrooting is allowed for mail
25177 processes (i.e.@: @file{/var/mail} will allow chrooting to @file{/var/mail/foo/bar}
25178 too). This setting doesn't affect @samp{login-chroot}
25179 @samp{mail-chroot} or auth chroot settings. If this setting is empty,
25180 @samp{/./} in home dirs are ignored. WARNING: Never add directories here
25181 which local users can modify, that may lead to root exploit. Usually
25182 this should be done only if you don't allow shell access for users.
25183 <doc/wiki/Chrooting.txt>.
25184 Defaults to @samp{()}.
25185 @end deftypevr
25186
25187 @deftypevr {@code{dovecot-configuration} parameter} string mail-chroot
25188 Default chroot directory for mail processes. This can be overridden
25189 for specific users in user database by giving @samp{/./} in user's home
25190 directory (e.g.@: @samp{/home/./user} chroots into @file{/home}). Note that usually
25191 there is no real need to do chrooting, Dovecot doesn't allow users to
25192 access files outside their mail directory anyway. If your home
25193 directories are prefixed with the chroot directory, append @samp{/.} to
25194 @samp{mail-chroot}. <doc/wiki/Chrooting.txt>.
25195 Defaults to @samp{""}.
25196 @end deftypevr
25197
25198 @deftypevr {@code{dovecot-configuration} parameter} file-name auth-socket-path
25199 UNIX socket path to master authentication server to find users.
25200 This is used by imap (for shared users) and lda.
25201 Defaults to @samp{"/var/run/dovecot/auth-userdb"}.
25202 @end deftypevr
25203
25204 @deftypevr {@code{dovecot-configuration} parameter} file-name mail-plugin-dir
25205 Directory where to look up mail plugins.
25206 Defaults to @samp{"/usr/lib/dovecot"}.
25207 @end deftypevr
25208
25209 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mail-plugins
25210 List of plugins to load for all services. Plugins specific to IMAP,
25211 LDA, etc.@: are added to this list in their own .conf files.
25212 Defaults to @samp{()}.
25213 @end deftypevr
25214
25215 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-cache-min-mail-count
25216 The minimum number of mails in a mailbox before updates are done to
25217 cache file. This allows optimizing Dovecot's behavior to do less disk
25218 writes at the cost of more disk reads.
25219 Defaults to @samp{0}.
25220 @end deftypevr
25221
25222 @deftypevr {@code{dovecot-configuration} parameter} string mailbox-idle-check-interval
25223 When IDLE command is running, mailbox is checked once in a while to
25224 see if there are any new mails or other changes. This setting defines
25225 the minimum time to wait between those checks. Dovecot can also use
25226 dnotify, inotify and kqueue to find out immediately when changes
25227 occur.
25228 Defaults to @samp{"30 secs"}.
25229 @end deftypevr
25230
25231 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-save-crlf?
25232 Save mails with CR+LF instead of plain LF@. This makes sending those
25233 mails take less CPU, especially with sendfile() syscall with Linux and
25234 FreeBSD@. But it also creates a bit more disk I/O which may just make it
25235 slower. Also note that if other software reads the mboxes/maildirs,
25236 they may handle the extra CRs wrong and cause problems.
25237 Defaults to @samp{#f}.
25238 @end deftypevr
25239
25240 @deftypevr {@code{dovecot-configuration} parameter} boolean maildir-stat-dirs?
25241 By default LIST command returns all entries in maildir beginning
25242 with a dot. Enabling this option makes Dovecot return only entries
25243 which are directories. This is done by stat()ing each entry, so it
25244 causes more disk I/O.
25245 (For systems setting struct @samp{dirent->d_type} this check is free
25246 and it's done always regardless of this setting).
25247 Defaults to @samp{#f}.
25248 @end deftypevr
25249
25250 @deftypevr {@code{dovecot-configuration} parameter} boolean maildir-copy-with-hardlinks?
25251 When copying a message, do it with hard links whenever possible.
25252 This makes the performance much better, and it's unlikely to have any
25253 side effects.
25254 Defaults to @samp{#t}.
25255 @end deftypevr
25256
25257 @deftypevr {@code{dovecot-configuration} parameter} boolean maildir-very-dirty-syncs?
25258 Assume Dovecot is the only MUA accessing Maildir: Scan cur/
25259 directory only when its mtime changes unexpectedly or when we can't find
25260 the mail otherwise.
25261 Defaults to @samp{#f}.
25262 @end deftypevr
25263
25264 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mbox-read-locks
25265 Which locking methods to use for locking mbox. There are four
25266 available:
25267
25268 @table @code
25269 @item dotlock
25270 Create <mailbox>.lock file. This is the oldest and most NFS-safe
25271 solution. If you want to use /var/mail/ like directory, the users will
25272 need write access to that directory.
25273 @item dotlock-try
25274 Same as dotlock, but if it fails because of permissions or because there
25275 isn't enough disk space, just skip it.
25276 @item fcntl
25277 Use this if possible. Works with NFS too if lockd is used.
25278 @item flock
25279 May not exist in all systems. Doesn't work with NFS.
25280 @item lockf
25281 May not exist in all systems. Doesn't work with NFS.
25282 @end table
25283
25284 You can use multiple locking methods; if you do the order they're declared
25285 in is important to avoid deadlocks if other MTAs/MUAs are using multiple
25286 locking methods as well. Some operating systems don't allow using some of
25287 them simultaneously.
25288 @end deftypevr
25289
25290 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mbox-write-locks
25291
25292 @end deftypevr
25293
25294 @deftypevr {@code{dovecot-configuration} parameter} string mbox-lock-timeout
25295 Maximum time to wait for lock (all of them) before aborting.
25296 Defaults to @samp{"5 mins"}.
25297 @end deftypevr
25298
25299 @deftypevr {@code{dovecot-configuration} parameter} string mbox-dotlock-change-timeout
25300 If dotlock exists but the mailbox isn't modified in any way,
25301 override the lock file after this much time.
25302 Defaults to @samp{"2 mins"}.
25303 @end deftypevr
25304
25305 @deftypevr {@code{dovecot-configuration} parameter} boolean mbox-dirty-syncs?
25306 When mbox changes unexpectedly we have to fully read it to find out
25307 what changed. If the mbox is large this can take a long time. Since
25308 the change is usually just a newly appended mail, it'd be faster to
25309 simply read the new mails. If this setting is enabled, Dovecot does
25310 this but still safely fallbacks to re-reading the whole mbox file
25311 whenever something in mbox isn't how it's expected to be. The only real
25312 downside to this setting is that if some other MUA changes message
25313 flags, Dovecot doesn't notice it immediately. Note that a full sync is
25314 done with SELECT, EXAMINE, EXPUNGE and CHECK commands.
25315 Defaults to @samp{#t}.
25316 @end deftypevr
25317
25318 @deftypevr {@code{dovecot-configuration} parameter} boolean mbox-very-dirty-syncs?
25319 Like @samp{mbox-dirty-syncs}, but don't do full syncs even with SELECT,
25320 EXAMINE, EXPUNGE or CHECK commands. If this is set,
25321 @samp{mbox-dirty-syncs} is ignored.
25322 Defaults to @samp{#f}.
25323 @end deftypevr
25324
25325 @deftypevr {@code{dovecot-configuration} parameter} boolean mbox-lazy-writes?
25326 Delay writing mbox headers until doing a full write sync (EXPUNGE
25327 and CHECK commands and when closing the mailbox). This is especially
25328 useful for POP3 where clients often delete all mails. The downside is
25329 that our changes aren't immediately visible to other MUAs.
25330 Defaults to @samp{#t}.
25331 @end deftypevr
25332
25333 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mbox-min-index-size
25334 If mbox size is smaller than this (e.g.@: 100k), don't write index
25335 files. If an index file already exists it's still read, just not
25336 updated.
25337 Defaults to @samp{0}.
25338 @end deftypevr
25339
25340 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mdbox-rotate-size
25341 Maximum dbox file size until it's rotated.
25342 Defaults to @samp{10000000}.
25343 @end deftypevr
25344
25345 @deftypevr {@code{dovecot-configuration} parameter} string mdbox-rotate-interval
25346 Maximum dbox file age until it's rotated. Typically in days. Day
25347 begins from midnight, so 1d = today, 2d = yesterday, etc. 0 = check
25348 disabled.
25349 Defaults to @samp{"1d"}.
25350 @end deftypevr
25351
25352 @deftypevr {@code{dovecot-configuration} parameter} boolean mdbox-preallocate-space?
25353 When creating new mdbox files, immediately preallocate their size to
25354 @samp{mdbox-rotate-size}. This setting currently works only in Linux
25355 with some file systems (ext4, xfs).
25356 Defaults to @samp{#f}.
25357 @end deftypevr
25358
25359 @deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-dir
25360 sdbox and mdbox support saving mail attachments to external files,
25361 which also allows single instance storage for them. Other backends
25362 don't support this for now.
25363
25364 WARNING: This feature hasn't been tested much yet. Use at your own risk.
25365
25366 Directory root where to store mail attachments. Disabled, if empty.
25367 Defaults to @samp{""}.
25368 @end deftypevr
25369
25370 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-attachment-min-size
25371 Attachments smaller than this aren't saved externally. It's also
25372 possible to write a plugin to disable saving specific attachments
25373 externally.
25374 Defaults to @samp{128000}.
25375 @end deftypevr
25376
25377 @deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-fs
25378 File system backend to use for saving attachments:
25379 @table @code
25380 @item posix
25381 No SiS done by Dovecot (but this might help FS's own deduplication)
25382 @item sis posix
25383 SiS with immediate byte-by-byte comparison during saving
25384 @item sis-queue posix
25385 SiS with delayed comparison and deduplication.
25386 @end table
25387 Defaults to @samp{"sis posix"}.
25388 @end deftypevr
25389
25390 @deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-hash
25391 Hash format to use in attachment filenames. You can add any text and
25392 variables: @code{%@{md4@}}, @code{%@{md5@}}, @code{%@{sha1@}},
25393 @code{%@{sha256@}}, @code{%@{sha512@}}, @code{%@{size@}}. Variables can be
25394 truncated, e.g.@: @code{%@{sha256:80@}} returns only first 80 bits.
25395 Defaults to @samp{"%@{sha1@}"}.
25396 @end deftypevr
25397
25398 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-process-limit
25399
25400 Defaults to @samp{100}.
25401 @end deftypevr
25402
25403 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-client-limit
25404
25405 Defaults to @samp{1000}.
25406 @end deftypevr
25407
25408 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-vsz-limit
25409 Default VSZ (virtual memory size) limit for service processes.
25410 This is mainly intended to catch and kill processes that leak memory
25411 before they eat up everything.
25412 Defaults to @samp{256000000}.
25413 @end deftypevr
25414
25415 @deftypevr {@code{dovecot-configuration} parameter} string default-login-user
25416 Login user is internally used by login processes. This is the most
25417 untrusted user in Dovecot system. It shouldn't have access to anything
25418 at all.
25419 Defaults to @samp{"dovenull"}.
25420 @end deftypevr
25421
25422 @deftypevr {@code{dovecot-configuration} parameter} string default-internal-user
25423 Internal user is used by unprivileged processes. It should be
25424 separate from login user, so that login processes can't disturb other
25425 processes.
25426 Defaults to @samp{"dovecot"}.
25427 @end deftypevr
25428
25429 @deftypevr {@code{dovecot-configuration} parameter} string ssl?
25430 SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>.
25431 Defaults to @samp{"required"}.
25432 @end deftypevr
25433
25434 @deftypevr {@code{dovecot-configuration} parameter} string ssl-cert
25435 PEM encoded X.509 SSL/TLS certificate (public key).
25436 Defaults to @samp{"</etc/dovecot/default.pem"}.
25437 @end deftypevr
25438
25439 @deftypevr {@code{dovecot-configuration} parameter} string ssl-key
25440 PEM encoded SSL/TLS private key. The key is opened before
25441 dropping root privileges, so keep the key file unreadable by anyone but
25442 root.
25443 Defaults to @samp{"</etc/dovecot/private/default.pem"}.
25444 @end deftypevr
25445
25446 @deftypevr {@code{dovecot-configuration} parameter} string ssl-key-password
25447 If key file is password protected, give the password here.
25448 Alternatively give it when starting dovecot with -p parameter. Since
25449 this file is often world-readable, you may want to place this setting
25450 instead to a different.
25451 Defaults to @samp{""}.
25452 @end deftypevr
25453
25454 @deftypevr {@code{dovecot-configuration} parameter} string ssl-ca
25455 PEM encoded trusted certificate authority. Set this only if you
25456 intend to use @samp{ssl-verify-client-cert? #t}. The file should
25457 contain the CA certificate(s) followed by the matching
25458 CRL(s). (e.g.@: @samp{ssl-ca </etc/ssl/certs/ca.pem}).
25459 Defaults to @samp{""}.
25460 @end deftypevr
25461
25462 @deftypevr {@code{dovecot-configuration} parameter} boolean ssl-require-crl?
25463 Require that CRL check succeeds for client certificates.
25464 Defaults to @samp{#t}.
25465 @end deftypevr
25466
25467 @deftypevr {@code{dovecot-configuration} parameter} boolean ssl-verify-client-cert?
25468 Request client to send a certificate. If you also want to require
25469 it, set @samp{auth-ssl-require-client-cert? #t} in auth section.
25470 Defaults to @samp{#f}.
25471 @end deftypevr
25472
25473 @deftypevr {@code{dovecot-configuration} parameter} string ssl-cert-username-field
25474 Which field from certificate to use for username. commonName and
25475 x500UniqueIdentifier are the usual choices. You'll also need to set
25476 @samp{auth-ssl-username-from-cert? #t}.
25477 Defaults to @samp{"commonName"}.
25478 @end deftypevr
25479
25480 @deftypevr {@code{dovecot-configuration} parameter} string ssl-min-protocol
25481 Minimum SSL protocol version to accept.
25482 Defaults to @samp{"TLSv1"}.
25483 @end deftypevr
25484
25485 @deftypevr {@code{dovecot-configuration} parameter} string ssl-cipher-list
25486 SSL ciphers to use.
25487 Defaults to @samp{"ALL:!kRSA:!SRP:!kDHd:!DSS:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!RC4:!ADH:!LOW@@STRENGTH"}.
25488 @end deftypevr
25489
25490 @deftypevr {@code{dovecot-configuration} parameter} string ssl-crypto-device
25491 SSL crypto device to use, for valid values run "openssl engine".
25492 Defaults to @samp{""}.
25493 @end deftypevr
25494
25495 @deftypevr {@code{dovecot-configuration} parameter} string postmaster-address
25496 Address to use when sending rejection mails.
25497 %d expands to recipient domain.
25498 Defaults to @samp{"postmaster@@%d"}.
25499 @end deftypevr
25500
25501 @deftypevr {@code{dovecot-configuration} parameter} string hostname
25502 Hostname to use in various parts of sent mails (e.g.@: in Message-Id)
25503 and in LMTP replies. Default is the system's real hostname@@domain.
25504 Defaults to @samp{""}.
25505 @end deftypevr
25506
25507 @deftypevr {@code{dovecot-configuration} parameter} boolean quota-full-tempfail?
25508 If user is over quota, return with temporary failure instead of
25509 bouncing the mail.
25510 Defaults to @samp{#f}.
25511 @end deftypevr
25512
25513 @deftypevr {@code{dovecot-configuration} parameter} file-name sendmail-path
25514 Binary to use for sending mails.
25515 Defaults to @samp{"/usr/sbin/sendmail"}.
25516 @end deftypevr
25517
25518 @deftypevr {@code{dovecot-configuration} parameter} string submission-host
25519 If non-empty, send mails via this SMTP host[:port] instead of
25520 sendmail.
25521 Defaults to @samp{""}.
25522 @end deftypevr
25523
25524 @deftypevr {@code{dovecot-configuration} parameter} string rejection-subject
25525 Subject: header to use for rejection mails. You can use the same
25526 variables as for @samp{rejection-reason} below.
25527 Defaults to @samp{"Rejected: %s"}.
25528 @end deftypevr
25529
25530 @deftypevr {@code{dovecot-configuration} parameter} string rejection-reason
25531 Human readable error message for rejection mails. You can use
25532 variables:
25533
25534 @table @code
25535 @item %n
25536 CRLF
25537 @item %r
25538 reason
25539 @item %s
25540 original subject
25541 @item %t
25542 recipient
25543 @end table
25544 Defaults to @samp{"Your message to <%t> was automatically rejected:%n%r"}.
25545 @end deftypevr
25546
25547 @deftypevr {@code{dovecot-configuration} parameter} string recipient-delimiter
25548 Delimiter character between local-part and detail in email
25549 address.
25550 Defaults to @samp{"+"}.
25551 @end deftypevr
25552
25553 @deftypevr {@code{dovecot-configuration} parameter} string lda-original-recipient-header
25554 Header where the original recipient address (SMTP's RCPT TO:
25555 address) is taken from if not available elsewhere. With dovecot-lda -a
25556 parameter overrides this. A commonly used header for this is
25557 X-Original-To.
25558 Defaults to @samp{""}.
25559 @end deftypevr
25560
25561 @deftypevr {@code{dovecot-configuration} parameter} boolean lda-mailbox-autocreate?
25562 Should saving a mail to a nonexistent mailbox automatically create
25563 it?.
25564 Defaults to @samp{#f}.
25565 @end deftypevr
25566
25567 @deftypevr {@code{dovecot-configuration} parameter} boolean lda-mailbox-autosubscribe?
25568 Should automatically created mailboxes be also automatically
25569 subscribed?.
25570 Defaults to @samp{#f}.
25571 @end deftypevr
25572
25573 @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer imap-max-line-length
25574 Maximum IMAP command line length. Some clients generate very long
25575 command lines with huge mailboxes, so you may need to raise this if you
25576 get "Too long argument" or "IMAP command line too large" errors
25577 often.
25578 Defaults to @samp{64000}.
25579 @end deftypevr
25580
25581 @deftypevr {@code{dovecot-configuration} parameter} string imap-logout-format
25582 IMAP logout format string:
25583 @table @code
25584 @item %i
25585 total number of bytes read from client
25586 @item %o
25587 total number of bytes sent to client.
25588 @end table
25589 See @file{doc/wiki/Variables.txt} for a list of all the variables you can use.
25590 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@}"}.
25591 @end deftypevr
25592
25593 @deftypevr {@code{dovecot-configuration} parameter} string imap-capability
25594 Override the IMAP CAPABILITY response. If the value begins with '+',
25595 add the given capabilities on top of the defaults (e.g.@: +XFOO XBAR).
25596 Defaults to @samp{""}.
25597 @end deftypevr
25598
25599 @deftypevr {@code{dovecot-configuration} parameter} string imap-idle-notify-interval
25600 How long to wait between "OK Still here" notifications when client
25601 is IDLEing.
25602 Defaults to @samp{"2 mins"}.
25603 @end deftypevr
25604
25605 @deftypevr {@code{dovecot-configuration} parameter} string imap-id-send
25606 ID field names and values to send to clients. Using * as the value
25607 makes Dovecot use the default value. The following fields have default
25608 values currently: name, version, os, os-version, support-url,
25609 support-email.
25610 Defaults to @samp{""}.
25611 @end deftypevr
25612
25613 @deftypevr {@code{dovecot-configuration} parameter} string imap-id-log
25614 ID fields sent by client to log. * means everything.
25615 Defaults to @samp{""}.
25616 @end deftypevr
25617
25618 @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list imap-client-workarounds
25619 Workarounds for various client bugs:
25620
25621 @table @code
25622 @item delay-newmail
25623 Send EXISTS/RECENT new mail notifications only when replying to NOOP and
25624 CHECK commands. Some clients ignore them otherwise, for example OSX
25625 Mail (<v2.1). Outlook Express breaks more badly though, without this it
25626 may show user "Message no longer in server" errors. Note that OE6
25627 still breaks even with this workaround if synchronization is set to
25628 "Headers Only".
25629
25630 @item tb-extra-mailbox-sep
25631 Thunderbird gets somehow confused with LAYOUT=fs (mbox and dbox) and
25632 adds extra @samp{/} suffixes to mailbox names. This option causes Dovecot to
25633 ignore the extra @samp{/} instead of treating it as invalid mailbox name.
25634
25635 @item tb-lsub-flags
25636 Show \Noselect flags for LSUB replies with LAYOUT=fs (e.g.@: mbox).
25637 This makes Thunderbird realize they aren't selectable and show them
25638 greyed out, instead of only later giving "not selectable" popup error.
25639 @end table
25640 Defaults to @samp{()}.
25641 @end deftypevr
25642
25643 @deftypevr {@code{dovecot-configuration} parameter} string imap-urlauth-host
25644 Host allowed in URLAUTH URLs sent by client. "*" allows all.
25645 Defaults to @samp{""}.
25646 @end deftypevr
25647
25648
25649 Whew! Lots of configuration options. The nice thing about it though is
25650 that Guix has a complete interface to Dovecot's configuration
25651 language. This allows not only a nice way to declare configurations,
25652 but also offers reflective capabilities as well: users can write code to
25653 inspect and transform configurations from within Scheme.
25654
25655 However, it could be that you just want to get a @code{dovecot.conf} up
25656 and running. In that case, you can pass an
25657 @code{opaque-dovecot-configuration} as the @code{#:config} parameter to
25658 @code{dovecot-service}. As its name indicates, an opaque configuration
25659 does not have easy reflective capabilities.
25660
25661 Available @code{opaque-dovecot-configuration} fields are:
25662
25663 @deftypevr {@code{opaque-dovecot-configuration} parameter} package dovecot
25664 The dovecot package.
25665 @end deftypevr
25666
25667 @deftypevr {@code{opaque-dovecot-configuration} parameter} string string
25668 The contents of the @code{dovecot.conf}, as a string.
25669 @end deftypevr
25670
25671 For example, if your @code{dovecot.conf} is just the empty string, you
25672 could instantiate a dovecot service like this:
25673
25674 @lisp
25675 (dovecot-service #:config
25676 (opaque-dovecot-configuration
25677 (string "")))
25678 @end lisp
25679
25680 @subsubheading OpenSMTPD Service
25681
25682 @deffn {Scheme Variable} opensmtpd-service-type
25683 This is the type of the @uref{https://www.opensmtpd.org, OpenSMTPD}
25684 service, whose value should be an @code{opensmtpd-configuration} object
25685 as in this example:
25686
25687 @lisp
25688 (service opensmtpd-service-type
25689 (opensmtpd-configuration
25690 (config-file (local-file "./my-smtpd.conf"))))
25691 @end lisp
25692 @end deffn
25693
25694 @deftp {Data Type} opensmtpd-configuration
25695 Data type representing the configuration of opensmtpd.
25696
25697 @table @asis
25698 @item @code{package} (default: @var{opensmtpd})
25699 Package object of the OpenSMTPD SMTP server.
25700
25701 @item @code{config-file} (default: @code{%default-opensmtpd-config-file})
25702 File-like object of the OpenSMTPD configuration file to use. By default
25703 it listens on the loopback network interface, and allows for mail from
25704 users and daemons on the local machine, as well as permitting email to
25705 remote servers. Run @command{man smtpd.conf} for more information.
25706
25707 @item @code{setgid-commands?} (default: @code{#t})
25708 Make the following commands setgid to @code{smtpq} so they can be
25709 executed: @command{smtpctl}, @command{sendmail}, @command{send-mail},
25710 @command{makemap}, @command{mailq}, and @command{newaliases}.
25711 @xref{Setuid Programs}, for more information on setgid programs.
25712 @end table
25713 @end deftp
25714
25715 @subsubheading Exim Service
25716
25717 @cindex mail transfer agent (MTA)
25718 @cindex MTA (mail transfer agent)
25719 @cindex SMTP
25720
25721 @deffn {Scheme Variable} exim-service-type
25722 This is the type of the @uref{https://exim.org, Exim} mail transfer
25723 agent (MTA), whose value should be an @code{exim-configuration} object
25724 as in this example:
25725
25726 @lisp
25727 (service exim-service-type
25728 (exim-configuration
25729 (config-file (local-file "./my-exim.conf"))))
25730 @end lisp
25731 @end deffn
25732
25733 In order to use an @code{exim-service-type} service you must also have a
25734 @code{mail-aliases-service-type} service present in your
25735 @code{operating-system} (even if it has no aliases).
25736
25737 @deftp {Data Type} exim-configuration
25738 Data type representing the configuration of exim.
25739
25740 @table @asis
25741 @item @code{package} (default: @var{exim})
25742 Package object of the Exim server.
25743
25744 @item @code{config-file} (default: @code{#f})
25745 File-like object of the Exim configuration file to use. If its value is
25746 @code{#f} then use the default configuration file from the package
25747 provided in @code{package}. The resulting configuration file is loaded
25748 after setting the @code{exim_user} and @code{exim_group} configuration
25749 variables.
25750
25751 @end table
25752 @end deftp
25753
25754 @subsubheading Getmail service
25755
25756 @cindex IMAP
25757 @cindex POP
25758
25759 @deffn {Scheme Variable} getmail-service-type
25760 This is the type of the @uref{http://pyropus.ca/software/getmail/, Getmail}
25761 mail retriever, whose value should be an @code{getmail-configuration}.
25762 @end deffn
25763
25764 Available @code{getmail-configuration} fields are:
25765
25766 @deftypevr {@code{getmail-configuration} parameter} symbol name
25767 A symbol to identify the getmail service.
25768
25769 Defaults to @samp{"unset"}.
25770
25771 @end deftypevr
25772
25773 @deftypevr {@code{getmail-configuration} parameter} package package
25774 The getmail package to use.
25775
25776 @end deftypevr
25777
25778 @deftypevr {@code{getmail-configuration} parameter} string user
25779 The user to run getmail as.
25780
25781 Defaults to @samp{"getmail"}.
25782
25783 @end deftypevr
25784
25785 @deftypevr {@code{getmail-configuration} parameter} string group
25786 The group to run getmail as.
25787
25788 Defaults to @samp{"getmail"}.
25789
25790 @end deftypevr
25791
25792 @deftypevr {@code{getmail-configuration} parameter} string directory
25793 The getmail directory to use.
25794
25795 Defaults to @samp{"/var/lib/getmail/default"}.
25796
25797 @end deftypevr
25798
25799 @deftypevr {@code{getmail-configuration} parameter} getmail-configuration-file rcfile
25800 The getmail configuration file to use.
25801
25802 Available @code{getmail-configuration-file} fields are:
25803
25804 @deftypevr {@code{getmail-configuration-file} parameter} getmail-retriever-configuration retriever
25805 What mail account to retrieve mail from, and how to access that account.
25806
25807 Available @code{getmail-retriever-configuration} fields are:
25808
25809 @deftypevr {@code{getmail-retriever-configuration} parameter} string type
25810 The type of mail retriever to use. Valid values include @samp{passwd}
25811 and @samp{static}.
25812
25813 Defaults to @samp{"SimpleIMAPSSLRetriever"}.
25814
25815 @end deftypevr
25816
25817 @deftypevr {@code{getmail-retriever-configuration} parameter} string server
25818 Username to login to the mail server with.
25819
25820 Defaults to @samp{unset}.
25821
25822 @end deftypevr
25823
25824 @deftypevr {@code{getmail-retriever-configuration} parameter} string username
25825 Username to login to the mail server with.
25826
25827 Defaults to @samp{unset}.
25828
25829 @end deftypevr
25830
25831 @deftypevr {@code{getmail-retriever-configuration} parameter} non-negative-integer port
25832 Port number to connect to.
25833
25834 Defaults to @samp{#f}.
25835
25836 @end deftypevr
25837
25838 @deftypevr {@code{getmail-retriever-configuration} parameter} string password
25839 Override fields from passwd.
25840
25841 Defaults to @samp{""}.
25842
25843 @end deftypevr
25844
25845 @deftypevr {@code{getmail-retriever-configuration} parameter} list password-command
25846 Override fields from passwd.
25847
25848 Defaults to @samp{()}.
25849
25850 @end deftypevr
25851
25852 @deftypevr {@code{getmail-retriever-configuration} parameter} string keyfile
25853 PEM-formatted key file to use for the TLS negotiation.
25854
25855 Defaults to @samp{""}.
25856
25857 @end deftypevr
25858
25859 @deftypevr {@code{getmail-retriever-configuration} parameter} string certfile
25860 PEM-formatted certificate file to use for the TLS negotiation.
25861
25862 Defaults to @samp{""}.
25863
25864 @end deftypevr
25865
25866 @deftypevr {@code{getmail-retriever-configuration} parameter} string ca-certs
25867 CA certificates to use.
25868
25869 Defaults to @samp{""}.
25870
25871 @end deftypevr
25872
25873 @deftypevr {@code{getmail-retriever-configuration} parameter} parameter-alist extra-parameters
25874 Extra retriever parameters.
25875
25876 Defaults to @samp{()}.
25877
25878 @end deftypevr
25879
25880 @end deftypevr
25881
25882 @deftypevr {@code{getmail-configuration-file} parameter} getmail-destination-configuration destination
25883 What to do with retrieved messages.
25884
25885 Available @code{getmail-destination-configuration} fields are:
25886
25887 @deftypevr {@code{getmail-destination-configuration} parameter} string type
25888 The type of mail destination. Valid values include @samp{Maildir},
25889 @samp{Mboxrd} and @samp{MDA_external}.
25890
25891 Defaults to @samp{unset}.
25892
25893 @end deftypevr
25894
25895 @deftypevr {@code{getmail-destination-configuration} parameter} string-or-filelike path
25896 The path option for the mail destination. The behaviour depends on the
25897 chosen type.
25898
25899 Defaults to @samp{""}.
25900
25901 @end deftypevr
25902
25903 @deftypevr {@code{getmail-destination-configuration} parameter} parameter-alist extra-parameters
25904 Extra destination parameters
25905
25906 Defaults to @samp{()}.
25907
25908 @end deftypevr
25909
25910 @end deftypevr
25911
25912 @deftypevr {@code{getmail-configuration-file} parameter} getmail-options-configuration options
25913 Configure getmail.
25914
25915 Available @code{getmail-options-configuration} fields are:
25916
25917 @deftypevr {@code{getmail-options-configuration} parameter} non-negative-integer verbose
25918 If set to @samp{0}, getmail will only print warnings and errors. A
25919 value of @samp{1} means that messages will be printed about retrieving
25920 and deleting messages. If set to @samp{2}, getmail will print messages
25921 about each of its actions.
25922
25923 Defaults to @samp{1}.
25924
25925 @end deftypevr
25926
25927 @deftypevr {@code{getmail-options-configuration} parameter} boolean read-all
25928 If true, getmail will retrieve all available messages. Otherwise it
25929 will only retrieve messages it hasn't seen previously.
25930
25931 Defaults to @samp{#t}.
25932
25933 @end deftypevr
25934
25935 @deftypevr {@code{getmail-options-configuration} parameter} boolean delete
25936 If set to true, messages will be deleted from the server after
25937 retrieving and successfully delivering them. Otherwise, messages will
25938 be left on the server.
25939
25940 Defaults to @samp{#f}.
25941
25942 @end deftypevr
25943
25944 @deftypevr {@code{getmail-options-configuration} parameter} non-negative-integer delete-after
25945 Getmail will delete messages this number of days after seeing them, if
25946 they have been delivered. This means messages will be left on the
25947 server this number of days after delivering them. A value of @samp{0}
25948 disabled this feature.
25949
25950 Defaults to @samp{0}.
25951
25952 @end deftypevr
25953
25954 @deftypevr {@code{getmail-options-configuration} parameter} non-negative-integer delete-bigger-than
25955 Delete messages larger than this of bytes after retrieving them, even if
25956 the delete and delete-after options are disabled. A value of @samp{0}
25957 disables this feature.
25958
25959 Defaults to @samp{0}.
25960
25961 @end deftypevr
25962
25963 @deftypevr {@code{getmail-options-configuration} parameter} non-negative-integer max-bytes-per-session
25964 Retrieve messages totalling up to this number of bytes before closing
25965 the session with the server. A value of @samp{0} disables this feature.
25966
25967 Defaults to @samp{0}.
25968
25969 @end deftypevr
25970
25971 @deftypevr {@code{getmail-options-configuration} parameter} non-negative-integer max-message-size
25972 Don't retrieve messages larger than this number of bytes. A value of
25973 @samp{0} disables this feature.
25974
25975 Defaults to @samp{0}.
25976
25977 @end deftypevr
25978
25979 @deftypevr {@code{getmail-options-configuration} parameter} boolean delivered-to
25980 If true, getmail will add a Delivered-To header to messages.
25981
25982 Defaults to @samp{#t}.
25983
25984 @end deftypevr
25985
25986 @deftypevr {@code{getmail-options-configuration} parameter} boolean received
25987 If set, getmail adds a Received header to the messages.
25988
25989 Defaults to @samp{#t}.
25990
25991 @end deftypevr
25992
25993 @deftypevr {@code{getmail-options-configuration} parameter} string message-log
25994 Getmail will record a log of its actions to the named file. A value of
25995 @samp{""} disables this feature.
25996
25997 Defaults to @samp{""}.
25998
25999 @end deftypevr
26000
26001 @deftypevr {@code{getmail-options-configuration} parameter} boolean message-log-syslog
26002 If true, getmail will record a log of its actions using the system
26003 logger.
26004
26005 Defaults to @samp{#f}.
26006
26007 @end deftypevr
26008
26009 @deftypevr {@code{getmail-options-configuration} parameter} boolean message-log-verbose
26010 If true, getmail will log information about messages not retrieved and
26011 the reason for not retrieving them, as well as starting and ending
26012 information lines.
26013
26014 Defaults to @samp{#f}.
26015
26016 @end deftypevr
26017
26018 @deftypevr {@code{getmail-options-configuration} parameter} parameter-alist extra-parameters
26019 Extra options to include.
26020
26021 Defaults to @samp{()}.
26022
26023 @end deftypevr
26024
26025 @end deftypevr
26026
26027 @end deftypevr
26028
26029 @deftypevr {@code{getmail-configuration} parameter} list idle
26030 A list of mailboxes that getmail should wait on the server for new mail
26031 notifications. This depends on the server supporting the IDLE
26032 extension.
26033
26034 Defaults to @samp{()}.
26035
26036 @end deftypevr
26037
26038 @deftypevr {@code{getmail-configuration} parameter} list environment-variables
26039 Environment variables to set for getmail.
26040
26041 Defaults to @samp{()}.
26042
26043 @end deftypevr
26044
26045 @subsubheading Mail Aliases Service
26046
26047 @cindex email aliases
26048 @cindex aliases, for email addresses
26049
26050 @deffn {Scheme Variable} mail-aliases-service-type
26051 This is the type of the service which provides @code{/etc/aliases},
26052 specifying how to deliver mail to users on this system.
26053
26054 @lisp
26055 (service mail-aliases-service-type
26056 '(("postmaster" "bob")
26057 ("bob" "bob@@example.com" "bob@@example2.com")))
26058 @end lisp
26059 @end deffn
26060
26061 The configuration for a @code{mail-aliases-service-type} service is an
26062 association list denoting how to deliver mail that comes to this
26063 system. Each entry is of the form @code{(alias addresses ...)}, with
26064 @code{alias} specifying the local alias and @code{addresses} specifying
26065 where to deliver this user's mail.
26066
26067 The aliases aren't required to exist as users on the local system. In
26068 the above example, there doesn't need to be a @code{postmaster} entry in
26069 the @code{operating-system}'s @code{user-accounts} in order to deliver
26070 the @code{postmaster} mail to @code{bob} (which subsequently would
26071 deliver mail to @code{bob@@example.com} and @code{bob@@example2.com}).
26072
26073 @subsubheading GNU Mailutils IMAP4 Daemon
26074 @cindex GNU Mailutils IMAP4 Daemon
26075
26076 @deffn {Scheme Variable} imap4d-service-type
26077 This is the type of the GNU Mailutils IMAP4 Daemon (@pxref{imap4d,,,
26078 mailutils, GNU Mailutils Manual}), whose value should be an
26079 @code{imap4d-configuration} object as in this example:
26080
26081 @lisp
26082 (service imap4d-service-type
26083 (imap4d-configuration
26084 (config-file (local-file "imap4d.conf"))))
26085 @end lisp
26086 @end deffn
26087
26088 @deftp {Data Type} imap4d-configuration
26089 Data type representing the configuration of @command{imap4d}.
26090
26091 @table @asis
26092 @item @code{package} (default: @code{mailutils})
26093 The package that provides @command{imap4d}.
26094
26095 @item @code{config-file} (default: @code{%default-imap4d-config-file})
26096 File-like object of the configuration file to use, by default it will listen
26097 on TCP port 143 of @code{localhost}. @xref{Conf-imap4d,,, mailutils, GNU
26098 Mailutils Manual}, for details.
26099
26100 @end table
26101 @end deftp
26102
26103 @subsubheading Radicale Service
26104 @cindex CalDAV
26105 @cindex CardDAV
26106
26107 @deffn {Scheme Variable} radicale-service-type
26108 This is the type of the @uref{https://radicale.org, Radicale} CalDAV/CardDAV
26109 server whose value should be a @code{radicale-configuration}.
26110 @end deffn
26111
26112 @deftp {Data Type} radicale-configuration
26113 Data type representing the configuration of @command{radicale}.
26114
26115 @table @asis
26116 @item @code{package} (default: @code{radicale})
26117 The package that provides @command{radicale}.
26118
26119 @item @code{config-file} (default: @code{%default-radicale-config-file})
26120 File-like object of the configuration file to use, by default it will listen
26121 on TCP port 5232 of @code{localhost} and use the @code{htpasswd} file at
26122 @file{/var/lib/radicale/users} with no (@code{plain}) encryption.
26123
26124 @end table
26125 @end deftp
26126
26127 @node Messaging Services
26128 @subsection Messaging Services
26129
26130 @cindex messaging
26131 @cindex jabber
26132 @cindex XMPP
26133 The @code{(gnu services messaging)} module provides Guix service
26134 definitions for messaging services. Currently it provides the following
26135 services:
26136
26137 @subsubheading Prosody Service
26138
26139 @deffn {Scheme Variable} prosody-service-type
26140 This is the type for the @uref{https://prosody.im, Prosody XMPP
26141 communication server}. Its value must be a @code{prosody-configuration}
26142 record as in this example:
26143
26144 @lisp
26145 (service prosody-service-type
26146 (prosody-configuration
26147 (modules-enabled (cons* "groups" "mam" %default-modules-enabled))
26148 (int-components
26149 (list
26150 (int-component-configuration
26151 (hostname "conference.example.net")
26152 (plugin "muc")
26153 (mod-muc (mod-muc-configuration)))))
26154 (virtualhosts
26155 (list
26156 (virtualhost-configuration
26157 (domain "example.net"))))))
26158 @end lisp
26159
26160 See below for details about @code{prosody-configuration}.
26161
26162 @end deffn
26163
26164 By default, Prosody does not need much configuration. Only one
26165 @code{virtualhosts} field is needed: it specifies the domain you wish
26166 Prosody to serve.
26167
26168 You can perform various sanity checks on the generated configuration
26169 with the @code{prosodyctl check} command.
26170
26171 Prosodyctl will also help you to import certificates from the
26172 @code{letsencrypt} directory so that the @code{prosody} user can access
26173 them. See @url{https://prosody.im/doc/letsencrypt}.
26174
26175 @example
26176 prosodyctl --root cert import /etc/letsencrypt/live
26177 @end example
26178
26179 The available configuration parameters follow. Each parameter
26180 definition is preceded by its type; for example, @samp{string-list foo}
26181 indicates that the @code{foo} parameter should be specified as a list of
26182 strings. Types starting with @code{maybe-} denote parameters that won't
26183 show up in @code{prosody.cfg.lua} when their value is left unspecified.
26184
26185 There is also a way to specify the configuration as a string, if you
26186 have an old @code{prosody.cfg.lua} file that you want to port over from
26187 some other system; see the end for more details.
26188
26189 The @code{file-object} type designates either a file-like object
26190 (@pxref{G-Expressions, file-like objects}) or a file name.
26191
26192 @c The following documentation was initially generated by
26193 @c (generate-documentation) in (gnu services messaging). Manually maintained
26194 @c documentation is better, so we shouldn't hesitate to edit below as
26195 @c needed. However if the change you want to make to this documentation
26196 @c can be done in an automated way, it's probably easier to change
26197 @c (generate-documentation) than to make it below and have to deal with
26198 @c the churn as Prosody updates.
26199
26200 Available @code{prosody-configuration} fields are:
26201
26202 @deftypevr {@code{prosody-configuration} parameter} package prosody
26203 The Prosody package.
26204 @end deftypevr
26205
26206 @deftypevr {@code{prosody-configuration} parameter} file-name data-path
26207 Location of the Prosody data storage directory. See
26208 @url{https://prosody.im/doc/configure}.
26209 Defaults to @samp{"/var/lib/prosody"}.
26210 @end deftypevr
26211
26212 @deftypevr {@code{prosody-configuration} parameter} file-object-list plugin-paths
26213 Additional plugin directories. They are searched in all the specified
26214 paths in order. See @url{https://prosody.im/doc/plugins_directory}.
26215 Defaults to @samp{()}.
26216 @end deftypevr
26217
26218 @deftypevr {@code{prosody-configuration} parameter} file-name certificates
26219 Every virtual host and component needs a certificate so that clients and
26220 servers can securely verify its identity. Prosody will automatically load
26221 certificates/keys from the directory specified here.
26222 Defaults to @samp{"/etc/prosody/certs"}.
26223 @end deftypevr
26224
26225 @deftypevr {@code{prosody-configuration} parameter} string-list admins
26226 This is a list of accounts that are admins for the server. Note that you
26227 must create the accounts separately. See @url{https://prosody.im/doc/admins} and
26228 @url{https://prosody.im/doc/creating_accounts}.
26229 Example: @code{(admins '("user1@@example.com" "user2@@example.net"))}
26230 Defaults to @samp{()}.
26231 @end deftypevr
26232
26233 @deftypevr {@code{prosody-configuration} parameter} boolean use-libevent?
26234 Enable use of libevent for better performance under high load. See
26235 @url{https://prosody.im/doc/libevent}.
26236 Defaults to @samp{#f}.
26237 @end deftypevr
26238
26239 @deftypevr {@code{prosody-configuration} parameter} module-list modules-enabled
26240 This is the list of modules Prosody will load on startup. It looks for
26241 @code{mod_modulename.lua} in the plugins folder, so make sure that exists too.
26242 Documentation on modules can be found at:
26243 @url{https://prosody.im/doc/modules}.
26244 Defaults to @samp{("roster" "saslauth" "tls" "dialback" "disco" "carbons" "private" "blocklist" "vcard" "version" "uptime" "time" "ping" "pep" "register" "admin_adhoc")}.
26245 @end deftypevr
26246
26247 @deftypevr {@code{prosody-configuration} parameter} string-list modules-disabled
26248 @samp{"offline"}, @samp{"c2s"} and @samp{"s2s"} are auto-loaded, but
26249 should you want to disable them then add them to this list.
26250 Defaults to @samp{()}.
26251 @end deftypevr
26252
26253 @deftypevr {@code{prosody-configuration} parameter} file-object groups-file
26254 Path to a text file where the shared groups are defined. If this path is
26255 empty then @samp{mod_groups} does nothing. See
26256 @url{https://prosody.im/doc/modules/mod_groups}.
26257 Defaults to @samp{"/var/lib/prosody/sharedgroups.txt"}.
26258 @end deftypevr
26259
26260 @deftypevr {@code{prosody-configuration} parameter} boolean allow-registration?
26261 Disable account creation by default, for security. See
26262 @url{https://prosody.im/doc/creating_accounts}.
26263 Defaults to @samp{#f}.
26264 @end deftypevr
26265
26266 @deftypevr {@code{prosody-configuration} parameter} maybe-ssl-configuration ssl
26267 These are the SSL/TLS-related settings. Most of them are disabled so to
26268 use Prosody's defaults. If you do not completely understand these options, do
26269 not add them to your config, it is easy to lower the security of your server
26270 using them. See @url{https://prosody.im/doc/advanced_ssl_config}.
26271
26272 Available @code{ssl-configuration} fields are:
26273
26274 @deftypevr {@code{ssl-configuration} parameter} maybe-string protocol
26275 This determines what handshake to use.
26276 @end deftypevr
26277
26278 @deftypevr {@code{ssl-configuration} parameter} maybe-file-name key
26279 Path to your private key file.
26280 @end deftypevr
26281
26282 @deftypevr {@code{ssl-configuration} parameter} maybe-file-name certificate
26283 Path to your certificate file.
26284 @end deftypevr
26285
26286 @deftypevr {@code{ssl-configuration} parameter} file-object capath
26287 Path to directory containing root certificates that you wish Prosody to
26288 trust when verifying the certificates of remote servers.
26289 Defaults to @samp{"/etc/ssl/certs"}.
26290 @end deftypevr
26291
26292 @deftypevr {@code{ssl-configuration} parameter} maybe-file-object cafile
26293 Path to a file containing root certificates that you wish Prosody to trust.
26294 Similar to @code{capath} but with all certificates concatenated together.
26295 @end deftypevr
26296
26297 @deftypevr {@code{ssl-configuration} parameter} maybe-string-list verify
26298 A list of verification options (these mostly map to OpenSSL's
26299 @code{set_verify()} flags).
26300 @end deftypevr
26301
26302 @deftypevr {@code{ssl-configuration} parameter} maybe-string-list options
26303 A list of general options relating to SSL/TLS@. These map to OpenSSL's
26304 @code{set_options()}. For a full list of options available in LuaSec, see the
26305 LuaSec source.
26306 @end deftypevr
26307
26308 @deftypevr {@code{ssl-configuration} parameter} maybe-non-negative-integer depth
26309 How long a chain of certificate authorities to check when looking for a
26310 trusted root certificate.
26311 @end deftypevr
26312
26313 @deftypevr {@code{ssl-configuration} parameter} maybe-string ciphers
26314 An OpenSSL cipher string. This selects what ciphers Prosody will offer to
26315 clients, and in what order.
26316 @end deftypevr
26317
26318 @deftypevr {@code{ssl-configuration} parameter} maybe-file-name dhparam
26319 A path to a file containing parameters for Diffie-Hellman key exchange. You
26320 can create such a file with:
26321 @code{openssl dhparam -out /etc/prosody/certs/dh-2048.pem 2048}
26322 @end deftypevr
26323
26324 @deftypevr {@code{ssl-configuration} parameter} maybe-string curve
26325 Curve for Elliptic curve Diffie-Hellman. Prosody's default is
26326 @samp{"secp384r1"}.
26327 @end deftypevr
26328
26329 @deftypevr {@code{ssl-configuration} parameter} maybe-string-list verifyext
26330 A list of ``extra'' verification options.
26331 @end deftypevr
26332
26333 @deftypevr {@code{ssl-configuration} parameter} maybe-string password
26334 Password for encrypted private keys.
26335 @end deftypevr
26336
26337 @end deftypevr
26338
26339 @deftypevr {@code{prosody-configuration} parameter} boolean c2s-require-encryption?
26340 Whether to force all client-to-server connections to be encrypted or not.
26341 See @url{https://prosody.im/doc/modules/mod_tls}.
26342 Defaults to @samp{#f}.
26343 @end deftypevr
26344
26345 @deftypevr {@code{prosody-configuration} parameter} string-list disable-sasl-mechanisms
26346 Set of mechanisms that will never be offered. See
26347 @url{https://prosody.im/doc/modules/mod_saslauth}.
26348 Defaults to @samp{("DIGEST-MD5")}.
26349 @end deftypevr
26350
26351 @deftypevr {@code{prosody-configuration} parameter} boolean s2s-require-encryption?
26352 Whether to force all server-to-server connections to be encrypted or not.
26353 See @url{https://prosody.im/doc/modules/mod_tls}.
26354 Defaults to @samp{#f}.
26355 @end deftypevr
26356
26357 @deftypevr {@code{prosody-configuration} parameter} boolean s2s-secure-auth?
26358 Whether to require encryption and certificate authentication. This
26359 provides ideal security, but requires servers you communicate with to support
26360 encryption AND present valid, trusted certificates. See
26361 @url{https://prosody.im/doc/s2s#security}.
26362 Defaults to @samp{#f}.
26363 @end deftypevr
26364
26365 @deftypevr {@code{prosody-configuration} parameter} string-list s2s-insecure-domains
26366 Many servers don't support encryption or have invalid or self-signed
26367 certificates. You can list domains here that will not be required to
26368 authenticate using certificates. They will be authenticated using DNS@. See
26369 @url{https://prosody.im/doc/s2s#security}.
26370 Defaults to @samp{()}.
26371 @end deftypevr
26372
26373 @deftypevr {@code{prosody-configuration} parameter} string-list s2s-secure-domains
26374 Even if you leave @code{s2s-secure-auth?} disabled, you can still require
26375 valid certificates for some domains by specifying a list here. See
26376 @url{https://prosody.im/doc/s2s#security}.
26377 Defaults to @samp{()}.
26378 @end deftypevr
26379
26380 @deftypevr {@code{prosody-configuration} parameter} string authentication
26381 Select the authentication backend to use. The default provider stores
26382 passwords in plaintext and uses Prosody's configured data storage to store the
26383 authentication data. If you do not trust your server please see
26384 @url{https://prosody.im/doc/modules/mod_auth_internal_hashed} for information
26385 about using the hashed backend. See also
26386 @url{https://prosody.im/doc/authentication}
26387 Defaults to @samp{"internal_plain"}.
26388 @end deftypevr
26389
26390 @deftypevr {@code{prosody-configuration} parameter} maybe-string log
26391 Set logging options. Advanced logging configuration is not yet supported
26392 by the Prosody service. See @url{https://prosody.im/doc/logging}.
26393 Defaults to @samp{"*syslog"}.
26394 @end deftypevr
26395
26396 @deftypevr {@code{prosody-configuration} parameter} file-name pidfile
26397 File to write pid in. See @url{https://prosody.im/doc/modules/mod_posix}.
26398 Defaults to @samp{"/var/run/prosody/prosody.pid"}.
26399 @end deftypevr
26400
26401 @deftypevr {@code{prosody-configuration} parameter} maybe-non-negative-integer http-max-content-size
26402 Maximum allowed size of the HTTP body (in bytes).
26403 @end deftypevr
26404
26405 @deftypevr {@code{prosody-configuration} parameter} maybe-string http-external-url
26406 Some modules expose their own URL in various ways. This URL is built
26407 from the protocol, host and port used. If Prosody sits behind a proxy, the
26408 public URL will be @code{http-external-url} instead. See
26409 @url{https://prosody.im/doc/http#external_url}.
26410 @end deftypevr
26411
26412 @deftypevr {@code{prosody-configuration} parameter} virtualhost-configuration-list virtualhosts
26413 A host in Prosody is a domain on which user accounts can be created. For
26414 example if you want your users to have addresses like
26415 @samp{"john.smith@@example.com"} then you need to add a host
26416 @samp{"example.com"}. All options in this list will apply only to this host.
26417
26418 @quotation Note
26419 The name @emph{virtual} host is used in configuration to avoid confusion with
26420 the actual physical host that Prosody is installed on. A single Prosody
26421 instance can serve many domains, each one defined as a VirtualHost entry in
26422 Prosody's configuration. Conversely a server that hosts a single domain would
26423 have just one VirtualHost entry.
26424
26425 See @url{https://prosody.im/doc/configure#virtual_host_settings}.
26426 @end quotation
26427
26428 Available @code{virtualhost-configuration} fields are:
26429
26430 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:
26431 @deftypevr {@code{virtualhost-configuration} parameter} string domain
26432 Domain you wish Prosody to serve.
26433 @end deftypevr
26434
26435 @end deftypevr
26436
26437 @deftypevr {@code{prosody-configuration} parameter} int-component-configuration-list int-components
26438 Components are extra services on a server which are available to clients,
26439 usually on a subdomain of the main server (such as
26440 @samp{"mycomponent.example.com"}). Example components might be chatroom
26441 servers, user directories, or gateways to other protocols.
26442
26443 Internal components are implemented with Prosody-specific plugins. To add an
26444 internal component, you simply fill the hostname field, and the plugin you wish
26445 to use for the component.
26446
26447 See @url{https://prosody.im/doc/components}.
26448 Defaults to @samp{()}.
26449
26450 Available @code{int-component-configuration} fields are:
26451
26452 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:
26453 @deftypevr {@code{int-component-configuration} parameter} string hostname
26454 Hostname of the component.
26455 @end deftypevr
26456
26457 @deftypevr {@code{int-component-configuration} parameter} string plugin
26458 Plugin you wish to use for the component.
26459 @end deftypevr
26460
26461 @deftypevr {@code{int-component-configuration} parameter} maybe-mod-muc-configuration mod-muc
26462 Multi-user chat (MUC) is Prosody's module for allowing you to create
26463 hosted chatrooms/conferences for XMPP users.
26464
26465 General information on setting up and using multi-user chatrooms can be found
26466 in the ``Chatrooms'' documentation (@url{https://prosody.im/doc/chatrooms}),
26467 which you should read if you are new to XMPP chatrooms.
26468
26469 See also @url{https://prosody.im/doc/modules/mod_muc}.
26470
26471 Available @code{mod-muc-configuration} fields are:
26472
26473 @deftypevr {@code{mod-muc-configuration} parameter} string name
26474 The name to return in service discovery responses.
26475 Defaults to @samp{"Prosody Chatrooms"}.
26476 @end deftypevr
26477
26478 @deftypevr {@code{mod-muc-configuration} parameter} string-or-boolean restrict-room-creation
26479 If @samp{#t}, this will only allow admins to create new chatrooms.
26480 Otherwise anyone can create a room. The value @samp{"local"} restricts room
26481 creation to users on the service's parent domain. E.g.@: @samp{user@@example.com}
26482 can create rooms on @samp{rooms.example.com}. The value @samp{"admin"}
26483 restricts to service administrators only.
26484 Defaults to @samp{#f}.
26485 @end deftypevr
26486
26487 @deftypevr {@code{mod-muc-configuration} parameter} non-negative-integer max-history-messages
26488 Maximum number of history messages that will be sent to the member that has
26489 just joined the room.
26490 Defaults to @samp{20}.
26491 @end deftypevr
26492
26493 @end deftypevr
26494
26495 @end deftypevr
26496
26497 @deftypevr {@code{prosody-configuration} parameter} ext-component-configuration-list ext-components
26498 External components use XEP-0114, which most standalone components
26499 support. To add an external component, you simply fill the hostname field. See
26500 @url{https://prosody.im/doc/components}.
26501 Defaults to @samp{()}.
26502
26503 Available @code{ext-component-configuration} fields are:
26504
26505 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:
26506 @deftypevr {@code{ext-component-configuration} parameter} string component-secret
26507 Password which the component will use to log in.
26508 @end deftypevr
26509
26510 @deftypevr {@code{ext-component-configuration} parameter} string hostname
26511 Hostname of the component.
26512 @end deftypevr
26513
26514 @end deftypevr
26515
26516 @deftypevr {@code{prosody-configuration} parameter} non-negative-integer-list component-ports
26517 Port(s) Prosody listens on for component connections.
26518 Defaults to @samp{(5347)}.
26519 @end deftypevr
26520
26521 @deftypevr {@code{prosody-configuration} parameter} string component-interface
26522 Interface Prosody listens on for component connections.
26523 Defaults to @samp{"127.0.0.1"}.
26524 @end deftypevr
26525
26526 @deftypevr {@code{prosody-configuration} parameter} maybe-raw-content raw-content
26527 Raw content that will be added to the configuration file.
26528 @end deftypevr
26529
26530 It could be that you just want to get a @code{prosody.cfg.lua}
26531 up and running. In that case, you can pass an
26532 @code{opaque-prosody-configuration} record as the value of
26533 @code{prosody-service-type}. As its name indicates, an opaque configuration
26534 does not have easy reflective capabilities.
26535 Available @code{opaque-prosody-configuration} fields are:
26536
26537 @deftypevr {@code{opaque-prosody-configuration} parameter} package prosody
26538 The prosody package.
26539 @end deftypevr
26540
26541 @deftypevr {@code{opaque-prosody-configuration} parameter} string prosody.cfg.lua
26542 The contents of the @code{prosody.cfg.lua} to use.
26543 @end deftypevr
26544
26545 For example, if your @code{prosody.cfg.lua} is just the empty
26546 string, you could instantiate a prosody service like this:
26547
26548 @lisp
26549 (service prosody-service-type
26550 (opaque-prosody-configuration
26551 (prosody.cfg.lua "")))
26552 @end lisp
26553
26554 @c end of Prosody auto-generated documentation
26555
26556 @subsubheading BitlBee Service
26557
26558 @cindex IRC (Internet Relay Chat)
26559 @cindex IRC gateway
26560 @url{https://bitlbee.org,BitlBee} is a gateway that provides an IRC
26561 interface to a variety of messaging protocols such as XMPP.
26562
26563 @defvr {Scheme Variable} bitlbee-service-type
26564 This is the service type for the @url{https://bitlbee.org,BitlBee} IRC
26565 gateway daemon. Its value is a @code{bitlbee-configuration} (see
26566 below).
26567
26568 To have BitlBee listen on port 6667 on localhost, add this line to your
26569 services:
26570
26571 @lisp
26572 (service bitlbee-service-type)
26573 @end lisp
26574 @end defvr
26575
26576 @deftp {Data Type} bitlbee-configuration
26577 This is the configuration for BitlBee, with the following fields:
26578
26579 @table @asis
26580 @item @code{interface} (default: @code{"127.0.0.1"})
26581 @itemx @code{port} (default: @code{6667})
26582 Listen on the network interface corresponding to the IP address
26583 specified in @var{interface}, on @var{port}.
26584
26585 When @var{interface} is @code{127.0.0.1}, only local clients can
26586 connect; when it is @code{0.0.0.0}, connections can come from any
26587 networking interface.
26588
26589 @item @code{bitlbee} (default: @code{bitlbee})
26590 The BitlBee package to use.
26591
26592 @item @code{plugins} (default: @code{'()})
26593 List of plugin packages to use---e.g., @code{bitlbee-discord}.
26594
26595 @item @code{extra-settings} (default: @code{""})
26596 Configuration snippet added as-is to the BitlBee configuration file.
26597 @end table
26598 @end deftp
26599
26600 @subsubheading Quassel Service
26601
26602 @cindex IRC (Internet Relay Chat)
26603 @url{https://quassel-irc.org/,Quassel} is a distributed IRC client,
26604 meaning that one or more clients can attach to and detach from the
26605 central core.
26606
26607 @defvr {Scheme Variable} quassel-service-type
26608 This is the service type for the @url{https://quassel-irc.org/,Quassel}
26609 IRC backend daemon. Its value is a @code{quassel-configuration}
26610 (see below).
26611 @end defvr
26612
26613 @deftp {Data Type} quassel-configuration
26614 This is the configuration for Quassel, with the following fields:
26615
26616 @table @asis
26617 @item @code{quassel} (default: @code{quassel})
26618 The Quassel package to use.
26619
26620 @item @code{interface} (default: @code{"::,0.0.0.0"})
26621 @item @code{port} (default: @code{4242})
26622 Listen on the network interface(s) corresponding to the IPv4 or IPv6
26623 interfaces specified in the comma delimited @var{interface}, on
26624 @var{port}.
26625
26626 @item @code{loglevel} (default: @code{"Info"})
26627 The level of logging desired. Accepted values are Debug, Info, Warning
26628 and Error.
26629 @end table
26630 @end deftp
26631
26632 @node Telephony Services
26633 @subsection Telephony Services
26634
26635 @cindex telephony, services
26636 The @code{(gnu services telephony)} module contains Guix service
26637 definitions for telephony services. Currently it provides the following
26638 services:
26639
26640 @subsubheading Jami
26641
26642 @cindex jami, service
26643
26644 This section describes how to configure a Jami server that can be used
26645 to host video (or audio) conferences, among other uses. The following
26646 example demonstrates how to specify Jami account archives (backups) to
26647 be provisioned automatically:
26648
26649 @lisp
26650 (service jami-service-type
26651 (jami-configuration
26652 (accounts
26653 (list (jami-account
26654 (archive "/etc/jami/unencrypted-account-1.gz"))
26655 (jami-account
26656 (archive "/etc/jami/unencrypted-account-2.gz"))))))
26657 @end lisp
26658
26659 When the accounts field is specified, the Jami account files of the
26660 service found under @file{/var/lib/jami} are recreated every time the
26661 service starts.
26662
26663 Jami accounts and their corresponding backup archives can be generated
26664 using the @code{jami} or @code{jami-gnome} Jami clients. The accounts
26665 should not be password-protected, but it is wise to ensure their files
26666 are only readable by @samp{root}.
26667
26668 The next example shows how to declare that only some contacts should be
26669 allowed to communicate with a given account:
26670
26671 @lisp
26672 (service jami-service-type
26673 (jami-configuration
26674 (accounts
26675 (list (jami-account
26676 (archive "/etc/jami/unencrypted-account-1.gz")
26677 (peer-discovery? #t)
26678 (rendezvous-point? #t)
26679 (allowed-contacts
26680 '("1dbcb0f5f37324228235564b79f2b9737e9a008f"
26681 "2dbcb0f5f37324228235564b79f2b9737e9a008f")))))))
26682 @end lisp
26683
26684 In this mode, only the declared @code{allowed-contacts} can initiate
26685 communication with the Jami account. This can be used, for example,
26686 with rendezvous point accounts to create a private video conferencing
26687 space.
26688
26689 To put the system administrator in full control of the conferences
26690 hosted on their system, the Jami service supports the following actions:
26691
26692 @example sh
26693 # herd doc jami list-actions
26694 (list-accounts
26695 list-account-details
26696 list-banned-contacts
26697 list-contacts
26698 list-moderators
26699 add-moderator
26700 ban-contact
26701 enable-account
26702 disable-account)
26703 @end example
26704
26705 The above actions aim to provide the most valuable actions for
26706 moderation purposes, not to cover the whole Jami API. Users wanting to
26707 interact with the Jami daemon from Guile may be interested in
26708 experimenting with the @code{(gnu build jami-service)} module, which
26709 powers the above Shepherd actions.
26710
26711 @c TODO: This should be auto-generated from the doc already defined on
26712 @c the shepherd-actions themselves in (gnu services telephony).
26713 The @code{add-moderator} and @code{ban-contact} actions accept a contact
26714 @emph{fingerprint} (40 characters long hash) as first argument and an
26715 account fingerprint or username as second argument:
26716
26717 @example sh
26718 # herd add-moderator jami 1dbcb0f5f37324228235564b79f2b9737e9a008f \
26719 f3345f2775ddfe07a4b0d95daea111d15fbc1199
26720
26721 # herd list-moderators jami
26722 Moderators for account f3345f2775ddfe07a4b0d95daea111d15fbc1199:
26723 - 1dbcb0f5f37324228235564b79f2b9737e9a008f
26724
26725 @end example
26726
26727 In the case of @code{ban-contact}, the second username argument is
26728 optional; when omitted, the account is banned from all Jami accounts:
26729
26730 @example sh
26731 # herd ban-contact jami 1dbcb0f5f37324228235564b79f2b9737e9a008f
26732
26733 # herd list-banned-contacts jami
26734 Banned contacts for account f3345f2775ddfe07a4b0d95daea111d15fbc1199:
26735 - 1dbcb0f5f37324228235564b79f2b9737e9a008f
26736
26737 @end example
26738
26739 Banned contacts are also stripped from their moderation privileges.
26740
26741 The @code{disable-account} action allows to completely disconnect an
26742 account from the network, making it unreachable, while
26743 @code{enable-account} does the inverse. They accept a single account
26744 username or fingerprint as first argument:
26745
26746 @example sh
26747 # herd disable-account jami f3345f2775ddfe07a4b0d95daea111d15fbc1199
26748
26749 # herd list-accounts jami
26750 The following Jami accounts are available:
26751 - f3345f2775ddfe07a4b0d95daea111d15fbc1199 (dummy) [disabled]
26752
26753 @end example
26754
26755 The @code{list-account-details} action prints the detailed parameters of
26756 each accounts in the Recutils format, which means the @command{recsel}
26757 command can be used to select accounts of interest (@pxref{Selection
26758 Expressions,,,recutils, GNU recutils manual}). Note that period
26759 characters (@samp{.}) found in the account parameter keys are mapped to
26760 underscores (@samp{_}) in the output, to meet the requirements of the
26761 Recutils format. The following example shows how to print the account
26762 fingerprints for all accounts operating in the rendezvous point mode:
26763
26764 @example sh
26765 # herd list-account-details jami | \
26766 recsel -p Account.username -e 'Account.rendezVous ~ "true"'
26767 Account_username: f3345f2775ddfe07a4b0d95daea111d15fbc1199
26768 @end example
26769
26770 The remaining actions should be self-explanatory.
26771
26772 The complete set of available configuration options is detailed below.
26773
26774 @c TODO: Ideally, the following fragments would be auto-generated at
26775 @c build time, so that they needn't be manually duplicated.
26776 @c Auto-generated via (configuration->documentation 'jami-configuration)
26777 @deftp {Data Type} jami-configuration
26778 Available @code{jami-configuration} fields are:
26779
26780 @table @asis
26781 @item @code{libjami} (default: @code{libjami}) (type: package)
26782 The Jami daemon package to use.
26783
26784 @item @code{dbus} (default: @code{dbus-for-jami}) (type: package)
26785 The D-Bus package to use to start the required D-Bus session.
26786
26787 @item @code{nss-certs} (default: @code{nss-certs}) (type: package)
26788 The nss-certs package to use to provide TLS certificates.
26789
26790 @item @code{enable-logging?} (default: @code{#t}) (type: boolean)
26791 Whether to enable logging to syslog.
26792
26793 @item @code{debug?} (default: @code{#f}) (type: boolean)
26794 Whether to enable debug level messages.
26795
26796 @item @code{auto-answer?} (default: @code{#f}) (type: boolean)
26797 Whether to force automatic answer to incoming calls.
26798
26799 @item @code{accounts} (type: maybe-jami-account-list)
26800 A list of Jami accounts to be (re-)provisioned every time the Jami
26801 daemon service starts. When providing this field, the account
26802 directories under @file{/var/lib/jami/} are recreated every time the
26803 service starts, ensuring a consistent state.
26804
26805 @end table
26806
26807 @end deftp
26808
26809 @c Auto-generated via (configuration->documentation 'jami-account)
26810 @deftp {Data Type} jami-account
26811 Available @code{jami-account} fields are:
26812
26813 @table @asis
26814 @item @code{archive} (type: string-or-computed-file)
26815 The account archive (backup) file name of the account. This is used to
26816 provision the account when the service starts. The account archive
26817 should @emph{not} be encrypted. It is highly recommended to make it
26818 readable only to the @samp{root} user (i.e., not in the store), to guard
26819 against leaking the secret key material of the Jami account it contains.
26820
26821 @item @code{allowed-contacts} (type: maybe-account-fingerprint-list)
26822 The list of allowed contacts for the account, entered as their 40
26823 characters long fingerprint. Messages or calls from accounts not in
26824 that list will be rejected. When left specified, the configuration of
26825 the account archive is used as-is with respect to contacts and public
26826 inbound calls/messaging allowance, which typically defaults to allow any
26827 contact to communicate with the account.
26828
26829 @item @code{moderators} (type: maybe-account-fingerprint-list)
26830 The list of contacts that should have moderation privileges (to ban,
26831 mute, etc. other users) in rendezvous conferences, entered as their 40
26832 characters long fingerprint. When left unspecified, the configuration
26833 of the account archive is used as-is with respect to moderation, which
26834 typically defaults to allow anyone to moderate.
26835
26836 @item @code{rendezvous-point?} (type: maybe-boolean)
26837 Whether the account should operate in the rendezvous mode. In this
26838 mode, all the incoming audio/video calls are mixed into a conference.
26839 When left unspecified, the value from the account archive prevails.
26840
26841 @item @code{peer-discovery?} (type: maybe-boolean)
26842 Whether peer discovery should be enabled. Peer discovery is used to
26843 discover other OpenDHT nodes on the local network, which can be useful
26844 to maintain communication between devices on such network even when the
26845 connection to the Internet has been lost. When left unspecified,
26846 the value from the account archive prevails.
26847
26848 @item @code{bootstrap-hostnames} (type: maybe-string-list)
26849 A list of hostnames or IPs pointing to OpenDHT nodes, that should be
26850 used to initially join the OpenDHT network. When left unspecified, the
26851 value from the account archive prevails.
26852
26853 @item @code{name-server-uri} (type: maybe-string)
26854 The URI of the name server to use, that can be used to retrieve the
26855 account fingerprint for a registered username.
26856
26857 @end table
26858
26859 @end deftp
26860
26861 @subsubheading Mumble server
26862
26863 @cindex Mumble
26864 @cindex Murmur
26865 @cindex VoIP server
26866 This section describes how to set up and run a
26867 @uref{https://mumble.info, Mumble} server (formerly known as Murmur).
26868
26869 @deftp {Data Type} mumble-server-configuration
26870 The service type for the Mumble server. An example configuration can
26871 look like this:
26872
26873 @lisp
26874 (service mumble-server-service-type
26875 (mumble-server-configuration
26876 (welcome-text
26877 "Welcome to this Mumble server running on Guix!")
26878 (cert-required? #t) ;disallow text password logins
26879 (ssl-cert "/etc/letsencrypt/live/mumble.example.com/fullchain.pem")
26880 (ssl-key "/etc/letsencrypt/live/mumble.example.com/privkey.pem")))
26881 @end lisp
26882
26883 After reconfiguring your system, you can manually set the mumble-server
26884 @code{SuperUser}
26885 password with the command that is printed during the activation phase.
26886
26887 It is recommended to register a normal Mumble user account
26888 and grant it admin or moderator rights.
26889 You can use the @code{mumble} client to
26890 login as new normal user, register yourself, and log out.
26891 For the next step login with the name @code{SuperUser} use
26892 the @code{SuperUser} password that you set previously,
26893 and grant your newly registered mumble user administrator or moderator
26894 rights and create some channels.
26895
26896 Available @code{mumble-server-configuration} fields are:
26897
26898 @table @asis
26899 @item @code{package} (default: @code{mumble})
26900 Package that contains @code{bin/mumble-server}.
26901
26902 @item @code{user} (default: @code{"mumble-server"})
26903 User who will run the Mumble-Server server.
26904
26905 @item @code{group} (default: @code{"mumble-server"})
26906 Group of the user who will run the mumble-server server.
26907
26908 @item @code{port} (default: @code{64738})
26909 Port on which the server will listen.
26910
26911 @item @code{welcome-text} (default: @code{""})
26912 Welcome text sent to clients when they connect.
26913
26914 @item @code{server-password} (default: @code{""})
26915 Password the clients have to enter in order to connect.
26916
26917 @item @code{max-users} (default: @code{100})
26918 Maximum of users that can be connected to the server at once.
26919
26920 @item @code{max-user-bandwidth} (default: @code{#f})
26921 Maximum voice traffic a user can send per second.
26922
26923 @item @code{database-file} (default: @code{"/var/lib/mumble-server/db.sqlite"})
26924 File name of the sqlite database.
26925 The service's user will become the owner of the directory.
26926
26927 @item @code{log-file} (default: @code{"/var/log/mumble-server/mumble-server.log"})
26928 File name of the log file.
26929 The service's user will become the owner of the directory.
26930
26931 @item @code{autoban-attempts} (default: @code{10})
26932 Maximum number of logins a user can make in @code{autoban-timeframe}
26933 without getting auto banned for @code{autoban-time}.
26934
26935 @item @code{autoban-timeframe} (default: @code{120})
26936 Timeframe for autoban in seconds.
26937
26938 @item @code{autoban-time} (default: @code{300})
26939 Amount of time in seconds for which a client gets banned
26940 when violating the autoban limits.
26941
26942 @item @code{opus-threshold} (default: @code{100})
26943 Percentage of clients that need to support opus
26944 before switching over to opus audio codec.
26945
26946 @item @code{channel-nesting-limit} (default: @code{10})
26947 How deep channels can be nested at maximum.
26948
26949 @item @code{channelname-regex} (default: @code{#f})
26950 A string in form of a Qt regular expression that channel names must conform to.
26951
26952 @item @code{username-regex} (default: @code{#f})
26953 A string in form of a Qt regular expression that user names must conform to.
26954
26955 @item @code{text-message-length} (default: @code{5000})
26956 Maximum size in bytes that a user can send in one text chat message.
26957
26958 @item @code{image-message-length} (default: @code{(* 128 1024)})
26959 Maximum size in bytes that a user can send in one image message.
26960
26961 @item @code{cert-required?} (default: @code{#f})
26962 If it is set to @code{#t} clients that use weak password authentication
26963 will not be accepted. Users must have completed the certificate wizard to join.
26964
26965 @item @code{remember-channel?} (default: @code{#f})
26966 Should mumble-server remember the last channel each user was in when
26967 they disconnected and put them into the remembered channel when they
26968 rejoin.
26969
26970 @item @code{allow-html?} (default: @code{#f})
26971 Should html be allowed in text messages, user comments, and channel descriptions.
26972
26973 @item @code{allow-ping?} (default: @code{#f})
26974 Setting to true exposes the current user count, the maximum user count, and
26975 the server's maximum bandwidth per client to unauthenticated users. In the
26976 Mumble client, this information is shown in the Connect dialog.
26977
26978 Disabling this setting will prevent public listing of the server.
26979
26980 @item @code{bonjour?} (default: @code{#f})
26981 Should the server advertise itself in the local network through the bonjour protocol.
26982
26983 @item @code{send-version?} (default: @code{#f})
26984 Should the mumble-server server version be exposed in ping requests.
26985
26986 @item @code{log-days} (default: @code{31})
26987 Mumble also stores logs in the database, which are accessible via RPC.
26988 The default is 31 days of months, but you can set this setting to 0 to keep logs forever,
26989 or -1 to disable logging to the database.
26990
26991 @item @code{obfuscate-ips?} (default: @code{#t})
26992 Should logged ips be obfuscated to protect the privacy of users.
26993
26994 @item @code{ssl-cert} (default: @code{#f})
26995 File name of the SSL/TLS certificate used for encrypted connections.
26996
26997 @lisp
26998 (ssl-cert "/etc/letsencrypt/live/example.com/fullchain.pem")
26999 @end lisp
27000 @item @code{ssl-key} (default: @code{#f})
27001 Filepath to the ssl private key used for encrypted connections.
27002 @lisp
27003 (ssl-key "/etc/letsencrypt/live/example.com/privkey.pem")
27004 @end lisp
27005
27006 @item @code{ssl-dh-params} (default: @code{#f})
27007 File name of a PEM-encoded file with Diffie-Hellman parameters
27008 for the SSL/TLS encryption. Alternatively you set it to
27009 @code{"@@ffdhe2048"}, @code{"@@ffdhe3072"}, @code{"@@ffdhe4096"}, @code{"@@ffdhe6144"}
27010 or @code{"@@ffdhe8192"} to use bundled parameters from RFC 7919.
27011
27012 @item @code{ssl-ciphers} (default: @code{#f})
27013 The @code{ssl-ciphers} option chooses the cipher suites to make available for use
27014 in SSL/TLS.
27015
27016 This option is specified using
27017 @uref{https://www.openssl.org/docs/apps/ciphers.html#CIPHER-LIST-FORMAT,
27018 OpenSSL cipher list notation}.
27019
27020 It is recommended that you try your cipher string using
27021 'openssl ciphers <string>' before setting it here, to get a feel for
27022 which cipher suites you will get.
27023 After setting this option, it is recommend that you inspect your Mumble
27024 server log to ensure that Mumble is using the cipher suites that you
27025 expected it to.
27026
27027 @quotation Note
27028 Changing this option may impact the backwards compatibility of your
27029 Mumble-Server server, and can remove the ability for older Mumble clients to be able to connect to it.
27030 @end quotation
27031
27032 @item @code{public-registration} (default: @code{#f})
27033 Must be a @code{<mumble-server-public-registration-configuration>}
27034 record or @code{#f}.
27035
27036 You can optionally register your server in the public server list that the
27037 @code{mumble} client shows on startup.
27038 You cannot register your server if you have set a @code{server-password},
27039 or set @code{allow-ping} to @code{#f}.
27040
27041 It might take a few hours until it shows up in the public list.
27042
27043 @item @code{file} (default: @code{#f})
27044 Optional alternative override for this configuration.
27045 @end table
27046 @end deftp
27047
27048 @deftp {Data Type} mumble-server-public-registration-configuration
27049 Configuration for public registration of a mumble-server service.
27050
27051 @table @asis
27052 @item @code{name}
27053 This is a display name for your server. Not to be confused with the hostname.
27054
27055 @item @code{password}
27056 A password to identify your registration.
27057 Subsequent updates will need the same password. Don't lose your password.
27058
27059 @item @code{url}
27060 This should be a @code{http://} or @code{https://} link to your web
27061 site.
27062
27063 @item @code{hostname} (default: @code{#f})
27064 By default your server will be listed by its IP address.
27065 If it is set your server will be linked by this host name instead.
27066 @end table
27067 @end deftp
27068
27069 @quotation Deprecation notice
27070 Due to historical reasons, all of the above @code{mumble-server-}
27071 procedures are also exported with the @code{murmur-} prefix.
27072 It is recommended that you switch to using @code{mumble-server-}
27073 going forward.
27074 @end quotation
27075
27076 @node File-Sharing Services
27077 @subsection File-Sharing Services
27078
27079 The @code{(gnu services file-sharing)} module provides services that
27080 assist with transferring files over peer-to-peer file-sharing networks.
27081
27082 @subsubheading Transmission Daemon Service
27083
27084 @uref{https://transmissionbt.com/, Transmission} is a flexible
27085 BitTorrent client that offers a variety of graphical and command-line
27086 interfaces. A @code{transmission-daemon-service-type} service provides
27087 Transmission's headless variant, @command{transmission-daemon}, as a
27088 system service, allowing users to share files via BitTorrent even when
27089 they are not logged in.
27090
27091 @deffn {Scheme Variable} transmission-daemon-service-type
27092 The service type for the Transmission Daemon BitTorrent client. Its
27093 value must be a @code{transmission-daemon-configuration} object as in
27094 this example:
27095
27096 @lisp
27097 (service transmission-daemon-service-type
27098 (transmission-daemon-configuration
27099 ;; Restrict access to the RPC ("control") interface
27100 (rpc-authentication-required? #t)
27101 (rpc-username "transmission")
27102 (rpc-password
27103 (transmission-password-hash
27104 "transmission" ; desired password
27105 "uKd1uMs9")) ; arbitrary salt value
27106
27107 ;; Accept requests from this and other hosts on the
27108 ;; local network
27109 (rpc-whitelist-enabled? #t)
27110 (rpc-whitelist '("::1" "127.0.0.1" "192.168.0.*"))
27111
27112 ;; Limit bandwidth use during work hours
27113 (alt-speed-down (* 1024 2)) ; 2 MB/s
27114 (alt-speed-up 512) ; 512 kB/s
27115
27116 (alt-speed-time-enabled? #t)
27117 (alt-speed-time-day 'weekdays)
27118 (alt-speed-time-begin
27119 (+ (* 60 8) 30)) ; 8:30 am
27120 (alt-speed-time-end
27121 (+ (* 60 (+ 12 5)) 30)))) ; 5:30 pm
27122 @end lisp
27123 @end deffn
27124
27125 Once the service is started, users can interact with the daemon through
27126 its Web interface (at @code{http://localhost:9091/}) or by using the
27127 @command{transmission-remote} command-line tool, available in the
27128 @code{transmission} package. (Emacs users may want to also consider the
27129 @code{emacs-transmission} package.) Both communicate with the daemon
27130 through its remote procedure call (RPC) interface, which by default is
27131 available to all users on the system; you may wish to change this by
27132 assigning values to the @code{rpc-authentication-required?},
27133 @code{rpc-username} and @code{rpc-password} settings, as shown in the
27134 example above and documented further below.
27135
27136 The value for @code{rpc-password} must be a password hash of the type
27137 generated and used by Transmission clients. This can be copied verbatim
27138 from an existing @file{settings.json} file, if another Transmission
27139 client is already being used. Otherwise, the
27140 @code{transmission-password-hash} and @code{transmission-random-salt}
27141 procedures provided by this module can be used to obtain a suitable hash
27142 value.
27143
27144 @deffn {Scheme Procedure} transmission-password-hash @var{password} @var{salt}
27145 Returns a string containing the result of hashing @var{password}
27146 together with @var{salt}, in the format recognized by Transmission
27147 clients for their @code{rpc-password} configuration setting.
27148
27149 @var{salt} must be an eight-character string. The
27150 @code{transmission-random-salt} procedure can be used to generate a
27151 suitable salt value at random.
27152 @end deffn
27153
27154 @deffn {Scheme Procedure} transmission-random-salt
27155 Returns a string containing a random, eight-character salt value of the
27156 type generated and used by Transmission clients, suitable for passing to
27157 the @code{transmission-password-hash} procedure.
27158 @end deffn
27159
27160 These procedures are accessible from within a Guile REPL started with
27161 the @command{guix repl} command (@pxref{Invoking guix repl}). This is
27162 useful for obtaining a random salt value to provide as the second
27163 parameter to `transmission-password-hash`, as in this example session:
27164
27165 @example
27166 $ guix repl
27167 scheme@@(guix-user)> ,use (gnu services file-sharing)
27168 scheme@@(guix-user)> (transmission-random-salt)
27169 $1 = "uKd1uMs9"
27170 @end example
27171
27172 Alternatively, a complete password hash can generated in a single step:
27173
27174 @example
27175 scheme@@(guix-user)> (transmission-password-hash "transmission"
27176 (transmission-random-salt))
27177 $2 = "@{c8bbc6d1740cd8dc819a6e25563b67812c1c19c9VtFPfdsX"
27178 @end example
27179
27180 The resulting string can be used as-is for the value of
27181 @code{rpc-password}, allowing the password to be kept hidden even in the
27182 operating-system configuration.
27183
27184 Torrent files downloaded by the daemon are directly accessible only to
27185 users in the ``transmission'' user group, who receive read-only access
27186 to the directory specified by the @code{download-dir} configuration
27187 setting (and also the directory specified by @code{incomplete-dir}, if
27188 @code{incomplete-dir-enabled?} is @code{#t}). Downloaded files can be
27189 moved to another directory or deleted altogether using
27190 @command{transmission-remote} with its @code{--move} and
27191 @code{--remove-and-delete} options.
27192
27193 If the @code{watch-dir-enabled?} setting is set to @code{#t}, users in
27194 the ``transmission'' group are able also to place @file{.torrent} files
27195 in the directory specified by @code{watch-dir} to have the corresponding
27196 torrents added by the daemon. (The @code{trash-original-torrent-files?}
27197 setting controls whether the daemon deletes these files after processing
27198 them.)
27199
27200 Some of the daemon's configuration settings can be changed temporarily
27201 by @command{transmission-remote} and similar tools. To undo these
27202 changes, use the service's @code{reload} action to have the daemon
27203 reload its settings from disk:
27204
27205 @example
27206 # herd reload transmission-daemon
27207 @end example
27208
27209 The full set of available configuration settings is defined by the
27210 @code{transmission-daemon-configuration} data type.
27211
27212 @deftp {Data Type} transmission-daemon-configuration
27213 The data type representing configuration settings for Transmission
27214 Daemon. These correspond directly to the settings recognized by
27215 Transmission clients in their @file{settings.json} file.
27216 @end deftp
27217
27218 @c The following documentation was initially generated by
27219 @c (generate-transmission-daemon-documentation) in (gnu services
27220 @c file-sharing). Manually maintained documentation is better, so we
27221 @c shouldn't hesitate to edit below as needed. However if the change
27222 @c you want to make to this documentation can be done in an automated
27223 @c way, it's probably easier to change (generate-documentation) than to
27224 @c make it below and have to deal with the churn as Transmission Daemon
27225 @c updates.
27226
27227 @c %start of fragment
27228
27229 Available @code{transmission-daemon-configuration} fields are:
27230
27231 @deftypevr {@code{transmission-daemon-configuration} parameter} package transmission
27232 The Transmission package to use.
27233
27234 @end deftypevr
27235
27236 @deftypevr {@code{transmission-daemon-configuration} parameter} non-negative-integer stop-wait-period
27237 The period, in seconds, to wait when stopping the service for
27238 @command{transmission-daemon} to exit before killing its process. This
27239 allows the daemon time to complete its housekeeping and send a final
27240 update to trackers as it shuts down. On slow hosts, or hosts with a
27241 slow network connection, this value may need to be increased.
27242
27243 Defaults to @samp{10}.
27244
27245 @end deftypevr
27246
27247 @deftypevr {@code{transmission-daemon-configuration} parameter} string download-dir
27248 The directory to which torrent files are downloaded.
27249
27250 Defaults to @samp{"/var/lib/transmission-daemon/downloads"}.
27251
27252 @end deftypevr
27253
27254 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean incomplete-dir-enabled?
27255 If @code{#t}, files will be held in @code{incomplete-dir} while their
27256 torrent is being downloaded, then moved to @code{download-dir} once the
27257 torrent is complete. Otherwise, files for all torrents (including those
27258 still being downloaded) will be placed in @code{download-dir}.
27259
27260 Defaults to @samp{#f}.
27261
27262 @end deftypevr
27263
27264 @deftypevr {@code{transmission-daemon-configuration} parameter} maybe-string incomplete-dir
27265 The directory in which files from incompletely downloaded torrents will
27266 be held when @code{incomplete-dir-enabled?} is @code{#t}.
27267
27268 Defaults to @samp{disabled}.
27269
27270 @end deftypevr
27271
27272 @deftypevr {@code{transmission-daemon-configuration} parameter} umask umask
27273 The file mode creation mask used for downloaded files. (See the
27274 @command{umask} man page for more information.)
27275
27276 Defaults to @samp{18}.
27277
27278 @end deftypevr
27279
27280 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean rename-partial-files?
27281 When @code{#t}, ``.part'' is appended to the name of partially
27282 downloaded files.
27283
27284 Defaults to @samp{#t}.
27285
27286 @end deftypevr
27287
27288 @deftypevr {@code{transmission-daemon-configuration} parameter} preallocation-mode preallocation
27289 The mode by which space should be preallocated for downloaded files, one
27290 of @code{none}, @code{fast} (or @code{sparse}) and @code{full}.
27291 Specifying @code{full} will minimize disk fragmentation at a cost to
27292 file-creation speed.
27293
27294 Defaults to @samp{fast}.
27295
27296 @end deftypevr
27297
27298 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean watch-dir-enabled?
27299 If @code{#t}, the directory specified by @code{watch-dir} will be
27300 watched for new @file{.torrent} files and the torrents they describe
27301 added automatically (and the original files removed, if
27302 @code{trash-original-torrent-files?} is @code{#t}).
27303
27304 Defaults to @samp{#f}.
27305
27306 @end deftypevr
27307
27308 @deftypevr {@code{transmission-daemon-configuration} parameter} maybe-string watch-dir
27309 The directory to be watched for @file{.torrent} files indicating new
27310 torrents to be added, when @code{watch-dir-enabled} is @code{#t}.
27311
27312 Defaults to @samp{disabled}.
27313
27314 @end deftypevr
27315
27316 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean trash-original-torrent-files?
27317 When @code{#t}, @file{.torrent} files will be deleted from the watch
27318 directory once their torrent has been added (see
27319 @code{watch-directory-enabled?}).
27320
27321 Defaults to @samp{#f}.
27322
27323 @end deftypevr
27324
27325 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean speed-limit-down-enabled?
27326 When @code{#t}, the daemon's download speed will be limited to the rate
27327 specified by @code{speed-limit-down}.
27328
27329 Defaults to @samp{#f}.
27330
27331 @end deftypevr
27332
27333 @deftypevr {@code{transmission-daemon-configuration} parameter} non-negative-integer speed-limit-down
27334 The default global-maximum download speed, in kilobytes per second.
27335
27336 Defaults to @samp{100}.
27337
27338 @end deftypevr
27339
27340 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean speed-limit-up-enabled?
27341 When @code{#t}, the daemon's upload speed will be limited to the rate
27342 specified by @code{speed-limit-up}.
27343
27344 Defaults to @samp{#f}.
27345
27346 @end deftypevr
27347
27348 @deftypevr {@code{transmission-daemon-configuration} parameter} non-negative-integer speed-limit-up
27349 The default global-maximum upload speed, in kilobytes per second.
27350
27351 Defaults to @samp{100}.
27352
27353 @end deftypevr
27354
27355 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean alt-speed-enabled?
27356 When @code{#t}, the alternate speed limits @code{alt-speed-down} and
27357 @code{alt-speed-up} are used (in place of @code{speed-limit-down} and
27358 @code{speed-limit-up}, if they are enabled) to constrain the daemon's
27359 bandwidth usage. This can be scheduled to occur automatically at
27360 certain times during the week; see @code{alt-speed-time-enabled?}.
27361
27362 Defaults to @samp{#f}.
27363
27364 @end deftypevr
27365
27366 @deftypevr {@code{transmission-daemon-configuration} parameter} non-negative-integer alt-speed-down
27367 The alternate global-maximum download speed, in kilobytes per second.
27368
27369 Defaults to @samp{50}.
27370
27371 @end deftypevr
27372
27373 @deftypevr {@code{transmission-daemon-configuration} parameter} non-negative-integer alt-speed-up
27374 The alternate global-maximum upload speed, in kilobytes per second.
27375
27376 Defaults to @samp{50}.
27377
27378 @end deftypevr
27379
27380 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean alt-speed-time-enabled?
27381 When @code{#t}, the alternate speed limits @code{alt-speed-down} and
27382 @code{alt-speed-up} will be enabled automatically during the periods
27383 specified by @code{alt-speed-time-day}, @code{alt-speed-time-begin} and
27384 @code{alt-time-speed-end}.
27385
27386 Defaults to @samp{#f}.
27387
27388 @end deftypevr
27389
27390 @deftypevr {@code{transmission-daemon-configuration} parameter} day-list alt-speed-time-day
27391 The days of the week on which the alternate-speed schedule should be
27392 used, specified either as a list of days (@code{sunday}, @code{monday},
27393 and so on) or using one of the symbols @code{weekdays}, @code{weekends}
27394 or @code{all}.
27395
27396 Defaults to @samp{all}.
27397
27398 @end deftypevr
27399
27400 @deftypevr {@code{transmission-daemon-configuration} parameter} non-negative-integer alt-speed-time-begin
27401 The time of day at which to enable the alternate speed limits, expressed
27402 as a number of minutes since midnight.
27403
27404 Defaults to @samp{540}.
27405
27406 @end deftypevr
27407
27408 @deftypevr {@code{transmission-daemon-configuration} parameter} non-negative-integer alt-speed-time-end
27409 The time of day at which to disable the alternate speed limits,
27410 expressed as a number of minutes since midnight.
27411
27412 Defaults to @samp{1020}.
27413
27414 @end deftypevr
27415
27416 @deftypevr {@code{transmission-daemon-configuration} parameter} string bind-address-ipv4
27417 The IP address at which to listen for peer connections, or ``0.0.0.0''
27418 to listen at all available IP addresses.
27419
27420 Defaults to @samp{"0.0.0.0"}.
27421
27422 @end deftypevr
27423
27424 @deftypevr {@code{transmission-daemon-configuration} parameter} string bind-address-ipv6
27425 The IPv6 address at which to listen for peer connections, or ``::'' to
27426 listen at all available IPv6 addresses.
27427
27428 Defaults to @samp{"::"}.
27429
27430 @end deftypevr
27431
27432 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean peer-port-random-on-start?
27433 If @code{#t}, when the daemon starts it will select a port at random on
27434 which to listen for peer connections, from the range specified
27435 (inclusively) by @code{peer-port-random-low} and
27436 @code{peer-port-random-high}. Otherwise, it listens on the port
27437 specified by @code{peer-port}.
27438
27439 Defaults to @samp{#f}.
27440
27441 @end deftypevr
27442
27443 @deftypevr {@code{transmission-daemon-configuration} parameter} port-number peer-port-random-low
27444 The lowest selectable port number when @code{peer-port-random-on-start?}
27445 is @code{#t}.
27446
27447 Defaults to @samp{49152}.
27448
27449 @end deftypevr
27450
27451 @deftypevr {@code{transmission-daemon-configuration} parameter} port-number peer-port-random-high
27452 The highest selectable port number when @code{peer-port-random-on-start}
27453 is @code{#t}.
27454
27455 Defaults to @samp{65535}.
27456
27457 @end deftypevr
27458
27459 @deftypevr {@code{transmission-daemon-configuration} parameter} port-number peer-port
27460 The port on which to listen for peer connections when
27461 @code{peer-port-random-on-start?} is @code{#f}.
27462
27463 Defaults to @samp{51413}.
27464
27465 @end deftypevr
27466
27467 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean port-forwarding-enabled?
27468 If @code{#t}, the daemon will attempt to configure port-forwarding on an
27469 upstream gateway automatically using @acronym{UPnP} and
27470 @acronym{NAT-PMP}.
27471
27472 Defaults to @samp{#t}.
27473
27474 @end deftypevr
27475
27476 @deftypevr {@code{transmission-daemon-configuration} parameter} encryption-mode encryption
27477 The encryption preference for peer connections, one of
27478 @code{prefer-unencrypted-connections},
27479 @code{prefer-encrypted-connections} or
27480 @code{require-encrypted-connections}.
27481
27482 Defaults to @samp{prefer-encrypted-connections}.
27483
27484 @end deftypevr
27485
27486 @deftypevr {@code{transmission-daemon-configuration} parameter} maybe-string peer-congestion-algorithm
27487 The TCP congestion-control algorithm to use for peer connections,
27488 specified using a string recognized by the operating system in calls to
27489 @code{setsockopt}. When left unspecified, the operating-system default
27490 is used.
27491
27492 Note that on GNU/Linux systems, the kernel must be configured to allow
27493 processes to use a congestion-control algorithm not in the default set;
27494 otherwise, it will deny these requests with ``Operation not permitted''.
27495 To see which algorithms are available on your system and which are
27496 currently permitted for use, look at the contents of the files
27497 @file{tcp_available_congestion_control} and
27498 @file{tcp_allowed_congestion_control} in the @file{/proc/sys/net/ipv4}
27499 directory.
27500
27501 As an example, to have Transmission Daemon use
27502 @uref{http://www-ece.rice.edu/networks/TCP-LP/,the TCP Low Priority
27503 congestion-control algorithm}, you'll need to modify your kernel
27504 configuration to build in support for the algorithm, then update your
27505 operating-system configuration to allow its use by adding a
27506 @code{sysctl-service-type} service (or updating the existing one's
27507 configuration) with lines like the following:
27508
27509 @lisp
27510 (service sysctl-service-type
27511 (sysctl-configuration
27512 (settings
27513 ("net.ipv4.tcp_allowed_congestion_control" .
27514 "reno cubic lp"))))
27515 @end lisp
27516
27517 The Transmission Daemon configuration can then be updated with
27518
27519 @lisp
27520 (peer-congestion-algorithm "lp")
27521 @end lisp
27522
27523 and the system reconfigured to have the changes take effect.
27524
27525 Defaults to @samp{disabled}.
27526
27527 @end deftypevr
27528
27529 @deftypevr {@code{transmission-daemon-configuration} parameter} tcp-type-of-service peer-socket-tos
27530 The type of service to request in outgoing @acronym{TCP} packets, one of
27531 @code{default}, @code{low-cost}, @code{throughput}, @code{low-delay} and
27532 @code{reliability}.
27533
27534 Defaults to @samp{default}.
27535
27536 @end deftypevr
27537
27538 @deftypevr {@code{transmission-daemon-configuration} parameter} non-negative-integer peer-limit-global
27539 The global limit on the number of connected peers.
27540
27541 Defaults to @samp{200}.
27542
27543 @end deftypevr
27544
27545 @deftypevr {@code{transmission-daemon-configuration} parameter} non-negative-integer peer-limit-per-torrent
27546 The per-torrent limit on the number of connected peers.
27547
27548 Defaults to @samp{50}.
27549
27550 @end deftypevr
27551
27552 @deftypevr {@code{transmission-daemon-configuration} parameter} non-negative-integer upload-slots-per-torrent
27553 The maximum number of peers to which the daemon will upload data
27554 simultaneously for each torrent.
27555
27556 Defaults to @samp{14}.
27557
27558 @end deftypevr
27559
27560 @deftypevr {@code{transmission-daemon-configuration} parameter} non-negative-integer peer-id-ttl-hours
27561 The maximum lifespan, in hours, of the peer ID associated with each
27562 public torrent before it is regenerated.
27563
27564 Defaults to @samp{6}.
27565
27566 @end deftypevr
27567
27568 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean blocklist-enabled?
27569 When @code{#t}, the daemon will ignore peers mentioned in the blocklist
27570 it has most recently downloaded from @code{blocklist-url}.
27571
27572 Defaults to @samp{#f}.
27573
27574 @end deftypevr
27575
27576 @deftypevr {@code{transmission-daemon-configuration} parameter} maybe-string blocklist-url
27577 The URL of a peer blocklist (in @acronym{P2P}-plaintext or eMule
27578 @file{.dat} format) to be periodically downloaded and applied when
27579 @code{blocklist-enabled?} is @code{#t}.
27580
27581 Defaults to @samp{disabled}.
27582
27583 @end deftypevr
27584
27585 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean download-queue-enabled?
27586 If @code{#t}, the daemon will be limited to downloading at most
27587 @code{download-queue-size} non-stalled torrents simultaneously.
27588
27589 Defaults to @samp{#t}.
27590
27591 @end deftypevr
27592
27593 @deftypevr {@code{transmission-daemon-configuration} parameter} non-negative-integer download-queue-size
27594 The size of the daemon's download queue, which limits the number of
27595 non-stalled torrents it will download at any one time when
27596 @code{download-queue-enabled?} is @code{#t}.
27597
27598 Defaults to @samp{5}.
27599
27600 @end deftypevr
27601
27602 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean seed-queue-enabled?
27603 If @code{#t}, the daemon will be limited to seeding at most
27604 @code{seed-queue-size} non-stalled torrents simultaneously.
27605
27606 Defaults to @samp{#f}.
27607
27608 @end deftypevr
27609
27610 @deftypevr {@code{transmission-daemon-configuration} parameter} non-negative-integer seed-queue-size
27611 The size of the daemon's seed queue, which limits the number of
27612 non-stalled torrents it will seed at any one time when
27613 @code{seed-queue-enabled?} is @code{#t}.
27614
27615 Defaults to @samp{10}.
27616
27617 @end deftypevr
27618
27619 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean queue-stalled-enabled?
27620 When @code{#t}, the daemon will consider torrents for which it has not
27621 shared data in the past @code{queue-stalled-minutes} minutes to be
27622 stalled and not count them against its @code{download-queue-size} and
27623 @code{seed-queue-size} limits.
27624
27625 Defaults to @samp{#t}.
27626
27627 @end deftypevr
27628
27629 @deftypevr {@code{transmission-daemon-configuration} parameter} non-negative-integer queue-stalled-minutes
27630 The maximum period, in minutes, a torrent may be idle before it is
27631 considered to be stalled, when @code{queue-stalled-enabled?} is
27632 @code{#t}.
27633
27634 Defaults to @samp{30}.
27635
27636 @end deftypevr
27637
27638 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean ratio-limit-enabled?
27639 When @code{#t}, a torrent being seeded will automatically be paused once
27640 it reaches the ratio specified by @code{ratio-limit}.
27641
27642 Defaults to @samp{#f}.
27643
27644 @end deftypevr
27645
27646 @deftypevr {@code{transmission-daemon-configuration} parameter} non-negative-rational ratio-limit
27647 The ratio at which a torrent being seeded will be paused, when
27648 @code{ratio-limit-enabled?} is @code{#t}.
27649
27650 Defaults to @samp{2.0}.
27651
27652 @end deftypevr
27653
27654 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean idle-seeding-limit-enabled?
27655 When @code{#t}, a torrent being seeded will automatically be paused once
27656 it has been idle for @code{idle-seeding-limit} minutes.
27657
27658 Defaults to @samp{#f}.
27659
27660 @end deftypevr
27661
27662 @deftypevr {@code{transmission-daemon-configuration} parameter} non-negative-integer idle-seeding-limit
27663 The maximum period, in minutes, a torrent being seeded may be idle
27664 before it is paused, when @code{idle-seeding-limit-enabled?} is
27665 @code{#t}.
27666
27667 Defaults to @samp{30}.
27668
27669 @end deftypevr
27670
27671 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean dht-enabled?
27672 Enable @uref{http://bittorrent.org/beps/bep_0005.html,the distributed
27673 hash table (@acronym{DHT}) protocol}, which supports the use of
27674 trackerless torrents.
27675
27676 Defaults to @samp{#t}.
27677
27678 @end deftypevr
27679
27680 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean lpd-enabled?
27681 Enable @uref{https://en.wikipedia.org/wiki/Local_Peer_Discovery,local
27682 peer discovery} (@acronym{LPD}), which allows the discovery of peers on
27683 the local network and may reduce the amount of data sent over the public
27684 Internet.
27685
27686 Defaults to @samp{#f}.
27687
27688 @end deftypevr
27689
27690 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean pex-enabled?
27691 Enable @uref{https://en.wikipedia.org/wiki/Peer_exchange,peer exchange}
27692 (@acronym{PEX}), which reduces the daemon's reliance on external
27693 trackers and may improve its performance.
27694
27695 Defaults to @samp{#t}.
27696
27697 @end deftypevr
27698
27699 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean utp-enabled?
27700 Enable @uref{http://bittorrent.org/beps/bep_0029.html,the micro
27701 transport protocol} (@acronym{uTP}), which aims to reduce the impact of
27702 BitTorrent traffic on other users of the local network while maintaining
27703 full utilization of the available bandwidth.
27704
27705 Defaults to @samp{#t}.
27706
27707 @end deftypevr
27708
27709 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean rpc-enabled?
27710 If @code{#t}, enable the remote procedure call (@acronym{RPC})
27711 interface, which allows remote control of the daemon via its Web
27712 interface, the @command{transmission-remote} command-line client, and
27713 similar tools.
27714
27715 Defaults to @samp{#t}.
27716
27717 @end deftypevr
27718
27719 @deftypevr {@code{transmission-daemon-configuration} parameter} string rpc-bind-address
27720 The IP address at which to listen for @acronym{RPC} connections, or
27721 ``0.0.0.0'' to listen at all available IP addresses.
27722
27723 Defaults to @samp{"0.0.0.0"}.
27724
27725 @end deftypevr
27726
27727 @deftypevr {@code{transmission-daemon-configuration} parameter} port-number rpc-port
27728 The port on which to listen for @acronym{RPC} connections.
27729
27730 Defaults to @samp{9091}.
27731
27732 @end deftypevr
27733
27734 @deftypevr {@code{transmission-daemon-configuration} parameter} string rpc-url
27735 The path prefix to use in the @acronym{RPC}-endpoint @acronym{URL}.
27736
27737 Defaults to @samp{"/transmission/"}.
27738
27739 @end deftypevr
27740
27741 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean rpc-authentication-required?
27742 When @code{#t}, clients must authenticate (see @code{rpc-username} and
27743 @code{rpc-password}) when using the @acronym{RPC} interface. Note this
27744 has the side effect of disabling host-name whitelisting (see
27745 @code{rpc-host-whitelist-enabled?}.
27746
27747 Defaults to @samp{#f}.
27748
27749 @end deftypevr
27750
27751 @deftypevr {@code{transmission-daemon-configuration} parameter} maybe-string rpc-username
27752 The username required by clients to access the @acronym{RPC} interface
27753 when @code{rpc-authentication-required?} is @code{#t}.
27754
27755 Defaults to @samp{disabled}.
27756
27757 @end deftypevr
27758
27759 @deftypevr {@code{transmission-daemon-configuration} parameter} maybe-transmission-password-hash rpc-password
27760 The password required by clients to access the @acronym{RPC} interface
27761 when @code{rpc-authentication-required?} is @code{#t}. This must be
27762 specified using a password hash in the format recognized by Transmission
27763 clients, either copied from an existing @file{settings.json} file or
27764 generated using the @code{transmission-password-hash} procedure.
27765
27766 Defaults to @samp{disabled}.
27767
27768 @end deftypevr
27769
27770 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean rpc-whitelist-enabled?
27771 When @code{#t}, @acronym{RPC} requests will be accepted only when they
27772 originate from an address specified in @code{rpc-whitelist}.
27773
27774 Defaults to @samp{#t}.
27775
27776 @end deftypevr
27777
27778 @deftypevr {@code{transmission-daemon-configuration} parameter} string-list rpc-whitelist
27779 The list of IP and IPv6 addresses from which @acronym{RPC} requests will
27780 be accepted when @code{rpc-whitelist-enabled?} is @code{#t}. Wildcards
27781 may be specified using @samp{*}.
27782
27783 Defaults to @samp{("127.0.0.1" "::1")}.
27784
27785 @end deftypevr
27786
27787 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean rpc-host-whitelist-enabled?
27788 When @code{#t}, @acronym{RPC} requests will be accepted only when they
27789 are addressed to a host named in @code{rpc-host-whitelist}. Note that
27790 requests to ``localhost'' or ``localhost.'', or to a numeric address,
27791 are always accepted regardless of these settings.
27792
27793 Note also this functionality is disabled when
27794 @code{rpc-authentication-required?} is @code{#t}.
27795
27796 Defaults to @samp{#t}.
27797
27798 @end deftypevr
27799
27800 @deftypevr {@code{transmission-daemon-configuration} parameter} string-list rpc-host-whitelist
27801 The list of host names recognized by the @acronym{RPC} server when
27802 @code{rpc-host-whitelist-enabled?} is @code{#t}.
27803
27804 Defaults to @samp{()}.
27805
27806 @end deftypevr
27807
27808 @deftypevr {@code{transmission-daemon-configuration} parameter} message-level message-level
27809 The minimum severity level of messages to be logged (to
27810 @file{/var/log/transmission.log}) by the daemon, one of @code{none} (no
27811 logging), @code{error}, @code{info} and @code{debug}.
27812
27813 Defaults to @samp{info}.
27814
27815 @end deftypevr
27816
27817 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean start-added-torrents?
27818 When @code{#t}, torrents are started as soon as they are added;
27819 otherwise, they are added in ``paused'' state.
27820
27821 Defaults to @samp{#t}.
27822
27823 @end deftypevr
27824
27825 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean script-torrent-done-enabled?
27826 When @code{#t}, the script specified by
27827 @code{script-torrent-done-filename} will be invoked each time a torrent
27828 completes.
27829
27830 Defaults to @samp{#f}.
27831
27832 @end deftypevr
27833
27834 @deftypevr {@code{transmission-daemon-configuration} parameter} maybe-file-object script-torrent-done-filename
27835 A file name or file-like object specifying a script to run each time a
27836 torrent completes, when @code{script-torrent-done-enabled?} is
27837 @code{#t}.
27838
27839 Defaults to @samp{disabled}.
27840
27841 @end deftypevr
27842
27843 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean scrape-paused-torrents-enabled?
27844 When @code{#t}, the daemon will scrape trackers for a torrent even when
27845 the torrent is paused.
27846
27847 Defaults to @samp{#t}.
27848
27849 @end deftypevr
27850
27851 @deftypevr {@code{transmission-daemon-configuration} parameter} non-negative-integer cache-size-mb
27852 The amount of memory, in megabytes, to allocate for the daemon's
27853 in-memory cache. A larger value may increase performance by reducing
27854 the frequency of disk I/O.
27855
27856 Defaults to @samp{4}.
27857
27858 @end deftypevr
27859
27860 @deftypevr {@code{transmission-daemon-configuration} parameter} boolean prefetch-enabled?
27861 When @code{#t}, the daemon will try to improve I/O performance by
27862 hinting to the operating system which data is likely to be read next
27863 from disk to satisfy requests from peers.
27864
27865 Defaults to @samp{#t}.
27866
27867 @end deftypevr
27868
27869
27870 @c %end of fragment
27871
27872
27873
27874 @node Monitoring Services
27875 @subsection Monitoring Services
27876
27877 @subsubheading Tailon Service
27878
27879 @uref{https://tailon.readthedocs.io/, Tailon} is a web application for
27880 viewing and searching log files.
27881
27882 The following example will configure the service with default values.
27883 By default, Tailon can be accessed on port 8080 (@code{http://localhost:8080}).
27884
27885 @lisp
27886 (service tailon-service-type)
27887 @end lisp
27888
27889 The following example customises more of the Tailon configuration,
27890 adding @command{sed} to the list of allowed commands.
27891
27892 @lisp
27893 (service tailon-service-type
27894 (tailon-configuration
27895 (config-file
27896 (tailon-configuration-file
27897 (allowed-commands '("tail" "grep" "awk" "sed"))))))
27898 @end lisp
27899
27900
27901 @deftp {Data Type} tailon-configuration
27902 Data type representing the configuration of Tailon.
27903 This type has the following parameters:
27904
27905 @table @asis
27906 @item @code{config-file} (default: @code{(tailon-configuration-file)})
27907 The configuration file to use for Tailon. This can be set to a
27908 @dfn{tailon-configuration-file} record value, or any gexp
27909 (@pxref{G-Expressions}).
27910
27911 For example, to instead use a local file, the @code{local-file} function
27912 can be used:
27913
27914 @lisp
27915 (service tailon-service-type
27916 (tailon-configuration
27917 (config-file (local-file "./my-tailon.conf"))))
27918 @end lisp
27919
27920 @item @code{package} (default: @code{tailon})
27921 The tailon package to use.
27922
27923 @end table
27924 @end deftp
27925
27926 @deftp {Data Type} tailon-configuration-file
27927 Data type representing the configuration options for Tailon.
27928 This type has the following parameters:
27929
27930 @table @asis
27931 @item @code{files} (default: @code{(list "/var/log")})
27932 List of files to display. The list can include strings for a single file
27933 or directory, or a list, where the first item is the name of a
27934 subsection, and the remaining items are the files or directories in that
27935 subsection.
27936
27937 @item @code{bind} (default: @code{"localhost:8080"})
27938 Address and port to which Tailon should bind on.
27939
27940 @item @code{relative-root} (default: @code{#f})
27941 URL path to use for Tailon, set to @code{#f} to not use a path.
27942
27943 @item @code{allow-transfers?} (default: @code{#t})
27944 Allow downloading the log files in the web interface.
27945
27946 @item @code{follow-names?} (default: @code{#t})
27947 Allow tailing of not-yet existent files.
27948
27949 @item @code{tail-lines} (default: @code{200})
27950 Number of lines to read initially from each file.
27951
27952 @item @code{allowed-commands} (default: @code{(list "tail" "grep" "awk")})
27953 Commands to allow running. By default, @code{sed} is disabled.
27954
27955 @item @code{debug?} (default: @code{#f})
27956 Set @code{debug?} to @code{#t} to show debug messages.
27957
27958 @item @code{wrap-lines} (default: @code{#t})
27959 Initial line wrapping state in the web interface. Set to @code{#t} to
27960 initially wrap lines (the default), or to @code{#f} to initially not
27961 wrap lines.
27962
27963 @item @code{http-auth} (default: @code{#f})
27964 HTTP authentication type to use. Set to @code{#f} to disable
27965 authentication (the default). Supported values are @code{"digest"} or
27966 @code{"basic"}.
27967
27968 @item @code{users} (default: @code{#f})
27969 If HTTP authentication is enabled (see @code{http-auth}), access will be
27970 restricted to the credentials provided here. To configure users, use a
27971 list of pairs, where the first element of the pair is the username, and
27972 the 2nd element of the pair is the password.
27973
27974 @lisp
27975 (tailon-configuration-file
27976 (http-auth "basic")
27977 (users '(("user1" . "password1")
27978 ("user2" . "password2"))))
27979 @end lisp
27980
27981 @end table
27982 @end deftp
27983
27984
27985 @subsubheading Darkstat Service
27986 @cindex darkstat
27987 Darkstat is a packet sniffer that captures network traffic, calculates
27988 statistics about usage, and serves reports over HTTP.
27989
27990 @defvar {Scheme Variable} darkstat-service-type
27991 This is the service type for the
27992 @uref{https://unix4lyfe.org/darkstat/, darkstat}
27993 service, its value must be a @code{darkstat-configuration} record as in
27994 this example:
27995
27996 @lisp
27997 (service darkstat-service-type
27998 (darkstat-configuration
27999 (interface "eno1")))
28000 @end lisp
28001 @end defvar
28002
28003 @deftp {Data Type} darkstat-configuration
28004 Data type representing the configuration of @command{darkstat}.
28005
28006 @table @asis
28007 @item @code{package} (default: @code{darkstat})
28008 The darkstat package to use.
28009
28010 @item @code{interface}
28011 Capture traffic on the specified network interface.
28012
28013 @item @code{port} (default: @code{"667"})
28014 Bind the web interface to the specified port.
28015
28016 @item @code{bind-address} (default: @code{"127.0.0.1"})
28017 Bind the web interface to the specified address.
28018
28019 @item @code{base} (default: @code{"/"})
28020 Specify the path of the base URL@. This can be useful if
28021 @command{darkstat} is accessed via a reverse proxy.
28022
28023 @end table
28024 @end deftp
28025
28026 @anchor{prometheus-node-exporter}
28027 @subsubheading Prometheus Node Exporter Service
28028 @cindex prometheus-node-exporter
28029
28030 The Prometheus ``node exporter'' makes hardware and operating system statistics
28031 provided by the Linux kernel available for the Prometheus monitoring system.
28032 This service should be deployed on all physical nodes and virtual machines,
28033 where monitoring these statistics is desirable.
28034
28035 @defvar {Scheme variable} prometheus-node-exporter-service-type
28036 This is the service type for the
28037 @uref{https://github.com/prometheus/node_exporter/, prometheus-node-exporter}
28038 service, its value must be a @code{prometheus-node-exporter-configuration}.
28039
28040 @lisp
28041 (service prometheus-node-exporter-service-type)
28042 @end lisp
28043 @end defvar
28044
28045 @deftp {Data Type} prometheus-node-exporter-configuration
28046 Data type representing the configuration of @command{node_exporter}.
28047
28048 @table @asis
28049 @item @code{package} (default: @code{go-github-com-prometheus-node-exporter})
28050 The prometheus-node-exporter package to use.
28051
28052 @item @code{web-listen-address} (default: @code{":9100"})
28053 Bind the web interface to the specified address.
28054
28055 @item @code{textfile-directory} (default: @code{"/var/lib/prometheus/node-exporter"})
28056 This directory can be used to export metrics specific to this machine.
28057 Files containing metrics in the text format, with the filename ending in
28058 @code{.prom} should be placed in this directory.
28059
28060 @item @code{extra-options} (default: @code{'()})
28061 Extra options to pass to the Prometheus node exporter.
28062
28063 @end table
28064 @end deftp
28065
28066 @subsubheading Zabbix server
28067 @cindex zabbix zabbix-server
28068 Zabbix is a high performance monitoring system that can collect data from a
28069 variety of sources and provide the results in a web-based interface. Alerting
28070 and reporting is built-in, as well as @dfn{templates} for common operating
28071 system metrics such as network utilization, CPU load, and disk space consumption.
28072
28073 This service provides the central Zabbix monitoring service; you also need
28074 @ref{zabbix-front-end,@code{zabbix-front-end-service-type}} to configure Zabbix
28075 and display results, and optionally @ref{zabbix-agent,
28076 @code{zabbix-agent-service-type}} on machines that should be monitored (other
28077 data sources are supported, such as @ref{prometheus-node-exporter,
28078 Prometheus Node Exporter}).
28079
28080 @defvar {Scheme variable} zabbix-server-service-type
28081 This is the service type for the Zabbix server service. Its value must be a
28082 @code{zabbix-server-configuration} record, shown below.
28083 @end defvar
28084
28085 @c %start of fragment
28086
28087 @deftp {Data Type} zabbix-server-configuration
28088 Available @code{zabbix-server-configuration} fields are:
28089
28090 @table @asis
28091 @item @code{zabbix-server} (default: @code{zabbix-server}) (type: file-like)
28092 The zabbix-server package.
28093
28094 @item @code{user} (default: @code{"zabbix"}) (type: string)
28095 User who will run the Zabbix server.
28096
28097 @item @code{group} (default: @code{"zabbix"}) (type: group)
28098 Group who will run the Zabbix server.
28099
28100 @item @code{db-host} (default: @code{"127.0.0.1"}) (type: string)
28101 Database host name.
28102
28103 @item @code{db-name} (default: @code{"zabbix"}) (type: string)
28104 Database name.
28105
28106 @item @code{db-user} (default: @code{"zabbix"}) (type: string)
28107 Database user.
28108
28109 @item @code{db-password} (default: @code{""}) (type: string)
28110 Database password. Please, use @code{include-files} with
28111 @code{DBPassword=SECRET} inside a specified file instead.
28112
28113 @item @code{db-port} (default: @code{5432}) (type: number)
28114 Database port.
28115
28116 @item @code{log-type} (default: @code{""}) (type: string)
28117 Specifies where log messages are written to:
28118
28119 @itemize @bullet
28120
28121 @item @code{system} - syslog.
28122
28123 @item @code{file} - file specified with @code{log-file} parameter.
28124
28125 @item @code{console} - standard output.
28126
28127 @end itemize
28128
28129 @item @code{log-file} (default: @code{"/var/log/zabbix/server.log"}) (type: string)
28130 Log file name for @code{log-type} @code{file} parameter.
28131
28132 @item @code{pid-file} (default: @code{"/var/run/zabbix/zabbix_server.pid"}) (type: string)
28133 Name of PID file.
28134
28135 @item @code{ssl-ca-location} (default: @code{"/etc/ssl/certs/ca-certificates.crt"}) (type: string)
28136 The location of certificate authority (CA) files for SSL server
28137 certificate verification.
28138
28139 @item @code{ssl-cert-location} (default: @code{"/etc/ssl/certs"}) (type: string)
28140 Location of SSL client certificates.
28141
28142 @item @code{extra-options} (default: @code{""}) (type: extra-options)
28143 Extra options will be appended to Zabbix server configuration file.
28144
28145 @item @code{include-files} (default: @code{()}) (type: include-files)
28146 You may include individual files or all files in a directory in the
28147 configuration file.
28148
28149 @end table
28150
28151 @end deftp
28152
28153
28154 @c %end of fragment
28155
28156 @anchor{zabbix-agent}
28157 @subsubheading Zabbix agent
28158 @cindex zabbix zabbix-agent
28159
28160 The Zabbix agent gathers information about the running system for the Zabbix
28161 monitoring server. It has a variety of built-in checks, and can be extended
28162 with custom
28163 @uref{https://www.zabbix.com/documentation/current/en/manual/config/items/userparameters,
28164 @dfn{user parameters}}.
28165
28166 @defvar {Scheme variable} zabbix-agent-service-type
28167 This is the service type for the Zabbix agent service. Its value must be a
28168 @code{zabbix-agent-configuration} record, shown below.
28169 @end defvar
28170
28171 @c %start of fragment
28172
28173 @deftp {Data Type} zabbix-agent-configuration
28174 Available @code{zabbix-agent-configuration} fields are:
28175
28176 @table @asis
28177 @item @code{zabbix-agent} (default: @code{zabbix-agentd}) (type: file-like)
28178 The zabbix-agent package.
28179
28180 @item @code{user} (default: @code{"zabbix"}) (type: string)
28181 User who will run the Zabbix agent.
28182
28183 @item @code{group} (default: @code{"zabbix"}) (type: group)
28184 Group who will run the Zabbix agent.
28185
28186 @item @code{hostname} (default: @code{""}) (type: string)
28187 Unique, case sensitive hostname which is required for active checks and
28188 must match hostname as configured on the server.
28189
28190 @item @code{log-type} (default: @code{""}) (type: string)
28191 Specifies where log messages are written to:
28192
28193 @itemize @bullet
28194 @item
28195 @code{system} - syslog.
28196
28197 @item @code{file} - file specified with
28198 @code{log-file} parameter.
28199
28200 @item @code{console} - standard output.
28201
28202 @end itemize
28203
28204 @item @code{log-file} (default: @code{"/var/log/zabbix/agent.log"}) (type: string)
28205 Log file name for @code{log-type} @code{file} parameter.
28206
28207 @item @code{pid-file} (default: @code{"/var/run/zabbix/zabbix_agent.pid"}) (type: string)
28208 Name of PID file.
28209
28210 @item @code{server} (default: @code{("127.0.0.1")}) (type: list)
28211 List of IP addresses, optionally in CIDR notation, or hostnames of
28212 Zabbix servers and Zabbix proxies. Incoming connections will be
28213 accepted only from the hosts listed here.
28214
28215 @item @code{server-active} (default: @code{("127.0.0.1")}) (type: list)
28216 List of IP:port (or hostname:port) pairs of Zabbix servers and Zabbix
28217 proxies for active checks. If port is not specified, default port is
28218 used. If this parameter is not specified, active checks are disabled.
28219
28220 @item @code{extra-options} (default: @code{""}) (type: extra-options)
28221 Extra options will be appended to Zabbix server configuration file.
28222
28223 @item @code{include-files} (default: @code{()}) (type: include-files)
28224 You may include individual files or all files in a directory in the
28225 configuration file.
28226
28227 @end table
28228
28229 @end deftp
28230
28231
28232 @c %end of fragment
28233
28234 @anchor{zabbix-front-end}
28235 @subsubheading Zabbix front-end
28236 @cindex zabbix zabbix-front-end
28237
28238 The Zabbix front-end provides a web interface to Zabbix. It does not need
28239 to run on the same machine as the Zabbix server. This service works by
28240 extending the @ref{PHP-FPM} and @ref{NGINX} services with the configuration
28241 necessary for loading the Zabbix user interface.
28242
28243 @defvar {Scheme variable} zabbix-front-end-service-type
28244 This is the service type for the Zabbix web frontend. Its value must be a
28245 @code{zabbix-front-end-configuration} record, shown below.
28246 @end defvar
28247
28248 @c %start of fragment
28249
28250 @deftp {Data Type} zabbix-front-end-configuration
28251 Available @code{zabbix-front-end-configuration} fields are:
28252
28253 @table @asis
28254 @item @code{zabbix-server} (default: @code{zabbix-server}) (type: file-like)
28255 The Zabbix server package to use.
28256
28257 @item @code{nginx} (default: @code{()}) (type: list)
28258 List of @ref{nginx-server-configuration,@code{nginx-server-configuration}}
28259 blocks for the Zabbix front-end. When empty, a default that listens on
28260 port 80 is used.
28261
28262 @item @code{db-host} (default: @code{"localhost"}) (type: string)
28263 Database host name.
28264
28265 @item @code{db-port} (default: @code{5432}) (type: number)
28266 Database port.
28267
28268 @item @code{db-name} (default: @code{"zabbix"}) (type: string)
28269 Database name.
28270
28271 @item @code{db-user} (default: @code{"zabbix"}) (type: string)
28272 Database user.
28273
28274 @item @code{db-password} (default: @code{""}) (type: string)
28275 Database password. Please, use @code{db-secret-file} instead.
28276
28277 @item @code{db-secret-file} (default: @code{""}) (type: string)
28278 Secret file which will be appended to @file{zabbix.conf.php} file. This
28279 file contains credentials for use by Zabbix front-end. You are expected
28280 to create it manually.
28281
28282 @item @code{zabbix-host} (default: @code{"localhost"}) (type: string)
28283 Zabbix server hostname.
28284
28285 @item @code{zabbix-port} (default: @code{10051}) (type: number)
28286 Zabbix server port.
28287
28288 @end table
28289
28290 @end deftp
28291
28292
28293 @c %end of fragment
28294
28295 @node Kerberos Services
28296 @subsection Kerberos Services
28297 @cindex Kerberos
28298
28299 The @code{(gnu services kerberos)} module provides services relating to
28300 the authentication protocol @dfn{Kerberos}.
28301
28302 @subsubheading Krb5 Service
28303
28304 Programs using a Kerberos client library normally
28305 expect a configuration file in @file{/etc/krb5.conf}.
28306 This service generates such a file from a definition provided in the
28307 operating system declaration.
28308 It does not cause any daemon to be started.
28309
28310 No ``keytab'' files are provided by this service---you must explicitly create them.
28311 This service is known to work with the MIT client library, @code{mit-krb5}.
28312 Other implementations have not been tested.
28313
28314 @defvr {Scheme Variable} krb5-service-type
28315 A service type for Kerberos 5 clients.
28316 @end defvr
28317
28318 @noindent
28319 Here is an example of its use:
28320 @lisp
28321 (service krb5-service-type
28322 (krb5-configuration
28323 (default-realm "EXAMPLE.COM")
28324 (allow-weak-crypto? #t)
28325 (realms (list
28326 (krb5-realm
28327 (name "EXAMPLE.COM")
28328 (admin-server "groucho.example.com")
28329 (kdc "karl.example.com"))
28330 (krb5-realm
28331 (name "ARGRX.EDU")
28332 (admin-server "kerb-admin.argrx.edu")
28333 (kdc "keys.argrx.edu"))))))
28334 @end lisp
28335
28336 @noindent
28337 This example provides a Kerberos@tie{}5 client configuration which:
28338 @itemize
28339 @item Recognizes two realms, @i{viz:} ``EXAMPLE.COM'' and ``ARGRX.EDU'', both
28340 of which have distinct administration servers and key distribution centers;
28341 @item Will default to the realm ``EXAMPLE.COM'' if the realm is not explicitly
28342 specified by clients;
28343 @item Accepts services which only support encryption types known to be weak.
28344 @end itemize
28345
28346 The @code{krb5-realm} and @code{krb5-configuration} types have many fields.
28347 Only the most commonly used ones are described here.
28348 For a full list, and more detailed explanation of each, see the MIT
28349 @uref{https://web.mit.edu/kerberos/krb5-devel/doc/admin/conf_files/krb5_conf.html,,krb5.conf}
28350 documentation.
28351
28352
28353 @deftp {Data Type} krb5-realm
28354 @cindex realm, kerberos
28355 @table @asis
28356 @item @code{name}
28357 This field is a string identifying the name of the realm.
28358 A common convention is to use the fully qualified DNS name of your organization,
28359 converted to upper case.
28360
28361 @item @code{admin-server}
28362 This field is a string identifying the host where the administration server is
28363 running.
28364
28365 @item @code{kdc}
28366 This field is a string identifying the key distribution center
28367 for the realm.
28368 @end table
28369 @end deftp
28370
28371 @deftp {Data Type} krb5-configuration
28372
28373 @table @asis
28374 @item @code{allow-weak-crypto?} (default: @code{#f})
28375 If this flag is @code{#t} then services which only offer encryption algorithms
28376 known to be weak will be accepted.
28377
28378 @item @code{default-realm} (default: @code{#f})
28379 This field should be a string identifying the default Kerberos
28380 realm for the client.
28381 You should set this field to the name of your Kerberos realm.
28382 If this value is @code{#f}
28383 then a realm must be specified with every Kerberos principal when invoking programs
28384 such as @command{kinit}.
28385
28386 @item @code{realms}
28387 This should be a non-empty list of @code{krb5-realm} objects, which clients may
28388 access.
28389 Normally, one of them will have a @code{name} field matching the @code{default-realm}
28390 field.
28391 @end table
28392 @end deftp
28393
28394
28395 @subsubheading PAM krb5 Service
28396 @cindex pam-krb5
28397
28398 The @code{pam-krb5} service allows for login authentication and password
28399 management via Kerberos.
28400 You will need this service if you want PAM enabled applications to authenticate
28401 users using Kerberos.
28402
28403 @defvr {Scheme Variable} pam-krb5-service-type
28404 A service type for the Kerberos 5 PAM module.
28405 @end defvr
28406
28407 @deftp {Data Type} pam-krb5-configuration
28408 Data type representing the configuration of the Kerberos 5 PAM module.
28409 This type has the following parameters:
28410 @table @asis
28411 @item @code{pam-krb5} (default: @code{pam-krb5})
28412 The pam-krb5 package to use.
28413
28414 @item @code{minimum-uid} (default: @code{1000})
28415 The smallest user ID for which Kerberos authentications should be attempted.
28416 Local accounts with lower values will silently fail to authenticate.
28417 @end table
28418 @end deftp
28419
28420
28421 @node LDAP Services
28422 @subsection LDAP Services
28423 @cindex LDAP
28424 @cindex nslcd, LDAP service
28425
28426 The @code{(gnu services authentication)} module provides the
28427 @code{nslcd-service-type}, which can be used to authenticate against an LDAP
28428 server. In addition to configuring the service itself, you may want to add
28429 @code{ldap} as a name service to the Name Service Switch. @xref{Name Service
28430 Switch} for detailed information.
28431
28432 Here is a simple operating system declaration with a default configuration of
28433 the @code{nslcd-service-type} and a Name Service Switch configuration that
28434 consults the @code{ldap} name service last:
28435
28436 @lisp
28437 (use-service-modules authentication)
28438 (use-modules (gnu system nss))
28439 ...
28440 (operating-system
28441 ...
28442 (services
28443 (cons*
28444 (service nslcd-service-type)
28445 (service dhcp-client-service-type)
28446 %base-services))
28447 (name-service-switch
28448 (let ((services (list (name-service (name "db"))
28449 (name-service (name "files"))
28450 (name-service (name "ldap")))))
28451 (name-service-switch
28452 (inherit %mdns-host-lookup-nss)
28453 (password services)
28454 (shadow services)
28455 (group services)
28456 (netgroup services)
28457 (gshadow services)))))
28458 @end lisp
28459
28460 @c %start of generated documentation for nslcd-configuration
28461
28462 Available @code{nslcd-configuration} fields are:
28463
28464 @deftypevr {@code{nslcd-configuration} parameter} package nss-pam-ldapd
28465 The @code{nss-pam-ldapd} package to use.
28466
28467 @end deftypevr
28468
28469 @deftypevr {@code{nslcd-configuration} parameter} maybe-number threads
28470 The number of threads to start that can handle requests and perform LDAP
28471 queries. Each thread opens a separate connection to the LDAP server.
28472 The default is to start 5 threads.
28473
28474 Defaults to @samp{disabled}.
28475
28476 @end deftypevr
28477
28478 @deftypevr {@code{nslcd-configuration} parameter} string uid
28479 This specifies the user id with which the daemon should be run.
28480
28481 Defaults to @samp{"nslcd"}.
28482
28483 @end deftypevr
28484
28485 @deftypevr {@code{nslcd-configuration} parameter} string gid
28486 This specifies the group id with which the daemon should be run.
28487
28488 Defaults to @samp{"nslcd"}.
28489
28490 @end deftypevr
28491
28492 @deftypevr {@code{nslcd-configuration} parameter} log-option log
28493 This option controls the way logging is done via a list containing
28494 SCHEME and LEVEL@. The SCHEME argument may either be the symbols
28495 @samp{none} or @samp{syslog}, or an absolute file name. The LEVEL
28496 argument is optional and specifies the log level. The log level may be
28497 one of the following symbols: @samp{crit}, @samp{error}, @samp{warning},
28498 @samp{notice}, @samp{info} or @samp{debug}. All messages with the
28499 specified log level or higher are logged.
28500
28501 Defaults to @samp{("/var/log/nslcd" info)}.
28502
28503 @end deftypevr
28504
28505 @deftypevr {@code{nslcd-configuration} parameter} list uri
28506 The list of LDAP server URIs. Normally, only the first server will be
28507 used with the following servers as fall-back.
28508
28509 Defaults to @samp{("ldap://localhost:389/")}.
28510
28511 @end deftypevr
28512
28513 @deftypevr {@code{nslcd-configuration} parameter} maybe-string ldap-version
28514 The version of the LDAP protocol to use. The default is to use the
28515 maximum version supported by the LDAP library.
28516
28517 Defaults to @samp{disabled}.
28518
28519 @end deftypevr
28520
28521 @deftypevr {@code{nslcd-configuration} parameter} maybe-string binddn
28522 Specifies the distinguished name with which to bind to the directory
28523 server for lookups. The default is to bind anonymously.
28524
28525 Defaults to @samp{disabled}.
28526
28527 @end deftypevr
28528
28529 @deftypevr {@code{nslcd-configuration} parameter} maybe-string bindpw
28530 Specifies the credentials with which to bind. This option is only
28531 applicable when used with binddn.
28532
28533 Defaults to @samp{disabled}.
28534
28535 @end deftypevr
28536
28537 @deftypevr {@code{nslcd-configuration} parameter} maybe-string rootpwmoddn
28538 Specifies the distinguished name to use when the root user tries to
28539 modify a user's password using the PAM module.
28540
28541 Defaults to @samp{disabled}.
28542
28543 @end deftypevr
28544
28545 @deftypevr {@code{nslcd-configuration} parameter} maybe-string rootpwmodpw
28546 Specifies the credentials with which to bind if the root user tries to
28547 change a user's password. This option is only applicable when used with
28548 rootpwmoddn
28549
28550 Defaults to @samp{disabled}.
28551
28552 @end deftypevr
28553
28554 @deftypevr {@code{nslcd-configuration} parameter} maybe-string sasl-mech
28555 Specifies the SASL mechanism to be used when performing SASL
28556 authentication.
28557
28558 Defaults to @samp{disabled}.
28559
28560 @end deftypevr
28561
28562 @deftypevr {@code{nslcd-configuration} parameter} maybe-string sasl-realm
28563 Specifies the SASL realm to be used when performing SASL authentication.
28564
28565 Defaults to @samp{disabled}.
28566
28567 @end deftypevr
28568
28569 @deftypevr {@code{nslcd-configuration} parameter} maybe-string sasl-authcid
28570 Specifies the authentication identity to be used when performing SASL
28571 authentication.
28572
28573 Defaults to @samp{disabled}.
28574
28575 @end deftypevr
28576
28577 @deftypevr {@code{nslcd-configuration} parameter} maybe-string sasl-authzid
28578 Specifies the authorization identity to be used when performing SASL
28579 authentication.
28580
28581 Defaults to @samp{disabled}.
28582
28583 @end deftypevr
28584
28585 @deftypevr {@code{nslcd-configuration} parameter} maybe-boolean sasl-canonicalize?
28586 Determines whether the LDAP server host name should be canonicalised. If
28587 this is enabled the LDAP library will do a reverse host name lookup. By
28588 default, it is left up to the LDAP library whether this check is
28589 performed or not.
28590
28591 Defaults to @samp{disabled}.
28592
28593 @end deftypevr
28594
28595 @deftypevr {@code{nslcd-configuration} parameter} maybe-string krb5-ccname
28596 Set the name for the GSS-API Kerberos credentials cache.
28597
28598 Defaults to @samp{disabled}.
28599
28600 @end deftypevr
28601
28602 @deftypevr {@code{nslcd-configuration} parameter} string base
28603 The directory search base.
28604
28605 Defaults to @samp{"dc=example,dc=com"}.
28606
28607 @end deftypevr
28608
28609 @deftypevr {@code{nslcd-configuration} parameter} scope-option scope
28610 Specifies the search scope (subtree, onelevel, base or children). The
28611 default scope is subtree; base scope is almost never useful for name
28612 service lookups; children scope is not supported on all servers.
28613
28614 Defaults to @samp{(subtree)}.
28615
28616 @end deftypevr
28617
28618 @deftypevr {@code{nslcd-configuration} parameter} maybe-deref-option deref
28619 Specifies the policy for dereferencing aliases. The default policy is
28620 to never dereference aliases.
28621
28622 Defaults to @samp{disabled}.
28623
28624 @end deftypevr
28625
28626 @deftypevr {@code{nslcd-configuration} parameter} maybe-boolean referrals
28627 Specifies whether automatic referral chasing should be enabled. The
28628 default behaviour is to chase referrals.
28629
28630 Defaults to @samp{disabled}.
28631
28632 @end deftypevr
28633
28634 @deftypevr {@code{nslcd-configuration} parameter} list-of-map-entries maps
28635 This option allows for custom attributes to be looked up instead of the
28636 default RFC 2307 attributes. It is a list of maps, each consisting of
28637 the name of a map, the RFC 2307 attribute to match and the query
28638 expression for the attribute as it is available in the directory.
28639
28640 Defaults to @samp{()}.
28641
28642 @end deftypevr
28643
28644 @deftypevr {@code{nslcd-configuration} parameter} list-of-filter-entries filters
28645 A list of filters consisting of the name of a map to which the filter
28646 applies and an LDAP search filter expression.
28647
28648 Defaults to @samp{()}.
28649
28650 @end deftypevr
28651
28652 @deftypevr {@code{nslcd-configuration} parameter} maybe-number bind-timelimit
28653 Specifies the time limit in seconds to use when connecting to the
28654 directory server. The default value is 10 seconds.
28655
28656 Defaults to @samp{disabled}.
28657
28658 @end deftypevr
28659
28660 @deftypevr {@code{nslcd-configuration} parameter} maybe-number timelimit
28661 Specifies the time limit (in seconds) to wait for a response from the
28662 LDAP server. A value of zero, which is the default, is to wait
28663 indefinitely for searches to be completed.
28664
28665 Defaults to @samp{disabled}.
28666
28667 @end deftypevr
28668
28669 @deftypevr {@code{nslcd-configuration} parameter} maybe-number idle-timelimit
28670 Specifies the period if inactivity (in seconds) after which the con‐
28671 nection to the LDAP server will be closed. The default is not to time
28672 out connections.
28673
28674 Defaults to @samp{disabled}.
28675
28676 @end deftypevr
28677
28678 @deftypevr {@code{nslcd-configuration} parameter} maybe-number reconnect-sleeptime
28679 Specifies the number of seconds to sleep when connecting to all LDAP
28680 servers fails. By default one second is waited between the first
28681 failure and the first retry.
28682
28683 Defaults to @samp{disabled}.
28684
28685 @end deftypevr
28686
28687 @deftypevr {@code{nslcd-configuration} parameter} maybe-number reconnect-retrytime
28688 Specifies the time after which the LDAP server is considered to be
28689 permanently unavailable. Once this time is reached retries will be done
28690 only once per this time period. The default value is 10 seconds.
28691
28692 Defaults to @samp{disabled}.
28693
28694 @end deftypevr
28695
28696 @deftypevr {@code{nslcd-configuration} parameter} maybe-ssl-option ssl
28697 Specifies whether to use SSL/TLS or not (the default is not to). If
28698 'start-tls is specified then StartTLS is used rather than raw LDAP over
28699 SSL.
28700
28701 Defaults to @samp{disabled}.
28702
28703 @end deftypevr
28704
28705 @deftypevr {@code{nslcd-configuration} parameter} maybe-tls-reqcert-option tls-reqcert
28706 Specifies what checks to perform on a server-supplied certificate. The
28707 meaning of the values is described in the ldap.conf(5) manual page.
28708
28709 Defaults to @samp{disabled}.
28710
28711 @end deftypevr
28712
28713 @deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-cacertdir
28714 Specifies the directory containing X.509 certificates for peer authen‐
28715 tication. This parameter is ignored when using GnuTLS.
28716
28717 Defaults to @samp{disabled}.
28718
28719 @end deftypevr
28720
28721 @deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-cacertfile
28722 Specifies the path to the X.509 certificate for peer authentication.
28723
28724 Defaults to @samp{disabled}.
28725
28726 @end deftypevr
28727
28728 @deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-randfile
28729 Specifies the path to an entropy source. This parameter is ignored when
28730 using GnuTLS.
28731
28732 Defaults to @samp{disabled}.
28733
28734 @end deftypevr
28735
28736 @deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-ciphers
28737 Specifies the ciphers to use for TLS as a string.
28738
28739 Defaults to @samp{disabled}.
28740
28741 @end deftypevr
28742
28743 @deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-cert
28744 Specifies the path to the file containing the local certificate for
28745 client TLS authentication.
28746
28747 Defaults to @samp{disabled}.
28748
28749 @end deftypevr
28750
28751 @deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-key
28752 Specifies the path to the file containing the private key for client TLS
28753 authentication.
28754
28755 Defaults to @samp{disabled}.
28756
28757 @end deftypevr
28758
28759 @deftypevr {@code{nslcd-configuration} parameter} maybe-number pagesize
28760 Set this to a number greater than 0 to request paged results from the
28761 LDAP server in accordance with RFC2696. The default (0) is to not
28762 request paged results.
28763
28764 Defaults to @samp{disabled}.
28765
28766 @end deftypevr
28767
28768 @deftypevr {@code{nslcd-configuration} parameter} maybe-ignore-users-option nss-initgroups-ignoreusers
28769 This option prevents group membership lookups through LDAP for the
28770 specified users. Alternatively, the value 'all-local may be used. With
28771 that value nslcd builds a full list of non-LDAP users on startup.
28772
28773 Defaults to @samp{disabled}.
28774
28775 @end deftypevr
28776
28777 @deftypevr {@code{nslcd-configuration} parameter} maybe-number nss-min-uid
28778 This option ensures that LDAP users with a numeric user id lower than
28779 the specified value are ignored.
28780
28781 Defaults to @samp{disabled}.
28782
28783 @end deftypevr
28784
28785 @deftypevr {@code{nslcd-configuration} parameter} maybe-number nss-uid-offset
28786 This option specifies an offset that is added to all LDAP numeric user
28787 ids. This can be used to avoid user id collisions with local users.
28788
28789 Defaults to @samp{disabled}.
28790
28791 @end deftypevr
28792
28793 @deftypevr {@code{nslcd-configuration} parameter} maybe-number nss-gid-offset
28794 This option specifies an offset that is added to all LDAP numeric group
28795 ids. This can be used to avoid user id collisions with local groups.
28796
28797 Defaults to @samp{disabled}.
28798
28799 @end deftypevr
28800
28801 @deftypevr {@code{nslcd-configuration} parameter} maybe-boolean nss-nested-groups
28802 If this option is set, the member attribute of a group may point to
28803 another group. Members of nested groups are also returned in the higher
28804 level group and parent groups are returned when finding groups for a
28805 specific user. The default is not to perform extra searches for nested
28806 groups.
28807
28808 Defaults to @samp{disabled}.
28809
28810 @end deftypevr
28811
28812 @deftypevr {@code{nslcd-configuration} parameter} maybe-boolean nss-getgrent-skipmembers
28813 If this option is set, the group member list is not retrieved when
28814 looking up groups. Lookups for finding which groups a user belongs to
28815 will remain functional so the user will likely still get the correct
28816 groups assigned on login.
28817
28818 Defaults to @samp{disabled}.
28819
28820 @end deftypevr
28821
28822 @deftypevr {@code{nslcd-configuration} parameter} maybe-boolean nss-disable-enumeration
28823 If this option is set, functions which cause all user/group entries to
28824 be loaded from the directory will not succeed in doing so. This can
28825 dramatically reduce LDAP server load in situations where there are a
28826 great number of users and/or groups. This option is not recommended for
28827 most configurations.
28828
28829 Defaults to @samp{disabled}.
28830
28831 @end deftypevr
28832
28833 @deftypevr {@code{nslcd-configuration} parameter} maybe-string validnames
28834 This option can be used to specify how user and group names are verified
28835 within the system. This pattern is used to check all user and group
28836 names that are requested and returned from LDAP.
28837
28838 Defaults to @samp{disabled}.
28839
28840 @end deftypevr
28841
28842 @deftypevr {@code{nslcd-configuration} parameter} maybe-boolean ignorecase
28843 This specifies whether or not to perform searches using case-insensitive
28844 matching. Enabling this could open up the system to authorization
28845 bypass vulnerabilities and introduce nscd cache poisoning
28846 vulnerabilities which allow denial of service.
28847
28848 Defaults to @samp{disabled}.
28849
28850 @end deftypevr
28851
28852 @deftypevr {@code{nslcd-configuration} parameter} maybe-boolean pam-authc-ppolicy
28853 This option specifies whether password policy controls are requested and
28854 handled from the LDAP server when performing user authentication.
28855
28856 Defaults to @samp{disabled}.
28857
28858 @end deftypevr
28859
28860 @deftypevr {@code{nslcd-configuration} parameter} maybe-string pam-authc-search
28861 By default nslcd performs an LDAP search with the user's credentials
28862 after BIND (authentication) to ensure that the BIND operation was
28863 successful. The default search is a simple check to see if the user's
28864 DN exists. A search filter can be specified that will be used instead.
28865 It should return at least one entry.
28866
28867 Defaults to @samp{disabled}.
28868
28869 @end deftypevr
28870
28871 @deftypevr {@code{nslcd-configuration} parameter} maybe-string pam-authz-search
28872 This option allows flexible fine tuning of the authorisation check that
28873 should be performed. The search filter specified is executed and if any
28874 entries match, access is granted, otherwise access is denied.
28875
28876 Defaults to @samp{disabled}.
28877
28878 @end deftypevr
28879
28880 @deftypevr {@code{nslcd-configuration} parameter} maybe-string pam-password-prohibit-message
28881 If this option is set password modification using pam_ldap will be
28882 denied and the specified message will be presented to the user instead.
28883 The message can be used to direct the user to an alternative means of
28884 changing their password.
28885
28886 Defaults to @samp{disabled}.
28887
28888 @end deftypevr
28889
28890 @deftypevr {@code{nslcd-configuration} parameter} list pam-services
28891 List of pam service names for which LDAP authentication should suffice.
28892
28893 Defaults to @samp{()}.
28894
28895 @end deftypevr
28896
28897 @c %end of generated documentation for nslcd-configuration
28898
28899
28900 @node Web Services
28901 @subsection Web Services
28902
28903 @cindex web
28904 @cindex www
28905 @cindex HTTP
28906 The @code{(gnu services web)} module provides the Apache HTTP Server,
28907 the nginx web server, and also a fastcgi wrapper daemon.
28908
28909 @subsubheading Apache HTTP Server
28910
28911 @deffn {Scheme Variable} httpd-service-type
28912 Service type for the @uref{https://httpd.apache.org/,Apache HTTP} server
28913 (@dfn{httpd}). The value for this service type is a
28914 @code{httpd-configuration} record.
28915
28916 A simple example configuration is given below.
28917
28918 @lisp
28919 (service httpd-service-type
28920 (httpd-configuration
28921 (config
28922 (httpd-config-file
28923 (server-name "www.example.com")
28924 (document-root "/srv/http/www.example.com")))))
28925 @end lisp
28926
28927 Other services can also extend the @code{httpd-service-type} to add to
28928 the configuration.
28929
28930 @lisp
28931 (simple-service 'www.example.com-server httpd-service-type
28932 (list
28933 (httpd-virtualhost
28934 "*:80"
28935 (list (string-join '("ServerName www.example.com"
28936 "DocumentRoot /srv/http/www.example.com")
28937 "\n")))))
28938 @end lisp
28939 @end deffn
28940
28941 The details for the @code{httpd-configuration}, @code{httpd-module},
28942 @code{httpd-config-file} and @code{httpd-virtualhost} record types are
28943 given below.
28944
28945 @deffn {Data Type} httpd-configuration
28946 This data type represents the configuration for the httpd service.
28947
28948 @table @asis
28949 @item @code{package} (default: @code{httpd})
28950 The httpd package to use.
28951
28952 @item @code{pid-file} (default: @code{"/var/run/httpd"})
28953 The pid file used by the shepherd-service.
28954
28955 @item @code{config} (default: @code{(httpd-config-file)})
28956 The configuration file to use with the httpd service. The default value
28957 is a @code{httpd-config-file} record, but this can also be a different
28958 G-expression that generates a file, for example a @code{plain-file}. A
28959 file outside of the store can also be specified through a string.
28960
28961 @end table
28962 @end deffn
28963
28964 @deffn {Data Type} httpd-module
28965 This data type represents a module for the httpd service.
28966
28967 @table @asis
28968 @item @code{name}
28969 The name of the module.
28970
28971 @item @code{file}
28972 The file for the module. This can be relative to the httpd package being
28973 used, the absolute location of a file, or a G-expression for a file
28974 within the store, for example @code{(file-append mod-wsgi
28975 "/modules/mod_wsgi.so")}.
28976
28977 @end table
28978 @end deffn
28979
28980 @defvr {Scheme Variable} %default-httpd-modules
28981 A default list of @code{httpd-module} objects.
28982 @end defvr
28983
28984 @deffn {Data Type} httpd-config-file
28985 This data type represents a configuration file for the httpd service.
28986
28987 @table @asis
28988 @item @code{modules} (default: @code{%default-httpd-modules})
28989 The modules to load. Additional modules can be added here, or loaded by
28990 additional configuration.
28991
28992 For example, in order to handle requests for PHP files, you can use Apache’s
28993 @code{mod_proxy_fcgi} module along with @code{php-fpm-service-type}:
28994
28995 @lisp
28996 (service httpd-service-type
28997 (httpd-configuration
28998 (config
28999 (httpd-config-file
29000 (modules (cons*
29001 (httpd-module
29002 (name "proxy_module")
29003 (file "modules/mod_proxy.so"))
29004 (httpd-module
29005 (name "proxy_fcgi_module")
29006 (file "modules/mod_proxy_fcgi.so"))
29007 %default-httpd-modules))
29008 (extra-config (list "\
29009 <FilesMatch \\.php$>
29010 SetHandler \"proxy:unix:/var/run/php-fpm.sock|fcgi://localhost/\"
29011 </FilesMatch>"))))))
29012 (service php-fpm-service-type
29013 (php-fpm-configuration
29014 (socket "/var/run/php-fpm.sock")
29015 (socket-group "httpd")))
29016 @end lisp
29017
29018 @item @code{server-root} (default: @code{httpd})
29019 The @code{ServerRoot} in the configuration file, defaults to the httpd
29020 package. Directives including @code{Include} and @code{LoadModule} are
29021 taken as relative to the server root.
29022
29023 @item @code{server-name} (default: @code{#f})
29024 The @code{ServerName} in the configuration file, used to specify the
29025 request scheme, hostname and port that the server uses to identify
29026 itself.
29027
29028 This doesn't need to be set in the server config, and can be specified
29029 in virtual hosts. The default is @code{#f} to not specify a
29030 @code{ServerName}.
29031
29032 @item @code{document-root} (default: @code{"/srv/http"})
29033 The @code{DocumentRoot} from which files will be served.
29034
29035 @item @code{listen} (default: @code{'("80")})
29036 The list of values for the @code{Listen} directives in the config
29037 file. The value should be a list of strings, when each string can
29038 specify the port number to listen on, and optionally the IP address and
29039 protocol to use.
29040
29041 @item @code{pid-file} (default: @code{"/var/run/httpd"})
29042 The @code{PidFile} to use. This should match the @code{pid-file} set in
29043 the @code{httpd-configuration} so that the Shepherd service is
29044 configured correctly.
29045
29046 @item @code{error-log} (default: @code{"/var/log/httpd/error_log"})
29047 The @code{ErrorLog} to which the server will log errors.
29048
29049 @item @code{user} (default: @code{"httpd"})
29050 The @code{User} which the server will answer requests as.
29051
29052 @item @code{group} (default: @code{"httpd"})
29053 The @code{Group} which the server will answer requests as.
29054
29055 @item @code{extra-config} (default: @code{(list "TypesConfig etc/httpd/mime.types")})
29056 A flat list of strings and G-expressions which will be added to the end
29057 of the configuration file.
29058
29059 Any values which the service is extended with will be appended to this
29060 list.
29061
29062 @end table
29063 @end deffn
29064
29065 @deffn {Data Type} httpd-virtualhost
29066 This data type represents a virtualhost configuration block for the httpd service.
29067
29068 These should be added to the extra-config for the httpd-service.
29069
29070 @lisp
29071 (simple-service 'www.example.com-server httpd-service-type
29072 (list
29073 (httpd-virtualhost
29074 "*:80"
29075 (list (string-join '("ServerName www.example.com"
29076 "DocumentRoot /srv/http/www.example.com")
29077 "\n")))))
29078 @end lisp
29079
29080 @table @asis
29081 @item @code{addresses-and-ports}
29082 The addresses and ports for the @code{VirtualHost} directive.
29083
29084 @item @code{contents}
29085 The contents of the @code{VirtualHost} directive, this should be a list
29086 of strings and G-expressions.
29087
29088 @end table
29089 @end deffn
29090
29091 @anchor{NGINX}
29092 @subsubheading NGINX
29093
29094 @deffn {Scheme Variable} nginx-service-type
29095 Service type for the @uref{https://nginx.org/,NGinx} web server. The
29096 value for this service type is a @code{<nginx-configuration>} record.
29097
29098 A simple example configuration is given below.
29099
29100 @lisp
29101 (service nginx-service-type
29102 (nginx-configuration
29103 (server-blocks
29104 (list (nginx-server-configuration
29105 (server-name '("www.example.com"))
29106 (root "/srv/http/www.example.com"))))))
29107 @end lisp
29108
29109 In addition to adding server blocks to the service configuration
29110 directly, this service can be extended by other services to add server
29111 blocks, as in this example:
29112
29113 @lisp
29114 (simple-service 'my-extra-server nginx-service-type
29115 (list (nginx-server-configuration
29116 (root "/srv/http/extra-website")
29117 (try-files (list "$uri" "$uri/index.html")))))
29118 @end lisp
29119 @end deffn
29120
29121 At startup, @command{nginx} has not yet read its configuration file, so
29122 it uses a default file to log error messages. If it fails to load its
29123 configuration file, that is where error messages are logged. After the
29124 configuration file is loaded, the default error log file changes as per
29125 configuration. In our case, startup error messages can be found in
29126 @file{/var/run/nginx/logs/error.log}, and after configuration in
29127 @file{/var/log/nginx/error.log}. The second location can be changed
29128 with the @var{log-directory} configuration option.
29129
29130 @deffn {Data Type} nginx-configuration
29131 This data type represents the configuration for NGinx. Some
29132 configuration can be done through this and the other provided record
29133 types, or alternatively, a config file can be provided.
29134
29135 @table @asis
29136 @item @code{nginx} (default: @code{nginx})
29137 The nginx package to use.
29138
29139 @item @code{shepherd-requirement} (default: @code{'()})
29140 This is a list of symbols naming Shepherd services the nginx service
29141 will depend on.
29142
29143 This is useful if you would like @command{nginx} to be started after a
29144 back-end web server or a logging service such as Anonip has been
29145 started.
29146
29147 @item @code{log-directory} (default: @code{"/var/log/nginx"})
29148 The directory to which NGinx will write log files.
29149
29150 @item @code{run-directory} (default: @code{"/var/run/nginx"})
29151 The directory in which NGinx will create a pid file, and write temporary
29152 files.
29153
29154 @item @code{server-blocks} (default: @code{'()})
29155 A list of @dfn{server blocks} to create in the generated configuration
29156 file, the elements should be of type
29157 @code{<nginx-server-configuration>}.
29158
29159 The following example would setup NGinx to serve @code{www.example.com}
29160 from the @code{/srv/http/www.example.com} directory, without using
29161 HTTPS.
29162 @lisp
29163 (service nginx-service-type
29164 (nginx-configuration
29165 (server-blocks
29166 (list (nginx-server-configuration
29167 (server-name '("www.example.com"))
29168 (root "/srv/http/www.example.com"))))))
29169 @end lisp
29170
29171 @item @code{upstream-blocks} (default: @code{'()})
29172 A list of @dfn{upstream blocks} to create in the generated configuration
29173 file, the elements should be of type
29174 @code{<nginx-upstream-configuration>}.
29175
29176 Configuring upstreams through the @code{upstream-blocks} can be useful
29177 when combined with @code{locations} in the
29178 @code{<nginx-server-configuration>} records. The following example
29179 creates a server configuration with one location configuration, that
29180 will proxy requests to a upstream configuration, which will handle
29181 requests with two servers.
29182
29183 @lisp
29184 (service
29185 nginx-service-type
29186 (nginx-configuration
29187 (server-blocks
29188 (list (nginx-server-configuration
29189 (server-name '("www.example.com"))
29190 (root "/srv/http/www.example.com")
29191 (locations
29192 (list
29193 (nginx-location-configuration
29194 (uri "/path1")
29195 (body '("proxy_pass http://server-proxy;"))))))))
29196 (upstream-blocks
29197 (list (nginx-upstream-configuration
29198 (name "server-proxy")
29199 (servers (list "server1.example.com"
29200 "server2.example.com")))))))
29201 @end lisp
29202
29203 @item @code{file} (default: @code{#f})
29204 If a configuration @var{file} is provided, this will be used, rather than
29205 generating a configuration file from the provided @code{log-directory},
29206 @code{run-directory}, @code{server-blocks} and @code{upstream-blocks}. For
29207 proper operation, these arguments should match what is in @var{file} to ensure
29208 that the directories are created when the service is activated.
29209
29210 This can be useful if you have an existing configuration file, or it's
29211 not possible to do what is required through the other parts of the
29212 nginx-configuration record.
29213
29214 @item @code{server-names-hash-bucket-size} (default: @code{#f})
29215 Bucket size for the server names hash tables, defaults to @code{#f} to
29216 use the size of the processors cache line.
29217
29218 @item @code{server-names-hash-bucket-max-size} (default: @code{#f})
29219 Maximum bucket size for the server names hash tables.
29220
29221 @item @code{modules} (default: @code{'()})
29222 List of nginx dynamic modules to load. This should be a list of file
29223 names of loadable modules, as in this example:
29224
29225 @lisp
29226 (modules
29227 (list
29228 (file-append nginx-accept-language-module "\
29229 /etc/nginx/modules/ngx_http_accept_language_module.so")
29230 (file-append nginx-lua-module "\
29231 /etc/nginx/modules/ngx_http_lua_module.so")))
29232 @end lisp
29233
29234 @item @code{lua-package-path} (default: @code{'()})
29235 List of nginx lua packages to load. This should be a list of package
29236 names of loadable lua modules, as in this example:
29237
29238 @lisp
29239 (lua-package-path (list lua-resty-core
29240 lua-resty-lrucache
29241 lua-resty-signal
29242 lua-tablepool
29243 lua-resty-shell))
29244 @end lisp
29245
29246 @item @code{lua-package-cpath} (default: @code{'()})
29247 List of nginx lua C packages to load. This should be a list of package
29248 names of loadable lua C modules, as in this example:
29249
29250 @lisp
29251 (lua-package-cpath (list lua-resty-signal))
29252 @end lisp
29253
29254 @item @code{global-directives} (default: @code{'((events . ()))})
29255 Association list of global directives for the top level of the nginx
29256 configuration. Values may themselves be association lists.
29257
29258 @lisp
29259 (global-directives
29260 `((worker_processes . 16)
29261 (pcre_jit . on)
29262 (events . ((worker_connections . 1024)))))
29263 @end lisp
29264
29265 @item @code{extra-content} (default: @code{""})
29266 Extra content for the @code{http} block. Should be string or a string
29267 valued G-expression.
29268
29269 @end table
29270 @end deffn
29271
29272 @anchor{nginx-server-configuration}
29273 @deftp {Data Type} nginx-server-configuration
29274 Data type representing the configuration of an nginx server block.
29275 This type has the following parameters:
29276
29277 @table @asis
29278 @item @code{listen} (default: @code{'("80" "443 ssl")})
29279 Each @code{listen} directive sets the address and port for IP, or the
29280 path for a UNIX-domain socket on which the server will accept requests.
29281 Both address and port, or only address or only port can be specified.
29282 An address may also be a hostname, for example:
29283
29284 @lisp
29285 '("127.0.0.1:8000" "127.0.0.1" "8000" "*:8000" "localhost:8000")
29286 @end lisp
29287
29288 @item @code{server-name} (default: @code{(list 'default)})
29289 A list of server names this server represents. @code{'default} represents the
29290 default server for connections matching no other server.
29291
29292 @item @code{root} (default: @code{"/srv/http"})
29293 Root of the website nginx will serve.
29294
29295 @item @code{locations} (default: @code{'()})
29296 A list of @dfn{nginx-location-configuration} or
29297 @dfn{nginx-named-location-configuration} records to use within this
29298 server block.
29299
29300 @item @code{index} (default: @code{(list "index.html")})
29301 Index files to look for when clients ask for a directory. If it cannot be found,
29302 Nginx will send the list of files in the directory.
29303
29304 @item @code{try-files} (default: @code{'()})
29305 A list of files whose existence is checked in the specified order.
29306 @code{nginx} will use the first file it finds to process the request.
29307
29308 @item @code{ssl-certificate} (default: @code{#f})
29309 Where to find the certificate for secure connections. Set it to @code{#f} if
29310 you don't have a certificate or you don't want to use HTTPS.
29311
29312 @item @code{ssl-certificate-key} (default: @code{#f})
29313 Where to find the private key for secure connections. Set it to @code{#f} if
29314 you don't have a key or you don't want to use HTTPS.
29315
29316 @item @code{server-tokens?} (default: @code{#f})
29317 Whether the server should add its configuration to response.
29318
29319 @item @code{raw-content} (default: @code{'()})
29320 A list of raw lines added to the server block.
29321
29322 @end table
29323 @end deftp
29324
29325 @deftp {Data Type} nginx-upstream-configuration
29326 Data type representing the configuration of an nginx @code{upstream}
29327 block. This type has the following parameters:
29328
29329 @table @asis
29330 @item @code{name}
29331 Name for this group of servers.
29332
29333 @item @code{servers}
29334 Specify the addresses of the servers in the group. The address can be
29335 specified as a IP address (e.g.@: @samp{127.0.0.1}), domain name
29336 (e.g.@: @samp{backend1.example.com}) or a path to a UNIX socket using the
29337 prefix @samp{unix:}. For addresses using an IP address or domain name,
29338 the default port is 80, and a different port can be specified
29339 explicitly.
29340
29341 @item @code{extra-content}
29342 A string or list of strings to add to the upstream block.
29343
29344 @end table
29345 @end deftp
29346
29347 @deftp {Data Type} nginx-location-configuration
29348 Data type representing the configuration of an nginx @code{location}
29349 block. This type has the following parameters:
29350
29351 @table @asis
29352 @item @code{uri}
29353 URI which this location block matches.
29354
29355 @anchor{nginx-location-configuration body}
29356 @item @code{body}
29357 Body of the location block, specified as a list of strings. This can contain
29358 many
29359 configuration directives. For example, to pass requests to a upstream
29360 server group defined using an @code{nginx-upstream-configuration} block,
29361 the following directive would be specified in the body @samp{(list "proxy_pass
29362 http://upstream-name;")}.
29363
29364 @end table
29365 @end deftp
29366
29367 @deftp {Data Type} nginx-named-location-configuration
29368 Data type representing the configuration of an nginx named location
29369 block. Named location blocks are used for request redirection, and not
29370 used for regular request processing. This type has the following
29371 parameters:
29372
29373 @table @asis
29374 @item @code{name}
29375 Name to identify this location block.
29376
29377 @item @code{body}
29378 @xref{nginx-location-configuration body}, as the body for named location
29379 blocks can be used in a similar way to the
29380 @code{nginx-location-configuration body}. One restriction is that the
29381 body of a named location block cannot contain location blocks.
29382
29383 @end table
29384 @end deftp
29385
29386 @subsubheading Varnish Cache
29387 @cindex Varnish
29388 Varnish is a fast cache server that sits in between web applications
29389 and end users. It proxies requests from clients and caches the
29390 accessed URLs such that multiple requests for the same resource only
29391 creates one request to the back-end.
29392
29393 @defvr {Scheme Variable} varnish-service-type
29394 Service type for the Varnish daemon.
29395 @end defvr
29396
29397 @deftp {Data Type} varnish-configuration
29398 Data type representing the @code{varnish} service configuration.
29399 This type has the following parameters:
29400
29401 @table @asis
29402 @item @code{package} (default: @code{varnish})
29403 The Varnish package to use.
29404
29405 @item @code{name} (default: @code{"default"})
29406 A name for this Varnish instance. Varnish will create a directory in
29407 @file{/var/varnish/} with this name and keep temporary files there. If
29408 the name starts with a forward slash, it is interpreted as an absolute
29409 directory name.
29410
29411 Pass the @code{-n} argument to other Varnish programs to connect to the
29412 named instance, e.g.@: @command{varnishncsa -n default}.
29413
29414 @item @code{backend} (default: @code{"localhost:8080"})
29415 The backend to use. This option has no effect if @code{vcl} is set.
29416
29417 @item @code{vcl} (default: #f)
29418 The @dfn{VCL} (Varnish Configuration Language) program to run. If this
29419 is @code{#f}, Varnish will proxy @code{backend} using the default
29420 configuration. Otherwise this must be a file-like object with valid
29421 VCL syntax.
29422
29423 @c Varnish does not support HTTPS, so keep this URL to avoid confusion.
29424 For example, to mirror @url{https://www.gnu.org,www.gnu.org} with VCL you
29425 can do something along these lines:
29426
29427 @lisp
29428 (define %gnu-mirror
29429 (plain-file "gnu.vcl"
29430 "vcl 4.1;
29431 backend gnu @{ .host = \"www.gnu.org\"; @}"))
29432
29433 (operating-system
29434 ;; @dots{}
29435 (services (cons (service varnish-service-type
29436 (varnish-configuration
29437 (listen '(":80"))
29438 (vcl %gnu-mirror)))
29439 %base-services)))
29440 @end lisp
29441
29442 The configuration of an already running Varnish instance can be inspected
29443 and changed using the @command{varnishadm} program.
29444
29445 Consult the @url{https://varnish-cache.org/docs/,Varnish User Guide} and
29446 @url{https://book.varnish-software.com/4.0/,Varnish Book} for
29447 comprehensive documentation on Varnish and its configuration language.
29448
29449 @item @code{listen} (default: @code{'("localhost:80")})
29450 List of addresses Varnish will listen on.
29451
29452 @item @code{storage} (default: @code{'("malloc,128m")})
29453 List of storage backends that will be available in VCL.
29454
29455 @item @code{parameters} (default: @code{'()})
29456 List of run-time parameters in the form @code{'(("parameter" . "value"))}.
29457
29458 @item @code{extra-options} (default: @code{'()})
29459 Additional arguments to pass to the @command{varnishd} process.
29460
29461 @end table
29462 @end deftp
29463
29464 @subsubheading Patchwork
29465 @cindex Patchwork
29466 Patchwork is a patch tracking system. It can collect patches sent to a
29467 mailing list, and display them in a web interface.
29468
29469 @defvr {Scheme Variable} patchwork-service-type
29470 Service type for Patchwork.
29471 @end defvr
29472
29473 The following example is an example of a minimal service for Patchwork, for
29474 the @code{patchwork.example.com} domain.
29475
29476 @lisp
29477 (service patchwork-service-type
29478 (patchwork-configuration
29479 (domain "patchwork.example.com")
29480 (settings-module
29481 (patchwork-settings-module
29482 (allowed-hosts (list domain))
29483 (default-from-email "patchwork@@patchwork.example.com")))
29484 (getmail-retriever-config
29485 (getmail-retriever-configuration
29486 (type "SimpleIMAPSSLRetriever")
29487 (server "imap.example.com")
29488 (port 993)
29489 (username "patchwork")
29490 (password-command
29491 (list (file-append coreutils "/bin/cat")
29492 "/etc/getmail-patchwork-imap-password"))
29493 (extra-parameters
29494 '((mailboxes . ("Patches"))))))))
29495
29496 @end lisp
29497
29498 There are three records for configuring the Patchwork service. The
29499 @code{<patchwork-configuration>} relates to the configuration for Patchwork
29500 within the HTTPD service.
29501
29502 The @code{settings-module} field within the @code{<patchwork-configuration>}
29503 record can be populated with the @code{<patchwork-settings-module>} record,
29504 which describes a settings module that is generated within the Guix store.
29505
29506 For the @code{database-configuration} field within the
29507 @code{<patchwork-settings-module>}, the
29508 @code{<patchwork-database-configuration>} must be used.
29509
29510 @deftp {Data Type} patchwork-configuration
29511 Data type representing the Patchwork service configuration. This type has the
29512 following parameters:
29513
29514 @table @asis
29515 @item @code{patchwork} (default: @code{patchwork})
29516 The Patchwork package to use.
29517
29518 @item @code{domain}
29519 The domain to use for Patchwork, this is used in the HTTPD service virtual
29520 host.
29521
29522 @item @code{settings-module}
29523 The settings module to use for Patchwork. As a Django application, Patchwork
29524 is configured with a Python module containing the settings. This can either be
29525 an instance of the @code{<patchwork-settings-module>} record, any other record
29526 that represents the settings in the store, or a directory outside of the
29527 store.
29528
29529 @item @code{static-path} (default: @code{"/static/"})
29530 The path under which the HTTPD service should serve the static files.
29531
29532 @item @code{getmail-retriever-config}
29533 The getmail-retriever-configuration record value to use with
29534 Patchwork. Getmail will be configured with this value, the messages will be
29535 delivered to Patchwork.
29536
29537 @end table
29538 @end deftp
29539
29540 @deftp {Data Type} patchwork-settings-module
29541 Data type representing a settings module for Patchwork. Some of these
29542 settings relate directly to Patchwork, but others relate to Django, the web
29543 framework used by Patchwork, or the Django Rest Framework library. This type
29544 has the following parameters:
29545
29546 @table @asis
29547 @item @code{database-configuration} (default: @code{(patchwork-database-configuration)})
29548 The database connection settings used for Patchwork. See the
29549 @code{<patchwork-database-configuration>} record type for more information.
29550
29551 @item @code{secret-key-file} (default: @code{"/etc/patchwork/django-secret-key"})
29552 Patchwork, as a Django web application uses a secret key for cryptographically
29553 signing values. This file should contain a unique unpredictable value.
29554
29555 If this file does not exist, it will be created and populated with a random
29556 value by the patchwork-setup shepherd service.
29557
29558 This setting relates to Django.
29559
29560 @item @code{allowed-hosts}
29561 A list of valid hosts for this Patchwork service. This should at least include
29562 the domain specified in the @code{<patchwork-configuration>} record.
29563
29564 This is a Django setting.
29565
29566 @item @code{default-from-email}
29567 The email address from which Patchwork should send email by default.
29568
29569 This is a Patchwork setting.
29570
29571 @item @code{static-url} (default: @code{#f})
29572 The URL to use when serving static assets. It can be part of a URL, or a full
29573 URL, but must end in a @code{/}.
29574
29575 If the default value is used, the @code{static-path} value from the
29576 @code{<patchwork-configuration>} record will be used.
29577
29578 This is a Django setting.
29579
29580 @item @code{admins} (default: @code{'()})
29581 Email addresses to send the details of errors that occur. Each value should
29582 be a list containing two elements, the name and then the email address.
29583
29584 This is a Django setting.
29585
29586 @item @code{debug?} (default: @code{#f})
29587 Whether to run Patchwork in debug mode. If set to @code{#t}, detailed error
29588 messages will be shown.
29589
29590 This is a Django setting.
29591
29592 @item @code{enable-rest-api?} (default: @code{#t})
29593 Whether to enable the Patchwork REST API.
29594
29595 This is a Patchwork setting.
29596
29597 @item @code{enable-xmlrpc?} (default: @code{#t})
29598 Whether to enable the XML RPC API.
29599
29600 This is a Patchwork setting.
29601
29602 @item @code{force-https-links?} (default: @code{#t})
29603 Whether to use HTTPS links on Patchwork pages.
29604
29605 This is a Patchwork setting.
29606
29607 @item @code{extra-settings} (default: @code{""})
29608 Extra code to place at the end of the Patchwork settings module.
29609
29610 @end table
29611 @end deftp
29612
29613 @deftp {Data Type} patchwork-database-configuration
29614 Data type representing the database configuration for Patchwork.
29615
29616 @table @asis
29617 @item @code{engine} (default: @code{"django.db.backends.postgresql_psycopg2"})
29618 The database engine to use.
29619
29620 @item @code{name} (default: @code{"patchwork"})
29621 The name of the database to use.
29622
29623 @item @code{user} (default: @code{"httpd"})
29624 The user to connect to the database as.
29625
29626 @item @code{password} (default: @code{""})
29627 The password to use when connecting to the database.
29628
29629 @item @code{host} (default: @code{""})
29630 The host to make the database connection to.
29631
29632 @item @code{port} (default: @code{""})
29633 The port on which to connect to the database.
29634
29635 @end table
29636 @end deftp
29637
29638 @subsubheading Mumi
29639
29640 @cindex Mumi, Debbugs Web interface
29641 @cindex Debbugs, Mumi Web interface
29642 @uref{https://git.elephly.net/gitweb.cgi?p=software/mumi.git, Mumi} is a
29643 Web interface to the Debbugs bug tracker, by default for
29644 @uref{https://bugs.gnu.org, the GNU instance}. Mumi is a Web server,
29645 but it also fetches and indexes mail retrieved from Debbugs.
29646
29647 @defvr {Scheme Variable} mumi-service-type
29648 This is the service type for Mumi.
29649 @end defvr
29650
29651 @deftp {Data Type} mumi-configuration
29652 Data type representing the Mumi service configuration. This type has the
29653 following fields:
29654
29655 @table @asis
29656 @item @code{mumi} (default: @code{mumi})
29657 The Mumi package to use.
29658
29659 @item @code{mailer?} (default: @code{#true})
29660 Whether to enable or disable the mailer component.
29661
29662 @item @code{mumi-configuration-sender}
29663 The email address used as the sender for comments.
29664
29665 @item @code{mumi-configuration-smtp}
29666 A URI to configure the SMTP settings for Mailutils. This could be
29667 something like @code{sendmail:///path/to/bin/msmtp} or any other URI
29668 supported by Mailutils. @xref{SMTP Mailboxes, SMTP Mailboxes,,
29669 mailutils, GNU@tie{}Mailutils}.
29670
29671 @end table
29672 @end deftp
29673
29674
29675 @subsubheading FastCGI
29676 @cindex fastcgi
29677 @cindex fcgiwrap
29678 FastCGI is an interface between the front-end and the back-end of a web
29679 service. It is a somewhat legacy facility; new web services should
29680 generally just talk HTTP between the front-end and the back-end.
29681 However there are a number of back-end services such as PHP or the
29682 optimized HTTP Git repository access that use FastCGI, so we have
29683 support for it in Guix.
29684
29685 To use FastCGI, you configure the front-end web server (e.g., nginx) to
29686 dispatch some subset of its requests to the fastcgi backend, which
29687 listens on a local TCP or UNIX socket. There is an intermediary
29688 @code{fcgiwrap} program that sits between the actual backend process and
29689 the web server. The front-end indicates which backend program to run,
29690 passing that information to the @code{fcgiwrap} process.
29691
29692 @defvr {Scheme Variable} fcgiwrap-service-type
29693 A service type for the @code{fcgiwrap} FastCGI proxy.
29694 @end defvr
29695
29696 @deftp {Data Type} fcgiwrap-configuration
29697 Data type representing the configuration of the @code{fcgiwrap} service.
29698 This type has the following parameters:
29699 @table @asis
29700 @item @code{package} (default: @code{fcgiwrap})
29701 The fcgiwrap package to use.
29702
29703 @item @code{socket} (default: @code{tcp:127.0.0.1:9000})
29704 The socket on which the @code{fcgiwrap} process should listen, as a
29705 string. Valid @var{socket} values include
29706 @code{unix:@var{/path/to/unix/socket}},
29707 @code{tcp:@var{dot.ted.qu.ad}:@var{port}} and
29708 @code{tcp6:[@var{ipv6_addr}]:port}.
29709
29710 @item @code{user} (default: @code{fcgiwrap})
29711 @itemx @code{group} (default: @code{fcgiwrap})
29712 The user and group names, as strings, under which to run the
29713 @code{fcgiwrap} process. The @code{fastcgi} service will ensure that if
29714 the user asks for the specific user or group names @code{fcgiwrap} that
29715 the corresponding user and/or group is present on the system.
29716
29717 It is possible to configure a FastCGI-backed web service to pass HTTP
29718 authentication information from the front-end to the back-end, and to
29719 allow @code{fcgiwrap} to run the back-end process as a corresponding
29720 local user. To enable this capability on the back-end, run
29721 @code{fcgiwrap} as the @code{root} user and group. Note that this
29722 capability also has to be configured on the front-end as well.
29723 @end table
29724 @end deftp
29725
29726 @anchor{PHP-FPM}
29727 @subsubheading PHP-FPM
29728 @cindex php-fpm
29729 PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI implementation
29730 with some additional features useful for sites of any size.
29731
29732 These features include:
29733 @itemize @bullet
29734 @item Adaptive process spawning
29735 @item Basic statistics (similar to Apache's mod_status)
29736 @item Advanced process management with graceful stop/start
29737 @item Ability to start workers with different uid/gid/chroot/environment
29738 and different php.ini (replaces safe_mode)
29739 @item Stdout & stderr logging
29740 @item Emergency restart in case of accidental opcode cache destruction
29741 @item Accelerated upload support
29742 @item Support for a "slowlog"
29743 @item Enhancements to FastCGI, such as fastcgi_finish_request() -
29744 a special function to finish request & flush all data while continuing to do
29745 something time-consuming (video converting, stats processing, etc.)
29746 @end itemize
29747 ...@: and much more.
29748
29749 @defvr {Scheme Variable} php-fpm-service-type
29750 A Service type for @code{php-fpm}.
29751 @end defvr
29752
29753 @deftp {Data Type} php-fpm-configuration
29754 Data Type for php-fpm service configuration.
29755 @table @asis
29756 @item @code{php} (default: @code{php})
29757 The php package to use.
29758 @item @code{socket} (default: @code{(string-append "/var/run/php" (version-major (package-version php)) "-fpm.sock")})
29759 The address on which to accept FastCGI requests. Valid syntaxes are:
29760 @table @asis
29761 @item @code{"ip.add.re.ss:port"}
29762 Listen on a TCP socket to a specific address on a specific port.
29763 @item @code{"port"}
29764 Listen on a TCP socket to all addresses on a specific port.
29765 @item @code{"/path/to/unix/socket"}
29766 Listen on a unix socket.
29767 @end table
29768
29769 @item @code{user} (default: @code{php-fpm})
29770 User who will own the php worker processes.
29771 @item @code{group} (default: @code{php-fpm})
29772 Group of the worker processes.
29773 @item @code{socket-user} (default: @code{php-fpm})
29774 User who can speak to the php-fpm socket.
29775 @item @code{socket-group} (default: @code{nginx})
29776 Group that can speak to the php-fpm socket.
29777 @item @code{pid-file} (default: @code{(string-append "/var/run/php" (version-major (package-version php)) "-fpm.pid")})
29778 The process id of the php-fpm process is written to this file
29779 once the service has started.
29780 @item @code{log-file} (default: @code{(string-append "/var/log/php" (version-major (package-version php)) "-fpm.log")})
29781 Log for the php-fpm master process.
29782 @item @code{process-manager} (default: @code{(php-fpm-dynamic-process-manager-configuration)})
29783 Detailed settings for the php-fpm process manager.
29784 Must be one of:
29785 @table @asis
29786 @item @code{<php-fpm-dynamic-process-manager-configuration>}
29787 @item @code{<php-fpm-static-process-manager-configuration>}
29788 @item @code{<php-fpm-on-demand-process-manager-configuration>}
29789 @end table
29790 @item @code{display-errors} (default @code{#f})
29791 Determines whether php errors and warning should be sent to clients
29792 and displayed in their browsers.
29793 This is useful for local php development, but a security risk for public sites,
29794 as error messages can reveal passwords and personal data.
29795 @item @code{timezone} (default @code{#f})
29796 Specifies @code{php_admin_value[date.timezone]} parameter.
29797 @item @code{workers-logfile} (default @code{(string-append "/var/log/php" (version-major (package-version php)) "-fpm.www.log")})
29798 This file will log the @code{stderr} outputs of php worker processes.
29799 Can be set to @code{#f} to disable logging.
29800 @item @code{file} (default @code{#f})
29801 An optional override of the whole configuration.
29802 You can use the @code{mixed-text-file} function or an absolute filepath for it.
29803 @item @code{php-ini-file} (default @code{#f})
29804 An optional override of the default php settings.
29805 It may be any ``file-like'' object (@pxref{G-Expressions, file-like objects}).
29806 You can use the @code{mixed-text-file} function or an absolute filepath for it.
29807
29808 For local development it is useful to set a higher timeout and memory
29809 limit for spawned php processes. This be accomplished with the
29810 following operating system configuration snippet:
29811 @lisp
29812 (define %local-php-ini
29813 (plain-file "php.ini"
29814 "memory_limit = 2G
29815 max_execution_time = 1800"))
29816
29817 (operating-system
29818 ;; @dots{}
29819 (services (cons (service php-fpm-service-type
29820 (php-fpm-configuration
29821 (php-ini-file %local-php-ini)))
29822 %base-services)))
29823 @end lisp
29824
29825 Consult the @url{https://www.php.net/manual/en/ini.core.php,core php.ini
29826 directives} for comprehensive documentation on the acceptable
29827 @file{php.ini} directives.
29828 @end table
29829 @end deftp
29830
29831 @deftp {Data type} php-fpm-dynamic-process-manager-configuration
29832 Data Type for the @code{dynamic} php-fpm process manager. With the
29833 @code{dynamic} process manager, spare worker processes are kept around
29834 based on its configured limits.
29835 @table @asis
29836 @item @code{max-children} (default: @code{5})
29837 Maximum of worker processes.
29838 @item @code{start-servers} (default: @code{2})
29839 How many worker processes should be started on start-up.
29840 @item @code{min-spare-servers} (default: @code{1})
29841 How many spare worker processes should be kept around at minimum.
29842 @item @code{max-spare-servers} (default: @code{3})
29843 How many spare worker processes should be kept around at maximum.
29844 @end table
29845 @end deftp
29846
29847 @deftp {Data type} php-fpm-static-process-manager-configuration
29848 Data Type for the @code{static} php-fpm process manager. With the
29849 @code{static} process manager, an unchanging number of worker processes
29850 are created.
29851 @table @asis
29852 @item @code{max-children} (default: @code{5})
29853 Maximum of worker processes.
29854 @end table
29855 @end deftp
29856
29857 @deftp {Data type} php-fpm-on-demand-process-manager-configuration
29858 Data Type for the @code{on-demand} php-fpm process manager. With the
29859 @code{on-demand} process manager, worker processes are only created as
29860 requests arrive.
29861 @table @asis
29862 @item @code{max-children} (default: @code{5})
29863 Maximum of worker processes.
29864 @item @code{process-idle-timeout} (default: @code{10})
29865 The time in seconds after which a process with no requests is killed.
29866 @end table
29867 @end deftp
29868
29869
29870 @deffn {Scheme Procedure} nginx-php-location @
29871 [#:nginx-package nginx] @
29872 [socket (string-append "/var/run/php" @
29873 (version-major (package-version php)) @
29874 "-fpm.sock")]
29875 A helper function to quickly add php to an @code{nginx-server-configuration}.
29876 @end deffn
29877
29878 A simple services setup for nginx with php can look like this:
29879 @lisp
29880 (services (cons* (service dhcp-client-service-type)
29881 (service php-fpm-service-type)
29882 (service nginx-service-type
29883 (nginx-server-configuration
29884 (server-name '("example.com"))
29885 (root "/srv/http/")
29886 (locations
29887 (list (nginx-php-location)))
29888 (listen '("80"))
29889 (ssl-certificate #f)
29890 (ssl-certificate-key #f)))
29891 %base-services))
29892 @end lisp
29893
29894 @cindex cat-avatar-generator
29895 The cat avatar generator is a simple service to demonstrate the use of php-fpm
29896 in @code{Nginx}. It is used to generate cat avatar from a seed, for instance
29897 the hash of a user's email address.
29898
29899 @deffn {Scheme Procedure} cat-avatar-generator-service @
29900 [#:cache-dir "/var/cache/cat-avatar-generator"] @
29901 [#:package cat-avatar-generator] @
29902 [#:configuration (nginx-server-configuration)]
29903 Returns an nginx-server-configuration that inherits @code{configuration}. It
29904 extends the nginx configuration to add a server block that serves @code{package},
29905 a version of cat-avatar-generator. During execution, cat-avatar-generator will
29906 be able to use @code{cache-dir} as its cache directory.
29907 @end deffn
29908
29909 A simple setup for cat-avatar-generator can look like this:
29910 @lisp
29911 (services (cons* (cat-avatar-generator-service
29912 #:configuration
29913 (nginx-server-configuration
29914 (server-name '("example.com"))))
29915 ...
29916 %base-services))
29917 @end lisp
29918
29919 @subsubheading Hpcguix-web
29920
29921 @cindex hpcguix-web
29922 The @uref{https://github.com/UMCUGenetics/hpcguix-web/, hpcguix-web}
29923 program is a customizable web interface to browse Guix packages,
29924 initially designed for users of high-performance computing (HPC)
29925 clusters.
29926
29927 @defvr {Scheme Variable} hpcguix-web-service-type
29928 The service type for @code{hpcguix-web}.
29929 @end defvr
29930
29931 @deftp {Data Type} hpcguix-web-configuration
29932 Data type for the hpcguix-web service configuration.
29933
29934 @table @asis
29935 @item @code{specs}
29936 A gexp (@pxref{G-Expressions}) specifying the hpcguix-web service
29937 configuration. The main items available in this spec are:
29938
29939 @table @asis
29940 @item @code{title-prefix} (default: @code{"hpcguix | "})
29941 The page title prefix.
29942
29943 @item @code{guix-command} (default: @code{"guix"})
29944 The @command{guix} command.
29945
29946 @item @code{package-filter-proc} (default: @code{(const #t)})
29947 A procedure specifying how to filter packages that are displayed.
29948
29949 @item @code{package-page-extension-proc} (default: @code{(const '())})
29950 Extension package for @code{hpcguix-web}.
29951
29952 @item @code{menu} (default: @code{'()})
29953 Additional entry in page @code{menu}.
29954
29955 @item @code{channels} (default: @code{%default-channels})
29956 List of channels from which the package list is built (@pxref{Channels}).
29957
29958 @item @code{package-list-expiration} (default: @code{(* 12 3600)})
29959 The expiration time, in seconds, after which the package list is rebuilt from
29960 the latest instances of the given channels.
29961 @end table
29962
29963 See the hpcguix-web repository for a
29964 @uref{https://github.com/UMCUGenetics/hpcguix-web/blob/master/hpcweb-configuration.scm,
29965 complete example}.
29966
29967 @item @code{package} (default: @code{hpcguix-web})
29968 The hpcguix-web package to use.
29969
29970 @item @code{address} (default: @code{"127.0.0.1"})
29971 The IP address to listen to.
29972
29973 @item @code{port} (default: @code{5000})
29974 The port number to listen to.
29975 @end table
29976 @end deftp
29977
29978 A typical hpcguix-web service declaration looks like this:
29979
29980 @lisp
29981 (service hpcguix-web-service-type
29982 (hpcguix-web-configuration
29983 (specs
29984 #~(define site-config
29985 (hpcweb-configuration
29986 (title-prefix "Guix-HPC - ")
29987 (menu '(("/about" "ABOUT"))))))))
29988 @end lisp
29989
29990 @quotation Note
29991 The hpcguix-web service periodically updates the package list it publishes by
29992 pulling channels from Git. To that end, it needs to access X.509 certificates
29993 so that it can authenticate Git servers when communicating over HTTPS, and it
29994 assumes that @file{/etc/ssl/certs} contains those certificates.
29995
29996 Thus, make sure to add @code{nss-certs} or another certificate package to the
29997 @code{packages} field of your configuration. @ref{X.509 Certificates}, for
29998 more information on X.509 certificates.
29999 @end quotation
30000
30001 @subsubheading gmnisrv
30002
30003 @cindex gmnisrv
30004 The @uref{https://git.sr.ht/~sircmpwn/gmnisrv, gmnisrv} program is a
30005 simple @uref{https://gemini.circumlunar.space/, Gemini} protocol server.
30006
30007 @deffn {Scheme Variable} gmnisrv-service-type
30008 This is the type of the gmnisrv service, whose value should be a
30009 @code{gmnisrv-configuration} object, as in this example:
30010
30011 @lisp
30012 (service gmnisrv-service-type
30013 (gmnisrv-configuration
30014 (config-file (local-file "./my-gmnisrv.ini"))))
30015 @end lisp
30016 @end deffn
30017
30018 @deftp {Data Type} gmnisrv-configuration
30019 Data type representing the configuration of gmnisrv.
30020
30021 @table @asis
30022 @item @code{package} (default: @var{gmnisrv})
30023 Package object of the gmnisrv server.
30024
30025 @item @code{config-file} (default: @code{%default-gmnisrv-config-file})
30026 File-like object of the gmnisrv configuration file to use. The default
30027 configuration listens on port 1965 and serves files from
30028 @file{/srv/gemini}. Certificates are stored in
30029 @file{/var/lib/gemini/certs}. For more information, run @command{man
30030 gmnisrv} and @command{man gmnisrv.ini}.
30031
30032 @end table
30033 @end deftp
30034
30035 @subsubheading Agate
30036
30037 @cindex agate
30038 The @uref{gemini://qwertqwefsday.eu/agate.gmi, Agate}
30039 (@uref{https://github.com/mbrubeck/agate, GitHub page over HTTPS})
30040 program is a simple @uref{https://gemini.circumlunar.space/, Gemini}
30041 protocol server written in Rust.
30042
30043 @deffn {Scheme Variable} agate-service-type
30044 This is the type of the agate service, whose value should be an
30045 @code{agate-service-type} object, as in this example:
30046
30047 @lisp
30048 (service agate-service-type
30049 (agate-configuration
30050 (content "/srv/gemini")
30051 (cert "/srv/cert.pem")
30052 (key "/srv/key.rsa")))
30053 @end lisp
30054
30055 The example above represents the minimal tweaking necessary to get Agate
30056 up and running. Specifying the path to the certificate and key is
30057 always necessary, as the Gemini protocol requires TLS by default.
30058
30059 To obtain a certificate and a key, you could, for example, use OpenSSL,
30060 running a command similar to the following example:
30061
30062 @example
30063 openssl req -x509 -newkey rsa:4096 -keyout key.rsa -out cert.pem \
30064 -days 3650 -nodes -subj "/CN=example.com"
30065 @end example
30066
30067 Of course, you'll have to replace @i{example.com} with your own domain
30068 name, and then point the Agate configuration towards the path of the
30069 generated key and certificate.
30070
30071 @end deffn
30072
30073 @deftp {Data Type} agate-configuration
30074 Data type representing the configuration of Agate.
30075
30076 @table @asis
30077 @item @code{package} (default: @code{agate})
30078 The package object of the Agate server.
30079
30080 @item @code{content} (default: @file{"/srv/gemini"})
30081 The directory from which Agate will serve files.
30082
30083 @item @code{cert} (default: @code{#f})
30084 The path to the TLS certificate PEM file to be used for encrypted
30085 connections. Must be filled in with a value from the user.
30086
30087 @item @code{key} (default: @code{#f})
30088 The path to the PKCS8 private key file to be used for encrypted
30089 connections. Must be filled in with a value from the user.
30090
30091 @item @code{addr} (default: @code{'("0.0.0.0:1965" "[::]:1965")})
30092 A list of the addresses to listen on.
30093
30094 @item @code{hostname} (default: @code{#f})
30095 The domain name of this Gemini server. Optional.
30096
30097 @item @code{lang} (default: @code{#f})
30098 RFC 4646 language code(s) for text/gemini documents. Optional.
30099
30100 @item @code{silent?} (default: @code{#f})
30101 Set to @code{#t} to disable logging output.
30102
30103 @item @code{serve-secret?} (default: @code{#f})
30104 Set to @code{#t} to serve secret files (files/directories starting with
30105 a dot).
30106
30107 @item @code{log-ip?} (default: @code{#t})
30108 Whether or not to output IP addresses when logging.
30109
30110 @item @code{user} (default: @code{"agate"})
30111 Owner of the @code{agate} process.
30112
30113 @item @code{group} (default: @code{"agate"})
30114 Owner's group of the @code{agate} process.
30115
30116 @item @code{log-file} (default: @file{"/var/log/agate.log"})
30117 The file which should store the logging output of Agate.
30118
30119 @end table
30120 @end deftp
30121
30122 @node Certificate Services
30123 @subsection Certificate Services
30124
30125 @cindex Web
30126 @cindex HTTP, HTTPS
30127 @cindex Let's Encrypt
30128 @cindex TLS certificates
30129 The @code{(gnu services certbot)} module provides a service to
30130 automatically obtain a valid TLS certificate from the Let's Encrypt
30131 certificate authority. These certificates can then be used to serve
30132 content securely over HTTPS or other TLS-based protocols, with the
30133 knowledge that the client will be able to verify the server's
30134 authenticity.
30135
30136 @url{https://letsencrypt.org/, Let's Encrypt} provides the
30137 @code{certbot} tool to automate the certification process. This tool
30138 first securely generates a key on the server. It then makes a request
30139 to the Let's Encrypt certificate authority (CA) to sign the key. The CA
30140 checks that the request originates from the host in question by using a
30141 challenge-response protocol, requiring the server to provide its
30142 response over HTTP@. If that protocol completes successfully, the CA
30143 signs the key, resulting in a certificate. That certificate is valid
30144 for a limited period of time, and therefore to continue to provide TLS
30145 services, the server needs to periodically ask the CA to renew its
30146 signature.
30147
30148 The certbot service automates this process: the initial key
30149 generation, the initial certification request to the Let's Encrypt
30150 service, the web server challenge/response integration, writing the
30151 certificate to disk, the automated periodic renewals, and the deployment
30152 tasks associated with the renewal (e.g.@: reloading services, copying keys
30153 with different permissions).
30154
30155 Certbot is run twice a day, at a random minute within the hour. It
30156 won't do anything until your certificates are due for renewal or
30157 revoked, but running it regularly would give your service a chance of
30158 staying online in case a Let's Encrypt-initiated revocation happened for
30159 some reason.
30160
30161 By using this service, you agree to the ACME Subscriber Agreement, which
30162 can be found there:
30163 @url{https://acme-v01.api.letsencrypt.org/directory}.
30164
30165 @defvr {Scheme Variable} certbot-service-type
30166 A service type for the @code{certbot} Let's Encrypt client. Its value
30167 must be a @code{certbot-configuration} record as in this example:
30168
30169 @lisp
30170 (define %nginx-deploy-hook
30171 (program-file
30172 "nginx-deploy-hook"
30173 #~(let ((pid (call-with-input-file "/var/run/nginx/pid" read)))
30174 (kill pid SIGHUP))))
30175
30176 (service certbot-service-type
30177 (certbot-configuration
30178 (email "foo@@example.net")
30179 (certificates
30180 (list
30181 (certificate-configuration
30182 (domains '("example.net" "www.example.net"))
30183 (deploy-hook %nginx-deploy-hook))
30184 (certificate-configuration
30185 (domains '("bar.example.net")))))))
30186 @end lisp
30187
30188 See below for details about @code{certbot-configuration}.
30189 @end defvr
30190
30191 @deftp {Data Type} certbot-configuration
30192 Data type representing the configuration of the @code{certbot} service.
30193 This type has the following parameters:
30194
30195 @table @asis
30196 @item @code{package} (default: @code{certbot})
30197 The certbot package to use.
30198
30199 @item @code{webroot} (default: @code{/var/www})
30200 The directory from which to serve the Let's Encrypt challenge/response
30201 files.
30202
30203 @item @code{certificates} (default: @code{()})
30204 A list of @code{certificates-configuration}s for which to generate
30205 certificates and request signatures. Each certificate has a @code{name}
30206 and several @code{domains}.
30207
30208 @item @code{email} (default: @code{#f})
30209 Optional email address used for registration and recovery contact.
30210 Setting this is encouraged as it allows you to receive important
30211 notifications about the account and issued certificates.
30212
30213 @item @code{server} (default: @code{#f})
30214 Optional URL of ACME server. Setting this overrides certbot's default,
30215 which is the Let's Encrypt server.
30216
30217 @item @code{rsa-key-size} (default: @code{2048})
30218 Size of the RSA key.
30219
30220 @item @code{default-location} (default: @i{see below})
30221 The default @code{nginx-location-configuration}. Because @code{certbot}
30222 needs to be able to serve challenges and responses, it needs to be able
30223 to run a web server. It does so by extending the @code{nginx} web
30224 service with an @code{nginx-server-configuration} listening on the
30225 @var{domains} on port 80, and which has a
30226 @code{nginx-location-configuration} for the @code{/.well-known/} URI
30227 path subspace used by Let's Encrypt. @xref{Web Services}, for more on
30228 these nginx configuration data types.
30229
30230 Requests to other URL paths will be matched by the
30231 @code{default-location}, which if present is added to all
30232 @code{nginx-server-configuration}s.
30233
30234 By default, the @code{default-location} will issue a redirect from
30235 @code{http://@var{domain}/...} to @code{https://@var{domain}/...}, leaving
30236 you to define what to serve on your site via @code{https}.
30237
30238 Pass @code{#f} to not issue a default location.
30239 @end table
30240 @end deftp
30241
30242 @deftp {Data Type} certificate-configuration
30243 Data type representing the configuration of a certificate.
30244 This type has the following parameters:
30245
30246 @table @asis
30247 @item @code{name} (default: @i{see below})
30248 This name is used by Certbot for housekeeping and in file paths; it
30249 doesn't affect the content of the certificate itself. To see
30250 certificate names, run @code{certbot certificates}.
30251
30252 Its default is the first provided domain.
30253
30254 @item @code{domains} (default: @code{()})
30255 The first domain provided will be the subject CN of the certificate, and
30256 all domains will be Subject Alternative Names on the certificate.
30257
30258 @item @code{challenge} (default: @code{#f})
30259 The challenge type that has to be run by certbot. If @code{#f} is specified,
30260 default to the HTTP challenge. If a value is specified, defaults to the
30261 manual plugin (see @code{authentication-hook}, @code{cleanup-hook} and
30262 the documentation at @url{https://certbot.eff.org/docs/using.html#hooks}),
30263 and gives Let's Encrypt permission to log the public IP address of the
30264 requesting machine.
30265
30266 @item @code{csr} (default: @code{#f})
30267 File name of Certificate Signing Request (CSR) in DER or PEM format.
30268 If @code{#f} is specified, this argument will not be passed to certbot.
30269 If a value is specified, certbot will use it to obtain a certificate, instead of
30270 using a self-generated CSR.
30271 The domain-name(s) mentioned in @code{domains}, must be consistent with the
30272 domain-name(s) mentioned in CSR file.
30273
30274 @item @code{authentication-hook} (default: @code{#f})
30275 Command to be run in a shell once for each certificate challenge to be
30276 answered. For this command, the shell variable @code{$CERTBOT_DOMAIN}
30277 will contain the domain being authenticated, @code{$CERTBOT_VALIDATION}
30278 contains the validation string and @code{$CERTBOT_TOKEN} contains the
30279 file name of the resource requested when performing an HTTP-01 challenge.
30280
30281 @item @code{cleanup-hook} (default: @code{#f})
30282 Command to be run in a shell once for each certificate challenge that
30283 have been answered by the @code{auth-hook}. For this command, the shell
30284 variables available in the @code{auth-hook} script are still available, and
30285 additionally @code{$CERTBOT_AUTH_OUTPUT} will contain the standard output
30286 of the @code{auth-hook} script.
30287
30288 @item @code{deploy-hook} (default: @code{#f})
30289 Command to be run in a shell once for each successfully issued
30290 certificate. For this command, the shell variable
30291 @code{$RENEWED_LINEAGE} will point to the config live subdirectory (for
30292 example, @samp{"/etc/letsencrypt/live/example.com"}) containing the new
30293 certificates and keys; the shell variable @code{$RENEWED_DOMAINS} will
30294 contain a space-delimited list of renewed certificate domains (for
30295 example, @samp{"example.com www.example.com"}.
30296
30297 @end table
30298 @end deftp
30299
30300 For each @code{certificate-configuration}, the certificate is saved to
30301 @code{/etc/letsencrypt/live/@var{name}/fullchain.pem} and the key is
30302 saved to @code{/etc/letsencrypt/live/@var{name}/privkey.pem}.
30303 @node DNS Services
30304 @subsection DNS Services
30305 @cindex DNS (domain name system)
30306 @cindex domain name system (DNS)
30307
30308 The @code{(gnu services dns)} module provides services related to the
30309 @dfn{domain name system} (DNS). It provides a server service for hosting
30310 an @emph{authoritative} DNS server for multiple zones, slave or master.
30311 This service uses @uref{https://www.knot-dns.cz/, Knot DNS}. And also a
30312 caching and forwarding DNS server for the LAN, which uses
30313 @uref{http://www.thekelleys.org.uk/dnsmasq/doc.html, dnsmasq}.
30314
30315 @subsubheading Knot Service
30316
30317 An example configuration of an authoritative server for two zones, one master
30318 and one slave, is:
30319
30320 @lisp
30321 (define-zone-entries example.org.zone
30322 ;; Name TTL Class Type Data
30323 ("@@" "" "IN" "A" "127.0.0.1")
30324 ("@@" "" "IN" "NS" "ns")
30325 ("ns" "" "IN" "A" "127.0.0.1"))
30326
30327 (define master-zone
30328 (knot-zone-configuration
30329 (domain "example.org")
30330 (zone (zone-file
30331 (origin "example.org")
30332 (entries example.org.zone)))))
30333
30334 (define slave-zone
30335 (knot-zone-configuration
30336 (domain "plop.org")
30337 (dnssec-policy "default")
30338 (master (list "plop-master"))))
30339
30340 (define plop-master
30341 (knot-remote-configuration
30342 (id "plop-master")
30343 (address (list "208.76.58.171"))))
30344
30345 (operating-system
30346 ;; ...
30347 (services (cons* (service knot-service-type
30348 (knot-configuration
30349 (remotes (list plop-master))
30350 (zones (list master-zone slave-zone))))
30351 ;; ...
30352 %base-services)))
30353 @end lisp
30354
30355 @deffn {Scheme Variable} knot-service-type
30356 This is the type for the Knot DNS server.
30357
30358 Knot DNS is an authoritative DNS server, meaning that it can serve multiple
30359 zones, that is to say domain names you would buy from a registrar. This server
30360 is not a resolver, meaning that it can only resolve names for which it is
30361 authoritative. This server can be configured to serve zones as a master server
30362 or a slave server as a per-zone basis. Slave zones will get their data from
30363 masters, and will serve it as an authoritative server. From the point of view
30364 of a resolver, there is no difference between master and slave.
30365
30366 The following data types are used to configure the Knot DNS server:
30367 @end deffn
30368
30369 @deftp {Data Type} knot-key-configuration
30370 Data type representing a key.
30371 This type has the following parameters:
30372
30373 @table @asis
30374 @item @code{id} (default: @code{""})
30375 An identifier for other configuration fields to refer to this key. IDs must
30376 be unique and must not be empty.
30377
30378 @item @code{algorithm} (default: @code{#f})
30379 The algorithm to use. Choose between @code{#f}, @code{'hmac-md5},
30380 @code{'hmac-sha1}, @code{'hmac-sha224}, @code{'hmac-sha256}, @code{'hmac-sha384}
30381 and @code{'hmac-sha512}.
30382
30383 @item @code{secret} (default: @code{""})
30384 The secret key itself.
30385
30386 @end table
30387 @end deftp
30388
30389 @deftp {Data Type} knot-acl-configuration
30390 Data type representing an Access Control List (ACL) configuration.
30391 This type has the following parameters:
30392
30393 @table @asis
30394 @item @code{id} (default: @code{""})
30395 An identifier for other configuration fields to refer to this key. IDs must be
30396 unique and must not be empty.
30397
30398 @item @code{address} (default: @code{'()})
30399 An ordered list of IP addresses, network subnets, or network ranges represented
30400 with strings. The query must match one of them. Empty value means that
30401 address match is not required.
30402
30403 @item @code{key} (default: @code{'()})
30404 An ordered list of references to keys represented with strings. The string
30405 must match a key ID defined in a @code{knot-key-configuration}. No key means
30406 that a key is not require to match that ACL.
30407
30408 @item @code{action} (default: @code{'()})
30409 An ordered list of actions that are permitted or forbidden by this ACL@. Possible
30410 values are lists of zero or more elements from @code{'transfer}, @code{'notify}
30411 and @code{'update}.
30412
30413 @item @code{deny?} (default: @code{#f})
30414 When true, the ACL defines restrictions. Listed actions are forbidden. When
30415 false, listed actions are allowed.
30416
30417 @end table
30418 @end deftp
30419
30420 @deftp {Data Type} zone-entry
30421 Data type representing a record entry in a zone file.
30422 This type has the following parameters:
30423
30424 @table @asis
30425 @item @code{name} (default: @code{"@@"})
30426 The name of the record. @code{"@@"} refers to the origin of the zone. Names
30427 are relative to the origin of the zone. For example, in the @code{example.org}
30428 zone, @code{"ns.example.org"} actually refers to @code{ns.example.org.example.org}.
30429 Names ending with a dot are absolute, which means that @code{"ns.example.org."}
30430 refers to @code{ns.example.org}.
30431
30432 @item @code{ttl} (default: @code{""})
30433 The Time-To-Live (TTL) of this record. If not set, the default TTL is used.
30434
30435 @item @code{class} (default: @code{"IN"})
30436 The class of the record. Knot currently supports only @code{"IN"} and
30437 partially @code{"CH"}.
30438
30439 @item @code{type} (default: @code{"A"})
30440 The type of the record. Common types include A (IPv4 address), AAAA (IPv6
30441 address), NS (Name Server) and MX (Mail eXchange). Many other types are
30442 defined.
30443
30444 @item @code{data} (default: @code{""})
30445 The data contained in the record. For instance an IP address associated with
30446 an A record, or a domain name associated with an NS record. Remember that
30447 domain names are relative to the origin unless they end with a dot.
30448
30449 @end table
30450 @end deftp
30451
30452 @deftp {Data Type} zone-file
30453 Data type representing the content of a zone file.
30454 This type has the following parameters:
30455
30456 @table @asis
30457 @item @code{entries} (default: @code{'()})
30458 The list of entries. The SOA record is taken care of, so you don't need to
30459 put it in the list of entries. This list should probably contain an entry
30460 for your primary authoritative DNS server. Other than using a list of entries
30461 directly, you can use @code{define-zone-entries} to define a object containing
30462 the list of entries more easily, that you can later pass to the @code{entries}
30463 field of the @code{zone-file}.
30464
30465 @item @code{origin} (default: @code{""})
30466 The name of your zone. This parameter cannot be empty.
30467
30468 @item @code{ns} (default: @code{"ns"})
30469 The domain of your primary authoritative DNS server. The name is relative to
30470 the origin, unless it ends with a dot. It is mandatory that this primary
30471 DNS server corresponds to an NS record in the zone and that it is associated
30472 to an IP address in the list of entries.
30473
30474 @item @code{mail} (default: @code{"hostmaster"})
30475 An email address people can contact you at, as the owner of the zone. This
30476 is translated as @code{<mail>@@<origin>}.
30477
30478 @item @code{serial} (default: @code{1})
30479 The serial number of the zone. As this is used to keep track of changes by
30480 both slaves and resolvers, it is mandatory that it @emph{never} decreases.
30481 Always increment it when you make a change in your zone.
30482
30483 @item @code{refresh} (default: @code{(* 2 24 3600)})
30484 The frequency at which slaves will do a zone transfer. This value is a number
30485 of seconds. It can be computed by multiplications or with
30486 @code{(string->duration)}.
30487
30488 @item @code{retry} (default: @code{(* 15 60)})
30489 The period after which a slave will retry to contact its master when it fails
30490 to do so a first time.
30491
30492 @item @code{expiry} (default: @code{(* 14 24 3600)})
30493 Default TTL of records. Existing records are considered correct for at most
30494 this amount of time. After this period, resolvers will invalidate their cache
30495 and check again that it still exists.
30496
30497 @item @code{nx} (default: @code{3600})
30498 Default TTL of inexistent records. This delay is usually short because you want
30499 your new domains to reach everyone quickly.
30500
30501 @end table
30502 @end deftp
30503
30504 @deftp {Data Type} knot-remote-configuration
30505 Data type representing a remote configuration.
30506 This type has the following parameters:
30507
30508 @table @asis
30509 @item @code{id} (default: @code{""})
30510 An identifier for other configuration fields to refer to this remote. IDs must
30511 be unique and must not be empty.
30512
30513 @item @code{address} (default: @code{'()})
30514 An ordered list of destination IP addresses. Addresses are tried in sequence.
30515 An optional port can be given with the @@ separator. For instance:
30516 @code{(list "1.2.3.4" "2.3.4.5@@53")}. Default port is 53.
30517
30518 @item @code{via} (default: @code{'()})
30519 An ordered list of source IP addresses. An empty list will have Knot choose
30520 an appropriate source IP@. An optional port can be given with the @@ separator.
30521 The default is to choose at random.
30522
30523 @item @code{key} (default: @code{#f})
30524 A reference to a key, that is a string containing the identifier of a key
30525 defined in a @code{knot-key-configuration} field.
30526
30527 @end table
30528 @end deftp
30529
30530 @deftp {Data Type} knot-keystore-configuration
30531 Data type representing a keystore to hold dnssec keys.
30532 This type has the following parameters:
30533
30534 @table @asis
30535 @item @code{id} (default: @code{""})
30536 The id of the keystore. It must not be empty.
30537
30538 @item @code{backend} (default: @code{'pem})
30539 The backend to store the keys in. Can be @code{'pem} or @code{'pkcs11}.
30540
30541 @item @code{config} (default: @code{"/var/lib/knot/keys/keys"})
30542 The configuration string of the backend. An example for the PKCS#11 is:
30543 @code{"pkcs11:token=knot;pin-value=1234 /gnu/store/.../lib/pkcs11/libsofthsm2.so"}.
30544 For the pem backend, the string represents a path in the file system.
30545
30546 @end table
30547 @end deftp
30548
30549 @deftp {Data Type} knot-policy-configuration
30550 Data type representing a dnssec policy. Knot DNS is able to automatically
30551 sign your zones. It can either generate and manage your keys automatically or
30552 use keys that you generate.
30553
30554 Dnssec is usually implemented using two keys: a Key Signing Key (KSK) that is
30555 used to sign the second, and a Zone Signing Key (ZSK) that is used to sign the
30556 zone. In order to be trusted, the KSK needs to be present in the parent zone
30557 (usually a top-level domain). If your registrar supports dnssec, you will
30558 have to send them your KSK's hash so they can add a DS record in their zone.
30559 This is not automated and need to be done each time you change your KSK.
30560
30561 The policy also defines the lifetime of keys. Usually, ZSK can be changed
30562 easily and use weaker cryptographic functions (they use lower parameters) in
30563 order to sign records quickly, so they are changed often. The KSK however
30564 requires manual interaction with the registrar, so they are changed less often
30565 and use stronger parameters because they sign only one record.
30566
30567 This type has the following parameters:
30568
30569 @table @asis
30570 @item @code{id} (default: @code{""})
30571 The id of the policy. It must not be empty.
30572
30573 @item @code{keystore} (default: @code{"default"})
30574 A reference to a keystore, that is a string containing the identifier of a
30575 keystore defined in a @code{knot-keystore-configuration} field. The
30576 @code{"default"} identifier means the default keystore (a kasp database that
30577 was setup by this service).
30578
30579 @item @code{manual?} (default: @code{#f})
30580 Whether the key management is manual or automatic.
30581
30582 @item @code{single-type-signing?} (default: @code{#f})
30583 When @code{#t}, use the Single-Type Signing Scheme.
30584
30585 @item @code{algorithm} (default: @code{"ecdsap256sha256"})
30586 An algorithm of signing keys and issued signatures.
30587
30588 @item @code{ksk-size} (default: @code{256})
30589 The length of the KSK@. Note that this value is correct for the default
30590 algorithm, but would be unsecure for other algorithms.
30591
30592 @item @code{zsk-size} (default: @code{256})
30593 The length of the ZSK@. Note that this value is correct for the default
30594 algorithm, but would be unsecure for other algorithms.
30595
30596 @item @code{dnskey-ttl} (default: @code{'default})
30597 The TTL value for DNSKEY records added into zone apex. The special
30598 @code{'default} value means same as the zone SOA TTL.
30599
30600 @item @code{zsk-lifetime} (default: @code{(* 30 24 3600)})
30601 The period between ZSK publication and the next rollover initiation.
30602
30603 @item @code{propagation-delay} (default: @code{(* 24 3600)})
30604 An extra delay added for each key rollover step. This value should be high
30605 enough to cover propagation of data from the master server to all slaves.
30606
30607 @item @code{rrsig-lifetime} (default: @code{(* 14 24 3600)})
30608 A validity period of newly issued signatures.
30609
30610 @item @code{rrsig-refresh} (default: @code{(* 7 24 3600)})
30611 A period how long before a signature expiration the signature will be refreshed.
30612
30613 @item @code{nsec3?} (default: @code{#f})
30614 When @code{#t}, NSEC3 will be used instead of NSEC.
30615
30616 @item @code{nsec3-iterations} (default: @code{5})
30617 The number of additional times the hashing is performed.
30618
30619 @item @code{nsec3-salt-length} (default: @code{8})
30620 The length of a salt field in octets, which is appended to the original owner
30621 name before hashing.
30622
30623 @item @code{nsec3-salt-lifetime} (default: @code{(* 30 24 3600)})
30624 The validity period of newly issued salt field.
30625
30626 @end table
30627 @end deftp
30628
30629 @deftp {Data Type} knot-zone-configuration
30630 Data type representing a zone served by Knot.
30631 This type has the following parameters:
30632
30633 @table @asis
30634 @item @code{domain} (default: @code{""})
30635 The domain served by this configuration. It must not be empty.
30636
30637 @item @code{file} (default: @code{""})
30638 The file where this zone is saved. This parameter is ignored by master zones.
30639 Empty means default location that depends on the domain name.
30640
30641 @item @code{zone} (default: @code{(zone-file)})
30642 The content of the zone file. This parameter is ignored by slave zones. It
30643 must contain a zone-file record.
30644
30645 @item @code{master} (default: @code{'()})
30646 A list of master remotes. When empty, this zone is a master. When set, this
30647 zone is a slave. This is a list of remotes identifiers.
30648
30649 @item @code{ddns-master} (default: @code{#f})
30650 The main master. When empty, it defaults to the first master in the list of
30651 masters.
30652
30653 @item @code{notify} (default: @code{'()})
30654 A list of slave remote identifiers.
30655
30656 @item @code{acl} (default: @code{'()})
30657 A list of acl identifiers.
30658
30659 @item @code{semantic-checks?} (default: @code{#f})
30660 When set, this adds more semantic checks to the zone.
30661
30662 @item @code{zonefile-sync} (default: @code{0})
30663 The delay between a modification in memory and on disk. 0 means immediate
30664 synchronization.
30665
30666 @item @code{zonefile-load} (default: @code{#f})
30667 The way the zone file contents are applied during zone load. Possible values
30668 are:
30669
30670 @itemize
30671 @item @code{#f} for using the default value from Knot,
30672 @item @code{'none} for not using the zone file at all,
30673 @item @code{'difference} for computing the difference between already available
30674 contents and zone contents and applying it to the current zone contents,
30675 @item @code{'difference-no-serial} for the same as @code{'difference}, but
30676 ignoring the SOA serial in the zone file, while the server takes care of it
30677 automatically.
30678 @item @code{'whole} for loading zone contents from the zone file.
30679 @end itemize
30680
30681 @item @code{journal-content} (default: @code{#f})
30682 The way the journal is used to store zone and its changes. Possible values
30683 are @code{'none} to not use it at all, @code{'changes} to store changes and
30684 @code{'all} to store contents. @code{#f} does not set this option, so the
30685 default value from Knot is used.
30686
30687 @item @code{max-journal-usage} (default: @code{#f})
30688 The maximum size for the journal on disk. @code{#f} does not set this option,
30689 so the default value from Knot is used.
30690
30691 @item @code{max-journal-depth} (default: @code{#f})
30692 The maximum size of the history. @code{#f} does not set this option, so the
30693 default value from Knot is used.
30694
30695 @item @code{max-zone-size} (default: @code{#f})
30696 The maximum size of the zone file. This limit is enforced for incoming
30697 transfer and updates. @code{#f} does not set this option, so the default
30698 value from Knot is used.
30699
30700 @item @code{dnssec-policy} (default: @code{#f})
30701 A reference to a @code{knot-policy-configuration} record, or the special
30702 name @code{"default"}. If the value is @code{#f}, there is no dnssec signing
30703 on this zone.
30704
30705 @item @code{serial-policy} (default: @code{'increment})
30706 A policy between @code{'increment} and @code{'unixtime}.
30707
30708 @end table
30709 @end deftp
30710
30711 @deftp {Data Type} knot-configuration
30712 Data type representing the Knot configuration.
30713 This type has the following parameters:
30714
30715 @table @asis
30716 @item @code{knot} (default: @code{knot})
30717 The Knot package.
30718
30719 @item @code{run-directory} (default: @code{"/var/run/knot"})
30720 The run directory. This directory will be used for pid file and sockets.
30721
30722 @item @code{includes} (default: @code{'()})
30723 A list of strings or file-like objects denoting other files that must be
30724 included at the top of the configuration file.
30725
30726 @cindex secrets, Knot service
30727 This can be used to manage secrets out-of-band. For example, secret
30728 keys may be stored in an out-of-band file not managed by Guix, and
30729 thus not visible in @file{/gnu/store}---e.g., you could store secret
30730 key configuration in @file{/etc/knot/secrets.conf} and add this file
30731 to the @code{includes} list.
30732
30733 One can generate a secret tsig key (for nsupdate and zone transfers with the
30734 keymgr command from the knot package. Note that the package is not automatically
30735 installed by the service. The following example shows how to generate a new
30736 tsig key:
30737
30738 @example
30739 keymgr -t mysecret > /etc/knot/secrets.conf
30740 chmod 600 /etc/knot/secrets.conf
30741 @end example
30742
30743 Also note that the generated key will be named @var{mysecret}, so it is the
30744 name that needs to be used in the @var{key} field of the
30745 @code{knot-acl-configuration} record and in other places that need to refer
30746 to that key.
30747
30748 It can also be used to add configuration not supported by this interface.
30749
30750 @item @code{listen-v4} (default: @code{"0.0.0.0"})
30751 An ip address on which to listen.
30752
30753 @item @code{listen-v6} (default: @code{"::"})
30754 An ip address on which to listen.
30755
30756 @item @code{listen-port} (default: @code{53})
30757 A port on which to listen.
30758
30759 @item @code{keys} (default: @code{'()})
30760 The list of knot-key-configuration used by this configuration.
30761
30762 @item @code{acls} (default: @code{'()})
30763 The list of knot-acl-configuration used by this configuration.
30764
30765 @item @code{remotes} (default: @code{'()})
30766 The list of knot-remote-configuration used by this configuration.
30767
30768 @item @code{zones} (default: @code{'()})
30769 The list of knot-zone-configuration used by this configuration.
30770
30771 @end table
30772 @end deftp
30773
30774 @subsubheading Knot Resolver Service
30775
30776 @deffn {Scheme Variable} knot-resolver-service-type
30777 This is the type of the knot resolver service, whose value should be
30778 an @code{knot-resolver-configuration} object as in this example:
30779
30780 @lisp
30781 (service knot-resolver-service-type
30782 (knot-resolver-configuration
30783 (kresd-config-file (plain-file "kresd.conf" "
30784 net.listen('192.168.0.1', 5353)
30785 user('knot-resolver', 'knot-resolver')
30786 modules = @{ 'hints > iterate', 'stats', 'predict' @}
30787 cache.size = 100 * MB
30788 "))))
30789 @end lisp
30790
30791 For more information, refer its @url{https://knot-resolver.readthedocs.org/en/stable/daemon.html#configuration, manual}.
30792 @end deffn
30793
30794 @deftp {Data Type} knot-resolver-configuration
30795 Data type representing the configuration of knot-resolver.
30796
30797 @table @asis
30798 @item @code{package} (default: @var{knot-resolver})
30799 Package object of the knot DNS resolver.
30800
30801 @item @code{kresd-config-file} (default: %kresd.conf)
30802 File-like object of the kresd configuration file to use, by default it
30803 will listen on @code{127.0.0.1} and @code{::1}.
30804
30805 @item @code{garbage-collection-interval} (default: 1000)
30806 Number of milliseconds for @code{kres-cache-gc} to periodically trim the cache.
30807
30808 @end table
30809 @end deftp
30810
30811
30812 @subsubheading Dnsmasq Service
30813
30814 @deffn {Scheme Variable} dnsmasq-service-type
30815 This is the type of the dnsmasq service, whose value should be an
30816 @code{dnsmasq-configuration} object as in this example:
30817
30818 @lisp
30819 (service dnsmasq-service-type
30820 (dnsmasq-configuration
30821 (no-resolv? #t)
30822 (servers '("192.168.1.1"))))
30823 @end lisp
30824 @end deffn
30825
30826 @deftp {Data Type} dnsmasq-configuration
30827 Data type representing the configuration of dnsmasq.
30828
30829 @table @asis
30830 @item @code{package} (default: @var{dnsmasq})
30831 Package object of the dnsmasq server.
30832
30833 @item @code{no-hosts?} (default: @code{#f})
30834 When true, don't read the hostnames in /etc/hosts.
30835
30836 @item @code{port} (default: @code{53})
30837 The port to listen on. Setting this to zero completely disables DNS
30838 responses, leaving only DHCP and/or TFTP functions.
30839
30840 @item @code{local-service?} (default: @code{#t})
30841 Accept DNS queries only from hosts whose address is on a local subnet,
30842 ie a subnet for which an interface exists on the server.
30843
30844 @item @code{listen-addresses} (default: @code{'()})
30845 Listen on the given IP addresses.
30846
30847 @item @code{resolv-file} (default: @code{"/etc/resolv.conf"})
30848 The file to read the IP address of the upstream nameservers from.
30849
30850 @item @code{no-resolv?} (default: @code{#f})
30851 When true, don't read @var{resolv-file}.
30852
30853 @item @code{forward-private-reverse-lookup?} (default: @code{#t})
30854 When false, all reverse lookups for private IP ranges are answered with
30855 "no such domain" rather than being forwarded upstream.
30856
30857 @item @code{query-servers-in-order?} (default: @code{#f})
30858 When true, dnsmasq queries the servers in the same order as they appear
30859 in @var{servers}.
30860
30861 @item @code{servers} (default: @code{'()})
30862 Specify IP address of upstream servers directly.
30863
30864 @item @code{addresses} (default: @code{'()})
30865 For each entry, specify an IP address to return for any host in the
30866 given domains. Queries in the domains are never forwarded and always
30867 replied to with the specified IP address.
30868
30869 This is useful for redirecting hosts locally, for example:
30870
30871 @lisp
30872 (service dnsmasq-service-type
30873 (dnsmasq-configuration
30874 (addresses
30875 '(; Redirect to a local web-server.
30876 "/example.org/127.0.0.1"
30877 ; Redirect subdomain to a specific IP.
30878 "/subdomain.example.org/192.168.1.42"))))
30879 @end lisp
30880
30881 Note that rules in @file{/etc/hosts} take precedence over this.
30882
30883 @item @code{cache-size} (default: @code{150})
30884 Set the size of dnsmasq's cache. Setting the cache size to zero
30885 disables caching.
30886
30887 @item @code{negative-cache?} (default: @code{#t})
30888 When false, disable negative caching.
30889
30890 @item @code{cpe-id} (default: @code{#f})
30891 If set, add a CPE (Customer-Premises Equipment) identifier to DNS
30892 queries which are forwarded upstream.
30893
30894 @item @code{tftp-enable?} (default: @code{#f})
30895 Whether to enable the built-in TFTP server.
30896
30897 @item @code{tftp-no-fail?} (default: @code{#f})
30898 If true, does not fail dnsmasq if the TFTP server could not start up.
30899
30900 @item @code{tftp-single-port?} (default: @code{#f})
30901 Whether to use only one single port for TFTP.
30902
30903 @item @code{tftp-secure?} (default: @code{#f})
30904 If true, only files owned by the user running the dnsmasq process are accessible.
30905
30906 If dnsmasq is being run as root, different rules apply:
30907 @code{tftp-secure?} has no effect, but only files which have the
30908 world-readable bit set are accessible.
30909
30910 @item @code{tftp-max} (default: @code{#f})
30911 If set, sets the maximal number of concurrent connections allowed.
30912
30913 @item @code{tftp-mtu} (default: @code{#f})
30914 If set, sets the MTU for TFTP packets to that value.
30915
30916 @item @code{tftp-no-blocksize?} (default: @code{#f})
30917 If true, stops the TFTP server from negotiating the blocksize with a client.
30918
30919 @item @code{tftp-lowercase?} (default: @code{#f})
30920 Whether to convert all filenames in TFTP requests to lowercase.
30921
30922 @item @code{tftp-port-range} (default: @code{#f})
30923 If set, fixes the dynamical ports (one per client) to the given range
30924 (@code{"<start>,<end>"}).
30925
30926 @item @code{tftp-root} (default: @code{/var/empty,lo})
30927 Look for files to transfer using TFTP relative to the given directory.
30928 When this is set, TFTP paths which include @samp{..} are rejected, to stop clients
30929 getting outside the specified root. Absolute paths (starting with @samp{/}) are
30930 allowed, but they must be within the TFTP-root. If the optional interface
30931 argument is given, the directory is only used for TFTP requests via that
30932 interface.
30933
30934 @item @code{tftp-unique-root} (default: @code{#f})
30935 If set, add the IP or hardware address of the TFTP client as a path component
30936 on the end of the TFTP-root. Only valid if a TFTP root is set and the
30937 directory exists. Defaults to adding IP address (in standard dotted-quad
30938 format).
30939
30940 For instance, if @option{--tftp-root} is @samp{/tftp} and client
30941 @samp{1.2.3.4} requests file @file{myfile} then the effective path will
30942 be @file{/tftp/1.2.3.4/myfile} if @file{/tftp/1.2.3.4} exists or
30943 @file{/tftp/myfile} otherwise. When @samp{=mac} is specified it will
30944 append the MAC address instead, using lowercase zero padded digits
30945 separated by dashes, e.g.: @samp{01-02-03-04-aa-bb}. Note that
30946 resolving MAC addresses is only possible if the client is in the local
30947 network or obtained a DHCP lease from dnsmasq.
30948
30949 @end table
30950 @end deftp
30951
30952 @subsubheading ddclient Service
30953
30954 @cindex ddclient
30955 The ddclient service described below runs the ddclient daemon, which takes
30956 care of automatically updating DNS entries for service providers such as
30957 @uref{https://dyn.com/dns/, Dyn}.
30958
30959 The following example show instantiates the service with its default
30960 configuration:
30961
30962 @lisp
30963 (service ddclient-service-type)
30964 @end lisp
30965
30966 Note that ddclient needs to access credentials that are stored in a
30967 @dfn{secret file}, by default @file{/etc/ddclient/secrets} (see
30968 @code{secret-file} below). You are expected to create this file manually, in
30969 an ``out-of-band'' fashion (you @emph{could} make this file part of the
30970 service configuration, for instance by using @code{plain-file}, but it will be
30971 world-readable @i{via} @file{/gnu/store}). See the examples in the
30972 @file{share/ddclient} directory of the @code{ddclient} package.
30973
30974 @c %start of fragment
30975
30976 Available @code{ddclient-configuration} fields are:
30977
30978 @deftypevr {@code{ddclient-configuration} parameter} package ddclient
30979 The ddclient package.
30980
30981 @end deftypevr
30982
30983 @deftypevr {@code{ddclient-configuration} parameter} integer daemon
30984 The period after which ddclient will retry to check IP and domain name.
30985
30986 Defaults to @samp{300}.
30987
30988 @end deftypevr
30989
30990 @deftypevr {@code{ddclient-configuration} parameter} boolean syslog
30991 Use syslog for the output.
30992
30993 Defaults to @samp{#t}.
30994
30995 @end deftypevr
30996
30997 @deftypevr {@code{ddclient-configuration} parameter} string mail
30998 Mail to user.
30999
31000 Defaults to @samp{"root"}.
31001
31002 @end deftypevr
31003
31004 @deftypevr {@code{ddclient-configuration} parameter} string mail-failure
31005 Mail failed update to user.
31006
31007 Defaults to @samp{"root"}.
31008
31009 @end deftypevr
31010
31011 @deftypevr {@code{ddclient-configuration} parameter} string pid
31012 The ddclient PID file.
31013
31014 Defaults to @samp{"/var/run/ddclient/ddclient.pid"}.
31015
31016 @end deftypevr
31017
31018 @deftypevr {@code{ddclient-configuration} parameter} boolean ssl
31019 Enable SSL support.
31020
31021 Defaults to @samp{#t}.
31022
31023 @end deftypevr
31024
31025 @deftypevr {@code{ddclient-configuration} parameter} string user
31026 Specifies the user name or ID that is used when running ddclient
31027 program.
31028
31029 Defaults to @samp{"ddclient"}.
31030
31031 @end deftypevr
31032
31033 @deftypevr {@code{ddclient-configuration} parameter} string group
31034 Group of the user who will run the ddclient program.
31035
31036 Defaults to @samp{"ddclient"}.
31037
31038 @end deftypevr
31039
31040 @deftypevr {@code{ddclient-configuration} parameter} string secret-file
31041 Secret file which will be appended to @file{ddclient.conf} file. This
31042 file contains credentials for use by ddclient. You are expected to
31043 create it manually.
31044
31045 Defaults to @samp{"/etc/ddclient/secrets.conf"}.
31046
31047 @end deftypevr
31048
31049 @deftypevr {@code{ddclient-configuration} parameter} list extra-options
31050 Extra options will be appended to @file{ddclient.conf} file.
31051
31052 Defaults to @samp{()}.
31053
31054 @end deftypevr
31055
31056
31057 @c %end of fragment
31058
31059 @node VNC Services
31060 @subsection VNC Services
31061 @cindex VNC (virtual network computing)
31062 @cindex XDMCP (x display manager control protocol)
31063
31064 The @code{(gnu services vnc)} module provides services related to
31065 @dfn{Virtual Network Computing} (VNC), which makes it possible to
31066 locally use graphical Xorg applications running on a remote machine.
31067 Combined with a graphical manager that supports the @dfn{X Display
31068 Manager Control Protocol}, such as GDM (@pxref{gdm}) or LightDM
31069 (@pxref{lightdm}), it is possible to remote an entire desktop for a
31070 multi-user environment.
31071
31072 @subsubheading Xvnc
31073
31074 Xvnc is a VNC server that spawns its own X window server; which means it
31075 can run on headless servers. The Xvnc implementations provided by the
31076 @code{tigervnc-server} and @code{turbovnc} aim to be fast and efficient.
31077
31078 @defvar {Scheme Variable} xvnc-service-type
31079
31080 The @code{xvnc-server-type} service can be configured via the
31081 @code{xvnc-configuration} record, documented below. A second virtual
31082 display could be made available on a remote machine via the
31083 following configuration:
31084 @end defvar
31085
31086 @lisp
31087 (service xvnc-service-type
31088 (xvnc-configuration (display-number 10)))
31089 @end lisp
31090
31091 As a demonstration, the @command{xclock} command could then be started
31092 on the remote machine on display number 10, and it could be displayed
31093 locally via the @command{vncviewer} command:
31094 @example
31095 # Start xclock on the remote machine.
31096 ssh -L5910:localhost:5910 -- guix shell xclock -- env DISPLAY=:10 xclock
31097 # Access it via VNC.
31098 guix shell tigervnc-client -- vncviewer localhost:5910
31099 @end example
31100
31101 The following configuration combines XDMCP and Inetd to allow multiple
31102 users to concurrently use the remote system, login in graphically via
31103 the GDM display manager:
31104
31105 @lisp
31106 (operating-system
31107 [...]
31108 (services (cons*
31109 [...]
31110 (service xvnc-service-type (xvnc-configuration
31111 (display-number 5)
31112 (localhost? #f)
31113 (xdmcp? #t)
31114 (inetd? #t)))
31115 (modify-services %desktop-services
31116 (gdm-service-type config => (gdm-configuration
31117 (inherit config)
31118 (auto-suspend? #f)
31119 (xdmcp? #t)))))))
31120 @end lisp
31121
31122 A remote user could then connect to it by using the @command{vncviewer}
31123 command or a compatible VNC client and start a desktop session of their
31124 choosing:
31125 @example
31126 vncviewer remote-host:5905
31127 @end example
31128
31129 @quotation Warning
31130 Unless your machine is in a controlled environment, for security
31131 reasons, the @code{localhost?} configuration of the
31132 @code{xvnc-configuration} record should be left to its default @code{#t}
31133 value and exposed via a secure means such as an SSH port forward. The
31134 XDMCP port, UDP 177 should also be blocked from the outside by a
31135 firewall, as it is not a secure protocol and can expose login
31136 credentials in clear.
31137 @end quotation
31138
31139 @c Use (configuration->documentation 'xvnc-configuration) to regenerate
31140 @c the documentation.
31141 @c %start of fragment
31142 @deftp {Data Type} xvnc-configuration
31143 Available @code{xvnc-configuration} fields are:
31144
31145 @table @asis
31146 @item @code{xvnc} (default: @code{tigervnc-server}) (type: file-like)
31147 The package that provides the Xvnc binary.
31148
31149 @item @code{display-number} (default: @code{0}) (type: number)
31150 The display number used by Xvnc. You should set this to a number not
31151 already used a Xorg server.
31152
31153 @item @code{geometry} (default: @code{"1024x768"}) (type: string)
31154 The size of the desktop to be created.
31155
31156 @item @code{depth} (default: @code{24}) (type: color-depth)
31157 The pixel depth in bits of the desktop to be created. Accepted values
31158 are 16, 24 or 32.
31159
31160 @item @code{port} (type: maybe-port)
31161 The port on which to listen for connections from viewers. When left
31162 unspecified, it defaults to 5900 plus the display number.
31163
31164 @item @code{ipv4?} (default: @code{#t}) (type: boolean)
31165 Use IPv4 for incoming and outgoing connections.
31166
31167 @item @code{ipv6?} (default: @code{#t}) (type: boolean)
31168 Use IPv6 for incoming and outgoing connections.
31169
31170 @item @code{password-file} (type: maybe-string)
31171 The password file to use, if any. Refer to vncpasswd(1) to learn how to
31172 generate such a file.
31173
31174 @item @code{xdmcp?} (default: @code{#f}) (type: boolean)
31175 Query the XDMCP server for a session. This enables users to log in a
31176 desktop session from the login manager screen. For a multiple users
31177 scenario, you'll want to enable the @code{inetd?} option as well, so
31178 that each connection to the VNC server is handled separately rather than
31179 shared.
31180
31181 @item @code{inetd?} (default: @code{#f}) (type: boolean)
31182 Use an Inetd-style service, which runs the Xvnc server on demand.
31183
31184 @item @code{frame-rate} (default: @code{60}) (type: number)
31185 The maximum number of updates per second sent to each client.
31186
31187 @item @code{security-types} (default: @code{("None")}) (type: security-types)
31188 The allowed security schemes to use for incoming connections. The
31189 default is "None", which is safe given that Xvnc is configured to
31190 authenticate the user via the display manager, and only for local
31191 connections. Accepted values are any of the following: ("None"
31192 "VncAuth" "Plain" "TLSNone" "TLSVnc" "TLSPlain" "X509None" "X509Vnc")
31193
31194 @item @code{localhost?} (default: @code{#t}) (type: boolean)
31195 Only allow connections from the same machine. It is set to #true by
31196 default for security, which means SSH or another secure means should be
31197 used to expose the remote port.
31198
31199 @item @code{log-level} (default: @code{30}) (type: log-level)
31200 The log level, a number between 0 and 100, 100 meaning most verbose
31201 output. The log messages are output to syslog.
31202
31203 @item @code{extra-options} (default: @code{()}) (type: strings)
31204 This can be used to provide extra Xvnc options not exposed via this
31205 <xvnc-configuration> record.
31206
31207 @end table
31208
31209 @end deftp
31210 @c %end of fragment
31211
31212 @node VPN Services
31213 @subsection VPN Services
31214 @cindex VPN (virtual private network)
31215 @cindex virtual private network (VPN)
31216
31217 The @code{(gnu services vpn)} module provides services related to
31218 @dfn{virtual private networks} (VPNs).
31219
31220 @subsubheading Bitmask
31221
31222 @defvr {Scheme Variable} bitmask-service-type
31223 A service type for the @uref{https://bitmask.net, Bitmask} VPN client. It makes
31224 the client available in the system and loads its polkit policy. Please note that
31225 the client expects an active polkit-agent, which is either run by your
31226 desktop-environment or should be run manually.
31227 @end defvr
31228
31229 @subsubheading OpenVPN
31230
31231 It provides a @emph{client} service for your machine to connect to a
31232 VPN, and a @emph{server} service for your machine to host a VPN@.
31233
31234 @deffn {Scheme Procedure} openvpn-client-service @
31235 [#:config (openvpn-client-configuration)]
31236
31237 Return a service that runs @command{openvpn}, a VPN daemon, as a client.
31238 @end deffn
31239
31240 @deffn {Scheme Procedure} openvpn-server-service @
31241 [#:config (openvpn-server-configuration)]
31242
31243 Return a service that runs @command{openvpn}, a VPN daemon, as a server.
31244
31245 Both can be run simultaneously.
31246 @end deffn
31247
31248 @c %automatically generated documentation
31249
31250 @deftp {Data Type} openvpn-client-configuration
31251 Available @code{openvpn-client-configuration} fields are:
31252
31253 @table @asis
31254 @item @code{openvpn} (default: @code{openvpn}) (type: file-like)
31255 The OpenVPN package.
31256
31257 @item @code{pid-file} (default: @code{"/var/run/openvpn/openvpn.pid"}) (type: string)
31258 The OpenVPN pid file.
31259
31260 @item @code{proto} (default: @code{udp}) (type: proto)
31261 The protocol (UDP or TCP) used to open a channel between clients and
31262 servers.
31263
31264 @item @code{dev} (default: @code{tun}) (type: dev)
31265 The device type used to represent the VPN connection.
31266
31267 @item @code{ca} (default: @code{"/etc/openvpn/ca.crt"}) (type: maybe-string)
31268 The certificate authority to check connections against.
31269
31270 @item @code{cert} (default: @code{"/etc/openvpn/client.crt"}) (type: maybe-string)
31271 The certificate of the machine the daemon is running on. It should be
31272 signed by the authority given in @code{ca}.
31273
31274 @item @code{key} (default: @code{"/etc/openvpn/client.key"}) (type: maybe-string)
31275 The key of the machine the daemon is running on. It must be the key
31276 whose certificate is @code{cert}.
31277
31278 @item @code{comp-lzo?} (default: @code{#t}) (type: boolean)
31279 Whether to use the lzo compression algorithm.
31280
31281 @item @code{persist-key?} (default: @code{#t}) (type: boolean)
31282 Don't re-read key files across SIGUSR1 or --ping-restart.
31283
31284 @item @code{persist-tun?} (default: @code{#t}) (type: boolean)
31285 Don't close and reopen TUN/TAP device or run up/down scripts across
31286 SIGUSR1 or --ping-restart restarts.
31287
31288 @item @code{fast-io?} (default: @code{#f}) (type: boolean)
31289 (Experimental) Optimize TUN/TAP/UDP I/O writes by avoiding a call to
31290 poll/epoll/select prior to the write operation.
31291
31292 @item @code{verbosity} (default: @code{3}) (type: number)
31293 Verbosity level.
31294
31295 @item @code{tls-auth} (default: @code{#f}) (type: tls-auth-client)
31296 Add an additional layer of HMAC authentication on top of the TLS control
31297 channel to protect against DoS attacks.
31298
31299 @item @code{auth-user-pass} (type: maybe-string)
31300 Authenticate with server using username/password. The option is a file
31301 containing username/password on 2 lines. Do not use a file-like object
31302 as it would be added to the store and readable by any user.
31303
31304 @item @code{verify-key-usage?} (default: @code{#t}) (type: key-usage)
31305 Whether to check the server certificate has server usage extension.
31306
31307 @item @code{bind?} (default: @code{#f}) (type: bind)
31308 Bind to a specific local port number.
31309
31310 @item @code{resolv-retry?} (default: @code{#t}) (type: resolv-retry)
31311 Retry resolving server address.
31312
31313 @item @code{remote} (default: @code{()}) (type: openvpn-remote-list)
31314 A list of remote servers to connect to.
31315
31316 @deftp {Data Type} openvpn-remote-configuration
31317 Available @code{openvpn-remote-configuration} fields are:
31318
31319 @table @asis
31320 @item @code{name} (default: @code{"my-server"}) (type: string)
31321 Server name.
31322
31323 @item @code{port} (default: @code{1194}) (type: number)
31324 Port number the server listens to.
31325
31326 @end table
31327
31328 @end deftp
31329
31330 @end table
31331
31332 @end deftp
31333
31334 @c %end of automatic openvpn-client documentation
31335
31336 @c %automatically generated documentation
31337
31338 @deftp {Data Type} openvpn-server-configuration
31339 Available @code{openvpn-server-configuration} fields are:
31340
31341 @table @asis
31342 @item @code{openvpn} (default: @code{openvpn}) (type: file-like)
31343 The OpenVPN package.
31344
31345 @item @code{pid-file} (default: @code{"/var/run/openvpn/openvpn.pid"}) (type: string)
31346 The OpenVPN pid file.
31347
31348 @item @code{proto} (default: @code{udp}) (type: proto)
31349 The protocol (UDP or TCP) used to open a channel between clients and
31350 servers.
31351
31352 @item @code{dev} (default: @code{tun}) (type: dev)
31353 The device type used to represent the VPN connection.
31354
31355 @item @code{ca} (default: @code{"/etc/openvpn/ca.crt"}) (type: maybe-string)
31356 The certificate authority to check connections against.
31357
31358 @item @code{cert} (default: @code{"/etc/openvpn/client.crt"}) (type: maybe-string)
31359 The certificate of the machine the daemon is running on. It should be
31360 signed by the authority given in @code{ca}.
31361
31362 @item @code{key} (default: @code{"/etc/openvpn/client.key"}) (type: maybe-string)
31363 The key of the machine the daemon is running on. It must be the key
31364 whose certificate is @code{cert}.
31365
31366 @item @code{comp-lzo?} (default: @code{#t}) (type: boolean)
31367 Whether to use the lzo compression algorithm.
31368
31369 @item @code{persist-key?} (default: @code{#t}) (type: boolean)
31370 Don't re-read key files across SIGUSR1 or --ping-restart.
31371
31372 @item @code{persist-tun?} (default: @code{#t}) (type: boolean)
31373 Don't close and reopen TUN/TAP device or run up/down scripts across
31374 SIGUSR1 or --ping-restart restarts.
31375
31376 @item @code{fast-io?} (default: @code{#f}) (type: boolean)
31377 (Experimental) Optimize TUN/TAP/UDP I/O writes by avoiding a call to
31378 poll/epoll/select prior to the write operation.
31379
31380 @item @code{verbosity} (default: @code{3}) (type: number)
31381 Verbosity level.
31382
31383 @item @code{tls-auth} (default: @code{#f}) (type: tls-auth-server)
31384 Add an additional layer of HMAC authentication on top of the TLS control
31385 channel to protect against DoS attacks.
31386
31387 @item @code{port} (default: @code{1194}) (type: number)
31388 Specifies the port number on which the server listens.
31389
31390 @item @code{server} (default: @code{"10.8.0.0 255.255.255.0"}) (type: ip-mask)
31391 An ip and mask specifying the subnet inside the virtual network.
31392
31393 @item @code{server-ipv6} (default: @code{#f}) (type: cidr6)
31394 A CIDR notation specifying the IPv6 subnet inside the virtual network.
31395
31396 @item @code{dh} (default: @code{"/etc/openvpn/dh2048.pem"}) (type: string)
31397 The Diffie-Hellman parameters file.
31398
31399 @item @code{ifconfig-pool-persist} (default: @code{"/etc/openvpn/ipp.txt"}) (type: string)
31400 The file that records client IPs.
31401
31402 @item @code{redirect-gateway?} (default: @code{#f}) (type: gateway)
31403 When true, the server will act as a gateway for its clients.
31404
31405 @item @code{client-to-client?} (default: @code{#f}) (type: boolean)
31406 When true, clients are allowed to talk to each other inside the VPN.
31407
31408 @item @code{keepalive} (default: @code{(10 120)}) (type: keepalive)
31409 Causes ping-like messages to be sent back and forth over the link so
31410 that each side knows when the other side has gone down. @code{keepalive}
31411 requires a pair. The first element is the period of the ping sending,
31412 and the second element is the timeout before considering the other side
31413 down.
31414
31415 @item @code{max-clients} (default: @code{100}) (type: number)
31416 The maximum number of clients.
31417
31418 @item @code{status} (default: @code{"/var/run/openvpn/status"}) (type: string)
31419 The status file. This file shows a small report on current connection.
31420 It is truncated and rewritten every minute.
31421
31422 @item @code{client-config-dir} (default: @code{()}) (type: openvpn-ccd-list)
31423 The list of configuration for some clients.
31424
31425 @end table
31426
31427 @end deftp
31428
31429 @c %end of automatic openvpn-server documentation
31430
31431 @subheading strongSwan
31432
31433 Currently, the strongSwan service only provides legacy-style configuration with
31434 @file{ipsec.conf} and @file{ipsec.secrets} files.
31435
31436 @defvr {Scheme Variable} strongswan-service-type
31437 A service type for configuring strongSwan for IPsec @acronym{VPN,
31438 Virtual Private Networking}. Its value must be a
31439 @code{strongswan-configuration} record as in this example:
31440
31441 @lisp
31442 (service strongswan-service-type
31443 (strongswan-configuration
31444 (ipsec-conf "/etc/ipsec.conf")
31445 (ipsec-secrets "/etc/ipsec.secrets")))
31446 @end lisp
31447
31448 @end defvr
31449
31450 @deftp {Data Type} strongswan-configuration
31451 Data type representing the configuration of the StrongSwan service.
31452
31453 @table @asis
31454 @item @code{strongswan}
31455 The strongSwan package to use for this service.
31456
31457 @item @code{ipsec-conf} (default: @code{#f})
31458 The file name of your @file{ipsec.conf}. If not @code{#f}, then this and
31459 @code{ipsec-secrets} must both be strings.
31460
31461 @item @code{ipsec-secrets} (default @code{#f})
31462 The file name of your @file{ipsec.secrets}. If not @code{#f}, then this and
31463 @code{ipsec-conf} must both be strings.
31464
31465 @end table
31466 @end deftp
31467
31468 @subsubheading Wireguard
31469
31470 @defvr {Scheme Variable} wireguard-service-type
31471 A service type for a Wireguard tunnel interface. Its value must be a
31472 @code{wireguard-configuration} record as in this example:
31473
31474 @lisp
31475 (service wireguard-service-type
31476 (wireguard-configuration
31477 (peers
31478 (list
31479 (wireguard-peer
31480 (name "my-peer")
31481 (endpoint "my.wireguard.com:51820")
31482 (public-key "hzpKg9X1yqu1axN6iJp0mWf6BZGo8m1wteKwtTmDGF4=")
31483 (allowed-ips '("10.0.0.2/32")))))))
31484 @end lisp
31485
31486 @end defvr
31487
31488 @deftp {Data Type} wireguard-configuration
31489 Data type representing the configuration of the Wireguard service.
31490
31491 @table @asis
31492 @item @code{wireguard}
31493 The wireguard package to use for this service.
31494
31495 @item @code{interface} (default: @code{"wg0"})
31496 The interface name for the VPN.
31497
31498 @item @code{addresses} (default: @code{'("10.0.0.1/32")})
31499 The IP addresses to be assigned to the above interface.
31500
31501 @item @code{port} (default: @code{51820})
31502 The port on which to listen for incoming connections.
31503
31504 @item @code{dns} (default: @code{#f})
31505 The DNS server(s) to announce to VPN clients via DHCP.
31506
31507 @item @code{private-key} (default: @code{"/etc/wireguard/private.key"})
31508 The private key file for the interface. It is automatically generated if
31509 the file does not exist.
31510
31511 @item @code{peers} (default: @code{'()})
31512 The authorized peers on this interface. This is a list of
31513 @var{wireguard-peer} records.
31514
31515 @item @code{pre-up} (default: @code{'()})
31516 The script commands to be run before setting up the interface.
31517
31518 @item @code{post-up} (default: @code{'()})
31519 The script commands to be run after setting up the interface.
31520
31521 @item @code{pre-down} (default: @code{'()})
31522 The script commands to be run before tearing down the interface.
31523
31524 @item @code{post-down} (default: @code{'()})
31525 The script commands to be run after tearing down the interface.
31526
31527 @item @code{table} (default: @code{"auto"})
31528 The routing table to which routes are added, as a string. There are two
31529 special values: @code{"off"} that disables the creation of routes
31530 altogether, and @code{"auto"} (the default) that adds routes to the
31531 default table and enables special handling of default routes.
31532
31533 @end table
31534 @end deftp
31535
31536 @deftp {Data Type} wireguard-peer
31537 Data type representing a Wireguard peer attached to a given interface.
31538
31539 @table @asis
31540 @item @code{name}
31541 The peer name.
31542
31543 @item @code{endpoint} (default: @code{#f})
31544 The optional endpoint for the peer, such as
31545 @code{"demo.wireguard.com:51820"}.
31546
31547 @item @code{public-key}
31548 The peer public-key represented as a base64 string.
31549
31550 @item @code{allowed-ips}
31551 A list of IP addresses from which incoming traffic for this peer is
31552 allowed and to which incoming traffic for this peer is directed.
31553
31554 @item @code{keep-alive} (default: @code{#f})
31555 An optional time interval in seconds. A packet will be sent to the
31556 server endpoint once per time interval. This helps receiving
31557 incoming connections from this peer when you are behind a NAT or
31558 a firewall.
31559
31560 @end table
31561 @end deftp
31562
31563 @node Network File System
31564 @subsection Network File System
31565 @cindex NFS
31566
31567 The @code{(gnu services nfs)} module provides the following services,
31568 which are most commonly used in relation to mounting or exporting
31569 directory trees as @dfn{network file systems} (NFS).
31570
31571 While it is possible to use the individual components that together make
31572 up a Network File System service, we recommended to configure an NFS
31573 server with the @code{nfs-service-type}.
31574
31575 @subsubheading NFS Service
31576 @cindex NFS, server
31577
31578 The NFS service takes care of setting up all NFS component services,
31579 kernel configuration file systems, and installs configuration files in
31580 the locations that NFS expects.
31581
31582 @defvr {Scheme Variable} nfs-service-type
31583 A service type for a complete NFS server.
31584 @end defvr
31585
31586 @deftp {Data Type} nfs-configuration
31587 This data type represents the configuration of the NFS service and all
31588 of its subsystems.
31589
31590 It has the following parameters:
31591 @table @asis
31592 @item @code{nfs-utils} (default: @code{nfs-utils})
31593 The nfs-utils package to use.
31594
31595 @item @code{nfs-versions} (default: @code{'("4.2" "4.1" "4.0")})
31596 If a list of string values is provided, the @command{rpc.nfsd} daemon
31597 will be limited to supporting the given versions of the NFS protocol.
31598
31599 @item @code{exports} (default: @code{'()})
31600 This is a list of directories the NFS server should export. Each entry
31601 is a list consisting of two elements: a directory name and a string
31602 containing all options. This is an example in which the directory
31603 @file{/export} is served to all NFS clients as a read-only share:
31604
31605 @lisp
31606 (nfs-configuration
31607 (exports
31608 '(("/export"
31609 "*(ro,insecure,no_subtree_check,crossmnt,fsid=0)"))))
31610 @end lisp
31611
31612 @item @code{rpcmountd-port} (default: @code{#f})
31613 The network port that the @command{rpc.mountd} daemon should use.
31614
31615 @item @code{rpcstatd-port} (default: @code{#f})
31616 The network port that the @command{rpc.statd} daemon should use.
31617
31618 @item @code{rpcbind} (default: @code{rpcbind})
31619 The rpcbind package to use.
31620
31621 @item @code{idmap-domain} (default: @code{"localdomain"})
31622 The local NFSv4 domain name.
31623
31624 @item @code{nfsd-port} (default: @code{2049})
31625 The network port that the @command{nfsd} daemon should use.
31626
31627 @item @code{nfsd-threads} (default: @code{8})
31628 The number of threads used by the @command{nfsd} daemon.
31629
31630 @item @code{nfsd-tcp?} (default: @code{#t})
31631 Whether the @command{nfsd} daemon should listen on a TCP socket.
31632
31633 @item @code{nfsd-udp?} (default: @code{#f})
31634 Whether the @command{nfsd} daemon should listen on a UDP socket.
31635
31636 @item @code{pipefs-directory} (default: @code{"/var/lib/nfs/rpc_pipefs"})
31637 The directory where the pipefs file system is mounted.
31638
31639 @item @code{debug} (default: @code{'()"})
31640 A list of subsystems for which debugging output should be enabled. This
31641 is a list of symbols. Any of these symbols are valid: @code{nfsd},
31642 @code{nfs}, @code{rpc}, @code{idmap}, @code{statd}, or @code{mountd}.
31643 @end table
31644 @end deftp
31645
31646 If you don't need a complete NFS service or prefer to build it yourself
31647 you can use the individual component services that are documented below.
31648
31649 @subsubheading RPC Bind Service
31650 @cindex rpcbind
31651
31652 The RPC Bind service provides a facility to map program numbers into
31653 universal addresses.
31654 Many NFS related services use this facility. Hence it is automatically
31655 started when a dependent service starts.
31656
31657 @defvr {Scheme Variable} rpcbind-service-type
31658 A service type for the RPC portmapper daemon.
31659 @end defvr
31660
31661
31662 @deftp {Data Type} rpcbind-configuration
31663 Data type representing the configuration of the RPC Bind Service.
31664 This type has the following parameters:
31665 @table @asis
31666 @item @code{rpcbind} (default: @code{rpcbind})
31667 The rpcbind package to use.
31668
31669 @item @code{warm-start?} (default: @code{#t})
31670 If this parameter is @code{#t}, then the daemon will read a
31671 state file on startup thus reloading state information saved by a previous
31672 instance.
31673 @end table
31674 @end deftp
31675
31676
31677 @subsubheading Pipefs Pseudo File System
31678 @cindex pipefs
31679 @cindex rpc_pipefs
31680
31681 The pipefs file system is used to transfer NFS related data
31682 between the kernel and user space programs.
31683
31684 @defvr {Scheme Variable} pipefs-service-type
31685 A service type for the pipefs pseudo file system.
31686 @end defvr
31687
31688 @deftp {Data Type} pipefs-configuration
31689 Data type representing the configuration of the pipefs pseudo file system service.
31690 This type has the following parameters:
31691 @table @asis
31692 @item @code{mount-point} (default: @code{"/var/lib/nfs/rpc_pipefs"})
31693 The directory to which the file system is to be attached.
31694 @end table
31695 @end deftp
31696
31697
31698 @subsubheading GSS Daemon Service
31699 @cindex GSSD
31700 @cindex GSS
31701 @cindex global security system
31702
31703 The @dfn{global security system} (GSS) daemon provides strong security for RPC
31704 based protocols.
31705 Before exchanging RPC requests an RPC client must establish a security
31706 context. Typically this is done using the Kerberos command @command{kinit}
31707 or automatically at login time using PAM services (@pxref{Kerberos Services}).
31708
31709 @defvr {Scheme Variable} gss-service-type
31710 A service type for the Global Security System (GSS) daemon.
31711 @end defvr
31712
31713 @deftp {Data Type} gss-configuration
31714 Data type representing the configuration of the GSS daemon service.
31715 This type has the following parameters:
31716 @table @asis
31717 @item @code{nfs-utils} (default: @code{nfs-utils})
31718 The package in which the @command{rpc.gssd} command is to be found.
31719
31720 @item @code{pipefs-directory} (default: @code{"/var/lib/nfs/rpc_pipefs"})
31721 The directory where the pipefs file system is mounted.
31722
31723 @end table
31724 @end deftp
31725
31726
31727 @subsubheading IDMAP Daemon Service
31728 @cindex idmapd
31729 @cindex name mapper
31730
31731 The idmap daemon service provides mapping between user IDs and user names.
31732 Typically it is required in order to access file systems mounted via NFSv4.
31733
31734 @defvr {Scheme Variable} idmap-service-type
31735 A service type for the Identity Mapper (IDMAP) daemon.
31736 @end defvr
31737
31738 @deftp {Data Type} idmap-configuration
31739 Data type representing the configuration of the IDMAP daemon service.
31740 This type has the following parameters:
31741 @table @asis
31742 @item @code{nfs-utils} (default: @code{nfs-utils})
31743 The package in which the @command{rpc.idmapd} command is to be found.
31744
31745 @item @code{pipefs-directory} (default: @code{"/var/lib/nfs/rpc_pipefs"})
31746 The directory where the pipefs file system is mounted.
31747
31748 @item @code{domain} (default: @code{#f})
31749 The local NFSv4 domain name.
31750 This must be a string or @code{#f}.
31751 If it is @code{#f} then the daemon will use the host's fully qualified domain name.
31752
31753 @item @code{verbosity} (default: @code{0})
31754 The verbosity level of the daemon.
31755
31756 @end table
31757 @end deftp
31758
31759 @node Samba Services, Continuous Integration, Network File System, Services
31760 @subsection Samba Services
31761
31762 @cindex Samba
31763 @cindex SMB
31764 The @code{(gnu services samba)} module provides service definitions for
31765 Samba as well as additional helper services. Currently it provides the
31766 following services.
31767
31768 @subsubheading Samba
31769
31770 @uref{https://www.samba.org, Samba} provides network shares for folders
31771 and printers using the SMB/CIFS protocol commonly used on Windows. It
31772 can also act as an Active Directory Domain Controller (AD DC) for other
31773 hosts in an heterougenious network with different types of Computer
31774 systems.
31775
31776 @defvar {Scheme variable} samba-service-type
31777
31778 The service type to enable the samba services @code{samba}, @code{nmbd},
31779 @code{smbd} and @code{winbindd}. By default this service type does not
31780 run any of the Samba daemons; they must be enabled individually.
31781
31782 Below is a basic example that configures a simple, anonymous
31783 (unauthenticated) Samba file share exposing the @file{/public}
31784 directory.
31785
31786 @quotation Tip
31787 The @file{/public} directory and its contents must be world
31788 readable/writable, so you'll want to run @samp{chmod -R 777 /public} on
31789 it.
31790 @end quotation
31791
31792 @quotation Caution
31793 Such a Samba configuration should only be used in controlled
31794 environments, and you should not share any private files using it, as
31795 anyone connecting to your network would be able to access them.
31796 @end quotation
31797
31798 @lisp
31799 (service samba-service-type (samba-configuration
31800 (enable-smbd? #t)
31801 (config-file (plain-file "smb.conf" "\
31802 [global]
31803 map to guest = Bad User
31804 logging = syslog@@1
31805
31806 [public]
31807 browsable = yes
31808 path = /public
31809 read only = no
31810 guest ok = yes
31811 guest only = yes\n"))))
31812 @end lisp
31813
31814 @end defvar
31815
31816 @deftp{Data Type} samba-service-configuration
31817 Configuration record for the Samba suite.
31818
31819 @table @asis
31820 @item @code{package} (default: @code{samba})
31821 The samba package to use.
31822
31823 @item @code{config-file} (default: @code{#f})
31824 The config file to use. To learn about its syntax, run @samp{man
31825 smb.conf}.
31826
31827 @item @code{enable-samba?} (default: @code{#f})
31828 Enable the @code{samba} daemon.
31829
31830 @item @code{enable-smbd?} (default: @code{#f})
31831 Enable the @code{smbd} daemon.
31832
31833 @item @code{enable-nmbd?} (default: @code{#f})
31834 Enable the @code{nmbd} daemon.
31835
31836 @item @code{enable-winbindd?} (default: @code{#f})
31837 Enable the @code{winbindd} daemon.
31838
31839 @end table
31840 @end deftp
31841
31842 @cindex wsdd, Web service discovery daemon
31843 @subsubheading Web Service Discovery Daemon
31844
31845 The @acronym{WSDD, Web Service Discovery daemon} implements the
31846 @uref{http://docs.oasis-open.org/ws-dd/discovery/1.1/os/wsdd-discovery-1.1-spec-os.html,
31847 Web Services Dynamic Discovery} protocol that enables host discovery
31848 over Multicast DNS, similar to what Avahi does. It is a drop-in
31849 replacement for SMB hosts that have had SMBv1 disabled for security
31850 reasons.
31851
31852 @defvr {Scheme Variable} wsdd-service-type
31853 Service type for the WSD host daemon. The value for
31854 this service type is a @code{wsdd-configuration} record. The details
31855 for the @code{wsdd-configuration} record type are given below.
31856 @end defvr
31857
31858 @deftp {Data Type} wsdd-configuration
31859 This data type represents the configuration for the wsdd service.
31860
31861 @table @asis
31862
31863 @item @code{package} (default: @code{wsdd})
31864 The wsdd package to use.
31865
31866 @item @code{ipv4only?} (default: @code{#f})
31867 Only listen to IPv4 addresses.
31868
31869 @item @code{ipv6only} (default: @code{#f})
31870 Only listen to IPv6 addresses. Please note: Activating both options is
31871 not possible, since there would be no IP versions to listen to.
31872
31873 @item @code{chroot} (default: @code{#f})
31874 Chroot into a separate directory to prevent access to other directories.
31875 This is to increase security in case there is a vulnerability in
31876 @command{wsdd}.
31877
31878 @item @code{hop-limit} (default: @code{1})
31879 Limit to the level of hops for multicast packets. The default is
31880 @var{1} which should prevent packets from leaving the local network.
31881
31882 @item @code{interface} (default: @code{'()})
31883 Limit to the given list of interfaces to listen to. By default wsdd
31884 will listen to all interfaces. Except the loopback interface is never
31885 used.
31886
31887 @item @code{uuid-device} (default: @code{#f})
31888 The WSD protocol requires a device to have a UUID. Set this to manually
31889 assign the service a UUID.
31890
31891 @item @code{domain} (default: @code{#f})
31892 Notify this host is a member of an Active Directory.
31893
31894 @item @code{host-name} (default: @code{#f})
31895 Manually set the hostname rather than letting @command{wsdd} inherit
31896 this host's hostname. Only the host name part of a possible FQDN will
31897 be used in the default case.
31898
31899 @item @code{preserve-case?} (default: @code{#f})
31900 By default @command{wsdd} will convert the hostname in workgroup to all
31901 uppercase. The opposite is true for hostnames in domains. Setting this
31902 parameter will preserve case.
31903
31904 @item @code{workgroup} (default: @var{"WORKGROUP"})
31905 Change the name of the workgroup. By default @command{wsdd} reports
31906 this host being member of a workgroup.
31907
31908 @end table
31909 @end deftp
31910
31911 @node Continuous Integration
31912 @subsection Continuous Integration
31913
31914 @cindex continuous integration
31915 @uref{https://guix.gnu.org/cuirass/, Cuirass} is a continuous
31916 integration tool for Guix. It can be used both for development and for
31917 providing substitutes to others (@pxref{Substitutes}).
31918
31919 The @code{(gnu services cuirass)} module provides the following service.
31920
31921 @defvr {Scheme Procedure} cuirass-service-type
31922 The type of the Cuirass service. Its value must be a
31923 @code{cuirass-configuration} object, as described below.
31924 @end defvr
31925
31926 To add build jobs, you have to set the @code{specifications} field of
31927 the configuration. For instance, the following example will build all
31928 the packages provided by the @code{my-channel} channel.
31929
31930 @lisp
31931 (define %cuirass-specs
31932 #~(list (specification
31933 (name "my-channel")
31934 (build '(channels my-channel))
31935 (channels
31936 (cons (channel
31937 (name 'my-channel)
31938 (url "https://my-channel.git"))
31939 %default-channels)))))
31940
31941 (service cuirass-service-type
31942 (cuirass-configuration
31943 (specifications %cuirass-specs)))
31944 @end lisp
31945
31946 To build the @code{linux-libre} package defined by the default Guix
31947 channel, one can use the following configuration.
31948
31949 @lisp
31950 (define %cuirass-specs
31951 #~(list (specification
31952 (name "my-linux")
31953 (build '(packages "linux-libre")))))
31954
31955 (service cuirass-service-type
31956 (cuirass-configuration
31957 (specifications %cuirass-specs)))
31958 @end lisp
31959
31960 The other configuration possibilities, as well as the specification
31961 record itself are described in the Cuirass manual
31962 (@pxref{Specifications,,, cuirass, Cuirass}).
31963
31964 While information related to build jobs is located directly in the
31965 specifications, global settings for the @command{cuirass} process are
31966 accessible in other @code{cuirass-configuration} fields.
31967
31968 @deftp {Data Type} cuirass-configuration
31969 Data type representing the configuration of Cuirass.
31970
31971 @table @asis
31972 @item @code{cuirass} (default: @code{cuirass})
31973 The Cuirass package to use.
31974
31975 @item @code{log-file} (default: @code{"/var/log/cuirass.log"})
31976 Location of the log file.
31977
31978 @item @code{web-log-file} (default: @code{"/var/log/cuirass-web.log"})
31979 Location of the log file used by the web interface.
31980
31981 @item @code{cache-directory} (default: @code{"/var/cache/cuirass"})
31982 Location of the repository cache.
31983
31984 @item @code{user} (default: @code{"cuirass"})
31985 Owner of the @code{cuirass} process.
31986
31987 @item @code{group} (default: @code{"cuirass"})
31988 Owner's group of the @code{cuirass} process.
31989
31990 @item @code{interval} (default: @code{60})
31991 Number of seconds between the poll of the repositories followed by the
31992 Cuirass jobs.
31993
31994 @item @code{parameters} (default: @code{#f})
31995 Read parameters from the given @var{parameters} file. The supported
31996 parameters are described here (@pxref{Parameters,,, cuirass, Cuirass}).
31997
31998 @item @code{remote-server} (default: @code{#f})
31999 A @code{cuirass-remote-server-configuration} record to use the build
32000 remote mechanism or @code{#f} to use the default build mechanism.
32001
32002 @item @code{database} (default: @code{"dbname=cuirass host=/var/run/postgresql"})
32003 Use @var{database} as the database containing the jobs and the past
32004 build results. Since Cuirass uses PostgreSQL as a database engine,
32005 @var{database} must be a string such as @code{"dbname=cuirass
32006 host=localhost"}.
32007
32008 @item @code{port} (default: @code{8081})
32009 Port number used by the HTTP server.
32010
32011 @item @code{host} (default: @code{"localhost"})
32012 Listen on the network interface for @var{host}. The default is to
32013 accept connections from localhost.
32014
32015 @item @code{specifications} (default: @code{#~'()})
32016 A gexp (@pxref{G-Expressions}) that evaluates to a list of
32017 specifications records. The specification record is described in the
32018 Cuirass manual (@pxref{Specifications,,, cuirass, Cuirass}).
32019
32020 @item @code{use-substitutes?} (default: @code{#f})
32021 This allows using substitutes to avoid building every dependencies of a job
32022 from source.
32023
32024 @item @code{one-shot?} (default: @code{#f})
32025 Only evaluate specifications and build derivations once.
32026
32027 @item @code{fallback?} (default: @code{#f})
32028 When substituting a pre-built binary fails, fall back to building
32029 packages locally.
32030
32031 @item @code{extra-options} (default: @code{'()})
32032 Extra options to pass when running the Cuirass processes.
32033
32034 @end table
32035 @end deftp
32036
32037 @cindex remote build
32038 @subsubheading Cuirass remote building
32039
32040 Cuirass supports two mechanisms to build derivations.
32041
32042 @itemize
32043 @item Using the local Guix daemon.
32044 This is the default build mechanism. Once the build jobs are
32045 evaluated, they are sent to the local Guix daemon. Cuirass then
32046 listens to the Guix daemon output to detect the various build events.
32047
32048 @item Using the remote build mechanism.
32049 The build jobs are not submitted to the local Guix daemon. Instead, a
32050 remote server dispatches build requests to the connect remote workers,
32051 according to the build priorities.
32052
32053 @end itemize
32054
32055 To enable this build mode a @code{cuirass-remote-server-configuration}
32056 record must be passed as @code{remote-server} argument of the
32057 @code{cuirass-configuration} record. The
32058 @code{cuirass-remote-server-configuration} record is described below.
32059
32060 This build mode scales way better than the default build mode. This is
32061 the build mode that is used on the GNU Guix build farm at
32062 @url{https://ci.guix.gnu.org}. It should be preferred when using
32063 Cuirass to build large amount of packages.
32064
32065 @deftp {Data Type} cuirass-remote-server-configuration
32066 Data type representing the configuration of the Cuirass remote-server.
32067
32068 @table @asis
32069 @item @code{backend-port} (default: @code{5555})
32070 The TCP port for communicating with @code{remote-worker} processes
32071 using ZMQ. It defaults to @code{5555}.
32072
32073 @item @code{log-port} (default: @code{5556})
32074 The TCP port of the log server. It defaults to @code{5556}.
32075
32076 @item @code{publish-port} (default: @code{5557})
32077 The TCP port of the publish server. It defaults to @code{5557}.
32078
32079 @item @code{log-file} (default: @code{"/var/log/cuirass-remote-server.log"})
32080 Location of the log file.
32081
32082 @item @code{cache} (default: @code{"/var/cache/cuirass/remote"})
32083 Use @var{cache} directory to cache build log files.
32084
32085 @item @code{trigger-url} (default: @code{#f})
32086 Once a substitute is successfully fetched, trigger substitute baking at
32087 @var{trigger-url}.
32088
32089 @item @code{publish?} (default: @code{#t})
32090 If set to false, do not start a publish server and ignore the
32091 @code{publish-port} argument. This can be useful if there is already a
32092 standalone publish server standing next to the remote server.
32093
32094 @item @code{public-key}
32095 @item @code{private-key}
32096 Use the specific @var{file}s as the public/private key pair used to sign
32097 the store items being published.
32098
32099 @end table
32100 @end deftp
32101
32102 At least one remote worker must also be started on any machine of the
32103 local network to actually perform the builds and report their status.
32104
32105 @deftp {Data Type} cuirass-remote-worker-configuration
32106 Data type representing the configuration of the Cuirass remote-worker.
32107
32108 @table @asis
32109 @item @code{cuirass} (default: @code{cuirass})
32110 The Cuirass package to use.
32111
32112 @item @code{workers} (default: @code{1})
32113 Start @var{workers} parallel workers.
32114
32115 @item @code{server} (default: @code{#f})
32116 Do not use Avahi discovery and connect to the given @code{server} IP
32117 address instead.
32118
32119 @item @code{systems} (default: @code{(list (%current-system))})
32120 Only request builds for the given @var{systems}.
32121
32122 @item @code{log-file} (default: @code{"/var/log/cuirass-remote-worker.log"})
32123 Location of the log file.
32124
32125 @item @code{publish-port} (default: @code{5558})
32126 The TCP port of the publish server. It defaults to @code{5558}.
32127
32128 @item @code{substitute-urls} (default: @code{%default-substitute-urls})
32129 The list of URLs where to look for substitutes by default.
32130
32131 @item @code{public-key}
32132 @item @code{private-key}
32133 Use the specific @var{file}s as the public/private key pair used to sign
32134 the store items being published.
32135
32136 @end table
32137 @end deftp
32138
32139 @subsubheading Laminar
32140
32141 @uref{https://laminar.ohwg.net/, Laminar} is a lightweight and modular
32142 Continuous Integration service. It doesn't have a configuration web UI
32143 instead uses version-controllable configuration files and scripts.
32144
32145 Laminar encourages the use of existing tools such as bash and cron
32146 instead of reinventing them.
32147
32148 @defvr {Scheme Procedure} laminar-service-type
32149 The type of the Laminar service. Its value must be a
32150 @code{laminar-configuration} object, as described below.
32151
32152 All configuration values have defaults, a minimal configuration to get
32153 Laminar running is shown below. By default, the web interface is
32154 available on port 8080.
32155
32156 @lisp
32157 (service laminar-service-type)
32158 @end lisp
32159 @end defvr
32160
32161 @deftp {Data Type} laminar-configuration
32162 Data type representing the configuration of Laminar.
32163
32164 @table @asis
32165 @item @code{laminar} (default: @code{laminar})
32166 The Laminar package to use.
32167
32168 @item @code{home-directory} (default: @code{"/var/lib/laminar"})
32169 The directory for job configurations and run directories.
32170
32171 @item @code{bind-http} (default: @code{"*:8080"})
32172 The interface/port or unix socket on which laminard should listen for
32173 incoming connections to the web frontend.
32174
32175 @item @code{bind-rpc} (default: @code{"unix-abstract:laminar"})
32176 The interface/port or unix socket on which laminard should listen for
32177 incoming commands such as build triggers.
32178
32179 @item @code{title} (default: @code{"Laminar"})
32180 The page title to show in the web frontend.
32181
32182 @item @code{keep-rundirs} (default: @code{0})
32183 Set to an integer defining how many rundirs to keep per job. The
32184 lowest-numbered ones will be deleted. The default is 0, meaning all run
32185 dirs will be immediately deleted.
32186
32187 @item @code{archive-url} (default: @code{#f})
32188 The web frontend served by laminard will use this URL to form links to
32189 artefacts archived jobs.
32190
32191 @item @code{base-url} (default: @code{#f})
32192 Base URL to use for links to laminar itself.
32193
32194 @end table
32195 @end deftp
32196
32197 @node Power Management Services
32198 @subsection Power Management Services
32199
32200 @cindex tlp
32201 @cindex power management with TLP
32202 @subsubheading TLP daemon
32203
32204 The @code{(gnu services pm)} module provides a Guix service definition
32205 for the Linux power management tool TLP.
32206
32207 TLP enables various powersaving modes in userspace and kernel.
32208 Contrary to @code{upower-service}, it is not a passive,
32209 monitoring tool, as it will apply custom settings each time a new power
32210 source is detected. More information can be found at
32211 @uref{https://linrunner.de/en/tlp/tlp.html, TLP home page}.
32212
32213 @deffn {Scheme Variable} tlp-service-type
32214 The service type for the TLP tool. The default settings are optimised
32215 for battery life on most systems, but you can tweak them to your heart's
32216 content by adding a valid @code{tlp-configuration}:
32217 @lisp
32218 (service tlp-service-type
32219 (tlp-configuration
32220 (cpu-scaling-governor-on-ac (list "performance"))
32221 (sched-powersave-on-bat? #t)))
32222 @end lisp
32223 @end deffn
32224
32225 Each parameter definition is preceded by its type; for example,
32226 @samp{boolean foo} indicates that the @code{foo} parameter should be
32227 specified as a boolean. Types starting with @code{maybe-} denote
32228 parameters that won't show up in TLP config file when their value is
32229 left unset, or is explicitly set to the @code{%unset-value} value.
32230
32231 @c The following documentation was initially generated by
32232 @c (generate-tlp-documentation) in (gnu services pm). Manually maintained
32233 @c documentation is better, so we shouldn't hesitate to edit below as
32234 @c needed. However if the change you want to make to this documentation
32235 @c can be done in an automated way, it's probably easier to change
32236 @c (generate-documentation) than to make it below and have to deal with
32237 @c the churn as TLP updates.
32238
32239 Available @code{tlp-configuration} fields are:
32240
32241 @deftypevr {@code{tlp-configuration} parameter} package tlp
32242 The TLP package.
32243
32244 @end deftypevr
32245
32246 @deftypevr {@code{tlp-configuration} parameter} boolean tlp-enable?
32247 Set to true if you wish to enable TLP.
32248
32249 Defaults to @samp{#t}.
32250
32251 @end deftypevr
32252
32253 @deftypevr {@code{tlp-configuration} parameter} string tlp-default-mode
32254 Default mode when no power supply can be detected. Alternatives are AC
32255 and BAT.
32256
32257 Defaults to @samp{"AC"}.
32258
32259 @end deftypevr
32260
32261 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer disk-idle-secs-on-ac
32262 Number of seconds Linux kernel has to wait after the disk goes idle,
32263 before syncing on AC.
32264
32265 Defaults to @samp{0}.
32266
32267 @end deftypevr
32268
32269 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer disk-idle-secs-on-bat
32270 Same as @code{disk-idle-ac} but on BAT mode.
32271
32272 Defaults to @samp{2}.
32273
32274 @end deftypevr
32275
32276 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer max-lost-work-secs-on-ac
32277 Dirty pages flushing periodicity, expressed in seconds.
32278
32279 Defaults to @samp{15}.
32280
32281 @end deftypevr
32282
32283 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer max-lost-work-secs-on-bat
32284 Same as @code{max-lost-work-secs-on-ac} but on BAT mode.
32285
32286 Defaults to @samp{60}.
32287
32288 @end deftypevr
32289
32290 @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list cpu-scaling-governor-on-ac
32291 CPU frequency scaling governor on AC mode. With intel_pstate driver,
32292 alternatives are powersave and performance. With acpi-cpufreq driver,
32293 alternatives are ondemand, powersave, performance and conservative.
32294
32295 Defaults to @samp{disabled}.
32296
32297 @end deftypevr
32298
32299 @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list cpu-scaling-governor-on-bat
32300 Same as @code{cpu-scaling-governor-on-ac} but on BAT mode.
32301
32302 Defaults to @samp{disabled}.
32303
32304 @end deftypevr
32305
32306 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-min-freq-on-ac
32307 Set the min available frequency for the scaling governor on AC.
32308
32309 Defaults to @samp{disabled}.
32310
32311 @end deftypevr
32312
32313 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-max-freq-on-ac
32314 Set the max available frequency for the scaling governor on AC.
32315
32316 Defaults to @samp{disabled}.
32317
32318 @end deftypevr
32319
32320 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-min-freq-on-bat
32321 Set the min available frequency for the scaling governor on BAT.
32322
32323 Defaults to @samp{disabled}.
32324
32325 @end deftypevr
32326
32327 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-max-freq-on-bat
32328 Set the max available frequency for the scaling governor on BAT.
32329
32330 Defaults to @samp{disabled}.
32331
32332 @end deftypevr
32333
32334 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-min-perf-on-ac
32335 Limit the min P-state to control the power dissipation of the CPU, in AC
32336 mode. Values are stated as a percentage of the available performance.
32337
32338 Defaults to @samp{disabled}.
32339
32340 @end deftypevr
32341
32342 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-max-perf-on-ac
32343 Limit the max P-state to control the power dissipation of the CPU, in AC
32344 mode. Values are stated as a percentage of the available performance.
32345
32346 Defaults to @samp{disabled}.
32347
32348 @end deftypevr
32349
32350 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-min-perf-on-bat
32351 Same as @code{cpu-min-perf-on-ac} on BAT mode.
32352
32353 Defaults to @samp{disabled}.
32354
32355 @end deftypevr
32356
32357 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-max-perf-on-bat
32358 Same as @code{cpu-max-perf-on-ac} on BAT mode.
32359
32360 Defaults to @samp{disabled}.
32361
32362 @end deftypevr
32363
32364 @deftypevr {@code{tlp-configuration} parameter} maybe-boolean cpu-boost-on-ac?
32365 Enable CPU turbo boost feature on AC mode.
32366
32367 Defaults to @samp{disabled}.
32368
32369 @end deftypevr
32370
32371 @deftypevr {@code{tlp-configuration} parameter} maybe-boolean cpu-boost-on-bat?
32372 Same as @code{cpu-boost-on-ac?} on BAT mode.
32373
32374 Defaults to @samp{disabled}.
32375
32376 @end deftypevr
32377
32378 @deftypevr {@code{tlp-configuration} parameter} boolean sched-powersave-on-ac?
32379 Allow Linux kernel to minimize the number of CPU cores/hyper-threads
32380 used under light load conditions.
32381
32382 Defaults to @samp{#f}.
32383
32384 @end deftypevr
32385
32386 @deftypevr {@code{tlp-configuration} parameter} boolean sched-powersave-on-bat?
32387 Same as @code{sched-powersave-on-ac?} but on BAT mode.
32388
32389 Defaults to @samp{#t}.
32390
32391 @end deftypevr
32392
32393 @deftypevr {@code{tlp-configuration} parameter} boolean nmi-watchdog?
32394 Enable Linux kernel NMI watchdog.
32395
32396 Defaults to @samp{#f}.
32397
32398 @end deftypevr
32399
32400 @deftypevr {@code{tlp-configuration} parameter} maybe-string phc-controls
32401 For Linux kernels with PHC patch applied, change CPU voltages. An
32402 example value would be @samp{"F:V F:V F:V F:V"}.
32403
32404 Defaults to @samp{disabled}.
32405
32406 @end deftypevr
32407
32408 @deftypevr {@code{tlp-configuration} parameter} string energy-perf-policy-on-ac
32409 Set CPU performance versus energy saving policy on AC@. Alternatives are
32410 performance, normal, powersave.
32411
32412 Defaults to @samp{"performance"}.
32413
32414 @end deftypevr
32415
32416 @deftypevr {@code{tlp-configuration} parameter} string energy-perf-policy-on-bat
32417 Same as @code{energy-perf-policy-ac} but on BAT mode.
32418
32419 Defaults to @samp{"powersave"}.
32420
32421 @end deftypevr
32422
32423 @deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disks-devices
32424 Hard disk devices.
32425
32426 @end deftypevr
32427
32428 @deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disk-apm-level-on-ac
32429 Hard disk advanced power management level.
32430
32431 @end deftypevr
32432
32433 @deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disk-apm-level-on-bat
32434 Same as @code{disk-apm-bat} but on BAT mode.
32435
32436 @end deftypevr
32437
32438 @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-spindown-timeout-on-ac
32439 Hard disk spin down timeout. One value has to be specified for each
32440 declared hard disk.
32441
32442 Defaults to @samp{disabled}.
32443
32444 @end deftypevr
32445
32446 @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-spindown-timeout-on-bat
32447 Same as @code{disk-spindown-timeout-on-ac} but on BAT mode.
32448
32449 Defaults to @samp{disabled}.
32450
32451 @end deftypevr
32452
32453 @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-iosched
32454 Select IO scheduler for disk devices. One value has to be specified for
32455 each declared hard disk. Example alternatives are cfq, deadline and
32456 noop.
32457
32458 Defaults to @samp{disabled}.
32459
32460 @end deftypevr
32461
32462 @deftypevr {@code{tlp-configuration} parameter} string sata-linkpwr-on-ac
32463 SATA aggressive link power management (ALPM) level. Alternatives are
32464 min_power, medium_power, max_performance.
32465
32466 Defaults to @samp{"max_performance"}.
32467
32468 @end deftypevr
32469
32470 @deftypevr {@code{tlp-configuration} parameter} string sata-linkpwr-on-bat
32471 Same as @code{sata-linkpwr-ac} but on BAT mode.
32472
32473 Defaults to @samp{"min_power"}.
32474
32475 @end deftypevr
32476
32477 @deftypevr {@code{tlp-configuration} parameter} maybe-string sata-linkpwr-blacklist
32478 Exclude specified SATA host devices for link power management.
32479
32480 Defaults to @samp{disabled}.
32481
32482 @end deftypevr
32483
32484 @deftypevr {@code{tlp-configuration} parameter} maybe-on-off-boolean ahci-runtime-pm-on-ac?
32485 Enable Runtime Power Management for AHCI controller and disks on AC
32486 mode.
32487
32488 Defaults to @samp{disabled}.
32489
32490 @end deftypevr
32491
32492 @deftypevr {@code{tlp-configuration} parameter} maybe-on-off-boolean ahci-runtime-pm-on-bat?
32493 Same as @code{ahci-runtime-pm-on-ac} on BAT mode.
32494
32495 Defaults to @samp{disabled}.
32496
32497 @end deftypevr
32498
32499 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer ahci-runtime-pm-timeout
32500 Seconds of inactivity before disk is suspended.
32501
32502 Defaults to @samp{15}.
32503
32504 @end deftypevr
32505
32506 @deftypevr {@code{tlp-configuration} parameter} string pcie-aspm-on-ac
32507 PCI Express Active State Power Management level. Alternatives are
32508 default, performance, powersave.
32509
32510 Defaults to @samp{"performance"}.
32511
32512 @end deftypevr
32513
32514 @deftypevr {@code{tlp-configuration} parameter} string pcie-aspm-on-bat
32515 Same as @code{pcie-aspm-ac} but on BAT mode.
32516
32517 Defaults to @samp{"powersave"}.
32518
32519 @end deftypevr
32520
32521 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer start-charge-thresh-bat0
32522 Percentage when battery 0 should begin charging. Only supported on some laptops.
32523
32524 Defaults to @samp{disabled}.
32525
32526 @end deftypevr
32527
32528 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer stop-charge-thresh-bat0
32529 Percentage when battery 0 should stop charging. Only supported on some laptops.
32530
32531 Defaults to @samp{disabled}.
32532
32533 @end deftypevr
32534
32535 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer start-charge-thresh-bat1
32536 Percentage when battery 1 should begin charging. Only supported on some laptops.
32537
32538 Defaults to @samp{disabled}.
32539
32540 @end deftypevr
32541
32542 @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer stop-charge-thresh-bat1
32543 Percentage when battery 1 should stop charging. Only supported on some laptops.
32544
32545 Defaults to @samp{disabled}.
32546
32547 @end deftypevr
32548
32549 @deftypevr {@code{tlp-configuration} parameter} string radeon-power-profile-on-ac
32550 Radeon graphics clock speed level. Alternatives are low, mid, high,
32551 auto, default.
32552
32553 Defaults to @samp{"high"}.
32554
32555 @end deftypevr
32556
32557 @deftypevr {@code{tlp-configuration} parameter} string radeon-power-profile-on-bat
32558 Same as @code{radeon-power-ac} but on BAT mode.
32559
32560 Defaults to @samp{"low"}.
32561
32562 @end deftypevr
32563
32564 @deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-state-on-ac
32565 Radeon dynamic power management method (DPM). Alternatives are battery,
32566 performance.
32567
32568 Defaults to @samp{"performance"}.
32569
32570 @end deftypevr
32571
32572 @deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-state-on-bat
32573 Same as @code{radeon-dpm-state-ac} but on BAT mode.
32574
32575 Defaults to @samp{"battery"}.
32576
32577 @end deftypevr
32578
32579 @deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-perf-level-on-ac
32580 Radeon DPM performance level. Alternatives are auto, low, high.
32581
32582 Defaults to @samp{"auto"}.
32583
32584 @end deftypevr
32585
32586 @deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-perf-level-on-bat
32587 Same as @code{radeon-dpm-perf-ac} but on BAT mode.
32588
32589 Defaults to @samp{"auto"}.
32590
32591 @end deftypevr
32592
32593 @deftypevr {@code{tlp-configuration} parameter} on-off-boolean wifi-pwr-on-ac?
32594 Wifi power saving mode.
32595
32596 Defaults to @samp{#f}.
32597
32598 @end deftypevr
32599
32600 @deftypevr {@code{tlp-configuration} parameter} on-off-boolean wifi-pwr-on-bat?
32601 Same as @code{wifi-power-ac?} but on BAT mode.
32602
32603 Defaults to @samp{#t}.
32604
32605 @end deftypevr
32606
32607 @deftypevr {@code{tlp-configuration} parameter} y-n-boolean wol-disable?
32608 Disable wake on LAN.
32609
32610 Defaults to @samp{#t}.
32611
32612 @end deftypevr
32613
32614 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer sound-power-save-on-ac
32615 Timeout duration in seconds before activating audio power saving on
32616 Intel HDA and AC97 devices. A value of 0 disables power saving.
32617
32618 Defaults to @samp{0}.
32619
32620 @end deftypevr
32621
32622 @deftypevr {@code{tlp-configuration} parameter} non-negative-integer sound-power-save-on-bat
32623 Same as @code{sound-powersave-ac} but on BAT mode.
32624
32625 Defaults to @samp{1}.
32626
32627 @end deftypevr
32628
32629 @deftypevr {@code{tlp-configuration} parameter} y-n-boolean sound-power-save-controller?
32630 Disable controller in powersaving mode on Intel HDA devices.
32631
32632 Defaults to @samp{#t}.
32633
32634 @end deftypevr
32635
32636 @deftypevr {@code{tlp-configuration} parameter} boolean bay-poweroff-on-bat?
32637 Enable optical drive in UltraBay/MediaBay on BAT mode. Drive can be
32638 powered on again by releasing (and reinserting) the eject lever or by
32639 pressing the disc eject button on newer models.
32640
32641 Defaults to @samp{#f}.
32642
32643 @end deftypevr
32644
32645 @deftypevr {@code{tlp-configuration} parameter} string bay-device
32646 Name of the optical drive device to power off.
32647
32648 Defaults to @samp{"sr0"}.
32649
32650 @end deftypevr
32651
32652 @deftypevr {@code{tlp-configuration} parameter} string runtime-pm-on-ac
32653 Runtime Power Management for PCI(e) bus devices. Alternatives are on
32654 and auto.
32655
32656 Defaults to @samp{"on"}.
32657
32658 @end deftypevr
32659
32660 @deftypevr {@code{tlp-configuration} parameter} string runtime-pm-on-bat
32661 Same as @code{runtime-pm-ac} but on BAT mode.
32662
32663 Defaults to @samp{"auto"}.
32664
32665 @end deftypevr
32666
32667 @deftypevr {@code{tlp-configuration} parameter} boolean runtime-pm-all?
32668 Runtime Power Management for all PCI(e) bus devices, except blacklisted
32669 ones.
32670
32671 Defaults to @samp{#t}.
32672
32673 @end deftypevr
32674
32675 @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list runtime-pm-blacklist
32676 Exclude specified PCI(e) device addresses from Runtime Power Management.
32677
32678 Defaults to @samp{disabled}.
32679
32680 @end deftypevr
32681
32682 @deftypevr {@code{tlp-configuration} parameter} space-separated-string-list runtime-pm-driver-blacklist
32683 Exclude PCI(e) devices assigned to the specified drivers from Runtime
32684 Power Management.
32685
32686 @end deftypevr
32687
32688 @deftypevr {@code{tlp-configuration} parameter} boolean usb-autosuspend?
32689 Enable USB autosuspend feature.
32690
32691 Defaults to @samp{#t}.
32692
32693 @end deftypevr
32694
32695 @deftypevr {@code{tlp-configuration} parameter} maybe-string usb-blacklist
32696 Exclude specified devices from USB autosuspend.
32697
32698 Defaults to @samp{disabled}.
32699
32700 @end deftypevr
32701
32702 @deftypevr {@code{tlp-configuration} parameter} boolean usb-blacklist-wwan?
32703 Exclude WWAN devices from USB autosuspend.
32704
32705 Defaults to @samp{#t}.
32706
32707 @end deftypevr
32708
32709 @deftypevr {@code{tlp-configuration} parameter} maybe-string usb-whitelist
32710 Include specified devices into USB autosuspend, even if they are already
32711 excluded by the driver or via @code{usb-blacklist-wwan?}.
32712
32713 Defaults to @samp{disabled}.
32714
32715 @end deftypevr
32716
32717 @deftypevr {@code{tlp-configuration} parameter} maybe-boolean usb-autosuspend-disable-on-shutdown?
32718 Enable USB autosuspend before shutdown.
32719
32720 Defaults to @samp{disabled}.
32721
32722 @end deftypevr
32723
32724 @deftypevr {@code{tlp-configuration} parameter} boolean restore-device-state-on-startup?
32725 Restore radio device state (bluetooth, wifi, wwan) from previous
32726 shutdown on system startup.
32727
32728 Defaults to @samp{#f}.
32729
32730 @end deftypevr
32731
32732 @cindex thermald
32733 @cindex CPU frequency scaling with thermald
32734 @subsubheading Thermald daemon
32735
32736 The @code{(gnu services pm)} module provides an interface to
32737 thermald, a CPU frequency scaling service which helps prevent overheating.
32738
32739 @defvr {Scheme Variable} thermald-service-type
32740 This is the service type for
32741 @uref{https://01.org/linux-thermal-daemon/, thermald}, the Linux
32742 Thermal Daemon, which is responsible for controlling the thermal state
32743 of processors and preventing overheating.
32744 @end defvr
32745
32746 @deftp {Data Type} thermald-configuration
32747 Data type representing the configuration of @code{thermald-service-type}.
32748
32749 @table @asis
32750 @item @code{adaptive?} (default: @code{#f})
32751 Use @acronym{DPTF, Dynamic Power and Thermal Framework} adaptive tables
32752 when present.
32753
32754 @item @code{ignore-cpuid-check?} (default: @code{#f})
32755 Ignore cpuid check for supported CPU models.
32756
32757 @item @code{thermald} (default: @var{thermald})
32758 Package object of thermald.
32759
32760 @end table
32761 @end deftp
32762
32763 @node Audio Services
32764 @subsection Audio Services
32765
32766 The @code{(gnu services audio)} module provides a service to start MPD
32767 (the Music Player Daemon).
32768
32769 @cindex mpd
32770 @subsubheading Music Player Daemon
32771
32772 The Music Player Daemon (MPD) is a service that can play music while
32773 being controlled from the local machine or over the network by a variety
32774 of clients.
32775
32776 The following example shows how one might run @code{mpd} as user
32777 @code{"bob"} on port @code{6666}. It uses pulseaudio for output.
32778
32779 @lisp
32780 (service mpd-service-type
32781 (mpd-configuration
32782 (user "bob")
32783 (port "6666")))
32784 @end lisp
32785
32786 @defvr {Scheme Variable} mpd-service-type
32787 The service type for @command{mpd}
32788 @end defvr
32789
32790 @deftp {Data Type} mpd-configuration
32791 Data type representing the configuration of @command{mpd}.
32792
32793 @table @asis
32794 @item @code{user} (default: @code{"mpd"})
32795 The user to run mpd as.
32796
32797 @item @code{music-dir} (default: @code{"~/Music"})
32798 The directory to scan for music files.
32799
32800 @item @code{playlist-dir} (default: @code{"~/.mpd/playlists"})
32801 The directory to store playlists.
32802
32803 @item @code{db-file} (default: @code{"~/.mpd/tag_cache"})
32804 The location of the music database.
32805
32806 @item @code{state-file} (default: @code{"~/.mpd/state"})
32807 The location of the file that stores current MPD's state.
32808
32809 @item @code{sticker-file} (default: @code{"~/.mpd/sticker.sql"})
32810 The location of the sticker database.
32811
32812 @item @code{port} (default: @code{"6600"})
32813 The port to run mpd on.
32814
32815 @item @code{address} (default: @code{"any"})
32816 The address that mpd will bind to. To use a Unix domain socket,
32817 an absolute path can be specified here.
32818
32819 @item @code{outputs} (default: @code{"(list (mpd-output))"})
32820 The audio outputs that MPD can use. By default this is a single output using pulseaudio.
32821
32822 @end table
32823 @end deftp
32824
32825 @deftp {Data Type} mpd-output
32826 Data type representing an @command{mpd} audio output.
32827
32828 @table @asis
32829 @item @code{name} (default: @code{"MPD"})
32830 The name of the audio output.
32831
32832 @item @code{type} (default: @code{"pulse"})
32833 The type of audio output.
32834
32835 @item @code{enabled?} (default: @code{#t})
32836 Specifies whether this audio output is enabled when MPD is started. By
32837 default, all audio outputs are enabled. This is just the default
32838 setting when there is no state file; with a state file, the previous
32839 state is restored.
32840
32841 @item @code{tags?} (default: @code{#t})
32842 If set to @code{#f}, then MPD will not send tags to this output. This
32843 is only useful for output plugins that can receive tags, for example the
32844 @code{httpd} output plugin.
32845
32846 @item @code{always-on?} (default: @code{#f})
32847 If set to @code{#t}, then MPD attempts to keep this audio output always
32848 open. This may be useful for streaming servers, when you don’t want to
32849 disconnect all listeners even when playback is accidentally stopped.
32850
32851 @item @code{mixer-type}
32852 This field accepts a symbol that specifies which mixer should be used
32853 for this audio output: the @code{hardware} mixer, the @code{software}
32854 mixer, the @code{null} mixer (allows setting the volume, but with no
32855 effect; this can be used as a trick to implement an external mixer
32856 External Mixer) or no mixer (@code{none}).
32857
32858 @item @code{extra-options} (default: @code{'()})
32859 An association list of option symbols to string values to be appended to
32860 the audio output configuration.
32861
32862 @end table
32863 @end deftp
32864
32865 The following example shows a configuration of @code{mpd} that provides
32866 an HTTP audio streaming output.
32867
32868 @lisp
32869 (service mpd-service-type
32870 (mpd-configuration
32871 (outputs
32872 (list (mpd-output
32873 (name "streaming")
32874 (type "httpd")
32875 (mixer-type 'null)
32876 (extra-options
32877 `((encoder . "vorbis")
32878 (port . "8080"))))))))
32879 @end lisp
32880
32881
32882 @node Virtualization Services
32883 @subsection Virtualization Services
32884
32885 The @code{(gnu services virtualization)} module provides services for
32886 the libvirt and virtlog daemons, as well as other virtualization-related
32887 services.
32888
32889 @subsubheading Libvirt daemon
32890
32891 @code{libvirtd} is the server side daemon component of the libvirt
32892 virtualization management system. This daemon runs on host servers
32893 and performs required management tasks for virtualized guests.
32894
32895 @deffn {Scheme Variable} libvirt-service-type
32896 This is the type of the @uref{https://libvirt.org, libvirt daemon}.
32897 Its value must be a @code{libvirt-configuration}.
32898
32899 @lisp
32900 (service libvirt-service-type
32901 (libvirt-configuration
32902 (unix-sock-group "libvirt")
32903 (tls-port "16555")))
32904 @end lisp
32905 @end deffn
32906
32907 @c Auto-generated with (generate-libvirt-documentation)
32908 Available @code{libvirt-configuration} fields are:
32909
32910 @deftypevr {@code{libvirt-configuration} parameter} package libvirt
32911 Libvirt package.
32912
32913 @end deftypevr
32914
32915 @deftypevr {@code{libvirt-configuration} parameter} boolean listen-tls?
32916 Flag listening for secure TLS connections on the public TCP/IP port.
32917 You must set @code{listen} for this to have any effect.
32918
32919 It is necessary to setup a CA and issue server certificates before using
32920 this capability.
32921
32922 Defaults to @samp{#t}.
32923
32924 @end deftypevr
32925
32926 @deftypevr {@code{libvirt-configuration} parameter} boolean listen-tcp?
32927 Listen for unencrypted TCP connections on the public TCP/IP port. You must
32928 set @code{listen} for this to have any effect.
32929
32930 Using the TCP socket requires SASL authentication by default. Only SASL
32931 mechanisms which support data encryption are allowed. This is
32932 DIGEST_MD5 and GSSAPI (Kerberos5).
32933
32934 Defaults to @samp{#f}.
32935
32936 @end deftypevr
32937
32938 @deftypevr {@code{libvirt-configuration} parameter} string tls-port
32939 Port for accepting secure TLS connections. This can be a port number,
32940 or service name.
32941
32942 Defaults to @samp{"16514"}.
32943
32944 @end deftypevr
32945
32946 @deftypevr {@code{libvirt-configuration} parameter} string tcp-port
32947 Port for accepting insecure TCP connections. This can be a port number,
32948 or service name.
32949
32950 Defaults to @samp{"16509"}.
32951
32952 @end deftypevr
32953
32954 @deftypevr {@code{libvirt-configuration} parameter} string listen-addr
32955 IP address or hostname used for client connections.
32956
32957 Defaults to @samp{"0.0.0.0"}.
32958
32959 @end deftypevr
32960
32961 @deftypevr {@code{libvirt-configuration} parameter} boolean mdns-adv?
32962 Flag toggling mDNS advertisement of the libvirt service.
32963
32964 Alternatively can disable for all services on a host by stopping the
32965 Avahi daemon.
32966
32967 Defaults to @samp{#f}.
32968
32969 @end deftypevr
32970
32971 @deftypevr {@code{libvirt-configuration} parameter} string mdns-name
32972 Default mDNS advertisement name. This must be unique on the immediate
32973 broadcast network.
32974
32975 Defaults to @samp{"Virtualization Host <hostname>"}.
32976
32977 @end deftypevr
32978
32979 @deftypevr {@code{libvirt-configuration} parameter} string unix-sock-group
32980 UNIX domain socket group ownership. This can be used to allow a
32981 'trusted' set of users access to management capabilities without
32982 becoming root.
32983
32984 Defaults to @samp{"root"}.
32985
32986 @end deftypevr
32987
32988 @deftypevr {@code{libvirt-configuration} parameter} string unix-sock-ro-perms
32989 UNIX socket permissions for the R/O socket. This is used for monitoring
32990 VM status only.
32991
32992 Defaults to @samp{"0777"}.
32993
32994 @end deftypevr
32995
32996 @deftypevr {@code{libvirt-configuration} parameter} string unix-sock-rw-perms
32997 UNIX socket permissions for the R/W socket. Default allows only root.
32998 If PolicyKit is enabled on the socket, the default will change to allow
32999 everyone (eg, 0777)
33000
33001 Defaults to @samp{"0770"}.
33002
33003 @end deftypevr
33004
33005 @deftypevr {@code{libvirt-configuration} parameter} string unix-sock-admin-perms
33006 UNIX socket permissions for the admin socket. Default allows only owner
33007 (root), do not change it unless you are sure to whom you are exposing
33008 the access to.
33009
33010 Defaults to @samp{"0777"}.
33011
33012 @end deftypevr
33013
33014 @deftypevr {@code{libvirt-configuration} parameter} string unix-sock-dir
33015 The directory in which sockets will be found/created.
33016
33017 Defaults to @samp{"/var/run/libvirt"}.
33018
33019 @end deftypevr
33020
33021 @deftypevr {@code{libvirt-configuration} parameter} string auth-unix-ro
33022 Authentication scheme for UNIX read-only sockets. By default socket
33023 permissions allow anyone to connect
33024
33025 Defaults to @samp{"polkit"}.
33026
33027 @end deftypevr
33028
33029 @deftypevr {@code{libvirt-configuration} parameter} string auth-unix-rw
33030 Authentication scheme for UNIX read-write sockets. By default socket
33031 permissions only allow root. If PolicyKit support was compiled into
33032 libvirt, the default will be to use 'polkit' auth.
33033
33034 Defaults to @samp{"polkit"}.
33035
33036 @end deftypevr
33037
33038 @deftypevr {@code{libvirt-configuration} parameter} string auth-tcp
33039 Authentication scheme for TCP sockets. If you don't enable SASL, then
33040 all TCP traffic is cleartext. Don't do this outside of a dev/test
33041 scenario.
33042
33043 Defaults to @samp{"sasl"}.
33044
33045 @end deftypevr
33046
33047 @deftypevr {@code{libvirt-configuration} parameter} string auth-tls
33048 Authentication scheme for TLS sockets. TLS sockets already have
33049 encryption provided by the TLS layer, and limited authentication is done
33050 by certificates.
33051
33052 It is possible to make use of any SASL authentication mechanism as well,
33053 by using 'sasl' for this option
33054
33055 Defaults to @samp{"none"}.
33056
33057 @end deftypevr
33058
33059 @deftypevr {@code{libvirt-configuration} parameter} optional-list access-drivers
33060 API access control scheme.
33061
33062 By default an authenticated user is allowed access to all APIs. Access
33063 drivers can place restrictions on this.
33064
33065 Defaults to @samp{()}.
33066
33067 @end deftypevr
33068
33069 @deftypevr {@code{libvirt-configuration} parameter} string key-file
33070 Server key file path. If set to an empty string, then no private key is
33071 loaded.
33072
33073 Defaults to @samp{""}.
33074
33075 @end deftypevr
33076
33077 @deftypevr {@code{libvirt-configuration} parameter} string cert-file
33078 Server key file path. If set to an empty string, then no certificate is
33079 loaded.
33080
33081 Defaults to @samp{""}.
33082
33083 @end deftypevr
33084
33085 @deftypevr {@code{libvirt-configuration} parameter} string ca-file
33086 Server key file path. If set to an empty string, then no CA certificate
33087 is loaded.
33088
33089 Defaults to @samp{""}.
33090
33091 @end deftypevr
33092
33093 @deftypevr {@code{libvirt-configuration} parameter} string crl-file
33094 Certificate revocation list path. If set to an empty string, then no
33095 CRL is loaded.
33096
33097 Defaults to @samp{""}.
33098
33099 @end deftypevr
33100
33101 @deftypevr {@code{libvirt-configuration} parameter} boolean tls-no-sanity-cert
33102 Disable verification of our own server certificates.
33103
33104 When libvirtd starts it performs some sanity checks against its own
33105 certificates.
33106
33107 Defaults to @samp{#f}.
33108
33109 @end deftypevr
33110
33111 @deftypevr {@code{libvirt-configuration} parameter} boolean tls-no-verify-cert
33112 Disable verification of client certificates.
33113
33114 Client certificate verification is the primary authentication mechanism.
33115 Any client which does not present a certificate signed by the CA will be
33116 rejected.
33117
33118 Defaults to @samp{#f}.
33119
33120 @end deftypevr
33121
33122 @deftypevr {@code{libvirt-configuration} parameter} optional-list tls-allowed-dn-list
33123 Whitelist of allowed x509 Distinguished Name.
33124
33125 Defaults to @samp{()}.
33126
33127 @end deftypevr
33128
33129 @deftypevr {@code{libvirt-configuration} parameter} optional-list sasl-allowed-usernames
33130 Whitelist of allowed SASL usernames. The format for username depends on
33131 the SASL authentication mechanism.
33132
33133 Defaults to @samp{()}.
33134
33135 @end deftypevr
33136
33137 @deftypevr {@code{libvirt-configuration} parameter} string tls-priority
33138 Override the compile time default TLS priority string. The default is
33139 usually @samp{"NORMAL"} unless overridden at build time. Only set this is it
33140 is desired for libvirt to deviate from the global default settings.
33141
33142 Defaults to @samp{"NORMAL"}.
33143
33144 @end deftypevr
33145
33146 @deftypevr {@code{libvirt-configuration} parameter} integer max-clients
33147 Maximum number of concurrent client connections to allow over all
33148 sockets combined.
33149
33150 Defaults to @samp{5000}.
33151
33152 @end deftypevr
33153
33154 @deftypevr {@code{libvirt-configuration} parameter} integer max-queued-clients
33155 Maximum length of queue of connections waiting to be accepted by the
33156 daemon. Note, that some protocols supporting retransmission may obey
33157 this so that a later reattempt at connection succeeds.
33158
33159 Defaults to @samp{1000}.
33160
33161 @end deftypevr
33162
33163 @deftypevr {@code{libvirt-configuration} parameter} integer max-anonymous-clients
33164 Maximum length of queue of accepted but not yet authenticated clients.
33165 Set this to zero to turn this feature off
33166
33167 Defaults to @samp{20}.
33168
33169 @end deftypevr
33170
33171 @deftypevr {@code{libvirt-configuration} parameter} integer min-workers
33172 Number of workers to start up initially.
33173
33174 Defaults to @samp{5}.
33175
33176 @end deftypevr
33177
33178 @deftypevr {@code{libvirt-configuration} parameter} integer max-workers
33179 Maximum number of worker threads.
33180
33181 If the number of active clients exceeds @code{min-workers}, then more
33182 threads are spawned, up to max_workers limit. Typically you'd want
33183 max_workers to equal maximum number of clients allowed.
33184
33185 Defaults to @samp{20}.
33186
33187 @end deftypevr
33188
33189 @deftypevr {@code{libvirt-configuration} parameter} integer prio-workers
33190 Number of priority workers. If all workers from above pool are stuck,
33191 some calls marked as high priority (notably domainDestroy) can be
33192 executed in this pool.
33193
33194 Defaults to @samp{5}.
33195
33196 @end deftypevr
33197
33198 @deftypevr {@code{libvirt-configuration} parameter} integer max-requests
33199 Total global limit on concurrent RPC calls.
33200
33201 Defaults to @samp{20}.
33202
33203 @end deftypevr
33204
33205 @deftypevr {@code{libvirt-configuration} parameter} integer max-client-requests
33206 Limit on concurrent requests from a single client connection. To avoid
33207 one client monopolizing the server this should be a small fraction of
33208 the global max_requests and max_workers parameter.
33209
33210 Defaults to @samp{5}.
33211
33212 @end deftypevr
33213
33214 @deftypevr {@code{libvirt-configuration} parameter} integer admin-min-workers
33215 Same as @code{min-workers} but for the admin interface.
33216
33217 Defaults to @samp{1}.
33218
33219 @end deftypevr
33220
33221 @deftypevr {@code{libvirt-configuration} parameter} integer admin-max-workers
33222 Same as @code{max-workers} but for the admin interface.
33223
33224 Defaults to @samp{5}.
33225
33226 @end deftypevr
33227
33228 @deftypevr {@code{libvirt-configuration} parameter} integer admin-max-clients
33229 Same as @code{max-clients} but for the admin interface.
33230
33231 Defaults to @samp{5}.
33232
33233 @end deftypevr
33234
33235 @deftypevr {@code{libvirt-configuration} parameter} integer admin-max-queued-clients
33236 Same as @code{max-queued-clients} but for the admin interface.
33237
33238 Defaults to @samp{5}.
33239
33240 @end deftypevr
33241
33242 @deftypevr {@code{libvirt-configuration} parameter} integer admin-max-client-requests
33243 Same as @code{max-client-requests} but for the admin interface.
33244
33245 Defaults to @samp{5}.
33246
33247 @end deftypevr
33248
33249 @deftypevr {@code{libvirt-configuration} parameter} integer log-level
33250 Logging level. 4 errors, 3 warnings, 2 information, 1 debug.
33251
33252 Defaults to @samp{3}.
33253
33254 @end deftypevr
33255
33256 @deftypevr {@code{libvirt-configuration} parameter} string log-filters
33257 Logging filters.
33258
33259 A filter allows to select a different logging level for a given category
33260 of logs. The format for a filter is one of:
33261
33262 @itemize @bullet
33263 @item
33264 x:name
33265
33266 @item
33267 x:+name
33268
33269 @end itemize
33270
33271 where @code{name} is a string which is matched against the category
33272 given in the @code{VIR_LOG_INIT()} at the top of each libvirt source
33273 file, e.g., @samp{"remote"}, @samp{"qemu"}, or @samp{"util.json"} (the
33274 name in the filter can be a substring of the full category name, in
33275 order to match multiple similar categories), the optional @samp{"+"}
33276 prefix tells libvirt to log stack trace for each message matching name,
33277 and @code{x} is the minimal level where matching messages should be
33278 logged:
33279
33280 @itemize @bullet
33281 @item
33282 1: DEBUG
33283
33284 @item
33285 2: INFO
33286
33287 @item
33288 3: WARNING
33289
33290 @item
33291 4: ERROR
33292
33293 @end itemize
33294
33295 Multiple filters can be defined in a single filters statement, they just
33296 need to be separated by spaces.
33297
33298 Defaults to @samp{"3:remote 4:event"}.
33299
33300 @end deftypevr
33301
33302 @deftypevr {@code{libvirt-configuration} parameter} string log-outputs
33303 Logging outputs.
33304
33305 An output is one of the places to save logging information. The format
33306 for an output can be:
33307
33308 @table @code
33309 @item x:stderr
33310 output goes to stderr
33311
33312 @item x:syslog:name
33313 use syslog for the output and use the given name as the ident
33314
33315 @item x:file:file_path
33316 output to a file, with the given filepath
33317
33318 @item x:journald
33319 output to journald logging system
33320
33321 @end table
33322
33323 In all case the x prefix is the minimal level, acting as a filter
33324
33325 @itemize @bullet
33326 @item
33327 1: DEBUG
33328
33329 @item
33330 2: INFO
33331
33332 @item
33333 3: WARNING
33334
33335 @item
33336 4: ERROR
33337
33338 @end itemize
33339
33340 Multiple outputs can be defined, they just need to be separated by
33341 spaces.
33342
33343 Defaults to @samp{"3:stderr"}.
33344
33345 @end deftypevr
33346
33347 @deftypevr {@code{libvirt-configuration} parameter} integer audit-level
33348 Allows usage of the auditing subsystem to be altered
33349
33350 @itemize @bullet
33351 @item
33352 0: disable all auditing
33353
33354 @item
33355 1: enable auditing, only if enabled on host
33356
33357 @item
33358 2: enable auditing, and exit if disabled on host.
33359
33360 @end itemize
33361
33362 Defaults to @samp{1}.
33363
33364 @end deftypevr
33365
33366 @deftypevr {@code{libvirt-configuration} parameter} boolean audit-logging
33367 Send audit messages via libvirt logging infrastructure.
33368
33369 Defaults to @samp{#f}.
33370
33371 @end deftypevr
33372
33373 @deftypevr {@code{libvirt-configuration} parameter} optional-string host-uuid
33374 Host UUID@. UUID must not have all digits be the same.
33375
33376 Defaults to @samp{""}.
33377
33378 @end deftypevr
33379
33380 @deftypevr {@code{libvirt-configuration} parameter} string host-uuid-source
33381 Source to read host UUID.
33382
33383 @itemize @bullet
33384 @item
33385 @code{smbios}: fetch the UUID from @code{dmidecode -s system-uuid}
33386
33387 @item
33388 @code{machine-id}: fetch the UUID from @code{/etc/machine-id}
33389
33390 @end itemize
33391
33392 If @code{dmidecode} does not provide a valid UUID a temporary UUID will
33393 be generated.
33394
33395 Defaults to @samp{"smbios"}.
33396
33397 @end deftypevr
33398
33399 @deftypevr {@code{libvirt-configuration} parameter} integer keepalive-interval
33400 A keepalive message is sent to a client after @code{keepalive_interval}
33401 seconds of inactivity to check if the client is still responding. If
33402 set to -1, libvirtd will never send keepalive requests; however clients
33403 can still send them and the daemon will send responses.
33404
33405 Defaults to @samp{5}.
33406
33407 @end deftypevr
33408
33409 @deftypevr {@code{libvirt-configuration} parameter} integer keepalive-count
33410 Maximum number of keepalive messages that are allowed to be sent to the
33411 client without getting any response before the connection is considered
33412 broken.
33413
33414 In other words, the connection is automatically closed approximately
33415 after @code{keepalive_interval * (keepalive_count + 1)} seconds since
33416 the last message received from the client. When @code{keepalive-count}
33417 is set to 0, connections will be automatically closed after
33418 @code{keepalive-interval} seconds of inactivity without sending any
33419 keepalive messages.
33420
33421 Defaults to @samp{5}.
33422
33423 @end deftypevr
33424
33425 @deftypevr {@code{libvirt-configuration} parameter} integer admin-keepalive-interval
33426 Same as above but for admin interface.
33427
33428 Defaults to @samp{5}.
33429
33430 @end deftypevr
33431
33432 @deftypevr {@code{libvirt-configuration} parameter} integer admin-keepalive-count
33433 Same as above but for admin interface.
33434
33435 Defaults to @samp{5}.
33436
33437 @end deftypevr
33438
33439 @deftypevr {@code{libvirt-configuration} parameter} integer ovs-timeout
33440 Timeout for Open vSwitch calls.
33441
33442 The @code{ovs-vsctl} utility is used for the configuration and its
33443 timeout option is set by default to 5 seconds to avoid potential
33444 infinite waits blocking libvirt.
33445
33446 Defaults to @samp{5}.
33447
33448 @end deftypevr
33449
33450 @c %end of autogenerated docs
33451
33452 @subsubheading Virtlog daemon
33453 The virtlogd service is a server side daemon component of libvirt that is
33454 used to manage logs from virtual machine consoles.
33455
33456 This daemon is not used directly by libvirt client applications, rather it
33457 is called on their behalf by @code{libvirtd}. By maintaining the logs in a
33458 standalone daemon, the main @code{libvirtd} daemon can be restarted without
33459 risk of losing logs. The @code{virtlogd} daemon has the ability to re-exec()
33460 itself upon receiving @code{SIGUSR1}, to allow live upgrades without downtime.
33461
33462 @deffn {Scheme Variable} virtlog-service-type
33463 This is the type of the virtlog daemon.
33464 Its value must be a @code{virtlog-configuration}.
33465
33466 @lisp
33467 (service virtlog-service-type
33468 (virtlog-configuration
33469 (max-clients 1000)))
33470 @end lisp
33471 @end deffn
33472
33473 @deftypevar {@code{libvirt} parameter} package libvirt
33474 Libvirt package.
33475 @end deftypevar
33476
33477 @deftypevr {@code{virtlog-configuration} parameter} integer log-level
33478 Logging level. 4 errors, 3 warnings, 2 information, 1 debug.
33479
33480 Defaults to @samp{3}.
33481
33482 @end deftypevr
33483
33484 @deftypevr {@code{virtlog-configuration} parameter} string log-filters
33485 Logging filters.
33486
33487 A filter allows to select a different logging level for a given category
33488 of logs The format for a filter is one of:
33489
33490 @itemize @bullet
33491 @item
33492 x:name
33493
33494 @item
33495 x:+name
33496
33497 @end itemize
33498
33499 where @code{name} is a string which is matched against the category
33500 given in the @code{VIR_LOG_INIT()} at the top of each libvirt source
33501 file, e.g., "remote", "qemu", or "util.json" (the name in the filter can
33502 be a substring of the full category name, in order to match multiple
33503 similar categories), the optional "+" prefix tells libvirt to log stack
33504 trace for each message matching name, and @code{x} is the minimal level
33505 where matching messages should be logged:
33506
33507 @itemize @bullet
33508 @item
33509 1: DEBUG
33510
33511 @item
33512 2: INFO
33513
33514 @item
33515 3: WARNING
33516
33517 @item
33518 4: ERROR
33519
33520 @end itemize
33521
33522 Multiple filters can be defined in a single filters statement, they just
33523 need to be separated by spaces.
33524
33525 Defaults to @samp{"3:remote 4:event"}.
33526
33527 @end deftypevr
33528
33529 @deftypevr {@code{virtlog-configuration} parameter} string log-outputs
33530 Logging outputs.
33531
33532 An output is one of the places to save logging information The format
33533 for an output can be:
33534
33535 @table @code
33536 @item x:stderr
33537 output goes to stderr
33538
33539 @item x:syslog:name
33540 use syslog for the output and use the given name as the ident
33541
33542 @item x:file:file_path
33543 output to a file, with the given filepath
33544
33545 @item x:journald
33546 output to journald logging system
33547
33548 @end table
33549
33550 In all case the x prefix is the minimal level, acting as a filter
33551
33552 @itemize @bullet
33553 @item
33554 1: DEBUG
33555
33556 @item
33557 2: INFO
33558
33559 @item
33560 3: WARNING
33561
33562 @item
33563 4: ERROR
33564
33565 @end itemize
33566
33567 Multiple outputs can be defined, they just need to be separated by
33568 spaces.
33569
33570 Defaults to @samp{"3:stderr"}.
33571
33572 @end deftypevr
33573
33574 @deftypevr {@code{virtlog-configuration} parameter} integer max-clients
33575 Maximum number of concurrent client connections to allow over all
33576 sockets combined.
33577
33578 Defaults to @samp{1024}.
33579
33580 @end deftypevr
33581
33582 @deftypevr {@code{virtlog-configuration} parameter} integer max-size
33583 Maximum file size before rolling over.
33584
33585 Defaults to @samp{2MB}
33586
33587 @end deftypevr
33588
33589 @deftypevr {@code{virtlog-configuration} parameter} integer max-backups
33590 Maximum number of backup files to keep.
33591
33592 Defaults to @samp{3}
33593
33594 @end deftypevr
33595
33596 @anchor{transparent-emulation-qemu}
33597 @subsubheading Transparent Emulation with QEMU
33598
33599 @cindex emulation
33600 @cindex @code{binfmt_misc}
33601 @code{qemu-binfmt-service-type} provides support for transparent
33602 emulation of program binaries built for different architectures---e.g.,
33603 it allows you to transparently execute an ARMv7 program on an x86_64
33604 machine. It achieves this by combining the @uref{https://www.qemu.org,
33605 QEMU} emulator and the @code{binfmt_misc} feature of the kernel Linux.
33606 This feature only allows you to emulate GNU/Linux on a different
33607 architecture, but see below for GNU/Hurd support.
33608
33609 @defvr {Scheme Variable} qemu-binfmt-service-type
33610 This is the type of the QEMU/binfmt service for transparent emulation.
33611 Its value must be a @code{qemu-binfmt-configuration} object, which
33612 specifies the QEMU package to use as well as the architecture we want to
33613 emulated:
33614
33615 @lisp
33616 (service qemu-binfmt-service-type
33617 (qemu-binfmt-configuration
33618 (platforms (lookup-qemu-platforms "arm" "aarch64"))))
33619 @end lisp
33620
33621 In this example, we enable transparent emulation for the ARM and aarch64
33622 platforms. Running @code{herd stop qemu-binfmt} turns it off, and
33623 running @code{herd start qemu-binfmt} turns it back on (@pxref{Invoking
33624 herd, the @command{herd} command,, shepherd, The GNU Shepherd Manual}).
33625 @end defvr
33626
33627 @deftp {Data Type} qemu-binfmt-configuration
33628 This is the configuration for the @code{qemu-binfmt} service.
33629
33630 @table @asis
33631 @item @code{platforms} (default: @code{'()})
33632 The list of emulated QEMU platforms. Each item must be a @dfn{platform
33633 object} as returned by @code{lookup-qemu-platforms} (see below).
33634
33635 For example, let's suppose you're on an x86_64 machine and you have this
33636 service:
33637
33638 @lisp
33639 (service qemu-binfmt-service-type
33640 (qemu-binfmt-configuration
33641 (platforms (lookup-qemu-platforms "arm"))))
33642 @end lisp
33643
33644 You can run:
33645
33646 @example
33647 guix build -s armhf-linux inkscape
33648 @end example
33649
33650 @noindent
33651 and it will build Inkscape for ARMv7 @emph{as if it were a native
33652 build}, transparently using QEMU to emulate the ARMv7 CPU@. Pretty handy
33653 if you'd like to test a package build for an architecture you don't have
33654 access to!
33655
33656 @item @code{qemu} (default: @code{qemu})
33657 The QEMU package to use.
33658 @end table
33659 @end deftp
33660
33661 @deffn {Scheme Procedure} lookup-qemu-platforms @var{platforms}@dots{}
33662 Return the list of QEMU platform objects corresponding to
33663 @var{platforms}@dots{}. @var{platforms} must be a list of strings
33664 corresponding to platform names, such as @code{"arm"}, @code{"sparc"},
33665 @code{"mips64el"}, and so on.
33666 @end deffn
33667
33668 @deffn {Scheme Procedure} qemu-platform? @var{obj}
33669 Return true if @var{obj} is a platform object.
33670 @end deffn
33671
33672 @deffn {Scheme Procedure} qemu-platform-name @var{platform}
33673 Return the name of @var{platform}---a string such as @code{"arm"}.
33674 @end deffn
33675
33676
33677 @subsubheading QEMU Guest Agent
33678
33679 @cindex emulation
33680
33681 The QEMU guest agent provides control over the emulated system to the
33682 host. The @code{qemu-guest-agent} service runs the agent on Guix
33683 guests. To control the agent from the host, open a socket by invoking
33684 QEMU with the following arguments:
33685
33686 @example
33687 qemu-system-x86_64 \
33688 -chardev socket,path=/tmp/qga.sock,server=on,wait=off,id=qga0 \
33689 -device virtio-serial \
33690 -device virtserialport,chardev=qga0,name=org.qemu.guest_agent.0 \
33691 ...
33692 @end example
33693
33694 This creates a socket at @file{/tmp/qga.sock} on the host. Once the
33695 guest agent is running, you can issue commands with @code{socat}:
33696
33697 @example
33698 $ guix shell socat -- socat unix-connect:/tmp/qga.sock stdio
33699 @{"execute": "guest-get-host-name"@}
33700 @{"return": @{"host-name": "guix"@}@}
33701 @end example
33702
33703 See @url{https://wiki.qemu.org/Features/GuestAgent,QEMU guest agent
33704 documentation} for more options and commands.
33705
33706 @defvr {Scheme Variable} qemu-guest-agent-service-type
33707 Service type for the QEMU guest agent service.
33708 @end defvr
33709
33710 @deftp {Data Type} qemu-guest-agent-configuration
33711 Configuration for the @code{qemu-guest-agent} service.
33712
33713 @table @asis
33714 @item @code{qemu} (default: @code{qemu-minimal})
33715 The QEMU package to use.
33716
33717 @item @code{device} (default: @code{""})
33718 File name of the device or socket the agent uses to communicate with the
33719 host. If empty, QEMU uses a default file name.
33720 @end table
33721 @end deftp
33722
33723
33724 @subsubheading The Hurd in a Virtual Machine
33725
33726 @cindex @code{hurd}
33727 @cindex the Hurd
33728 @cindex childhurd
33729
33730 Service @code{hurd-vm} provides support for running GNU/Hurd in a
33731 virtual machine (VM), a so-called @dfn{childhurd}. This service is meant
33732 to be used on GNU/Linux and the given GNU/Hurd operating system
33733 configuration is cross-compiled. The virtual machine is a Shepherd
33734 service that can be referred to by the names @code{hurd-vm} and
33735 @code{childhurd} and be controlled with commands such as:
33736
33737 @example
33738 herd start hurd-vm
33739 herd stop childhurd
33740 @end example
33741
33742 When the service is running, you can view its console by connecting to
33743 it with a VNC client, for example with:
33744
33745 @example
33746 guix shell tigervnc-client -- vncviewer localhost:5900
33747 @end example
33748
33749 The default configuration (see @code{hurd-vm-configuration} below)
33750 spawns a secure shell (SSH) server in your GNU/Hurd system, which QEMU
33751 (the virtual machine emulator) redirects to port 10222 on the host.
33752 Thus, you can connect over SSH to the childhurd with:
33753
33754 @example
33755 ssh root@@localhost -p 10022
33756 @end example
33757
33758 The childhurd is volatile and stateless: it starts with a fresh root
33759 file system every time you restart it. By default though, all the files
33760 under @file{/etc/childhurd} on the host are copied as is to the root
33761 file system of the childhurd when it boots. This allows you to
33762 initialize ``secrets'' inside the VM: SSH host keys, authorized
33763 substitute keys, and so on---see the explanation of @code{secret-root}
33764 below.
33765
33766 @defvr {Scheme Variable} hurd-vm-service-type
33767 This is the type of the Hurd in a Virtual Machine service. Its value
33768 must be a @code{hurd-vm-configuration} object, which specifies the
33769 operating system (@pxref{operating-system Reference}) and the disk size
33770 for the Hurd Virtual Machine, the QEMU package to use as well as the
33771 options for running it.
33772
33773 For example:
33774
33775 @lisp
33776 (service hurd-vm-service-type
33777 (hurd-vm-configuration
33778 (disk-size (* 5000 (expt 2 20))) ;5G
33779 (memory-size 1024))) ;1024MiB
33780 @end lisp
33781
33782 would create a disk image big enough to build GNU@tie{}Hello, with some
33783 extra memory.
33784 @end defvr
33785
33786 @deftp {Data Type} hurd-vm-configuration
33787 The data type representing the configuration for
33788 @code{hurd-vm-service-type}.
33789
33790 @table @asis
33791 @item @code{os} (default: @var{%hurd-vm-operating-system})
33792 The operating system to instantiate. This default is bare-bones with a
33793 permissive OpenSSH secure shell daemon listening on port 2222
33794 (@pxref{Networking Services, @code{openssh-service-type}}).
33795
33796 @item @code{qemu} (default: @code{qemu-minimal})
33797 The QEMU package to use.
33798
33799 @item @code{image} (default: @var{hurd-vm-disk-image})
33800 The procedure used to build the disk-image built from this
33801 configuration.
33802
33803 @item @code{disk-size} (default: @code{'guess})
33804 The size of the disk image.
33805
33806 @item @code{memory-size} (default: @code{512})
33807 The memory size of the Virtual Machine in mebibytes.
33808
33809 @item @code{options} (default: @code{'("--snapshot")})
33810 The extra options for running QEMU.
33811
33812 @item @code{id} (default: @code{#f})
33813 If set, a non-zero positive integer used to parameterize Childhurd
33814 instances. It is appended to the service's name,
33815 e.g. @code{childhurd1}.
33816
33817 @item @code{net-options} (default: @var{hurd-vm-net-options})
33818 The procedure used to produce the list of QEMU networking options.
33819
33820 By default, it produces
33821
33822 @lisp
33823 '("--device" "rtl8139,netdev=net0"
33824 "--netdev" (string-append
33825 "user,id=net0,"
33826 "hostfwd=tcp:127.0.0.1:@var{secrets-port}-:1004,"
33827 "hostfwd=tcp:127.0.0.1:@var{ssh-port}-:2222,"
33828 "hostfwd=tcp:127.0.0.1:@var{vnc-port}-:5900"))
33829 @end lisp
33830
33831 with forwarded ports:
33832
33833 @example
33834 @var{secrets-port}: @code{(+ 11004 (* 1000 @var{ID}))}
33835 @var{ssh-port}: @code{(+ 10022 (* 1000 @var{ID}))}
33836 @var{vnc-port}: @code{(+ 15900 (* 1000 @var{ID}))}
33837 @end example
33838
33839 @item @code{secret-root} (default: @file{/etc/childhurd})
33840 The root directory with out-of-band secrets to be installed into the
33841 childhurd once it runs. Childhurds are volatile which means that on
33842 every startup, secrets such as the SSH host keys and Guix signing key
33843 are recreated.
33844
33845 If the @file{/etc/childhurd} directory does not exist, the
33846 @code{secret-service} running in the Childhurd will be sent an empty
33847 list of secrets.
33848
33849 By default, the service automatically populates @file{/etc/childhurd}
33850 with the following non-volatile secrets, unless they already exist:
33851
33852 @example
33853 /etc/childhurd/etc/guix/acl
33854 /etc/childhurd/etc/guix/signing-key.pub
33855 /etc/childhurd/etc/guix/signing-key.sec
33856 /etc/childhurd/etc/ssh/ssh_host_ed25519_key
33857 /etc/childhurd/etc/ssh/ssh_host_ecdsa_key
33858 /etc/childhurd/etc/ssh/ssh_host_ed25519_key.pub
33859 /etc/childhurd/etc/ssh/ssh_host_ecdsa_key.pub
33860 @end example
33861
33862 These files are automatically sent to the guest Hurd VM when it boots,
33863 including permissions.
33864
33865 @cindex childhurd, offloading
33866 @cindex Hurd, offloading
33867 Having these files in place means that only a couple of things are
33868 missing to allow the host to offload @code{i586-gnu} builds to the
33869 childhurd:
33870
33871 @enumerate
33872 @item
33873 Authorizing the childhurd's key on the host so that the host accepts
33874 build results coming from the childhurd, which can be done like so:
33875
33876 @example
33877 guix archive --authorize < \
33878 /etc/childhurd/etc/guix/signing-key.pub
33879 @end example
33880
33881 @item
33882 Adding the childhurd to @file{/etc/guix/machines.scm} (@pxref{Daemon
33883 Offload Setup}).
33884 @end enumerate
33885
33886 We're working towards making that happen automatically---get in touch
33887 with us at @email{guix-devel@@gnu.org} to discuss it!
33888 @end table
33889 @end deftp
33890
33891 Note that by default the VM image is volatile, i.e., once stopped the
33892 contents are lost. If you want a stateful image instead, override the
33893 configuration's @code{image} and @code{options} without
33894 the @code{--snapshot} flag using something along these lines:
33895
33896 @lisp
33897 (service hurd-vm-service-type
33898 (hurd-vm-configuration
33899 (image (const "/out/of/store/writable/hurd.img"))
33900 (options '())))
33901 @end lisp
33902
33903 @subsubheading Ganeti
33904
33905 @cindex ganeti
33906
33907 @quotation Note
33908 This service is considered experimental. Configuration options may be changed
33909 in a backwards-incompatible manner, and not all features have been thorougly
33910 tested. Users of this service are encouraged to share their experience at
33911 @email{guix-devel@@gnu.org}.
33912 @end quotation
33913
33914 Ganeti is a virtual machine management system. It is designed to keep virtual
33915 machines running on a cluster of servers even in the event of hardware failures,
33916 and to make maintenance and recovery tasks easy. It consists of multiple
33917 services which are described later in this section. In addition to the Ganeti
33918 service, you will need the OpenSSH service (@pxref{Networking Services,
33919 @code{openssh-service-type}}), and update the @file{/etc/hosts} file
33920 (@pxref{operating-system Reference, @code{hosts-file}}) with the cluster name
33921 and address (or use a DNS server).
33922
33923 All nodes participating in a Ganeti cluster should have the same Ganeti and
33924 @file{/etc/hosts} configuration. Here is an example configuration for a Ganeti
33925 cluster node that supports multiple storage backends, and installs the
33926 @code{debootstrap} and @code{guix} @dfn{OS providers}:
33927
33928 @lisp
33929 (use-package-modules virtualization)
33930 (use-service-modules base ganeti networking ssh)
33931 (operating-system
33932 ;; @dots{}
33933 (host-name "node1")
33934 (hosts-file (plain-file "hosts" (format #f "
33935 127.0.0.1 localhost
33936 ::1 localhost
33937
33938 192.168.1.200 ganeti.example.com
33939 192.168.1.201 node1.example.com node1
33940 192.168.1.202 node2.example.com node2
33941 ")))
33942
33943 ;; Install QEMU so we can use KVM-based instances, and LVM, DRBD and Ceph
33944 ;; in order to use the "plain", "drbd" and "rbd" storage backends.
33945 (packages (append (map specification->package
33946 '("qemu" "lvm2" "drbd-utils" "ceph"
33947 ;; Add the debootstrap and guix OS providers.
33948 "ganeti-instance-guix" "ganeti-instance-debootstrap"))
33949 %base-packages))
33950 (services
33951 (append (list (service static-networking-service-type
33952 (list (static-networking
33953 (addresses
33954 (list (network-address
33955 (device "eth0")
33956 (value "192.168.1.201/24"))))
33957 (routes
33958 (list (network-route
33959 (destination "default")
33960 (gateway "192.168.1.254"))))
33961 (name-servers '("192.168.1.252"
33962 "192.168.1.253")))))
33963
33964 ;; Ganeti uses SSH to communicate between nodes.
33965 (service openssh-service-type
33966 (openssh-configuration
33967 (permit-root-login 'prohibit-password)))
33968
33969 (service ganeti-service-type
33970 (ganeti-configuration
33971 ;; This list specifies allowed file system paths
33972 ;; for storing virtual machine images.
33973 (file-storage-paths '("/srv/ganeti/file-storage"))
33974 ;; This variable configures a single "variant" for
33975 ;; both Debootstrap and Guix that works with KVM.
33976 (os %default-ganeti-os))))
33977 %base-services)))
33978 @end lisp
33979
33980 Users are advised to read the
33981 @url{https://docs.ganeti.org/docs/ganeti/3.0/html/admin.html,Ganeti
33982 administrators guide} to learn about the various cluster options and
33983 day-to-day operations. There is also a
33984 @url{https://guix.gnu.org/blog/2020/running-a-ganeti-cluster-on-guix/,blog post}
33985 describing how to configure and initialize a small cluster.
33986
33987 @defvr {Scheme Variable} ganeti-service-type
33988 This is a service type that includes all the various services that Ganeti
33989 nodes should run.
33990
33991 Its value is a @code{ganeti-configuration} object that defines the package
33992 to use for CLI operations, as well as configuration for the various daemons.
33993 Allowed file storage paths and available guest operating systems are also
33994 configured through this data type.
33995 @end defvr
33996
33997 @deftp {Data Type} ganeti-configuration
33998 The @code{ganeti} service takes the following configuration options:
33999
34000 @table @asis
34001 @item @code{ganeti} (default: @code{ganeti})
34002 The @code{ganeti} package to use. It will be installed to the system profile
34003 and make @command{gnt-cluster}, @command{gnt-instance}, etc available. Note
34004 that the value specified here does not affect the other services as each refer
34005 to a specific @code{ganeti} package (see below).
34006
34007 @item @code{noded-configuration} (default: @code{(ganeti-noded-configuration)})
34008 @itemx @code{confd-configuration} (default: @code{(ganeti-confd-configuration)})
34009 @itemx @code{wconfd-configuration} (default: @code{(ganeti-wconfd-configuration)})
34010 @itemx @code{luxid-configuration} (default: @code{(ganeti-luxid-configuration)})
34011 @itemx @code{rapi-configuration} (default: @code{(ganeti-rapi-configuration)})
34012 @itemx @code{kvmd-configuration} (default: @code{(ganeti-kvmd-configuration)})
34013 @itemx @code{mond-configuration} (default: @code{(ganeti-mond-configuration)})
34014 @itemx @code{metad-configuration} (default: @code{(ganeti-metad-configuration)})
34015 @itemx @code{watcher-configuration} (default: @code{(ganeti-watcher-configuration)})
34016 @itemx @code{cleaner-configuration} (default: @code{(ganeti-cleaner-configuration)})
34017
34018 These options control the various daemons and cron jobs that are distributed
34019 with Ganeti. The possible values for these are described in detail below.
34020 To override a setting, you must use the configuration type for that service:
34021
34022 @lisp
34023 (service ganeti-service-type
34024 (ganeti-configuration
34025 (rapi-configuration
34026 (ganeti-rapi-configuration
34027 (interface "eth1"))))
34028 (watcher-configuration
34029 (ganeti-watcher-configuration
34030 (rapi-ip "10.0.0.1"))))
34031 @end lisp
34032
34033 @item @code{file-storage-paths} (default: @code{'()})
34034 List of allowed directories for file storage backend.
34035
34036 @item @code{os} (default: @code{%default-ganeti-os})
34037 List of @code{<ganeti-os>} records.
34038 @end table
34039
34040 In essence @code{ganeti-service-type} is shorthand for declaring each service
34041 individually:
34042
34043 @lisp
34044 (service ganeti-noded-service-type)
34045 (service ganeti-confd-service-type)
34046 (service ganeti-wconfd-service-type)
34047 (service ganeti-luxid-service-type)
34048 (service ganeti-kvmd-service-type)
34049 (service ganeti-mond-service-type)
34050 (service ganeti-metad-service-type)
34051 (service ganeti-watcher-service-type)
34052 (service ganeti-cleaner-service-type)
34053 @end lisp
34054
34055 Plus a service extension for @code{etc-service-type} that configures the file
34056 storage backend and OS variants.
34057
34058 @end deftp
34059
34060 @deftp {Data Type} ganeti-os
34061 This data type is suitable for passing to the @code{os} parameter of
34062 @code{ganeti-configuration}. It takes the following parameters:
34063
34064 @table @asis
34065 @item @code{name}
34066 The name for this OS provider. It is only used to specify where the
34067 configuration ends up. Setting it to ``debootstrap'' will create
34068 @file{/etc/ganeti/instance-debootstrap}.
34069
34070 @item @code{extension} (default: @code{#f})
34071 The file extension for variants of this OS type. For example @file{.conf}
34072 or @file{.scm}. It will be appended to the variant file name if set.
34073
34074 @item @code{variants} (default: @code{'()})
34075 This must be either a list of @code{ganeti-os-variant} objects for this OS,
34076 or a ``file-like'' object (@pxref{G-Expressions, file-like objects})
34077 representing the variants directory.
34078
34079 To use the Guix OS provider with variant definitions residing in a local
34080 directory instead of declaring individual variants (see @var{guix-variants}
34081 below), you can do:
34082
34083 @lisp
34084 (ganeti-os
34085 (name "guix")
34086 (variants (local-file "ganeti-guix-variants"
34087 #:recursive? #true)))
34088 @end lisp
34089
34090 Note that you will need to maintain the @file{variants.list} file
34091 (see @code{@url{https://docs.ganeti.org/docs/ganeti/3.0/man/ganeti-os-interface.html,
34092 ganeti-os-interface(7)}})
34093 manually in this case.
34094
34095 @end table
34096 @end deftp
34097
34098 @deftp {Data Type} ganeti-os-variant
34099 This is the data type for a Ganeti OS variant. It takes the following
34100 parameters:
34101
34102 @table @asis
34103 @item @code{name}
34104 The name of this variant.
34105
34106 @item @code{configuration}
34107 A configuration file for this variant.
34108 @end table
34109 @end deftp
34110
34111 @defvr {Scheme Variable} %default-debootstrap-hooks
34112 This variable contains hooks to configure networking and the GRUB bootloader.
34113 @end defvr
34114
34115 @defvr {Scheme Variable} %default-debootstrap-extra-pkgs
34116 This variable contains a list of packages suitable for a fully-virtualized guest.
34117 @end defvr
34118
34119 @deftp {Data Type} debootstrap-configuration
34120
34121 This data type creates configuration files suitable for the debootstrap OS provider.
34122
34123 @table @asis
34124 @item @code{hooks} (default: @code{%default-debootstrap-hooks})
34125 When not @code{#f}, this must be a G-expression that specifies a directory with
34126 scripts that will run when the OS is installed. It can also be a list of
34127 @code{(name . file-like)} pairs. For example:
34128
34129 @lisp
34130 `((99-hello-world . ,(plain-file "#!/bin/sh\necho Hello, World")))
34131 @end lisp
34132
34133 That will create a directory with one executable named @code{99-hello-world}
34134 and run it every time this variant is installed. If set to @code{#f}, hooks
34135 in @file{/etc/ganeti/instance-debootstrap/hooks} will be used, if any.
34136 @item @code{proxy} (default: @code{#f})
34137 Optional HTTP proxy to use.
34138 @item @code{mirror} (default: @code{#f})
34139 The Debian mirror. Typically something like @code{http://ftp.no.debian.org/debian}.
34140 The default varies depending on the distribution.
34141 @item @code{arch} (default: @code{#f})
34142 The dpkg architecture. Set to @code{armhf} to debootstrap an ARMv7 instance
34143 on an AArch64 host. Default is to use the current system architecture.
34144 @item @code{suite} (default: @code{"stable"})
34145 When set, this must be a Debian distribution ``suite'' such as @code{buster}
34146 or @code{focal}. If set to @code{#f}, the default for the OS provider is used.
34147 @item @code{extra-pkgs} (default: @code{%default-debootstrap-extra-pkgs})
34148 List of extra packages that will get installed by dpkg in addition
34149 to the minimal system.
34150 @item @code{components} (default: @code{#f})
34151 When set, must be a list of Debian repository ``components''. For example
34152 @code{'("main" "contrib")}.
34153 @item @code{generate-cache?} (default: @code{#t})
34154 Whether to automatically cache the generated debootstrap archive.
34155 @item @code{clean-cache} (default: @code{14})
34156 Discard the cache after this amount of days. Use @code{#f} to never
34157 clear the cache.
34158 @item @code{partition-style} (default: @code{'msdos})
34159 The type of partition to create. When set, it must be one of
34160 @code{'msdos}, @code{'none} or a string.
34161 @item @code{partition-alignment} (default: @code{2048})
34162 Alignment of the partition in sectors.
34163 @end table
34164 @end deftp
34165
34166 @deffn {Scheme Procedure} debootstrap-variant @var{name} @var{configuration}
34167 This is a helper procedure that creates a @code{ganeti-os-variant} record. It
34168 takes two parameters: a name and a @code{debootstrap-configuration} object.
34169 @end deffn
34170
34171 @deffn {Scheme Procedure} debootstrap-os @var{variants}@dots{}
34172 This is a helper procedure that creates a @code{ganeti-os} record. It takes
34173 a list of variants created with @code{debootstrap-variant}.
34174 @end deffn
34175
34176 @deffn {Scheme Procedure} guix-variant @var{name} @var{configuration}
34177 This is a helper procedure that creates a @code{ganeti-os-variant} record for
34178 use with the Guix OS provider. It takes a name and a G-expression that returns
34179 a ``file-like'' (@pxref{G-Expressions, file-like objects}) object containing a
34180 Guix System configuration.
34181 @end deffn
34182
34183 @deffn {Scheme Procedure} guix-os @var{variants}@dots{}
34184 This is a helper procedure that creates a @code{ganeti-os} record. It
34185 takes a list of variants produced by @code{guix-variant}.
34186 @end deffn
34187
34188 @defvr {Scheme Variable} %default-debootstrap-variants
34189 This is a convenience variable to make the debootstrap provider work
34190 ``out of the box'' without users having to declare variants manually. It
34191 contains a single debootstrap variant with the default configuration:
34192
34193 @lisp
34194 (list (debootstrap-variant
34195 "default"
34196 (debootstrap-configuration)))
34197 @end lisp
34198 @end defvr
34199
34200 @defvr {Scheme Variable} %default-guix-variants
34201 This is a convenience variable to make the Guix OS provider work without
34202 additional configuration. It creates a virtual machine that has an SSH
34203 server, a serial console, and authorizes the Ganeti hosts SSH keys.
34204
34205 @lisp
34206 (list (guix-variant
34207 "default"
34208 (file-append ganeti-instance-guix
34209 "/share/doc/ganeti-instance-guix/examples/dynamic.scm")))
34210 @end lisp
34211 @end defvr
34212
34213 Users can implement support for OS providers unbeknownst to Guix by extending
34214 the @code{ganeti-os} and @code{ganeti-os-variant} records appropriately.
34215 For example:
34216
34217 @lisp
34218 (ganeti-os
34219 (name "custom")
34220 (extension ".conf")
34221 (variants
34222 (list (ganeti-os-variant
34223 (name "foo")
34224 (configuration (plain-file "bar" "this is fine"))))))
34225 @end lisp
34226
34227 That creates @file{/etc/ganeti/instance-custom/variants/foo.conf} which points
34228 to a file in the store with contents @code{this is fine}. It also creates
34229 @file{/etc/ganeti/instance-custom/variants/variants.list} with contents @code{foo}.
34230
34231 Obviously this may not work for all OS providers out there. If you find the
34232 interface limiting, please reach out to @email{guix-devel@@gnu.org}.
34233
34234 The rest of this section documents the various services that are included by
34235 @code{ganeti-service-type}.
34236
34237 @defvr {Scheme Variable} ganeti-noded-service-type
34238 @command{ganeti-noded} is the daemon responsible for node-specific functions
34239 within the Ganeti system. The value of this service must be a
34240 @code{ganeti-noded-configuration} object.
34241 @end defvr
34242
34243 @deftp {Data Type} ganeti-noded-configuration
34244 This is the configuration for the @code{ganeti-noded} service.
34245
34246 @table @asis
34247 @item @code{ganeti} (default: @code{ganeti})
34248 The @code{ganeti} package to use for this service.
34249
34250 @item @code{port} (default: @code{1811})
34251 The TCP port on which the node daemon listens for network requests.
34252
34253 @item @code{address} (default: @code{"0.0.0.0"})
34254 The network address that the daemon will bind to. The default address means
34255 bind to all available addresses.
34256
34257 @item @code{interface} (default: @code{#f})
34258 When this is set, it must be a specific network interface (e.g.@: @code{eth0})
34259 that the daemon will bind to.
34260
34261 @item @code{max-clients} (default: @code{20})
34262 This sets a limit on the maximum number of simultaneous client connections
34263 that the daemon will handle. Connections above this count are accepted, but
34264 no responses will be sent until enough connections have closed.
34265
34266 @item @code{ssl?} (default: @code{#t})
34267 Whether to use SSL/TLS to encrypt network communications. The certificate
34268 is automatically provisioned by the cluster and can be rotated with
34269 @command{gnt-cluster renew-crypto}.
34270
34271 @item @code{ssl-key} (default: @file{"/var/lib/ganeti/server.pem"})
34272 This can be used to provide a specific encryption key for TLS communications.
34273
34274 @item @code{ssl-cert} (default: @file{"/var/lib/ganeti/server.pem"})
34275 This can be used to provide a specific certificate for TLS communications.
34276
34277 @item @code{debug?} (default: @code{#f})
34278 When true, the daemon performs additional logging for debugging purposes.
34279 Note that this will leak encryption details to the log files, use with caution.
34280
34281 @end table
34282 @end deftp
34283
34284 @defvr {Scheme Variable} ganeti-confd-service-type
34285 @command{ganeti-confd} answers queries related to the configuration of a
34286 Ganeti cluster. The purpose of this daemon is to have a highly available
34287 and fast way to query cluster configuration values. It is automatically
34288 active on all @dfn{master candidates}. The value of this service must be a
34289 @code{ganeti-confd-configuration} object.
34290
34291 @end defvr
34292
34293 @deftp {Data Type} ganeti-confd-configuration
34294 This is the configuration for the @code{ganeti-confd} service.
34295
34296 @table @asis
34297 @item @code{ganeti} (default: @code{ganeti})
34298 The @code{ganeti} package to use for this service.
34299
34300 @item @code{port} (default: @code{1814})
34301 The UDP port on which to listen for network requests.
34302
34303 @item @code{address} (default: @code{"0.0.0.0"})
34304 Network address that the daemon will bind to.
34305
34306 @item @code{debug?} (default: @code{#f})
34307 When true, the daemon performs additional logging for debugging purposes.
34308
34309 @end table
34310 @end deftp
34311
34312 @defvr {Scheme Variable} ganeti-wconfd-service-type
34313 @command{ganeti-wconfd} is the daemon that has authoritative knowledge
34314 about the cluster configuration and is the only entity that can accept
34315 changes to it. All jobs that need to modify the configuration will do so
34316 by sending appropriate requests to this daemon. It only runs on the
34317 @dfn{master node} and will automatically disable itself on other nodes.
34318
34319 The value of this service must be a
34320 @code{ganeti-wconfd-configuration} object.
34321 @end defvr
34322
34323 @deftp {Data Type} ganeti-wconfd-configuration
34324 This is the configuration for the @code{ganeti-wconfd} service.
34325
34326 @table @asis
34327 @item @code{ganeti} (default: @code{ganeti})
34328 The @code{ganeti} package to use for this service.
34329
34330 @item @code{no-voting?} (default: @code{#f})
34331 The daemon will refuse to start if the majority of cluster nodes does not
34332 agree that it is running on the master node. Set to @code{#t} to start
34333 even if a quorum can not be reached (dangerous, use with caution).
34334
34335 @item @code{debug?} (default: @code{#f})
34336 When true, the daemon performs additional logging for debugging purposes.
34337
34338 @end table
34339 @end deftp
34340
34341 @defvr {Scheme Variable} ganeti-luxid-service-type
34342 @command{ganeti-luxid} is a daemon used to answer queries related to the
34343 configuration and the current live state of a Ganeti cluster. Additionally,
34344 it is the authoritative daemon for the Ganeti job queue. Jobs can be
34345 submitted via this daemon and it schedules and starts them.
34346
34347 It takes a @code{ganeti-luxid-configuration} object.
34348 @end defvr
34349
34350 @deftp {Data Type} ganeti-luxid-configuration
34351 This is the configuration for the @code{ganeti-luxid} service.
34352
34353 @table @asis
34354 @item @code{ganeti} (default: @code{ganeti})
34355 The @code{ganeti} package to use for this service.
34356
34357 @item @code{no-voting?} (default: @code{#f})
34358 The daemon will refuse to start if it cannot verify that the majority of
34359 cluster nodes believes that it is running on the master node. Set to
34360 @code{#t} to ignore such checks and start anyway (this can be dangerous).
34361
34362 @item @code{debug?} (default: @code{#f})
34363 When true, the daemon performs additional logging for debugging purposes.
34364
34365 @end table
34366 @end deftp
34367
34368 @defvr {Scheme Variable} ganeti-rapi-service-type
34369 @command{ganeti-rapi} provides a remote API for Ganeti clusters. It runs on
34370 the master node and can be used to perform cluster actions programmatically
34371 via a JSON-based RPC protocol.
34372
34373 Most query operations are allowed without authentication (unless
34374 @var{require-authentication?} is set), whereas write operations require
34375 explicit authorization via the @file{/var/lib/ganeti/rapi/users} file. See
34376 the @url{https://docs.ganeti.org/docs/ganeti/3.0/html/rapi.html, Ganeti Remote
34377 API documentation} for more information.
34378
34379 The value of this service must be a @code{ganeti-rapi-configuration} object.
34380 @end defvr
34381
34382 @deftp {Data Type} ganeti-rapi-configuration
34383 This is the configuration for the @code{ganeti-rapi} service.
34384
34385 @table @asis
34386 @item @code{ganeti} (default: @code{ganeti})
34387 The @code{ganeti} package to use for this service.
34388
34389 @item @code{require-authentication?} (default: @code{#f})
34390 Whether to require authentication even for read-only operations.
34391
34392 @item @code{port} (default: @code{5080})
34393 The TCP port on which to listen to API requests.
34394
34395 @item @code{address} (default: @code{"0.0.0.0"})
34396 The network address that the service will bind to. By default it listens
34397 on all configured addresses.
34398
34399 @item @code{interface} (default: @code{#f})
34400 When set, it must specify a specific network interface such as @code{eth0}
34401 that the daemon will bind to.
34402
34403 @item @code{max-clients} (default: @code{20})
34404 The maximum number of simultaneous client requests to handle. Further
34405 connections are allowed, but no responses are sent until enough connections
34406 have closed.
34407
34408 @item @code{ssl?} (default: @code{#t})
34409 Whether to use SSL/TLS encryption on the RAPI port.
34410
34411 @item @code{ssl-key} (default: @file{"/var/lib/ganeti/server.pem"})
34412 This can be used to provide a specific encryption key for TLS communications.
34413
34414 @item @code{ssl-cert} (default: @file{"/var/lib/ganeti/server.pem"})
34415 This can be used to provide a specific certificate for TLS communications.
34416
34417 @item @code{debug?} (default: @code{#f})
34418 When true, the daemon performs additional logging for debugging purposes.
34419 Note that this will leak encryption details to the log files, use with caution.
34420
34421 @end table
34422 @end deftp
34423
34424 @defvr {Scheme Variable} ganeti-kvmd-service-type
34425 @command{ganeti-kvmd} is responsible for determining whether a given KVM
34426 instance was shut down by an administrator or a user. Normally Ganeti will
34427 restart an instance that was not stopped through Ganeti itself. If the
34428 cluster option @code{user_shutdown} is true, this daemon monitors the
34429 @code{QMP} socket provided by QEMU and listens for shutdown events, and
34430 marks the instance as @dfn{USER_down} instead of @dfn{ERROR_down} when
34431 it shuts down gracefully by itself.
34432
34433 It takes a @code{ganeti-kvmd-configuration} object.
34434 @end defvr
34435
34436 @deftp {Data Type} ganeti-kvmd-configuration
34437
34438 @table @asis
34439 @item @code{ganeti} (default: @code{ganeti})
34440 The @code{ganeti} package to use for this service.
34441
34442 @item @code{debug?} (default: @code{#f})
34443 When true, the daemon performs additional logging for debugging purposes.
34444
34445 @end table
34446 @end deftp
34447
34448 @defvr {Scheme Variable} ganeti-mond-service-type
34449 @command{ganeti-mond} is an optional daemon that provides Ganeti monitoring
34450 functionality. It is responsible for running data collectors and publish the
34451 collected information through a HTTP interface.
34452
34453 It takes a @code{ganeti-mond-configuration} object.
34454 @end defvr
34455
34456 @deftp {Data Type} ganeti-mond-configuration
34457
34458 @table @asis
34459 @item @code{ganeti} (default: @code{ganeti})
34460 The @code{ganeti} package to use for this service.
34461
34462 @item @code{port} (default: @code{1815})
34463 The port on which the daemon will listen.
34464
34465 @item @code{address} (default: @code{"0.0.0.0"})
34466 The network address that the daemon will bind to. By default it binds to all
34467 available interfaces.
34468
34469 @item @code{debug?} (default: @code{#f})
34470 When true, the daemon performs additional logging for debugging purposes.
34471
34472 @end table
34473 @end deftp
34474
34475 @defvr {Scheme Variable} ganeti-metad-service-type
34476 @command{ganeti-metad} is an optional daemon that can be used to provide
34477 information about the cluster to instances or OS install scripts.
34478
34479 It takes a @code{ganeti-metad-configuration} object.
34480 @end defvr
34481
34482 @deftp {Data Type} ganeti-metad-configuration
34483
34484 @table @asis
34485 @item @code{ganeti} (default: @code{ganeti})
34486 The @code{ganeti} package to use for this service.
34487
34488 @item @code{port} (default: @code{80})
34489 The port on which the daemon will listen.
34490
34491 @item @code{address} (default: @code{#f})
34492 If set, the daemon will bind to this address only. If left unset, the behavior
34493 depends on the cluster configuration.
34494
34495 @item @code{debug?} (default: @code{#f})
34496 When true, the daemon performs additional logging for debugging purposes.
34497
34498 @end table
34499 @end deftp
34500
34501 @defvr {Scheme Variable} ganeti-watcher-service-type
34502 @command{ganeti-watcher} is a script designed to run periodically and ensure
34503 the health of a cluster. It will automatically restart instances that have
34504 stopped without Ganeti's consent, and repairs DRBD links in case a node has
34505 rebooted. It also archives old cluster jobs and restarts Ganeti daemons
34506 that are not running. If the cluster parameter @code{ensure_node_health}
34507 is set, the watcher will also shutdown instances and DRBD devices if the
34508 node it is running on is declared offline by known master candidates.
34509
34510 It can be paused on all nodes with @command{gnt-cluster watcher pause}.
34511
34512 The service takes a @code{ganeti-watcher-configuration} object.
34513 @end defvr
34514
34515 @deftp {Data Type} ganeti-watcher-configuration
34516
34517 @table @asis
34518 @item @code{ganeti} (default: @code{ganeti})
34519 The @code{ganeti} package to use for this service.
34520
34521 @item @code{schedule} (default: @code{'(next-second-from (next-minute (range 0 60 5)))})
34522 How often to run the script. The default is every five minutes.
34523
34524 @item @code{rapi-ip} (default: @code{#f})
34525 This option needs to be specified only if the RAPI daemon is configured to use
34526 a particular interface or address. By default the cluster address is used.
34527
34528 @item @code{job-age} (default: @code{(* 6 3600)})
34529 Archive cluster jobs older than this age, specified in seconds. The default
34530 is 6 hours. This keeps @command{gnt-job list} manageable.
34531
34532 @item @code{verify-disks?} (default: @code{#t})
34533 If this is @code{#f}, the watcher will not try to repair broken DRBD links
34534 automatically. Administrators will need to use @command{gnt-cluster verify-disks}
34535 manually instead.
34536
34537 @item @code{debug?} (default: @code{#f})
34538 When @code{#t}, the script performs additional logging for debugging purposes.
34539
34540 @end table
34541 @end deftp
34542
34543 @defvr {Scheme Variable} ganeti-cleaner-service-type
34544 @command{ganeti-cleaner} is a script designed to run periodically and remove
34545 old files from the cluster. This service type controls two @dfn{cron jobs}:
34546 one intended for the master node that permanently purges old cluster jobs,
34547 and one intended for every node that removes expired X509 certificates, keys,
34548 and outdated @command{ganeti-watcher} information. Like all Ganeti services,
34549 it is safe to include even on non-master nodes as it will disable itself as
34550 necessary.
34551
34552 It takes a @code{ganeti-cleaner-configuration} object.
34553 @end defvr
34554
34555 @deftp {Data Type} ganeti-cleaner-configuration
34556
34557 @table @asis
34558 @item @code{ganeti} (default: @code{ganeti})
34559 The @code{ganeti} package to use for the @command{gnt-cleaner} command.
34560
34561 @item @code{master-schedule} (default: @code{"45 1 * * *"})
34562 How often to run the master cleaning job. The default is once per day, at
34563 01:45:00.
34564
34565 @item @code{node-schedule} (default: @code{"45 2 * * *"})
34566 How often to run the node cleaning job. The default is once per day, at
34567 02:45:00.
34568
34569 @end table
34570 @end deftp
34571
34572 @node Version Control Services
34573 @subsection Version Control Services
34574
34575 The @code{(gnu services version-control)} module provides a service to
34576 allow remote access to local Git repositories. There are three options:
34577 the @code{git-daemon-service}, which provides access to repositories via
34578 the @code{git://} unsecured TCP-based protocol, extending the
34579 @code{nginx} web server to proxy some requests to
34580 @code{git-http-backend}, or providing a web interface with
34581 @code{cgit-service-type}.
34582
34583 @deffn {Scheme Procedure} git-daemon-service [#:config (git-daemon-configuration)]
34584
34585 Return a service that runs @command{git daemon}, a simple TCP server to
34586 expose repositories over the Git protocol for anonymous access.
34587
34588 The optional @var{config} argument should be a
34589 @code{<git-daemon-configuration>} object, by default it allows read-only
34590 access to exported@footnote{By creating the magic file
34591 @file{git-daemon-export-ok} in the repository directory.} repositories under
34592 @file{/srv/git}.
34593
34594 @end deffn
34595
34596 @deftp {Data Type} git-daemon-configuration
34597 Data type representing the configuration for @code{git-daemon-service}.
34598
34599 @table @asis
34600 @item @code{package} (default: @code{git})
34601 Package object of the Git distributed version control system.
34602
34603 @item @code{export-all?} (default: @code{#f})
34604 Whether to allow access for all Git repositories, even if they do not
34605 have the @file{git-daemon-export-ok} file.
34606
34607 @item @code{base-path} (default: @file{/srv/git})
34608 Whether to remap all the path requests as relative to the given path.
34609 If you run @command{git daemon} with @code{(base-path "/srv/git")} on
34610 @samp{example.com}, then if you later try to pull
34611 @indicateurl{git://example.com/hello.git}, git daemon will interpret the
34612 path as @file{/srv/git/hello.git}.
34613
34614 @item @code{user-path} (default: @code{#f})
34615 Whether to allow @code{~user} notation to be used in requests. When
34616 specified with empty string, requests to
34617 @indicateurl{git://host/~alice/foo} is taken as a request to access
34618 @code{foo} repository in the home directory of user @code{alice}. If
34619 @code{(user-path "@var{path}")} is specified, the same request is taken
34620 as a request to access @file{@var{path}/foo} repository in the home
34621 directory of user @code{alice}.
34622
34623 @item @code{listen} (default: @code{'()})
34624 Whether to listen on specific IP addresses or hostnames, defaults to
34625 all.
34626
34627 @item @code{port} (default: @code{#f})
34628 Whether to listen on an alternative port, which defaults to 9418.
34629
34630 @item @code{whitelist} (default: @code{'()})
34631 If not empty, only allow access to this list of directories.
34632
34633 @item @code{extra-options} (default: @code{'()})
34634 Extra options will be passed to @command{git daemon}, please run
34635 @command{man git-daemon} for more information.
34636
34637 @end table
34638 @end deftp
34639
34640 The @code{git://} protocol lacks authentication. When you pull from a
34641 repository fetched via @code{git://}, you don't know whether the data you
34642 receive was modified or is even coming from the specified host, and your
34643 connection is subject to eavesdropping. It's better to use an authenticated
34644 and encrypted transport, such as @code{https}. Although Git allows you
34645 to serve repositories using unsophisticated file-based web servers,
34646 there is a faster protocol implemented by the @code{git-http-backend}
34647 program. This program is the back-end of a proper Git web service. It
34648 is designed to sit behind a FastCGI proxy. @xref{Web Services}, for more
34649 on running the necessary @code{fcgiwrap} daemon.
34650
34651 Guix has a separate configuration data type for serving Git repositories
34652 over HTTP.
34653
34654 @deftp {Data Type} git-http-configuration
34655 Data type representing the configuration for a future
34656 @code{git-http-service-type}; can currently be used to configure Nginx
34657 through @code{git-http-nginx-location-configuration}.
34658
34659 @table @asis
34660 @item @code{package} (default: @var{git})
34661 Package object of the Git distributed version control system.
34662
34663 @item @code{git-root} (default: @file{/srv/git})
34664 Directory containing the Git repositories to expose to the world.
34665
34666 @item @code{export-all?} (default: @code{#f})
34667 Whether to expose access for all Git repositories in @var{git-root},
34668 even if they do not have the @file{git-daemon-export-ok} file.
34669
34670 @item @code{uri-path} (default: @samp{/git/})
34671 Path prefix for Git access. With the default @samp{/git/} prefix, this
34672 will map @indicateurl{http://@var{server}/git/@var{repo}.git} to
34673 @file{/srv/git/@var{repo}.git}. Requests whose URI paths do not begin
34674 with this prefix are not passed on to this Git instance.
34675
34676 @item @code{fcgiwrap-socket} (default: @code{127.0.0.1:9000})
34677 The socket on which the @code{fcgiwrap} daemon is listening. @xref{Web
34678 Services}.
34679 @end table
34680 @end deftp
34681
34682 There is no @code{git-http-service-type}, currently; instead you can
34683 create an @code{nginx-location-configuration} from a
34684 @code{git-http-configuration} and then add that location to a web
34685 server.
34686
34687 @deffn {Scheme Procedure} git-http-nginx-location-configuration @
34688 [config=(git-http-configuration)]
34689 Compute an @code{nginx-location-configuration} that corresponds to the
34690 given Git http configuration. An example nginx service definition to
34691 serve the default @file{/srv/git} over HTTPS might be:
34692
34693 @lisp
34694 (service nginx-service-type
34695 (nginx-configuration
34696 (server-blocks
34697 (list
34698 (nginx-server-configuration
34699 (listen '("443 ssl"))
34700 (server-name "git.my-host.org")
34701 (ssl-certificate
34702 "/etc/letsencrypt/live/git.my-host.org/fullchain.pem")
34703 (ssl-certificate-key
34704 "/etc/letsencrypt/live/git.my-host.org/privkey.pem")
34705 (locations
34706 (list
34707 (git-http-nginx-location-configuration
34708 (git-http-configuration (uri-path "/"))))))))))
34709 @end lisp
34710
34711 This example assumes that you are using Let's Encrypt to get your TLS
34712 certificate. @xref{Certificate Services}. The default @code{certbot}
34713 service will redirect all HTTP traffic on @code{git.my-host.org} to
34714 HTTPS@. You will also need to add an @code{fcgiwrap} proxy to your
34715 system services. @xref{Web Services}.
34716 @end deffn
34717
34718 @subsubheading Cgit Service
34719
34720 @cindex Cgit service
34721 @cindex Git, web interface
34722 @uref{https://git.zx2c4.com/cgit/, Cgit} is a web frontend for Git
34723 repositories written in C.
34724
34725 The following example will configure the service with default values.
34726 By default, Cgit can be accessed on port 80 (@code{http://localhost:80}).
34727
34728 @lisp
34729 (service cgit-service-type)
34730 @end lisp
34731
34732 The @code{file-object} type designates either a file-like object
34733 (@pxref{G-Expressions, file-like objects}) or a string.
34734
34735 @c %start of fragment
34736
34737 Available @code{cgit-configuration} fields are:
34738
34739 @deftypevr {@code{cgit-configuration} parameter} package package
34740 The CGIT package.
34741
34742 @end deftypevr
34743
34744 @deftypevr {@code{cgit-configuration} parameter} nginx-server-configuration-list nginx
34745 NGINX configuration.
34746
34747 @end deftypevr
34748
34749 @deftypevr {@code{cgit-configuration} parameter} file-object about-filter
34750 Specifies a command which will be invoked to format the content of about
34751 pages (both top-level and for each repository).
34752
34753 Defaults to @samp{""}.
34754
34755 @end deftypevr
34756
34757 @deftypevr {@code{cgit-configuration} parameter} string agefile
34758 Specifies a path, relative to each repository path, which can be used to
34759 specify the date and time of the youngest commit in the repository.
34760
34761 Defaults to @samp{""}.
34762
34763 @end deftypevr
34764
34765 @deftypevr {@code{cgit-configuration} parameter} file-object auth-filter
34766 Specifies a command that will be invoked for authenticating repository
34767 access.
34768
34769 Defaults to @samp{""}.
34770
34771 @end deftypevr
34772
34773 @deftypevr {@code{cgit-configuration} parameter} string branch-sort
34774 Flag which, when set to @samp{age}, enables date ordering in the branch
34775 ref list, and when set @samp{name} enables ordering by branch name.
34776
34777 Defaults to @samp{"name"}.
34778
34779 @end deftypevr
34780
34781 @deftypevr {@code{cgit-configuration} parameter} string cache-root
34782 Path used to store the cgit cache entries.
34783
34784 Defaults to @samp{"/var/cache/cgit"}.
34785
34786 @end deftypevr
34787
34788 @deftypevr {@code{cgit-configuration} parameter} integer cache-static-ttl
34789 Number which specifies the time-to-live, in minutes, for the cached
34790 version of repository pages accessed with a fixed SHA1.
34791
34792 Defaults to @samp{-1}.
34793
34794 @end deftypevr
34795
34796 @deftypevr {@code{cgit-configuration} parameter} integer cache-dynamic-ttl
34797 Number which specifies the time-to-live, in minutes, for the cached
34798 version of repository pages accessed without a fixed SHA1.
34799
34800 Defaults to @samp{5}.
34801
34802 @end deftypevr
34803
34804 @deftypevr {@code{cgit-configuration} parameter} integer cache-repo-ttl
34805 Number which specifies the time-to-live, in minutes, for the cached
34806 version of the repository summary page.
34807
34808 Defaults to @samp{5}.
34809
34810 @end deftypevr
34811
34812 @deftypevr {@code{cgit-configuration} parameter} integer cache-root-ttl
34813 Number which specifies the time-to-live, in minutes, for the cached
34814 version of the repository index page.
34815
34816 Defaults to @samp{5}.
34817
34818 @end deftypevr
34819
34820 @deftypevr {@code{cgit-configuration} parameter} integer cache-scanrc-ttl
34821 Number which specifies the time-to-live, in minutes, for the result of
34822 scanning a path for Git repositories.
34823
34824 Defaults to @samp{15}.
34825
34826 @end deftypevr
34827
34828 @deftypevr {@code{cgit-configuration} parameter} integer cache-about-ttl
34829 Number which specifies the time-to-live, in minutes, for the cached
34830 version of the repository about page.
34831
34832 Defaults to @samp{15}.
34833
34834 @end deftypevr
34835
34836 @deftypevr {@code{cgit-configuration} parameter} integer cache-snapshot-ttl
34837 Number which specifies the time-to-live, in minutes, for the cached
34838 version of snapshots.
34839
34840 Defaults to @samp{5}.
34841
34842 @end deftypevr
34843
34844 @deftypevr {@code{cgit-configuration} parameter} integer cache-size
34845 The maximum number of entries in the cgit cache. When set to @samp{0},
34846 caching is disabled.
34847
34848 Defaults to @samp{0}.
34849
34850 @end deftypevr
34851
34852 @deftypevr {@code{cgit-configuration} parameter} boolean case-sensitive-sort?
34853 Sort items in the repo list case sensitively.
34854
34855 Defaults to @samp{#t}.
34856
34857 @end deftypevr
34858
34859 @deftypevr {@code{cgit-configuration} parameter} list clone-prefix
34860 List of common prefixes which, when combined with a repository URL,
34861 generates valid clone URLs for the repository.
34862
34863 Defaults to @samp{()}.
34864
34865 @end deftypevr
34866
34867 @deftypevr {@code{cgit-configuration} parameter} list clone-url
34868 List of @code{clone-url} templates.
34869
34870 Defaults to @samp{()}.
34871
34872 @end deftypevr
34873
34874 @deftypevr {@code{cgit-configuration} parameter} file-object commit-filter
34875 Command which will be invoked to format commit messages.
34876
34877 Defaults to @samp{""}.
34878
34879 @end deftypevr
34880
34881 @deftypevr {@code{cgit-configuration} parameter} string commit-sort
34882 Flag which, when set to @samp{date}, enables strict date ordering in the
34883 commit log, and when set to @samp{topo} enables strict topological
34884 ordering.
34885
34886 Defaults to @samp{"git log"}.
34887
34888 @end deftypevr
34889
34890 @deftypevr {@code{cgit-configuration} parameter} file-object css
34891 URL which specifies the css document to include in all cgit pages.
34892
34893 Defaults to @samp{"/share/cgit/cgit.css"}.
34894
34895 @end deftypevr
34896
34897 @deftypevr {@code{cgit-configuration} parameter} file-object email-filter
34898 Specifies a command which will be invoked to format names and email
34899 address of committers, authors, and taggers, as represented in various
34900 places throughout the cgit interface.
34901
34902 Defaults to @samp{""}.
34903
34904 @end deftypevr
34905
34906 @deftypevr {@code{cgit-configuration} parameter} boolean embedded?
34907 Flag which, when set to @samp{#t}, will make cgit generate a HTML
34908 fragment suitable for embedding in other HTML pages.
34909
34910 Defaults to @samp{#f}.
34911
34912 @end deftypevr
34913
34914 @deftypevr {@code{cgit-configuration} parameter} boolean enable-commit-graph?
34915 Flag which, when set to @samp{#t}, will make cgit print an ASCII-art
34916 commit history graph to the left of the commit messages in the
34917 repository log page.
34918
34919 Defaults to @samp{#f}.
34920
34921 @end deftypevr
34922
34923 @deftypevr {@code{cgit-configuration} parameter} boolean enable-filter-overrides?
34924 Flag which, when set to @samp{#t}, allows all filter settings to be
34925 overridden in repository-specific cgitrc files.
34926
34927 Defaults to @samp{#f}.
34928
34929 @end deftypevr
34930
34931 @deftypevr {@code{cgit-configuration} parameter} boolean enable-follow-links?
34932 Flag which, when set to @samp{#t}, allows users to follow a file in the
34933 log view.
34934
34935 Defaults to @samp{#f}.
34936
34937 @end deftypevr
34938
34939 @deftypevr {@code{cgit-configuration} parameter} boolean enable-http-clone?
34940 If set to @samp{#t}, cgit will act as an dumb HTTP endpoint for Git
34941 clones.
34942
34943 Defaults to @samp{#t}.
34944
34945 @end deftypevr
34946
34947 @deftypevr {@code{cgit-configuration} parameter} boolean enable-index-links?
34948 Flag which, when set to @samp{#t}, will make cgit generate extra links
34949 "summary", "commit", "tree" for each repo in the repository index.
34950
34951 Defaults to @samp{#f}.
34952
34953 @end deftypevr
34954
34955 @deftypevr {@code{cgit-configuration} parameter} boolean enable-index-owner?
34956 Flag which, when set to @samp{#t}, will make cgit display the owner of
34957 each repo in the repository index.
34958
34959 Defaults to @samp{#t}.
34960
34961 @end deftypevr
34962
34963 @deftypevr {@code{cgit-configuration} parameter} boolean enable-log-filecount?
34964 Flag which, when set to @samp{#t}, will make cgit print the number of
34965 modified files for each commit on the repository log page.
34966
34967 Defaults to @samp{#f}.
34968
34969 @end deftypevr
34970
34971 @deftypevr {@code{cgit-configuration} parameter} boolean enable-log-linecount?
34972 Flag which, when set to @samp{#t}, will make cgit print the number of
34973 added and removed lines for each commit on the repository log page.
34974
34975 Defaults to @samp{#f}.
34976
34977 @end deftypevr
34978
34979 @deftypevr {@code{cgit-configuration} parameter} boolean enable-remote-branches?
34980 Flag which, when set to @code{#t}, will make cgit display remote
34981 branches in the summary and refs views.
34982
34983 Defaults to @samp{#f}.
34984
34985 @end deftypevr
34986
34987 @deftypevr {@code{cgit-configuration} parameter} boolean enable-subject-links?
34988 Flag which, when set to @code{1}, will make cgit use the subject of the
34989 parent commit as link text when generating links to parent commits in
34990 commit view.
34991
34992 Defaults to @samp{#f}.
34993
34994 @end deftypevr
34995
34996 @deftypevr {@code{cgit-configuration} parameter} boolean enable-html-serving?
34997 Flag which, when set to @samp{#t}, will make cgit use the subject of the
34998 parent commit as link text when generating links to parent commits in
34999 commit view.
35000
35001 Defaults to @samp{#f}.
35002
35003 @end deftypevr
35004
35005 @deftypevr {@code{cgit-configuration} parameter} boolean enable-tree-linenumbers?
35006 Flag which, when set to @samp{#t}, will make cgit generate linenumber
35007 links for plaintext blobs printed in the tree view.
35008
35009 Defaults to @samp{#t}.
35010
35011 @end deftypevr
35012
35013 @deftypevr {@code{cgit-configuration} parameter} boolean enable-git-config?
35014 Flag which, when set to @samp{#f}, will allow cgit to use Git config to
35015 set any repo specific settings.
35016
35017 Defaults to @samp{#f}.
35018
35019 @end deftypevr
35020
35021 @deftypevr {@code{cgit-configuration} parameter} file-object favicon
35022 URL used as link to a shortcut icon for cgit.
35023
35024 Defaults to @samp{"/favicon.ico"}.
35025
35026 @end deftypevr
35027
35028 @deftypevr {@code{cgit-configuration} parameter} string footer
35029 The content of the file specified with this option will be included
35030 verbatim at the bottom of all pages (i.e.@: it replaces the standard
35031 "generated by..."@: message).
35032
35033 Defaults to @samp{""}.
35034
35035 @end deftypevr
35036
35037 @deftypevr {@code{cgit-configuration} parameter} string head-include
35038 The content of the file specified with this option will be included
35039 verbatim in the HTML HEAD section on all pages.
35040
35041 Defaults to @samp{""}.
35042
35043 @end deftypevr
35044
35045 @deftypevr {@code{cgit-configuration} parameter} string header
35046 The content of the file specified with this option will be included
35047 verbatim at the top of all pages.
35048
35049 Defaults to @samp{""}.
35050
35051 @end deftypevr
35052
35053 @deftypevr {@code{cgit-configuration} parameter} file-object include
35054 Name of a configfile to include before the rest of the current config-
35055 file is parsed.
35056
35057 Defaults to @samp{""}.
35058
35059 @end deftypevr
35060
35061 @deftypevr {@code{cgit-configuration} parameter} string index-header
35062 The content of the file specified with this option will be included
35063 verbatim above the repository index.
35064
35065 Defaults to @samp{""}.
35066
35067 @end deftypevr
35068
35069 @deftypevr {@code{cgit-configuration} parameter} string index-info
35070 The content of the file specified with this option will be included
35071 verbatim below the heading on the repository index page.
35072
35073 Defaults to @samp{""}.
35074
35075 @end deftypevr
35076
35077 @deftypevr {@code{cgit-configuration} parameter} boolean local-time?
35078 Flag which, if set to @samp{#t}, makes cgit print commit and tag times
35079 in the servers timezone.
35080
35081 Defaults to @samp{#f}.
35082
35083 @end deftypevr
35084
35085 @deftypevr {@code{cgit-configuration} parameter} file-object logo
35086 URL which specifies the source of an image which will be used as a logo
35087 on all cgit pages.
35088
35089 Defaults to @samp{"/share/cgit/cgit.png"}.
35090
35091 @end deftypevr
35092
35093 @deftypevr {@code{cgit-configuration} parameter} string logo-link
35094 URL loaded when clicking on the cgit logo image.
35095
35096 Defaults to @samp{""}.
35097
35098 @end deftypevr
35099
35100 @deftypevr {@code{cgit-configuration} parameter} file-object owner-filter
35101 Command which will be invoked to format the Owner column of the main
35102 page.
35103
35104 Defaults to @samp{""}.
35105
35106 @end deftypevr
35107
35108 @deftypevr {@code{cgit-configuration} parameter} integer max-atom-items
35109 Number of items to display in atom feeds view.
35110
35111 Defaults to @samp{10}.
35112
35113 @end deftypevr
35114
35115 @deftypevr {@code{cgit-configuration} parameter} integer max-commit-count
35116 Number of entries to list per page in "log" view.
35117
35118 Defaults to @samp{50}.
35119
35120 @end deftypevr
35121
35122 @deftypevr {@code{cgit-configuration} parameter} integer max-message-length
35123 Number of commit message characters to display in "log" view.
35124
35125 Defaults to @samp{80}.
35126
35127 @end deftypevr
35128
35129 @deftypevr {@code{cgit-configuration} parameter} integer max-repo-count
35130 Specifies the number of entries to list per page on the repository index
35131 page.
35132
35133 Defaults to @samp{50}.
35134
35135 @end deftypevr
35136
35137 @deftypevr {@code{cgit-configuration} parameter} integer max-repodesc-length
35138 Specifies the maximum number of repo description characters to display
35139 on the repository index page.
35140
35141 Defaults to @samp{80}.
35142
35143 @end deftypevr
35144
35145 @deftypevr {@code{cgit-configuration} parameter} integer max-blob-size
35146 Specifies the maximum size of a blob to display HTML for in KBytes.
35147
35148 Defaults to @samp{0}.
35149
35150 @end deftypevr
35151
35152 @deftypevr {@code{cgit-configuration} parameter} string max-stats
35153 Maximum statistics period. Valid values are @samp{week},@samp{month},
35154 @samp{quarter} and @samp{year}.
35155
35156 Defaults to @samp{""}.
35157
35158 @end deftypevr
35159
35160 @deftypevr {@code{cgit-configuration} parameter} mimetype-alist mimetype
35161 Mimetype for the specified filename extension.
35162
35163 Defaults to @samp{((gif "image/gif") (html "text/html") (jpg
35164 "image/jpeg") (jpeg "image/jpeg") (pdf "application/pdf") (png
35165 "image/png") (svg "image/svg+xml"))}.
35166
35167 @end deftypevr
35168
35169 @deftypevr {@code{cgit-configuration} parameter} file-object mimetype-file
35170 Specifies the file to use for automatic mimetype lookup.
35171
35172 Defaults to @samp{""}.
35173
35174 @end deftypevr
35175
35176 @deftypevr {@code{cgit-configuration} parameter} string module-link
35177 Text which will be used as the formatstring for a hyperlink when a
35178 submodule is printed in a directory listing.
35179
35180 Defaults to @samp{""}.
35181
35182 @end deftypevr
35183
35184 @deftypevr {@code{cgit-configuration} parameter} boolean nocache?
35185 If set to the value @samp{#t} caching will be disabled.
35186
35187 Defaults to @samp{#f}.
35188
35189 @end deftypevr
35190
35191 @deftypevr {@code{cgit-configuration} parameter} boolean noplainemail?
35192 If set to @samp{#t} showing full author email addresses will be
35193 disabled.
35194
35195 Defaults to @samp{#f}.
35196
35197 @end deftypevr
35198
35199 @deftypevr {@code{cgit-configuration} parameter} boolean noheader?
35200 Flag which, when set to @samp{#t}, will make cgit omit the standard
35201 header on all pages.
35202
35203 Defaults to @samp{#f}.
35204
35205 @end deftypevr
35206
35207 @deftypevr {@code{cgit-configuration} parameter} project-list project-list
35208 A list of subdirectories inside of @code{repository-directory}, relative
35209 to it, that should loaded as Git repositories. An empty list means that
35210 all subdirectories will be loaded.
35211
35212 Defaults to @samp{()}.
35213
35214 @end deftypevr
35215
35216 @deftypevr {@code{cgit-configuration} parameter} file-object readme
35217 Text which will be used as default value for @code{cgit-repo-readme}.
35218
35219 Defaults to @samp{""}.
35220
35221 @end deftypevr
35222
35223 @deftypevr {@code{cgit-configuration} parameter} boolean remove-suffix?
35224 If set to @code{#t} and @code{repository-directory} is enabled, if any
35225 repositories are found with a suffix of @code{.git}, this suffix will be
35226 removed for the URL and name.
35227
35228 Defaults to @samp{#f}.
35229
35230 @end deftypevr
35231
35232 @deftypevr {@code{cgit-configuration} parameter} integer renamelimit
35233 Maximum number of files to consider when detecting renames.
35234
35235 Defaults to @samp{-1}.
35236
35237 @end deftypevr
35238
35239 @deftypevr {@code{cgit-configuration} parameter} string repository-sort
35240 The way in which repositories in each section are sorted.
35241
35242 Defaults to @samp{""}.
35243
35244 @end deftypevr
35245
35246 @deftypevr {@code{cgit-configuration} parameter} robots-list robots
35247 Text used as content for the @code{robots} meta-tag.
35248
35249 Defaults to @samp{("noindex" "nofollow")}.
35250
35251 @end deftypevr
35252
35253 @deftypevr {@code{cgit-configuration} parameter} string root-desc
35254 Text printed below the heading on the repository index page.
35255
35256 Defaults to @samp{"a fast webinterface for the git dscm"}.
35257
35258 @end deftypevr
35259
35260 @deftypevr {@code{cgit-configuration} parameter} string root-readme
35261 The content of the file specified with this option will be included
35262 verbatim below the ``about'' link on the repository index page.
35263
35264 Defaults to @samp{""}.
35265
35266 @end deftypevr
35267
35268 @deftypevr {@code{cgit-configuration} parameter} string root-title
35269 Text printed as heading on the repository index page.
35270
35271 Defaults to @samp{""}.
35272
35273 @end deftypevr
35274
35275 @deftypevr {@code{cgit-configuration} parameter} boolean scan-hidden-path
35276 If set to @samp{#t} and repository-directory is enabled,
35277 repository-directory will recurse into directories whose name starts
35278 with a period. Otherwise, repository-directory will stay away from such
35279 directories, considered as ``hidden''. Note that this does not apply to
35280 the @file{.git} directory in non-bare repos.
35281
35282 Defaults to @samp{#f}.
35283
35284 @end deftypevr
35285
35286 @deftypevr {@code{cgit-configuration} parameter} list snapshots
35287 Text which specifies the default set of snapshot formats that cgit
35288 generates links for.
35289
35290 Defaults to @samp{()}.
35291
35292 @end deftypevr
35293
35294 @deftypevr {@code{cgit-configuration} parameter} repository-directory repository-directory
35295 Name of the directory to scan for repositories (represents
35296 @code{scan-path}).
35297
35298 Defaults to @samp{"/srv/git"}.
35299
35300 @end deftypevr
35301
35302 @deftypevr {@code{cgit-configuration} parameter} string section
35303 The name of the current repository section - all repositories defined
35304 after this option will inherit the current section name.
35305
35306 Defaults to @samp{""}.
35307
35308 @end deftypevr
35309
35310 @deftypevr {@code{cgit-configuration} parameter} string section-sort
35311 Flag which, when set to @samp{1}, will sort the sections on the
35312 repository listing by name.
35313
35314 Defaults to @samp{""}.
35315
35316 @end deftypevr
35317
35318 @deftypevr {@code{cgit-configuration} parameter} integer section-from-path
35319 A number which, if defined prior to repository-directory, specifies how
35320 many path elements from each repo path to use as a default section name.
35321
35322 Defaults to @samp{0}.
35323
35324 @end deftypevr
35325
35326 @deftypevr {@code{cgit-configuration} parameter} boolean side-by-side-diffs?
35327 If set to @samp{#t} shows side-by-side diffs instead of unidiffs per
35328 default.
35329
35330 Defaults to @samp{#f}.
35331
35332 @end deftypevr
35333
35334 @deftypevr {@code{cgit-configuration} parameter} file-object source-filter
35335 Specifies a command which will be invoked to format plaintext blobs in
35336 the tree view.
35337
35338 Defaults to @samp{""}.
35339
35340 @end deftypevr
35341
35342 @deftypevr {@code{cgit-configuration} parameter} integer summary-branches
35343 Specifies the number of branches to display in the repository ``summary''
35344 view.
35345
35346 Defaults to @samp{10}.
35347
35348 @end deftypevr
35349
35350 @deftypevr {@code{cgit-configuration} parameter} integer summary-log
35351 Specifies the number of log entries to display in the repository
35352 ``summary'' view.
35353
35354 Defaults to @samp{10}.
35355
35356 @end deftypevr
35357
35358 @deftypevr {@code{cgit-configuration} parameter} integer summary-tags
35359 Specifies the number of tags to display in the repository ``summary''
35360 view.
35361
35362 Defaults to @samp{10}.
35363
35364 @end deftypevr
35365
35366 @deftypevr {@code{cgit-configuration} parameter} string strict-export
35367 Filename which, if specified, needs to be present within the repository
35368 for cgit to allow access to that repository.
35369
35370 Defaults to @samp{""}.
35371
35372 @end deftypevr
35373
35374 @deftypevr {@code{cgit-configuration} parameter} string virtual-root
35375 URL which, if specified, will be used as root for all cgit links.
35376
35377 Defaults to @samp{"/"}.
35378
35379 @end deftypevr
35380
35381 @deftypevr {@code{cgit-configuration} parameter} repository-cgit-configuration-list repositories
35382 A list of @dfn{cgit-repo} records to use with config.
35383
35384 Defaults to @samp{()}.
35385
35386 Available @code{repository-cgit-configuration} fields are:
35387
35388 @deftypevr {@code{repository-cgit-configuration} parameter} repo-list snapshots
35389 A mask of snapshot formats for this repo that cgit generates links for,
35390 restricted by the global @code{snapshots} setting.
35391
35392 Defaults to @samp{()}.
35393
35394 @end deftypevr
35395
35396 @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object source-filter
35397 Override the default @code{source-filter}.
35398
35399 Defaults to @samp{""}.
35400
35401 @end deftypevr
35402
35403 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string url
35404 The relative URL used to access the repository.
35405
35406 Defaults to @samp{""}.
35407
35408 @end deftypevr
35409
35410 @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object about-filter
35411 Override the default @code{about-filter}.
35412
35413 Defaults to @samp{""}.
35414
35415 @end deftypevr
35416
35417 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string branch-sort
35418 Flag which, when set to @samp{age}, enables date ordering in the branch
35419 ref list, and when set to @samp{name} enables ordering by branch name.
35420
35421 Defaults to @samp{""}.
35422
35423 @end deftypevr
35424
35425 @deftypevr {@code{repository-cgit-configuration} parameter} repo-list clone-url
35426 A list of URLs which can be used to clone repo.
35427
35428 Defaults to @samp{()}.
35429
35430 @end deftypevr
35431
35432 @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object commit-filter
35433 Override the default @code{commit-filter}.
35434
35435 Defaults to @samp{""}.
35436
35437 @end deftypevr
35438
35439 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string commit-sort
35440 Flag which, when set to @samp{date}, enables strict date ordering in the
35441 commit log, and when set to @samp{topo} enables strict topological
35442 ordering.
35443
35444 Defaults to @samp{""}.
35445
35446 @end deftypevr
35447
35448 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string defbranch
35449 The name of the default branch for this repository. If no such branch
35450 exists in the repository, the first branch name (when sorted) is used as
35451 default instead. By default branch pointed to by HEAD, or ``master'' if
35452 there is no suitable HEAD.
35453
35454 Defaults to @samp{""}.
35455
35456 @end deftypevr
35457
35458 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string desc
35459 The value to show as repository description.
35460
35461 Defaults to @samp{""}.
35462
35463 @end deftypevr
35464
35465 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string homepage
35466 The value to show as repository homepage.
35467
35468 Defaults to @samp{""}.
35469
35470 @end deftypevr
35471
35472 @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object email-filter
35473 Override the default @code{email-filter}.
35474
35475 Defaults to @samp{""}.
35476
35477 @end deftypevr
35478
35479 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-commit-graph?
35480 A flag which can be used to disable the global setting
35481 @code{enable-commit-graph?}.
35482
35483 Defaults to @samp{disabled}.
35484
35485 @end deftypevr
35486
35487 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-log-filecount?
35488 A flag which can be used to disable the global setting
35489 @code{enable-log-filecount?}.
35490
35491 Defaults to @samp{disabled}.
35492
35493 @end deftypevr
35494
35495 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-log-linecount?
35496 A flag which can be used to disable the global setting
35497 @code{enable-log-linecount?}.
35498
35499 Defaults to @samp{disabled}.
35500
35501 @end deftypevr
35502
35503 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-remote-branches?
35504 Flag which, when set to @code{#t}, will make cgit display remote
35505 branches in the summary and refs views.
35506
35507 Defaults to @samp{disabled}.
35508
35509 @end deftypevr
35510
35511 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-subject-links?
35512 A flag which can be used to override the global setting
35513 @code{enable-subject-links?}.
35514
35515 Defaults to @samp{disabled}.
35516
35517 @end deftypevr
35518
35519 @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-html-serving?
35520 A flag which can be used to override the global setting
35521 @code{enable-html-serving?}.
35522
35523 Defaults to @samp{disabled}.
35524
35525 @end deftypevr
35526
35527 @deftypevr {@code{repository-cgit-configuration} parameter} repo-boolean hide?
35528 Flag which, when set to @code{#t}, hides the repository from the
35529 repository index.
35530
35531 Defaults to @samp{#f}.
35532
35533 @end deftypevr
35534
35535 @deftypevr {@code{repository-cgit-configuration} parameter} repo-boolean ignore?
35536 Flag which, when set to @samp{#t}, ignores the repository.
35537
35538 Defaults to @samp{#f}.
35539
35540 @end deftypevr
35541
35542 @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object logo
35543 URL which specifies the source of an image which will be used as a logo
35544 on this repo’s pages.
35545
35546 Defaults to @samp{""}.
35547
35548 @end deftypevr
35549
35550 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string logo-link
35551 URL loaded when clicking on the cgit logo image.
35552
35553 Defaults to @samp{""}.
35554
35555 @end deftypevr
35556
35557 @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object owner-filter
35558 Override the default @code{owner-filter}.
35559
35560 Defaults to @samp{""}.
35561
35562 @end deftypevr
35563
35564 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string module-link
35565 Text which will be used as the formatstring for a hyperlink when a
35566 submodule is printed in a directory listing. The arguments for the
35567 formatstring are the path and SHA1 of the submodule commit.
35568
35569 Defaults to @samp{""}.
35570
35571 @end deftypevr
35572
35573 @deftypevr {@code{repository-cgit-configuration} parameter} module-link-path module-link-path
35574 Text which will be used as the formatstring for a hyperlink when a
35575 submodule with the specified subdirectory path is printed in a directory
35576 listing.
35577
35578 Defaults to @samp{()}.
35579
35580 @end deftypevr
35581
35582 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string max-stats
35583 Override the default maximum statistics period.
35584
35585 Defaults to @samp{""}.
35586
35587 @end deftypevr
35588
35589 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string name
35590 The value to show as repository name.
35591
35592 Defaults to @samp{""}.
35593
35594 @end deftypevr
35595
35596 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string owner
35597 A value used to identify the owner of the repository.
35598
35599 Defaults to @samp{""}.
35600
35601 @end deftypevr
35602
35603 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string path
35604 An absolute path to the repository directory.
35605
35606 Defaults to @samp{""}.
35607
35608 @end deftypevr
35609
35610 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string readme
35611 A path (relative to repo) which specifies a file to include verbatim as
35612 the ``About'' page for this repo.
35613
35614 Defaults to @samp{""}.
35615
35616 @end deftypevr
35617
35618 @deftypevr {@code{repository-cgit-configuration} parameter} repo-string section
35619 The name of the current repository section - all repositories defined
35620 after this option will inherit the current section name.
35621
35622 Defaults to @samp{""}.
35623
35624 @end deftypevr
35625
35626 @deftypevr {@code{repository-cgit-configuration} parameter} repo-list extra-options
35627 Extra options will be appended to cgitrc file.
35628
35629 Defaults to @samp{()}.
35630
35631 @end deftypevr
35632
35633 @end deftypevr
35634
35635 @deftypevr {@code{cgit-configuration} parameter} list extra-options
35636 Extra options will be appended to cgitrc file.
35637
35638 Defaults to @samp{()}.
35639
35640 @end deftypevr
35641
35642
35643 @c %end of fragment
35644
35645 However, it could be that you just want to get a @code{cgitrc} up and
35646 running. In that case, you can pass an @code{opaque-cgit-configuration}
35647 as a record to @code{cgit-service-type}. As its name indicates, an
35648 opaque configuration does not have easy reflective capabilities.
35649
35650 Available @code{opaque-cgit-configuration} fields are:
35651
35652 @deftypevr {@code{opaque-cgit-configuration} parameter} package cgit
35653 The cgit package.
35654 @end deftypevr
35655
35656 @deftypevr {@code{opaque-cgit-configuration} parameter} string string
35657 The contents of the @code{cgitrc}, as a string.
35658 @end deftypevr
35659
35660 For example, if your @code{cgitrc} is just the empty string, you
35661 could instantiate a cgit service like this:
35662
35663 @lisp
35664 (service cgit-service-type
35665 (opaque-cgit-configuration
35666 (cgitrc "")))
35667 @end lisp
35668
35669 @subsubheading Gitolite Service
35670
35671 @cindex Gitolite service
35672 @cindex Git, hosting
35673 @uref{https://gitolite.com/gitolite/, Gitolite} is a tool for hosting Git
35674 repositories on a central server.
35675
35676 Gitolite can handle multiple repositories and users, and supports flexible
35677 configuration of the permissions for the users on the repositories.
35678
35679 The following example will configure Gitolite using the default @code{git}
35680 user, and the provided SSH public key.
35681
35682 @lisp
35683 (service gitolite-service-type
35684 (gitolite-configuration
35685 (admin-pubkey (plain-file
35686 "yourname.pub"
35687 "ssh-rsa AAAA... guix@@example.com"))))
35688 @end lisp
35689
35690 Gitolite is configured through a special admin repository which you can clone,
35691 for example, if you setup Gitolite on @code{example.com}, you would run the
35692 following command to clone the admin repository.
35693
35694 @example
35695 git clone git@@example.com:gitolite-admin
35696 @end example
35697
35698 When the Gitolite service is activated, the provided @code{admin-pubkey} will
35699 be inserted in to the @file{keydir} directory in the gitolite-admin
35700 repository. If this results in a change in the repository, it will be
35701 committed using the message ``gitolite setup by GNU Guix''.
35702
35703 @deftp {Data Type} gitolite-configuration
35704 Data type representing the configuration for @code{gitolite-service-type}.
35705
35706 @table @asis
35707 @item @code{package} (default: @var{gitolite})
35708 Gitolite package to use. There are optional Gitolite dependencies that
35709 are not included in the default package, such as Redis and git-annex.
35710 These features can be made available by using the @code{make-gitolite}
35711 procedure in the @code{(gnu packages version-control}) module to produce
35712 a variant of Gitolite with the desired additional dependencies.
35713
35714 The following code returns a package in which the Redis and git-annex
35715 programs can be invoked by Gitolite's scripts:
35716
35717 @example
35718 (use-modules (gnu packages databases)
35719 (gnu packages haskell-apps)
35720 (gnu packages version-control))
35721 (make-gitolite (list redis git-annex))
35722 @end example
35723
35724 @item @code{user} (default: @var{git})
35725 User to use for Gitolite. This will be user that you use when accessing
35726 Gitolite over SSH.
35727
35728 @item @code{group} (default: @var{git})
35729 Group to use for Gitolite.
35730
35731 @item @code{home-directory} (default: @var{"/var/lib/gitolite"})
35732 Directory in which to store the Gitolite configuration and repositories.
35733
35734 @item @code{rc-file} (default: @var{(gitolite-rc-file)})
35735 A ``file-like'' object (@pxref{G-Expressions, file-like objects}),
35736 representing the configuration for Gitolite.
35737
35738 @item @code{admin-pubkey} (default: @var{#f})
35739 A ``file-like'' object (@pxref{G-Expressions, file-like objects}) used to
35740 setup Gitolite. This will be inserted in to the @file{keydir} directory
35741 within the gitolite-admin repository.
35742
35743 To specify the SSH key as a string, use the @code{plain-file} function.
35744
35745 @lisp
35746 (plain-file "yourname.pub" "ssh-rsa AAAA... guix@@example.com")
35747 @end lisp
35748
35749 @end table
35750 @end deftp
35751
35752 @deftp {Data Type} gitolite-rc-file
35753 Data type representing the Gitolite RC file.
35754
35755 @table @asis
35756 @item @code{umask} (default: @code{#o0077})
35757 This controls the permissions Gitolite sets on the repositories and their
35758 contents.
35759
35760 A value like @code{#o0027} will give read access to the group used by Gitolite
35761 (by default: @code{git}). This is necessary when using Gitolite with software
35762 like cgit or gitweb.
35763
35764 @item @code{local-code} (default: @code{"$rc@{GL_ADMIN_BASE@}/local"})
35765 Allows you to add your own non-core programs, or even override the
35766 shipped ones with your own.
35767
35768 Please supply the FULL path to this variable. By default, directory
35769 called "local" in your gitolite clone is used, providing the benefits of
35770 versioning them as well as making changes to them without having to log
35771 on to the server.
35772
35773 @item @code{unsafe-pattern} (default: @code{#f})
35774 An optional Perl regular expression for catching unsafe configurations in
35775 the configuration file. See
35776 @uref{https://gitolite.com/gitolite/git-config.html#compensating-for-unsafe_patt,
35777 Gitolite's documentation} for more information.
35778
35779 When the value is not @code{#f}, it should be a string containing a Perl
35780 regular expression, such as @samp{"[`~#\$\&()|;<>]"}, which is the default
35781 value used by gitolite. It rejects any special character in configuration
35782 that might be interpreted by a shell, which is useful when sharing the
35783 administration burden with other people that do not otherwise have shell
35784 access on the server.
35785
35786 @item @code{git-config-keys} (default: @code{""})
35787 Gitolite allows you to set git config values using the @samp{config}
35788 keyword. This setting allows control over the config keys to accept.
35789
35790 @item @code{roles} (default: @code{'(("READERS" . 1) ("WRITERS" . ))})
35791 Set the role names allowed to be used by users running the perms command.
35792
35793 @item @code{enable} (default: @code{'("help" "desc" "info" "perms" "writable" "ssh-authkeys" "git-config" "daemon" "gitweb")})
35794 This setting controls the commands and features to enable within Gitolite.
35795
35796 @end table
35797 @end deftp
35798
35799
35800 @subsubheading Gitile Service
35801
35802 @cindex Gitile service
35803 @cindex Git, forge
35804 @uref{https://git.lepiller.eu/gitile, Gitile} is a Git forge for viewing
35805 public git repository contents from a web browser.
35806
35807 Gitile works best in collaboration with Gitolite, and will serve the public
35808 repositories from Gitolite by default. The service should listen only on
35809 a local port, and a webserver should be configured to serve static resources.
35810 The gitile service provides an easy way to extend the Nginx service for
35811 that purpose (@pxref{NGINX}).
35812
35813 The following example will configure Gitile to serve repositories from a
35814 custom location, with some default messages for the home page and the
35815 footers.
35816
35817 @lisp
35818 (service gitile-service-type
35819 (gitile-configuration
35820 (repositories "/srv/git")
35821 (base-git-url "https://myweb.site/git")
35822 (index-title "My git repositories")
35823 (intro '((p "This is all my public work!")))
35824 (footer '((p "This is the end")))
35825 (nginx-server-block
35826 (nginx-server-configuration
35827 (ssl-certificate
35828 "/etc/letsencrypt/live/myweb.site/fullchain.pem")
35829 (ssl-certificate-key
35830 "/etc/letsencrypt/live/myweb.site/privkey.pem")
35831 (listen '("443 ssl http2" "[::]:443 ssl http2"))
35832 (locations
35833 (list
35834 ;; Allow for https anonymous fetch on /git/ urls.
35835 (git-http-nginx-location-configuration
35836 (git-http-configuration
35837 (uri-path "/git/")
35838 (git-root "/var/lib/gitolite/repositories")))))))))
35839 @end lisp
35840
35841 In addition to the configuration record, you should configure your git
35842 repositories to contain some optional information. First, your public
35843 repositories need to contain the @file{git-daemon-export-ok} magic file
35844 that allows Git to export the repository. Gitile uses the presence of this
35845 file to detect public repositories it should make accessible. To do so with
35846 Gitolite for instance, modify your @file{conf/gitolite.conf} to include
35847 this in the repositories you want to make public:
35848
35849 @example
35850 repo foo
35851 R = daemon
35852 @end example
35853
35854 In addition, Gitile can read the repository configuration to display more
35855 information on the repository. Gitile uses the gitweb namespace for its
35856 configuration. As an example, you can use the following in your
35857 @file{conf/gitolite.conf}:
35858
35859 @example
35860 repo foo
35861 R = daemon
35862 desc = A long description, optionally with <i>HTML</i>, shown on the index page
35863 config gitweb.name = The Foo Project
35864 config gitweb.synopsis = A short description, shown on the main page of the project
35865 @end example
35866
35867 Do not forget to commit and push these changes once you are satisfied. You
35868 may need to change your gitolite configuration to allow the previous
35869 configuration options to be set. One way to do that is to add the
35870 following service definition:
35871
35872 @lisp
35873 (service gitolite-service-type
35874 (gitolite-configuration
35875 (admin-pubkey (local-file "key.pub"))
35876 (rc-file
35877 (gitolite-rc-file
35878 (umask #o0027)
35879 ;; Allow to set any configuration key
35880 (git-config-keys ".*")
35881 ;; Allow any text as a valid configuration value
35882 (unsafe-patt "^$")))))
35883 @end lisp
35884
35885 @deftp {Data Type} gitile-configuration
35886 Data type representing the configuration for @code{gitile-service-type}.
35887
35888 @table @asis
35889 @item @code{package} (default: @var{gitile})
35890 Gitile package to use.
35891
35892 @item @code{host} (default: @code{"localhost"})
35893 The host on which gitile is listening.
35894
35895 @item @code{port} (default: @code{8080})
35896 The port on which gitile is listening.
35897
35898 @item @code{database} (default: @code{"/var/lib/gitile/gitile-db.sql"})
35899 The location of the database.
35900
35901 @item @code{repositories} (default: @code{"/var/lib/gitolite/repositories"})
35902 The location of the repositories. Note that only public repositories will
35903 be shown by Gitile. To make a repository public, add an empty
35904 @file{git-daemon-export-ok} file at the root of that repository.
35905
35906 @item @code{base-git-url}
35907 The base git url that will be used to show clone commands.
35908
35909 @item @code{index-title} (default: @code{"Index"})
35910 The page title for the index page that lists all the available repositories.
35911
35912 @item @code{intro} (default: @code{'()})
35913 The intro content, as a list of sxml expressions. This is shown above the list
35914 of repositories, on the index page.
35915
35916 @item @code{footer} (default: @code{'()})
35917 The footer content, as a list of sxml expressions. This is shown on every
35918 page served by Gitile.
35919
35920 @item @code{nginx-server-block}
35921 An nginx server block that will be extended and used as a reverse proxy by
35922 Gitile to serve its pages, and as a normal web server to serve its assets.
35923
35924 You can use this block to add more custom URLs to your domain, such as a
35925 @code{/git/} URL for anonymous clones, or serving any other files you would
35926 like to serve.
35927 @end table
35928 @end deftp
35929
35930
35931 @node Game Services
35932 @subsection Game Services
35933
35934 @subsubheading The Battle for Wesnoth Service
35935 @cindex wesnothd
35936 @uref{https://wesnoth.org, The Battle for Wesnoth} is a fantasy, turn
35937 based tactical strategy game, with several single player campaigns, and
35938 multiplayer games (both networked and local).
35939
35940 @defvar {Scheme Variable} wesnothd-service-type
35941 Service type for the wesnothd service. Its value must be a
35942 @code{wesnothd-configuration} object. To run wesnothd in the default
35943 configuration, instantiate it as:
35944
35945 @lisp
35946 (service wesnothd-service-type)
35947 @end lisp
35948 @end defvar
35949
35950 @deftp {Data Type} wesnothd-configuration
35951 Data type representing the configuration of @command{wesnothd}.
35952
35953 @table @asis
35954 @item @code{package} (default: @code{wesnoth-server})
35955 The wesnoth server package to use.
35956
35957 @item @code{port} (default: @code{15000})
35958 The port to bind the server to.
35959 @end table
35960 @end deftp
35961
35962
35963 @node PAM Mount Service
35964 @subsection PAM Mount Service
35965 @cindex pam-mount
35966
35967 The @code{(gnu services pam-mount)} module provides a service allowing
35968 users to mount volumes when they log in. It should be able to mount any
35969 volume format supported by the system.
35970
35971 @defvar {Scheme Variable} pam-mount-service-type
35972 Service type for PAM Mount support.
35973 @end defvar
35974
35975 @deftp {Data Type} pam-mount-configuration
35976 Data type representing the configuration of PAM Mount.
35977
35978 It takes the following parameters:
35979
35980 @table @asis
35981 @item @code{rules}
35982 The configuration rules that will be used to generate
35983 @file{/etc/security/pam_mount.conf.xml}.
35984
35985 The configuration rules are SXML elements (@pxref{SXML,,, guile, GNU
35986 Guile Reference Manual}), and the default ones don't mount anything for
35987 anyone at login:
35988
35989 @lisp
35990 `((debug (@@ (enable "0")))
35991 (mntoptions (@@ (allow ,(string-join
35992 '("nosuid" "nodev" "loop"
35993 "encryption" "fsck" "nonempty"
35994 "allow_root" "allow_other")
35995 ","))))
35996 (mntoptions (@@ (require "nosuid,nodev")))
35997 (logout (@@ (wait "0")
35998 (hup "0")
35999 (term "no")
36000 (kill "no")))
36001 (mkmountpoint (@@ (enable "1")
36002 (remove "true"))))
36003 @end lisp
36004
36005 Some @code{volume} elements must be added to automatically mount volumes
36006 at login. Here's an example allowing the user @code{alice} to mount her
36007 encrypted @env{HOME} directory and allowing the user @code{bob} to mount
36008 the partition where he stores his data:
36009
36010 @lisp
36011 (define pam-mount-rules
36012 `((debug (@@ (enable "0")))
36013 (volume (@@ (user "alice")
36014 (fstype "crypt")
36015 (path "/dev/sda2")
36016 (mountpoint "/home/alice")))
36017 (volume (@@ (user "bob")
36018 (fstype "auto")
36019 (path "/dev/sdb3")
36020 (mountpoint "/home/bob/data")
36021 (options "defaults,autodefrag,compress")))
36022 (mntoptions (@@ (allow ,(string-join
36023 '("nosuid" "nodev" "loop"
36024 "encryption" "fsck" "nonempty"
36025 "allow_root" "allow_other")
36026 ","))))
36027 (mntoptions (@@ (require "nosuid,nodev")))
36028 (logout (@@ (wait "0")
36029 (hup "0")
36030 (term "no")
36031 (kill "no")))
36032 (mkmountpoint (@@ (enable "1")
36033 (remove "true")))))
36034
36035 (service pam-mount-service-type
36036 (pam-mount-configuration
36037 (rules pam-mount-rules)))
36038 @end lisp
36039
36040 The complete list of possible options can be found in the man page for
36041 @uref{http://pam-mount.sourceforge.net/pam_mount.conf.5.html, pam_mount.conf}.
36042 @end table
36043 @end deftp
36044
36045
36046 @node Guix Services
36047 @subsection Guix Services
36048
36049 @subsubheading Guix Build Coordinator
36050 The @uref{https://git.cbaines.net/guix/build-coordinator/,Guix Build
36051 Coordinator} aids in distributing derivation builds among machines
36052 running an @dfn{agent}. The build daemon is still used to build the
36053 derivations, but the Guix Build Coordinator manages allocating builds
36054 and working with the results.
36055
36056 The Guix Build Coordinator consists of one @dfn{coordinator}, and one or
36057 more connected @dfn{agent} processes. The coordinator process handles
36058 clients submitting builds, and allocating builds to agents. The agent
36059 processes talk to a build daemon to actually perform the builds, then
36060 send the results back to the coordinator.
36061
36062 There is a script to run the coordinator component of the Guix Build
36063 Coordinator, but the Guix service uses a custom Guile script instead, to
36064 provide better integration with G-expressions used in the configuration.
36065
36066 @defvar {Scheme Variable} guix-build-coordinator-service-type
36067 Service type for the Guix Build Coordinator. Its value must be a
36068 @code{guix-build-coordinator-configuration} object.
36069 @end defvar
36070
36071 @deftp {Data Type} guix-build-coordinator-configuration
36072 Data type representing the configuration of the Guix Build Coordinator.
36073
36074 @table @asis
36075 @item @code{package} (default: @code{guix-build-coordinator})
36076 The Guix Build Coordinator package to use.
36077
36078 @item @code{user} (default: @code{"guix-build-coordinator"})
36079 The system user to run the service as.
36080
36081 @item @code{group} (default: @code{"guix-build-coordinator"})
36082 The system group to run the service as.
36083
36084 @item @code{database-uri-string} (default: @code{"sqlite:///var/lib/guix-build-coordinator/guix_build_coordinator.db"})
36085 The URI to use for the database.
36086
36087 @item @code{agent-communication-uri} (default: @code{"http://0.0.0.0:8745"})
36088 The URI describing how to listen to requests from agent processes.
36089
36090 @item @code{client-communication-uri} (default: @code{"http://127.0.0.1:8746"})
36091 The URI describing how to listen to requests from clients. The client
36092 API allows submitting builds and currently isn't authenticated, so take
36093 care when configuring this value.
36094
36095 @item @code{allocation-strategy} (default: @code{#~basic-build-allocation-strategy})
36096 A G-expression for the allocation strategy to be used. This is a
36097 procedure that takes the datastore as an argument and populates the
36098 allocation plan in the database.
36099
36100 @item @code{hooks} (default: @var{'()})
36101 An association list of hooks. These provide a way to execute arbitrary
36102 code upon certain events, like a build result being processed.
36103
36104 @item @code{parallel-hooks} (default: @var{'()})
36105 Hooks can be configured to run in parallel. This parameter is an
36106 association list of hooks to do in parallel, where the key is the symbol
36107 for the hook and the value is the number of threads to run.
36108
36109 @item @code{guile} (default: @code{guile-3.0-latest})
36110 The Guile package with which to run the Guix Build Coordinator.
36111
36112 @end table
36113 @end deftp
36114
36115 @defvar {Scheme Variable} guix-build-coordinator-agent-service-type
36116 Service type for a Guix Build Coordinator agent. Its value must be a
36117 @code{guix-build-coordinator-agent-configuration} object.
36118 @end defvar
36119
36120 @deftp {Data Type} guix-build-coordinator-agent-configuration
36121 Data type representing the configuration a Guix Build Coordinator agent.
36122
36123 @table @asis
36124 @item @code{package} (default: @code{guix-build-coordinator/agent-only})
36125 The Guix Build Coordinator package to use.
36126
36127 @item @code{user} (default: @code{"guix-build-coordinator-agent"})
36128 The system user to run the service as.
36129
36130 @item @code{coordinator} (default: @code{"http://localhost:8745"})
36131 The URI to use when connecting to the coordinator.
36132
36133 @item @code{authentication}
36134 Record describing how this agent should authenticate with the
36135 coordinator. Possible record types are described below.
36136
36137 @item @code{systems} (default: @code{#f})
36138 The systems for which this agent should fetch builds. The agent process
36139 will use the current system it's running on as the default.
36140
36141 @item @code{max-parallel-builds} (default: @code{1})
36142 The number of builds to perform in parallel.
36143
36144 @item @code{max-allocated-builds} (default: @code{#f})
36145 The maximum number of builds this agent can be allocated.
36146
36147 @item @code{max-1min-load-average} (default: @code{#f})
36148 Load average value to look at when considering starting new builds, if
36149 the 1 minute load average exceeds this value, the agent will wait before
36150 starting new builds.
36151
36152 This will be unspecified if the value is @code{#f}, and the agent will
36153 use the number of cores reported by the system as the max 1 minute load
36154 average.
36155
36156 @item @code{derivation-substitute-urls} (default: @code{#f})
36157 URLs from which to attempt to fetch substitutes for derivations, if the
36158 derivations aren't already available.
36159
36160 @item @code{non-derivation-substitute-urls} (default: @code{#f})
36161 URLs from which to attempt to fetch substitutes for build inputs, if the
36162 input store items aren't already available.
36163
36164 @end table
36165 @end deftp
36166
36167 @deftp {Data Type} guix-build-coordinator-agent-password-auth
36168 Data type representing an agent authenticating with a coordinator via a
36169 UUID and password.
36170
36171 @table @asis
36172 @item @code{uuid}
36173 The UUID of the agent. This should be generated by the coordinator
36174 process, stored in the coordinator database, and used by the intended
36175 agent.
36176
36177 @item @code{password}
36178 The password to use when connecting to the coordinator.
36179
36180 @end table
36181 @end deftp
36182
36183 @deftp {Data Type} guix-build-coordinator-agent-password-file-auth
36184 Data type representing an agent authenticating with a coordinator via a
36185 UUID and password read from a file.
36186
36187 @table @asis
36188 @item @code{uuid}
36189 The UUID of the agent. This should be generated by the coordinator
36190 process, stored in the coordinator database, and used by the intended
36191 agent.
36192
36193 @item @code{password-file}
36194 A file containing the password to use when connecting to the
36195 coordinator.
36196
36197 @end table
36198 @end deftp
36199
36200 @deftp {Data Type} guix-build-coordinator-agent-dynamic-auth
36201 Data type representing an agent authenticating with a coordinator via a
36202 dynamic auth token and agent name.
36203
36204 @table @asis
36205 @item @code{agent-name}
36206 Name of an agent, this is used to match up to an existing entry in the
36207 database if there is one. When no existing entry is found, a new entry
36208 is automatically added.
36209
36210 @item @code{token}
36211 Dynamic auth token, this is created and stored in the coordinator
36212 database, and is used by the agent to authenticate.
36213
36214 @end table
36215 @end deftp
36216
36217 @deftp {Data Type} guix-build-coordinator-agent-dynamic-auth-with-file
36218 Data type representing an agent authenticating with a coordinator via a
36219 dynamic auth token read from a file and agent name.
36220
36221 @table @asis
36222 @item @code{agent-name}
36223 Name of an agent, this is used to match up to an existing entry in the
36224 database if there is one. When no existing entry is found, a new entry
36225 is automatically added.
36226
36227 @item @code{token-file}
36228 File containing the dynamic auth token, this is created and stored in
36229 the coordinator database, and is used by the agent to authenticate.
36230
36231 @end table
36232 @end deftp
36233
36234 The Guix Build Coordinator package contains a script to query an
36235 instance of the Guix Data Service for derivations to build, and then
36236 submit builds for those derivations to the coordinator. The service
36237 type below assists in running this script. This is an additional tool
36238 that may be useful when building derivations contained within an
36239 instance of the Guix Data Service.
36240
36241 @defvar {Scheme Variable} guix-build-coordinator-queue-builds-service-type
36242 Service type for the
36243 guix-build-coordinator-queue-builds-from-guix-data-service script. Its
36244 value must be a @code{guix-build-coordinator-queue-builds-configuration}
36245 object.
36246 @end defvar
36247
36248 @deftp {Data Type} guix-build-coordinator-queue-builds-configuration
36249 Data type representing the options to the queue builds from guix data
36250 service script.
36251
36252 @table @asis
36253 @item @code{package} (default: @code{guix-build-coordinator})
36254 The Guix Build Coordinator package to use.
36255
36256 @item @code{user} (default: @code{"guix-build-coordinator-queue-builds"})
36257 The system user to run the service as.
36258
36259 @item @code{coordinator} (default: @code{"http://localhost:8746"})
36260 The URI to use when connecting to the coordinator.
36261
36262 @item @code{systems} (default: @code{#f})
36263 The systems for which to fetch derivations to build.
36264
36265 @item @code{systems-and-targets} (default: @code{#f})
36266 An association list of system and target pairs for which to fetch
36267 derivations to build.
36268
36269 @item @code{guix-data-service} (default: @code{"https://data.guix.gnu.org"})
36270 The Guix Data Service instance from which to query to find out about
36271 derivations to build.
36272
36273 @item @code{guix-data-service-build-server-id} (default: @code{#f})
36274 The Guix Data Service build server ID corresponding to the builds being
36275 submitted. Providing this speeds up the submitting of builds as
36276 derivations that have already been submitted can be skipped before
36277 asking the coordinator to build them.
36278
36279 @item @code{processed-commits-file} (default: @code{"/var/cache/guix-build-coordinator-queue-builds/processed-commits"})
36280 A file to record which commits have been processed, to avoid needlessly
36281 processing them again if the service is restarted.
36282
36283 @end table
36284 @end deftp
36285
36286 @subsubheading Guix Data Service
36287 The @uref{http://data.guix.gnu.org,Guix Data Service} processes, stores
36288 and provides data about GNU Guix. This includes information about
36289 packages, derivations and lint warnings.
36290
36291 The data is stored in a PostgreSQL database, and available through a web
36292 interface.
36293
36294 @defvar {Scheme Variable} guix-data-service-type
36295 Service type for the Guix Data Service. Its value must be a
36296 @code{guix-data-service-configuration} object. The service optionally
36297 extends the getmail service, as the guix-commits mailing list is used to
36298 find out about changes in the Guix git repository.
36299 @end defvar
36300
36301 @deftp {Data Type} guix-data-service-configuration
36302 Data type representing the configuration of the Guix Data Service.
36303
36304 @table @asis
36305 @item @code{package} (default: @code{guix-data-service})
36306 The Guix Data Service package to use.
36307
36308 @item @code{user} (default: @code{"guix-data-service"})
36309 The system user to run the service as.
36310
36311 @item @code{group} (default: @code{"guix-data-service"})
36312 The system group to run the service as.
36313
36314 @item @code{port} (default: @code{8765})
36315 The port to bind the web service to.
36316
36317 @item @code{host} (default: @code{"127.0.0.1"})
36318 The host to bind the web service to.
36319
36320 @item @code{getmail-idle-mailboxes} (default: @code{#f})
36321 If set, this is the list of mailboxes that the getmail service will be
36322 configured to listen to.
36323
36324 @item @code{commits-getmail-retriever-configuration} (default: @code{#f})
36325 If set, this is the @code{getmail-retriever-configuration} object with
36326 which to configure getmail to fetch mail from the guix-commits mailing
36327 list.
36328
36329 @item @code{extra-options} (default: @var{'()})
36330 Extra command line options for @code{guix-data-service}.
36331
36332 @item @code{extra-process-jobs-options} (default: @var{'()})
36333 Extra command line options for @code{guix-data-service-process-jobs}.
36334
36335 @end table
36336 @end deftp
36337
36338 @subsubheading Nar Herder
36339 The @uref{https://git.cbaines.net/guix/nar-herder/about/,Nar Herder} is
36340 a utility for managing a collection of nars.
36341
36342 @defvar {Scheme Variable} nar-herder-type
36343 Service type for the Guix Data Service. Its value must be a
36344 @code{nar-herder-configuration} object. The service optionally
36345 extends the getmail service, as the guix-commits mailing list is used to
36346 find out about changes in the Guix git repository.
36347 @end defvar
36348
36349 @deftp {Data Type} nar-herder-configuration
36350 Data type representing the configuration of the Guix Data Service.
36351
36352 @table @asis
36353 @item @code{package} (default: @code{nar-herder})
36354 The Nar Herder package to use.
36355
36356 @item @code{user} (default: @code{"nar-herder"})
36357 The system user to run the service as.
36358
36359 @item @code{group} (default: @code{"nar-herder"})
36360 The system group to run the service as.
36361
36362 @item @code{port} (default: @code{8734})
36363 The port to bind the server to.
36364
36365 @item @code{host} (default: @code{"127.0.0.1"})
36366 The host to bind the server to.
36367
36368 @item @code{mirror} (default: @code{#f})
36369 Optional URL of the other Nar Herder instance which should be mirrored.
36370 This means that this Nar Herder instance will download it's database,
36371 and keep it up to date.
36372
36373 @item @code{database} (default: @code{"/var/lib/nar-herder/nar_herder.db"})
36374 Location for the database. If this Nar Herder instance is mirroring
36375 another, the database will be downloaded if it doesn't exist. If this
36376 Nar Herder instance isn't mirroring another, an empty database will be
36377 created.
36378
36379 @item @code{database-dump} (default: @code{"/var/lib/nar-herder/nar_herder_dump.db"})
36380 Location of the database dump. This is created and regularly updated by
36381 taking a copy of the database. This is the version of the database that
36382 is available to download.
36383
36384 @item @code{storage} (default: @code{#f})
36385 Optional location in which to store nars.
36386
36387 @item @code{storage-limit} (default: @code{"none"})
36388 Limit in bytes for the nars stored in the storage location. This can
36389 also be set to ``none'' so that there is no limit.
36390
36391 When the storage location exceeds this size, nars are removed according
36392 to the nar removal criteria.
36393
36394 @item @code{storage-nar-removal-criteria} (default: @code{'()})
36395 Criteria used to remove nars from the storage location. These are used
36396 in conjunction with the storage limit.
36397
36398 When the storage location exceeds the storage limit size, nars will be
36399 checked against the nar removal criteria and if any of the criteria
36400 match, they will be removed. This will continue until the storage
36401 location is below the storage limit size.
36402
36403 Each criteria is specified by a string, then an equals sign, then
36404 another string. Currently, only one criteria is supported, checking if a
36405 nar is stored on another Nar Herder instance.
36406
36407 @item @code{ttl} (default: @code{#f})
36408 Produce @code{Cache-Control} HTTP headers that advertise a time-to-live
36409 (TTL) of @var{ttl}. @var{ttl} must denote a duration: @code{5d} means 5
36410 days, @code{1m} means 1 month, and so on.
36411
36412 This allows the user's Guix to keep substitute information in cache for
36413 @var{ttl}.
36414
36415 @item @code{negative-ttl} (default: @code{#f})
36416 Similarly produce @code{Cache-Control} HTTP headers to advertise the
36417 time-to-live (TTL) of @emph{negative} lookups---missing store items, for
36418 which the HTTP 404 code is returned. By default, no negative TTL is
36419 advertised.
36420
36421 @item @code{log-level} (default: @code{'DEBUG})
36422 Log level to use, specify a log level like @code{'INFO} to stop logging
36423 individual requests.
36424
36425 @end table
36426 @end deftp
36427
36428 @node Linux Services
36429 @subsection Linux Services
36430
36431 @cindex oom
36432 @cindex out of memory killer
36433 @cindex earlyoom
36434 @cindex early out of memory daemon
36435 @subsubheading Early OOM Service
36436
36437 @uref{https://github.com/rfjakob/earlyoom,Early OOM}, also known as
36438 Earlyoom, is a minimalist out of memory (OOM) daemon that runs in user
36439 space and provides a more responsive and configurable alternative to the
36440 in-kernel OOM killer. It is useful to prevent the system from becoming
36441 unresponsive when it runs out of memory.
36442
36443 @deffn {Scheme Variable} earlyoom-service-type
36444 The service type for running @command{earlyoom}, the Early OOM daemon.
36445 Its value must be a @code{earlyoom-configuration} object, described
36446 below. The service can be instantiated in its default configuration
36447 with:
36448
36449 @lisp
36450 (service earlyoom-service-type)
36451 @end lisp
36452 @end deffn
36453
36454 @deftp {Data Type} earlyoom-configuration
36455 This is the configuration record for the @code{earlyoom-service-type}.
36456
36457 @table @asis
36458 @item @code{earlyoom} (default: @var{earlyoom})
36459 The Earlyoom package to use.
36460
36461 @item @code{minimum-available-memory} (default: @code{10})
36462 The threshold for the minimum @emph{available} memory, in percentages.
36463
36464 @item @code{minimum-free-swap} (default: @code{10})
36465 The threshold for the minimum free swap memory, in percentages.
36466
36467 @item @code{prefer-regexp} (default: @code{#f})
36468 A regular expression (as a string) to match the names of the processes
36469 that should be preferably killed.
36470
36471 @item @code{avoid-regexp} (default: @code{#f})
36472 A regular expression (as a string) to match the names of the processes
36473 that should @emph{not} be killed.
36474
36475 @item @code{memory-report-interval} (default: @code{0})
36476 The interval in seconds at which a memory report is printed. It is
36477 disabled by default.
36478
36479 @item @code{ignore-positive-oom-score-adj?} (default: @code{#f})
36480 A boolean indicating whether the positive adjustments set in
36481 @file{/proc/*/oom_score_adj} should be ignored.
36482
36483 @item @code{show-debug-messages?} (default: @code{#f})
36484 A boolean indicating whether debug messages should be printed. The logs
36485 are saved at @file{/var/log/earlyoom.log}.
36486
36487 @item @code{send-notification-command} (default: @code{#f})
36488 This can be used to provide a custom command used for sending
36489 notifications.
36490 @end table
36491 @end deftp
36492
36493 @cindex modprobe
36494 @cindex kernel module loader
36495 @subsubheading Kernel Module Loader Service
36496
36497 The kernel module loader service allows one to load loadable kernel
36498 modules at boot. This is especially useful for modules that don't
36499 autoload and need to be manually loaded, as is the case with
36500 @code{ddcci}.
36501
36502 @deffn {Scheme Variable} kernel-module-loader-service-type
36503 The service type for loading loadable kernel modules at boot with
36504 @command{modprobe}. Its value must be a list of strings representing
36505 module names. For example loading the drivers provided by
36506 @code{ddcci-driver-linux}, in debugging mode by passing some module
36507 parameters, can be done as follow:
36508
36509 @lisp
36510 (use-modules (gnu) (gnu services))
36511 (use-package-modules linux)
36512 (use-service-modules linux)
36513
36514 (define ddcci-config
36515 (plain-file "ddcci.conf"
36516 "options ddcci dyndbg delay=120"))
36517
36518 (operating-system
36519 ...
36520 (services (cons* (service kernel-module-loader-service-type
36521 '("ddcci" "ddcci_backlight"))
36522 (simple-service 'ddcci-config etc-service-type
36523 (list `("modprobe.d/ddcci.conf"
36524 ,ddcci-config)))
36525 %base-services))
36526 (kernel-loadable-modules (list ddcci-driver-linux)))
36527 @end lisp
36528 @end deffn
36529
36530 @cindex rasdaemon
36531 @cindex Platform Reliability, Availability and Serviceability daemon
36532 @subsubheading Rasdaemon Service
36533
36534 The Rasdaemon service provides a daemon which monitors platform
36535 @acronym{RAS, Reliability@comma{} Availability@comma{} and Serviceability} reports from
36536 Linux kernel trace events, logging them to syslogd.
36537
36538 Reliability, Availability and Serviceability is a concept used on servers meant
36539 to measure their robustness.
36540
36541 @strong{Relability} is the probability that a system will produce correct
36542 outputs:
36543
36544 @itemize @bullet
36545 @item Generally measured as Mean Time Between Failures (MTBF), and
36546 @item Enhanced by features that help to avoid, detect and repair hardware
36547 faults
36548 @end itemize
36549
36550 @strong{Availability} is the probability that a system is operational at a
36551 given time:
36552
36553 @itemize @bullet
36554 @item Generally measured as a percentage of downtime per a period of time, and
36555 @item Often uses mechanisms to detect and correct hardware faults in runtime.
36556 @end itemize
36557
36558 @strong{Serviceability} is the simplicity and speed with which a system can be
36559 repaired or maintained:
36560
36561 @itemize @bullet
36562 @item Generally measured on Mean Time Between Repair (MTBR).
36563 @end itemize
36564
36565
36566 Among the monitoring measures, the most usual ones include:
36567
36568 @itemize @bullet
36569 @item CPU – detect errors at instruction execution and at L1/L2/L3 caches;
36570 @item Memory – add error correction logic (ECC) to detect and correct errors;
36571 @item I/O – add CRC checksums for transferred data;
36572 @item Storage – RAID, journal file systems, checksums, Self-Monitoring,
36573 Analysis and Reporting Technology (SMART).
36574 @end itemize
36575
36576 By monitoring the number of occurrences of error detections, it is possible to
36577 identify if the probability of hardware errors is increasing, and, on such
36578 case, do a preventive maintenance to replace a degraded component while those
36579 errors are correctable.
36580
36581 For detailed information about the types of error events gathered and how to
36582 make sense of them, see the kernel administrator's guide at
36583 @url{https://www.kernel.org/doc/html/latest/admin-guide/ras.html}.
36584
36585 @defvr {Scheme Variable} rasdaemon-service-type
36586 Service type for the @command{rasdaemon} service. It accepts a
36587 @code{rasdaemon-configuration} object. Instantiating like
36588
36589 @lisp
36590 (service rasdaemon-service-type)
36591 @end lisp
36592
36593 will load with a default configuration, which monitors all events and logs to
36594 syslogd.
36595 @end defvr
36596
36597 @deftp {Data Type} rasdaemon-configuration
36598 The data type representing the configuration of @command{rasdaemon}.
36599
36600 @table @asis
36601 @item @code{record?} (default: @code{#f})
36602
36603 A boolean indicating whether to record the events in an SQLite database. This
36604 provides a more structured access to the information contained in the log file.
36605 The database location is hard-coded to @file{/var/lib/rasdaemon/ras-mc_event.db}.
36606
36607 @end table
36608 @end deftp
36609
36610 @cindex zram
36611 @cindex compressed swap
36612 @cindex Compressed RAM-based block devices
36613 @subsubheading Zram Device Service
36614
36615 The Zram device service provides a compressed swap device in system
36616 memory. The Linux Kernel documentation has more information about
36617 @uref{https://www.kernel.org/doc/html/latest/admin-guide/blockdev/zram.html,zram}
36618 devices.
36619
36620 @deffn {Scheme Variable} zram-device-service-type
36621 This service creates the zram block device, formats it as swap and
36622 enables it as a swap device. The service's value is a
36623 @code{zram-device-configuration} record.
36624
36625 @deftp {Data Type} zram-device-configuration
36626 This is the data type representing the configuration for the zram-device
36627 service.
36628
36629 @table @asis
36630 @item @code{size} (default @code{"1G"})
36631 This is the amount of space you wish to provide for the zram device. It
36632 accepts a string and can be a number of bytes or use a suffix, eg.:
36633 @code{"512M"} or @code{1024000}.
36634 @item @code{compression-algorithm} (default @code{'lzo})
36635 This is the compression algorithm you wish to use. It is difficult to
36636 list all the possible compression options, but common ones supported by
36637 Guix's Linux Libre Kernel include @code{'lzo}, @code{'lz4} and @code{'zstd}.
36638 @item @code{memory-limit} (default @code{0})
36639 This is the maximum amount of memory which the zram device can use.
36640 Setting it to '0' disables the limit. While it is generally expected
36641 that compression will be 2:1, it is possible that uncompressable data
36642 can be written to swap and this is a method to limit how much memory can
36643 be used. It accepts a string and can be a number of bytes or use a
36644 suffix, eg.: @code{"2G"}.
36645 @item @code{priority} (default @code{#f})
36646 This is the priority of the swap device created from the zram device.
36647 @xref{Swap Space} for a description of swap priorities. You might want
36648 to set a specific priority for the zram device, otherwise it could end
36649 up not being used much for the reasons described there.
36650 @end table
36651
36652 @end deftp
36653 @end deffn
36654
36655 @node Hurd Services
36656 @subsection Hurd Services
36657
36658 @defvr {Scheme Variable} hurd-console-service-type
36659 This service starts the fancy @code{VGA} console client on the Hurd.
36660
36661 The service's value is a @code{hurd-console-configuration} record.
36662 @end defvr
36663
36664 @deftp {Data Type} hurd-console-configuration
36665 This is the data type representing the configuration for the
36666 hurd-console-service.
36667
36668 @table @asis
36669 @item @code{hurd} (default: @var{hurd})
36670 The Hurd package to use.
36671 @end table
36672 @end deftp
36673
36674 @defvr {Scheme Variable} hurd-getty-service-type
36675 This service starts a tty using the Hurd @code{getty} program.
36676
36677 The service's value is a @code{hurd-getty-configuration} record.
36678 @end defvr
36679
36680 @deftp {Data Type} hurd-getty-configuration
36681 This is the data type representing the configuration for the
36682 hurd-getty-service.
36683
36684 @table @asis
36685 @item @code{hurd} (default: @var{hurd})
36686 The Hurd package to use.
36687
36688 @item @code{tty}
36689 The name of the console this Getty runs on---e.g., @code{"tty1"}.
36690
36691 @item @code{baud-rate} (default: @code{38400})
36692 An integer specifying the baud rate of the tty.
36693
36694 @end table
36695 @end deftp
36696
36697 @node Miscellaneous Services
36698 @subsection Miscellaneous Services
36699
36700 @cindex fingerprint
36701 @subsubheading Fingerprint Service
36702
36703 The @code{(gnu services authentication)} module provides a DBus service to
36704 read and identify fingerprints via a fingerprint sensor.
36705
36706 @defvr {Scheme Variable} fprintd-service-type
36707 The service type for @command{fprintd}, which provides the fingerprint
36708 reading capability.
36709
36710 @lisp
36711 (service fprintd-service-type)
36712 @end lisp
36713 @end defvr
36714
36715 @cindex sysctl
36716 @subsubheading System Control Service
36717
36718 The @code{(gnu services sysctl)} provides a service to configure kernel
36719 parameters at boot.
36720
36721 @defvr {Scheme Variable} sysctl-service-type
36722 The service type for @command{sysctl}, which modifies kernel parameters
36723 under @file{/proc/sys/}. To enable IPv4 forwarding, it can be
36724 instantiated as:
36725
36726 @lisp
36727 (service sysctl-service-type
36728 (sysctl-configuration
36729 (settings '(("net.ipv4.ip_forward" . "1")))))
36730 @end lisp
36731
36732 Since @code{sysctl-service-type} is used in the default lists of
36733 services, @code{%base-services} and @code{%desktop-services}, you can
36734 use @code{modify-services} to change its configuration and add the
36735 kernel parameters that you want (@pxref{Service Reference,
36736 @code{modify-services}}).
36737
36738 @lisp
36739 (modify-services %base-services
36740 (sysctl-service-type config =>
36741 (sysctl-configuration
36742 (settings (append '(("net.ipv4.ip_forward" . "1"))
36743 %default-sysctl-settings)))))
36744 @end lisp
36745
36746 @end defvr
36747
36748 @deftp {Data Type} sysctl-configuration
36749 The data type representing the configuration of @command{sysctl}.
36750
36751 @table @asis
36752 @item @code{sysctl} (default: @code{(file-append procps "/sbin/sysctl"})
36753 The @command{sysctl} executable to use.
36754
36755 @item @code{settings} (default: @code{%default-sysctl-settings})
36756 An association list specifies kernel parameters and their values.
36757 @end table
36758 @end deftp
36759
36760 @defvr {Scheme Variable} %default-sysctl-settings
36761 An association list specifying the default @command{sysctl} parameters
36762 on Guix System.
36763 @end defvr
36764
36765 @cindex pcscd
36766 @subsubheading PC/SC Smart Card Daemon Service
36767
36768 The @code{(gnu services security-token)} module provides the following service
36769 to run @command{pcscd}, the PC/SC Smart Card Daemon. @command{pcscd} is the
36770 daemon program for pcsc-lite and the MuscleCard framework. It is a resource
36771 manager that coordinates communications with smart card readers, smart cards
36772 and cryptographic tokens that are connected to the system.
36773
36774 @defvr {Scheme Variable} pcscd-service-type
36775 Service type for the @command{pcscd} service. Its value must be a
36776 @code{pcscd-configuration} object. To run pcscd in the default
36777 configuration, instantiate it as:
36778
36779 @lisp
36780 (service pcscd-service-type)
36781 @end lisp
36782 @end defvr
36783
36784 @deftp {Data Type} pcscd-configuration
36785 The data type representing the configuration of @command{pcscd}.
36786
36787 @table @asis
36788 @item @code{pcsc-lite} (default: @code{pcsc-lite})
36789 The pcsc-lite package that provides pcscd.
36790 @item @code{usb-drivers} (default: @code{(list ccid)})
36791 List of packages that provide USB drivers to pcscd. Drivers are expected to be
36792 under @file{pcsc/drivers} in the store directory of the package.
36793 @end table
36794 @end deftp
36795
36796 @cindex lirc
36797 @subsubheading Lirc Service
36798
36799 The @code{(gnu services lirc)} module provides the following service.
36800
36801 @deffn {Scheme Procedure} lirc-service [#:lirc lirc] @
36802 [#:device #f] [#:driver #f] [#:config-file #f] @
36803 [#:extra-options '()]
36804 Return a service that runs @url{http://www.lirc.org,LIRC}, a daemon that
36805 decodes infrared signals from remote controls.
36806
36807 Optionally, @var{device}, @var{driver} and @var{config-file}
36808 (configuration file name) may be specified. See @command{lircd} manual
36809 for details.
36810
36811 Finally, @var{extra-options} is a list of additional command-line options
36812 passed to @command{lircd}.
36813 @end deffn
36814
36815 @cindex spice
36816 @subsubheading Spice Service
36817
36818 The @code{(gnu services spice)} module provides the following service.
36819
36820 @deffn {Scheme Procedure} spice-vdagent-service [#:spice-vdagent]
36821 Returns a service that runs @url{https://www.spice-space.org,VDAGENT}, a daemon
36822 that enables sharing the clipboard with a vm and setting the guest display
36823 resolution when the graphical console window resizes.
36824 @end deffn
36825
36826 @cindex inputattach
36827 @subsubheading inputattach Service
36828
36829 @cindex tablet input, for Xorg
36830 @cindex touchscreen input, for Xorg
36831 The @uref{https://linuxwacom.github.io/, inputattach} service allows you to
36832 use input devices such as Wacom tablets, touchscreens, or joysticks with the
36833 Xorg display server.
36834
36835 @deffn {Scheme Variable} inputattach-service-type
36836 Type of a service that runs @command{inputattach} on a device and
36837 dispatches events from it.
36838 @end deffn
36839
36840 @deftp {Data Type} inputattach-configuration
36841 @table @asis
36842 @item @code{device-type} (default: @code{"wacom"})
36843 The type of device to connect to. Run @command{inputattach --help}, from the
36844 @code{inputattach} package, to see the list of supported device types.
36845
36846 @item @code{device} (default: @code{"/dev/ttyS0"})
36847 The device file to connect to the device.
36848
36849 @item @code{baud-rate} (default: @code{#f})
36850 Baud rate to use for the serial connection.
36851 Should be a number or @code{#f}.
36852
36853 @item @code{log-file} (default: @code{#f})
36854 If true, this must be the name of a file to log messages to.
36855 @end table
36856 @end deftp
36857
36858 @subsubheading Dictionary Service
36859 @cindex dictionary
36860 The @code{(gnu services dict)} module provides the following service:
36861
36862 @defvr {Scheme Variable} dicod-service-type
36863 This is the type of the service that runs the @command{dicod} daemon, an
36864 implementation of DICT server (@pxref{Dicod,,, dico, GNU Dico Manual}).
36865 @end defvr
36866
36867 @deffn {Scheme Procedure} dicod-service [#:config (dicod-configuration)]
36868 Return a service that runs the @command{dicod} daemon, an implementation
36869 of DICT server (@pxref{Dicod,,, dico, GNU Dico Manual}).
36870
36871 The optional @var{config} argument specifies the configuration for
36872 @command{dicod}, which should be a @code{<dicod-configuration>} object, by
36873 default it serves the GNU Collaborative International Dictionary of English.
36874
36875 You can add @command{open localhost} to your @file{~/.dico} file to make
36876 @code{localhost} the default server for @command{dico} client
36877 (@pxref{Initialization File,,, dico, GNU Dico Manual}).
36878 @end deffn
36879
36880 @deftp {Data Type} dicod-configuration
36881 Data type representing the configuration of dicod.
36882
36883 @table @asis
36884 @item @code{dico} (default: @var{dico})
36885 Package object of the GNU Dico dictionary server.
36886
36887 @item @code{interfaces} (default: @var{'("localhost")})
36888 This is the list of IP addresses and ports and possibly socket file
36889 names to listen to (@pxref{Server Settings, @code{listen} directive,,
36890 dico, GNU Dico Manual}).
36891
36892 @item @code{handlers} (default: @var{'()})
36893 List of @code{<dicod-handler>} objects denoting handlers (module instances).
36894
36895 @item @code{databases} (default: @var{(list %dicod-database:gcide)})
36896 List of @code{<dicod-database>} objects denoting dictionaries to be served.
36897 @end table
36898 @end deftp
36899
36900 @deftp {Data Type} dicod-handler
36901 Data type representing a dictionary handler (module instance).
36902
36903 @table @asis
36904 @item @code{name}
36905 Name of the handler (module instance).
36906
36907 @item @code{module} (default: @var{#f})
36908 Name of the dicod module of the handler (instance). If it is @code{#f},
36909 the module has the same name as the handler.
36910 (@pxref{Modules,,, dico, GNU Dico Manual}).
36911
36912 @item @code{options}
36913 List of strings or gexps representing the arguments for the module handler
36914 @end table
36915 @end deftp
36916
36917 @deftp {Data Type} dicod-database
36918 Data type representing a dictionary database.
36919
36920 @table @asis
36921 @item @code{name}
36922 Name of the database, will be used in DICT commands.
36923
36924 @item @code{handler}
36925 Name of the dicod handler (module instance) used by this database
36926 (@pxref{Handlers,,, dico, GNU Dico Manual}).
36927
36928 @item @code{complex?} (default: @var{#f})
36929 Whether the database configuration complex. The complex configuration
36930 will need a corresponding @code{<dicod-handler>} object, otherwise not.
36931
36932 @item @code{options}
36933 List of strings or gexps representing the arguments for the database
36934 (@pxref{Databases,,, dico, GNU Dico Manual}).
36935 @end table
36936 @end deftp
36937
36938 @defvr {Scheme Variable} %dicod-database:gcide
36939 A @code{<dicod-database>} object serving the GNU Collaborative International
36940 Dictionary of English using the @code{gcide} package.
36941 @end defvr
36942
36943 The following is an example @code{dicod-service} configuration.
36944
36945 @lisp
36946 (dicod-service #:config
36947 (dicod-configuration
36948 (handlers (list (dicod-handler
36949 (name "wordnet")
36950 (module "dictorg")
36951 (options
36952 (list #~(string-append "dbdir=" #$wordnet))))))
36953 (databases (list (dicod-database
36954 (name "wordnet")
36955 (complex? #t)
36956 (handler "wordnet")
36957 (options '("database=wn")))
36958 %dicod-database:gcide))))
36959 @end lisp
36960
36961 @cindex Docker
36962 @subsubheading Docker Service
36963
36964 The @code{(gnu services docker)} module provides the following services.
36965
36966 @defvr {Scheme Variable} docker-service-type
36967
36968 This is the type of the service that runs @url{https://www.docker.com,Docker},
36969 a daemon that can execute application bundles (sometimes referred to as
36970 ``containers'') in isolated environments.
36971
36972 @end defvr
36973
36974 @deftp {Data Type} docker-configuration
36975 This is the data type representing the configuration of Docker and Containerd.
36976
36977 @table @asis
36978
36979 @item @code{docker} (default: @code{docker})
36980 The Docker daemon package to use.
36981
36982 @item @code{docker-cli} (default: @code{docker-cli})
36983 The Docker client package to use.
36984
36985 @item @code{containerd} (default: @var{containerd})
36986 The Containerd package to use.
36987
36988 @item @code{proxy} (default @var{docker-libnetwork-cmd-proxy})
36989 The Docker user-land networking proxy package to use.
36990
36991 @item @code{enable-proxy?} (default @code{#t})
36992 Enable or disable the use of the Docker user-land networking proxy.
36993
36994 @item @code{debug?} (default @code{#f})
36995 Enable or disable debug output.
36996
36997 @item @code{enable-iptables?} (default @code{#t})
36998 Enable or disable the addition of iptables rules.
36999
37000 @item @code{environment-variables} (default: @code{()})
37001 List of environment variables to set for @command{dockerd}.
37002
37003 This must be a list of strings where each string has the form
37004 @samp{@var{key}=@var{value}} as in this example:
37005
37006 @lisp
37007 (list "LANGUAGE=eo:ca:eu"
37008 "TMPDIR=/tmp/dockerd")
37009 @end lisp
37010
37011 @end table
37012 @end deftp
37013
37014 @cindex Singularity, container service
37015 @defvr {Scheme Variable} singularity-service-type
37016 This is the type of the service that allows you to run
37017 @url{https://www.sylabs.io/singularity/, Singularity}, a Docker-style tool to
37018 create and run application bundles (aka. ``containers''). The value for this
37019 service is the Singularity package to use.
37020
37021 The service does not install a daemon; instead, it installs helper programs as
37022 setuid-root (@pxref{Setuid Programs}) such that unprivileged users can invoke
37023 @command{singularity run} and similar commands.
37024 @end defvr
37025
37026 @cindex Audit
37027 @subsubheading Auditd Service
37028
37029 The @code{(gnu services auditd)} module provides the following service.
37030
37031 @defvr {Scheme Variable} auditd-service-type
37032
37033 This is the type of the service that runs
37034 @url{https://people.redhat.com/sgrubb/audit/,auditd},
37035 a daemon that tracks security-relevant information on your system.
37036
37037 Examples of things that can be tracked:
37038
37039 @enumerate
37040 @item
37041 File accesses
37042 @item
37043 System calls
37044 @item
37045 Invoked commands
37046 @item
37047 Failed login attempts
37048 @item
37049 Firewall filtering
37050 @item
37051 Network access
37052 @end enumerate
37053
37054 @command{auditctl} from the @code{audit} package can be used in order
37055 to add or remove events to be tracked (until the next reboot).
37056 In order to permanently track events, put the command line arguments
37057 of auditctl into a file called @code{audit.rules} in the configuration
37058 directory (see below).
37059 @command{aureport} from the @code{audit} package can be used in order
37060 to view a report of all recorded events.
37061 The audit daemon by default logs into the file
37062 @file{/var/log/audit.log}.
37063
37064 @end defvr
37065
37066 @deftp {Data Type} auditd-configuration
37067 This is the data type representing the configuration of auditd.
37068
37069 @table @asis
37070
37071 @item @code{audit} (default: @code{audit})
37072 The audit package to use.
37073
37074 @item @code{configuration-directory} (default: @code{%default-auditd-configuration-directory})
37075 The directory containing the configuration file for the audit package, which
37076 must be named @code{auditd.conf}, and optionally some audit rules to
37077 instantiate on startup.
37078
37079 @end table
37080 @end deftp
37081
37082 @cindex rshiny
37083 @subsubheading R-Shiny service
37084
37085 The @code{(gnu services science)} module provides the following service.
37086
37087 @defvr {Scheme Variable} rshiny-service-type
37088
37089 This is a type of service which is used to run a webapp created with
37090 @code{r-shiny}. This service sets the @env{R_LIBS_USER} environment
37091 variable and runs the provided script to call @code{runApp}.
37092
37093 @deftp {Data Type} rshiny-configuration
37094 This is the data type representing the configuration of rshiny.
37095
37096 @table @asis
37097
37098 @item @code{package} (default: @code{r-shiny})
37099 The package to use.
37100
37101 @item @code{binary} (default @code{"rshiny"})
37102 The name of the binary or shell script located at @code{package/bin/} to
37103 run when the service is run.
37104
37105 The common way to create this file is as follows:
37106
37107 @lisp
37108 @dots{}
37109 (let* ((out (assoc-ref %outputs "out"))
37110 (targetdir (string-append out "/share/" ,name))
37111 (app (string-append out "/bin/" ,name))
37112 (Rbin (search-input-file %build-inputs "/bin/Rscript")))
37113 ;; @dots{}
37114 (mkdir-p (string-append out "/bin"))
37115 (call-with-output-file app
37116 (lambda (port)
37117 (format port
37118 "#!~a
37119 library(shiny)
37120 setwd(\"~a\")
37121 runApp(launch.browser=0, port=4202)~%\n"
37122 Rbin targetdir))))
37123 @end lisp
37124
37125 @end table
37126 @end deftp
37127 @end defvr
37128
37129 @cindex Nix
37130 @subsubheading Nix service
37131
37132 The @code{(gnu services nix)} module provides the following service.
37133
37134 @defvr {Scheme Variable} nix-service-type
37135
37136 This is the type of the service that runs build daemon of the
37137 @url{https://nixos.org/nix/, Nix} package manager. Here is an example showing
37138 how to use it:
37139
37140 @lisp
37141 (use-modules (gnu))
37142 (use-service-modules nix)
37143 (use-package-modules package-management)
37144
37145 (operating-system
37146 ;; @dots{}
37147 (packages (append (list nix)
37148 %base-packages))
37149
37150 (services (append (list (service nix-service-type))
37151 %base-services)))
37152 @end lisp
37153
37154 After @command{guix system reconfigure} configure Nix for your user:
37155
37156 @itemize
37157 @item Add a Nix channel and update it. See
37158 @url{https://nixos.org/nix/manual/, Nix Package Manager Guide}.
37159
37160 @item Create a symlink to your profile and activate Nix profile:
37161 @end itemize
37162
37163 @example
37164 $ ln -s "/nix/var/nix/profiles/per-user/$USER/profile" ~/.nix-profile
37165 $ source /run/current-system/profile/etc/profile.d/nix.sh
37166 @end example
37167
37168 @end defvr
37169
37170 @deftp {Data Type} nix-configuration
37171 This data type represents the configuration of the Nix daemon.
37172
37173 @table @asis
37174 @item @code{nix} (default: @code{nix})
37175 The Nix package to use.
37176
37177 @item @code{sandbox} (default: @code{#t})
37178 Specifies whether builds are sandboxed by default.
37179
37180 @item @code{build-sandbox-items} (default: @code{'()})
37181 This is a list of strings or objects appended to the
37182 @code{build-sandbox-items} field of the configuration file.
37183
37184 @item @code{extra-config} (default: @code{'()})
37185 This is a list of strings or objects appended to the configuration file.
37186 It is used to pass extra text to be added verbatim to the configuration
37187 file.
37188
37189 @item @code{extra-options} (default: @code{'()})
37190 Extra command line options for @code{nix-service-type}.
37191 @end table
37192 @end deftp
37193
37194 @cindex Fail2Ban
37195 @subsubheading Fail2Ban service
37196
37197 @uref{http://www.fail2ban.org/, @code{fail2ban}} scans log files
37198 (e.g. @code{/var/log/apache/error_log}) and bans IP addresses that show
37199 malicious signs -- repeated password failures, attempts to make use of
37200 exploits, etc.
37201
37202 @code{fail2ban-service-type} service type is provided by the @code{(gnu
37203 services security)} module.
37204
37205 This service type runs the @code{fail2ban} daemon. It can be configured
37206 in various ways, which are:
37207
37208 @table @asis
37209 @item Basic configuration
37210 The basic parameters of the Fail2Ban service can be configured via its
37211 @code{fail2ban} configuration, which is documented below.
37212
37213 @item User-specified jail extensions
37214 The @code{fail2ban-jail-service} function can be used to add new
37215 Fail2Ban jails.
37216
37217 @item Shepherd extension mechanism
37218 Service developers can extend the @code{fail2ban-service-type} service
37219 type itself via the usual service extension mechanism.
37220 @end table
37221
37222 @defvr {Scheme Variable} fail2ban-service-type
37223
37224 This is the type of the service that runs @code{fail2ban} daemon. Below
37225 is an example of a basic, explicit configuration:
37226
37227 @lisp
37228 (append
37229 (list
37230 (service fail2ban-service-type
37231 (fail2ban-configuration
37232 (extra-jails
37233 (list
37234 (fail2ban-jail-configuration
37235 (name "sshd")
37236 (enabled? #t))))))
37237 ;; There is no implicit dependency on an actual SSH
37238 ;; service, so you need to provide one.
37239 (service openssh-service-type))
37240 %base-services)
37241 @end lisp
37242 @end defvr
37243
37244 @deffn {Scheme Procedure} fail2ban-jail-service @var{svc-type} @var{jail}
37245 Extend @var{svc-type}, a @code{<service-type>} object with @var{jail}, a
37246 @code{fail2ban-jail-configuration} object.
37247
37248 For example:
37249
37250 @lisp
37251 (append
37252 (list
37253 (service
37254 ;; The 'fail2ban-jail-service' procedure can extend any service type
37255 ;; with a fail2ban jail. This removes the requirement to explicitly
37256 ;; extend services with fail2ban-service-type.
37257 (fail2ban-jail-service
37258 openssh-service-type
37259 (fail2ban-jail-configuration
37260 (name "sshd")
37261 (enabled? #t)))
37262 (openssh-configuration ...))))
37263 @end lisp
37264 @end deffn
37265
37266 Below is the reference for the different @code{jail-service-type}
37267 configuration records.
37268
37269 @c The documentation is to be auto-generated via
37270 @c 'generate-documentation'. See at the bottom of (gnu services
37271 @c security).
37272
37273 @deftp {Data Type} fail2ban-configuration
37274 Available @code{fail2ban-configuration} fields are:
37275
37276 @table @asis
37277 @item @code{fail2ban} (default: @code{fail2ban}) (type: package)
37278 The @code{fail2ban} package to use. It is used for both binaries and as
37279 base default configuration that is to be extended with
37280 @code{<fail2ban-jail-configuration>} objects.
37281
37282 @item @code{run-directory} (default: @code{"/var/run/fail2ban"}) (type: string)
37283 The state directory for the @code{fail2ban} daemon.
37284
37285 @item @code{jails} (default: @code{()}) (type: list-of-fail2ban-jail-configurations)
37286 Instances of @code{<fail2ban-jail-configuration>} collected from
37287 extensions.
37288
37289 @item @code{extra-jails} (default: @code{()}) (type: list-of-fail2ban-jail-configurations)
37290 Instances of @code{<fail2ban-jail-configuration>} explicitly provided.
37291
37292 @item @code{extra-content} (default: @code{()}) (type: text-config)
37293 Extra raw content to add to the end of the @file{jail.local} file,
37294 provided as a list of file-like objects.
37295
37296 @end table
37297
37298 @end deftp
37299
37300 @deftp {Data Type} fail2ban-ignore-cache-configuration
37301 Available @code{fail2ban-ignore-cache-configuration} fields are:
37302
37303 @table @asis
37304 @item @code{key} (type: string)
37305 Cache key.
37306
37307 @item @code{max-count} (type: integer)
37308 Cache size.
37309
37310 @item @code{max-time} (type: integer)
37311 Cache time.
37312
37313 @end table
37314
37315 @end deftp
37316
37317 @deftp {Data Type} fail2ban-jail-action-configuration
37318 Available @code{fail2ban-jail-action-configuration} fields are:
37319
37320 @table @asis
37321 @item @code{name} (type: string)
37322 Action name.
37323
37324 @item @code{arguments} (default: @code{()}) (type: list-of-arguments)
37325 Action arguments.
37326
37327 @end table
37328
37329 @end deftp
37330
37331 @deftp {Data Type} fail2ban-jail-configuration
37332 Available @code{fail2ban-jail-configuration} fields are:
37333
37334 @table @asis
37335 @item @code{name} (type: string)
37336 Required name of this jail configuration.
37337
37338 @item @code{enabled?} (default: @code{#t}) (type: boolean)
37339 Whether this jail is enabled.
37340
37341 @item @code{backend} (type: maybe-symbol)
37342 Backend to use to detect changes in the @code{log-path}. The default is
37343 'auto. To consult the defaults of the jail configuration, refer to the
37344 @file{/etc/fail2ban/jail.conf} file of the @code{fail2ban} package.
37345
37346 @item @code{max-retry} (type: maybe-integer)
37347 The number of failures before a host get banned (e.g. @code{(max-retry
37348 5)}).
37349
37350 @item @code{max-matches} (type: maybe-integer)
37351 The number of matches stored in ticket (resolvable via tag
37352 @code{<matches>}) in action.
37353
37354 @item @code{find-time} (type: maybe-string)
37355 The time window during which the maximum retry count must be reached for
37356 an IP address to be banned. A host is banned if it has generated
37357 @code{max-retry} during the last @code{find-time} seconds (e.g.
37358 @code{(find-time "10m")}). It can be provided in seconds or using
37359 Fail2Ban's "time abbreviation format", as described in @command{man 5
37360 jail.conf}.
37361
37362 @item @code{ban-time} (type: maybe-string)
37363 The duration, in seconds or time abbreviated format, that a ban should
37364 last. (e.g. @code{(ban-time "10m")}).
37365
37366 @item @code{ban-time-increment?} (type: maybe-boolean)
37367 Whether to consider past bans to compute increases to the default ban
37368 time of a specific IP address.
37369
37370 @item @code{ban-time-factor} (type: maybe-string)
37371 The coefficient to use to compute an exponentially growing ban time.
37372
37373 @item @code{ban-time-formula} (type: maybe-string)
37374 This is the formula used to calculate the next value of a ban time.
37375
37376 @item @code{ban-time-multipliers} (type: maybe-string)
37377 Used to calculate next value of ban time instead of formula.
37378
37379 @item @code{ban-time-max-time} (type: maybe-string)
37380 The maximum number of seconds a ban should last.
37381
37382 @item @code{ban-time-rnd-time} (type: maybe-string)
37383 The maximum number of seconds a randomized ban time should last. This
37384 can be useful to stop ``clever'' botnets calculating the exact time an
37385 IP address can be unbanned again.
37386
37387 @item @code{ban-time-overall-jails?} (type: maybe-boolean)
37388 When true, it specifies the search of an IP address in the database
37389 should be made across all jails. Otherwise, only the current jail of
37390 the ban IP address is considered.
37391
37392 @item @code{ignore-self?} (type: maybe-boolean)
37393 Never ban the local machine's own IP address.
37394
37395 @item @code{ignore-ip} (default: @code{()}) (type: list-of-strings)
37396 A list of IP addresses, CIDR masks or DNS hosts to ignore.
37397 @code{fail2ban} will not ban a host which matches an address in this
37398 list.
37399
37400 @item @code{ignore-cache} (type: maybe-fail2ban-ignore-cache-configuration)
37401 Provide cache parameters for the ignore failure check.
37402
37403 @item @code{filter} (type: maybe-fail2ban-jail-filter-configuration)
37404 The filter to use by the jail, specified via a
37405 @code{<fail2ban-jail-filter-configuration>} object. By default, jails
37406 have names matching their filter name.
37407
37408 @item @code{log-time-zone} (type: maybe-string)
37409 The default time zone for log lines that do not have one.
37410
37411 @item @code{log-encoding} (type: maybe-symbol)
37412 The encoding of the log files handled by the jail. Possible values are:
37413 @code{'ascii}, @code{'utf-8} and @code{'auto}.
37414
37415 @item @code{log-path} (default: @code{()}) (type: list-of-strings)
37416 The file names of the log files to be monitored.
37417
37418 @item @code{action} (default: @code{()}) (type: list-of-fail2ban-jail-actions)
37419 A list of @code{<fail2ban-jail-action-configuration>}.
37420
37421 @item @code{extra-content} (default: @code{()}) (type: text-config)
37422 Extra content for the jail configuration, provided as a list of file-like
37423 objects.
37424
37425 @end table
37426
37427 @end deftp
37428
37429 @deftp {Data Type} fail2ban-jail-filter-configuration
37430 Available @code{fail2ban-jail-filter-configuration} fields are:
37431
37432 @table @asis
37433 @item @code{name} (type: string)
37434 Filter to use.
37435
37436 @item @code{mode} (type: maybe-string)
37437 Mode for filter.
37438
37439 @end table
37440
37441 @end deftp
37442
37443 @c End of auto-generated fail2ban documentation.
37444
37445 @node Setuid Programs
37446 @section Setuid Programs
37447
37448 @cindex setuid programs
37449 @cindex setgid programs
37450 Some programs need to run with elevated privileges, even when they are
37451 launched by unprivileged users. A notorious example is the
37452 @command{passwd} program, which users can run to change their
37453 password, and which needs to access the @file{/etc/passwd} and
37454 @file{/etc/shadow} files---something normally restricted to root, for
37455 obvious security reasons. To address that, @command{passwd} should be
37456 @dfn{setuid-root}, meaning that it always runs with root privileges
37457 (@pxref{How Change Persona,,, libc, The GNU C Library Reference Manual},
37458 for more info about the setuid mechanism).
37459
37460 The store itself @emph{cannot} contain setuid programs: that would be a
37461 security issue since any user on the system can write derivations that
37462 populate the store (@pxref{The Store}). Thus, a different mechanism is
37463 used: instead of changing the setuid or setgid bits directly on files that
37464 are in the store, we let the system administrator @emph{declare} which
37465 programs should be entrusted with these additional privileges.
37466
37467 The @code{setuid-programs} field of an @code{operating-system}
37468 declaration contains a list of @code{<setuid-program>} denoting the
37469 names of programs to have a setuid or setgid bit set (@pxref{Using the
37470 Configuration System}). For instance, the @command{mount.nfs} program,
37471 which is part of the nfs-utils package, with a setuid root can be
37472 designated like this:
37473
37474 @lisp
37475 (setuid-program
37476 (program (file-append nfs-utils "/sbin/mount.nfs")))
37477 @end lisp
37478
37479 And then, to make @command{mount.nfs} setuid on your system, add the
37480 previous example to your operating system declaration by appending it to
37481 @code{%setuid-programs} like this:
37482
37483 @lisp
37484 (operating-system
37485 ;; Some fields omitted...
37486 (setuid-programs
37487 (append (list (setuid-program
37488 (program (file-append nfs-utils "/sbin/mount.nfs"))))
37489 %setuid-programs)))
37490 @end lisp
37491
37492 @deftp {Data Type} setuid-program
37493 This data type represents a program with a setuid or setgid bit set.
37494
37495 @table @asis
37496 @item @code{program}
37497 A file-like object having its setuid and/or setgid bit set.
37498
37499 @item @code{setuid?} (default: @code{#t})
37500 Whether to set user setuid bit.
37501
37502 @item @code{setgid?} (default: @code{#f})
37503 Whether to set group setgid bit.
37504
37505 @item @code{user} (default: @code{0})
37506 UID (integer) or user name (string) for the user owner of the program,
37507 defaults to root.
37508
37509 @item @code{group} (default: @code{0})
37510 GID (integer) goup name (string) for the group owner of the program,
37511 defaults to root.
37512
37513 @end table
37514 @end deftp
37515
37516 A default set of setuid programs is defined by the
37517 @code{%setuid-programs} variable of the @code{(gnu system)} module.
37518
37519 @defvr {Scheme Variable} %setuid-programs
37520 A list of @code{<setuid-program>} denoting common programs that are
37521 setuid-root.
37522
37523 The list includes commands such as @command{passwd}, @command{ping},
37524 @command{su}, and @command{sudo}.
37525 @end defvr
37526
37527 Under the hood, the actual setuid programs are created in the
37528 @file{/run/setuid-programs} directory at system activation time. The
37529 files in this directory refer to the ``real'' binaries, which are in the
37530 store.
37531
37532 @node X.509 Certificates
37533 @section X.509 Certificates
37534
37535 @cindex HTTPS, certificates
37536 @cindex X.509 certificates
37537 @cindex TLS
37538 Web servers available over HTTPS (that is, HTTP over the transport-layer
37539 security mechanism, TLS) send client programs an @dfn{X.509 certificate}
37540 that the client can then use to @emph{authenticate} the server. To do
37541 that, clients verify that the server's certificate is signed by a
37542 so-called @dfn{certificate authority} (CA). But to verify the CA's
37543 signature, clients must have first acquired the CA's certificate.
37544
37545 Web browsers such as GNU@tie{}IceCat include their own set of CA
37546 certificates, such that they are able to verify CA signatures
37547 out-of-the-box.
37548
37549 However, most other programs that can talk HTTPS---@command{wget},
37550 @command{git}, @command{w3m}, etc.---need to be told where CA
37551 certificates can be found.
37552
37553 @cindex @code{nss-certs}
37554 In Guix, this is done by adding a package that provides certificates
37555 to the @code{packages} field of the @code{operating-system} declaration
37556 (@pxref{operating-system Reference}). Guix includes one such package,
37557 @code{nss-certs}, which is a set of CA certificates provided as part of
37558 Mozilla's Network Security Services.
37559
37560 Note that it is @emph{not} part of @code{%base-packages}, so you need to
37561 explicitly add it. The @file{/etc/ssl/certs} directory, which is where
37562 most applications and libraries look for certificates by default, points
37563 to the certificates installed globally.
37564
37565 Unprivileged users, including users of Guix on a foreign distro,
37566 can also install their own certificate package in
37567 their profile. A number of environment variables need to be defined so
37568 that applications and libraries know where to find them. Namely, the
37569 OpenSSL library honors the @env{SSL_CERT_DIR} and @env{SSL_CERT_FILE}
37570 variables. Some applications add their own environment variables; for
37571 instance, the Git version control system honors the certificate bundle
37572 pointed to by the @env{GIT_SSL_CAINFO} environment variable. Thus, you
37573 would typically run something like:
37574
37575 @example
37576 guix install nss-certs
37577 export SSL_CERT_DIR="$HOME/.guix-profile/etc/ssl/certs"
37578 export SSL_CERT_FILE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
37579 export GIT_SSL_CAINFO="$SSL_CERT_FILE"
37580 @end example
37581
37582 As another example, R requires the @env{CURL_CA_BUNDLE} environment
37583 variable to point to a certificate bundle, so you would have to run
37584 something like this:
37585
37586 @example
37587 guix install nss-certs
37588 export CURL_CA_BUNDLE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
37589 @end example
37590
37591 For other applications you may want to look up the required environment
37592 variable in the relevant documentation.
37593
37594
37595 @node Name Service Switch
37596 @section Name Service Switch
37597
37598 @cindex name service switch
37599 @cindex NSS
37600 The @code{(gnu system nss)} module provides bindings to the
37601 configuration file of the libc @dfn{name service switch} or @dfn{NSS}
37602 (@pxref{NSS Configuration File,,, libc, The GNU C Library Reference
37603 Manual}). In a nutshell, the NSS is a mechanism that allows libc to be
37604 extended with new ``name'' lookup methods for system databases, which
37605 includes host names, service names, user accounts, and more (@pxref{Name
37606 Service Switch, System Databases and Name Service Switch,, libc, The GNU
37607 C Library Reference Manual}).
37608
37609 The NSS configuration specifies, for each system database, which lookup
37610 method is to be used, and how the various methods are chained
37611 together---for instance, under which circumstances NSS should try the
37612 next method in the list. The NSS configuration is given in the
37613 @code{name-service-switch} field of @code{operating-system} declarations
37614 (@pxref{operating-system Reference, @code{name-service-switch}}).
37615
37616 @cindex nss-mdns
37617 @cindex .local, host name lookup
37618 As an example, the declaration below configures the NSS to use the
37619 @uref{https://0pointer.de/lennart/projects/nss-mdns/, @code{nss-mdns}
37620 back-end}, which supports host name lookups over multicast DNS (mDNS)
37621 for host names ending in @code{.local}:
37622
37623 @lisp
37624 (name-service-switch
37625 (hosts (list %files ;first, check /etc/hosts
37626
37627 ;; If the above did not succeed, try
37628 ;; with 'mdns_minimal'.
37629 (name-service
37630 (name "mdns_minimal")
37631
37632 ;; 'mdns_minimal' is authoritative for
37633 ;; '.local'. When it returns "not found",
37634 ;; no need to try the next methods.
37635 (reaction (lookup-specification
37636 (not-found => return))))
37637
37638 ;; Then fall back to DNS.
37639 (name-service
37640 (name "dns"))
37641
37642 ;; Finally, try with the "full" 'mdns'.
37643 (name-service
37644 (name "mdns")))))
37645 @end lisp
37646
37647 Do not worry: the @code{%mdns-host-lookup-nss} variable (see below)
37648 contains this configuration, so you will not have to type it if all you
37649 want is to have @code{.local} host lookup working.
37650
37651 Note that, in this case, in addition to setting the
37652 @code{name-service-switch} of the @code{operating-system} declaration,
37653 you also need to use @code{avahi-service-type} (@pxref{Networking Services,
37654 @code{avahi-service-type}}), or @code{%desktop-services}, which includes it
37655 (@pxref{Desktop Services}). Doing this makes @code{nss-mdns} accessible
37656 to the name service cache daemon (@pxref{Base Services,
37657 @code{nscd-service}}).
37658
37659 For convenience, the following variables provide typical NSS
37660 configurations.
37661
37662 @defvr {Scheme Variable} %default-nss
37663 This is the default name service switch configuration, a
37664 @code{name-service-switch} object.
37665 @end defvr
37666
37667 @defvr {Scheme Variable} %mdns-host-lookup-nss
37668 This is the name service switch configuration with support for host name
37669 lookup over multicast DNS (mDNS) for host names ending in @code{.local}.
37670 @end defvr
37671
37672 The reference for name service switch configuration is given below. It
37673 is a direct mapping of the configuration file format of the C library , so
37674 please refer to the C library manual for more information (@pxref{NSS
37675 Configuration File,,, libc, The GNU C Library Reference Manual}).
37676 Compared to the configuration file format of libc NSS, it has the advantage
37677 not only of adding this warm parenthetic feel that we like, but also
37678 static checks: you will know about syntax errors and typos as soon as you
37679 run @command{guix system}.
37680
37681 @deftp {Data Type} name-service-switch
37682
37683 This is the data type representation the configuration of libc's name
37684 service switch (NSS). Each field below represents one of the supported
37685 system databases.
37686
37687 @table @code
37688 @item aliases
37689 @itemx ethers
37690 @itemx group
37691 @itemx gshadow
37692 @itemx hosts
37693 @itemx initgroups
37694 @itemx netgroup
37695 @itemx networks
37696 @itemx password
37697 @itemx public-key
37698 @itemx rpc
37699 @itemx services
37700 @itemx shadow
37701 The system databases handled by the NSS@. Each of these fields must be a
37702 list of @code{<name-service>} objects (see below).
37703 @end table
37704 @end deftp
37705
37706 @deftp {Data Type} name-service
37707
37708 This is the data type representing an actual name service and the
37709 associated lookup action.
37710
37711 @table @code
37712 @item name
37713 A string denoting the name service (@pxref{Services in the NSS
37714 configuration,,, libc, The GNU C Library Reference Manual}).
37715
37716 Note that name services listed here must be visible to nscd. This is
37717 achieved by passing the @code{#:name-services} argument to
37718 @code{nscd-service} the list of packages providing the needed name
37719 services (@pxref{Base Services, @code{nscd-service}}).
37720
37721 @item reaction
37722 An action specified using the @code{lookup-specification} macro
37723 (@pxref{Actions in the NSS configuration,,, libc, The GNU C Library
37724 Reference Manual}). For example:
37725
37726 @lisp
37727 (lookup-specification (unavailable => continue)
37728 (success => return))
37729 @end lisp
37730 @end table
37731 @end deftp
37732
37733 @node Initial RAM Disk
37734 @section Initial RAM Disk
37735
37736 @cindex initrd
37737 @cindex initial RAM disk
37738 For bootstrapping purposes, the Linux-Libre kernel is passed an
37739 @dfn{initial RAM disk}, or @dfn{initrd}. An initrd contains a temporary
37740 root file system as well as an initialization script. The latter is
37741 responsible for mounting the real root file system, and for loading any
37742 kernel modules that may be needed to achieve that.
37743
37744 The @code{initrd-modules} field of an @code{operating-system}
37745 declaration allows you to specify Linux-libre kernel modules that must
37746 be available in the initrd. In particular, this is where you would list
37747 modules needed to actually drive the hard disk where your root partition
37748 is---although the default value of @code{initrd-modules} should cover
37749 most use cases. For example, assuming you need the @code{megaraid_sas}
37750 module in addition to the default modules to be able to access your root
37751 file system, you would write:
37752
37753 @lisp
37754 (operating-system
37755 ;; @dots{}
37756 (initrd-modules (cons "megaraid_sas" %base-initrd-modules)))
37757 @end lisp
37758
37759 @defvr {Scheme Variable} %base-initrd-modules
37760 This is the list of kernel modules included in the initrd by default.
37761 @end defvr
37762
37763 Furthermore, if you need lower-level customization, the @code{initrd}
37764 field of an @code{operating-system} declaration allows
37765 you to specify which initrd you would like to use. The @code{(gnu
37766 system linux-initrd)} module provides three ways to build an initrd: the
37767 high-level @code{base-initrd} procedure and the low-level
37768 @code{raw-initrd} and @code{expression->initrd} procedures.
37769
37770 The @code{base-initrd} procedure is intended to cover most common uses.
37771 For example, if you want to add a bunch of kernel modules to be loaded
37772 at boot time, you can define the @code{initrd} field of the operating
37773 system declaration like this:
37774
37775 @lisp
37776 (initrd (lambda (file-systems . rest)
37777 ;; Create a standard initrd but set up networking
37778 ;; with the parameters QEMU expects by default.
37779 (apply base-initrd file-systems
37780 #:qemu-networking? #t
37781 rest)))
37782 @end lisp
37783
37784 The @code{base-initrd} procedure also handles common use cases that
37785 involves using the system as a QEMU guest, or as a ``live'' system with
37786 volatile root file system.
37787
37788 The @code{base-initrd} procedure is built from @code{raw-initrd} procedure.
37789 Unlike @code{base-initrd}, @code{raw-initrd} doesn't do anything high-level,
37790 such as trying to guess which kernel modules and packages should be included
37791 to the initrd. An example use of @code{raw-initrd} is when a user has
37792 a custom Linux kernel configuration and default kernel modules included by
37793 @code{base-initrd} are not available.
37794
37795 The initial RAM disk produced by @code{base-initrd} or @code{raw-initrd}
37796 honors several options passed on the Linux kernel command line
37797 (that is, arguments passed @i{via} the @code{linux} command of GRUB, or the
37798 @code{-append} option of QEMU), notably:
37799
37800 @table @code
37801 @item gnu.load=@var{boot}
37802 Tell the initial RAM disk to load @var{boot}, a file containing a Scheme
37803 program, once it has mounted the root file system.
37804
37805 Guix uses this option to yield control to a boot program that runs the
37806 service activation programs and then spawns the GNU@tie{}Shepherd, the
37807 initialization system.
37808
37809 @item root=@var{root}
37810 Mount @var{root} as the root file system. @var{root} can be a device
37811 name like @code{/dev/sda1}, a file system label, or a file system UUID.
37812 When unspecified, the device name from the root file system of the
37813 operating system declaration is used.
37814
37815 @item rootfstype=@var{type}
37816 Set the type of the root file system. It overrides the @code{type}
37817 field of the root file system specified via the @code{operating-system}
37818 declaration, if any.
37819
37820 @item rootflags=@var{options}
37821 Set the mount @emph{options} of the root file system. It overrides the
37822 @code{options} field of the root file system specified via the
37823 @code{operating-system} declaration, if any.
37824
37825 @item fsck.mode=@var{mode}
37826 Whether to check the @var{root} file system for errors before mounting
37827 it. @var{mode} is one of @code{skip} (never check), @code{force} (always
37828 check), or @code{auto} to respect the root @code{<file-system>} object's
37829 @code{check?} setting (@pxref{File Systems}) and run a full scan only if
37830 the file system was not cleanly shut down.
37831
37832 @code{auto} is the default if this option is not present or if @var{mode}
37833 is not one of the above.
37834
37835 @item fsck.repair=@var{level}
37836 The level of repairs to perform automatically if errors are found in the
37837 @var{root} file system. @var{level} is one of @code{no} (do not write to
37838 @var{root} at all if possible), @code{yes} (repair as much as possible),
37839 or @code{preen} to repair problems considered safe to repair automatically.
37840
37841 @code{preen} is the default if this option is not present or if @var{level}
37842 is not one of the above.
37843
37844 @item gnu.system=@var{system}
37845 Have @file{/run/booted-system} and @file{/run/current-system} point to
37846 @var{system}.
37847
37848 @item modprobe.blacklist=@var{modules}@dots{}
37849 @cindex module, black-listing
37850 @cindex black list, of kernel modules
37851 Instruct the initial RAM disk as well as the @command{modprobe} command
37852 (from the kmod package) to refuse to load @var{modules}. @var{modules}
37853 must be a comma-separated list of module names---e.g.,
37854 @code{usbkbd,9pnet}.
37855
37856 @item gnu.repl
37857 Start a read-eval-print loop (REPL) from the initial RAM disk before it
37858 tries to load kernel modules and to mount the root file system. Our
37859 marketing team calls it @dfn{boot-to-Guile}. The Schemer in you will
37860 love it. @xref{Using Guile Interactively,,, guile, GNU Guile Reference
37861 Manual}, for more information on Guile's REPL.
37862
37863 @end table
37864
37865 Now that you know all the features that initial RAM disks produced by
37866 @code{base-initrd} and @code{raw-initrd} provide,
37867 here is how to use it and customize it further.
37868
37869 @cindex initrd
37870 @cindex initial RAM disk
37871 @deffn {Scheme Procedure} raw-initrd @var{file-systems} @
37872 [#:linux-modules '()] [#:pre-mount #t] [#:mapped-devices '()] @
37873 [#:keyboard-layout #f] [#:helper-packages '()] @
37874 [#:qemu-networking? #f] [#:volatile-root? #f]
37875 Return a derivation that builds a raw initrd. @var{file-systems} is
37876 a list of file systems to be mounted by the initrd, possibly in addition to
37877 the root file system specified on the kernel command line via @option{root}.
37878 @var{linux-modules} is a list of kernel modules to be loaded at boot time.
37879 @var{mapped-devices} is a list of device mappings to realize before
37880 @var{file-systems} are mounted (@pxref{Mapped Devices}).
37881 @var{pre-mount} is a G-expression to evaluate before realizing
37882 @var{mapped-devices}.
37883 @var{helper-packages} is a list of packages to be copied in the initrd.
37884 It may
37885 include @code{e2fsck/static} or other packages needed by the initrd to check
37886 the root file system.
37887
37888 When true, @var{keyboard-layout} is a @code{<keyboard-layout>} record denoting
37889 the desired console keyboard layout. This is done before @var{mapped-devices}
37890 are set up and before @var{file-systems} are mounted such that, should the
37891 user need to enter a passphrase or use the REPL, this happens using the
37892 intended keyboard layout.
37893
37894 When @var{qemu-networking?} is true, set up networking with the standard QEMU
37895 parameters. When @var{virtio?} is true, load additional modules so that the
37896 initrd can be used as a QEMU guest with para-virtualized I/O drivers.
37897
37898 When @var{volatile-root?} is true, the root file system is writable but any changes
37899 to it are lost.
37900 @end deffn
37901
37902 @deffn {Scheme Procedure} base-initrd @var{file-systems} @
37903 [#:mapped-devices '()] [#:keyboard-layout #f] @
37904 [#:qemu-networking? #f] [#:volatile-root? #f] @
37905 [#:linux-modules '()]
37906 Return as a file-like object a generic initrd, with kernel
37907 modules taken from @var{linux}. @var{file-systems} is a list of file-systems to be
37908 mounted by the initrd, possibly in addition to the root file system specified
37909 on the kernel command line via @option{root}. @var{mapped-devices} is a list of device
37910 mappings to realize before @var{file-systems} are mounted.
37911
37912 When true, @var{keyboard-layout} is a @code{<keyboard-layout>} record denoting
37913 the desired console keyboard layout. This is done before @var{mapped-devices}
37914 are set up and before @var{file-systems} are mounted such that, should the
37915 user need to enter a passphrase or use the REPL, this happens using the
37916 intended keyboard layout.
37917
37918 @var{qemu-networking?} and @var{volatile-root?} behaves as in @code{raw-initrd}.
37919
37920 The initrd is automatically populated with all the kernel modules necessary
37921 for @var{file-systems} and for the given options. Additional kernel
37922 modules can be listed in @var{linux-modules}. They will be added to the initrd, and
37923 loaded at boot time in the order in which they appear.
37924 @end deffn
37925
37926 Needless to say, the initrds we produce and use embed a
37927 statically-linked Guile, and the initialization program is a Guile
37928 program. That gives a lot of flexibility. The
37929 @code{expression->initrd} procedure builds such an initrd, given the
37930 program to run in that initrd.
37931
37932 @deffn {Scheme Procedure} expression->initrd @var{exp} @
37933 [#:guile %guile-static-stripped] [#:name "guile-initrd"]
37934 Return as a file-like object a Linux initrd (a gzipped cpio archive)
37935 containing @var{guile} and that evaluates @var{exp}, a G-expression,
37936 upon booting. All the derivations referenced by @var{exp} are
37937 automatically copied to the initrd.
37938 @end deffn
37939
37940 @node Bootloader Configuration
37941 @section Bootloader Configuration
37942
37943 @cindex bootloader
37944 @cindex boot loader
37945
37946 The operating system supports multiple bootloaders. The bootloader is
37947 configured using @code{bootloader-configuration} declaration. All the
37948 fields of this structure are bootloader agnostic except for one field,
37949 @code{bootloader} that indicates the bootloader to be configured and
37950 installed.
37951
37952 Some of the bootloaders do not honor every field of
37953 @code{bootloader-configuration}. For instance, the extlinux
37954 bootloader does not support themes and thus ignores the @code{theme}
37955 field.
37956
37957 @deftp {Data Type} bootloader-configuration
37958 The type of a bootloader configuration declaration.
37959
37960 @table @asis
37961
37962 @item @code{bootloader}
37963 @cindex EFI, bootloader
37964 @cindex UEFI, bootloader
37965 @cindex BIOS, bootloader
37966 The bootloader to use, as a @code{bootloader} object. For now
37967 @code{grub-bootloader}, @code{grub-efi-bootloader},
37968 @code{grub-efi-netboot-bootloader}, @code{grub-efi-removable-bootloader},
37969 @code{extlinux-bootloader} and @code{u-boot-bootloader} are supported.
37970
37971 @cindex ARM, bootloaders
37972 @cindex AArch64, bootloaders
37973 Available bootloaders are described in @code{(gnu bootloader @dots{})}
37974 modules. In particular, @code{(gnu bootloader u-boot)} contains definitions
37975 of bootloaders for a wide range of ARM and AArch64 systems, using the
37976 @uref{https://www.denx.de/wiki/U-Boot/, U-Boot bootloader}.
37977
37978 @vindex grub-efi-bootloader
37979 @code{grub-efi-bootloader} allows to boot on modern systems using the
37980 @dfn{Unified Extensible Firmware Interface} (UEFI). This is what you should
37981 use if the installation image contains a @file{/sys/firmware/efi} directory
37982 when you boot it on your system.
37983
37984 @vindex grub-bootloader
37985 @code{grub-bootloader} allows you to boot in particular Intel-based machines
37986 in ``legacy'' BIOS mode.
37987
37988 @vindex grub-efi-netboot-bootloader
37989 @code{grub-efi-netboot-bootloader} allows you to boot your system over network
37990 through TFTP@. In combination with an NFS root file system this allows you to
37991 build a diskless Guix system.
37992
37993 The installation of the @code{grub-efi-netboot-bootloader} generates the
37994 content of the TFTP root directory at @code{targets} (@pxref{Bootloader
37995 Configuration, @code{targets}}), to be served by a TFTP server. You may
37996 want to mount your TFTP server directories onto the @code{targets} to
37997 move the required files to the TFTP server automatically.
37998
37999 If you plan to use an NFS root file system as well (actually if you mount the
38000 store from an NFS share), then the TFTP server needs to serve the file
38001 @file{/boot/grub/grub.cfg} and other files from the store (like GRUBs background
38002 image, the kernel (@pxref{operating-system Reference, @code{kernel}}) and the
38003 initrd (@pxref{operating-system Reference, @code{initrd}})), too. All these
38004 files from the store will be accessed by GRUB through TFTP with their normal
38005 store path, for example as
38006 @file{tftp://tftp-server/gnu/store/…-initrd/initrd.cpio.gz}.
38007
38008 Two symlinks are created to make this possible. For each target in the
38009 @code{targets} field, the first symlink is
38010 @samp{target}@file{/efi/Guix/boot/grub/grub.cfg} pointing to
38011 @file{../../../boot/grub/grub.cfg}, where @samp{target} may be
38012 @file{/boot}. In this case the link is not leaving the served TFTP root
38013 directory, but otherwise it does. The second link is
38014 @samp{target}@file{/gnu/store} and points to @file{../gnu/store}. This
38015 link is leaving the served TFTP root directory.
38016
38017 The assumption behind all this is that you have an NFS server exporting
38018 the root file system for your Guix system, and additionally a TFTP
38019 server exporting your @code{targets} directories—usually a single
38020 @file{/boot}—from that same root file system for your Guix system. In
38021 this constellation the symlinks will work.
38022
38023 For other constellations you will have to program your own bootloader
38024 installer, which then takes care to make necessary files from the store
38025 accessible through TFTP, for example by copying them into the TFTP root
38026 directory to your @code{targets}.
38027
38028 It is important to note that symlinks pointing outside the TFTP root directory
38029 may need to be allowed in the configuration of your TFTP server. Further the
38030 store link exposes the whole store through TFTP@. Both points need to be
38031 considered carefully for security aspects.
38032
38033 Beside the @code{grub-efi-netboot-bootloader}, the already mentioned TFTP and
38034 NFS servers, you also need a properly configured DHCP server to make the booting
38035 over netboot possible. For all this we can currently only recommend you to look
38036 for instructions about @acronym{PXE, Preboot eXecution Environment}.
38037
38038 @vindex grub-efi-removable-bootloader
38039 @code{grub-efi-removable-bootloader} allows you to boot your system from
38040 removable media by writing the GRUB file to the UEFI-specification location of
38041 @file{/EFI/BOOT/BOOTX64.efi} of the boot directory, usually @file{/boot/efi}.
38042 This is also useful for some UEFI firmwares that ``forget'' their configuration
38043 from their non-volatile storage. Like @code{grub-efi-bootloader}, this can only
38044 be used if the @file{/sys/firmware/efi} directory is available.
38045
38046 @quotation Note
38047 This @emph{will} overwrite the GRUB file from any other operating systems that
38048 also place their GRUB file in the UEFI-specification location; making them
38049 unbootable.
38050 @end quotation
38051
38052 @item @code{targets}
38053 This is a list of strings denoting the targets onto which to install the
38054 bootloader.
38055
38056 The interpretation of targets depends on the bootloader in question.
38057 For @code{grub-bootloader}, for example, they should be device names
38058 understood by the bootloader @command{installer} command, such as
38059 @code{/dev/sda} or @code{(hd0)} (@pxref{Invoking grub-install,,, grub,
38060 GNU GRUB Manual}). For @code{grub-efi-bootloader} and
38061 @code{grub-efi-removable-bootloader} they should be mount
38062 points of the EFI file system, usually @file{/boot/efi}. For
38063 @code{grub-efi-netboot-bootloader}, @code{targets} should be the mount
38064 points corresponding to TFTP root directories served by your TFTP
38065 server.
38066
38067 @item @code{menu-entries} (default: @code{()})
38068 A possibly empty list of @code{menu-entry} objects (see below), denoting
38069 entries to appear in the bootloader menu, in addition to the current
38070 system entry and the entry pointing to previous system generations.
38071
38072 @item @code{default-entry} (default: @code{0})
38073 The index of the default boot menu entry. Index 0 is for the entry of the
38074 current system.
38075
38076 @item @code{timeout} (default: @code{5})
38077 The number of seconds to wait for keyboard input before booting. Set to
38078 0 to boot immediately, and to -1 to wait indefinitely.
38079
38080 @cindex keyboard layout, for the bootloader
38081 @item @code{keyboard-layout} (default: @code{#f})
38082 If this is @code{#f}, the bootloader's menu (if any) uses the default keyboard
38083 layout, usually US@tie{}English (``qwerty'').
38084
38085 Otherwise, this must be a @code{keyboard-layout} object (@pxref{Keyboard
38086 Layout}).
38087
38088 @quotation Note
38089 This option is currently ignored by bootloaders other than @code{grub} and
38090 @code{grub-efi}.
38091 @end quotation
38092
38093 @item @code{theme} (default: @var{#f})
38094 The bootloader theme object describing the theme to use. If no theme
38095 is provided, some bootloaders might use a default theme, that's true
38096 for GRUB.
38097
38098 @item @code{terminal-outputs} (default: @code{'(gfxterm)})
38099 The output terminals used for the bootloader boot menu, as a list of
38100 symbols. GRUB accepts the values: @code{console}, @code{serial},
38101 @code{serial_@{0-3@}}, @code{gfxterm}, @code{vga_text},
38102 @code{mda_text}, @code{morse}, and @code{pkmodem}. This field
38103 corresponds to the GRUB variable @code{GRUB_TERMINAL_OUTPUT} (@pxref{Simple
38104 configuration,,, grub,GNU GRUB manual}).
38105
38106 @item @code{terminal-inputs} (default: @code{'()})
38107 The input terminals used for the bootloader boot menu, as a list of
38108 symbols. For GRUB, the default is the native platform terminal as
38109 determined at run-time. GRUB accepts the values: @code{console},
38110 @code{serial}, @code{serial_@{0-3@}}, @code{at_keyboard}, and
38111 @code{usb_keyboard}. This field corresponds to the GRUB variable
38112 @code{GRUB_TERMINAL_INPUT} (@pxref{Simple configuration,,, grub,GNU GRUB
38113 manual}).
38114
38115 @item @code{serial-unit} (default: @code{#f})
38116 The serial unit used by the bootloader, as an integer from 0 to 3.
38117 For GRUB, it is chosen at run-time; currently GRUB chooses 0, which
38118 corresponds to COM1 (@pxref{Serial terminal,,, grub,GNU GRUB manual}).
38119
38120 @item @code{serial-speed} (default: @code{#f})
38121 The speed of the serial interface, as an integer. For GRUB, the
38122 default value is chosen at run-time; currently GRUB chooses
38123 9600@tie{}bps (@pxref{Serial terminal,,, grub,GNU GRUB manual}).
38124
38125 @item @code{device-tree-support?} (default: @code{#t})
38126 Whether to support Linux @uref{https://en.wikipedia.org/wiki/Devicetree,
38127 device tree} files loading.
38128
38129 This option in enabled by default. In some cases involving the
38130 @code{u-boot} bootloader, where the device tree has already been loaded
38131 in RAM, it can be handy to disable the option by setting it to
38132 @code{#f}.
38133 @end table
38134
38135 @end deftp
38136
38137 @cindex dual boot
38138 @cindex boot menu
38139 Should you want to list additional boot menu entries @i{via} the
38140 @code{menu-entries} field above, you will need to create them with the
38141 @code{menu-entry} form. For example, imagine you want to be able to
38142 boot another distro (hard to imagine!), you can define a menu entry
38143 along these lines:
38144
38145 @lisp
38146 (menu-entry
38147 (label "The Other Distro")
38148 (linux "/boot/old/vmlinux-2.6.32")
38149 (linux-arguments '("root=/dev/sda2"))
38150 (initrd "/boot/old/initrd"))
38151 @end lisp
38152
38153 Details below.
38154
38155 @deftp {Data Type} menu-entry
38156 The type of an entry in the bootloader menu.
38157
38158 @table @asis
38159
38160 @item @code{label}
38161 The label to show in the menu---e.g., @code{"GNU"}.
38162
38163 @item @code{linux} (default: @code{#f})
38164 The Linux kernel image to boot, for example:
38165
38166 @lisp
38167 (file-append linux-libre "/bzImage")
38168 @end lisp
38169
38170 For GRUB, it is also possible to specify a device explicitly in the
38171 file path using GRUB's device naming convention (@pxref{Naming
38172 convention,,, grub, GNU GRUB manual}), for example:
38173
38174 @example
38175 "(hd0,msdos1)/boot/vmlinuz"
38176 @end example
38177
38178 If the device is specified explicitly as above, then the @code{device}
38179 field is ignored entirely.
38180
38181 @item @code{linux-arguments} (default: @code{()})
38182 The list of extra Linux kernel command-line arguments---e.g.,
38183 @code{("console=ttyS0")}.
38184
38185 @item @code{initrd} (default: @code{#f})
38186 A G-Expression or string denoting the file name of the initial RAM disk
38187 to use (@pxref{G-Expressions}).
38188
38189 @item @code{device} (default: @code{#f})
38190 The device where the kernel and initrd are to be found---i.e., for GRUB,
38191 @dfn{root} for this menu entry (@pxref{root,,, grub, GNU GRUB manual}).
38192
38193 This may be a file system label (a string), a file system UUID (a
38194 bytevector, @pxref{File Systems}), or @code{#f}, in which case
38195 the bootloader will search the device containing the file specified by
38196 the @code{linux} field (@pxref{search,,, grub, GNU GRUB manual}). It
38197 must @emph{not} be an OS device name such as @file{/dev/sda1}.
38198
38199 @item @code{multiboot-kernel} (default: @code{#f})
38200 The kernel to boot in Multiboot-mode (@pxref{multiboot,,, grub, GNU GRUB
38201 manual}). When this field is set, a Multiboot menu-entry is generated.
38202 For example:
38203
38204 @lisp
38205 (file-append mach "/boot/gnumach")
38206 @end lisp
38207
38208 @item @code{multiboot-arguments} (default: @code{()})
38209 The list of extra command-line arguments for the multiboot-kernel.
38210
38211 @item @code{multiboot-modules} (default: @code{()})
38212 The list of commands for loading Multiboot modules. For example:
38213
38214 @lisp
38215 (list (list (file-append hurd "/hurd/ext2fs.static") "ext2fs"
38216 @dots{})
38217 (list (file-append libc "/lib/ld.so.1") "exec"
38218 @dots{}))
38219 @end lisp
38220
38221 @item @code{chain-loader} (default: @code{#f})
38222 A string that can be accepted by @code{grub}'s @code{chainloader}
38223 directive. This has no effect if either @code{linux} or
38224 @code{multiboot-kernel} fields are specified. The following is an
38225 example of chainloading a different GNU/Linux system.
38226
38227 @lisp
38228 (bootloader
38229 (bootloader-configuration
38230 ;; @dots{}
38231 (menu-entries
38232 (list
38233 (menu-entry
38234 (label "GNU/Linux")
38235 (device (uuid "1C31-A17C" 'fat))
38236 (chain-loader "/EFI/GNULinux/grubx64.efi"))))))
38237 @end lisp
38238
38239 @end table
38240 @end deftp
38241
38242 @cindex HDPI
38243 @cindex HiDPI
38244 @cindex resolution
38245 @c FIXME: Write documentation once it's stable.
38246 For now only GRUB has theme support. GRUB themes are created using
38247 the @code{grub-theme} form, which is not fully documented yet.
38248
38249 @deftp {Data Type} grub-theme
38250 Data type representing the configuration of the GRUB theme.
38251
38252 @table @asis
38253 @item @code{gfxmode} (default: @code{'("auto")})
38254 The GRUB @code{gfxmode} to set (a list of screen resolution strings,
38255 @pxref{gfxmode,,, grub, GNU GRUB manual}).
38256 @end table
38257 @end deftp
38258
38259 @deffn {Scheme Procedure} grub-theme
38260 Return the default GRUB theme used by the operating system if no
38261 @code{theme} field is specified in @code{bootloader-configuration}
38262 record.
38263
38264 It comes with a fancy background image displaying the GNU and Guix
38265 logos.
38266 @end deffn
38267
38268 For example, to override the default resolution, you may use something
38269 like
38270
38271 @lisp
38272 (bootloader
38273 (bootloader-configuration
38274 ;; @dots{}
38275 (theme (grub-theme
38276 (inherit (grub-theme))
38277 (gfxmode '("1024x786x32" "auto"))))))
38278 @end lisp
38279
38280 @node Invoking guix system
38281 @section Invoking @command{guix system}
38282
38283 @cindex @command{guix system}
38284 Once you have written an operating system declaration as seen in the
38285 previous section, it can be @dfn{instantiated} using the @command{guix
38286 system} command. The synopsis is:
38287
38288 @example
38289 guix system @var{options}@dots{} @var{action} @var{file}
38290 @end example
38291
38292 @var{file} must be the name of a file containing an
38293 @code{operating-system} declaration. @var{action} specifies how the
38294 operating system is instantiated. Currently the following values are
38295 supported:
38296
38297 @table @code
38298 @item search
38299 Display available service type definitions that match the given regular
38300 expressions, sorted by relevance:
38301
38302 @cindex HDPI
38303 @cindex HiDPI
38304 @cindex resolution
38305 @example
38306 $ guix system search console
38307 name: console-fonts
38308 location: gnu/services/base.scm:806:2
38309 extends: shepherd-root
38310 description: Install the given fonts on the specified ttys (fonts are per
38311 + virtual console on GNU/Linux). The value of this service is a list of
38312 + tty/font pairs. The font can be the name of a font provided by the `kbd'
38313 + package or any valid argument to `setfont', as in this example:
38314 +
38315 + '(("tty1" . "LatGrkCyr-8x16")
38316 + ("tty2" . (file-append
38317 + font-tamzen
38318 + "/share/kbd/consolefonts/TamzenForPowerline10x20.psf"))
38319 + ("tty3" . (file-append
38320 + font-terminus
38321 + "/share/consolefonts/ter-132n"))) ; for HDPI
38322 relevance: 9
38323
38324 name: mingetty
38325 location: gnu/services/base.scm:1190:2
38326 extends: shepherd-root
38327 description: Provide console login using the `mingetty' program.
38328 relevance: 2
38329
38330 name: login
38331 location: gnu/services/base.scm:860:2
38332 extends: pam
38333 description: Provide a console log-in service as specified by its
38334 + configuration value, a `login-configuration' object.
38335 relevance: 2
38336
38337 @dots{}
38338 @end example
38339
38340 As for @command{guix package --search}, the result is written in
38341 @code{recutils} format, which makes it easy to filter the output
38342 (@pxref{Top, GNU recutils databases,, recutils, GNU recutils manual}).
38343
38344 @cindex service type definition, editing
38345 @cindex editing, service type definition
38346 @item edit
38347 Edit or view the definition of the given service types.
38348
38349 For example, the command below opens your editor, as specified by the
38350 @env{EDITOR} environment variable, on the definition of the
38351 @code{openssh} service type:
38352
38353 @example
38354 guix system edit openssh
38355 @end example
38356
38357 @item reconfigure
38358 Build the operating system described in @var{file}, activate it, and
38359 switch to it@footnote{This action (and the related actions
38360 @code{switch-generation} and @code{roll-back}) are usable only on
38361 systems already running Guix System.}.
38362
38363 @quotation Note
38364 @c The paragraph below refers to the problem discussed at
38365 @c <https://lists.gnu.org/archive/html/guix-devel/2014-08/msg00057.html>.
38366 It is highly recommended to run @command{guix pull} once before you run
38367 @command{guix system reconfigure} for the first time (@pxref{Invoking
38368 guix pull}). Failing to do that you would see an older version of Guix
38369 once @command{reconfigure} has completed.
38370 @end quotation
38371
38372 This effects all the configuration specified in @var{file}: user
38373 accounts, system services, global package list, setuid programs, etc.
38374 The command starts system services specified in @var{file} that are not
38375 currently running; if a service is currently running this command will
38376 arrange for it to be upgraded the next time it is stopped (e.g.@: by
38377 @code{herd stop X} or @code{herd restart X}).
38378
38379 This command creates a new generation whose number is one greater than
38380 the current generation (as reported by @command{guix system
38381 list-generations}). If that generation already exists, it will be
38382 overwritten. This behavior mirrors that of @command{guix package}
38383 (@pxref{Invoking guix package}).
38384
38385 It also adds a bootloader menu entry for the new OS configuration,
38386 ---unless @option{--no-bootloader} is passed. For GRUB, it moves
38387 entries for older configurations to a submenu, allowing you to choose
38388 an older system generation at boot time should you need it.
38389
38390 @cindex provenance tracking, of the operating system
38391 Upon completion, the new system is deployed under
38392 @file{/run/current-system}. This directory contains @dfn{provenance
38393 meta-data}: the list of channels in use (@pxref{Channels}) and
38394 @var{file} itself, when available. You can view it by running:
38395
38396 @example
38397 guix system describe
38398 @end example
38399
38400 This information is useful should you later want to inspect how this
38401 particular generation was built. In fact, assuming @var{file} is
38402 self-contained, you can later rebuild generation @var{n} of your
38403 operating system with:
38404
38405 @example
38406 guix time-machine \
38407 -C /var/guix/profiles/system-@var{n}-link/channels.scm -- \
38408 system reconfigure \
38409 /var/guix/profiles/system-@var{n}-link/configuration.scm
38410 @end example
38411
38412 You can think of it as some sort of built-in version control! Your
38413 system is not just a binary artifact: @emph{it carries its own source}.
38414 @xref{Service Reference, @code{provenance-service-type}}, for more
38415 information on provenance tracking.
38416
38417 By default, @command{reconfigure} @emph{prevents you from downgrading
38418 your system}, which could (re)introduce security vulnerabilities and
38419 also cause problems with ``stateful'' services such as database
38420 management systems. You can override that behavior by passing
38421 @option{--allow-downgrades}.
38422
38423 @item switch-generation
38424 @cindex generations
38425 Switch to an existing system generation. This action atomically
38426 switches the system profile to the specified system generation. It
38427 also rearranges the system's existing bootloader menu entries. It
38428 makes the menu entry for the specified system generation the default,
38429 and it moves the entries for the other generations to a submenu, if
38430 supported by the bootloader being used. The next time the system
38431 boots, it will use the specified system generation.
38432
38433 The bootloader itself is not being reinstalled when using this
38434 command. Thus, the installed bootloader is used with an updated
38435 configuration file.
38436
38437 The target generation can be specified explicitly by its generation
38438 number. For example, the following invocation would switch to system
38439 generation 7:
38440
38441 @example
38442 guix system switch-generation 7
38443 @end example
38444
38445 The target generation can also be specified relative to the current
38446 generation with the form @code{+N} or @code{-N}, where @code{+3} means
38447 ``3 generations ahead of the current generation,'' and @code{-1} means
38448 ``1 generation prior to the current generation.'' When specifying a
38449 negative value such as @code{-1}, you must precede it with @code{--} to
38450 prevent it from being parsed as an option. For example:
38451
38452 @example
38453 guix system switch-generation -- -1
38454 @end example
38455
38456 Currently, the effect of invoking this action is @emph{only} to switch
38457 the system profile to an existing generation and rearrange the
38458 bootloader menu entries. To actually start using the target system
38459 generation, you must reboot after running this action. In the future,
38460 it will be updated to do the same things as @command{reconfigure},
38461 like activating and deactivating services.
38462
38463 This action will fail if the specified generation does not exist.
38464
38465 @item roll-back
38466 @cindex rolling back
38467 Switch to the preceding system generation. The next time the system
38468 boots, it will use the preceding system generation. This is the inverse
38469 of @command{reconfigure}, and it is exactly the same as invoking
38470 @command{switch-generation} with an argument of @code{-1}.
38471
38472 Currently, as with @command{switch-generation}, you must reboot after
38473 running this action to actually start using the preceding system
38474 generation.
38475
38476 @item delete-generations
38477 @cindex deleting system generations
38478 @cindex saving space
38479 Delete system generations, making them candidates for garbage collection
38480 (@pxref{Invoking guix gc}, for information on how to run the ``garbage
38481 collector'').
38482
38483 This works in the same way as @samp{guix package --delete-generations}
38484 (@pxref{Invoking guix package, @option{--delete-generations}}). With no
38485 arguments, all system generations but the current one are deleted:
38486
38487 @example
38488 guix system delete-generations
38489 @end example
38490
38491 You can also select the generations you want to delete. The example below
38492 deletes all the system generations that are more than two months old:
38493
38494 @example
38495 guix system delete-generations 2m
38496 @end example
38497
38498 Running this command automatically reinstalls the bootloader with an updated
38499 list of menu entries---e.g., the ``old generations'' sub-menu in GRUB no
38500 longer lists the generations that have been deleted.
38501
38502 @item build
38503 Build the derivation of the operating system, which includes all the
38504 configuration files and programs needed to boot and run the system.
38505 This action does not actually install anything.
38506
38507 @item init
38508 Populate the given directory with all the files necessary to run the
38509 operating system specified in @var{file}. This is useful for first-time
38510 installations of Guix System. For instance:
38511
38512 @example
38513 guix system init my-os-config.scm /mnt
38514 @end example
38515
38516 copies to @file{/mnt} all the store items required by the configuration
38517 specified in @file{my-os-config.scm}. This includes configuration
38518 files, packages, and so on. It also creates other essential files
38519 needed for the system to operate correctly---e.g., the @file{/etc},
38520 @file{/var}, and @file{/run} directories, and the @file{/bin/sh} file.
38521
38522 This command also installs bootloader on the targets specified in
38523 @file{my-os-config}, unless the @option{--no-bootloader} option was
38524 passed.
38525
38526 @item vm
38527 @cindex virtual machine
38528 @cindex VM
38529 @anchor{guix system vm}
38530 Build a virtual machine (VM) that contains the operating system declared
38531 in @var{file}, and return a script to run that VM.
38532
38533 @quotation Note
38534 The @code{vm} action and others below
38535 can use KVM support in the Linux-libre kernel. Specifically, if the
38536 machine has hardware virtualization support, the corresponding
38537 KVM kernel module should be loaded, and the @file{/dev/kvm} device node
38538 must exist and be readable and writable by the user and by the
38539 build users of the daemon (@pxref{Build Environment Setup}).
38540 @end quotation
38541
38542 Arguments given to the script are passed to QEMU as in the example
38543 below, which enables networking and requests 1@tie{}GiB of RAM for the
38544 emulated machine:
38545
38546 @example
38547 $ /gnu/store/@dots{}-run-vm.sh -m 1024 -smp 2 -nic user,model=virtio-net-pci
38548 @end example
38549
38550 It's possible to combine the two steps into one:
38551
38552 @example
38553 $ $(guix system vm my-config.scm) -m 1024 -smp 2 -nic user,model=virtio-net-pci
38554 @end example
38555
38556 The VM shares its store with the host system.
38557
38558 By default, the root file system of the VM is mounted volatile; the
38559 @option{--persistent} option can be provided to make it persistent
38560 instead. In that case, the VM disk-image file will be copied from the
38561 store to the @env{TMPDIR} directory to make it writable.
38562
38563 Additional file systems can be shared between the host and the VM using
38564 the @option{--share} and @option{--expose} command-line options: the former
38565 specifies a directory to be shared with write access, while the latter
38566 provides read-only access to the shared directory.
38567
38568 The example below creates a VM in which the user's home directory is
38569 accessible read-only, and where the @file{/exchange} directory is a
38570 read-write mapping of @file{$HOME/tmp} on the host:
38571
38572 @example
38573 guix system vm my-config.scm \
38574 --expose=$HOME --share=$HOME/tmp=/exchange
38575 @end example
38576
38577 On GNU/Linux, the default is to boot directly to the kernel; this has
38578 the advantage of requiring only a very tiny root disk image since the
38579 store of the host can then be mounted.
38580
38581 The @option{--full-boot} option forces a complete boot sequence, starting
38582 with the bootloader. This requires more disk space since a root image
38583 containing at least the kernel, initrd, and bootloader data files must
38584 be created.
38585
38586 The @option{--image-size} option can be used to specify the size of the
38587 image.
38588
38589 The @option{--no-graphic} option will instruct @command{guix system} to
38590 spawn a headless VM that will use the invoking tty for IO. Among other
38591 things, this enables copy-pasting, and scrollback. Use the @kbd{ctrl-a}
38592 prefix to issue QEMU commands; e.g. @kbd{ctrl-a h} prints a help,
38593 @kbd{ctrl-a x} quits the VM, and @kbd{ctrl-a c} switches between the
38594 QEMU monitor and the VM.
38595
38596 @cindex System images, creation in various formats
38597 @cindex Creating system images in various formats
38598 @item image
38599 @cindex image, creating disk images
38600 The @code{image} command can produce various image types. The image
38601 type can be selected using the @option{--image-type} option. It
38602 defaults to @code{efi-raw}. When its value is @code{iso9660}, the
38603 @option{--label} option can be used to specify a volume ID with
38604 @code{image}. By default, the root file system of a disk image is
38605 mounted non-volatile; the @option{--volatile} option can be provided to
38606 make it volatile instead. When using @code{image}, the bootloader
38607 installed on the generated image is taken from the provided
38608 @code{operating-system} definition. The following example demonstrates
38609 how to generate an image that uses the @code{grub-efi-bootloader}
38610 bootloader and boot it with QEMU:
38611
38612 @example
38613 image=$(guix system image --image-type=qcow2 \
38614 gnu/system/examples/lightweight-desktop.tmpl)
38615 cp $image /tmp/my-image.qcow2
38616 chmod +w /tmp/my-image.qcow2
38617 qemu-system-x86_64 -enable-kvm -hda /tmp/my-image.qcow2 -m 1000 \
38618 -bios $(guix build ovmf)/share/firmware/ovmf_x64.bin
38619 @end example
38620
38621 When using the @code{efi-raw} image type, a raw disk image is produced;
38622 it can be copied as is to a USB stick, for instance. Assuming
38623 @code{/dev/sdc} is the device corresponding to a USB stick, one can copy
38624 the image to it using the following command:
38625
38626 @example
38627 # dd if=$(guix system image my-os.scm) of=/dev/sdc status=progress
38628 @end example
38629
38630 The @code{--list-image-types} command lists all the available image
38631 types.
38632
38633 @cindex creating virtual machine images
38634 When using the @code{qcow2} image type, the returned image is in qcow2
38635 format, which the QEMU emulator can efficiently use. @xref{Running Guix
38636 in a VM}, for more information on how to run the image in a virtual
38637 machine. The @code{grub-bootloader} bootloader is always used
38638 independently of what is declared in the @code{operating-system} file
38639 passed as argument. This is to make it easier to work with QEMU, which
38640 uses the SeaBIOS BIOS by default, expecting a bootloader to be installed
38641 in the Master Boot Record (MBR).
38642
38643 @cindex docker-image, creating docker images
38644 When using the @code{docker} image type, a Docker image is produced.
38645 Guix builds the image from scratch, not from a pre-existing Docker base
38646 image. As a result, it contains @emph{exactly} what you define in the
38647 operating system configuration file. You can then load the image and
38648 launch a Docker container using commands like the following:
38649
38650 @example
38651 image_id="$(docker load < guix-system-docker-image.tar.gz)"
38652 container_id="$(docker create $image_id)"
38653 docker start $container_id
38654 @end example
38655
38656 This command starts a new Docker container from the specified image. It
38657 will boot the Guix system in the usual manner, which means it will
38658 start any services you have defined in the operating system
38659 configuration. You can get an interactive shell running in the container
38660 using @command{docker exec}:
38661
38662 @example
38663 docker exec -ti $container_id /run/current-system/profile/bin/bash --login
38664 @end example
38665
38666 Depending on what you run in the Docker container, it
38667 may be necessary to give the container additional permissions. For
38668 example, if you intend to build software using Guix inside of the Docker
38669 container, you may need to pass the @option{--privileged} option to
38670 @code{docker create}.
38671
38672 Last, the @option{--network} option applies to @command{guix system
38673 docker-image}: it produces an image where network is supposedly shared
38674 with the host, and thus without services like nscd or NetworkManager.
38675
38676 @item container
38677 Return a script to run the operating system declared in @var{file}
38678 within a container. Containers are a set of lightweight isolation
38679 mechanisms provided by the kernel Linux-libre. Containers are
38680 substantially less resource-demanding than full virtual machines since
38681 the kernel, shared objects, and other resources can be shared with the
38682 host system; this also means they provide thinner isolation.
38683
38684 Currently, the script must be run as root in order to support more than
38685 a single user and group. The container shares its store with the host
38686 system.
38687
38688 As with the @code{vm} action (@pxref{guix system vm}), additional file
38689 systems to be shared between the host and container can be specified
38690 using the @option{--share} and @option{--expose} options:
38691
38692 @example
38693 guix system container my-config.scm \
38694 --expose=$HOME --share=$HOME/tmp=/exchange
38695 @end example
38696
38697 The @option{--share} and @option{--expose} options can also be passed to
38698 the generated script to bind-mount additional directories into the
38699 container.
38700
38701 @quotation Note
38702 This option requires Linux-libre 3.19 or newer.
38703 @end quotation
38704
38705 @end table
38706
38707 @var{options} can contain any of the common build options (@pxref{Common
38708 Build Options}). In addition, @var{options} can contain one of the
38709 following:
38710
38711 @table @option
38712 @item --expression=@var{expr}
38713 @itemx -e @var{expr}
38714 Consider the operating-system @var{expr} evaluates to.
38715 This is an alternative to specifying a file which evaluates to an
38716 operating system.
38717 This is used to generate the Guix system installer @pxref{Building the
38718 Installation Image}).
38719
38720 @item --system=@var{system}
38721 @itemx -s @var{system}
38722 Attempt to build for @var{system} instead of the host system type.
38723 This works as per @command{guix build} (@pxref{Invoking guix build}).
38724
38725 @item --target=@var{triplet}
38726 Cross-build for @var{triplet}, which must be a valid GNU triplet, such
38727 as @code{"aarch64-linux-gnu"} (@pxref{Specifying target triplets, GNU
38728 configuration triplets,, autoconf, Autoconf}).
38729
38730 @item --derivation
38731 @itemx -d
38732 Return the derivation file name of the given operating system without
38733 building anything.
38734
38735 @cindex provenance tracking, of the operating system
38736 @item --save-provenance
38737 As discussed above, @command{guix system init} and @command{guix system
38738 reconfigure} always save provenance information @i{via} a dedicated
38739 service (@pxref{Service Reference, @code{provenance-service-type}}).
38740 However, other commands don't do that by default. If you wish to, say,
38741 create a virtual machine image that contains provenance information, you
38742 can run:
38743
38744 @example
38745 guix system image -t qcow2 --save-provenance config.scm
38746 @end example
38747
38748 That way, the resulting image will effectively ``embed its own source''
38749 in the form of meta-data in @file{/run/current-system}. With that
38750 information, one can rebuild the image to make sure it really contains
38751 what it pretends to contain; or they could use that to derive a variant
38752 of the image.
38753
38754 @item --image-type=@var{type}
38755 @itemx -t @var{type}
38756 For the @code{image} action, create an image with given @var{type}.
38757
38758 When this option is omitted, @command{guix system} uses the
38759 @code{efi-raw} image type.
38760
38761 @cindex ISO-9660 format
38762 @cindex CD image format
38763 @cindex DVD image format
38764 @option{--image-type=iso9660} produces an ISO-9660 image, suitable
38765 for burning on CDs and DVDs.
38766
38767 @item --image-size=@var{size}
38768 For the @code{image} action, create an image of the given @var{size}.
38769 @var{size} may be a number of bytes, or it may include a unit as a
38770 suffix (@pxref{Block size, size specifications,, coreutils, GNU
38771 Coreutils}).
38772
38773 When this option is omitted, @command{guix system} computes an estimate
38774 of the image size as a function of the size of the system declared in
38775 @var{file}.
38776
38777 @item --network
38778 @itemx -N
38779 For the @code{container} action, allow containers to access the host network,
38780 that is, do not create a network namespace.
38781
38782 @item --root=@var{file}
38783 @itemx -r @var{file}
38784 Make @var{file} a symlink to the result, and register it as a garbage
38785 collector root.
38786
38787 @item --skip-checks
38788 Skip pre-installation safety checks.
38789
38790 By default, @command{guix system init} and @command{guix system
38791 reconfigure} perform safety checks: they make sure the file systems that
38792 appear in the @code{operating-system} declaration actually exist
38793 (@pxref{File Systems}), and that any Linux kernel modules that may be
38794 needed at boot time are listed in @code{initrd-modules} (@pxref{Initial
38795 RAM Disk}). Passing this option skips these tests altogether.
38796
38797 @item --allow-downgrades
38798 Instruct @command{guix system reconfigure} to allow system downgrades.
38799
38800 By default, @command{reconfigure} prevents you from downgrading your
38801 system. It achieves that by comparing the provenance info of your
38802 system (shown by @command{guix system describe}) with that of your
38803 @command{guix} command (shown by @command{guix describe}). If the
38804 commits for @command{guix} are not descendants of those used for your
38805 system, @command{guix system reconfigure} errors out. Passing
38806 @option{--allow-downgrades} allows you to bypass these checks.
38807
38808 @quotation Note
38809 Make sure you understand its security implications before using
38810 @option{--allow-downgrades}.
38811 @end quotation
38812
38813 @cindex on-error
38814 @cindex on-error strategy
38815 @cindex error strategy
38816 @item --on-error=@var{strategy}
38817 Apply @var{strategy} when an error occurs when reading @var{file}.
38818 @var{strategy} may be one of the following:
38819
38820 @table @code
38821 @item nothing-special
38822 Report the error concisely and exit. This is the default strategy.
38823
38824 @item backtrace
38825 Likewise, but also display a backtrace.
38826
38827 @item debug
38828 Report the error and enter Guile's debugger. From there, you can run
38829 commands such as @code{,bt} to get a backtrace, @code{,locals} to
38830 display local variable values, and more generally inspect the state of the
38831 program. @xref{Debug Commands,,, guile, GNU Guile Reference Manual}, for
38832 a list of available debugging commands.
38833 @end table
38834 @end table
38835
38836 Once you have built, configured, re-configured, and re-re-configured
38837 your Guix installation, you may find it useful to list the operating
38838 system generations available on disk---and that you can choose from the
38839 bootloader boot menu:
38840
38841 @table @code
38842
38843 @item describe
38844 Describe the running system generation: its file name, the kernel and
38845 bootloader used, etc., as well as provenance information when available.
38846
38847 The @code{--list-installed} flag is available, with the same
38848 syntax that is used in @command{guix package --list-installed}
38849 (@pxref{Invoking guix package}). When the flag is used,
38850 the description will include a list of packages that are currently
38851 installed in the system profile, with optional filtering based on a
38852 regular expression.
38853
38854 @quotation Note
38855 The @emph{running} system generation---referred to by
38856 @file{/run/current-system}---is not necessarily the @emph{current}
38857 system generation---referred to by @file{/var/guix/profiles/system}: it
38858 differs when, for instance, you chose from the bootloader menu to boot
38859 an older generation.
38860
38861 It can also differ from the @emph{booted} system generation---referred
38862 to by @file{/run/booted-system}---for instance because you reconfigured
38863 the system in the meantime.
38864 @end quotation
38865
38866 @item list-generations
38867 List a summary of each generation of the operating system available on
38868 disk, in a human-readable way. This is similar to the
38869 @option{--list-generations} option of @command{guix package}
38870 (@pxref{Invoking guix package}).
38871
38872 Optionally, one can specify a pattern, with the same syntax that is used
38873 in @command{guix package --list-generations}, to restrict the list of
38874 generations displayed. For instance, the following command displays
38875 generations that are up to 10 days old:
38876
38877 @example
38878 $ guix system list-generations 10d
38879 @end example
38880
38881 The @code{--list-installed} flag may also be specified, with the same
38882 syntax that is used in @command{guix package --list-installed}. This
38883 may be helpful if trying to determine when a package was added to the
38884 system.
38885
38886 @end table
38887
38888 The @command{guix system} command has even more to offer! The following
38889 sub-commands allow you to visualize how your system services relate to
38890 each other:
38891
38892 @anchor{system-extension-graph}
38893 @table @code
38894
38895 @item extension-graph
38896 Emit to standard output the @dfn{service
38897 extension graph} of the operating system defined in @var{file}
38898 (@pxref{Service Composition}, for more information on service
38899 extensions). By default the output is in Dot/Graphviz format, but you
38900 can choose a different format with @option{--graph-backend}, as with
38901 @command{guix graph} (@pxref{Invoking guix graph, @option{--backend}}):
38902
38903 The command:
38904
38905 @example
38906 $ guix system extension-graph @var{file} | xdot -
38907 @end example
38908
38909 shows the extension relations among services.
38910
38911 @quotation Note
38912 The @command{dot} program is provided by the @code{graphviz} package.
38913 @end quotation
38914
38915 @anchor{system-shepherd-graph}
38916 @item shepherd-graph
38917 Emit to standard output the @dfn{dependency
38918 graph} of shepherd services of the operating system defined in
38919 @var{file}. @xref{Shepherd Services}, for more information and for an
38920 example graph.
38921
38922 Again, the default output format is Dot/Graphviz, but you can pass
38923 @option{--graph-backend} to select a different one.
38924
38925 @end table
38926
38927 @node Invoking guix deploy
38928 @section Invoking @command{guix deploy}
38929
38930 @cindex @command{guix deploy}
38931 We've already seen @code{operating-system} declarations used to manage a
38932 machine's configuration locally. Suppose you need to configure multiple
38933 machines, though---perhaps you're managing a service on the web that's
38934 comprised of several servers. @command{guix deploy} enables you to use those
38935 same @code{operating-system} declarations to manage multiple remote hosts at
38936 once as a logical ``deployment''.
38937
38938 @quotation Note
38939 The functionality described in this section is still under development
38940 and is subject to change. Get in touch with us on
38941 @email{guix-devel@@gnu.org}!
38942 @end quotation
38943
38944 @example
38945 guix deploy @var{file}
38946 @end example
38947
38948 Such an invocation will deploy the machines that the code within @var{file}
38949 evaluates to. As an example, @var{file} might contain a definition like this:
38950
38951 @lisp
38952 ;; This is a Guix deployment of a "bare bones" setup, with
38953 ;; no X11 display server, to a machine with an SSH daemon
38954 ;; listening on localhost:2222. A configuration such as this
38955 ;; may be appropriate for virtual machine with ports
38956 ;; forwarded to the host's loopback interface.
38957
38958 (use-service-modules networking ssh)
38959 (use-package-modules bootloaders)
38960
38961 (define %system
38962 (operating-system
38963 (host-name "gnu-deployed")
38964 (timezone "Etc/UTC")
38965 (bootloader (bootloader-configuration
38966 (bootloader grub-bootloader)
38967 (targets '("/dev/vda"))
38968 (terminal-outputs '(console))))
38969 (file-systems (cons (file-system
38970 (mount-point "/")
38971 (device "/dev/vda1")
38972 (type "ext4"))
38973 %base-file-systems))
38974 (services
38975 (append (list (service dhcp-client-service-type)
38976 (service openssh-service-type
38977 (openssh-configuration
38978 (permit-root-login #t)
38979 (allow-empty-passwords? #t))))
38980 %base-services))))
38981
38982 (list (machine
38983 (operating-system %system)
38984 (environment managed-host-environment-type)
38985 (configuration (machine-ssh-configuration
38986 (host-name "localhost")
38987 (system "x86_64-linux")
38988 (user "alice")
38989 (identity "./id_rsa")
38990 (port 2222)))))
38991 @end lisp
38992
38993 The file should evaluate to a list of @var{machine} objects. This example,
38994 upon being deployed, will create a new generation on the remote system
38995 realizing the @code{operating-system} declaration @code{%system}.
38996 @code{environment} and @code{configuration} specify how the machine should be
38997 provisioned---that is, how the computing resources should be created and
38998 managed. The above example does not create any resources, as a
38999 @code{'managed-host} is a machine that is already running the Guix system and
39000 available over the network. This is a particularly simple case; a more
39001 complex deployment may involve, for example, starting virtual machines through
39002 a Virtual Private Server (VPS) provider. In such a case, a different
39003 @var{environment} type would be used.
39004
39005 Do note that you first need to generate a key pair on the coordinator machine
39006 to allow the daemon to export signed archives of files from the store
39007 (@pxref{Invoking guix archive}), though this step is automatic on Guix
39008 System:
39009
39010 @example
39011 # guix archive --generate-key
39012 @end example
39013
39014 @noindent
39015 Each target machine must authorize the key of the master machine so that it
39016 accepts store items it receives from the coordinator:
39017
39018 @example
39019 # guix archive --authorize < coordinator-public-key.txt
39020 @end example
39021
39022 @code{user}, in this example, specifies the name of the user account to log in
39023 as to perform the deployment. Its default value is @code{root}, but root
39024 login over SSH may be forbidden in some cases. To work around this,
39025 @command{guix deploy} can log in as an unprivileged user and employ
39026 @code{sudo} to escalate privileges. This will only work if @code{sudo} is
39027 currently installed on the remote and can be invoked non-interactively as
39028 @code{user}. That is, the line in @code{sudoers} granting @code{user} the
39029 ability to use @code{sudo} must contain the @code{NOPASSWD} tag. This can
39030 be accomplished with the following operating system configuration snippet:
39031
39032 @lisp
39033 (use-modules ...
39034 (gnu system)) ;for %sudoers-specification
39035
39036 (define %user "username")
39037
39038 (operating-system
39039 ...
39040 (sudoers-file
39041 (plain-file "sudoers"
39042 (string-append (plain-file-content %sudoers-specification)
39043 (format #f "~a ALL = NOPASSWD: ALL~%"
39044 %user)))))
39045
39046 @end lisp
39047
39048 For more information regarding the format of the @file{sudoers} file,
39049 consult @command{man sudoers}.
39050
39051 Once you've deployed a system on a set of machines, you may find it
39052 useful to run a command on all of them. The @option{--execute} or
39053 @option{-x} option lets you do that; the example below runs
39054 @command{uname -a} on all the machines listed in the deployment file:
39055
39056 @example
39057 guix deploy @var{file} -x -- uname -a
39058 @end example
39059
39060 One thing you may often need to do after deployment is restart specific
39061 services on all the machines, which you can do like so:
39062
39063 @example
39064 guix deploy @var{file} -x -- herd restart @var{service}
39065 @end example
39066
39067 The @command{guix deploy -x} command returns zero if and only if the
39068 command succeeded on all the machines.
39069
39070 @c FIXME/TODO: Separate the API doc from the CLI doc.
39071
39072 Below are the data types you need to know about when writing a
39073 deployment file.
39074
39075 @deftp {Data Type} machine
39076 This is the data type representing a single machine in a heterogeneous Guix
39077 deployment.
39078
39079 @table @asis
39080 @item @code{operating-system}
39081 The object of the operating system configuration to deploy.
39082
39083 @item @code{environment}
39084 An @code{environment-type} describing how the machine should be provisioned.
39085
39086 @item @code{configuration} (default: @code{#f})
39087 An object describing the configuration for the machine's @code{environment}.
39088 If the @code{environment} has a default configuration, @code{#f} may be used.
39089 If @code{#f} is used for an environment with no default configuration,
39090 however, an error will be thrown.
39091 @end table
39092 @end deftp
39093
39094 @deftp {Data Type} machine-ssh-configuration
39095 This is the data type representing the SSH client parameters for a machine
39096 with an @code{environment} of @code{managed-host-environment-type}.
39097
39098 @table @asis
39099 @item @code{host-name}
39100 @item @code{build-locally?} (default: @code{#t})
39101 If false, system derivations will be built on the machine being deployed to.
39102 @item @code{system}
39103 The system type describing the architecture of the machine being deployed
39104 to---e.g., @code{"x86_64-linux"}.
39105 @item @code{authorize?} (default: @code{#t})
39106 If true, the coordinator's signing key will be added to the remote's ACL
39107 keyring.
39108 @item @code{port} (default: @code{22})
39109 @item @code{user} (default: @code{"root"})
39110 @item @code{identity} (default: @code{#f})
39111 If specified, the path to the SSH private key to use to authenticate with the
39112 remote host.
39113
39114 @item @code{host-key} (default: @code{#f})
39115 This should be the SSH host key of the machine, which looks like this:
39116
39117 @example
39118 ssh-ed25519 AAAAC3Nz@dots{} root@@example.org
39119 @end example
39120
39121 When @code{host-key} is @code{#f}, the server is authenticated against
39122 the @file{~/.ssh/known_hosts} file, just like the OpenSSH @command{ssh}
39123 client does.
39124
39125 @item @code{allow-downgrades?} (default: @code{#f})
39126 Whether to allow potential downgrades.
39127
39128 Like @command{guix system reconfigure}, @command{guix deploy} compares
39129 the channel commits currently deployed on the remote host (as returned
39130 by @command{guix system describe}) to those currently in use (as
39131 returned by @command{guix describe}) to determine whether commits
39132 currently in use are descendants of those deployed. When this is not
39133 the case and @code{allow-downgrades?} is false, it raises an error.
39134 This ensures you do not accidentally downgrade remote machines.
39135
39136 @item @code{safety-checks?} (default: @code{#t})
39137 Whether to perform ``safety checks'' before deployment. This includes
39138 verifying that devices and file systems referred to in the operating
39139 system configuration actually exist on the target machine, and making
39140 sure that Linux modules required to access storage devices at boot time
39141 are listed in the @code{initrd-modules} field of the operating system.
39142
39143 These safety checks ensure that you do not inadvertently deploy a system
39144 that would fail to boot. Be careful before turning them off!
39145 @end table
39146 @end deftp
39147
39148 @deftp {Data Type} digital-ocean-configuration
39149 This is the data type describing the Droplet that should be created for a
39150 machine with an @code{environment} of @code{digital-ocean-environment-type}.
39151
39152 @table @asis
39153 @item @code{ssh-key}
39154 The path to the SSH private key to use to authenticate with the remote
39155 host. In the future, this field may not exist.
39156 @item @code{tags}
39157 A list of string ``tags'' that uniquely identify the machine. Must be given
39158 such that no two machines in the deployment have the same set of tags.
39159 @item @code{region}
39160 A Digital Ocean region slug, such as @code{"nyc3"}.
39161 @item @code{size}
39162 A Digital Ocean size slug, such as @code{"s-1vcpu-1gb"}
39163 @item @code{enable-ipv6?}
39164 Whether or not the droplet should be created with IPv6 networking.
39165 @end table
39166 @end deftp
39167
39168 @node Running Guix in a VM
39169 @section Running Guix in a Virtual Machine
39170
39171 @cindex virtual machine
39172 To run Guix in a virtual machine (VM), one can use the pre-built Guix VM
39173 image distributed at
39174 @url{@value{BASE-URL}/guix-system-vm-image-@value{VERSION}.x86_64-linux.qcow2}.
39175 This image is a compressed image in QCOW format. You can pass it to an
39176 emulator such as @uref{https://qemu.org/, QEMU} (see below for details).
39177
39178 This image boots the Xfce graphical environment and it contains some
39179 commonly used tools. You can install more software in the image by running
39180 @command{guix package} in a terminal (@pxref{Invoking guix package}). You can
39181 also reconfigure the system based on its initial configuration file available
39182 as @file{/run/current-system/configuration.scm} (@pxref{Using the
39183 Configuration System}).
39184
39185 Instead of using this pre-built image, one can also build their own
39186 image using @command{guix system image} (@pxref{Invoking guix system}).
39187
39188 @cindex QEMU
39189 If you built your own image, you must copy it out of the store
39190 (@pxref{The Store}) and give yourself permission to write to the copy
39191 before you can use it. When invoking QEMU, you must choose a system
39192 emulator that is suitable for your hardware platform. Here is a minimal
39193 QEMU invocation that will boot the result of @command{guix system
39194 image -t qcow2} on x86_64 hardware:
39195
39196 @example
39197 $ qemu-system-x86_64 \
39198 -nic user,model=virtio-net-pci \
39199 -enable-kvm -m 2048 \
39200 -device virtio-blk,drive=myhd \
39201 -drive if=none,file=/tmp/qemu-image,id=myhd
39202 @end example
39203
39204 Here is what each of these options means:
39205
39206 @table @code
39207 @item qemu-system-x86_64
39208 This specifies the hardware platform to emulate. This should match the
39209 host.
39210
39211 @item -nic user,model=virtio-net-pci
39212 Enable the unprivileged user-mode network stack. The guest OS can
39213 access the host but not vice versa. This is the simplest way to get the
39214 guest OS online. @code{model} specifies which network device to emulate:
39215 @code{virtio-net-pci} is a special device made for virtualized operating
39216 systems and recommended for most uses. Assuming your hardware platform is
39217 x86_64, you can get a list of available NIC models by running
39218 @command{qemu-system-x86_64 -nic model=help}.
39219
39220 @item -enable-kvm
39221 If your system has hardware virtualization extensions, enabling the
39222 virtual machine support (KVM) of the Linux kernel will make things run
39223 faster.
39224
39225 @c To run Xfce + 'guix pull', we need at least 1G of RAM.
39226 @item -m 2048
39227 RAM available to the guest OS, in mebibytes. Defaults to 128@tie{}MiB,
39228 which may be insufficient for some operations.
39229
39230 @item -device virtio-blk,drive=myhd
39231 Create a @code{virtio-blk} drive called ``myhd''. @code{virtio-blk} is a
39232 ``paravirtualization'' mechanism for block devices that allows QEMU to achieve
39233 better performance than if it were emulating a complete disk drive. See the
39234 QEMU and KVM documentation for more info.
39235
39236 @item -drive if=none,file=/tmp/qemu-image,id=myhd
39237 Use our QCOW image, the @file{/tmp/qemu-image} file, as the backing
39238 store of the ``myhd'' drive.
39239 @end table
39240
39241 The default @command{run-vm.sh} script that is returned by an invocation of
39242 @command{guix system vm} does not add a @command{-nic user} flag by default.
39243 To get network access from within the vm add the @code{(dhcp-client-service)}
39244 to your system definition and start the VM using
39245 @command{$(guix system vm config.scm) -nic user}. An important caveat of using
39246 @command{-nic user} for networking is that @command{ping} will not work, because
39247 it uses the ICMP protocol. You'll have to use a different command to check for
39248 network connectivity, for example @command{guix download}.
39249
39250 @subsection Connecting Through SSH
39251
39252 @cindex SSH
39253 @cindex SSH server
39254 To enable SSH inside a VM you need to add an SSH server like
39255 @code{openssh-service-type} to your VM (@pxref{Networking Services,
39256 @code{openssh-service-type}}). In addition you need to forward the SSH port,
39257 22 by default, to the host. You can do this with
39258
39259 @example
39260 $(guix system vm config.scm) -nic user,model=virtio-net-pci,hostfwd=tcp::10022-:22
39261 @end example
39262
39263 To connect to the VM you can run
39264
39265 @example
39266 ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 10022 localhost
39267 @end example
39268
39269 The @command{-p} tells @command{ssh} the port you want to connect to.
39270 @command{-o UserKnownHostsFile=/dev/null} prevents @command{ssh} from complaining
39271 every time you modify your @command{config.scm} file and the
39272 @command{-o StrictHostKeyChecking=no} prevents you from having to allow a
39273 connection to an unknown host every time you connect.
39274
39275 @quotation Note
39276 If you find the above @samp{hostfwd} example not to be working (e.g.,
39277 your SSH client hangs attempting to connect to the mapped port of your
39278 VM), make sure that your Guix System VM has networking support, such as
39279 by using the @code{dhcp-client-service-type} service type.
39280 @end quotation
39281
39282 @subsection Using @command{virt-viewer} with Spice
39283
39284 As an alternative to the default @command{qemu} graphical client you can
39285 use the @command{remote-viewer} from the @command{virt-viewer} package. To
39286 connect pass the @command{-spice port=5930,disable-ticketing} flag to
39287 @command{qemu}. See previous section for further information on how to do this.
39288
39289 Spice also allows you to do some nice stuff like share your clipboard with your
39290 VM@. To enable that you'll also have to pass the following flags to @command{qemu}:
39291
39292 @example
39293 -device virtio-serial-pci,id=virtio-serial0,max_ports=16,bus=pci.0,addr=0x5
39294 -chardev spicevmc,name=vdagent,id=vdagent
39295 -device virtserialport,nr=1,bus=virtio-serial0.0,chardev=vdagent,\
39296 name=com.redhat.spice.0
39297 @end example
39298
39299 You'll also need to add the @code{(spice-vdagent-service)} to your
39300 system definition (@pxref{Miscellaneous Services, Spice service}).
39301
39302 @node Defining Services
39303 @section Defining Services
39304
39305 The previous sections show the available services and how one can combine
39306 them in an @code{operating-system} declaration. But how do we define
39307 them in the first place? And what is a service anyway?
39308
39309 @menu
39310 * Service Composition:: The model for composing services.
39311 * Service Types and Services:: Types and services.
39312 * Service Reference:: API reference.
39313 * Shepherd Services:: A particular type of service.
39314 * Complex Configurations:: Defining bindings for complex configurations.
39315 @end menu
39316
39317 @node Service Composition
39318 @subsection Service Composition
39319
39320 @cindex services
39321 @cindex daemons
39322 Here we define a @dfn{service} as, broadly, something that extends the
39323 functionality of the operating system. Often a service is a process---a
39324 @dfn{daemon}---started when the system boots: a secure shell server, a
39325 Web server, the Guix build daemon, etc. Sometimes a service is a daemon
39326 whose execution can be triggered by another daemon---e.g., an FTP server
39327 started by @command{inetd} or a D-Bus service activated by
39328 @command{dbus-daemon}. Occasionally, a service does not map to a
39329 daemon. For instance, the ``account'' service collects user accounts
39330 and makes sure they exist when the system runs; the ``udev'' service
39331 collects device management rules and makes them available to the eudev
39332 daemon; the @file{/etc} service populates the @file{/etc} directory
39333 of the system.
39334
39335 @cindex service extensions
39336 Guix system services are connected by @dfn{extensions}. For instance, the
39337 secure shell service @emph{extends} the Shepherd---the
39338 initialization system, running as PID@tie{}1---by giving it the command
39339 lines to start and stop the secure shell daemon (@pxref{Networking
39340 Services, @code{openssh-service-type}}); the UPower service extends the D-Bus
39341 service by passing it its @file{.service} specification, and extends the
39342 udev service by passing it device management rules (@pxref{Desktop
39343 Services, @code{upower-service}}); the Guix daemon service extends the
39344 Shepherd by passing it the command lines to start and stop the daemon,
39345 and extends the account service by passing it a list of required build
39346 user accounts (@pxref{Base Services}).
39347
39348 All in all, services and their ``extends'' relations form a directed
39349 acyclic graph (DAG). If we represent services as boxes and extensions
39350 as arrows, a typical system might provide something like this:
39351
39352 @image{images/service-graph,,5in,Typical service extension graph.}
39353
39354 @cindex system service
39355 At the bottom, we see the @dfn{system service}, which produces the
39356 directory containing everything to run and boot the system, as returned
39357 by the @command{guix system build} command. @xref{Service Reference},
39358 to learn about the other service types shown here.
39359 @xref{system-extension-graph, the @command{guix system extension-graph}
39360 command}, for information on how to generate this representation for a
39361 particular operating system definition.
39362
39363 @cindex service types
39364 Technically, developers can define @dfn{service types} to express these
39365 relations. There can be any number of services of a given type on the
39366 system---for instance, a system running two instances of the GNU secure
39367 shell server (lsh) has two instances of @code{lsh-service-type}, with
39368 different parameters.
39369
39370 The following section describes the programming interface for service
39371 types and services.
39372
39373 @node Service Types and Services
39374 @subsection Service Types and Services
39375
39376 A @dfn{service type} is a node in the DAG described above. Let us start
39377 with a simple example, the service type for the Guix build daemon
39378 (@pxref{Invoking guix-daemon}):
39379
39380 @lisp
39381 (define guix-service-type
39382 (service-type
39383 (name 'guix)
39384 (extensions
39385 (list (service-extension shepherd-root-service-type guix-shepherd-service)
39386 (service-extension account-service-type guix-accounts)
39387 (service-extension activation-service-type guix-activation)))
39388 (default-value (guix-configuration))))
39389 @end lisp
39390
39391 @noindent
39392 It defines three things:
39393
39394 @enumerate
39395 @item
39396 A name, whose sole purpose is to make inspection and debugging easier.
39397
39398 @item
39399 A list of @dfn{service extensions}, where each extension designates the
39400 target service type and a procedure that, given the parameters of the
39401 service, returns a list of objects to extend the service of that type.
39402
39403 Every service type has at least one service extension. The only
39404 exception is the @dfn{boot service type}, which is the ultimate service.
39405
39406 @item
39407 Optionally, a default value for instances of this type.
39408 @end enumerate
39409
39410 In this example, @code{guix-service-type} extends three services:
39411
39412 @table @code
39413 @item shepherd-root-service-type
39414 The @code{guix-shepherd-service} procedure defines how the Shepherd
39415 service is extended. Namely, it returns a @code{<shepherd-service>}
39416 object that defines how @command{guix-daemon} is started and stopped
39417 (@pxref{Shepherd Services}).
39418
39419 @item account-service-type
39420 This extension for this service is computed by @code{guix-accounts},
39421 which returns a list of @code{user-group} and @code{user-account}
39422 objects representing the build user accounts (@pxref{Invoking
39423 guix-daemon}).
39424
39425 @item activation-service-type
39426 Here @code{guix-activation} is a procedure that returns a gexp, which is
39427 a code snippet to run at ``activation time''---e.g., when the service is
39428 booted.
39429 @end table
39430
39431 A service of this type is instantiated like this:
39432
39433 @lisp
39434 (service guix-service-type
39435 (guix-configuration
39436 (build-accounts 5)
39437 (extra-options '("--gc-keep-derivations"))))
39438 @end lisp
39439
39440 The second argument to the @code{service} form is a value representing
39441 the parameters of this specific service instance.
39442 @xref{guix-configuration-type, @code{guix-configuration}}, for
39443 information about the @code{guix-configuration} data type. When the
39444 value is omitted, the default value specified by
39445 @code{guix-service-type} is used:
39446
39447 @lisp
39448 (service guix-service-type)
39449 @end lisp
39450
39451 @code{guix-service-type} is quite simple because it extends other
39452 services but is not extensible itself.
39453
39454 @c @subsubsubsection Extensible Service Types
39455
39456 The service type for an @emph{extensible} service looks like this:
39457
39458 @lisp
39459 (define udev-service-type
39460 (service-type (name 'udev)
39461 (extensions
39462 (list (service-extension shepherd-root-service-type
39463 udev-shepherd-service)))
39464
39465 (compose concatenate) ;concatenate the list of rules
39466 (extend (lambda (config rules)
39467 (match config
39468 (($ <udev-configuration> udev initial-rules)
39469 (udev-configuration
39470 (udev udev) ;the udev package to use
39471 (rules (append initial-rules rules)))))))))
39472 @end lisp
39473
39474 This is the service type for the
39475 @uref{https://wiki.gentoo.org/wiki/Project:Eudev, eudev device
39476 management daemon}. Compared to the previous example, in addition to an
39477 extension of @code{shepherd-root-service-type}, we see two new fields:
39478
39479 @table @code
39480 @item compose
39481 This is the procedure to @dfn{compose} the list of extensions to
39482 services of this type.
39483
39484 Services can extend the udev service by passing it lists of rules; we
39485 compose those extensions simply by concatenating them.
39486
39487 @item extend
39488 This procedure defines how the value of the service is @dfn{extended} with
39489 the composition of the extensions.
39490
39491 Udev extensions are composed into a list of rules, but the udev service
39492 value is itself a @code{<udev-configuration>} record. So here, we
39493 extend that record by appending the list of rules it contains to the
39494 list of contributed rules.
39495
39496 @item description
39497 This is a string giving an overview of the service type. The string can
39498 contain Texinfo markup (@pxref{Overview,,, texinfo, GNU Texinfo}). The
39499 @command{guix system search} command searches these strings and displays
39500 them (@pxref{Invoking guix system}).
39501 @end table
39502
39503 There can be only one instance of an extensible service type such as
39504 @code{udev-service-type}. If there were more, the
39505 @code{service-extension} specifications would be ambiguous.
39506
39507 Still here? The next section provides a reference of the programming
39508 interface for services.
39509
39510 @node Service Reference
39511 @subsection Service Reference
39512
39513 We have seen an overview of service types (@pxref{Service Types and
39514 Services}). This section provides a reference on how to manipulate
39515 services and service types. This interface is provided by the
39516 @code{(gnu services)} module.
39517
39518 @deffn {Scheme Procedure} service @var{type} [@var{value}]
39519 Return a new service of @var{type}, a @code{<service-type>} object (see
39520 below). @var{value} can be any object; it represents the parameters of
39521 this particular service instance.
39522
39523 When @var{value} is omitted, the default value specified by @var{type}
39524 is used; if @var{type} does not specify a default value, an error is
39525 raised.
39526
39527 For instance, this:
39528
39529 @lisp
39530 (service openssh-service-type)
39531 @end lisp
39532
39533 @noindent
39534 is equivalent to this:
39535
39536 @lisp
39537 (service openssh-service-type
39538 (openssh-configuration))
39539 @end lisp
39540
39541 In both cases the result is an instance of @code{openssh-service-type}
39542 with the default configuration.
39543 @end deffn
39544
39545 @deffn {Scheme Procedure} service? @var{obj}
39546 Return true if @var{obj} is a service.
39547 @end deffn
39548
39549 @deffn {Scheme Procedure} service-kind @var{service}
39550 Return the type of @var{service}---i.e., a @code{<service-type>} object.
39551 @end deffn
39552
39553 @deffn {Scheme Procedure} service-value @var{service}
39554 Return the value associated with @var{service}. It represents its
39555 parameters.
39556 @end deffn
39557
39558 Here is an example of how a service is created and manipulated:
39559
39560 @lisp
39561 (define s
39562 (service nginx-service-type
39563 (nginx-configuration
39564 (nginx nginx)
39565 (log-directory log-directory)
39566 (run-directory run-directory)
39567 (file config-file))))
39568
39569 (service? s)
39570 @result{} #t
39571
39572 (eq? (service-kind s) nginx-service-type)
39573 @result{} #t
39574 @end lisp
39575
39576 The @code{modify-services} form provides a handy way to change the
39577 parameters of some of the services of a list such as
39578 @code{%base-services} (@pxref{Base Services, @code{%base-services}}). It
39579 evaluates to a list of services. Of course, you could always use
39580 standard list combinators such as @code{map} and @code{fold} to do that
39581 (@pxref{SRFI-1, List Library,, guile, GNU Guile Reference Manual});
39582 @code{modify-services} simply provides a more concise form for this
39583 common pattern.
39584
39585 @deffn {Scheme Syntax} modify-services @var{services} @
39586 (@var{type} @var{variable} => @var{body}) @dots{}
39587
39588 Modify the services listed in @var{services} according to the given
39589 clauses. Each clause has the form:
39590
39591 @example
39592 (@var{type} @var{variable} => @var{body})
39593 @end example
39594
39595 where @var{type} is a service type---e.g.,
39596 @code{guix-service-type}---and @var{variable} is an identifier that is
39597 bound within the @var{body} to the service parameters---e.g., a
39598 @code{guix-configuration} instance---of the original service of that
39599 @var{type}.
39600
39601 The @var{body} should evaluate to the new service parameters, which will
39602 be used to configure the new service. This new service will replace the
39603 original in the resulting list. Because a service's service parameters
39604 are created using @code{define-record-type*}, you can write a succinct
39605 @var{body} that evaluates to the new service parameters by using the
39606 @code{inherit} feature that @code{define-record-type*} provides.
39607
39608 Clauses can also have the following form:
39609
39610 @lisp
39611 (delete @var{type})
39612 @end lisp
39613
39614 Such a clause removes all services of the given @var{type} from
39615 @var{services}.
39616
39617 @xref{Using the Configuration System}, for example usage.
39618
39619 @end deffn
39620
39621 Next comes the programming interface for service types. This is
39622 something you want to know when writing new service definitions, but not
39623 necessarily when simply looking for ways to customize your
39624 @code{operating-system} declaration.
39625
39626 @deftp {Data Type} service-type
39627 @cindex service type
39628 This is the representation of a @dfn{service type} (@pxref{Service Types
39629 and Services}).
39630
39631 @table @asis
39632 @item @code{name}
39633 This is a symbol, used only to simplify inspection and debugging.
39634
39635 @item @code{extensions}
39636 A non-empty list of @code{<service-extension>} objects (see below).
39637
39638 @item @code{compose} (default: @code{#f})
39639 If this is @code{#f}, then the service type denotes services that cannot
39640 be extended---i.e., services that do not receive ``values'' from other
39641 services.
39642
39643 Otherwise, it must be a one-argument procedure. The procedure is called
39644 by @code{fold-services} and is passed a list of values collected from
39645 extensions. It may return any single value.
39646
39647 @item @code{extend} (default: @code{#f})
39648 If this is @code{#f}, services of this type cannot be extended.
39649
39650 Otherwise, it must be a two-argument procedure: @code{fold-services}
39651 calls it, passing it the initial value of the service as the first
39652 argument and the result of applying @code{compose} to the extension
39653 values as the second argument. It must return a value that is a valid
39654 parameter value for the service instance.
39655
39656 @item @code{description}
39657 This is a string, possibly using Texinfo markup, describing in a couple
39658 of sentences what the service is about. This string allows users to
39659 find about the service through @command{guix system search}
39660 (@pxref{Invoking guix system}).
39661
39662 @item @code{default-value} (default: @code{&no-default-value})
39663 The default value associated for instances of this service type. This
39664 allows users to use the @code{service} form without its second argument:
39665
39666 @lisp
39667 (service @var{type})
39668 @end lisp
39669
39670 The returned service in this case has the default value specified by
39671 @var{type}.
39672 @end table
39673
39674 @xref{Service Types and Services}, for examples.
39675 @end deftp
39676
39677 @deffn {Scheme Procedure} service-extension @var{target-type} @
39678 @var{compute}
39679 Return a new extension for services of type @var{target-type}.
39680 @var{compute} must be a one-argument procedure: @code{fold-services}
39681 calls it, passing it the value associated with the service that provides
39682 the extension; it must return a valid value for the target service.
39683 @end deffn
39684
39685 @deffn {Scheme Procedure} service-extension? @var{obj}
39686 Return true if @var{obj} is a service extension.
39687 @end deffn
39688
39689 Occasionally, you might want to simply extend an existing service. This
39690 involves creating a new service type and specifying the extension of
39691 interest, which can be verbose; the @code{simple-service} procedure
39692 provides a shorthand for this.
39693
39694 @deffn {Scheme Procedure} simple-service @var{name} @var{target} @var{value}
39695 Return a service that extends @var{target} with @var{value}. This works
39696 by creating a singleton service type @var{name}, of which the returned
39697 service is an instance.
39698
39699 For example, this extends mcron (@pxref{Scheduled Job Execution}) with
39700 an additional job:
39701
39702 @lisp
39703 (simple-service 'my-mcron-job mcron-service-type
39704 #~(job '(next-hour (3)) "guix gc -F 2G"))
39705 @end lisp
39706 @end deffn
39707
39708 At the core of the service abstraction lies the @code{fold-services}
39709 procedure, which is responsible for ``compiling'' a list of services
39710 down to a single directory that contains everything needed to boot and
39711 run the system---the directory shown by the @command{guix system build}
39712 command (@pxref{Invoking guix system}). In essence, it propagates
39713 service extensions down the service graph, updating each node parameters
39714 on the way, until it reaches the root node.
39715
39716 @deffn {Scheme Procedure} fold-services @var{services} @
39717 [#:target-type @var{system-service-type}]
39718 Fold @var{services} by propagating their extensions down to the root of
39719 type @var{target-type}; return the root service adjusted accordingly.
39720 @end deffn
39721
39722 Lastly, the @code{(gnu services)} module also defines several essential
39723 service types, some of which are listed below.
39724
39725 @defvr {Scheme Variable} system-service-type
39726 This is the root of the service graph. It produces the system directory
39727 as returned by the @command{guix system build} command.
39728 @end defvr
39729
39730 @defvr {Scheme Variable} boot-service-type
39731 The type of the ``boot service'', which produces the @dfn{boot script}.
39732 The boot script is what the initial RAM disk runs when booting.
39733 @end defvr
39734
39735 @defvr {Scheme Variable} etc-service-type
39736 The type of the @file{/etc} service. This service is used to create
39737 files under @file{/etc} and can be extended by
39738 passing it name/file tuples such as:
39739
39740 @lisp
39741 (list `("issue" ,(plain-file "issue" "Welcome!\n")))
39742 @end lisp
39743
39744 In this example, the effect would be to add an @file{/etc/issue} file
39745 pointing to the given file.
39746 @end defvr
39747
39748 @defvr {Scheme Variable} setuid-program-service-type
39749 Type for the ``setuid-program service''. This service collects lists of
39750 executable file names, passed as gexps, and adds them to the set of
39751 setuid and setgid programs on the system (@pxref{Setuid Programs}).
39752 @end defvr
39753
39754 @defvr {Scheme Variable} profile-service-type
39755 Type of the service that populates the @dfn{system profile}---i.e., the
39756 programs under @file{/run/current-system/profile}. Other services can
39757 extend it by passing it lists of packages to add to the system profile.
39758 @end defvr
39759
39760 @cindex provenance tracking, of the operating system
39761 @anchor{provenance-service-type}
39762 @defvr {Scheme Variable} provenance-service-type
39763 This is the type of the service that records @dfn{provenance meta-data}
39764 in the system itself. It creates several files under
39765 @file{/run/current-system}:
39766
39767 @table @file
39768 @item channels.scm
39769 This is a ``channel file'' that can be passed to @command{guix pull -C}
39770 or @command{guix time-machine -C}, and which describes the channels used
39771 to build the system, if that information was available
39772 (@pxref{Channels}).
39773
39774 @item configuration.scm
39775 This is the file that was passed as the value for this
39776 @code{provenance-service-type} service. By default, @command{guix
39777 system reconfigure} automatically passes the OS configuration file it
39778 received on the command line.
39779
39780 @item provenance
39781 This contains the same information as the two other files but in a
39782 format that is more readily processable.
39783 @end table
39784
39785 In general, these two pieces of information (channels and configuration
39786 file) are enough to reproduce the operating system ``from source''.
39787
39788 @quotation Caveats
39789 This information is necessary to rebuild your operating system, but it
39790 is not always sufficient. In particular, @file{configuration.scm}
39791 itself is insufficient if it is not self-contained---if it refers to
39792 external Guile modules or to extra files. If you want
39793 @file{configuration.scm} to be self-contained, we recommend that modules
39794 or files it refers to be part of a channel.
39795
39796 Besides, provenance meta-data is ``silent'' in the sense that it does
39797 not change the bits contained in your system, @emph{except for the
39798 meta-data bits themselves}. Two different OS configurations or sets of
39799 channels can lead to the same system, bit-for-bit; when
39800 @code{provenance-service-type} is used, these two systems will have
39801 different meta-data and thus different store file names, which makes
39802 comparison less trivial.
39803 @end quotation
39804
39805 This service is automatically added to your operating system
39806 configuration when you use @command{guix system reconfigure},
39807 @command{guix system init}, or @command{guix deploy}.
39808 @end defvr
39809
39810 @defvr {Scheme Variable} linux-loadable-module-service-type
39811 Type of the service that collects lists of packages containing
39812 kernel-loadable modules, and adds them to the set of kernel-loadable
39813 modules.
39814
39815 This service type is intended to be extended by other service types,
39816 such as below:
39817
39818 @lisp
39819 (simple-service 'installing-module
39820 linux-loadable-module-service-type
39821 (list module-to-install-1
39822 module-to-install-2))
39823 @end lisp
39824
39825 This does not actually load modules at bootup, only adds it to the
39826 kernel profile so that it @emph{can} be loaded by other means.
39827 @end defvr
39828
39829 @node Shepherd Services
39830 @subsection Shepherd Services
39831
39832 @cindex shepherd services
39833 @cindex PID 1
39834 @cindex init system
39835 The @code{(gnu services shepherd)} module provides a way to define
39836 services managed by the GNU@tie{}Shepherd, which is the
39837 initialization system---the first process that is started when the
39838 system boots, also known as PID@tie{}1
39839 (@pxref{Introduction,,, shepherd, The GNU Shepherd Manual}).
39840
39841 Services in the Shepherd can depend on each other. For instance, the
39842 SSH daemon may need to be started after the syslog daemon has been
39843 started, which in turn can only happen once all the file systems have
39844 been mounted. The simple operating system defined earlier (@pxref{Using
39845 the Configuration System}) results in a service graph like this:
39846
39847 @image{images/shepherd-graph,,5in,Typical shepherd service graph.}
39848
39849 You can actually generate such a graph for any operating system
39850 definition using the @command{guix system shepherd-graph} command
39851 (@pxref{system-shepherd-graph, @command{guix system shepherd-graph}}).
39852
39853 The @code{%shepherd-root-service} is a service object representing
39854 PID@tie{}1, of type @code{shepherd-root-service-type}; it can be extended
39855 by passing it lists of @code{<shepherd-service>} objects.
39856
39857 @deftp {Data Type} shepherd-service
39858 The data type representing a service managed by the Shepherd.
39859
39860 @table @asis
39861 @item @code{provision}
39862 This is a list of symbols denoting what the service provides.
39863
39864 These are the names that may be passed to @command{herd start},
39865 @command{herd status}, and similar commands (@pxref{Invoking herd,,,
39866 shepherd, The GNU Shepherd Manual}). @xref{Slots of services, the
39867 @code{provides} slot,, shepherd, The GNU Shepherd Manual}, for details.
39868
39869 @item @code{requirement} (default: @code{'()})
39870 List of symbols denoting the Shepherd services this one depends on.
39871
39872 @cindex one-shot services, for the Shepherd
39873 @item @code{one-shot?} (default: @code{#f})
39874 Whether this service is @dfn{one-shot}. One-shot services stop immediately
39875 after their @code{start} action has completed. @xref{Slots of services,,,
39876 shepherd, The GNU Shepherd Manual}, for more info.
39877
39878 @item @code{respawn?} (default: @code{#t})
39879 Whether to restart the service when it stops, for instance when the
39880 underlying process dies.
39881
39882 @item @code{start}
39883 @itemx @code{stop} (default: @code{#~(const #f)})
39884 The @code{start} and @code{stop} fields refer to the Shepherd's
39885 facilities to start and stop processes (@pxref{Service De- and
39886 Constructors,,, shepherd, The GNU Shepherd Manual}). They are given as
39887 G-expressions that get expanded in the Shepherd configuration file
39888 (@pxref{G-Expressions}).
39889
39890 @item @code{actions} (default: @code{'()})
39891 @cindex actions, of Shepherd services
39892 This is a list of @code{shepherd-action} objects (see below) defining
39893 @dfn{actions} supported by the service, in addition to the standard
39894 @code{start} and @code{stop} actions. Actions listed here become available as
39895 @command{herd} sub-commands:
39896
39897 @example
39898 herd @var{action} @var{service} [@var{arguments}@dots{}]
39899 @end example
39900
39901 @item @code{auto-start?} (default: @code{#t})
39902 Whether this service should be started automatically by the Shepherd. If it
39903 is @code{#f} the service has to be started manually with @code{herd start}.
39904
39905 @item @code{documentation}
39906 A documentation string, as shown when running:
39907
39908 @example
39909 herd doc @var{service-name}
39910 @end example
39911
39912 where @var{service-name} is one of the symbols in @code{provision}
39913 (@pxref{Invoking herd,,, shepherd, The GNU Shepherd Manual}).
39914
39915 @item @code{modules} (default: @code{%default-modules})
39916 This is the list of modules that must be in scope when @code{start} and
39917 @code{stop} are evaluated.
39918
39919 @end table
39920 @end deftp
39921
39922 The example below defines a Shepherd service that spawns
39923 @command{syslogd}, the system logger from the GNU Networking Utilities
39924 (@pxref{syslogd invocation, @command{syslogd},, inetutils, GNU
39925 Inetutils}):
39926
39927 @example
39928 (let ((config (plain-file "syslogd.conf" "@dots{}")))
39929 (shepherd-service
39930 (documentation "Run the syslog daemon (syslogd).")
39931 (provision '(syslogd))
39932 (requirement '(user-processes))
39933 (start #~(make-forkexec-constructor
39934 (list #$(file-append inetutils "/libexec/syslogd")
39935 "--rcfile" #$config)
39936 #:pid-file "/var/run/syslog.pid"))
39937 (stop #~(make-kill-destructor))))
39938 @end example
39939
39940 Key elements in this example are the @code{start} and @code{stop}
39941 fields: they are @dfn{staged} code snippets that use the
39942 @code{make-forkexec-constructor} procedure provided by the Shepherd and
39943 its dual, @code{make-kill-destructor} (@pxref{Service De- and
39944 Constructors,,, shepherd, The GNU Shepherd Manual}). The @code{start}
39945 field will have @command{shepherd} spawn @command{syslogd} with the
39946 given option; note that we pass @code{config} after @option{--rcfile},
39947 which is a configuration file declared above (contents of this file are
39948 omitted). Likewise, the @code{stop} field tells how this service is to
39949 be stopped; in this case, it is stopped by making the @code{kill} system
39950 call on its PID@. Code staging is achieved using G-expressions:
39951 @code{#~} stages code, while @code{#$} ``escapes'' back to host code
39952 (@pxref{G-Expressions}).
39953
39954 @deftp {Data Type} shepherd-action
39955 This is the data type that defines additional actions implemented by a
39956 Shepherd service (see above).
39957
39958 @table @code
39959 @item name
39960 Symbol naming the action.
39961
39962 @item documentation
39963 This is a documentation string for the action. It can be viewed by running:
39964
39965 @example
39966 herd doc @var{service} action @var{action}
39967 @end example
39968
39969 @item procedure
39970 This should be a gexp that evaluates to a procedure of at least one argument,
39971 which is the ``running value'' of the service (@pxref{Slots of services,,,
39972 shepherd, The GNU Shepherd Manual}).
39973 @end table
39974
39975 The following example defines an action called @code{say-hello} that kindly
39976 greets the user:
39977
39978 @lisp
39979 (shepherd-action
39980 (name 'say-hello)
39981 (documentation "Say hi!")
39982 (procedure #~(lambda (running . args)
39983 (format #t "Hello, friend! arguments: ~s\n"
39984 args)
39985 #t)))
39986 @end lisp
39987
39988 Assuming this action is added to the @code{example} service, then you can do:
39989
39990 @example
39991 # herd say-hello example
39992 Hello, friend! arguments: ()
39993 # herd say-hello example a b c
39994 Hello, friend! arguments: ("a" "b" "c")
39995 @end example
39996
39997 This, as you can see, is a fairly sophisticated way to say hello.
39998 @xref{Service Convenience,,, shepherd, The GNU Shepherd Manual}, for more
39999 info on actions.
40000 @end deftp
40001
40002 @defvr {Scheme Variable} shepherd-root-service-type
40003 The service type for the Shepherd ``root service''---i.e., PID@tie{}1.
40004
40005 This is the service type that extensions target when they want to create
40006 shepherd services (@pxref{Service Types and Services}, for an example).
40007 Each extension must pass a list of @code{<shepherd-service>}. Its
40008 value must be a @code{shepherd-configuration}, as described below.
40009 @end defvr
40010
40011 @deftp {Data Type} shepherd-configuration
40012 This data type represents the Shepherd's configuration.
40013
40014 @table @code
40015 @item shepherd (default: @code{shepherd})
40016 The Shepherd package to use.
40017
40018 @item services (default: @code{'()})
40019 A list of @code{<shepherd-service>} to start.
40020 You should probably use the service extension
40021 mechanism instead (@pxref{Shepherd Services}).
40022 @end table
40023 @end deftp
40024
40025 The following example specifies the Shepherd package for the operating
40026 system:
40027
40028 @lisp
40029 (operating-system
40030 ;; ...
40031 (services (append (list openssh-service-type))
40032 ;; ...
40033 %desktop-services)
40034 ;; ...
40035 ;; Use own Shepherd package.
40036 (essential-services
40037 (modify-services (operating-system-default-essential-services
40038 this-operating-system)
40039 (shepherd-root-service-type config => (shepherd-configuration
40040 (inherit config)
40041 (shepherd my-shepherd))))))
40042 @end lisp
40043
40044 @defvr {Scheme Variable} %shepherd-root-service
40045 This service represents PID@tie{}1.
40046 @end defvr
40047
40048 @node Complex Configurations
40049 @subsection Complex Configurations
40050 @cindex complex configurations
40051 Some programs might have rather complex configuration files or formats,
40052 and to make it easier to create Scheme bindings for these configuration
40053 files, you can use the utilities defined in the @code{(gnu services
40054 configuration)} module.
40055
40056 The main utility is the @code{define-configuration} macro, which you
40057 will use to define a Scheme record type (@pxref{Record Overview,,,
40058 guile, GNU Guile Reference Manual}). The Scheme record will be
40059 serialized to a configuration file by using @dfn{serializers}, which are
40060 procedures that take some kind of Scheme value and returns a
40061 G-expression (@pxref{G-Expressions}), which should, once serialized to
40062 the disk, return a string. More details are listed below.
40063
40064 @deffn {Scheme Syntax} define-configuration @var{name} @var{clause1} @
40065 @var{clause2} ...
40066 Create a record type named @code{@var{name}} that contains the
40067 fields found in the clauses.
40068
40069 A clause can have one of the following forms:
40070
40071 @example
40072 (@var{field-name}
40073 (@var{type} @var{default-value})
40074 @var{documentation})
40075
40076 (@var{field-name}
40077 (@var{type} @var{default-value})
40078 @var{documentation}
40079 @var{serializer})
40080
40081 (@var{field-name}
40082 (@var{type})
40083 @var{documentation})
40084
40085 (@var{field-name}
40086 (@var{type})
40087 @var{documentation}
40088 @var{serializer})
40089 @end example
40090
40091 @var{field-name} is an identifier that denotes the name of the field in
40092 the generated record.
40093
40094 @var{type} is the type of the value corresponding to @var{field-name};
40095 since Guile is untyped, a predicate
40096 procedure---@code{@var{type}?}---will be called on the value
40097 corresponding to the field to ensure that the value is of the correct
40098 type. This means that if say, @var{type} is @code{package}, then a
40099 procedure named @code{package?} will be applied on the value to make
40100 sure that it is indeed a @code{<package>} object.
40101
40102 @var{default-value} is the default value corresponding to the field; if
40103 none is specified, the user is forced to provide a value when creating
40104 an object of the record type.
40105
40106 @c XXX: Should these be full sentences or are they allow to be very
40107 @c short like package synopses?
40108 @var{documentation} is a string formatted with Texinfo syntax which
40109 should provide a description of what setting this field does.
40110
40111 @var{serializer} is the name of a procedure which takes two arguments,
40112 the first is the name of the field, and the second is the value
40113 corresponding to the field. The procedure should return a string or
40114 G-expression (@pxref{G-Expressions}) that represents the content that
40115 will be serialized to the configuration file. If none is specified, a
40116 procedure of the name @code{serialize-@var{type}} will be used.
40117
40118 A simple serializer procedure could look like this:
40119
40120 @lisp
40121 (define (serialize-boolean field-name value)
40122 (let ((value (if value "true" "false")))
40123 #~(string-append #$field-name #$value)))
40124 @end lisp
40125
40126 In some cases multiple different configuration records might be defined
40127 in the same file, but their serializers for the same type might have to
40128 be different, because they have different configuration formats. For
40129 example, the @code{serialize-boolean} procedure for the Getmail service
40130 would have to be different from the one for the Transmission service. To
40131 make it easier to deal with this situation, one can specify a serializer
40132 prefix by using the @code{prefix} literal in the
40133 @code{define-configuration} form. This means that one doesn't have to
40134 manually specify a custom @var{serializer} for every field.
40135
40136 @lisp
40137 (define (foo-serialize-string field-name value)
40138 @dots{})
40139
40140 (define (bar-serialize-string field-name value)
40141 @dots{})
40142
40143 (define-configuration foo-configuration
40144 (label
40145 (string)
40146 "The name of label.")
40147 (prefix foo-))
40148
40149 (define-configuration bar-configuration
40150 (ip-address
40151 (string)
40152 "The IPv4 address for this device.")
40153 (prefix bar-))
40154 @end lisp
40155
40156 However, in some cases you might not want to serialize any of the values
40157 of the record, to do this, you can use the @code{no-serialization}
40158 literal. There is also the @code{define-configuration/no-serialization}
40159 macro which is a shorthand of this.
40160
40161 @lisp
40162 ;; Nothing will be serialized to disk.
40163 (define-configuration foo-configuration
40164 (field
40165 (string "test")
40166 "Some documentation.")
40167 (no-serialization))
40168
40169 ;; The same thing as above.
40170 (define-configuration/no-serialization bar-configuration
40171 (field
40172 (string "test")
40173 "Some documentation."))
40174 @end lisp
40175 @end deffn
40176
40177 @deffn {Scheme Syntax} define-maybe @var{type}
40178 Sometimes a field should not be serialized if the user doesn’t specify a
40179 value. To achieve this, you can use the @code{define-maybe} macro to
40180 define a ``maybe type''; if the value of a maybe type is left unset, or
40181 is set to the @code{%unset-value} value, then it will not be serialized.
40182
40183 When defining a ``maybe type'', the corresponding serializer for the
40184 regular type will be used by default. For example, a field of type
40185 @code{maybe-string} will be serialized using the @code{serialize-string}
40186 procedure by default, you can of course change this by specifying a
40187 custom serializer procedure. Likewise, the type of the value would have
40188 to be a string, or left unspecified.
40189
40190 @lisp
40191 (define-maybe string)
40192
40193 (define (serialize-string field-name value)
40194 @dots{})
40195
40196 (define-configuration baz-configuration
40197 (name
40198 ;; If set to a string, the `serialize-string' procedure will be used
40199 ;; to serialize the string. Otherwise this field is not serialized.
40200 maybe-string
40201 "The name of this module."))
40202 @end lisp
40203
40204 Like with @code{define-configuration}, one can set a prefix for the
40205 serializer name by using the @code{prefix} literal.
40206
40207 @lisp
40208 (define-maybe integer
40209 (prefix baz-))
40210
40211 (define (baz-serialize-integer field-name value)
40212 @dots{})
40213 @end lisp
40214
40215 There is also the @code{no-serialization} literal, which when set means
40216 that no serializer will be defined for the ``maybe type'', regardless of
40217 whether its value is set or not.
40218 @code{define-maybe/no-serialization} is a shorthand for specifying the
40219 @code{no-serialization} literal.
40220
40221 @lisp
40222 (define-maybe/no-serialization symbol)
40223
40224 (define-configuration/no-serialization test-configuration
40225 (mode
40226 maybe-symbol
40227 "Docstring."))
40228 @end lisp
40229 @end deffn
40230
40231 @deffn (Scheme Procedure) maybe-value-set? @var{value}
40232 Predicate to check whether a user explicitly specified the value of a
40233 maybe field.
40234 @end deffn
40235
40236 @deffn {Scheme Procedure} serialize-configuration @var{configuration} @
40237 @var{fields}
40238 Return a G-expression that contains the values corresponding to the
40239 @var{fields} of @var{configuration}, a record that has been generated by
40240 @code{define-configuration}. The G-expression can then be serialized to
40241 disk by using something like @code{mixed-text-file}.
40242 @end deffn
40243
40244 @deffn {Scheme Procedure} empty-serializer @var{field-name} @var{value}
40245 A serializer that just returns an empty string. The
40246 @code{serialize-package} procedure is an alias for this.
40247 @end deffn
40248
40249 Once you have defined a configuration record, you will most likely also
40250 want to document it so that other people know to use it. To help with
40251 that, there are two procedures, both of which are documented below.
40252
40253 @deffn {Scheme Procedure} generate-documentation @var{documentation} @
40254 @var{documentation-name}
40255 Generate a Texinfo fragment from the docstrings in @var{documentation},
40256 a list of @code{(@var{label} @var{fields} @var{sub-documentation} ...)}.
40257 @var{label} should be a symbol and should be the name of the
40258 configuration record. @var{fields} should be a list of all the fields
40259 available for the configuration record.
40260
40261 @var{sub-documentation} is a @code{(@var{field-name}
40262 @var{configuration-name})} tuple. @var{field-name} is the name of the
40263 field which takes another configuration record as its value, and
40264 @var{configuration-name} is the name of that configuration record.
40265
40266 @var{sub-documentation} is only needed if there are nested configuration
40267 records. For example, the @code{getmail-configuration} record
40268 (@pxref{Mail Services}) accepts a @code{getmail-configuration-file}
40269 record in one of its @code{rcfile} field, therefore documentation for
40270 @code{getmail-configuration-file} is nested in
40271 @code{getmail-configuration}.
40272
40273 @lisp
40274 (generate-documentation
40275 `((getmail-configuration ,getmail-configuration-fields
40276 (rcfile getmail-configuration-file))
40277 @dots{})
40278 'getmail-configuration)
40279 @end lisp
40280
40281 @var{documentation-name} should be a symbol and should be the name of
40282 the configuration record.
40283
40284 @end deffn
40285
40286 @deffn {Scheme Procedure} configuration->documentation
40287 @var{configuration-symbol}
40288 Take @var{configuration-symbol}, the symbol corresponding to the name
40289 used when defining a configuration record with
40290 @code{define-configuration}, and print the Texinfo documentation of its
40291 fields. This is useful if there aren’t any nested configuration records
40292 since it only prints the documentation for the top-level fields.
40293 @end deffn
40294
40295 As of right now, there is no automated way to generate documentation for
40296 configuration records and put them in the manual. Instead, every
40297 time you make a change to the docstrings of a configuration record, you
40298 have to manually call @code{generate-documentation} or
40299 @code{configuration->documentation}, and paste the output into the
40300 @file{doc/guix.texi} file.
40301
40302 @c TODO: Actually test this
40303 Below is an example of a record type created using
40304 @code{define-configuration} and friends.
40305
40306 @lisp
40307 (use-modules (gnu services)
40308 (guix gexp)
40309 (gnu services configuration)
40310 (srfi srfi-26)
40311 (srfi srfi-1))
40312
40313 ;; Turn field names, which are Scheme symbols into strings
40314 (define (uglify-field-name field-name)
40315 (let ((str (symbol->string field-name)))
40316 ;; field? -> is-field
40317 (if (string-suffix? "?" str)
40318 (string-append "is-" (string-drop-right str 1))
40319 str)))
40320
40321 (define (serialize-string field-name value)
40322 #~(string-append #$(uglify-field-name field-name) " = " #$value "\n"))
40323
40324 (define (serialize-integer field-name value)
40325 (serialize-string field-name (number->string value)))
40326
40327 (define (serialize-boolean field-name value)
40328 (serialize-string field-name (if value "true" "false")))
40329
40330 (define (serialize-contact-name field-name value)
40331 #~(string-append "\n[" #$value "]\n"))
40332
40333 (define (list-of-contact-configurations? lst)
40334 (every contact-configuration? lst))
40335
40336 (define (serialize-list-of-contact-configurations field-name value)
40337 #~(string-append #$@@(map (cut serialize-configuration <>
40338 contact-configuration-fields)
40339 value)))
40340
40341 (define (serialize-contacts-list-configuration configuration)
40342 (mixed-text-file
40343 "contactrc"
40344 #~(string-append "[Owner]\n"
40345 #$(serialize-configuration
40346 configuration contacts-list-configuration-fields))))
40347
40348 (define-maybe integer)
40349 (define-maybe string)
40350
40351 (define-configuration contact-configuration
40352 (name
40353 (string)
40354 "The name of the contact."
40355 serialize-contact-name)
40356 (phone-number
40357 maybe-integer
40358 "The person's phone number.")
40359 (email
40360 maybe-string
40361 "The person's email address.")
40362 (married?
40363 (boolean)
40364 "Whether the person is married."))
40365
40366 (define-configuration contacts-list-configuration
40367 (name
40368 (string)
40369 "The name of the owner of this contact list.")
40370 (email
40371 (string)
40372 "The owner's email address.")
40373 (contacts
40374 (list-of-contact-configurations '())
40375 "A list of @@code@{contact-configuation@} records which contain
40376 information about all your contacts."))
40377 @end lisp
40378
40379 A contacts list configuration could then be created like this:
40380
40381 @lisp
40382 (define my-contacts
40383 (contacts-list-configuration
40384 (name "Alice")
40385 (email "alice@@example.org")
40386 (contacts
40387 (list (contact-configuration
40388 (name "Bob")
40389 (phone-number 1234)
40390 (email "bob@@gnu.org")
40391 (married? #f))
40392 (contact-configuration
40393 (name "Charlie")
40394 (phone-number 0000)
40395 (married? #t))))))
40396 @end lisp
40397
40398 After serializing the configuration to disk, the resulting file would
40399 look like this:
40400
40401 @example
40402 [owner]
40403 name = Alice
40404 email = alice@@example.org
40405
40406 [Bob]
40407 phone-number = 1234
40408 email = bob@@gnu.org
40409 is-married = false
40410
40411 [Charlie]
40412 phone-number = 0
40413 is-married = true
40414 @end example
40415
40416
40417 @node Home Configuration
40418 @chapter Home Configuration
40419 @cindex home configuration
40420 Guix supports declarative configuration of @dfn{home environments} by
40421 utilizing the configuration mechanism described in the previous chapter
40422 (@pxref{Defining Services}), but for user's dotfiles and packages. It
40423 works both on Guix System and foreign distros and allows users to
40424 declare all the packages and services that should be installed and
40425 configured for the user. Once a user has written a file containing
40426 @code{home-environment} record, such a configuration can be
40427 @dfn{instantiated} by an unprivileged user with the @command{guix home}
40428 command (@pxref{Invoking guix home}).
40429 @c Maybe later, it will be possible to make home configuration a part of
40430 @c system configuration to make everything managed by guix system.
40431
40432 @quotation Note
40433 The functionality described in this section is still under development
40434 and is subject to change. Get in touch with us on
40435 @email{guix-devel@@gnu.org}!
40436 @end quotation
40437
40438 The user's home environment usually consists of three basic parts:
40439 software, configuration, and state. Software in mainstream distros are
40440 usually installed system-wide, but with GNU Guix most software packages
40441 can be installed on a per-user basis without needing root privileges,
40442 and are thus considered part of the user’s @dfn{home environment}.
40443 Packages on their own are not very useful in many cases, because often they
40444 require some additional configuration, usually config files that reside
40445 in @env{XDG_CONFIG_HOME} (@file{~/.config} by default) or other
40446 directories. Everything else can be considered state, like media files,
40447 application databases, and logs.
40448
40449 Using Guix for managing home environments provides a number of
40450 advantages:
40451
40452 @itemize
40453
40454 @item All software can be configured in one language (Guile Scheme),
40455 this gives users the ability to share values between configurations of
40456 different programs.
40457
40458 @item A well-defined home environment is self-contained and can be
40459 created in a declarative and reproducible way---there is no need to grab
40460 external binaries or manually edit some configuration file.
40461
40462 @item After every @command{guix home reconfigure} invocation, a new home
40463 environment generation will be created. This means that users can
40464 rollback to a previous home environment generation so they don’t have to
40465 worry about breaking their configuration.
40466
40467 @item It is possible to manage stateful data with Guix Home, this
40468 includes the ability to automatically clone Git repositories on the
40469 initial setup of the machine, and periodically running commands like
40470 @command{rsync} to sync data with another host. This functionality is
40471 still in an experimental stage, though.
40472
40473 @end itemize
40474
40475 @menu
40476 * Declaring the Home Environment:: Customizing your Home.
40477 * Configuring the Shell:: Enabling home environment.
40478 * Home Services:: Specifying home services.
40479 * Invoking guix home:: Instantiating a home configuration.
40480 @end menu
40481
40482 @node Declaring the Home Environment
40483 @section Declaring the Home Environment
40484 The home environment is configured by providing a
40485 @code{home-environment} declaration in a file that can be passed to the
40486 @command{guix home} command (@pxref{Invoking guix home}). The easiest
40487 way to get started is by generating an initial configuration with
40488 @command{guix home import}:
40489
40490 @example
40491 guix home import ~/src/guix-config
40492 @end example
40493
40494 The @command{guix home import} command reads some of the ``dot files''
40495 such as @file{~/.bashrc} found in your home directory and copies them to
40496 the given directory, @file{~/src/guix-config} in this case; it also
40497 reads the contents of your profile, @file{~/.guix-profile}, and, based
40498 on that, it populates @file{~/src/guix-config/home-configuration.scm}
40499 with a Home configuration that resembles your current configuration.
40500
40501 A simple setup can include Bash and a custom text configuration, like in
40502 the example below. Don't be afraid to declare home environment parts,
40503 which overlaps with your current dot files: before installing any
40504 configuration files, Guix Home will back up existing config files to a
40505 separate place in the home directory.
40506
40507 @quotation Note
40508 It is highly recommended that you manage your shell or shells with Guix
40509 Home, because it will make sure that all the necessary scripts are
40510 sourced by the shell configuration file. Otherwise you will need to do
40511 it manually. (@pxref{Configuring the Shell}).
40512 @end quotation
40513
40514 @findex home-environment
40515 @lisp
40516 @include he-config-bare-bones.scm
40517 @end lisp
40518
40519 The @code{packages} field should be self-explanatory, it will install
40520 the list of packages into the user's profile. The most important field
40521 is @code{services}, it contains a list of @dfn{home services}, which are
40522 the basic building blocks of a home environment.
40523
40524 There is no daemon (at least not necessarily) related to a home service,
40525 a home service is just an element that is used to declare part of home
40526 environment and extend other parts of it. The extension mechanism
40527 discussed in the previous chapter (@pxref{Defining Services}) should not
40528 be confused with Shepherd services (@pxref{Shepherd Services}). Using this extension
40529 mechanism and some Scheme code that glues things together gives the user
40530 the freedom to declare their own, very custom, home environments.
40531
40532 @cindex container, for @command{guix home}
40533 Once the configuration looks good, you can first test it in a throw-away
40534 ``container'':
40535
40536 @example
40537 guix home container config.scm
40538 @end example
40539
40540 The command above spawns a shell where your home environment is running.
40541 The shell runs in a container, meaning it's isolated from the rest of
40542 the system, so it's a good way to try out your configuration---you can
40543 see if configuration bits are missing or misbehaving, if daemons get
40544 started, and so on. Once you exit that shell, you're back to the prompt
40545 of your original shell ``in the real world''.
40546
40547 Once you have a configuration file that suits your needs, you can
40548 reconfigure your home by running:
40549
40550 @example
40551 guix home reconfigure config.scm
40552 @end example
40553
40554 This ``builds'' your home environment and creates @file{~/.guix-home}
40555 pointing to it. Voilà!
40556
40557 @quotation Note
40558 Make sure the operating system has elogind, systemd, or a similar
40559 mechanism to create the XDG run-time directory and has the
40560 @env{XDG_RUNTIME_DIR} variable set. Failing that, the
40561 @file{on-first-login} script will not execute anything, and processes
40562 like user Shepherd and its descendants will not start.
40563 @end quotation
40564
40565 @node Configuring the Shell
40566 @section Configuring the Shell
40567 This section is safe to skip if your shell or shells are managed by
40568 Guix Home. Otherwise, read it carefully.
40569
40570 There are a few scripts that must be evaluated by a login shell to
40571 activate the home environment. The shell startup files only read by
40572 login shells often have @code{profile} suffix. For more information
40573 about login shells see @ref{Invoking Bash,,, bash, The GNU Bash
40574 Reference Manual} and see @ref{Bash Startup Files,,, bash, The GNU Bash
40575 Reference Manual}.
40576
40577 The first script that needs to be sourced is @file{setup-environment},
40578 which sets all the necessary environment variables (including variables
40579 declared by the user) and the second one is @file{on-first-login}, which
40580 starts Shepherd for the current user and performs actions declared by
40581 other home services that extends
40582 @code{home-run-on-first-login-service-type}.
40583
40584 Guix Home will always create @file{~/.profile}, which contains the
40585 following lines:
40586
40587 @example
40588 HOME_ENVIRONMENT=$HOME/.guix-home
40589 . $HOME_ENVIRONMENT/setup-environment
40590 $HOME_ENVIRONMENT/on-first-login
40591 @end example
40592
40593 This makes POSIX compliant login shells activate the home environment.
40594 However, in most cases this file won't be read by most modern shells,
40595 because they are run in non POSIX mode by default and have their own
40596 @file{*profile} startup files. For example Bash will prefer
40597 @file{~/.bash_profile} in case it exists and only if it doesn't will it
40598 fallback to @file{~/.profile}. Zsh (if no additional options are
40599 specified) will ignore @file{~/.profile}, even if @file{~/.zprofile}
40600 doesn't exist.
40601
40602 To make your shell respect @file{~/.profile}, add @code{. ~/.profile} or
40603 @code{source ~/.profile} to the startup file for the login shell. In
40604 case of Bash, it is @file{~/.bash_profile}, and in case of Zsh, it is
40605 @file{~/.zprofile}.
40606
40607 @quotation Note
40608 This step is only required if your shell is @emph{not} managed by Guix Home.
40609 Otherwise, everything will be done automatically.
40610 @end quotation
40611
40612 @node Home Services
40613 @section Home Services
40614 @cindex home services
40615
40616 A @dfn{home service} is not necessarily something that has a daemon and
40617 is managed by Shepherd (@pxref{Jump Start,,, shepherd, The GNU Shepherd
40618 Manual}), in most cases it doesn't. It's a simple building block of the
40619 home environment, often declaring a set of packages to be installed in
40620 the home environment profile, a set of config files to be symlinked into
40621 @env{XDG_CONFIG_HOME} (@file{~/.config} by default), and environment
40622 variables to be set by a login shell.
40623
40624 There is a service extension mechanism (@pxref{Service Composition})
40625 which allows home services to extend other home services and utilize
40626 capabilities they provide; for example: declare mcron jobs
40627 (@pxref{Top,,, mcron, GNU@tie{}Mcron}) by extending @ref{Mcron Home
40628 Service}; declare daemons by extending @ref{Shepherd Home Service}; add
40629 commands, which will be invoked on by the Bash by extending
40630 @ref{Shells Home Services, @code{home-bash-service-type}}.
40631
40632 A good way to discover available home services is using the
40633 @command{guix home search} command (@pxref{Invoking guix home}). After
40634 the required home services are found, include its module with the
40635 @code{use-modules} form (@pxref{use-modules,, Using Guile Modules,
40636 guile, The GNU Guile Reference Manual}), or the @code{#:use-modules}
40637 directive (@pxref{define-module,, Creating Guile Modules, guile, The GNU
40638 Guile Reference Manual}) and declare a home service using the
40639 @code{service} function, or extend a service type by declaring a new
40640 service with the @code{simple-service} procedure from @code{(gnu
40641 services)}.
40642
40643 @menu
40644 * Essential Home Services:: Environment variables, packages, on-* scripts.
40645 * Shells: Shells Home Services. POSIX shells, Bash, Zsh.
40646 * Mcron: Mcron Home Service. Scheduled User's Job Execution.
40647 * Power Management: Power Management Home Services. Services for battery power.
40648 * Shepherd: Shepherd Home Service. Managing User's Daemons.
40649 * SSH: Secure Shell. Setting up the secure shell client.
40650 * Desktop: Desktop Home Services. Services for graphical environments.
40651 * Guix: Guix Home Services. Services for Guix.
40652 @end menu
40653 @c In addition to that Home Services can provide
40654
40655 @node Essential Home Services
40656 @subsection Essential Home Services
40657 There are a few essential home services defined in
40658 @code{(gnu services)}, they are mostly for internal use and are required
40659 to build a home environment, but some of them will be useful for the end
40660 user.
40661
40662 @cindex environment variables
40663
40664 @defvr {Scheme Variable} home-environment-variables-service-type
40665 The service of this type will be instantiated by every home environment
40666 automatically by default, there is no need to define it, but someone may
40667 want to extend it with a list of pairs to set some environment
40668 variables.
40669
40670 @lisp
40671 (list ("ENV_VAR1" . "value1")
40672 ("ENV_VAR2" . "value2"))
40673 @end lisp
40674
40675 The easiest way to extend a service type, without defining a new service
40676 type is to use the @code{simple-service} helper from @code{(gnu
40677 services)}.
40678
40679 @lisp
40680 (simple-service 'some-useful-env-vars-service
40681 home-environment-variables-service-type
40682 `(("LESSHISTFILE" . "$XDG_CACHE_HOME/.lesshst")
40683 ("SHELL" . ,(file-append zsh "/bin/zsh"))
40684 ("USELESS_VAR" . #f)
40685 ("_JAVA_AWT_WM_NONREPARENTING" . #t)))
40686 @end lisp
40687
40688 If you include such a service in you home environment definition, it
40689 will add the following content to the @file{setup-environment} script
40690 (which is expected to be sourced by the login shell):
40691
40692 @example
40693 export LESSHISTFILE=$XDG_CACHE_HOME/.lesshst
40694 export SHELL=/gnu/store/2hsg15n644f0glrcbkb1kqknmmqdar03-zsh-5.8/bin/zsh
40695 export _JAVA_AWT_WM_NONREPARENTING
40696 @end example
40697
40698 @quotation Note
40699 Make sure that module @code{(gnu packages shells)} is imported with
40700 @code{use-modules} or any other way, this namespace contains the
40701 definition of the @code{zsh} package, which is used in the example
40702 above.
40703 @end quotation
40704
40705 The association list (@pxref{Association Lists, alists, Association
40706 Lists, guile, The GNU Guile Reference manual}) is a data structure
40707 containing key-value pairs, for
40708 @code{home-environment-variables-service-type} the key is always a
40709 string, the value can be a string, string-valued gexp
40710 (@pxref{G-Expressions}), file-like object (@pxref{G-Expressions,
40711 file-like object}) or boolean. For gexps, the variable will be set to
40712 the value of the gexp; for file-like objects, it will be set to the path
40713 of the file in the store (@pxref{The Store}); for @code{#t}, it will
40714 export the variable without any value; and for @code{#f}, it will omit
40715 variable.
40716
40717 @end defvr
40718
40719 @defvr {Scheme Variable} home-profile-service-type
40720 The service of this type will be instantiated by every home environment
40721 automatically, there is no need to define it, but you may want to extend
40722 it with a list of packages if you want to install additional packages
40723 into your profile. Other services, which need to make some programs
40724 available to the user will also extend this service type.
40725
40726 The extension value is just a list of packages:
40727
40728 @lisp
40729 (list htop vim emacs)
40730 @end lisp
40731
40732 The same approach as @code{simple-service} (@pxref{Service Reference,
40733 simple-service}) for @code{home-environment-variables-service-type} can
40734 be used here, too. Make sure that modules containing the specified
40735 packages are imported with @code{use-modules}. To find a package or
40736 information about its module use @command{guix search} (@pxref{Invoking
40737 guix package}). Alternatively, @code{specification->package} can be
40738 used to get the package record from string without importing related
40739 module.
40740 @end defvr
40741
40742 There are few more essential services, but users are not expected to
40743 extend them.
40744
40745 @defvr {Scheme Variable} home-service-type
40746 The root of home services DAG, it generates a folder, which later will be
40747 symlinked to @file{~/.guix-home}, it contains configurations,
40748 profile with binaries and libraries, and some necessary scripts to glue
40749 things together.
40750 @end defvr
40751
40752 @defvr {Scheme Variable} home-run-on-first-login-service-type
40753 The service of this type generates a Guile script, which is expected to
40754 be executed by the login shell. It is only executed if the special flag
40755 file inside @env{XDG_RUNTIME_DIR} hasn't been created, this prevents
40756 redundant executions of the script if multiple login shells are spawned.
40757
40758 It can be extended with a gexp. However, to autostart an application,
40759 users @emph{should not} use this service, in most cases it's better to extend
40760 @code{home-shepherd-service-type} with a Shepherd service
40761 (@pxref{Shepherd Services}), or extend the shell's startup file with
40762 the required command using the appropriate service type.
40763 @end defvr
40764
40765 @defvr {Scheme Variable} home-files-service-type
40766 The service of this type allows to specify a list of files, which will
40767 go to @file{~/.guix-home/files}, usually this directory contains
40768 configuration files (to be more precise it contains symlinks to files in
40769 @file{/gnu/store}), which should be placed in @file{$XDG_CONFIG_DIR} or
40770 in rare cases in @file{$HOME}. It accepts extension values in the
40771 following format:
40772
40773 @lisp
40774 `((".sway/config" ,sway-file-like-object)
40775 (".tmux.conf" ,(local-file "./tmux.conf")))
40776 @end lisp
40777
40778 Each nested list contains two values: a subdirectory and file-like
40779 object. After building a home environment @file{~/.guix-home/files}
40780 will be populated with apropiate content and all nested directories will
40781 be created accordingly, however, those files won't go any further until
40782 some other service will do it. By default a
40783 @code{home-symlink-manager-service-type}, which creates necessary
40784 symlinks in home folder to files from @file{~/.guix-home/files} and
40785 backs up already existing, but clashing configs and other things, is a
40786 part of essential home services (enabled by default), but it's possible
40787 to use alternative services to implement more advanced use cases like
40788 read-only home. Feel free to experiment and share your results.
40789 @end defvr
40790
40791 @defvr {Scheme Variable} home-xdg-configuration-files-service-type
40792 The service is very similiar to @code{home-files-service-type} (and
40793 actually extends it), but used for defining files, which will go to
40794 @file{~/.guix-home/files/.config}, which will be symlinked to
40795 @file{$XDG_CONFIG_DIR} by @code{home-symlink-manager-service-type} (for
40796 example) during activation. It accepts extension values in the
40797 following format:
40798
40799 @lisp
40800 `(("sway/config" ,sway-file-like-object)
40801 ;; -> ~/.guix-home/files/.config/sway/config
40802 ;; -> $XDG_CONFIG_DIR/sway/config (by symlink-manager)
40803 ("tmux/tmux.conf" ,(local-file "./tmux.conf")))
40804 @end lisp
40805 @end defvr
40806
40807 @defvr {Scheme Variable} home-activation-service-type
40808 The service of this type generates a guile script, which runs on every
40809 @command{guix home reconfigure} invocation or any other action, which
40810 leads to the activation of the home environment.
40811 @end defvr
40812
40813 @defvr {Scheme Variable} home-symlink-manager-service-type
40814 The service of this type generates a guile script, which will be
40815 executed during activation of home environment, and do a few following
40816 steps:
40817
40818 @enumerate
40819 @item
40820 Reads the content of @file{files/} directory of current and pending home
40821 environments.
40822
40823 @item
40824 Cleans up all symlinks created by symlink-manager on previous
40825 activation. Also, sub-directories, which become empty also will be
40826 cleaned up.
40827
40828 @item
40829 Creates new symlinks the following way: It looks @file{files/} directory
40830 (usually defined with @code{home-files-service-type},
40831 @code{home-xdg-configuration-files-service-type} and maybe some others),
40832 takes the files from @file{files/.config/} subdirectory and put
40833 respective links in @env{XDG_CONFIG_DIR}. For example symlink for
40834 @file{files/.config/sway/config} will end up in
40835 @file{$XDG_CONFIG_DIR/sway/config}. The rest files in @file{files/}
40836 outside of @file{files/.config/} subdirectory will be treated slightly
40837 different: symlink will just go to @file{$HOME}.
40838 @file{files/.some-program/config} will end up in
40839 @file{$HOME/.some-program/config}.
40840
40841 @item
40842 If some sub-directories are missing, they will be created.
40843
40844 @item
40845 If there is a clashing files on the way, they will be backed up.
40846
40847 @end enumerate
40848
40849 symlink-manager is a part of essential home services and is enabled and
40850 used by default.
40851 @end defvr
40852
40853
40854 @node Shells Home Services
40855 @subsection Shells
40856
40857 @cindex shell
40858 @cindex login shell
40859 @cindex interactive shell
40860 @cindex bash
40861 @cindex zsh
40862
40863 Shells play a quite important role in the environment initialization
40864 process, you can configure them manually as described in section
40865 @ref{Configuring the Shell}, but the recommended way is to use home services
40866 listed below. It's both easier and more reliable.
40867
40868 Each home environment instantiates
40869 @code{home-shell-profile-service-type}, which creates a
40870 @file{~/.profile} startup file for all POSIX-compatible shells. This
40871 file contains all the necessary steps to properly initialize the
40872 environment, but many modern shells like Bash or Zsh prefer their own
40873 startup files, that's why the respective home services
40874 (@code{home-bash-service-type} and @code{home-zsh-service-type}) ensure
40875 that @file{~/.profile} is sourced by @file{~/.bash_profile} and
40876 @file{~/.zprofile}, respectively.
40877
40878 @subsubheading Shell Profile Service
40879
40880 @deftp {Data Type} home-shell-profile-configuration
40881 Available @code{home-shell-profile-configuration} fields are:
40882
40883 @table @asis
40884 @item @code{profile} (default: @code{()}) (type: text-config)
40885 @code{home-shell-profile} is instantiated automatically by
40886 @code{home-environment}, DO NOT create this service manually, it can
40887 only be extended. @code{profile} is a list of file-like objects, which
40888 will go to @file{~/.profile}. By default @file{~/.profile} contains the
40889 initialization code which must be evaluated by the login shell to make
40890 home-environment's profile available to the user, but other commands can
40891 be added to the file if it is really necessary. In most cases shell's
40892 configuration files are preferred places for user's customizations.
40893 Extend home-shell-profile service only if you really know what you do.
40894
40895 @end table
40896
40897 @end deftp
40898
40899 @subsubheading Bash Home Service
40900
40901 @anchor{home-bash-configuration}
40902 @deftp {Data Type} home-bash-configuration
40903 Available @code{home-bash-configuration} fields are:
40904
40905 @table @asis
40906 @item @code{package} (default: @code{bash}) (type: package)
40907 The Bash package to use.
40908
40909 @item @code{guix-defaults?} (default: @code{#t}) (type: boolean)
40910 Add sane defaults like reading @file{/etc/bashrc} and coloring the output of
40911 @command{ls} to the top of the @file{.bashrc} file.
40912
40913 @item @code{environment-variables} (default: @code{()}) (type: alist)
40914 Association list of environment variables to set for the Bash session. The
40915 rules for the @code{home-environment-variables-service-type} apply
40916 here (@pxref{Essential Home Services}). The contents of this field will be
40917 added after the contents of the @code{bash-profile} field.
40918
40919 @item @code{aliases} (default: @code{()}) (type: alist)
40920 Association list of aliases to set for the Bash session. The aliases
40921 will be defined after the contents of the @code{bashrc} field has been
40922 put in the @file{.bashrc} file. The alias will automatically be quoted,
40923 so something like this:
40924
40925 @lisp
40926 '(("ls" . "ls -alF"))
40927 @end lisp
40928
40929 turns into
40930
40931 @example
40932 alias ls="ls -alF"
40933 @end example
40934
40935 @item @code{bash-profile} (default: @code{()}) (type: text-config)
40936 List of file-like objects, which will be added to @file{.bash_profile}.
40937 Used for executing user's commands at start of login shell (In most
40938 cases the shell started on tty just after login). @file{.bash_login}
40939 won't be ever read, because @file{.bash_profile} always present.
40940
40941 @item @code{bashrc} (default: @code{()}) (type: text-config)
40942 List of file-like objects, which will be added to @file{.bashrc}. Used
40943 for executing user's commands at start of interactive shell (The shell
40944 for interactive usage started by typing @code{bash} or by terminal app
40945 or any other program).
40946
40947 @item @code{bash-logout} (default: @code{()}) (type: text-config)
40948 List of file-like objects, which will be added to @file{.bash_logout}.
40949 Used for executing user's commands at the exit of login shell. It won't
40950 be read in some cases (if the shell terminates by exec'ing another
40951 process for example).
40952
40953 @end table
40954 @end deftp
40955
40956 You can extend the Bash service by using the @code{home-bash-extension}
40957 configuration record, whose fields must mirror that of
40958 @code{home-bash-configuration} (@pxref{home-bash-configuration}). The
40959 contents of the extensions will be added to the end of the corresponding
40960 Bash configuration files (@pxref{Bash Startup Files,,, bash, The GNU
40961 Bash Reference Manual}.
40962
40963 For example, here is how you would define a service that extends the
40964 Bash service such that @file{~/.bash_profile} defines an additional
40965 environment variable, @env{PS1}:
40966
40967 @lisp
40968 (define bash-fancy-prompt-service
40969 (simple-service 'bash-fancy-prompt
40970 home-bash-service-type
40971 (home-bash-extension
40972 (environment-variables
40973 '(("PS1" . "\\u \\wλ "))))))
40974 @end lisp
40975
40976 You would then add @code{bash-fancy-prompt-service} to the list in the
40977 @code{services} field of your @code{home-environment}. The reference of
40978 @code{home-bash-extension} follows.
40979
40980 @deftp {Data Type} home-bash-extension
40981 Available @code{home-bash-extension} fields are:
40982
40983 @table @asis
40984 @item @code{environment-variables} (default: @code{()}) (type: alist)
40985 Additional environment variables to set. These will be combined with the
40986 environment variables from other extensions and the base service to form one
40987 coherent block of environment variables.
40988
40989 @item @code{aliases} (default: @code{()}) (type: alist)
40990 Additional aliases to set. These will be combined with the aliases from
40991 other extensions and the base service.
40992
40993 @item @code{bash-profile} (default: @code{()}) (type: text-config)
40994 Additional text blocks to add to @file{.bash_profile}, which will be combined
40995 with text blocks from other extensions and the base service.
40996
40997 @item @code{bashrc} (default: @code{()}) (type: text-config)
40998 Additional text blocks to add to @file{.bashrc}, which will be combined
40999 with text blocks from other extensions and the base service.
41000
41001 @item @code{bash-logout} (default: @code{()}) (type: text-config)
41002 Additional text blocks to add to @file{.bash_logout}, which will be combined
41003 with text blocks from other extensions and the base service.
41004
41005 @end table
41006 @end deftp
41007
41008 @subsubheading Zsh Home Service
41009
41010 @deftp {Data Type} home-zsh-configuration
41011 Available @code{home-zsh-configuration} fields are:
41012
41013 @table @asis
41014 @item @code{package} (default: @code{zsh}) (type: package)
41015 The Zsh package to use.
41016
41017 @item @code{xdg-flavor?} (default: @code{#t}) (type: boolean)
41018 Place all the configs to @file{$XDG_CONFIG_HOME/zsh}. Makes
41019 @file{~/.zshenv} to set @env{ZDOTDIR} to @file{$XDG_CONFIG_HOME/zsh}.
41020 Shell startup process will continue with
41021 @file{$XDG_CONFIG_HOME/zsh/.zshenv}.
41022
41023 @item @code{environment-variables} (default: @code{()}) (type: alist)
41024 Association list of environment variables to set for the Zsh session.
41025
41026 @item @code{zshenv} (default: @code{()}) (type: text-config)
41027 List of file-like objects, which will be added to @file{.zshenv}. Used
41028 for setting user's shell environment variables. Must not contain
41029 commands assuming the presence of tty or producing output. Will be read
41030 always. Will be read before any other file in @env{ZDOTDIR}.
41031
41032 @item @code{zprofile} (default: @code{()}) (type: text-config)
41033 List of file-like objects, which will be added to @file{.zprofile}. Used
41034 for executing user's commands at start of login shell (In most cases the
41035 shell started on tty just after login). Will be read before
41036 @file{.zlogin}.
41037
41038 @item @code{zshrc} (default: @code{()}) (type: text-config)
41039 List of file-like objects, which will be added to @file{.zshrc}. Used
41040 for executing user's commands at start of interactive shell (The shell
41041 for interactive usage started by typing @code{zsh} or by terminal app or
41042 any other program).
41043
41044 @item @code{zlogin} (default: @code{()}) (type: text-config)
41045 List of file-like objects, which will be added to @file{.zlogin}. Used
41046 for executing user's commands at the end of starting process of login
41047 shell.
41048
41049 @item @code{zlogout} (default: @code{()}) (type: text-config)
41050 List of file-like objects, which will be added to @file{.zlogout}. Used
41051 for executing user's commands at the exit of login shell. It won't be
41052 read in some cases (if the shell terminates by exec'ing another process
41053 for example).
41054
41055 @end table
41056
41057 @end deftp
41058
41059 @node Mcron Home Service
41060 @subsection Scheduled User's Job Execution
41061
41062 @cindex cron
41063 @cindex mcron
41064 @cindex scheduling jobs
41065
41066 The @code{(gnu home services mcron)} module provides an interface to
41067 GNU@tie{}mcron, a daemon to run jobs at scheduled times (@pxref{Top,,,
41068 mcron, GNU@tie{}mcron}). The information about system's mcron is
41069 applicable here (@pxref{Scheduled Job Execution}), the only difference
41070 for home services is that they have to be declared in a
41071 @code{home-environment} record instead of an @code{operating-system}
41072 record.
41073
41074 @defvr {Scheme Variable} home-mcron-service-type
41075 This is the type of the @code{mcron} home service, whose value is an
41076 @code{home-mcron-configuration} object. It allows to manage scheduled
41077 tasks.
41078
41079 This service type can be the target of a service extension that provides
41080 additional job specifications (@pxref{Service Composition}). In other
41081 words, it is possible to define services that provide additional mcron
41082 jobs to run.
41083 @end defvr
41084
41085 @deftp {Data Type} home-mcron-configuration
41086 Available @code{home-mcron-configuration} fields are:
41087
41088 @c Auto-generated with (gnu home services mcron)'s
41089 @c generate-documentation procedure.
41090 @c %start of fragment
41091 @table @asis
41092 @item @code{mcron} (default: @code{mcron}) (type: file-like)
41093 The mcron package to use.
41094
41095 @item @code{jobs} (default: @code{()}) (type: list-of-gexps)
41096 This is a list of gexps (@pxref{G-Expressions}), where each gexp
41097 corresponds to an mcron job specification (@pxref{Syntax, mcron job
41098 specifications,, mcron,GNU@tie{}mcron}).
41099
41100 @item @code{log?} (default: @code{#t}) (type: boolean)
41101 Log messages to standard output.
41102
41103 @item @code{log-format} (default: @code{"~1@@*~a ~a: ~a~%"}) (type: string)
41104 @code{(ice-9 format)} format string for log messages. The default value
41105 produces messages like "@samp{@var{pid} @var{name}: @var{message}"}
41106 (@pxref{Invoking mcron, Invoking,, mcron,GNU@tie{}mcron}). Each message
41107 is also prefixed by a timestamp by GNU Shepherd.
41108
41109 @end table
41110 @end deftp
41111 @c %end of fragment
41112
41113 @node Power Management Home Services
41114 @subsection Power Management Home Services
41115
41116 @cindex power management
41117 The @code{(gnu home services pm)} module provides home services
41118 pertaining to battery power.
41119
41120 @defvr {Scheme Variable} home-batsignal-service-type
41121 Service for @code{batsignal}, a program that monitors battery levels
41122 and warns the user through desktop notifications when their battery
41123 is getting low. You can also configure a command to be run when the
41124 battery level passes a point deemed ``dangerous''. This service is
41125 configured with the @code{home-batsignal-configuration} record.
41126 @end defvr
41127
41128 @deftp {Data Type} home-batsignal-configuration
41129 Data type representing the configuration for batsignal.
41130
41131 @table @asis
41132 @item @code{warning-level} (default: @code{15})
41133 The battery level to send a warning message at.
41134
41135 @item @code{warning-message} (default: @code{#f})
41136 The message to send as a notification when the battery level reaches
41137 the @code{warning-level}. Setting to @code{#f} uses the default
41138 message.
41139
41140 @item @code{critical-level} (default: @code{5})
41141 The battery level to send a critical message at.
41142
41143 @item @code{critical-message} (default: @code{#f})
41144 The message to send as a notification when the battery level reaches
41145 the @code{critical-level}. Setting to @code{#f} uses the default
41146 message.
41147
41148 @item @code{danger-level} (default: @code{2})
41149 The battery level to run the @code{danger-command} at.
41150
41151 @item @code{danger-command} (default: @code{#f})
41152 The command to run when the battery level reaches the @code{danger-level}.
41153 Setting to @code{#f} disables running the command entirely.
41154
41155 @item @code{full-level} (default: @code{#f})
41156 The battery level to send a full message at. Setting to @code{#f}
41157 disables sending the full message entirely.
41158
41159 @item @code{full-message} (default: @code{#f})
41160 The message to send as a notification when the battery level reaches
41161 the @code{full-level}. Setting to @code{#f} uses the default message.
41162
41163 @item @code{batteries} (default: @code{'()})
41164 The batteries to monitor. Setting to @code{'()} tries to find batteries
41165 automatically.
41166
41167 @item @code{poll-delay} (default: @code{60})
41168 The time in seconds to wait before checking the batteries again.
41169
41170 @item @code{icon} (default: @code{#f})
41171 A file-like object to use as the icon for battery notifications. Setting
41172 to @code{#f} disables notification icons entirely.
41173
41174 @item @code{notifications?} (default: @code{#t})
41175 Whether to send any notifications.
41176
41177 @item @code{notifications-expire?} (default: @code{#f})
41178 Whether notifications sent expire after a time.
41179
41180 @item @code{notification-command} (default: @code{#f})
41181 Command to use to send messages. Setting to @code{#f} sends a notification
41182 through @code{libnotify}.
41183
41184 @item @code{ignore-missing?} (default: @code{#f})
41185 Whether to ignore missing battery errors.
41186 @end table
41187 @end deftp
41188
41189 @node Shepherd Home Service
41190 @subsection Managing User Daemons
41191
41192 @cindex shepherd services, for users
41193 The @code{(gnu home services shepherd)} module supports the definitions
41194 of per-user Shepherd services (@pxref{Introduction,,, shepherd, The GNU
41195 Shepherd Manual}). You extend @code{home-shepherd-service-type} with
41196 new services; Guix Home then takes care of starting the @code{shepherd}
41197 daemon for you when you log in, which in turns starts the services you
41198 asked for.
41199
41200 @defvr {Scheme Variable} home-shepherd-service-type
41201 The service type for the userland Shepherd, which allows one to manage
41202 long-running processes or one-shot tasks. User's Shepherd is not an
41203 init process (PID 1), but almost all other information described in
41204 (@pxref{Shepherd Services}) is applicable here too.
41205
41206 This is the service type that extensions target when they want to create
41207 shepherd services (@pxref{Service Types and Services}, for an example).
41208 Each extension must pass a list of @code{<shepherd-service>}. Its
41209 value must be a @code{home-shepherd-configuration}, as described below.
41210 @end defvr
41211
41212 @deftp {Data Type} home-shepherd-configuration
41213 This data type represents the Shepherd's configuration.
41214
41215 @table @code
41216 @item shepherd (default: @code{shepherd})
41217 The Shepherd package to use.
41218
41219 @item auto-start? (default: @code{#t})
41220 Whether or not to start Shepherd on first login.
41221
41222 @item services (default: @code{'()})
41223 A list of @code{<shepherd-service>} to start.
41224 You should probably use the service extension
41225 mechanism instead (@pxref{Shepherd Services}).
41226 @end table
41227 @end deftp
41228
41229 @node Secure Shell
41230 @subsection Secure Shell
41231
41232 @cindex secure shell client, configuration
41233 @cindex SSH client, configuration
41234 The @uref{https://www.openssh.com, OpenSSH package} includes a client,
41235 the @command{ssh} command, that allows you to connect to remote machines
41236 using the @acronym{SSH, secure shell} protocol. With the @code{(gnu
41237 home services ssh)} module, you can set up OpenSSH so that it works in a
41238 predictable fashion, almost independently of state on the local machine.
41239 To do that, you instantiate @code{home-openssh-service-type} in your
41240 Home configuration, as explained below.
41241
41242 @defvr {Scheme Variable} home-openssh-service-type
41243 This is the type of the service to set up the OpenSSH client. It takes
41244 care of several things:
41245
41246 @itemize
41247 @item
41248 providing a @file{~/.ssh/config} file based on your configuration so
41249 that @command{ssh} knows about hosts you regularly connect to and their
41250 associated parameters;
41251
41252 @item
41253 providing a @file{~/.ssh/authorized_keys}, which lists public keys that
41254 the local SSH server, @command{sshd}, may accept to connect to this user
41255 account;
41256
41257 @item
41258 optionally providing a @file{~/.ssh/known_hosts} file so that @file{ssh}
41259 can authenticate hosts you connect to.
41260 @end itemize
41261
41262 Here is an example of a service and its configuration that you could add
41263 to the @code{services} field of your @code{home-environment}:
41264
41265 @lisp
41266 (service home-openssh-service-type
41267 (home-openssh-configuration
41268 (hosts
41269 (list (openssh-host (name "ci.guix.gnu.org")
41270 (user "charlie"))
41271 (openssh-host (name "chbouib")
41272 (host-name "chbouib.example.org")
41273 (user "supercharlie")
41274 (port 10022))))
41275 (authorized-keys (list (local-file "alice.pub")))))
41276 @end lisp
41277
41278 The example above lists two hosts and their parameters. For instance,
41279 running @command{ssh chbouib} will automatically connect to
41280 @code{chbouib.example.org} on port 10022, logging in as user
41281 @samp{supercharlie}. Further, it marks the public key in
41282 @file{alice.pub} as authorized for incoming connections.
41283
41284 The value associated with a @code{home-openssh-service-type} instance
41285 must be a @code{home-openssh-configuration} record, as describe below.
41286 @end defvr
41287
41288 @deftp {Data Type} home-openssh-configuration
41289 This is the datatype representing the OpenSSH client and server
41290 configuration in one's home environment. It contains the following
41291 fields:
41292
41293 @table @asis
41294 @item @code{hosts} (default: @code{'()})
41295 A list of @code{openssh-host} records specifying host names and
41296 associated connection parameters (see below). This host list goes into
41297 @file{~/.ssh/config}, which @command{ssh} reads at startup.
41298
41299 @item @code{known-hosts} (default: @code{*unspecified*})
41300 This must be either:
41301
41302 @itemize
41303 @item
41304 @code{*unspecified*}, in which case @code{home-openssh-service-type}
41305 leaves it up to @command{ssh} and to the user to maintain the list of
41306 known hosts at @file{~/.ssh/known_hosts}, or
41307
41308 @item
41309 a list of file-like objects, in which case those are concatenated and
41310 emitted as @file{~/.ssh/known_hosts}.
41311 @end itemize
41312
41313 The @file{~/.ssh/known_hosts} contains a list of host name/host key
41314 pairs that allow @command{ssh} to authenticate hosts you connect to and
41315 to detect possible impersonation attacks. By default, @command{ssh}
41316 updates it in a @dfn{TOFU, trust-on-first-use} fashion, meaning that it
41317 records the host's key in that file the first time you connect to it.
41318 This behavior is preserved when @code{known-hosts} is set to
41319 @code{*unspecified*}.
41320
41321 If you instead provide a list of host keys upfront in the
41322 @code{known-hosts} field, your configuration becomes self-contained and
41323 stateless: it can be replicated elsewhere or at another point in time.
41324 Preparing this list can be relatively tedious though, which is why
41325 @code{*unspecified*} is kept as a default.
41326
41327 @item @code{authorized-keys} (default: @code{'()})
41328 This must be a list of file-like objects, each of which containing an
41329 SSH public key that should be authorized to connect to this machine.
41330
41331 Concretely, these files are concatenated and made available as
41332 @file{~/.ssh/authorized_keys}. If an OpenSSH server, @command{sshd}, is
41333 running on this machine, then it @emph{may} take this file into account:
41334 this is what @command{sshd} does by default, but be aware that it can
41335 also be configured to ignore it.
41336 @end table
41337 @end deftp
41338
41339 @c %start of fragment
41340
41341 @deftp {Data Type} openssh-host
41342 Available @code{openssh-host} fields are:
41343
41344 @table @asis
41345 @item @code{name} (type: string)
41346 Name of this host declaration.
41347
41348 @item @code{host-name} (type: maybe-string)
41349 Host name---e.g., @code{"foo.example.org"} or @code{"192.168.1.2"}.
41350
41351 @item @code{address-family} (type: address-family)
41352 Address family to use when connecting to this host: one of
41353 @code{AF_INET} (for IPv4 only), @code{AF_INET6} (for IPv6 only), or
41354 @code{*unspecified*} (allowing any address family).
41355
41356 @item @code{identity-file} (type: maybe-string)
41357 The identity file to use---e.g., @code{"/home/charlie/.ssh/id_ed25519"}.
41358
41359 @item @code{port} (type: maybe-natural-number)
41360 TCP port number to connect to.
41361
41362 @item @code{user} (type: maybe-string)
41363 User name on the remote host.
41364
41365 @item @code{forward-x11?} (default: @code{#f}) (type: boolean)
41366 Whether to forward remote client connections to the local X11 graphical
41367 display.
41368
41369 @item @code{forward-x11-trusted?} (default: @code{#f}) (type: boolean)
41370 Whether remote X11 clients have full access to the original X11
41371 graphical display.
41372
41373 @item @code{forward-agent?} (default: @code{#f}) (type: boolean)
41374 Whether the authentication agent (if any) is forwarded to the remote
41375 machine.
41376
41377 @item @code{compression?} (default: @code{#f}) (type: boolean)
41378 Whether to compress data in transit.
41379
41380 @item @code{proxy-command} (type: maybe-string)
41381 The command to use to connect to the server. As an example, a command
41382 to connect via an HTTP proxy at 192.0.2.0 would be: @code{"nc -X connect
41383 -x 192.0.2.0:8080 %h %p"}.
41384
41385 @item @code{host-key-algorithms} (type: maybe-string-list)
41386 The list of accepted host key algorithms---e.g.,
41387 @code{'("ssh-ed25519")}.
41388
41389 @item @code{accepted-key-types} (type: maybe-string-list)
41390 The list of accepted user public key types.
41391
41392 @item @code{extra-content} (default: @code{""}) (type: raw-configuration-string)
41393 Extra content appended as-is to this @code{Host} block in
41394 @file{~/.ssh/config}.
41395
41396 @end table
41397
41398 @end deftp
41399
41400
41401 @c %end of fragment
41402
41403
41404 @node Desktop Home Services
41405 @subsection Desktop Home Services
41406
41407 The @code{(gnu home services desktop)} module provides services that you
41408 may find useful on ``desktop'' systems running a graphical user
41409 environment such as Xorg.
41410
41411 @defvr {Scheme Variable} home-redshift-service-type
41412 This is the service type for @uref{https://github.com/jonls/redshift,
41413 Redshift}, a program that adjusts the display color temperature
41414 according to the time of day. Its associated value must be a
41415 @code{home-redshift-configuration} record, as shown below.
41416
41417 A typical configuration, where we manually specify the latitude and
41418 longitude, might look like this:
41419
41420 @lisp
41421 (service home-redshift-service-type
41422 (home-redshift-configuration
41423 (location-provider 'manual)
41424 (latitude 35.81) ;northern hemisphere
41425 (longitude -0.80))) ;west of Greenwich
41426 @end lisp
41427 @end defvr
41428
41429 @deftp {Data Type} home-redshift-configuration
41430 Available @code{home-redshift-configuration} fields are:
41431
41432 @table @asis
41433 @item @code{redshift} (default: @code{redshift}) (type: file-like)
41434 Redshift package to use.
41435
41436 @item @code{location-provider} (default: @code{geoclue2}) (type: symbol)
41437 Geolocation provider---@code{'manual} or @code{'geoclue2}. In the
41438 former case, you must also specify the @code{latitude} and
41439 @code{longitude} fields so Redshift can determine daytime at your place.
41440 In the latter case, the Geoclue system service must be running; it will
41441 be queried for location information.
41442
41443 @item @code{adjustment-method} (default: @code{randr}) (type: symbol)
41444 Color adjustment method.
41445
41446 @item @code{daytime-temperature} (default: @code{6500}) (type: integer)
41447 Daytime color temperature (kelvins).
41448
41449 @item @code{nighttime-temperature} (default: @code{4500}) (type: integer)
41450 Nighttime color temperature (kelvins).
41451
41452 @item @code{daytime-brightness} (type: maybe-inexact-number)
41453 Daytime screen brightness, between 0.1 and 1.0, or left unspecified.
41454
41455 @item @code{nighttime-brightness} (type: maybe-inexact-number)
41456 Nighttime screen brightness, between 0.1 and 1.0, or left unspecified.
41457
41458 @item @code{latitude} (type: maybe-inexact-number)
41459 Latitude, when @code{location-provider} is @code{'manual}.
41460
41461 @item @code{longitude} (type: maybe-inexact-number)
41462 Longitude, when @code{location-provider} is @code{'manual}.
41463
41464 @item @code{dawn-time} (type: maybe-string)
41465 Custom time for the transition from night to day in the
41466 morning---@code{"HH:MM"} format. When specified, solar elevation is not
41467 used to determine the daytime/nighttime period.
41468
41469 @item @code{dusk-time} (type: maybe-string)
41470 Likewise, custom time for the transition from day to night in the
41471 evening.
41472
41473 @item @code{extra-content} (default: @code{""}) (type: raw-configuration-string)
41474 Extra content appended as-is to the Redshift configuration file. Run
41475 @command{man redshift} for more information about the configuration file
41476 format.
41477
41478 @end table
41479
41480 @end deftp
41481
41482 @defvr {Scheme Variable} home-dbus-service-type
41483 This is the service type for running a session-specific D-Bus, for
41484 unprivileged applications that require D-Bus to be running.
41485 @end defvr
41486
41487 @deftp {Data Type} home-dbus-configuration
41488 The configuration record for @code{home-dbus-service-type}.
41489
41490 @table @asis
41491 @item @code{dbus} (default: @code{dbus})
41492 The package providing the @code{/bin/dbus-daemon} command.
41493 @end table
41494 @end deftp
41495
41496 @node Guix Home Services
41497 @subsection Guix Home Services
41498
41499 The @code{(gnu home services guix)} module provides services for
41500 user-specific Guix configuration.
41501
41502 @defvr {Scheme Variable} home-channels-service-type
41503 This is the service type for managing
41504 @file{$XDG_CONFIG_HOME/guix/channels.scm}, the file that controls the
41505 channels received on @command{guix pull} (@pxref{Channels}). Its
41506 associated value is a list of @code{channel} records, defined in the
41507 @code{(guix channels)} module.
41508
41509 Generally, it is better to extend this service than to directly
41510 configure it, as its default value is the default guix channel(s)
41511 defined by @code{%default-channels}. If you configure this service
41512 directly, be sure to include a guix channel. @xref{Specifying
41513 Additional Channels} and @ref{Using a Custom Guix Channel} for more
41514 details.
41515
41516 A typical extension for adding a channel might look like this:
41517
41518 @lisp
41519 (simple-service 'variant-packages-service
41520 home-channels-service-type
41521 (list
41522 (channel
41523 (name 'variant-packages)
41524 (url "https://example.org/variant-packages.git"))))
41525 @end lisp
41526 @end defvr
41527
41528 @node Invoking guix home
41529 @section Invoking @command{guix home}
41530
41531 @cindex @command{guix home}
41532
41533 Once you have written a home environment declaration (@pxref{Declaring
41534 the Home Environment,,,,}, it can be @dfn{instantiated} using the
41535 @command{guix home} command. The synopsis is:
41536
41537 @example
41538 guix home @var{options}@dots{} @var{action} @var{file}
41539 @end example
41540
41541 @var{file} must be the name of a file containing a
41542 @code{home-environment} declaration. @var{action} specifies how the
41543 home environment is instantiated, but there are few auxiliary actions
41544 which don't instantiate it. Currently the following values are
41545 supported:
41546
41547 @table @code
41548 @item search
41549 Display available home service type definitions that match the given
41550 regular expressions, sorted by relevance:
41551
41552 @cindex shell
41553 @cindex shell-profile
41554 @cindex bash
41555 @cindex zsh
41556 @example
41557 $ guix home search shell
41558 name: home-shell-profile
41559 location: gnu/home/services/shells.scm:100:2
41560 extends: home-files
41561 description: Create `~/.profile', which is used for environment initialization of POSIX compliant login shells.
41562 + This service type can be extended with a list of file-like objects.
41563 relevance: 6
41564
41565 name: home-fish
41566 location: gnu/home/services/shells.scm:640:2
41567 extends: home-files home-profile
41568 description: Install and configure Fish, the friendly interactive shell.
41569 relevance: 3
41570
41571 name: home-zsh
41572 location: gnu/home/services/shells.scm:290:2
41573 extends: home-files home-profile
41574 description: Install and configure Zsh.
41575 relevance: 1
41576
41577 name: home-bash
41578 location: gnu/home/services/shells.scm:508:2
41579 extends: home-files home-profile
41580 description: Install and configure GNU Bash.
41581 relevance: 1
41582
41583 @dots{}
41584 @end example
41585
41586 As for @command{guix search}, the result is written in
41587 @code{recutils} format, which makes it easy to filter the output
41588 (@pxref{Top, GNU recutils databases,, recutils, GNU recutils manual}).
41589
41590 @cindex container, for @command{guix home}
41591 @item container
41592 Spawn a shell in an isolated environment---a
41593 @dfn{container}---containing your home as specified by @var{file}.
41594
41595 For example, this is how you would start an interactive shell in a
41596 container with your home:
41597
41598 @example
41599 guix home container config.scm
41600 @end example
41601
41602 This is a throw-away container where you can lightheartedly fiddle with
41603 files; any changes made within the container, any process started---all
41604 this disappears as soon as you exit that shell.
41605
41606 As with @command{guix shell}, several options control that container:
41607
41608 @table @option
41609 @item --network
41610 @itemx -N
41611 Enable networking within the container (it is disabled by default).
41612
41613 @item --expose=@var{source}[=@var{target}]
41614 @itemx --share=@var{source}[=@var{target}]
41615 As with @command{guix shell}, make directory @var{source} of the host
41616 system available as @var{target} inside the container---read-only if you
41617 pass @option{--expose}, and writable if you pass @option{--share}
41618 (@pxref{Invoking guix shell, @option{--expose} and @option{--share}}).
41619 @end table
41620
41621 Additionally, you can run a command in that container, instead of
41622 spawning an interactive shell. For instance, here is how you would
41623 check which Shepherd services are started in a throw-away home
41624 container:
41625
41626 @example
41627 guix home container config.scm -- herd status
41628 @end example
41629
41630 The command to run in the container must come after @code{--} (double
41631 hyphen).
41632
41633 @cindex service type definition, editing
41634 @cindex editing, service type definition
41635 @item edit
41636 Edit or view the definition of the given Home service types.
41637
41638 For example, the command below opens your editor, as specified by the
41639 @env{EDITOR} environment variable, on the definition of the
41640 @code{home-mcron} service type:
41641
41642 @example
41643 guix home edit home-mcron
41644 @end example
41645
41646 @item reconfigure
41647 Build the home environment described in @var{file}, and switch to it.
41648 Switching means that the activation script will be evaluated and (in
41649 basic scenario) symlinks to configuration files generated from
41650 @code{home-environment} declaration will be created in @file{~}. If the
41651 file with the same path already exists in home folder it will be moved
41652 to @file{~/@var{timestamp}-guix-home-legacy-configs-backup}, where @var{timestamp}
41653 is a current UNIX epoch time.
41654
41655 @quotation Note
41656 It is highly recommended to run @command{guix pull} once before you run
41657 @command{guix home reconfigure} for the first time (@pxref{Invoking guix
41658 pull}).
41659 @end quotation
41660
41661 This effects all the configuration specified in @var{file}. The command
41662 starts Shepherd services specified in @var{file} that are not currently
41663 running; if a service is currently running, this command will arrange
41664 for it to be upgraded the next time it is stopped (e.g.@: by @code{herd
41665 stop @var{service}} or @code{herd restart @var{service}}).
41666
41667 This command creates a new generation whose number is one greater than
41668 the current generation (as reported by @command{guix home
41669 list-generations}). If that generation already exists, it will be
41670 overwritten. This behavior mirrors that of @command{guix package}
41671 (@pxref{Invoking guix package}).
41672
41673 @cindex provenance tracking, of the home environment
41674 Upon completion, the new home is deployed under @file{~/.guix-home}.
41675 This directory contains @dfn{provenance meta-data}: the list of channels
41676 in use (@pxref{Channels}) and @var{file} itself, when available. You
41677 can view the provenance information by running:
41678
41679 @example
41680 guix home describe
41681 @end example
41682
41683 This information is useful should you later want to inspect how this
41684 particular generation was built. In fact, assuming @var{file} is
41685 self-contained, you can later rebuild generation @var{n} of your
41686 home environment with:
41687
41688 @example
41689 guix time-machine \
41690 -C /var/guix/profiles/per-user/@var{USER}/guix-home-@var{n}-link/channels.scm -- \
41691 home reconfigure \
41692 /var/guix/profiles/per-user/@var{USER}/guix-home-@var{n}-link/configuration.scm
41693
41694 @end example
41695
41696 You can think of it as some sort of built-in version control! Your
41697 home is not just a binary artifact: @emph{it carries its own source}.
41698 @c @xref{Service Reference, @code{provenance-service-type}}, for more
41699 @c information on provenance tracking.
41700
41701 @c @footnote{This action (and the related actions
41702 @c @code{switch-generation} and @code{roll-back}) are usable after the
41703 @c home environment is initialized.}.
41704
41705 @item switch-generation
41706 @cindex home generations
41707 Switch to an existing home generation. This action atomically switches
41708 the home profile to the specified home generation.
41709
41710 The target generation can be specified explicitly by its generation
41711 number. For example, the following invocation would switch to home
41712 generation 7:
41713
41714 @example
41715 guix home switch-generation 7
41716 @end example
41717
41718 The target generation can also be specified relative to the current
41719 generation with the form @code{+N} or @code{-N}, where @code{+3} means
41720 ``3 generations ahead of the current generation,'' and @code{-1} means
41721 ``1 generation prior to the current generation.'' When specifying a
41722 negative value such as @code{-1}, you must precede it with @code{--} to
41723 prevent it from being parsed as an option. For example:
41724
41725 @example
41726 guix home switch-generation -- -1
41727 @end example
41728
41729 This action will fail if the specified generation does not exist.
41730
41731 @item roll-back
41732 @cindex rolling back
41733 Switch to the preceding home generation. This is the inverse
41734 of @command{reconfigure}, and it is exactly the same as invoking
41735 @command{switch-generation} with an argument of @code{-1}.
41736
41737 @item delete-generations
41738 @cindex deleting home generations
41739 @cindex saving space
41740 Delete home generations, making them candidates for garbage collection
41741 (@pxref{Invoking guix gc}, for information on how to run the ``garbage
41742 collector'').
41743
41744 This works in the same way as @samp{guix package --delete-generations}
41745 (@pxref{Invoking guix package, @option{--delete-generations}}). With no
41746 arguments, all home generations but the current one are deleted:
41747
41748 @example
41749 guix home delete-generations
41750 @end example
41751
41752 You can also select the generations you want to delete. The example below
41753 deletes all the home generations that are more than two months old:
41754
41755 @example
41756 guix home delete-generations 2m
41757 @end example
41758
41759 @item build
41760 Build the derivation of the home environment, which includes all the
41761 configuration files and programs needed. This action does not actually
41762 install anything.
41763
41764 @item describe
41765 Describe the current home generation: its file name, as well as
41766 provenance information when available.
41767
41768 To show installed packages in the current home generation's profile, the
41769 @code{--list-installed} flag is provided, with the same syntax that is
41770 used in @command{guix package --list-installed} (@pxref{Invoking guix
41771 package}). For instance, the following command shows a table of all the
41772 packages with ``emacs'' in their name that are installed in the current
41773 home generation's profile:
41774
41775 @example
41776 guix home describe --list-installed=emacs
41777 @end example
41778
41779 @item list-generations
41780 List a summary of each generation of the home environment available on
41781 disk, in a human-readable way. This is similar to the
41782 @option{--list-generations} option of @command{guix package}
41783 (@pxref{Invoking guix package}).
41784
41785 Optionally, one can specify a pattern, with the same syntax that is used
41786 in @command{guix package --list-generations}, to restrict the list of
41787 generations displayed. For instance, the following command displays
41788 generations that are up to 10 days old:
41789
41790 @example
41791 guix home list-generations 10d
41792 @end example
41793
41794 The @code{--list-installed} flag may also be specified, with the same
41795 syntax that is used in @command{guix home describe}. This may be
41796 helpful if trying to determine when a package was added to the home
41797 profile.
41798
41799 @item import
41800 Generate a @dfn{home environment} from the packages in the default
41801 profile and configuration files found in the user's home directory. The
41802 configuration files will be copied to the specified directory, and a
41803 @file{home-configuration.scm} will be populated with the home
41804 environment. Note that not every home service that exists is supported
41805 (@pxref{Home Services}).
41806
41807 @example
41808 $ guix home import ~/guix-config
41809 guix home: '/home/alice/guix-config' populated with all the Home configuration files
41810 @end example
41811 @end table
41812
41813 And there's more! @command{guix home} also provides the following
41814 sub-commands to visualize how the services of your home environment
41815 relate to one another:
41816
41817 @table @code
41818 @cindex service extension graph, of a home environment
41819 @item extension-graph
41820 Emit to standard output the @dfn{service extension graph} of the home
41821 environment defined in @var{file} (@pxref{Service Composition}, for more
41822 information on service extensions). By default the output is in
41823 Dot/Graphviz format, but you can choose a different format with
41824 @option{--graph-backend}, as with @command{guix graph} (@pxref{Invoking
41825 guix graph, @option{--backend}}):
41826
41827 The command:
41828
41829 @example
41830 guix home extension-graph @var{file} | xdot -
41831 @end example
41832
41833 shows the extension relations among services.
41834
41835 @cindex Shepherd dependency graph, for a home environment
41836 @item shepherd-graph
41837 Emit to standard output the @dfn{dependency graph} of shepherd services
41838 of the home environment defined in @var{file}. @xref{Shepherd
41839 Services}, for more information and for an example graph.
41840
41841 Again, the default output format is Dot/Graphviz, but you can pass
41842 @option{--graph-backend} to select a different one.
41843 @end table
41844
41845 @var{options} can contain any of the common build options (@pxref{Common
41846 Build Options}). In addition, @var{options} can contain one of the
41847 following:
41848
41849 @table @option
41850
41851 @item --expression=@var{expr}
41852 @itemx -e @var{expr}
41853 Consider the home-environment @var{expr} evaluates to.
41854 This is an alternative to specifying a file which evaluates to a home
41855 environment.
41856
41857 @item --allow-downgrades
41858 Instruct @command{guix home reconfigure} to allow system downgrades.
41859
41860 Just like @command{guix system}, @command{guix home reconfigure}, by
41861 default, prevents you from downgrading your home to older or unrelated
41862 revisions compared to the channel revisions that were used to deploy
41863 it---those shown by @command{guix home describe}. Using
41864 @option{--allow-downgrades} allows you to bypass that check, at the risk
41865 of downgrading your home---be careful!
41866
41867 @end table
41868
41869 @node Documentation
41870 @chapter Documentation
41871
41872 @cindex documentation, searching for
41873 @cindex searching for documentation
41874 @cindex Info, documentation format
41875 @cindex man pages
41876 @cindex manual pages
41877 In most cases packages installed with Guix come with documentation.
41878 There are two main documentation formats: ``Info'', a browsable
41879 hypertext format used for GNU software, and ``manual pages'' (or ``man
41880 pages''), the linear documentation format traditionally found on Unix.
41881 Info manuals are accessed with the @command{info} command or with Emacs,
41882 and man pages are accessed using @command{man}.
41883
41884 You can look for documentation of software installed on your system by
41885 keyword. For example, the following command searches for information
41886 about ``TLS'' in Info manuals:
41887
41888 @example
41889 $ info -k TLS
41890 "(emacs)Network Security" -- STARTTLS
41891 "(emacs)Network Security" -- TLS
41892 "(gnutls)Core TLS API" -- gnutls_certificate_set_verify_flags
41893 "(gnutls)Core TLS API" -- gnutls_certificate_set_verify_function
41894 @dots{}
41895 @end example
41896
41897 @noindent
41898 The command below searches for the same keyword in man
41899 pages@footnote{The database searched by @command{man -k} is only created
41900 in profiles that contain the @code{man-db} package.}:
41901
41902 @example
41903 $ man -k TLS
41904 SSL (7) - OpenSSL SSL/TLS library
41905 certtool (1) - GnuTLS certificate tool
41906 @dots {}
41907 @end example
41908
41909 These searches are purely local to your computer so you have the
41910 guarantee that documentation you find corresponds to what you have
41911 actually installed, you can access it off-line, and your privacy is
41912 respected.
41913
41914 Once you have these results, you can view the relevant documentation by
41915 running, say:
41916
41917 @example
41918 $ info "(gnutls)Core TLS API"
41919 @end example
41920
41921 @noindent
41922 or:
41923
41924 @example
41925 $ man certtool
41926 @end example
41927
41928 Info manuals contain sections and indices as well as hyperlinks like
41929 those found in Web pages. The @command{info} reader (@pxref{Top, Info
41930 reader,, info-stnd, Stand-alone GNU Info}) and its Emacs counterpart
41931 (@pxref{Misc Help,,, emacs, The GNU Emacs Manual}) provide intuitive key
41932 bindings to navigate manuals. @xref{Getting Started,,, info, Info: An
41933 Introduction}, for an introduction to Info navigation.
41934
41935 @node Platforms
41936 @chapter Platforms
41937
41938 The packages and systems built by Guix are intended, like most computer
41939 programs, to run on a CPU with a specific instruction set, and under a
41940 specific operating system. Those programs are often also targeting a
41941 specific kernel and system library. Those constraints are captured by
41942 Guix in @code{platform} records.
41943
41944 @menu
41945 * platform Reference:: Detail of platform declarations.
41946 * Supported Platforms:: Description of the supported platforms.
41947 @end menu
41948
41949 @node platform Reference
41950 @section @code{platform} Reference
41951
41952 The @code{platform} data type describes a @dfn{platform}: an
41953 @acronym{ISA, instruction set architecture}, combined with an operating
41954 system and possibly additional system-wide settings such as the
41955 @acronym{ABI, application binary interface}.
41956
41957 @deftp {Data Type} platform
41958 This is the data type representing a platform.
41959
41960 @table @asis
41961 @item @code{target}
41962 This field specifies the platform's GNU triplet as a string
41963 (@pxref{Specifying Target Triplets, GNU configuration triplets,,
41964 autoconf, Autoconf}).
41965
41966 @item @code{system}
41967 This string is the system type as it is known to Guix and passed,
41968 for instance, to the @option{--system} option of most commands.
41969
41970 It usually has the form @code{"@var{cpu}-@var{kernel}"}, where
41971 @var{cpu} is the target CPU and @var{kernel} the target operating
41972 system kernel.
41973
41974 It can be for instance @code{"aarch64-linux"} or @code{"armhf-linux"}.
41975 You will encounter system types when you perform native builds
41976 (@pxref{Native Builds}).
41977
41978 @item @code{linux-architecture} (default: @code{#false})
41979 This optional string field is only relevant if the kernel is Linux. In
41980 that case, it corresponds to the ARCH variable used when building Linux,
41981 @code{"mips"} for instance.
41982
41983 @item @code{glibc-dynamic-linker}
41984 This field is the name of the GNU C Library dynamic linker for the
41985 corresponding system, as a string. It can be
41986 @code{"/lib/ld-linux-armhf.so.3"}.
41987
41988 @end table
41989 @end deftp
41990
41991 @node Supported Platforms
41992 @section Supported Platforms
41993
41994 The @code{(guix platforms @dots{})} modules export the following
41995 variables, each of which is bound to a @code{platform} record.
41996
41997 @defvr {Scheme Variable} armv7-linux
41998 Platform targeting ARM v7 CPU running GNU/Linux.
41999 @end defvr
42000
42001 @defvr {Scheme Variable} aarch64-linux
42002 Platform targeting ARM v8 CPU running GNU/Linux.
42003 @end defvr
42004
42005 @defvr {Scheme Variable} mips64-linux
42006 Platform targeting MIPS little-endian 64-bit CPU running GNU/Linux.
42007 @end defvr
42008
42009 @defvr {Scheme Variable} powerpc-linux
42010 Platform targeting PowerPC big-endian 32-bit CPU running GNU/Linux.
42011 @end defvr
42012
42013 @defvr {Scheme Variable} powerpc64le-linux
42014 Platform targeting PowerPC little-endian 64-bit CPU running GNU/Linux.
42015 @end defvr
42016
42017 @defvr {Scheme Variable} riscv64-linux
42018 Platform targeting RISC-V 64-bit CPU running GNU/Linux.
42019 @end defvr
42020
42021 @defvr {Scheme Variable} i686-linux
42022 Platform targeting x86 CPU running GNU/Linux.
42023 @end defvr
42024
42025 @defvr {Scheme Variable} x86_64-linux
42026 Platform targeting x86 64-bit CPU running GNU/Linux.
42027 @end defvr
42028
42029 @defvr {Scheme Variable} i686-mingw
42030 Platform targeting x86 CPU running Windows, with run-time support from
42031 MinGW.
42032 @end defvr
42033
42034 @defvr {Scheme Variable} x86_64-mingw
42035 Platform targeting x86 64-bit CPU running Windows, with run-time support
42036 from MinGW.
42037 @end defvr
42038
42039 @defvr {Scheme Variable} i586-gnu
42040 Platform targeting x86 CPU running GNU/Hurd (also referred to as
42041 ``GNU'').
42042 @end defvr
42043
42044 @node System Images
42045 @chapter Creating System Images
42046
42047 @cindex system images
42048 When it comes to installing Guix System for the first time on a new
42049 machine, you can basically proceed in three different ways. The first
42050 one is to use an existing operating system on the machine to run the
42051 @command{guix system init} command (@pxref{Invoking guix system}). The
42052 second one, is to produce an installation image (@pxref{Building the
42053 Installation Image}). This is a bootable system which role is to
42054 eventually run @command{guix system init}. Finally, the third option
42055 would be to produce an image that is a direct instantiation of the
42056 system you wish to run. That image can then be copied on a bootable
42057 device such as an USB drive or a memory card. The target machine would
42058 then directly boot from it, without any kind of installation procedure.
42059
42060 The @command{guix system image} command is able to turn an operating
42061 system definition into a bootable image. This command supports
42062 different image types, such as @code{efi-raw}, @code{iso9660} and
42063 @code{docker}. Any modern @code{x86_64} machine will probably be able
42064 to boot from an @code{iso9660} image. However, there are a few machines
42065 out there that require specific image types. Those machines, in general
42066 using @code{ARM} processors, may expect specific partitions at specific
42067 offsets.
42068
42069 This chapter explains how to define customized system images and how to
42070 turn them into actual bootable images.
42071
42072 @menu
42073 * image Reference:: Detail of image declarations.
42074 * Instantiate an Image:: How to instantiate an image record.
42075 * image-type Reference:: Detail of image types declaration.
42076 * Image Modules:: Definition of image modules.
42077 @end menu
42078
42079 @node image Reference
42080 @section @code{image} Reference
42081
42082 The @code{image} record, described right after, allows you to define a
42083 customized bootable system image.
42084
42085 @deftp {Data Type} image
42086 This is the data type representing a system image.
42087
42088 @table @asis
42089 @item @code{name} (default: @code{#false})
42090 The image name as a symbol, @code{'my-iso9660} for instance. The name
42091 is optional and it defaults to @code{#false}.
42092
42093 @item @code{format}
42094 The image format as a symbol. The following formats are supported:
42095
42096 @itemize
42097 @item @code{disk-image}, a raw disk image composed of one or multiple
42098 partitions.
42099
42100 @item @code{compressed-qcow2}, a compressed qcow2 image composed of
42101 one or multiple partitions.
42102
42103 @item @code{docker}, a Docker image.
42104
42105 @item @code{iso9660}, an ISO-9660 image.
42106
42107 @item @code{tarball}, a tar.gz image archive.
42108
42109 @item @code{wsl2}, a WSL2 image.
42110
42111 @end itemize
42112
42113 @item @code{platform} (default: @code{#false})
42114 The @code{platform} record the image is targeting (@pxref{Platforms}),
42115 @code{aarch64-linux} for instance. By default, this field is set to
42116 @code{#false} and the image will target the host platform.
42117
42118 @item @code{size} (default: @code{'guess})
42119 The image size in bytes or @code{'guess}. The @code{'guess} symbol,
42120 which is the default, means that the image size will be inferred based
42121 on the image content.
42122
42123 @item @code{operating-system}
42124 The image's @code{operating-system} record that is instanciated.
42125
42126 @item @code{partition-table-type} (default: @code{'mbr})
42127 The image partition table type as a symbol. Possible values are
42128 @code{'mbr} and @code{'gpt}. It default to @code{'mbr}.
42129
42130 @item @code{partitions} (default: @code{'()})
42131 The image partitions as a list of @code{partition} records
42132 (@pxref{partition Reference}).
42133
42134 @item @code{compression?} (default: @code{#true})
42135 Whether the image content should be compressed, as a boolean. It
42136 defaults to @code{#true} and only applies to @code{'iso9660} image
42137 formats.
42138
42139 @item @code{volatile-root?} (default: @code{#true})
42140 Whether the image root partition should be made volatile, as a boolean.
42141
42142 This is achieved by using a RAM backed file system (overlayfs) that is
42143 mounted on top of the root partition by the initrd. It defaults to
42144 @code{#true}. When set to @code{#false}, the image root partition is
42145 mounted as read-write partition by the initrd.
42146
42147 @item @code{shared-store?} (default: @code{#false})
42148 Whether the image's store should be shared with the host system, as a
42149 boolean. This can be useful when creating images dedicated to virtual
42150 machines. When set to @code{#false}, which is the default, the image's
42151 @code{operating-system} closure is copied to the image. Otherwise, when
42152 set to @code{#true}, it is assumed that the host store will be made
42153 available at boot, using a @code{9p} mount for instance.
42154
42155 @item @code{shared-network?} (default: @code{#false})
42156 Whether to use the host network interfaces within the image, as a
42157 boolean. This is only used for the @code{'docker} image format. It
42158 defaults to @code{#false}.
42159
42160 @item @code{substitutable?} (default: @code{#true})
42161 Whether the image derivation should be substitutable, as a boolean. It
42162 defaults to @code{true}.
42163
42164 @end table
42165 @end deftp
42166
42167 @node partition Reference
42168 @subsection @code{partition} Reference
42169
42170 In @code{image} record may contain some partitions.
42171
42172 @deftp {Data Type} partition
42173 This is the data type representing an image partition.
42174
42175 @table @asis
42176 @item @code{size} (default: @code{'guess})
42177 The partition size in bytes or @code{'guess}. The @code{'guess} symbol,
42178 which is the default, means that the partition size will be inferred
42179 based on the partition content.
42180
42181 @item @code{offset} (default: @code{0})
42182 The partition's start offset in bytes, relative to the image start or
42183 the previous partition end. It defaults to @code{0} which means that
42184 there is no offset applied.
42185
42186 @item @code{file-system} (default: @code{"ext4"})
42187 The partition file system as a string, defaulting to @code{"ext4"}. The
42188 supported values are @code{"vfat"}, @code{"fat16"}, @code{"fat32"} and
42189 @code{"ext4"}.
42190
42191 @item @code{file-system-options} (default: @code{'()})
42192 The partition file system creation options that should be passed to the
42193 partition creation tool, as a list of strings. This is only supported
42194 when creating @code{"ext4"} partitions.
42195
42196 See the @code{"extended-options"} man page section of the
42197 @code{"mke2fs"} tool for a more complete reference.
42198
42199 @item @code{label}
42200 The partition label as a mandatory string, @code{"my-root"} for
42201 instance.
42202
42203 @item @code{uuid} (default: @code{#false})
42204 The partition UUID as an @code{uuid} record (@pxref{File Systems}). By
42205 default it is @code{#false}, which means that the partition creation
42206 tool will attribute a random UUID to the partition.
42207
42208 @item @code{flags} (default: @code{'()})
42209 The partition flags as a list of symbols. Possible values are
42210 @code{'boot} and @code{'esp}. The @code{'boot} flags should be set if
42211 you want to boot from this partition. Exactly one partition should have
42212 this flag set, usually the root one. The @code{'esp} flag identifies a
42213 UEFI System Partition.
42214
42215 @item @code{initializer} (default: @code{#false})
42216 The partition initializer procedure as a gexp. This procedure is called
42217 to populate a partition. If no initializer is passed, the
42218 @code{initialize-root-partition} procedure from the @code{(gnu build
42219 image)} module is used.
42220
42221 @end table
42222 @end deftp
42223
42224 @node Instantiate an Image
42225 @section Instantiate an Image
42226
42227 Let's say you would like to create an MBR image with three distinct
42228 partitions:
42229
42230 @itemize
42231 @item The @acronym{ESP, EFI System Partition}, a partition of
42232 40@tie{}MiB at offset 1024@tie{}KiB with a vfat file system.
42233
42234 @item an ext4 partition of 50@tie{}MiB data file, and labeled ``data''.
42235
42236 @item an ext4 bootable partition containing the @code{%simple-os}
42237 operating-system.
42238 @end itemize
42239
42240 You would then write the following image definition in a
42241 @code{my-image.scm} file for instance.
42242
42243 @lisp
42244 (use-modules (gnu)
42245 (gnu image)
42246 (gnu tests)
42247 (gnu system image)
42248 (guix gexp))
42249
42250 (define MiB (expt 2 20))
42251
42252 (image
42253 (format 'disk-image)
42254 (operating-system %simple-os)
42255 (partitions
42256 (list
42257 (partition
42258 (size (* 40 MiB))
42259 (offset (* 1024 1024))
42260 (label "GNU-ESP")
42261 (file-system "vfat")
42262 (flags '(esp))
42263 (initializer (gexp initialize-efi-partition)))
42264 (partition
42265 (size (* 50 MiB))
42266 (label "DATA")
42267 (file-system "ext4")
42268 (initializer #~(lambda* (root . rest)
42269 (mkdir root)
42270 (call-with-output-file
42271 (string-append root "/data")
42272 (lambda (port)
42273 (format port "my-data"))))))
42274 (partition
42275 (size 'guess)
42276 (label root-label)
42277 (file-system "ext4")
42278 (flags '(boot))
42279 (initializer (gexp initialize-root-partition))))))
42280 @end lisp
42281
42282 Note that the first and third partitions use generic initializers
42283 procedures, initialize-efi-partition and initialize-root-partition
42284 respectively. The initialize-efi-partition installs a GRUB EFI loader
42285 that is loading the GRUB bootloader located in the root partition. The
42286 initialize-root-partition instantiates a complete system as defined by
42287 the @code{%simple-os} operating-system.
42288
42289 You can now run:
42290
42291 @example
42292 guix system image my-image.scm
42293 @end example
42294
42295 to instantiate the @code{image} definition. That produces a disk image
42296 which has the expected structure:
42297
42298 @example
42299 $ parted $(guix system image my-image.scm) print
42300 @dots{}
42301 Model: (file)
42302 Disk /gnu/store/yhylv1bp5b2ypb97pd3bbhz6jk5nbhxw-disk-image: 1714MB
42303 Sector size (logical/physical): 512B/512B
42304 Partition Table: msdos
42305 Disk Flags:
42306
42307 Number Start End Size Type File system Flags
42308 1 1049kB 43.0MB 41.9MB primary fat16 esp
42309 2 43.0MB 95.4MB 52.4MB primary ext4
42310 3 95.4MB 1714MB 1619MB primary ext4 boot
42311 @end example
42312
42313 The size of the @code{boot} partition has been inferred to @code{1619MB}
42314 so that it is large enough to host the @code{%simple-os}
42315 operating-system.
42316
42317 You can also use existing @code{image} record definitions and inherit
42318 from them to simplify the @code{image} definition. The @code{(gnu
42319 system image)} module provides the following @code{image} definition
42320 variables.
42321
42322 @defvr {Scheme Variable} efi-disk-image
42323 A MBR disk-image composed of two partitions: a 64 bits ESP partition and
42324 a ROOT boot partition. This image can be used on most @code{x86_64} and
42325 @code{i686} machines, supporting BIOS or UEFI booting.
42326 @end defvr
42327
42328 @defvr {Scheme Variable} efi32-disk-image
42329 Same as @code{efi-disk-image} but with a 32 bits EFI partition.
42330 @end defvr
42331
42332 @defvr {Scheme Variable} iso9660-image
42333 An ISO-9660 image composed of a single bootable partition. This image
42334 can also be used on most @code{x86_64} and @code{i686} machines.
42335 @end defvr
42336
42337 @defvr {Scheme Variable} docker-image
42338 A Docker image that can be used to spawn a Docker container.
42339 @end defvr
42340
42341 Using the @code{efi-disk-image} we can simplify our previous
42342 @code{image} declaration this way:
42343
42344 @lisp
42345 (use-modules (gnu)
42346 (gnu image)
42347 (gnu tests)
42348 (gnu system image)
42349 (guix gexp)
42350 (ice-9 match))
42351
42352 (define MiB (expt 2 20))
42353
42354 (define data
42355 (partition
42356 (size (* 50 MiB))
42357 (label "DATA")
42358 (file-system "ext4")
42359 (initializer #~(lambda* (root . rest)
42360 (mkdir root)
42361 (call-with-output-file
42362 (string-append root "/data")
42363 (lambda (port)
42364 (format port "my-data")))))))
42365
42366 (image
42367 (inherit efi-disk-image)
42368 (operating-system %simple-os)
42369 (partitions
42370 (match (image-partitions efi-disk-image)
42371 ((esp root)
42372 (list esp data root)))))
42373 @end lisp
42374
42375 This will give the exact same @code{image} instantiation but the
42376 @code{image} declaration is simpler.
42377
42378 @node image-type Reference
42379 @section image-type Reference
42380
42381 The @command{guix system image} command can, as we saw above, take a
42382 file containing an @code{image} declaration as argument and produce an
42383 actual disk image from it. The same command can also handle a file
42384 containing an @code{operating-system} declaration as argument. In that
42385 case, how is the @code{operating-system} turned into an image?
42386
42387 That's where the @code{image-type} record intervenes. This record
42388 defines how to transform an @code{operating-system} record into an
42389 @code{image} record.
42390
42391 @deftp {Data Type} image-type
42392 This is the data type representing an image-type.
42393
42394 @table @asis
42395 @item @code{name}
42396 The image-type name as a mandatory symbol, @code{'efi32-raw} for
42397 instance.
42398
42399 @item @code{constructor}
42400 The image-type constructor, as a mandatory procedure that takes an
42401 @code{operating-system} record as argument and returns an @code{image}
42402 record.
42403
42404 @end table
42405 @end deftp
42406
42407 There are several @code{image-type} records provided by the @code{(gnu
42408 system image)} and the @code{(gnu system images @dots{})} modules.
42409
42410 @defvr {Scheme Variable} efi-raw-image-type
42411 Build an image based on the @code{efi-disk-image} image.
42412 @end defvr
42413
42414 @defvr {Scheme Variable} efi32-raw-image-type
42415 Build an image based on the @code{efi32-disk-image} image.
42416 @end defvr
42417
42418 @defvr {Scheme Variable} qcow2-image-type
42419 Build an image based on the @code{efi-disk-image} image but with the
42420 @code{compressed-qcow2} image format.
42421 @end defvr
42422
42423 @defvr {Scheme Variable} iso-image-type
42424 Build a compressed image based on the @code{iso9660-image} image.
42425 @end defvr
42426
42427 @defvr {Scheme Variable} uncompressed-iso-image-type
42428 Build an image based on the @code{iso9660-image} image but with the
42429 @code{compression?} field set to @code{#false}.
42430 @end defvr
42431
42432 @defvr {Scheme Variable} docker-image-type
42433 Build an image based on the @code{docker-image} image.
42434 @end defvr
42435
42436 @defvr {Scheme Variable} raw-with-offset-image-type
42437 Build an MBR image with a single partition starting at a @code{1024KiB}
42438 offset. This is useful to leave some room to install a bootloader in
42439 the post-MBR gap.
42440 @end defvr
42441
42442 @defvr {Scheme Variable} pinebook-pro-image-type
42443 Build an image that is targeting the Pinebook Pro machine. The MBR
42444 image contains a single partition starting at a @code{9MiB} offset. The
42445 @code{u-boot-pinebook-pro-rk3399-bootloader} bootloader will be
42446 installed in this gap.
42447 @end defvr
42448
42449 @defvr {Scheme Variable} rock64-image-type
42450 Build an image that is targeting the Rock64 machine. The MBR image
42451 contains a single partition starting at a @code{16MiB} offset. The
42452 @code{u-boot-rock64-rk3328-bootloader} bootloader will be installed in
42453 this gap.
42454 @end defvr
42455
42456 @defvr {Scheme Variable} novena-image-type
42457 Build an image that is targeting the Novena machine. It has the same
42458 characteristics as @code{raw-with-offset-image-type}.
42459 @end defvr
42460
42461 @defvr {Scheme Variable} pine64-image-type
42462 Build an image that is targeting the Pine64 machine. It has the same
42463 characteristics as @code{raw-with-offset-image-type}.
42464 @end defvr
42465
42466 @defvr {Scheme Variable} hurd-image-type
42467 Build an image that is targeting a @code{i386} machine running the Hurd
42468 kernel. The MBR image contains a single ext2 partitions with specific
42469 @code{file-system-options} flags.
42470 @end defvr
42471
42472 @defvr {Scheme Variable} hurd-qcow2-image-type
42473 Build an image similar to the one built by the @code{hurd-image-type}
42474 but with the @code{format} set to @code{'compressed-qcow2}.
42475 @end defvr
42476
42477 @defvr {Scheme Variable} wsl2-image-type
42478 Build an image for the @acronym{WSL2, Windows Subsystem for Linux 2}.
42479 It can be imported by running:
42480
42481 @example
42482 wsl --import Guix ./guix ./wsl2-image.tar.gz
42483 wsl -d Guix
42484 @end example
42485
42486 @end defvr
42487
42488 So, if we get back to the @code{guix system image} command taking an
42489 @code{operating-system} declaration as argument. By default, the
42490 @code{efi-raw-image-type} is used to turn the provided
42491 @code{operating-system} into an actual bootable image.
42492
42493 To use a different @code{image-type}, the @code{--image-type} option can
42494 be used. The @code{--list-image-types} option will list all the
42495 supported image types. It turns out to be a textual listing of all the
42496 @code{image-types} variables described just above (@pxref{Invoking guix
42497 system}).
42498
42499 @node Image Modules
42500 @section Image Modules
42501
42502 Let's take the example of the Pine64, an ARM based machine. To be able
42503 to produce an image targeting this board, we need the following
42504 elements:
42505
42506 @itemize
42507 @item An @code{operating-system} record containing at least
42508 an appropriate kernel (@code{linux-libre-arm64-generic}) and bootloader
42509 @code{u-boot-pine64-lts-bootloader}) for the Pine64.
42510
42511 @item Possibly, an @code{image-type} record providing a way to
42512 turn an @code{operating-system} record to an @code{image} record
42513 suitable for the Pine64.
42514
42515 @item An actual @code{image} that can be instantiated with the
42516 @command{guix system image} command.
42517
42518 @end itemize
42519
42520 The @code{(gnu system images pine64)} module provides all those
42521 elements: @code{pine64-barebones-os}, @code{pine64-image-type} and
42522 @code{pine64-barebones-raw-image} respectively.
42523
42524 The module returns the @code{pine64-barebones-raw-image} in order for
42525 users to be able to run:
42526
42527 @example
42528 guix system image gnu/system/images/pine64.scm
42529 @end example
42530
42531 Now, thanks to the @code{pine64-image-type} record declaring the
42532 @code{'pine64-raw} @code{image-type}, one could also prepare a
42533 @code{my-pine.scm} file with the following content:
42534
42535 @lisp
42536 (use-modules (gnu system images pine64))
42537 (operating-system
42538 (inherit pine64-barebones-os)
42539 (timezone "Europe/Athens"))
42540 @end lisp
42541
42542 to customize the @code{pine64-barebones-os}, and run:
42543
42544 @example
42545 $ guix system image --image-type=pine64-raw my-pine.scm
42546 @end example
42547
42548 Note that there are other modules in the @code{gnu/system/images}
42549 directory targeting @code{Novena}, @code{Pine64}, @code{PinebookPro} and
42550 @code{Rock64} machines.
42551
42552 @node Installing Debugging Files
42553 @chapter Installing Debugging Files
42554
42555 @cindex debugging files
42556 Program binaries, as produced by the GCC compilers for instance, are
42557 typically written in the ELF format, with a section containing
42558 @dfn{debugging information}. Debugging information is what allows the
42559 debugger, GDB, to map binary code to source code; it is required to
42560 debug a compiled program in good conditions.
42561
42562 This chapter explains how to use separate debug info when packages
42563 provide it, and how to rebuild packages with debug info when it's
42564 missing.
42565
42566 @menu
42567 * Separate Debug Info:: Installing 'debug' outputs.
42568 * Rebuilding Debug Info:: Building missing debug info.
42569 @end menu
42570
42571 @node Separate Debug Info
42572 @section Separate Debug Info
42573
42574 The problem with debugging information is that is takes up a fair amount
42575 of disk space. For example, debugging information for the GNU C Library
42576 weighs in at more than 60 MiB@. Thus, as a user, keeping all the
42577 debugging info of all the installed programs is usually not an option.
42578 Yet, space savings should not come at the cost of an impediment to
42579 debugging---especially in the GNU system, which should make it easier
42580 for users to exert their computing freedom (@pxref{GNU Distribution}).
42581
42582 Thankfully, the GNU Binary Utilities (Binutils) and GDB provide a
42583 mechanism that allows users to get the best of both worlds: debugging
42584 information can be stripped from the binaries and stored in separate
42585 files. GDB is then able to load debugging information from those files,
42586 when they are available (@pxref{Separate Debug Files,,, gdb, Debugging
42587 with GDB}).
42588
42589 The GNU distribution takes advantage of this by storing debugging
42590 information in the @code{lib/debug} sub-directory of a separate package
42591 output unimaginatively called @code{debug} (@pxref{Packages with
42592 Multiple Outputs}). Users can choose to install the @code{debug} output
42593 of a package when they need it. For instance, the following command
42594 installs the debugging information for the GNU C Library and for GNU
42595 Guile:
42596
42597 @example
42598 guix install glibc:debug guile:debug
42599 @end example
42600
42601 GDB must then be told to look for debug files in the user's profile, by
42602 setting the @code{debug-file-directory} variable (consider setting it
42603 from the @file{~/.gdbinit} file, @pxref{Startup,,, gdb, Debugging with
42604 GDB}):
42605
42606 @example
42607 (gdb) set debug-file-directory ~/.guix-profile/lib/debug
42608 @end example
42609
42610 From there on, GDB will pick up debugging information from the
42611 @file{.debug} files under @file{~/.guix-profile/lib/debug}.
42612
42613 Below is an alternative GDB script which is useful when working with
42614 other profiles. It takes advantage of the optional Guile integration in
42615 GDB. This snippet is included by default on Guix System in the
42616 @file{~/.gdbinit} file.
42617
42618 @example
42619 guile
42620 (use-modules (gdb))
42621 (execute (string-append "set debug-file-directory "
42622 (or (getenv "GDB_DEBUG_FILE_DIRECTORY")
42623 "~/.guix-profile/lib/debug")))
42624 end
42625 @end example
42626
42627 In addition, you will most likely want GDB to be able to show the source
42628 code being debugged. To do that, you will have to unpack the source
42629 code of the package of interest (obtained with @code{guix build
42630 --source}, @pxref{Invoking guix build}), and to point GDB to that source
42631 directory using the @code{directory} command (@pxref{Source Path,
42632 @code{directory},, gdb, Debugging with GDB}).
42633
42634 @c XXX: keep me up-to-date
42635 The @code{debug} output mechanism in Guix is implemented by the
42636 @code{gnu-build-system} (@pxref{Build Systems}). Currently, it is
42637 opt-in---debugging information is available only for the packages with
42638 definitions explicitly declaring a @code{debug} output. To check
42639 whether a package has a @code{debug} output, use @command{guix package
42640 --list-available} (@pxref{Invoking guix package}).
42641
42642 Read on for how to deal with packages lacking a @code{debug} output.
42643
42644 @node Rebuilding Debug Info
42645 @section Rebuilding Debug Info
42646
42647 @cindex debugging info, rebuilding
42648 As we saw above, some packages, but not all, provide debugging info in a
42649 @code{debug} output. What can you do when debugging info is missing?
42650 The @option{--with-debug-info} option provides a solution to that: it
42651 allows you to rebuild the package(s) for which debugging info is
42652 missing---and only those---and to graft those onto the application
42653 you're debugging. Thus, while it's not as fast as installing a
42654 @code{debug} output, it is relatively inexpensive.
42655
42656 Let's illustrate that. Suppose you're experiencing a bug in Inkscape
42657 and would like to see what's going on in GLib, a library that's deep
42658 down in its dependency graph. As it turns out, GLib does not have a
42659 @code{debug} output and the backtrace GDB shows is all sadness:
42660
42661 @example
42662 (gdb) bt
42663 #0 0x00007ffff5f92190 in g_getenv ()
42664 from /gnu/store/@dots{}-glib-2.62.6/lib/libglib-2.0.so.0
42665 #1 0x00007ffff608a7d6 in gobject_init_ctor ()
42666 from /gnu/store/@dots{}-glib-2.62.6/lib/libgobject-2.0.so.0
42667 #2 0x00007ffff7fe275a in call_init (l=<optimized out>, argc=argc@@entry=1, argv=argv@@entry=0x7fffffffcfd8,
42668 env=env@@entry=0x7fffffffcfe8) at dl-init.c:72
42669 #3 0x00007ffff7fe2866 in call_init (env=0x7fffffffcfe8, argv=0x7fffffffcfd8, argc=1, l=<optimized out>)
42670 at dl-init.c:118
42671 @end example
42672
42673 To address that, you install Inkscape linked against a variant GLib that
42674 contains debug info:
42675
42676 @example
42677 guix install inkscape --with-debug-info=glib
42678 @end example
42679
42680 This time, debugging will be a whole lot nicer:
42681
42682 @example
42683 $ gdb --args sh -c 'exec inkscape'
42684 @dots{}
42685 (gdb) b g_getenv
42686 Function "g_getenv" not defined.
42687 Make breakpoint pending on future shared library load? (y or [n]) y
42688 Breakpoint 1 (g_getenv) pending.
42689 (gdb) r
42690 Starting program: /gnu/store/@dots{}-profile/bin/sh -c exec\ inkscape
42691 @dots{}
42692 (gdb) bt
42693 #0 g_getenv (variable=variable@@entry=0x7ffff60c7a2e "GOBJECT_DEBUG") at ../glib-2.62.6/glib/genviron.c:252
42694 #1 0x00007ffff608a7d6 in gobject_init () at ../glib-2.62.6/gobject/gtype.c:4380
42695 #2 gobject_init_ctor () at ../glib-2.62.6/gobject/gtype.c:4493
42696 #3 0x00007ffff7fe275a in call_init (l=<optimized out>, argc=argc@@entry=3, argv=argv@@entry=0x7fffffffd088,
42697 env=env@@entry=0x7fffffffd0a8) at dl-init.c:72
42698 @dots{}
42699 @end example
42700
42701 Much better!
42702
42703 Note that there can be packages for which @option{--with-debug-info}
42704 will not have the desired effect. @xref{Package Transformation Options,
42705 @option{--with-debug-info}}, for more information.
42706
42707 @node Using TeX and LaTeX
42708 @chapter Using @TeX{} and @LaTeX{}
42709
42710 @cindex @TeX{} packages
42711 @cindex @LaTeX{} packages
42712 Guix provides packages for the @TeX{}, @LaTeX{}, ConTeXt, LuaTeX, and
42713 related typesetting systems, taken from the
42714 @uref{https://www.tug.org/texlive/, @TeX{} Live distribution}. However,
42715 because @TeX{} Live is so huge and because finding your way in this maze
42716 is tricky, we thought that you, dear user, would welcome guidance on how
42717 to deploy the relevant packages so you can compile your @TeX{} and
42718 @LaTeX{} documents.
42719
42720 @TeX{} Live currently comes in two flavors in Guix:
42721
42722 @itemize
42723 @item
42724 The ``monolithic'' @code{texlive} package: it comes with @emph{every
42725 single @TeX{} Live package} (more than 7,000 of them), but it is huge
42726 (more than 4@tie{}GiB for a single package!).
42727
42728 @item
42729 The ``modular'' @code{texlive-} packages: you install
42730 @code{texlive-base}, which provides core functionality and the main
42731 commands---@command{pdflatex}, @command{dvips}, @command{luatex},
42732 @command{mf}, etc.---together with individual packages that provide just
42733 the features you need---@code{texlive-listings} for the
42734 @code{listings} package, @code{texlive-hyperref} for @code{hyperref},
42735 @code{texlive-beamer} for Beamer, @code{texlive-pgf} for PGF/TikZ,
42736 and so on.
42737 @end itemize
42738
42739 We recommend using the modular package set because it is much less
42740 resource-hungry. To build your documents, you would use commands such
42741 as:
42742
42743 @example
42744 guix shell texlive-base texlive-wrapfig \
42745 texlive-hyperref texlive-cm-super -- pdflatex doc.tex
42746 @end example
42747
42748 You can quickly end up with unreasonably long command lines though. The
42749 solution is to instead write a manifest, for example like this one:
42750
42751 @lisp
42752 (specifications->manifest
42753 '("rubber"
42754
42755 "texlive-base"
42756 "texlive-wrapfig"
42757
42758 "texlive-microtype"
42759 "texlive-listings" "texlive-hyperref"
42760
42761 ;; PGF/TikZ
42762 "texlive-pgf"
42763
42764 ;; Additional fonts.
42765 "texlive-cm-super" "texlive-amsfonts"
42766 "texlive-times" "texlive-helvetic" "texlive-courier"))
42767 @end lisp
42768
42769 You can then pass it to any command with the @option{-m} option:
42770
42771 @example
42772 guix shell -m manifest.scm -- pdflatex doc.tex
42773 @end example
42774
42775 @xref{Writing Manifests}, for more on
42776 manifests. In the future, we plan to provide packages for @TeX{} Live
42777 @dfn{collections}---``meta-packages'' such as @code{fontsrecommended},
42778 @code{humanities}, or @code{langarabic} that provide the set of packages
42779 needed in this particular domain. That will allow you to list fewer
42780 packages.
42781
42782 The main difficulty here is that using the modular package set forces
42783 you to select precisely the packages that you need. You can use
42784 @command{guix search}, but finding the right package can prove to be
42785 tedious. When a package is missing, @command{pdflatex} and similar
42786 commands fail with an obscure message along the lines of:
42787
42788 @example
42789 doc.tex: File `tikz.sty' not found.
42790 doc.tex:7: Emergency stop.
42791 @end example
42792
42793 @noindent
42794 or, for a missing font:
42795
42796 @example
42797 kpathsea: Running mktexmf phvr7t
42798 ! I can't find file `phvr7t'.
42799 @end example
42800
42801 How do you determine what the missing package is? In the first case,
42802 you'll find the answer by running:
42803
42804 @example
42805 $ guix search texlive tikz
42806 name: texlive-pgf
42807 version: 59745
42808 @dots{}
42809 @end example
42810
42811 In the second case, @command{guix search} turns up nothing. Instead,
42812 you can search the @TeX{} Live package database using the @command{tlmgr}
42813 command:
42814
42815 @example
42816 $ guix shell texlive-base -- tlmgr info phvr7t
42817 tlmgr: cannot find package phvr7t, searching for other matches:
42818
42819 Packages containing `phvr7t' in their title/description:
42820
42821 Packages containing files matching `phvr7t':
42822 helvetic:
42823 texmf-dist/fonts/tfm/adobe/helvetic/phvr7t.tfm
42824 texmf-dist/fonts/tfm/adobe/helvetic/phvr7tn.tfm
42825 texmf-dist/fonts/vf/adobe/helvetic/phvr7t.vf
42826 texmf-dist/fonts/vf/adobe/helvetic/phvr7tn.vf
42827 tex4ht:
42828 texmf-dist/tex4ht/ht-fonts/alias/adobe/helvetic/phvr7t.htf
42829 @end example
42830
42831 The file is available in the @TeX{} Live @code{helvetic} package, which is
42832 known in Guix as @code{texlive-helvetic}. Quite a ride, but we found
42833 it!
42834
42835 There is one important limitation though: Guix currently provides a
42836 subset of the @TeX{} Live packages. If you stumble upon a missing
42837 package, you can try and import it (@pxref{Invoking guix import}):
42838
42839 @example
42840 guix import texlive @var{package}
42841 @end example
42842
42843 Additional options include:
42844
42845 @table @code
42846 @item --recursive
42847 @itemx -r
42848 Traverse the dependency graph of the given upstream package recursively
42849 and generate package expressions for all those packages that are not yet
42850 in Guix.
42851 @end table
42852
42853 @quotation Note
42854 @TeX{} Live packaging is still very much work in progress, but you can
42855 help! @xref{Contributing}, for more information.
42856 @end quotation
42857
42858 @node Security Updates
42859 @chapter Security Updates
42860
42861 @cindex security updates
42862 @cindex security vulnerabilities
42863 Occasionally, important security vulnerabilities are discovered in software
42864 packages and must be patched. Guix developers try hard to keep track of
42865 known vulnerabilities and to apply fixes as soon as possible in the
42866 @code{master} branch of Guix (we do not yet provide a ``stable'' branch
42867 containing only security updates). The @command{guix lint} tool helps
42868 developers find out about vulnerable versions of software packages in the
42869 distribution:
42870
42871 @smallexample
42872 $ guix lint -c cve
42873 gnu/packages/base.scm:652:2: glibc@@2.21: probably vulnerable to CVE-2015-1781, CVE-2015-7547
42874 gnu/packages/gcc.scm:334:2: gcc@@4.9.3: probably vulnerable to CVE-2015-5276
42875 gnu/packages/image.scm:312:2: openjpeg@@2.1.0: probably vulnerable to CVE-2016-1923, CVE-2016-1924
42876 @dots{}
42877 @end smallexample
42878
42879 @xref{Invoking guix lint}, for more information.
42880
42881 Guix follows a functional
42882 package management discipline (@pxref{Introduction}), which implies
42883 that, when a package is changed, @emph{every package that depends on it}
42884 must be rebuilt. This can significantly slow down the deployment of
42885 fixes in core packages such as libc or Bash, since basically the whole
42886 distribution would need to be rebuilt. Using pre-built binaries helps
42887 (@pxref{Substitutes}), but deployment may still take more time than
42888 desired.
42889
42890 @cindex grafts
42891 To address this, Guix implements @dfn{grafts}, a mechanism that allows
42892 for fast deployment of critical updates without the costs associated
42893 with a whole-distribution rebuild. The idea is to rebuild only the
42894 package that needs to be patched, and then to ``graft'' it onto packages
42895 explicitly installed by the user and that were previously referring to
42896 the original package. The cost of grafting is typically very low, and
42897 order of magnitudes lower than a full rebuild of the dependency chain.
42898
42899 @cindex replacements of packages, for grafts
42900 For instance, suppose a security update needs to be applied to Bash.
42901 Guix developers will provide a package definition for the ``fixed''
42902 Bash, say @code{bash-fixed}, in the usual way (@pxref{Defining
42903 Packages}). Then, the original package definition is augmented with a
42904 @code{replacement} field pointing to the package containing the bug fix:
42905
42906 @lisp
42907 (define bash
42908 (package
42909 (name "bash")
42910 ;; @dots{}
42911 (replacement bash-fixed)))
42912 @end lisp
42913
42914 From there on, any package depending directly or indirectly on Bash---as
42915 reported by @command{guix gc --requisites} (@pxref{Invoking guix
42916 gc})---that is installed is automatically ``rewritten'' to refer to
42917 @code{bash-fixed} instead of @code{bash}. This grafting process takes
42918 time proportional to the size of the package, usually less than a
42919 minute for an ``average'' package on a recent machine. Grafting is
42920 recursive: when an indirect dependency requires grafting, then grafting
42921 ``propagates'' up to the package that the user is installing.
42922
42923 Currently, the length of the name and version of the graft and that of
42924 the package it replaces (@code{bash-fixed} and @code{bash} in the example
42925 above) must be equal. This restriction mostly comes from the fact that
42926 grafting works by patching files, including binary files, directly.
42927 Other restrictions may apply: for instance, when adding a graft to a
42928 package providing a shared library, the original shared library and its
42929 replacement must have the same @code{SONAME} and be binary-compatible.
42930
42931 The @option{--no-grafts} command-line option allows you to forcefully
42932 avoid grafting (@pxref{Common Build Options, @option{--no-grafts}}).
42933 Thus, the command:
42934
42935 @example
42936 guix build bash --no-grafts
42937 @end example
42938
42939 @noindent
42940 returns the store file name of the original Bash, whereas:
42941
42942 @example
42943 guix build bash
42944 @end example
42945
42946 @noindent
42947 returns the store file name of the ``fixed'', replacement Bash. This
42948 allows you to distinguish between the two variants of Bash.
42949
42950 To verify which Bash your whole profile refers to, you can run
42951 (@pxref{Invoking guix gc}):
42952
42953 @example
42954 guix gc -R $(readlink -f ~/.guix-profile) | grep bash
42955 @end example
42956
42957 @noindent
42958 @dots{} and compare the store file names that you get with those above.
42959 Likewise for a complete Guix system generation:
42960
42961 @example
42962 guix gc -R $(guix system build my-config.scm) | grep bash
42963 @end example
42964
42965 Lastly, to check which Bash running processes are using, you can use the
42966 @command{lsof} command:
42967
42968 @example
42969 lsof | grep /gnu/store/.*bash
42970 @end example
42971
42972
42973 @node Bootstrapping
42974 @chapter Bootstrapping
42975
42976 @c Adapted from the ELS 2013 paper.
42977
42978 @cindex bootstrapping
42979
42980 Bootstrapping in our context refers to how the distribution gets built
42981 ``from nothing''. Remember that the build environment of a derivation
42982 contains nothing but its declared inputs (@pxref{Introduction}). So
42983 there's an obvious chicken-and-egg problem: how does the first package
42984 get built? How does the first compiler get compiled?
42985
42986 It is tempting to think of this question as one that only die-hard
42987 hackers may care about. However, while the answer to that question is
42988 technical in nature, its implications are wide-ranging. How the
42989 distribution is bootstrapped defines the extent to which we, as
42990 individuals and as a collective of users and hackers, can trust the
42991 software we run. It is a central concern from the standpoint of
42992 @emph{security} and from a @emph{user freedom} viewpoint.
42993
42994 @cindex bootstrap binaries
42995 The GNU system is primarily made of C code, with libc at its core. The
42996 GNU build system itself assumes the availability of a Bourne shell and
42997 command-line tools provided by GNU Coreutils, Awk, Findutils, `sed', and
42998 `grep'. Furthermore, build programs---programs that run
42999 @code{./configure}, @code{make}, etc.---are written in Guile Scheme
43000 (@pxref{Derivations}). Consequently, to be able to build anything at
43001 all, from scratch, Guix relies on pre-built binaries of Guile, GCC,
43002 Binutils, libc, and the other packages mentioned above---the
43003 @dfn{bootstrap binaries}.
43004
43005 These bootstrap binaries are ``taken for granted'', though we can also
43006 re-create them if needed (@pxref{Preparing to Use the Bootstrap
43007 Binaries}).
43008
43009 @menu
43010 * Reduced Binary Seed Bootstrap:: A Bootstrap worthy of GNU.
43011 * Preparing to Use the Bootstrap Binaries:: Building that what matters most.
43012 @end menu
43013
43014 @node Reduced Binary Seed Bootstrap
43015 @section The Reduced Binary Seed Bootstrap
43016
43017 Guix---like other GNU/Linux distributions---is traditionally bootstrapped from
43018 a set of bootstrap binaries: Bourne shell, command-line tools provided by GNU
43019 Coreutils, Awk, Findutils, `sed', and `grep' and Guile, GCC, Binutils, and the
43020 GNU C Library (@pxref{Bootstrapping}). Usually, these bootstrap binaries are
43021 ``taken for granted.''
43022
43023 Taking the bootstrap binaries for granted means that we consider them to
43024 be a correct and trustworthy ``seed'' for building the complete system.
43025 Therein lies a problem: the combined size of these bootstrap binaries is
43026 about 250MB (@pxref{Bootstrappable Builds,,, mes, GNU Mes}). Auditing
43027 or even inspecting these is next to impossible.
43028
43029 For @code{i686-linux} and @code{x86_64-linux}, Guix now features a
43030 ``Reduced Binary Seed'' bootstrap @footnote{We would like to say: ``Full
43031 Source Bootstrap'' and while we are working towards that goal it would
43032 be hyperbole to use that term for what we do now.}.
43033
43034 The Reduced Binary Seed bootstrap removes the most critical tools---from a
43035 trust perspective---from the bootstrap binaries: GCC, Binutils and the GNU C
43036 Library are replaced by: @code{bootstrap-mescc-tools} (a tiny assembler and
43037 linker) and @code{bootstrap-mes} (a small Scheme Interpreter and a C compiler
43038 written in Scheme and the Mes C Library, built for TinyCC and for GCC).
43039
43040 Using these new binary seeds the ``missing'' Binutils, GCC, and the GNU
43041 C Library are built from source. From here on the more traditional
43042 bootstrap process resumes. This approach has reduced the bootstrap
43043 binaries in size to about 145MB in Guix v1.1.
43044
43045 The next step that Guix has taken is to replace the shell and all its
43046 utilities with implementations in Guile Scheme, the @emph{Scheme-only
43047 bootstrap}. Gash (@pxref{Gash,,, gash, The Gash manual}) is a
43048 POSIX-compatible shell that replaces Bash, and it comes with Gash Utils
43049 which has minimalist replacements for Awk, the GNU Core Utilities, Grep,
43050 Gzip, Sed, and Tar. The rest of the bootstrap binary seeds that were
43051 removed are now built from source.
43052
43053 Building the GNU System from source is currently only possible by adding
43054 some historical GNU packages as intermediate steps@footnote{Packages
43055 such as @code{gcc-2.95.3}, @code{binutils-2.14}, @code{glibc-2.2.5},
43056 @code{gzip-1.2.4}, @code{tar-1.22}, and some others. For details, see
43057 @file{gnu/packages/commencement.scm}.}. As Gash and Gash Utils mature,
43058 and GNU packages become more bootstrappable again (e.g., new releases of
43059 GNU Sed will also ship as gzipped tarballs again, as alternative to the
43060 hard to bootstrap @code{xz}-compression), this set of added packages can
43061 hopefully be reduced again.
43062
43063 The graph below shows the resulting dependency graph for
43064 @code{gcc-core-mesboot0}, the bootstrap compiler used for the
43065 traditional bootstrap of the rest of the Guix System.
43066
43067 @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
43068 @image{images/gcc-core-mesboot0-graph,6in,,Dependency graph of gcc-core-mesboot0}
43069
43070 The only significant binary bootstrap seeds that remain@footnote{
43071 Ignoring the 68KB @code{mescc-tools}; that will be removed later,
43072 together with @code{mes}.} are a Scheme interpreter and a Scheme
43073 compiler: GNU Mes and GNU Guile@footnote{Not shown in this graph are the
43074 static binaries for @file{bash}, @code{tar}, and @code{xz} that are used
43075 to get Guile running.}.
43076
43077 This further reduction has brought down the size of the binary seed to
43078 about 60MB for @code{i686-linux} and @code{x86_64-linux}.
43079
43080 Work is ongoing to remove all binary blobs from our free software
43081 bootstrap stack, working towards a Full Source Bootstrap. Also ongoing
43082 is work to bring these bootstraps to the @code{arm-linux} and
43083 @code{aarch64-linux} architectures and to the Hurd.
43084
43085 If you are interested, join us on @samp{#bootstrappable} on the Freenode
43086 IRC network or discuss on @email{bug-mes@@gnu.org} or
43087 @email{gash-devel@@nongnu.org}.
43088
43089 @node Preparing to Use the Bootstrap Binaries
43090 @section Preparing to Use the Bootstrap Binaries
43091
43092 @c As of Emacs 24.3, Info-mode displays the image, but since it's a
43093 @c large image, it's hard to scroll. Oh well.
43094 @image{images/bootstrap-graph,6in,,Dependency graph of the early bootstrap derivations}
43095
43096 The figure above shows the very beginning of the dependency graph of the
43097 distribution, corresponding to the package definitions of the @code{(gnu
43098 packages bootstrap)} module. A similar figure can be generated with
43099 @command{guix graph} (@pxref{Invoking guix graph}), along the lines of:
43100
43101 @example
43102 guix graph -t derivation \
43103 -e '(@@@@ (gnu packages bootstrap) %bootstrap-gcc)' \
43104 | dot -Tps > gcc.ps
43105 @end example
43106
43107 or, for the further Reduced Binary Seed bootstrap
43108
43109 @example
43110 guix graph -t derivation \
43111 -e '(@@@@ (gnu packages bootstrap) %bootstrap-mes)' \
43112 | dot -Tps > mes.ps
43113 @end example
43114
43115 At this level of detail, things are
43116 slightly complex. First, Guile itself consists of an ELF executable,
43117 along with many source and compiled Scheme files that are dynamically
43118 loaded when it runs. This gets stored in the @file{guile-2.0.7.tar.xz}
43119 tarball shown in this graph. This tarball is part of Guix's ``source''
43120 distribution, and gets inserted into the store with @code{add-to-store}
43121 (@pxref{The Store}).
43122
43123 But how do we write a derivation that unpacks this tarball and adds it
43124 to the store? To solve this problem, the @code{guile-bootstrap-2.0.drv}
43125 derivation---the first one that gets built---uses @code{bash} as its
43126 builder, which runs @code{build-bootstrap-guile.sh}, which in turn calls
43127 @code{tar} to unpack the tarball. Thus, @file{bash}, @file{tar},
43128 @file{xz}, and @file{mkdir} are statically-linked binaries, also part of
43129 the Guix source distribution, whose sole purpose is to allow the Guile
43130 tarball to be unpacked.
43131
43132 Once @code{guile-bootstrap-2.0.drv} is built, we have a functioning
43133 Guile that can be used to run subsequent build programs. Its first task
43134 is to download tarballs containing the other pre-built binaries---this
43135 is what the @file{.tar.xz.drv} derivations do. Guix modules such as
43136 @code{ftp-client.scm} are used for this purpose. The
43137 @code{module-import.drv} derivations import those modules in a directory
43138 in the store, using the original layout. The
43139 @code{module-import-compiled.drv} derivations compile those modules, and
43140 write them in an output directory with the right layout. This
43141 corresponds to the @code{#:modules} argument of
43142 @code{build-expression->derivation} (@pxref{Derivations}).
43143
43144 Finally, the various tarballs are unpacked by the derivations
43145 @code{gcc-bootstrap-0.drv}, @code{glibc-bootstrap-0.drv}, or
43146 @code{bootstrap-mes-0.drv} and @code{bootstrap-mescc-tools-0.drv}, at which
43147 point we have a working C tool chain.
43148
43149 @unnumberedsec Building the Build Tools
43150
43151 Bootstrapping is complete when we have a full tool chain that does not
43152 depend on the pre-built bootstrap tools discussed above. This
43153 no-dependency requirement is verified by checking whether the files of
43154 the final tool chain contain references to the @file{/gnu/store}
43155 directories of the bootstrap inputs. The process that leads to this
43156 ``final'' tool chain is described by the package definitions found in
43157 the @code{(gnu packages commencement)} module.
43158
43159 The @command{guix graph} command allows us to ``zoom out'' compared to
43160 the graph above, by looking at the level of package objects instead of
43161 individual derivations---remember that a package may translate to
43162 several derivations, typically one derivation to download its source,
43163 one to build the Guile modules it needs, and one to actually build the
43164 package from source. The command:
43165
43166 @example
43167 guix graph -t bag \
43168 -e '(@@@@ (gnu packages commencement)
43169 glibc-final-with-bootstrap-bash)' | xdot -
43170 @end example
43171
43172 @noindent
43173 displays the dependency graph leading to the ``final'' C
43174 library@footnote{You may notice the @code{glibc-intermediate} label,
43175 suggesting that it is not @emph{quite} final, but as a good
43176 approximation, we will consider it final.}, depicted below.
43177
43178 @image{images/bootstrap-packages,6in,,Dependency graph of the early packages}
43179
43180 @c See <https://lists.gnu.org/archive/html/gnu-system-discuss/2012-10/msg00000.html>.
43181 The first tool that gets built with the bootstrap binaries is
43182 GNU@tie{}Make---noted @code{make-boot0} above---which is a prerequisite
43183 for all the following packages. From there Findutils and Diffutils get
43184 built.
43185
43186 Then come the first-stage Binutils and GCC, built as pseudo cross
43187 tools---i.e., with @option{--target} equal to @option{--host}. They are
43188 used to build libc. Thanks to this cross-build trick, this libc is
43189 guaranteed not to hold any reference to the initial tool chain.
43190
43191 From there the final Binutils and GCC (not shown above) are built. GCC
43192 uses @command{ld} from the final Binutils, and links programs against
43193 the just-built libc. This tool chain is used to build the other
43194 packages used by Guix and by the GNU Build System: Guile, Bash,
43195 Coreutils, etc.
43196
43197 And voilà! At this point we have the complete set of build tools that
43198 the GNU Build System expects. These are in the @code{%final-inputs}
43199 variable of the @code{(gnu packages commencement)} module, and are
43200 implicitly used by any package that uses @code{gnu-build-system}
43201 (@pxref{Build Systems, @code{gnu-build-system}}).
43202
43203
43204 @unnumberedsec Building the Bootstrap Binaries
43205
43206 @cindex bootstrap binaries
43207 Because the final tool chain does not depend on the bootstrap binaries,
43208 those rarely need to be updated. Nevertheless, it is useful to have an
43209 automated way to produce them, should an update occur, and this is what
43210 the @code{(gnu packages make-bootstrap)} module provides.
43211
43212 The following command builds the tarballs containing the bootstrap binaries
43213 (Binutils, GCC, glibc, for the traditional bootstrap and linux-libre-headers,
43214 bootstrap-mescc-tools, bootstrap-mes for the Reduced Binary Seed bootstrap,
43215 and Guile, and a tarball containing a mixture of Coreutils and other basic
43216 command-line tools):
43217
43218 @example
43219 guix build bootstrap-tarballs
43220 @end example
43221
43222 The generated tarballs are those that should be referred to in the
43223 @code{(gnu packages bootstrap)} module mentioned at the beginning of
43224 this section.
43225
43226 Still here? Then perhaps by now you've started to wonder: when do we
43227 reach a fixed point? That is an interesting question! The answer is
43228 unknown, but if you would like to investigate further (and have
43229 significant computational and storage resources to do so), then let us
43230 know.
43231
43232 @unnumberedsec Reducing the Set of Bootstrap Binaries
43233
43234 Our traditional bootstrap includes GCC, GNU Libc, Guile, etc. That's a lot of
43235 binary code! Why is that a problem? It's a problem because these big chunks
43236 of binary code are practically non-auditable, which makes it hard to establish
43237 what source code produced them. Every unauditable binary also leaves us
43238 vulnerable to compiler backdoors as described by Ken Thompson in the 1984
43239 paper @emph{Reflections on Trusting Trust}.
43240
43241 This is mitigated by the fact that our bootstrap binaries were generated
43242 from an earlier Guix revision. Nevertheless it lacks the level of
43243 transparency that we get in the rest of the package dependency graph,
43244 where Guix always gives us a source-to-binary mapping. Thus, our goal
43245 is to reduce the set of bootstrap binaries to the bare minimum.
43246
43247 The @uref{https://bootstrappable.org, Bootstrappable.org web site} lists
43248 on-going projects to do that. One of these is about replacing the
43249 bootstrap GCC with a sequence of assemblers, interpreters, and compilers
43250 of increasing complexity, which could be built from source starting from
43251 a simple and auditable assembler.
43252
43253 Our first major achievement is the replacement of of GCC, the GNU C Library
43254 and Binutils by MesCC-Tools (a simple hex linker and macro assembler) and Mes
43255 (@pxref{Top, GNU Mes Reference Manual,, mes, GNU Mes}, a Scheme interpreter
43256 and C compiler in Scheme). Neither MesCC-Tools nor Mes can be fully
43257 bootstrapped yet and thus we inject them as binary seeds. We call this the
43258 Reduced Binary Seed bootstrap, as it has halved the size of our bootstrap
43259 binaries! Also, it has eliminated the C compiler binary; i686-linux and
43260 x86_64-linux Guix packages are now bootstrapped without any binary C compiler.
43261
43262 Work is ongoing to make MesCC-Tools and Mes fully bootstrappable and we are
43263 also looking at any other bootstrap binaries. Your help is welcome!
43264
43265 @node Porting
43266 @chapter Porting to a New Platform
43267
43268 As discussed above, the GNU distribution is self-contained, and
43269 self-containment is achieved by relying on pre-built ``bootstrap
43270 binaries'' (@pxref{Bootstrapping}). These binaries are specific to an
43271 operating system kernel, CPU architecture, and application binary
43272 interface (ABI). Thus, to port the distribution to a platform that is
43273 not yet supported, one must build those bootstrap binaries, and update
43274 the @code{(gnu packages bootstrap)} module to use them on that platform.
43275
43276 Fortunately, Guix can @emph{cross compile} those bootstrap binaries.
43277 When everything goes well, and assuming the GNU tool chain supports the
43278 target platform, this can be as simple as running a command like this
43279 one:
43280
43281 @example
43282 guix build --target=armv5tel-linux-gnueabi bootstrap-tarballs
43283 @end example
43284
43285 For this to work, it is first required to register a new platform as
43286 defined in the @code{(guix platform)} module. A platform is making the
43287 connection between a GNU triplet (@pxref{Specifying Target Triplets, GNU
43288 configuration triplets,, autoconf, Autoconf}), the equivalent
43289 @var{system} in Nix notation, the name of the
43290 @var{glibc-dynamic-linker}, and the corresponding Linux architecture
43291 name if applicable (@pxref{Platforms}).
43292
43293 Once the bootstrap tarball are built, the @code{(gnu packages
43294 bootstrap)} module needs to be updated to refer to these binaries on the
43295 target platform. That is, the hashes and URLs of the bootstrap tarballs
43296 for the new platform must be added alongside those of the currently
43297 supported platforms. The bootstrap Guile tarball is treated specially:
43298 it is expected to be available locally, and @file{gnu/local.mk} has
43299 rules to download it for the supported architectures; a rule for the new
43300 platform must be added as well.
43301
43302 In practice, there may be some complications. First, it may be that the
43303 extended GNU triplet that specifies an ABI (like the @code{eabi} suffix
43304 above) is not recognized by all the GNU tools. Typically, glibc
43305 recognizes some of these, whereas GCC uses an extra @option{--with-abi}
43306 configure flag (see @code{gcc.scm} for examples of how to handle this).
43307 Second, some of the required packages could fail to build for that
43308 platform. Lastly, the generated binaries could be broken for some
43309 reason.
43310
43311 @c *********************************************************************
43312 @include contributing.texi
43313
43314 @c *********************************************************************
43315 @node Acknowledgments
43316 @chapter Acknowledgments
43317
43318 Guix is based on the @uref{https://nixos.org/nix/, Nix package manager},
43319 which was designed and
43320 implemented by Eelco Dolstra, with contributions from other people (see
43321 the @file{nix/AUTHORS} file in Guix). Nix pioneered functional package
43322 management, and promoted unprecedented features, such as transactional
43323 package upgrades and rollbacks, per-user profiles, and referentially
43324 transparent build processes. Without this work, Guix would not exist.
43325
43326 The Nix-based software distributions, Nixpkgs and NixOS, have also been
43327 an inspiration for Guix.
43328
43329 GNU@tie{}Guix itself is a collective work with contributions from a
43330 number of people. See the @file{AUTHORS} file in Guix for more
43331 information on these fine people. The @file{THANKS} file lists people
43332 who have helped by reporting bugs, taking care of the infrastructure,
43333 providing artwork and themes, making suggestions, and more---thank you!
43334
43335
43336 @c *********************************************************************
43337 @node GNU Free Documentation License
43338 @appendix GNU Free Documentation License
43339 @cindex license, GNU Free Documentation License
43340 @include fdl-1.3.texi
43341
43342 @c *********************************************************************
43343 @node Concept Index
43344 @unnumbered Concept Index
43345 @printindex cp
43346
43347 @node Programming Index
43348 @unnumbered Programming Index
43349 @syncodeindex tp fn
43350 @syncodeindex vr fn
43351 @printindex fn
43352
43353 @bye
43354
43355 @c Local Variables:
43356 @c ispell-local-dictionary: "american";
43357 @c End: