gnu: clustal-omega: Update to 1.2.4.
[jackhill/guix/guix.git] / doc / guix.texi
CommitLineData
568717fd
LC
1\input texinfo
2@c -*-texinfo-*-
3
4@c %**start of header
5@setfilename guix.info
6@documentencoding UTF-8
f8348b91 7@settitle GNU Guix Reference Manual
568717fd
LC
8@c %**end of header
9
10@include version.texi
7df7a74e 11
debc6360 12@c Identifier of the OpenPGP key used to sign tarballs and such.
df671177 13@set OPENPGP-SIGNING-KEY-ID 3CE464558A84FDC69DB40CFB090B11993D9AEBB5
debc6360 14
7df7a74e 15@copying
8de938d5 16Copyright @copyright{} 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès@*
f97c9175 17Copyright @copyright{} 2013, 2014, 2016 Andreas Enge@*
87eafdbd 18Copyright @copyright{} 2013 Nikita Karetnikov@*
1a3e6b15 19Copyright @copyright{} 2014, 2015, 2016 Alex Kost@*
1b846da8 20Copyright @copyright{} 2015, 2016 Mathieu Lirzin@*
8c01b9d0 21Copyright @copyright{} 2014 Pierre-Antoine Rault@*
97d76250 22Copyright @copyright{} 2015 Taylan Ulrich Bayırlı/Kammer@*
8a9cffb2 23Copyright @copyright{} 2015, 2016, 2017 Leo Famulari@*
afbc9419 24Copyright @copyright{} 2015, 2016, 2017 Ricardo Wurmus@*
4d343a14 25Copyright @copyright{} 2016 Ben Woodcroft@*
76192896 26Copyright @copyright{} 2016 Chris Marusich@*
3b88f376 27Copyright @copyright{} 2016, 2017 Efraim Flashner@*
d6a07ee6 28Copyright @copyright{} 2016 John Darrington@*
92c03a87 29Copyright @copyright{} 2016 ng0@*
9bb98bcf 30Copyright @copyright{} 2016, 2017 Jan Nieuwenhuizen@*
9747d189 31Copyright @copyright{} 2016 Julien Lepiller@*
78cef99b 32Copyright @copyright{} 2016 Alex ter Weele@*
11b7717d 33Copyright @copyright{} 2017 Clément Lassieur@*
bc5844d1 34Copyright @copyright{} 2017 Mathieu Othacehe@*
82ccc499 35Copyright @copyright{} 2017 Federico Beffa@*
9260b9d1 36Copyright @copyright{} 2017 Carlo Zancanaro@*
fc06b15e 37Copyright @copyright{} 2017 Thomas Danckaert@*
d7fa39cc 38Copyright @copyright{} 2017 humanitiesNerd@*
c80cd4df 39Copyright @copyright{} 2017 Christopher Allan Webber@*
5abfa08d 40Copyright @copyright{} 2017 Marius Bakke@*
4695472f 41Copyright @copyright{} 2017 Hartmut Goebel@*
352a5b63
TGR
42Copyright @copyright{} 2017 Maxim Cournoyer@*
43Copyright @copyright{} 2017 Tobias Geerinckx-Rice
7df7a74e
NK
44
45Permission is granted to copy, distribute and/or modify this document
46under the terms of the GNU Free Documentation License, Version 1.3 or
47any later version published by the Free Software Foundation; with no
48Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
49copy of the license is included in the section entitled ``GNU Free
50Documentation License''.
51@end copying
568717fd 52
abd67856 53@dircategory System administration
568717fd 54@direntry
abd67856
LC
55* Guix: (guix). Manage installed software and system configuration.
56* guix package: (guix)Invoking guix package. Installing, removing, and upgrading packages.
abd67856
LC
57* guix gc: (guix)Invoking guix gc. Reclaiming unused disk space.
58* guix pull: (guix)Invoking guix pull. Update the list of available packages.
59* guix system: (guix)Invoking guix system. Manage the operating system configuration.
568717fd 60@end direntry
568717fd 61
372c4bbc
DT
62@dircategory Software development
63@direntry
abd67856 64* guix environment: (guix)Invoking guix environment. Building development environments with Guix.
ad172c4a
LC
65* guix build: (guix)Invoking guix build. Building packages.
66* guix pack: (guix)Invoking guix pack. Creating binary bundles.
372c4bbc
DT
67@end direntry
68
568717fd 69@titlepage
7730d112
LC
70@title GNU Guix Reference Manual
71@subtitle Using the GNU Guix Functional Package Manager
2cbed07e 72@author The GNU Guix Developers
568717fd
LC
73
74@page
75@vskip 0pt plus 1filll
76Edition @value{EDITION} @*
77@value{UPDATED} @*
78
7df7a74e 79@insertcopying
568717fd
LC
80@end titlepage
81
568717fd
LC
82@contents
83
84@c *********************************************************************
85@node Top
f8348b91 86@top GNU Guix
568717fd 87
f8348b91
LC
88This document describes GNU Guix version @value{VERSION}, a functional
89package management tool written for the GNU system.
568717fd
LC
90
91@menu
92* Introduction:: What is Guix about?
bd5e766b 93* Installation:: Installing Guix.
eeaf4427 94* Package Management:: Package installation, upgrade, etc.
568717fd
LC
95* Programming Interface:: Using Guix in Scheme.
96* Utilities:: Package management commands.
a1ba8475 97* GNU Distribution:: Software for your friendly GNU system.
9bf3c1a7 98* Contributing:: Your help needed!
568717fd
LC
99
100* Acknowledgments:: Thanks!
101* GNU Free Documentation License:: The license of this manual.
102* Concept Index:: Concepts.
a85b83d2 103* Programming Index:: Data types, functions, and variables.
aaa3eaa9
LC
104
105@detailmenu
106 --- The Detailed Node Listing ---
107
108Installation
109
1b2b8177 110* Binary Installation:: Getting Guix running in no time!
aaa3eaa9 111* Requirements:: Software needed to build and run Guix.
ec0339cd 112* Running the Test Suite:: Testing Guix.
aaa3eaa9
LC
113* Setting Up the Daemon:: Preparing the build daemon's environment.
114* Invoking guix-daemon:: Running the build daemon.
0e2d0213 115* Application Setup:: Application-specific setup.
aaa3eaa9
LC
116
117Setting Up the Daemon
118
119* Build Environment Setup:: Preparing the isolated build environment.
120* Daemon Offload Setup:: Offloading builds to remote machines.
121
122Package Management
123
124* Features:: How Guix will make your life brighter.
125* Invoking guix package:: Package installation, removal, etc.
aaa3eaa9
LC
126* Substitutes:: Downloading pre-built binaries.
127* Packages with Multiple Outputs:: Single source package, multiple outputs.
128* Invoking guix gc:: Running the garbage collector.
129* Invoking guix pull:: Fetching the latest Guix and distribution.
239c2266 130* Invoking guix pack:: Creating software bundles.
aaa3eaa9
LC
131* Invoking guix archive:: Exporting and importing store files.
132
133Programming Interface
134
135* Defining Packages:: Defining new packages.
136* Build Systems:: Specifying how packages are built.
137* The Store:: Manipulating the package store.
138* Derivations:: Low-level interface to package derivations.
139* The Store Monad:: Purely functional interface to the store.
140* G-Expressions:: Manipulating build expressions.
141
92492b23
LC
142Defining Packages
143
10f4353d 144* package Reference :: The package data type.
92492b23
LC
145* origin Reference:: The origin data type.
146
aaa3eaa9
LC
147Utilities
148
149* Invoking guix build:: Building packages from the command line.
fcc58db6 150* Invoking guix edit:: Editing package definitions.
aaa3eaa9
LC
151* Invoking guix download:: Downloading a file and printing its hash.
152* Invoking guix hash:: Computing the cryptographic hash of a file.
153* Invoking guix import:: Importing package definitions.
154* Invoking guix refresh:: Updating package definitions.
155* Invoking guix lint:: Finding errors in package definitions.
fcc58db6 156* Invoking guix size:: Profiling disk usage.
88856916 157* Invoking guix graph:: Visualizing the graph of packages.
aaa3eaa9 158* Invoking guix environment:: Setting up development environments.
aff8ce7c 159* Invoking guix publish:: Sharing substitutes.
d23c20f1 160* Invoking guix challenge:: Challenging substitute servers.
f11c444d 161* Invoking guix copy:: Copying to and from a remote store.
32efa254 162* Invoking guix container:: Process isolation.
585347d7 163* Invoking guix weather:: Assessing substitute availability.
aaa3eaa9 164
e3009f60
LC
165Invoking @command{guix build}
166
167* Common Build Options:: Build options for most commands.
f11c444d 168* Package Transformation Options:: Creating variants of packages.
e3009f60 169* Additional Build Options:: Options specific to 'guix build'.
10f4353d 170* Debugging Build Failures:: Real life packaging experience.
e3009f60 171
aaa3eaa9
LC
172GNU Distribution
173
174* System Installation:: Installing the whole operating system.
35ed9306 175* System Configuration:: Configuring the operating system.
31f1f593 176* Documentation:: Browsing software user manuals.
aaa3eaa9
LC
177* Installing Debugging Files:: Feeding the debugger.
178* Security Updates:: Deploying security fixes quickly.
179* Package Modules:: Packages from the programmer's viewpoint.
180* Packaging Guidelines:: Growing the distribution.
181* Bootstrapping:: GNU/Linux built from scratch.
182* Porting:: Targeting another platform or kernel.
183
e3009f60
LC
184System Installation
185
186* Limitations:: What you can expect.
187* Hardware Considerations:: Supported hardware.
188* USB Stick Installation:: Preparing the installation medium.
189* Preparing for Installation:: Networking, partitioning, etc.
190* Proceeding with the Installation:: The real thing.
c8b54374 191* Installing GuixSD in a VM:: GuixSD playground.
e3009f60
LC
192* Building the Installation Image:: How this comes to be.
193
aaa3eaa9
LC
194System Configuration
195
196* Using the Configuration System:: Customizing your GNU system.
197* operating-system Reference:: Detail of operating-system declarations.
198* File Systems:: Configuring file system mounts.
199* Mapped Devices:: Block device extra processing.
200* User Accounts:: Specifying user accounts.
598e19dc 201* Locales:: Language and cultural convention settings.
aaa3eaa9
LC
202* Services:: Specifying system services.
203* Setuid Programs:: Programs running with root privileges.
1b2b8177 204* X.509 Certificates:: Authenticating HTTPS servers.
996ed739 205* Name Service Switch:: Configuring libc's name service switch.
aaa3eaa9 206* Initial RAM Disk:: Linux-Libre bootstrapping.
74e64724 207* Bootloader Configuration:: Configuring the boot loader.
aaa3eaa9 208* Invoking guix system:: Instantiating a system configuration.
97d76250 209* Running GuixSD in a VM:: How to run GuixSD in a virtual machine.
aaa3eaa9
LC
210* Defining Services:: Adding new service definitions.
211
212Services
213
214* Base Services:: Essential system services.
c311089b 215* Scheduled Job Execution:: The mcron service.
92c03a87 216* Log Rotation:: The rottlog service.
aaa3eaa9
LC
217* Networking Services:: Network setup, SSH daemon, etc.
218* X Window:: Graphical display.
f11c444d 219* Printing Services:: Local and remote printer support.
1b2b8177 220* Desktop Services:: D-Bus and desktop services.
29059262 221* Database Services:: SQL databases, key-value stores, etc.
d8c18af8 222* Mail Services:: IMAP, POP3, SMTP, and all that.
78cef99b 223* Messaging Services:: Messaging services.
730ed6ec 224* Monitoring Services:: Monitoring services.
859e367d 225* Kerberos Services:: Kerberos services.
cbd02397 226* Web Services:: Web servers.
ba69e8f7 227* DNS Services:: DNS daemons.
2be1b471 228* VPN Services:: VPN daemons.
eb419bc9 229* Network File System:: NFS related services.
f11c444d 230* Continuous Integration:: The Cuirass service.
bfbf6e1e 231* Power management Services:: The TLP tool.
06465d2b 232* Audio Services:: The MPD.
e6051057 233* Virtualization Services:: Virtualization services.
dbc6d370 234* Miscellaneous Services:: Other services.
aaa3eaa9 235
0adfe95a
LC
236Defining Services
237
238* Service Composition:: The model for composing services.
239* Service Types and Services:: Types and services.
240* Service Reference:: API reference.
dd17bc38 241* Shepherd Services:: A particular type of service.
0adfe95a 242
aaa3eaa9
LC
243Packaging Guidelines
244
ec0339cd
LC
245* Software Freedom:: What may go into the distribution.
246* Package Naming:: What's in a name?
247* Version Numbers:: When the name is not enough.
cbd02397 248* Synopses and Descriptions:: Helping users find the right package.
fb4d6f6c 249* Python Modules:: A touch of British comedy.
ec0339cd 250* Perl Modules:: Little pearls.
e1c963bf 251* Java Packages:: Coffee break.
ec0339cd 252* Fonts:: Fond of fonts.
aaa3eaa9 253
8c01b9d0
ML
254Contributing
255
256* Building from Git:: The latest and greatest.
257* Running Guix Before It Is Installed:: Hacker tricks.
258* The Perfect Setup:: The right tools.
259* Coding Style:: Hygiene of the contributor.
260* Submitting Patches:: Share your work.
261
262Coding Style
263
264* Programming Paradigm:: How to compose your elements.
265* Modules:: Where to store your code?
266* Data Types and Pattern Matching:: Implementing data structures.
267* Formatting Code:: Writing conventions.
268
aaa3eaa9 269@end detailmenu
568717fd
LC
270@end menu
271
272@c *********************************************************************
273@node Introduction
274@chapter Introduction
275
6f773606 276@cindex purpose
c80e7e55 277GNU Guix@footnote{``Guix'' is pronounced like ``geeks'', or ``ɡiːks''
6f773606
LC
278using the international phonetic alphabet (IPA).} is a package
279management tool for the GNU system. Guix makes it easy for unprivileged
280users to install, upgrade, or remove packages, to roll back to a
281previous package set, to build packages from source, and generally
282assists with the creation and maintenance of software environments.
283
284@cindex user interfaces
285Guix provides a command-line package management interface
286(@pxref{Invoking guix package}), a set of command-line utilities
deb6276d 287(@pxref{Utilities}), as well as Scheme programming interfaces
6f773606
LC
288(@pxref{Programming Interface}).
289@cindex build daemon
290Its @dfn{build daemon} is responsible for building packages on behalf of
291users (@pxref{Setting Up the Daemon}) and for downloading pre-built
292binaries from authorized sources (@pxref{Substitutes}).
293
294@cindex extensibility of the distribution
e32171ee 295@cindex customization, of packages
6f773606
LC
296Guix includes package definitions for many GNU and non-GNU packages, all
297of which @uref{https://www.gnu.org/philosophy/free-sw.html, respect the
298user's computing freedom}. It is @emph{extensible}: users can write
299their own package definitions (@pxref{Defining Packages}) and make them
300available as independent package modules (@pxref{Package Modules}). It
301is also @emph{customizable}: users can @emph{derive} specialized package
302definitions from existing ones, including from the command line
303(@pxref{Package Transformation Options}).
304
305@cindex Guix System Distribution
306@cindex GuixSD
307You can install GNU@tie{}Guix on top of an existing GNU/Linux system
308where it complements the available tools without interference
309(@pxref{Installation}), or you can use it as part of the standalone
310@dfn{Guix System Distribution} or GuixSD (@pxref{GNU Distribution}).
311With GNU@tie{}GuixSD, you @emph{declare} all aspects of the operating
312system configuration and Guix takes care of instantiating the
313configuration in a transactional, reproducible, and stateless fashion
314(@pxref{System Configuration}).
568717fd
LC
315
316@cindex functional package management
6f773606 317Under the hood, Guix implements the @dfn{functional package management}
136787cb
LC
318discipline pioneered by Nix (@pxref{Acknowledgments}).
319In Guix, the package build and installation process is seen
6f773606 320as a @emph{function}, in the mathematical sense. That function takes inputs,
4bfc4ea3
NK
321such as build scripts, a compiler, and libraries, and
322returns an installed package. As a pure function, its result depends
568717fd
LC
323solely on its inputs---for instance, it cannot refer to software or
324scripts that were not explicitly passed as inputs. A build function
4bfc4ea3 325always produces the same result when passed a given set of inputs. It
f97c9175 326cannot alter the environment of the running system in
568717fd
LC
327any way; for instance, it cannot create, modify, or delete files outside
328of its build and installation directories. This is achieved by running
e900c503 329build processes in isolated environments (or @dfn{containers}), where only their
4bfc4ea3 330explicit inputs are visible.
568717fd 331
e531ac2a 332@cindex store
568717fd 333The result of package build functions is @dfn{cached} in the file
e531ac2a 334system, in a special directory called @dfn{the store} (@pxref{The
f97c9175 335Store}). Each package is installed in a directory of its own in the
834129e0 336store---by default under @file{/gnu/store}. The directory name contains
568717fd
LC
337a hash of all the inputs used to build that package; thus, changing an
338input yields a different directory name.
339
f97c9175
AE
340This approach is the foundation for the salient features of Guix: support
341for transactional package upgrade and rollback, per-user installation, and
eeaf4427 342garbage collection of packages (@pxref{Features}).
568717fd 343
a1ba8475 344
bd5e766b
LC
345@c *********************************************************************
346@node Installation
347@chapter Installation
348
e32171ee 349@cindex installing Guix
48febeb8
LC
350GNU Guix is available for download from its website at
351@url{http://www.gnu.org/software/guix/}. This section describes the
352software requirements of Guix, as well as how to install it and get
353ready to use it.
bd5e766b 354
5af6de3e
LC
355Note that this section is concerned with the installation of the package
356manager, which can be done on top of a running GNU/Linux system. If,
357instead, you want to install the complete GNU operating system,
6621cdb6 358@pxref{System Installation}.
5af6de3e 359
d23ef788
LC
360@cindex foreign distro
361When installed on a running GNU/Linux system---thereafter called a
362@dfn{foreign distro}---GNU@tie{}Guix complements the available tools
363without interference. Its data lives exclusively in two directories,
364usually @file{/gnu/store} and @file{/var/guix}; other files on your
365system, such as @file{/etc}, are left untouched.
366
7fcf2a0b
LC
367Once installed, Guix can be updated by running @command{guix pull}
368(@pxref{Invoking guix pull}).
369
bd5e766b 370@menu
09722b11 371* Binary Installation:: Getting Guix running in no time!
bd5e766b 372* Requirements:: Software needed to build and run Guix.
ec0339cd 373* Running the Test Suite:: Testing Guix.
bd5e766b
LC
374* Setting Up the Daemon:: Preparing the build daemon's environment.
375* Invoking guix-daemon:: Running the build daemon.
0e2d0213 376* Application Setup:: Application-specific setup.
bd5e766b
LC
377@end menu
378
09722b11
LC
379@node Binary Installation
380@section Binary Installation
381
e32171ee 382@cindex installing Guix from binaries
09722b11
LC
383This section describes how to install Guix on an arbitrary system from a
384self-contained tarball providing binaries for Guix and for all its
385dependencies. This is often quicker than installing from source, which
386is described in the next sections. The only requirement is to have
387GNU@tie{}tar and Xz.
388
389Installing goes along these lines:
390
391@enumerate
392@item
e32171ee 393@cindex downloading Guix binary
09722b11 394Download the binary tarball from
daa8922a
LC
395@indicateurl{ftp://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{system}.tar.xz},
396where @var{system} is @code{x86_64-linux} for an @code{x86_64} machine
397already running the kernel Linux, and so on.
398
debc6360 399@c The following is somewhat duplicated in ``System Installation''.
daa8922a
LC
400Make sure to download the associated @file{.sig} file and to verify the
401authenticity of the tarball against it, along these lines:
402
403@example
404$ wget ftp://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{system}.tar.xz.sig
405$ gpg --verify guix-binary-@value{VERSION}.@var{system}.tar.xz.sig
406@end example
407
f97c9175 408If that command fails because you do not have the required public key,
daa8922a
LC
409then run this command to import it:
410
411@example
debc6360 412$ gpg --keyserver pgp.mit.edu --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
daa8922a
LC
413@end example
414
415@noindent
416and rerun the @code{gpg --verify} command.
debc6360 417@c end authentication part
09722b11
LC
418
419@item
420As @code{root}, run:
421
422@example
5dc42964 423# cd /tmp
254b1c2e
LC
424# tar --warning=no-timestamp -xf \
425 guix-binary-@value{VERSION}.@var{system}.tar.xz
5dc42964 426# mv var/guix /var/ && mv gnu /
09722b11
LC
427@end example
428
7acd3439
LC
429This creates @file{/gnu/store} (@pxref{The Store}) and @file{/var/guix}.
430The latter contains a ready-to-use profile for @code{root} (see next
431step.)
09722b11 432
5dc3ce5f
LC
433Do @emph{not} unpack the tarball on a working Guix system since that
434would overwrite its own essential files.
435
254b1c2e 436The @code{--warning=no-timestamp} option makes sure GNU@tie{}tar does
e9ba6357
LC
437not emit warnings about ``implausibly old time stamps'' (such
438warnings were triggered by GNU@tie{}tar 1.26 and older; recent
439versions are fine.)
440They stem from the fact that all the
254b1c2e
LC
441files in the archive have their modification time set to zero (which
442means January 1st, 1970.) This is done on purpose to make sure the
443archive content is independent of its creation time, thus making it
444reproducible.
445
7acd3439
LC
446@item
447Make @code{root}'s profile available under @file{~/.guix-profile}:
448
449@example
450# ln -sf /var/guix/profiles/per-user/root/guix-profile \
451 ~root/.guix-profile
452@end example
453
1165b08f
LC
454Source @file{etc/profile} to augment @code{PATH} and other relevant
455environment variables:
456
457@example
458# GUIX_PROFILE=$HOME/.guix-profile \
459 source $GUIX_PROFILE/etc/profile
460@end example
461
43c33047
LC
462@item
463Create the group and user accounts for build users as explained below
464(@pxref{Build Environment Setup}).
465
09722b11 466@item
bf98aea9 467Run the daemon, and set it to automatically start on boot.
c8e26887 468
bf98aea9
LC
469If your host distro uses the systemd init system, this can be achieved
470with these commands:
c8e26887 471
b812da70
LF
472@c Versions of systemd that supported symlinked service files are not
473@c yet widely deployed, so we should suggest that users copy the service
474@c files into place.
475@c
476@c See this thread for more information:
477@c http://lists.gnu.org/archive/html/guix-devel/2017-01/msg01199.html
478
c8e26887 479@example
b812da70 480# cp ~root/.guix-profile/lib/systemd/system/guix-daemon.service \
c8e26887
GC
481 /etc/systemd/system/
482# systemctl start guix-daemon && systemctl enable guix-daemon
483@end example
484
485If your host distro uses the Upstart init system:
09722b11
LC
486
487@example
4a780bdf 488# initctl reload-configuration
b812da70 489# cp ~root/.guix-profile/lib/upstart/system/guix-daemon.conf /etc/init/
bf98aea9 490# start guix-daemon
09722b11
LC
491@end example
492
c8e26887
GC
493Otherwise, you can still start the daemon manually with:
494
495@example
496# ~root/.guix-profile/bin/guix-daemon --build-users-group=guixbuild
497@end example
d2825c96 498
09722b11
LC
499@item
500Make the @command{guix} command available to other users on the machine,
501for instance with:
502
503@example
504# mkdir -p /usr/local/bin
505# cd /usr/local/bin
d72d05f9 506# ln -s /var/guix/profiles/per-user/root/guix-profile/bin/guix
09722b11 507@end example
39f8ed14 508
aca738f3
LC
509It is also a good idea to make the Info version of this manual available
510there:
511
512@example
513# mkdir -p /usr/local/share/info
514# cd /usr/local/share/info
515# for i in /var/guix/profiles/per-user/root/guix-profile/share/info/* ;
516 do ln -s $i ; done
517@end example
518
519That way, assuming @file{/usr/local/share/info} is in the search path,
520running @command{info guix} will open this manual (@pxref{Other Info
521Directories,,, texinfo, GNU Texinfo}, for more details on changing the
522Info search path.)
523
39f8ed14 524@item
e32171ee 525@cindex substitutes, authorization thereof
df061d07
LC
526To use substitutes from @code{hydra.gnu.org} or one of its mirrors
527(@pxref{Substitutes}), authorize them:
39f8ed14
LC
528
529@example
7acd3439 530# guix archive --authorize < ~root/.guix-profile/share/guix/hydra.gnu.org.pub
39f8ed14 531@end example
7f608a9b
LC
532
533@item
534Each user may need to perform a few additional steps to make their Guix
535environment ready for use, @pxref{Application Setup}.
09722b11
LC
536@end enumerate
537
7f608a9b 538Voilà, the installation is complete!
09722b11 539
c8e26887
GC
540You can confirm that Guix is working by installing a sample package into
541the root profile:
09722b11
LC
542
543@example
c8e26887 544# guix package -i hello
09722b11
LC
545@end example
546
c8e26887
GC
547The @code{guix} package must remain available in @code{root}'s profile,
548or it would become subject to garbage collection---in which case you
549would find yourself badly handicapped by the lack of the @command{guix}
bf98aea9
LC
550command. In other words, do not remove @code{guix} by running
551@code{guix package -r guix}.
552
553The binary installation tarball can be (re)produced and verified simply
554by running the following command in the Guix source tree:
555
556@example
557make guix-binary.@var{system}.tar.xz
558@end example
c8e26887 559
239c2266
LC
560@noindent
561... which, in turn, runs:
562
563@example
6b63c43e 564guix pack -s @var{system} --localstatedir guix
239c2266
LC
565@end example
566
567@xref{Invoking guix pack}, for more info on this handy tool.
09722b11 568
bd5e766b
LC
569@node Requirements
570@section Requirements
571
09722b11
LC
572This section lists requirements when building Guix from source. The
573build procedure for Guix is the same as for other GNU software, and is
574not covered here. Please see the files @file{README} and @file{INSTALL}
575in the Guix source tree for additional details.
576
bd5e766b
LC
577GNU Guix depends on the following packages:
578
579@itemize
36626c55 580@item @url{http://gnu.org/software/guile/, GNU Guile}, version 2.0.9 or
608e42e7 581later, including 2.2.x;
288dca55 582@item @url{http://gnupg.org/, GNU libgcrypt};
1dbe3a8d
LC
583@item
584@uref{http://gnutls.org/, GnuTLS}, specifically its Guile bindings
585(@pxref{Guile Preparations, how to install the GnuTLS bindings for
586Guile,, gnutls-guile, GnuTLS-Guile});
7441f1db
LC
587@item
588@c FIXME: Specify a version number once a release has been made.
589@uref{https://gitlab.com/guile-git/guile-git, Guile-Git}, from August
5902017 or later;
f0b98b84 591@item @url{http://www.gnu.org/software/make/, GNU Make}.
8a96bd4b
ID
592@end itemize
593
594The following dependencies are optional:
595
596@itemize
288dca55 597@item
8a96bd4b 598Installing
288dca55 599@url{http://savannah.nongnu.org/projects/guile-json/, Guile-JSON} will
2f7d2d91
LC
600allow you to use the @command{guix import pypi} command (@pxref{Invoking
601guix import}). It is of
288dca55 602interest primarily for developers and not for casual users.
4591c02e 603
21531add
LC
604@item
605@c Note: We need at least 0.10.2 for 'channel-send-eof'.
f11c444d
LC
606Support for build offloading (@pxref{Daemon Offload Setup}) and
607@command{guix copy} (@pxref{Invoking guix copy}) depends on
21531add
LC
608@uref{https://github.com/artyom-poptsov/guile-ssh, Guile-SSH},
609version 0.10.2 or later.
610
4591c02e
LC
611@item
612When @url{http://zlib.net, zlib} is available, @command{guix publish}
613can compress build byproducts (@pxref{Invoking guix publish}).
bd5e766b
LC
614@end itemize
615
616Unless @code{--disable-daemon} was passed to @command{configure}, the
617following packages are also needed:
618
619@itemize
368d08f7
LC
620@item @url{http://sqlite.org, SQLite 3};
621@item @url{http://www.bzip.org, libbz2};
622@item @url{http://gcc.gnu.org, GCC's g++}, with support for the
623C++11 standard.
bd5e766b
LC
624@end itemize
625
e32171ee 626@cindex state directory
ef5f5c86
LC
627When configuring Guix on a system that already has a Guix installation,
628be sure to specify the same state directory as the existing installation
629using the @code{--localstatedir} option of the @command{configure}
630script (@pxref{Directory Variables, @code{localstatedir},, standards,
631GNU Coding Standards}). The @command{configure} script protects against
632unintended misconfiguration of @var{localstatedir} so you do not
633inadvertently corrupt your store (@pxref{The Store}).
634
e32171ee 635@cindex Nix, compatibility
4bfc4ea3
NK
636When a working installation of @url{http://nixos.org/nix/, the Nix package
637manager} is available, you
bd5e766b 638can instead configure Guix with @code{--disable-daemon}. In that case,
4bfc4ea3 639Nix replaces the three dependencies above.
bd5e766b 640
b22a12fd
LC
641Guix is compatible with Nix, so it is possible to share the same store
642between both. To do so, you must pass @command{configure} not only the
643same @code{--with-store-dir} value, but also the same
4bfc4ea3
NK
644@code{--localstatedir} value. The latter is essential because it
645specifies where the database that stores metadata about the store is
834129e0 646located, among other things. The default values for Nix are
b22a12fd 647@code{--with-store-dir=/nix/store} and @code{--localstatedir=/nix/var}.
4bfc4ea3
NK
648Note that @code{--disable-daemon} is not required if
649your goal is to share the store with Nix.
b22a12fd 650
ec0339cd
LC
651@node Running the Test Suite
652@section Running the Test Suite
653
e32171ee 654@cindex test suite
ec0339cd
LC
655After a successful @command{configure} and @code{make} run, it is a good
656idea to run the test suite. It can help catch issues with the setup or
657environment, or bugs in Guix itself---and really, reporting test
658failures is a good way to help improve the software. To run the test
659suite, type:
660
661@example
662make check
663@end example
664
665Test cases can run in parallel: you can use the @code{-j} option of
666GNU@tie{}make to speed things up. The first run may take a few minutes
667on a recent machine; subsequent runs will be faster because the store
668that is created for test purposes will already have various things in
669cache.
670
a887fd8d
LC
671It is also possible to run a subset of the tests by defining the
672@code{TESTS} makefile variable as in this example:
673
674@example
675make check TESTS="tests/store.scm tests/cpio.scm"
676@end example
677
a9edb211
ML
678By default, tests results are displayed at a file level. In order to
679see the details of every individual test cases, it is possible to define
680the @code{SCM_LOG_DRIVER_FLAGS} makefile variable as in this example:
681
682@example
683make check TESTS="tests/base64.scm" SCM_LOG_DRIVER_FLAGS="--brief=no"
684@end example
685
ec0339cd 686Upon failure, please email @email{bug-guix@@gnu.org} and attach the
a9edb211
ML
687@file{test-suite.log} file. Please specify the Guix version being used
688as well as version numbers of the dependencies (@pxref{Requirements}) in
689your message.
ec0339cd 690
0a2f2848
LC
691Guix also comes with a whole-system test suite that tests complete
692GuixSD operating system instances. It can only run on systems where
693Guix is already installed, using:
694
695@example
696make check-system
697@end example
698
699@noindent
700or, again, by defining @code{TESTS} to select a subset of tests to run:
701
702@example
703make check-system TESTS="basic mcron"
704@end example
705
706These system tests are defined in the @code{(gnu tests @dots{})}
707modules. They work by running the operating systems under test with
708lightweight instrumentation in a virtual machine (VM). They can be
709computationally intensive or rather cheap, depending on whether
710substitutes are available for their dependencies (@pxref{Substitutes}).
711Some of them require a lot of storage space to hold VM images.
712
713Again in case of test failures, please send @email{bug-guix@@gnu.org}
714all the details.
715
bd5e766b
LC
716@node Setting Up the Daemon
717@section Setting Up the Daemon
718
719@cindex daemon
720Operations such as building a package or running the garbage collector
49e6291a 721are all performed by a specialized process, the @dfn{build daemon}, on
bd5e766b
LC
722behalf of clients. Only the daemon may access the store and its
723associated database. Thus, any operation that manipulates the store
724goes through the daemon. For instance, command-line tools such as
e49951eb 725@command{guix package} and @command{guix build} communicate with the
bd5e766b
LC
726daemon (@i{via} remote procedure calls) to instruct it what to do.
727
49e6291a 728The following sections explain how to prepare the build daemon's
f97c9175 729environment. See also @ref{Substitutes}, for information on how to allow
225dafde 730the daemon to download pre-built binaries.
49e6291a
LC
731
732@menu
733* Build Environment Setup:: Preparing the isolated build environment.
734* Daemon Offload Setup:: Offloading builds to remote machines.
735@end menu
736
737@node Build Environment Setup
738@subsection Build Environment Setup
739
e32171ee 740@cindex build environment
bd5e766b
LC
741In a standard multi-user setup, Guix and its daemon---the
742@command{guix-daemon} program---are installed by the system
834129e0 743administrator; @file{/gnu/store} is owned by @code{root} and
bd5e766b
LC
744@command{guix-daemon} runs as @code{root}. Unprivileged users may use
745Guix tools to build packages or otherwise access the store, and the
746daemon will do it on their behalf, ensuring that the store is kept in a
747consistent state, and allowing built packages to be shared among users.
748
749@cindex build users
750When @command{guix-daemon} runs as @code{root}, you may not want package
751build processes themselves to run as @code{root} too, for obvious
752security reasons. To avoid that, a special pool of @dfn{build users}
753should be created for use by build processes started by the daemon.
754These build users need not have a shell and a home directory: they will
755just be used when the daemon drops @code{root} privileges in build
756processes. Having several such users allows the daemon to launch
757distinct build processes under separate UIDs, which guarantees that they
758do not interfere with each other---an essential feature since builds are
759regarded as pure functions (@pxref{Introduction}).
760
761On a GNU/Linux system, a build user pool may be created like this (using
762Bash syntax and the @code{shadow} commands):
763
091196b3
LC
764@c See http://lists.gnu.org/archive/html/bug-guix/2013-01/msg00239.html
765@c for why `-G' is needed.
bd5e766b 766@example
cfc149dc
LC
767# groupadd --system guixbuild
768# for i in `seq -w 1 10`;
bd5e766b 769 do
cfc149dc
LC
770 useradd -g guixbuild -G guixbuild \
771 -d /var/empty -s `which nologin` \
772 -c "Guix build user $i" --system \
773 guixbuilder$i;
bd5e766b
LC
774 done
775@end example
776
777@noindent
54eb03ab
LC
778The number of build users determines how many build jobs may run in
779parallel, as specified by the @option{--max-jobs} option
eca69fc0
LC
780(@pxref{Invoking guix-daemon, @option{--max-jobs}}). To use
781@command{guix system vm} and related commands, you may need to add the
782build users to the @code{kvm} group so they can access @file{/dev/kvm},
783using @code{-G guixbuild,kvm} instead of @code{-G guixbuild}
784(@pxref{Invoking guix system}).
785
786The @code{guix-daemon} program may then be run as @code{root} with the
d2825c96
LC
787following command@footnote{If your machine uses the systemd init system,
788dropping the @file{@var{prefix}/lib/systemd/system/guix-daemon.service}
789file in @file{/etc/systemd/system} will ensure that
ad227484
MDRS
790@command{guix-daemon} is automatically started. Similarly, if your
791machine uses the Upstart init system, drop the
792@file{@var{prefix}/lib/upstart/system/guix-daemon.conf}
793file in @file{/etc/init}.}:
bd5e766b
LC
794
795@example
cfc149dc 796# guix-daemon --build-users-group=guixbuild
bd5e766b
LC
797@end example
798
e900c503 799@cindex chroot
b095792f
LC
800@noindent
801This way, the daemon starts build processes in a chroot, under one of
cfc149dc 802the @code{guixbuilder} users. On GNU/Linux, by default, the chroot
6dc99317
LC
803environment contains nothing but:
804
805@c Keep this list in sync with libstore/build.cc! -----------------------
806@itemize
807@item
4743a4da
LC
808a minimal @code{/dev} directory, created mostly independently from the
809host @code{/dev}@footnote{``Mostly'', because while the set of files
810that appear in the chroot's @code{/dev} is fixed, most of these files
811can only be created if the host has them.};
812
813@item
f97c9175 814the @code{/proc} directory; it only shows the processes of the container
4743a4da 815since a separate PID name space is used;
6dc99317
LC
816
817@item
818@file{/etc/passwd} with an entry for the current user and an entry for
819user @file{nobody};
820
821@item
822@file{/etc/group} with an entry for the user's group;
823
824@item
825@file{/etc/hosts} with an entry that maps @code{localhost} to
826@code{127.0.0.1};
827
828@item
829a writable @file{/tmp} directory.
830@end itemize
b095792f 831
cb960102
ED
832You can influence the directory where the daemon stores build trees
833@i{via} the @code{TMPDIR} environment variable. However, the build tree
f97c9175 834within the chroot is always called @file{/tmp/guix-build-@var{name}.drv-0},
cb960102
ED
835where @var{name} is the derivation name---e.g., @code{coreutils-8.24}.
836This way, the value of @code{TMPDIR} does not leak inside build
837environments, which avoids discrepancies in cases where build processes
838capture the name of their build tree.
839
e0c941fe
LC
840@vindex http_proxy
841The daemon also honors the @code{http_proxy} environment variable for
842HTTP downloads it performs, be it for fixed-output derivations
843(@pxref{Derivations}) or for substitutes (@pxref{Substitutes}).
844
1e2644bb
LC
845If you are installing Guix as an unprivileged user, it is still possible
846to run @command{guix-daemon} provided you pass @code{--disable-chroot}.
847However, build processes will not be isolated from one another, and not
848from the rest of the system. Thus, build processes may interfere with
849each other, and may access programs, libraries, and other files
850available on the system---making it much harder to view them as
851@emph{pure} functions.
bd5e766b 852
49e6291a
LC
853
854@node Daemon Offload Setup
855@subsection Using the Offload Facility
856
857@cindex offloading
4ec2e92d 858@cindex build hook
21531add
LC
859When desired, the build daemon can @dfn{offload} derivation builds to
860other machines running Guix, using the @code{offload} @dfn{build
861hook}@footnote{This feature is available only when
862@uref{https://github.com/artyom-poptsov/guile-ssh, Guile-SSH} is
863present.}. When that
49e6291a 864feature is enabled, a list of user-specified build machines is read from
f97c9175 865@file{/etc/guix/machines.scm}; every time a build is requested, for
49e6291a 866instance via @code{guix build}, the daemon attempts to offload it to one
f97c9175 867of the machines that satisfy the constraints of the derivation, in
49e6291a
LC
868particular its system type---e.g., @file{x86_64-linux}. Missing
869prerequisites for the build are copied over SSH to the target machine,
870which then proceeds with the build; upon success the output(s) of the
871build are copied back to the initial machine.
872
4ec2e92d 873The @file{/etc/guix/machines.scm} file typically looks like this:
49e6291a
LC
874
875@example
876(list (build-machine
877 (name "eightysix.example.org")
878 (system "x86_64-linux")
21531add 879 (host-key "ssh-ed25519 AAAAC3Nza@dots{}")
49e6291a 880 (user "bob")
21531add 881 (speed 2.)) ;incredibly fast!
49e6291a
LC
882
883 (build-machine
884 (name "meeps.example.org")
885 (system "mips64el-linux")
21531add 886 (host-key "ssh-rsa AAAAB3Nza@dots{}")
49e6291a
LC
887 (user "alice")
888 (private-key
889 (string-append (getenv "HOME")
21531add 890 "/.ssh/identity-for-guix"))))
49e6291a
LC
891@end example
892
893@noindent
894In the example above we specify a list of two build machines, one for
895the @code{x86_64} architecture and one for the @code{mips64el}
4ec2e92d
LC
896architecture.
897
898In fact, this file is---not surprisingly!---a Scheme file that is
899evaluated when the @code{offload} hook is started. Its return value
900must be a list of @code{build-machine} objects. While this example
901shows a fixed list of build machines, one could imagine, say, using
902DNS-SD to return a list of potential build machines discovered in the
903local network (@pxref{Introduction, Guile-Avahi,, guile-avahi, Using
c678a4ee
LC
904Avahi in Guile Scheme Programs}). The @code{build-machine} data type is
905detailed below.
4ec2e92d 906
c678a4ee 907@deftp {Data Type} build-machine
f97c9175
AE
908This data type represents build machines to which the daemon may offload
909builds. The important fields are:
49e6291a
LC
910
911@table @code
912
913@item name
f97c9175 914The host name of the remote machine.
49e6291a
LC
915
916@item system
f97c9175 917The system type of the remote machine---e.g., @code{"x86_64-linux"}.
49e6291a
LC
918
919@item user
920The user account to use when connecting to the remote machine over SSH.
921Note that the SSH key pair must @emph{not} be passphrase-protected, to
922allow non-interactive logins.
923
21531add
LC
924@item host-key
925This must be the machine's SSH @dfn{public host key} in OpenSSH format.
926This is used to authenticate the machine when we connect to it. It is a
927long string that looks like this:
928
929@example
930ssh-ed25519 AAAAC3NzaC@dots{}mde+UhL hint@@example.org
931@end example
932
933If the machine is running the OpenSSH daemon, @command{sshd}, the host
934key can be found in a file such as
935@file{/etc/ssh/ssh_host_ed25519_key.pub}.
936
937If the machine is running the SSH daemon of GNU@tie{}lsh,
938@command{lshd}, the host key is in @file{/etc/lsh/host-key.pub} or a
939similar file. It can be converted to the OpenSSH format using
940@command{lsh-export-key} (@pxref{Converting keys,,, lsh, LSH Manual}):
941
942@example
943$ lsh-export-key --openssh < /etc/lsh/host-key.pub
944ssh-rsa AAAAB3NzaC1yc2EAAAAEOp8FoQAAAQEAs1eB46LV@dots{}
945@end example
946
49e6291a
LC
947@end table
948
4ec2e92d 949A number of optional fields may be specified:
49e6291a 950
21531add 951@table @asis
49e6291a 952
21531add
LC
953@item @code{port} (default: @code{22})
954Port number of SSH server on the machine.
cecd72d5 955
dde1e152 956@item @code{private-key} (default: @file{~root/.ssh/id_rsa})
21531add
LC
957The SSH private key file to use when connecting to the machine, in
958OpenSSH format.
49e6291a 959
dde1e152
OP
960Note that the default value is the private key @emph{of the root
961account}. Make sure it exists if you use the default.
962
1d48cf94
LC
963@item @code{compression} (default: @code{"zlib@@openssh.com,zlib"})
964@itemx @code{compression-level} (default: @code{3})
965The SSH-level compression methods and compression level requested.
966
967Note that offloading relies on SSH compression to reduce bandwidth usage
968when transferring files to and from build machines.
969
cf283dd9
LC
970@item @code{daemon-socket} (default: @code{"/var/guix/daemon-socket/socket"})
971File name of the Unix-domain socket @command{guix-daemon} is listening
972to on that machine.
c4fdfd6f 973
21531add
LC
974@item @code{parallel-builds} (default: @code{1})
975The number of builds that may run in parallel on the machine.
49e6291a 976
21531add 977@item @code{speed} (default: @code{1.0})
49e6291a
LC
978A ``relative speed factor''. The offload scheduler will tend to prefer
979machines with a higher speed factor.
980
21531add 981@item @code{features} (default: @code{'()})
49e6291a
LC
982A list of strings denoting specific features supported by the machine.
983An example is @code{"kvm"} for machines that have the KVM Linux modules
984and corresponding hardware support. Derivations can request features by
985name, and they will be scheduled on matching build machines.
986
987@end table
c678a4ee 988@end deftp
49e6291a 989
aebaee95
LC
990The @code{guile} command must be in the search path on the build
991machines. In addition, the Guix modules must be in
c4fdfd6f
LC
992@code{$GUILE_LOAD_PATH} on the build machine---you can check whether
993this is the case by running:
994
995@example
21531add 996ssh build-machine guile -c "'(use-modules (guix config))'"
c4fdfd6f 997@end example
49e6291a 998
f97c9175 999There is one last thing to do once @file{machines.scm} is in place. As
49e6291a 1000explained above, when offloading, files are transferred back and forth
c4fdfd6f
LC
1001between the machine stores. For this to work, you first need to
1002generate a key pair on each machine to allow the daemon to export signed
1003archives of files from the store (@pxref{Invoking guix archive}):
49e6291a
LC
1004
1005@example
1006# guix archive --generate-key
1007@end example
1008
1009@noindent
c4fdfd6f
LC
1010Each build machine must authorize the key of the master machine so that
1011it accepts store items it receives from the master:
1012
1013@example
1014# guix archive --authorize < master-public-key.txt
1015@end example
1016
1017@noindent
1018Likewise, the master machine must authorize the key of each build machine.
1019
1020All the fuss with keys is here to express pairwise mutual trust
1021relations between the master and the build machines. Concretely, when
1022the master receives files from a build machine (and @i{vice versa}), its
1023build daemon can make sure they are genuine, have not been tampered
1024with, and that they are signed by an authorized key.
49e6291a 1025
aebaee95
LC
1026@cindex offload test
1027To test whether your setup is operational, run this command on the
1028master node:
1029
1030@example
1031# guix offload test
1032@end example
1033
1034This will attempt to connect to each of the build machines specified in
1035@file{/etc/guix/machines.scm}, make sure Guile and the Guix modules are
1036available on each machine, attempt to export to the machine and import
1037from it, and report any error in the process.
1038
1039If you want to test a different machine file, just specify it on the
1040command line:
1041
1042@example
1043# guix offload test machines-qualif.scm
1044@end example
1045
27991c97
LC
1046Last, you can test the subset of the machines whose name matches a
1047regular expression like this:
1048
1049@example
1050# guix offload test machines.scm '\.gnu\.org$'
1051@end example
49e6291a 1052
bd5e766b
LC
1053@node Invoking guix-daemon
1054@section Invoking @command{guix-daemon}
1055
1056The @command{guix-daemon} program implements all the functionality to
1057access the store. This includes launching build processes, running the
1058garbage collector, querying the availability of a build result, etc. It
1059is normally run as @code{root} like this:
1060
1061@example
cfc149dc 1062# guix-daemon --build-users-group=guixbuild
bd5e766b
LC
1063@end example
1064
1065@noindent
081145cf 1066For details on how to set it up, @pxref{Setting Up the Daemon}.
bd5e766b 1067
e900c503
LC
1068@cindex chroot
1069@cindex container, build environment
1070@cindex build environment
1071@cindex reproducible builds
bd5e766b
LC
1072By default, @command{guix-daemon} launches build processes under
1073different UIDs, taken from the build group specified with
1074@code{--build-users-group}. In addition, each build process is run in a
1075chroot environment that only contains the subset of the store that the
1076build process depends on, as specified by its derivation
1077(@pxref{Programming Interface, derivation}), plus a set of specific
1078system directories. By default, the latter contains @file{/dev} and
e900c503
LC
1079@file{/dev/pts}. Furthermore, on GNU/Linux, the build environment is a
1080@dfn{container}: in addition to having its own file system tree, it has
1081a separate mount name space, its own PID name space, network name space,
1082etc. This helps achieve reproducible builds (@pxref{Features}).
bd5e766b 1083
cbc538fe
LC
1084When the daemon performs a build on behalf of the user, it creates a
1085build directory under @file{/tmp} or under the directory specified by
1086its @code{TMPDIR} environment variable; this directory is shared with
1087the container for the duration of the build. Be aware that using a
1088directory other than @file{/tmp} can affect build results---for example,
1089with a longer directory name, a build process that uses Unix-domain
1090sockets might hit the name length limitation for @code{sun_path}, which
1091it would otherwise not hit.
1092
1093The build directory is automatically deleted upon completion, unless the
1094build failed and the client specified @option{--keep-failed}
1095(@pxref{Invoking guix build, @option{--keep-failed}}).
1096
bd5e766b
LC
1097The following command-line options are supported:
1098
1099@table @code
1100@item --build-users-group=@var{group}
1101Take users from @var{group} to run build processes (@pxref{Setting Up
1102the Daemon, build users}).
1103
6858f9d1 1104@item --no-substitutes
b5385b52 1105@cindex substitutes
6858f9d1 1106Do not use substitutes for build products. That is, always build things
c4202d60
LC
1107locally instead of allowing downloads of pre-built binaries
1108(@pxref{Substitutes}).
6858f9d1 1109
b5385b52
LC
1110By default substitutes are used, unless the client---such as the
1111@command{guix package} command---is explicitly invoked with
1112@code{--no-substitutes}.
1113
1114When the daemon runs with @code{--no-substitutes}, clients can still
1115explicitly enable substitution @i{via} the @code{set-build-options}
1116remote procedure call (@pxref{The Store}).
1117
9176607e 1118@item --substitute-urls=@var{urls}
f8a8e0fe 1119@anchor{daemon-substitute-urls}
9176607e 1120Consider @var{urls} the default whitespace-separated list of substitute
df061d07
LC
1121source URLs. When this option is omitted,
1122@indicateurl{https://mirror.hydra.gnu.org https://hydra.gnu.org} is used
1123(@code{mirror.hydra.gnu.org} is a mirror of @code{hydra.gnu.org}).
9176607e
LC
1124
1125This means that substitutes may be downloaded from @var{urls}, as long
1126as they are signed by a trusted signature (@pxref{Substitutes}).
1127
4ec2e92d
LC
1128@cindex build hook
1129@item --no-build-hook
1130Do not use the @dfn{build hook}.
1131
1132The build hook is a helper program that the daemon can start and to
1133which it submits build requests. This mechanism is used to offload
1134builds to other machines (@pxref{Daemon Offload Setup}).
1135
bd5e766b
LC
1136@item --cache-failures
1137Cache build failures. By default, only successful builds are cached.
1138
30d9aa54
LC
1139When this option is used, @command{guix gc --list-failures} can be used
1140to query the set of store items marked as failed; @command{guix gc
1141--clear-failures} removes store items from the set of cached failures.
1142@xref{Invoking guix gc}.
1143
bd5e766b
LC
1144@item --cores=@var{n}
1145@itemx -c @var{n}
1146Use @var{n} CPU cores to build each derivation; @code{0} means as many
1147as available.
1148
6efc160e 1149The default value is @code{0}, but it may be overridden by clients, such
e49951eb
MW
1150as the @code{--cores} option of @command{guix build} (@pxref{Invoking
1151guix build}).
bd5e766b
LC
1152
1153The effect is to define the @code{NIX_BUILD_CORES} environment variable
1154in the build process, which can then use it to exploit internal
1155parallelism---for instance, by running @code{make -j$NIX_BUILD_CORES}.
1156
1157@item --max-jobs=@var{n}
1158@itemx -M @var{n}
1159Allow at most @var{n} build jobs in parallel. The default value is
f6526eb3
LC
1160@code{1}. Setting it to @code{0} means that no builds will be performed
1161locally; instead, the daemon will offload builds (@pxref{Daemon Offload
1162Setup}), or simply fail.
bd5e766b 1163
2ca9f51e
LC
1164@item --max-silent-time=@var{seconds}
1165When the build or substitution process remains silent for more than
1166@var{seconds}, terminate it and report a build failure.
1167
1168The default value is @code{0}, which disables the timeout.
1169
1170The value specified here can be overridden by clients (@pxref{Common
1171Build Options, @code{--max-silent-time}}).
1172
1173@item --timeout=@var{seconds}
1174Likewise, when the build or substitution process lasts for more than
1175@var{seconds}, terminate it and report a build failure.
1176
1177The default value is @code{0}, which disables the timeout.
1178
1179The value specified here can be overridden by clients (@pxref{Common
1180Build Options, @code{--timeout}}).
1181
ecf84b7c
LC
1182@item --rounds=@var{N}
1183Build each derivation @var{n} times in a row, and raise an error if
1184consecutive build results are not bit-for-bit identical. Note that this
1185setting can be overridden by clients such as @command{guix build}
1186(@pxref{Invoking guix build}).
1187
b4528110
ED
1188When used in conjunction with @option{--keep-failed}, the differing
1189output is kept in the store, under @file{/gnu/store/@dots{}-check}.
1190This makes it easy to look for differences between the two results.
1191
bd5e766b
LC
1192@item --debug
1193Produce debugging output.
1194
1195This is useful to debug daemon start-up issues, but then it may be
1196overridden by clients, for example the @code{--verbosity} option of
e49951eb 1197@command{guix build} (@pxref{Invoking guix build}).
bd5e766b
LC
1198
1199@item --chroot-directory=@var{dir}
1200Add @var{dir} to the build chroot.
1201
1202Doing this may change the result of build processes---for instance if
1203they use optional dependencies found in @var{dir} when it is available,
1204and not otherwise. For that reason, it is not recommended to do so.
1205Instead, make sure that each derivation declares all the inputs that it
1206needs.
1207
1208@item --disable-chroot
1209Disable chroot builds.
1210
1211Using this option is not recommended since, again, it would allow build
1e2644bb
LC
1212processes to gain access to undeclared dependencies. It is necessary,
1213though, when @command{guix-daemon} is running under an unprivileged user
1214account.
bd5e766b
LC
1215
1216@item --disable-log-compression
1217Disable compression of the build logs.
1218
1da983b9
LC
1219Unless @code{--lose-logs} is used, all the build logs are kept in the
1220@var{localstatedir}. To save space, the daemon automatically compresses
1221them with bzip2 by default. This option disables that.
1222
ab3893d7
LC
1223@item --disable-deduplication
1224@cindex deduplication
bd5e766b
LC
1225Disable automatic file ``deduplication'' in the store.
1226
1da983b9 1227By default, files added to the store are automatically ``deduplicated'':
ab3893d7
LC
1228if a newly added file is identical to another one found in the store,
1229the daemon makes the new file a hard link to the other file. This can
4988dd40 1230noticeably reduce disk usage, at the expense of slightly increased
ab3893d7
LC
1231input/output load at the end of a build process. This option disables
1232this optimization.
1da983b9 1233
6e37066e
LC
1234@item --gc-keep-outputs[=yes|no]
1235Tell whether the garbage collector (GC) must keep outputs of live
1236derivations.
1237
1238When set to ``yes'', the GC will keep the outputs of any live derivation
1239available in the store---the @code{.drv} files. The default is ``no'',
1240meaning that derivation outputs are kept only if they are GC roots.
1241
1242@item --gc-keep-derivations[=yes|no]
1243Tell whether the garbage collector (GC) must keep derivations
1244corresponding to live outputs.
1245
1246When set to ``yes'', as is the case by default, the GC keeps
1247derivations---i.e., @code{.drv} files---as long as at least one of their
1248outputs is live. This allows users to keep track of the origins of
1249items in their store. Setting it to ``no'' saves a bit of disk space.
1250
1251Note that when both @code{--gc-keep-derivations} and
1252@code{--gc-keep-outputs} are used, the effect is to keep all the build
1253prerequisites (the sources, compiler, libraries, and other build-time
1254tools) of live objects in the store, regardless of whether these
1255prerequisites are live. This is convenient for developers since it
1256saves rebuilds or downloads.
1257
bd5e766b
LC
1258@item --impersonate-linux-2.6
1259On Linux-based systems, impersonate Linux 2.6. This means that the
1260kernel's @code{uname} system call will report 2.6 as the release number.
1261
1262This might be helpful to build programs that (usually wrongfully) depend
1263on the kernel version number.
1264
1265@item --lose-logs
1266Do not keep build logs. By default they are kept under
ce33631f 1267@code{@var{localstatedir}/guix/log}.
bd5e766b
LC
1268
1269@item --system=@var{system}
1270Assume @var{system} as the current system type. By default it is the
1271architecture/kernel pair found at configure time, such as
1272@code{x86_64-linux}.
b8d2aa26 1273
1071f781
LC
1274@item --listen=@var{endpoint}
1275Listen for connections on @var{endpoint}. @var{endpoint} is interpreted
1276as the file name of a Unix-domain socket if it starts with
1277@code{/} (slash sign). Otherwise, @var{endpoint} is interpreted as a
1278host name or host name and port to listen to. Here are a few examples:
1279
1280@table @code
1281@item --listen=/gnu/var/daemon
1282Listen for connections on the @file{/gnu/var/daemon} Unix-domain socket,
1283creating it if needed.
1284
1285@item --listen=localhost
1286@cindex daemon, remote access
1287@cindex remote access to the daemon
1288@cindex daemon, cluster setup
1289@cindex clusters, daemon setup
1290Listen for TCP connections on the network interface corresponding to
1291@code{localhost}, on port 44146.
1292
1293@item --listen=128.0.0.42:1234
1294Listen for TCP connections on the network interface corresponding to
1295@code{128.0.0.42}, on port 1234.
1296@end table
1297
1298This option can be repeated multiple times, in which case
1299@command{guix-daemon} accepts connections on all the specified
1300endpoints. Users can tell client commands what endpoint to connect to
1301by setting the @code{GUIX_DAEMON_SOCKET} environment variable
1302(@pxref{The Store, @code{GUIX_DAEMON_SOCKET}}).
1303
1304@quotation Note
1305The daemon protocol is @emph{unauthenticated and unencrypted}. Using
1306@code{--listen=@var{host}} is suitable on local networks, such as
1307clusters, where only trusted nodes may connect to the build daemon. In
1308other cases where remote access to the daemon is needed, we recommend
1309using Unix-domain sockets along with SSH.
1310@end quotation
1311
1312When @code{--listen} is omitted, @command{guix-daemon} listens for
1313connections on the Unix-domain socket located at
1314@file{@var{localstatedir}/daemon-socket/socket}.
bd5e766b
LC
1315@end table
1316
1317
0e2d0213
LC
1318@node Application Setup
1319@section Application Setup
1320
d23ef788 1321@cindex foreign distro
85e57214
LC
1322When using Guix on top of GNU/Linux distribution other than GuixSD---a
1323so-called @dfn{foreign distro}---a few additional steps are needed to
1324get everything in place. Here are some of them.
0e2d0213
LC
1325
1326@subsection Locales
1327
5c3c1427 1328@anchor{locales-and-locpath}
0e2d0213 1329@cindex locales, when not on GuixSD
5c3c1427 1330@vindex LOCPATH
85e57214 1331@vindex GUIX_LOCPATH
f97c9175
AE
1332Packages installed @i{via} Guix will not use the locale data of the
1333host system. Instead, you must first install one of the locale packages
85e57214
LC
1334available with Guix and then define the @code{GUIX_LOCPATH} environment
1335variable:
0e2d0213
LC
1336
1337@example
1338$ guix package -i glibc-locales
85e57214 1339$ export GUIX_LOCPATH=$HOME/.guix-profile/lib/locale
0e2d0213
LC
1340@end example
1341
1342Note that the @code{glibc-locales} package contains data for all the
1343locales supported by the GNU@tie{}libc and weighs in at around
f97c9175 1344110@tie{}MiB. Alternatively, the @code{glibc-utf8-locales} is smaller but
0e2d0213
LC
1345limited to a few UTF-8 locales.
1346
85e57214
LC
1347The @code{GUIX_LOCPATH} variable plays a role similar to @code{LOCPATH}
1348(@pxref{Locale Names, @code{LOCPATH},, libc, The GNU C Library Reference
1349Manual}). There are two important differences though:
1350
1351@enumerate
1352@item
f97c9175 1353@code{GUIX_LOCPATH} is honored only by the libc in Guix, and not by the libc
85e57214 1354provided by foreign distros. Thus, using @code{GUIX_LOCPATH} allows you
f97c9175 1355to make sure the programs of the foreign distro will not end up loading
85e57214
LC
1356incompatible locale data.
1357
1358@item
1359libc suffixes each entry of @code{GUIX_LOCPATH} with @code{/X.Y}, where
1360@code{X.Y} is the libc version---e.g., @code{2.22}. This means that,
1361should your Guix profile contain a mixture of programs linked against
1362different libc version, each libc version will only try to load locale
1363data in the right format.
1364@end enumerate
1365
1366This is important because the locale data format used by different libc
1367versions may be incompatible.
1368
9a5187b6
LC
1369@subsection Name Service Switch
1370
1371@cindex name service switch, glibc
1372@cindex NSS (name service switch), glibc
1373@cindex nscd (name service caching daemon)
1374@cindex name service caching daemon (nscd)
1375When using Guix on a foreign distro, we @emph{strongly recommend} that
1376the system run the GNU C library's @dfn{name service cache daemon},
1377@command{nscd}, which should be listening on the
1378@file{/var/run/nscd/socket} socket. Failing to do that, applications
1379installed with Guix may fail to look up host names or user accounts, or
1380may even crash. The next paragraphs explain why.
1381
1382@cindex @file{nsswitch.conf}
1383The GNU C library implements a @dfn{name service switch} (NSS), which is
1384an extensible mechanism for ``name lookups'' in general: host name
1385resolution, user accounts, and more (@pxref{Name Service Switch,,, libc,
1386The GNU C Library Reference Manual}).
1387
1388@cindex Network information service (NIS)
1389@cindex NIS (Network information service)
1390Being extensible, the NSS supports @dfn{plugins}, which provide new name
1391lookup implementations: for example, the @code{nss-mdns} plugin allow
1392resolution of @code{.local} host names, the @code{nis} plugin allows
1393user account lookup using the Network information service (NIS), and so
1394on. These extra ``lookup services'' are configured system-wide in
1395@file{/etc/nsswitch.conf}, and all the programs running on the system
1396honor those settings (@pxref{NSS Configuration File,,, libc, The GNU C
1397Reference Manual}).
1398
1399When they perform a name lookup---for instance by calling the
1400@code{getaddrinfo} function in C---applications first try to connect to
1401the nscd; on success, nscd performs name lookups on their behalf. If
1402the nscd is not running, then they perform the name lookup by
1403themselves, by loading the name lookup services into their own address
1404space and running it. These name lookup services---the
1405@file{libnss_*.so} files---are @code{dlopen}'d, but they may come from
1406the host system's C library, rather than from the C library the
1407application is linked against (the C library coming from Guix).
1408
1409And this is where the problem is: if your application is linked against
1410Guix's C library (say, glibc 2.24) and tries to load NSS plugins from
1411another C library (say, @code{libnss_mdns.so} for glibc 2.22), it will
1412likely crash or have its name lookups fail unexpectedly.
1413
1414Running @command{nscd} on the system, among other advantages, eliminates
1415this binary incompatibility problem because those @code{libnss_*.so}
1416files are loaded in the @command{nscd} process, not in applications
1417themselves.
1418
0e2d0213
LC
1419@subsection X11 Fonts
1420
e32171ee 1421@cindex fonts
4988dd40 1422The majority of graphical applications use Fontconfig to locate and
f97c9175
AE
1423load fonts and perform X11-client-side rendering. The @code{fontconfig}
1424package in Guix looks for fonts in @file{$HOME/.guix-profile}
0e2d0213 1425by default. Thus, to allow graphical applications installed with Guix
f97c9175 1426to display fonts, you have to install fonts with Guix as well.
0e2d0213 1427Essential font packages include @code{gs-fonts}, @code{font-dejavu}, and
8fe5b1d1 1428@code{font-gnu-freefont-ttf}.
0e2d0213 1429
5c36edc8
LC
1430To display text written in Chinese languages, Japanese, or Korean in
1431graphical applications, consider installing
1432@code{font-adobe-source-han-sans} or @code{font-wqy-zenhei}. The former
1433has multiple outputs, one per language family (@pxref{Packages with
1434Multiple Outputs}). For instance, the following command installs fonts
1435for Chinese languages:
1436
1437@example
1438guix package -i font-adobe-source-han-sans:cn
1439@end example
1440
e32171ee 1441@cindex @code{xterm}
1a3e6b15
AK
1442Older programs such as @command{xterm} do not use Fontconfig and instead
1443rely on server-side font rendering. Such programs require to specify a
1444full name of a font using XLFD (X Logical Font Description), like this:
1445
1446@example
1447-*-dejavu sans-medium-r-normal-*-*-100-*-*-*-*-*-1
1448@end example
1449
1450To be able to use such full names for the TrueType fonts installed in
1451your Guix profile, you need to extend the font path of the X server:
1452
1453@example
1454xset +fp ~/.guix-profile/share/fonts/truetype
1455@end example
1456
e32171ee 1457@cindex @code{xlsfonts}
1a3e6b15
AK
1458After that, you can run @code{xlsfonts} (from @code{xlsfonts} package)
1459to make sure your TrueType fonts are listed there.
1460
e5942cbf
RW
1461@cindex @code{fc-cache}
1462@cindex font cache
1463After installing fonts you may have to refresh the font cache to use
1464them in applications. The same applies when applications installed via
1465Guix do not seem to find fonts. To force rebuilding of the font cache
1466run @code{fc-cache -f}. The @code{fc-cache} command is provided by the
1467@code{fontconfig} package.
1468
b3129f2b
LC
1469@subsection X.509 Certificates
1470
e32171ee 1471@cindex @code{nss-certs}
b3129f2b
LC
1472The @code{nss-certs} package provides X.509 certificates, which allow
1473programs to authenticate Web servers accessed over HTTPS.
1474
1475When using Guix on a foreign distro, you can install this package and
1476define the relevant environment variables so that packages know where to
80d944b7 1477look for certificates. @xref{X.509 Certificates}, for detailed
b3129f2b
LC
1478information.
1479
6d97319c
AK
1480@subsection Emacs Packages
1481
e32171ee 1482@cindex @code{emacs}
6d97319c
AK
1483When you install Emacs packages with Guix, the elisp files may be placed
1484either in @file{$HOME/.guix-profile/share/emacs/site-lisp/} or in
1485sub-directories of
1486@file{$HOME/.guix-profile/share/emacs/site-lisp/guix.d/}. The latter
1487directory exists because potentially there may exist thousands of Emacs
1488packages and storing all their files in a single directory may be not
1489reliable (because of name conflicts). So we think using a separate
1490directory for each package is a good idea. It is very similar to how
1491the Emacs package system organizes the file structure (@pxref{Package
1492Files,,, emacs, The GNU Emacs Manual}).
1493
1494By default, Emacs (installed with Guix) ``knows'' where these packages
f97c9175 1495are placed, so you do not need to perform any configuration. If, for
6d97319c 1496some reason, you want to avoid auto-loading Emacs packages installed
f97c9175 1497with Guix, you can do so by running Emacs with @code{--no-site-file}
6d97319c
AK
1498option (@pxref{Init File,,, emacs, The GNU Emacs Manual}).
1499
2f0c4b82
RW
1500@subsection The GCC toolchain
1501
1502@cindex GCC
1503@cindex ld-wrapper
1504
1505Guix offers individual compiler packages such as @code{gcc} but if you
1506are in need of a complete toolchain for compiling and linking source
1507code what you really want is the @code{gcc-toolchain} package. This
1508package provides a complete GCC toolchain for C/C++ development,
1509including GCC itself, the GNU C Library (headers and binaries, plus
1510debugging symbols in the @code{debug} output), Binutils, and a linker
1511wrapper.
1512
1513@cindex attempt to use impure library, error message
1514
1515The wrapper's purpose is to inspect the @code{-L} and @code{-l} switches
1516passed to the linker, add corresponding @code{-rpath} arguments, and
1517invoke the actual linker with this new set of arguments. By default,
1518the linker wrapper refuses to link to libraries outside the store to
1519ensure ``purity''. This can be annoying when using the toolchain to
1520link with local libraries. To allow references to libraries outside the
1521store you need to define the environment variable
1522@code{GUIX_LD_WRAPPER_ALLOW_IMPURITIES}.
1523
0e2d0213
LC
1524@c TODO What else?
1525
eeaf4427
LC
1526@c *********************************************************************
1527@node Package Management
1528@chapter Package Management
1529
e32171ee 1530@cindex packages
f8348b91 1531The purpose of GNU Guix is to allow users to easily install, upgrade, and
eeaf4427 1532remove software packages, without having to know about their build
f97c9175 1533procedures or dependencies. Guix also goes beyond this obvious set of
eeaf4427
LC
1534features.
1535
8ca0c88a
AK
1536This chapter describes the main features of Guix, as well as the
1537package management tools it provides. Along with the command-line
1538interface described below (@pxref{Invoking guix package, @code{guix
1539package}}), you may also use Emacs Interface (@pxref{Top,,,
1540emacs-guix, The Emacs-Guix Reference Manual}), after installing
1541@code{emacs-guix} package (run @kbd{M-x guix-help} command to start
1542with it):
deb6276d
AK
1543
1544@example
1545guix package -i emacs-guix
1546@end example
eeaf4427
LC
1547
1548@menu
1549* Features:: How Guix will make your life brighter.
e49951eb 1550* Invoking guix package:: Package installation, removal, etc.
c4202d60 1551* Substitutes:: Downloading pre-built binaries.
760c60d6 1552* Packages with Multiple Outputs:: Single source package, multiple outputs.
e49951eb 1553* Invoking guix gc:: Running the garbage collector.
f651b477 1554* Invoking guix pull:: Fetching the latest Guix and distribution.
239c2266 1555* Invoking guix pack:: Creating software bundles.
760c60d6 1556* Invoking guix archive:: Exporting and importing store files.
eeaf4427
LC
1557@end menu
1558
1559@node Features
1560@section Features
1561
1562When using Guix, each package ends up in the @dfn{package store}, in its
1563own directory---something that resembles
deb6276d 1564@file{/gnu/store/xxx-package-1.2}, where @code{xxx} is a base32 string.
eeaf4427
LC
1565
1566Instead of referring to these directories, users have their own
1567@dfn{profile}, which points to the packages that they actually want to
821b0015
LC
1568use. These profiles are stored within each user's home directory, at
1569@code{$HOME/.guix-profile}.
eeaf4427 1570
821b0015 1571For example, @code{alice} installs GCC 4.7.2. As a result,
eeaf4427 1572@file{/home/alice/.guix-profile/bin/gcc} points to
834129e0 1573@file{/gnu/store/@dots{}-gcc-4.7.2/bin/gcc}. Now, on the same machine,
821b0015
LC
1574@code{bob} had already installed GCC 4.8.0. The profile of @code{bob}
1575simply continues to point to
834129e0 1576@file{/gnu/store/@dots{}-gcc-4.8.0/bin/gcc}---i.e., both versions of GCC
821b0015 1577coexist on the same system without any interference.
eeaf4427 1578
e49951eb 1579The @command{guix package} command is the central tool to manage
f97c9175 1580packages (@pxref{Invoking guix package}). It operates on the per-user
821b0015 1581profiles, and can be used @emph{with normal user privileges}.
eeaf4427 1582
e32171ee 1583@cindex transactions
eeaf4427
LC
1584The command provides the obvious install, remove, and upgrade
1585operations. Each invocation is actually a @emph{transaction}: either
ba55b1cb 1586the specified operation succeeds, or nothing happens. Thus, if the
e49951eb 1587@command{guix package} process is terminated during the transaction,
eeaf4427
LC
1588or if a power outage occurs during the transaction, then the user's
1589profile remains in its previous state, and remains usable.
1590
1591In addition, any package transaction may be @emph{rolled back}. So, if,
1592for example, an upgrade installs a new version of a package that turns
1593out to have a serious bug, users may roll back to the previous instance
4af2447e 1594of their profile, which was known to work well. Similarly, the global
6f773606
LC
1595system configuration on GuixSD is subject to
1596transactional upgrades and roll-back
4af2447e 1597(@pxref{Using the Configuration System}).
eeaf4427 1598
f97c9175
AE
1599All packages in the package store may be @emph{garbage-collected}.
1600Guix can determine which packages are still referenced by user
fe8ff028 1601profiles, and remove those that are provably no longer referenced
e49951eb 1602(@pxref{Invoking guix gc}). Users may also explicitly remove old
fe8ff028
LC
1603generations of their profile so that the packages they refer to can be
1604collected.
eeaf4427 1605
e900c503
LC
1606@cindex reproducibility
1607@cindex reproducible builds
eeaf4427
LC
1608Finally, Guix takes a @dfn{purely functional} approach to package
1609management, as described in the introduction (@pxref{Introduction}).
834129e0 1610Each @file{/gnu/store} package directory name contains a hash of all the
eeaf4427
LC
1611inputs that were used to build that package---compiler, libraries, build
1612scripts, etc. This direct correspondence allows users to make sure a
1613given package installation matches the current state of their
e900c503
LC
1614distribution. It also helps maximize @dfn{build reproducibility}:
1615thanks to the isolated build environments that are used, a given build
1616is likely to yield bit-identical files when performed on different
1617machines (@pxref{Invoking guix-daemon, container}).
eeaf4427 1618
c4202d60 1619@cindex substitutes
eeaf4427 1620This foundation allows Guix to support @dfn{transparent binary/source
c4202d60 1621deployment}. When a pre-built binary for a @file{/gnu/store} item is
18f2887b 1622available from an external source---a @dfn{substitute}, Guix just
c4202d60
LC
1623downloads it and unpacks it;
1624otherwise, it builds the package from source, locally
bf9eacd2
LC
1625(@pxref{Substitutes}). Because build results are usually bit-for-bit
1626reproducible, users do not have to trust servers that provide
1627substitutes: they can force a local build and @emph{challenge} providers
1628(@pxref{Invoking guix challenge}).
eeaf4427 1629
f5fd4fd2
LC
1630Control over the build environment is a feature that is also useful for
1631developers. The @command{guix environment} command allows developers of
1632a package to quickly set up the right development environment for their
f97c9175
AE
1633package, without having to manually install the dependencies of the
1634package into their profile (@pxref{Invoking guix environment}).
f5fd4fd2 1635
e49951eb
MW
1636@node Invoking guix package
1637@section Invoking @command{guix package}
eeaf4427 1638
e32171ee
JD
1639@cindex installing packages
1640@cindex removing packages
1641@cindex package installation
1642@cindex package removal
e49951eb 1643The @command{guix package} command is the tool that allows users to
eeaf4427
LC
1644install, upgrade, and remove packages, as well as rolling back to
1645previous configurations. It operates only on the user's own profile,
1646and works with normal user privileges (@pxref{Features}). Its syntax
1647is:
1648
1649@example
e49951eb 1650guix package @var{options}
eeaf4427 1651@end example
e32171ee 1652@cindex transactions
ba55b1cb 1653Primarily, @var{options} specifies the operations to be performed during
eeaf4427 1654the transaction. Upon completion, a new profile is created, but
99bd74d5 1655previous @dfn{generations} of the profile remain available, should the user
eeaf4427
LC
1656want to roll back.
1657
6447738c
MW
1658For example, to remove @code{lua} and install @code{guile} and
1659@code{guile-cairo} in a single transaction:
1660
1661@example
1662guix package -r lua -i guile guile-cairo
1663@end example
1664
99bd74d5
LC
1665@command{guix package} also supports a @dfn{declarative approach}
1666whereby the user specifies the exact set of packages to be available and
1667passes it @i{via} the @option{--manifest} option
1668(@pxref{profile-manifest, @option{--manifest}}).
1669
e32171ee 1670@cindex profile
b9e5c0a9 1671For each user, a symlink to the user's default profile is automatically
0ec1af59 1672created in @file{$HOME/.guix-profile}. This symlink always points to the
b9e5c0a9
LC
1673current generation of the user's default profile. Thus, users can add
1674@file{$HOME/.guix-profile/bin} to their @code{PATH} environment
1675variable, and so on.
d664f1b4
LC
1676@cindex search paths
1677If you are not using the Guix System Distribution, consider adding the
1678following lines to your @file{~/.bash_profile} (@pxref{Bash Startup
1679Files,,, bash, The GNU Bash Reference Manual}) so that newly-spawned
1680shells get all the right environment variable definitions:
1681
1682@example
1683GUIX_PROFILE="$HOME/.guix-profile" \
1684source "$HOME/.guix-profile/etc/profile"
1685@end example
b9e5c0a9 1686
4379c35b
LC
1687In a multi-user setup, user profiles are stored in a place registered as
1688a @dfn{garbage-collector root}, which @file{$HOME/.guix-profile} points
1689to (@pxref{Invoking guix gc}). That directory is normally
0ec1af59
LC
1690@code{@var{localstatedir}/profiles/per-user/@var{user}}, where
1691@var{localstatedir} is the value passed to @code{configure} as
4379c35b
LC
1692@code{--localstatedir}, and @var{user} is the user name. The
1693@file{per-user} directory is created when @command{guix-daemon} is
1694started, and the @var{user} sub-directory is created by @command{guix
1695package}.
0ec1af59
LC
1696
1697The @var{options} can be among the following:
1698
eeaf4427
LC
1699@table @code
1700
6447738c
MW
1701@item --install=@var{package} @dots{}
1702@itemx -i @var{package} @dots{}
1703Install the specified @var{package}s.
eeaf4427 1704
6447738c 1705Each @var{package} may specify either a simple package name, such as
1b846da8
ML
1706@code{guile}, or a package name followed by an at-sign and version number,
1707such as @code{guile@@1.8.8} or simply @code{guile@@1.8} (in the latter
724311a2
LC
1708case, the newest version prefixed by @code{1.8} is selected.)
1709
1710If no version number is specified, the
dc5669cd
MW
1711newest available version will be selected. In addition, @var{package}
1712may contain a colon, followed by the name of one of the outputs of the
1b846da8 1713package, as in @code{gcc:doc} or @code{binutils@@2.22:lib}
e7f34eb0
LC
1714(@pxref{Packages with Multiple Outputs}). Packages with a corresponding
1715name (and optionally version) are searched for among the GNU
1716distribution modules (@pxref{Package Modules}).
eeaf4427 1717
461572cc
LC
1718@cindex propagated inputs
1719Sometimes packages have @dfn{propagated inputs}: these are dependencies
21461f27
LC
1720that automatically get installed along with the required package
1721(@pxref{package-propagated-inputs, @code{propagated-inputs} in
1722@code{package} objects}, for information about propagated inputs in
1723package definitions).
461572cc 1724
21461f27 1725@anchor{package-cmd-propagated-inputs}
461572cc
LC
1726An example is the GNU MPC library: its C header files refer to those of
1727the GNU MPFR library, which in turn refer to those of the GMP library.
1728Thus, when installing MPC, the MPFR and GMP libraries also get installed
1729in the profile; removing MPC also removes MPFR and GMP---unless they had
f97c9175 1730also been explicitly installed by the user.
461572cc 1731
ba7ea5ce 1732Besides, packages sometimes rely on the definition of environment
5924080d 1733variables for their search paths (see explanation of
ba7ea5ce 1734@code{--search-paths} below). Any missing or possibly incorrect
5924080d
LC
1735environment variable definitions are reported here.
1736
5d4b411f
LC
1737@item --install-from-expression=@var{exp}
1738@itemx -e @var{exp}
1739Install the package @var{exp} evaluates to.
1740
1741@var{exp} must be a Scheme expression that evaluates to a
1742@code{<package>} object. This option is notably useful to disambiguate
1743between same-named variants of a package, with expressions such as
1744@code{(@@ (gnu packages base) guile-final)}.
1745
1746Note that this option installs the first output of the specified
1747package, which may be insufficient when needing a specific output of a
1748multiple-output package.
1749
0d279400
DT
1750@item --install-from-file=@var{file}
1751@itemx -f @var{file}
1752Install the package that the code within @var{file} evaluates to.
1753
1754As an example, @var{file} might contain a definition like this
1755(@pxref{Defining Packages}):
1756
1757@example
1758@verbatiminclude package-hello.scm
1759@end example
1760
baacf042 1761Developers may find it useful to include such a @file{guix.scm} file
f97c9175 1762in the root of their project source tree that can be used to test
0d279400
DT
1763development snapshots and create reproducible development environments
1764(@pxref{Invoking guix environment}).
1765
6447738c
MW
1766@item --remove=@var{package} @dots{}
1767@itemx -r @var{package} @dots{}
1768Remove the specified @var{package}s.
eeaf4427 1769
6447738c 1770As for @code{--install}, each @var{package} may specify a version number
13ed095c
LC
1771and/or output name in addition to the package name. For instance,
1772@code{-r glibc:debug} would remove the @code{debug} output of
1773@code{glibc}.
1774
6447738c
MW
1775@item --upgrade[=@var{regexp} @dots{}]
1776@itemx -u [@var{regexp} @dots{}]
e32171ee 1777@cindex upgrading packages
6447738c
MW
1778Upgrade all the installed packages. If one or more @var{regexp}s are
1779specified, upgrade only installed packages whose name matches a
d5f01e48 1780@var{regexp}. Also see the @code{--do-not-upgrade} option below.
eeaf4427 1781
f651b477
LC
1782Note that this upgrades package to the latest version of packages found
1783in the distribution currently installed. To update your distribution,
1784you should regularly run @command{guix pull} (@pxref{Invoking guix
1785pull}).
1786
d5f01e48
MW
1787@item --do-not-upgrade[=@var{regexp} @dots{}]
1788When used together with the @code{--upgrade} option, do @emph{not}
1789upgrade any packages whose name matches a @var{regexp}. For example, to
1790upgrade all packages in the current profile except those containing the
1791substring ``emacs'':
1792
1793@example
1794$ guix package --upgrade . --do-not-upgrade emacs
1795@end example
1796
99bd74d5 1797@item @anchor{profile-manifest}--manifest=@var{file}
1b676447 1798@itemx -m @var{file}
99bd74d5
LC
1799@cindex profile declaration
1800@cindex profile manifest
1801Create a new generation of the profile from the manifest object
1b676447
DT
1802returned by the Scheme code in @var{file}.
1803
99bd74d5
LC
1804This allows you to @emph{declare} the profile's contents rather than
1805constructing it through a sequence of @code{--install} and similar
1806commands. The advantage is that @var{file} can be put under version
1807control, copied to different machines to reproduce the same profile, and
1808so on.
1809
1810@c FIXME: Add reference to (guix profile) documentation when available.
1811@var{file} must return a @dfn{manifest} object, which is roughly a list
1812of packages:
1b676447 1813
99bd74d5 1814@findex packages->manifest
1b676447 1815@example
99bd74d5 1816(use-package-modules guile emacs)
1b676447
DT
1817
1818(packages->manifest
99bd74d5
LC
1819 (list emacs
1820 guile-2.0
1b676447 1821 ;; Use a specific package output.
99bd74d5 1822 (list guile-2.0 "debug")))
1b676447
DT
1823@end example
1824
c08ea55e 1825@findex specifications->manifest
6cd10593
LC
1826In this example we have to know which modules define the @code{emacs}
1827and @code{guile-2.0} variables to provide the right
1828@code{use-package-modules} line, which can be cumbersome. We can
1829instead provide regular package specifications and let
c08ea55e 1830@code{specifications->manifest} look up the corresponding package
6cd10593
LC
1831objects, like this:
1832
1833@example
c08ea55e
LC
1834(specifications->manifest
1835 '("emacs" "guile@@2.2" "guile@@2.2:debug"))
6cd10593
LC
1836@end example
1837
24e262f0 1838@item --roll-back
e32171ee
JD
1839@cindex rolling back
1840@cindex undoing transactions
1841@cindex transactions, undoing
24e262f0
LC
1842Roll back to the previous @dfn{generation} of the profile---i.e., undo
1843the last transaction.
1844
1845When combined with options such as @code{--install}, roll back occurs
1846before any other actions.
1847
d9307267 1848When rolling back from the first generation that actually contains
4b2bc804 1849installed packages, the profile is made to point to the @dfn{zeroth
f97c9175 1850generation}, which contains no files apart from its own metadata.
d9307267 1851
f97c9175
AE
1852After having rolled back, installing, removing, or upgrading packages
1853overwrites previous future generations. Thus, the history of the
1854generations in a profile is always linear.
82fe08ed 1855
b3bb82f1
AK
1856@item --switch-generation=@var{pattern}
1857@itemx -S @var{pattern}
e32171ee 1858@cindex generations
b3bb82f1
AK
1859Switch to a particular generation defined by @var{pattern}.
1860
1861@var{pattern} may be either a generation number or a number prefixed
1862with ``+'' or ``-''. The latter means: move forward/backward by a
1863specified number of generations. For example, if you want to return to
1864the latest generation after @code{--roll-back}, use
1865@code{--switch-generation=+1}.
1866
1867The difference between @code{--roll-back} and
1868@code{--switch-generation=-1} is that @code{--switch-generation} will
1869not make a zeroth generation, so if a specified generation does not
1870exist, the current generation will not be changed.
1871
dbc31ab2 1872@item --search-paths[=@var{kind}]
5924080d
LC
1873@cindex search paths
1874Report environment variable definitions, in Bash syntax, that may be
1875needed in order to use the set of installed packages. These environment
1876variables are used to specify @dfn{search paths} for files used by some
1877of the installed packages.
1878
1879For example, GCC needs the @code{CPATH} and @code{LIBRARY_PATH}
1880environment variables to be defined so it can look for headers and
1881libraries in the user's profile (@pxref{Environment Variables,,, gcc,
1882Using the GNU Compiler Collection (GCC)}). If GCC and, say, the C
1883library are installed in the profile, then @code{--search-paths} will
1884suggest setting these variables to @code{@var{profile}/include} and
1885@code{@var{profile}/lib}, respectively.
1886
dbc31ab2
LC
1887The typical use case is to define these environment variables in the
1888shell:
1889
1890@example
1891$ eval `guix package --search-paths`
1892@end example
1893
1894@var{kind} may be one of @code{exact}, @code{prefix}, or @code{suffix},
1895meaning that the returned environment variable definitions will either
1896be exact settings, or prefixes or suffixes of the current value of these
1897variables. When omitted, @var{kind} defaults to @code{exact}.
1898
fc2d2339
LC
1899This option can also be used to compute the @emph{combined} search paths
1900of several profiles. Consider this example:
1901
1902@example
1903$ guix package -p foo -i guile
1904$ guix package -p bar -i guile-json
1905$ guix package -p foo -p bar --search-paths
1906@end example
1907
1908The last command above reports about the @code{GUILE_LOAD_PATH}
1909variable, even though, taken individually, neither @file{foo} nor
1910@file{bar} would lead to that recommendation.
1911
1912
eeaf4427
LC
1913@item --profile=@var{profile}
1914@itemx -p @var{profile}
1915Use @var{profile} instead of the user's default profile.
1916
70915c1a 1917@item --verbose
f97c9175
AE
1918Produce verbose output. In particular, emit the build log of the
1919environment on the standard error port.
70915c1a 1920
eeaf4427
LC
1921@item --bootstrap
1922Use the bootstrap Guile to build the profile. This option is only
1923useful to distribution developers.
1924
1925@end table
1926
f97c9175 1927In addition to these actions, @command{guix package} supports the
733b4130
LC
1928following options to query the current state of a profile, or the
1929availability of packages:
eeaf4427 1930
733b4130
LC
1931@table @option
1932
acc08466
NK
1933@item --search=@var{regexp}
1934@itemx -s @var{regexp}
b110869d 1935@cindex searching for packages
5763ad92 1936List the available packages whose name, synopsis, or description matches
4e863eb3 1937@var{regexp}, sorted by relevance. Print all the metadata of matching packages in
299112d3
LC
1938@code{recutils} format (@pxref{Top, GNU recutils databases,, recutils,
1939GNU recutils manual}).
acc08466 1940
299112d3
LC
1941This allows specific fields to be extracted using the @command{recsel}
1942command, for instance:
1943
1944@example
4e863eb3
LC
1945$ guix package -s malloc | recsel -p name,version,relevance
1946name: jemalloc
1947version: 4.5.0
1948relevance: 6
1949
299112d3 1950name: glibc
4e863eb3
LC
1951version: 2.25
1952relevance: 1
299112d3
LC
1953
1954name: libgc
4e863eb3
LC
1955version: 7.6.0
1956relevance: 1
299112d3 1957@end example
acc08466 1958
a12d92f5
LC
1959Similarly, to show the name of all the packages available under the
1960terms of the GNU@tie{}LGPL version 3:
1961
1962@example
1963$ guix package -s "" | recsel -p name -e 'license ~ "LGPL 3"'
1964name: elfutils
1965
1966name: gmp
1967@dots{}
1968@end example
1969
db5a9444
LC
1970It is also possible to refine search results using several @code{-s}
1971flags. For example, the following command returns a list of board
1972games:
1973
1974@example
1975$ guix package -s '\<board\>' -s game | recsel -p name
1976name: gnubg
1977@dots{}
1978@end example
1979
1980If we were to omit @code{-s game}, we would also get software packages
1981that deal with printed circuit boards; removing the angle brackets
1982around @code{board} would further add packages that have to do with
1983keyboards.
1984
b110869d
LC
1985And now for a more elaborate example. The following command searches
1986for cryptographic libraries, filters out Haskell, Perl, Python, and Ruby
1987libraries, and prints the name and synopsis of the matching packages:
1988
1989@example
1990$ guix package -s crypto -s library | \
1991 recsel -e '! (name ~ "^(ghc|perl|python|ruby)")' -p name,synopsis
1992@end example
1993
1994@noindent
1995@xref{Selection Expressions,,, recutils, GNU recutils manual}, for more
1996information on @dfn{selection expressions} for @code{recsel -e}.
1997
2aa6efb0
CR
1998@item --show=@var{package}
1999Show details about @var{package}, taken from the list of available packages, in
2000@code{recutils} format (@pxref{Top, GNU recutils databases,, recutils, GNU
2001recutils manual}).
2002
2003@example
2004$ guix package --show=python | recsel -p name,version
2005name: python
2006version: 2.7.6
2007
2008name: python
2009version: 3.3.5
2010@end example
2011
2012You may also specify the full name of a package to only get details about a
2013specific version of it:
2014@example
ea206df4 2015$ guix package --show=python@@3.4 | recsel -p name,version
2aa6efb0 2016name: python
ea206df4 2017version: 3.4.3
2aa6efb0
CR
2018@end example
2019
2020
2021
733b4130
LC
2022@item --list-installed[=@var{regexp}]
2023@itemx -I [@var{regexp}]
bd9bde1c
LC
2024List the currently installed packages in the specified profile, with the
2025most recently installed packages shown last. When @var{regexp} is
2026specified, list only installed packages whose name matches @var{regexp}.
733b4130
LC
2027
2028For each installed package, print the following items, separated by
2029tabs: the package name, its version string, the part of the package that
2030is installed (for instance, @code{out} for the default output,
2031@code{include} for its headers, etc.), and the path of this package in
2032the store.
2033
64fc89b6
LC
2034@item --list-available[=@var{regexp}]
2035@itemx -A [@var{regexp}]
5763ad92 2036List packages currently available in the distribution for this system
a1ba8475
LC
2037(@pxref{GNU Distribution}). When @var{regexp} is specified, list only
2038installed packages whose name matches @var{regexp}.
64fc89b6
LC
2039
2040For each package, print the following items separated by tabs: its name,
6e721c4d
LC
2041its version string, the parts of the package (@pxref{Packages with
2042Multiple Outputs}), and the source location of its definition.
64fc89b6 2043
f566d765
LC
2044@item --list-generations[=@var{pattern}]
2045@itemx -l [@var{pattern}]
e32171ee 2046@cindex generations
f566d765
LC
2047Return a list of generations along with their creation dates; for each
2048generation, show the installed packages, with the most recently
4b2bc804
NK
2049installed packages shown last. Note that the zeroth generation is never
2050shown.
f566d765
LC
2051
2052For each installed package, print the following items, separated by
2053tabs: the name of a package, its version string, the part of the package
2054that is installed (@pxref{Packages with Multiple Outputs}), and the
2055location of this package in the store.
2056
2057When @var{pattern} is used, the command returns only matching
2058generations. Valid patterns include:
2059
2060@itemize
2061@item @emph{Integers and comma-separated integers}. Both patterns denote
2062generation numbers. For instance, @code{--list-generations=1} returns
2063the first one.
2064
2065And @code{--list-generations=1,8,2} outputs three generations in the
2066specified order. Neither spaces nor trailing commas are allowed.
2067
2068@item @emph{Ranges}. @code{--list-generations=2..9} prints the
2069specified generations and everything in between. Note that the start of
f97c9175 2070a range must be smaller than its end.
f566d765
LC
2071
2072It is also possible to omit the endpoint. For example,
2073@code{--list-generations=2..}, returns all generations starting from the
2074second one.
2075
2076@item @emph{Durations}. You can also get the last @emph{N}@tie{}days, weeks,
2077or months by passing an integer along with the first letter of the
d7ddb257
LC
2078duration. For example, @code{--list-generations=20d} lists generations
2079that are up to 20 days old.
f566d765
LC
2080@end itemize
2081
b7884ca3
NK
2082@item --delete-generations[=@var{pattern}]
2083@itemx -d [@var{pattern}]
d7ddb257
LC
2084When @var{pattern} is omitted, delete all generations except the current
2085one.
b7884ca3
NK
2086
2087This command accepts the same patterns as @option{--list-generations}.
d7ddb257
LC
2088When @var{pattern} is specified, delete the matching generations. When
2089@var{pattern} specifies a duration, generations @emph{older} than the
2090specified duration match. For instance, @code{--delete-generations=1m}
2091deletes generations that are more than one month old.
2092
391bdd8f
LC
2093If the current generation matches, it is @emph{not} deleted. Also, the
2094zeroth generation is never deleted.
b7884ca3 2095
f97c9175 2096Note that deleting generations prevents rolling back to them.
1bb9900a
LC
2097Consequently, this command must be used with care.
2098
733b4130 2099@end table
eeaf4427 2100
70ee5642 2101Finally, since @command{guix package} may actually start build
ccd7158d 2102processes, it supports all the common build options (@pxref{Common Build
f97c9175 2103Options}). It also supports package transformation options, such as
b8638f03
LC
2104@option{--with-source} (@pxref{Package Transformation Options}).
2105However, note that package transformations are lost when upgrading; to
f97c9175 2106preserve transformations across upgrades, you should define your own
b8638f03
LC
2107package variant in a Guile module and add it to @code{GUIX_PACKAGE_PATH}
2108(@pxref{Defining Packages}).
2109
70ee5642 2110
c4202d60
LC
2111@node Substitutes
2112@section Substitutes
2113
2114@cindex substitutes
2115@cindex pre-built binaries
2116Guix supports transparent source/binary deployment, which means that it
2117can either build things locally, or download pre-built items from a
2118server. We call these pre-built items @dfn{substitutes}---they are
2119substitutes for local build results. In many cases, downloading a
2120substitute is much faster than building things locally.
2121
2122Substitutes can be anything resulting from a derivation build
2123(@pxref{Derivations}). Of course, in the common case, they are
2124pre-built package binaries, but source tarballs, for instance, which
2125also result from derivation builds, can be available as substitutes.
2126
2127The @code{hydra.gnu.org} server is a front-end to a build farm that
2128builds packages from the GNU distribution continuously for some
deb6276d 2129architectures, and makes them available as substitutes. This is the
f8a8e0fe
LC
2130default source of substitutes; it can be overridden by passing the
2131@option{--substitute-urls} option either to @command{guix-daemon}
2132(@pxref{daemon-substitute-urls,, @code{guix-daemon --substitute-urls}})
2133or to client tools such as @command{guix package}
2134(@pxref{client-substitute-urls,, client @option{--substitute-urls}
2135option}).
c4202d60 2136
1dbe3a8d 2137Substitute URLs can be either HTTP or HTTPS.
9b7bd1b1
LC
2138HTTPS is recommended because communications are encrypted; conversely,
2139using HTTP makes all communications visible to an eavesdropper, who
2140could use the information gathered to determine, for instance, whether
2141your system has unpatched security vulnerabilities.
2142
c4202d60
LC
2143@cindex security
2144@cindex digital signatures
e32171ee 2145@cindex substitutes, authorization thereof
a9468b42
LC
2146@cindex access control list (ACL), for substitutes
2147@cindex ACL (access control list), for substitutes
df061d07
LC
2148To allow Guix to download substitutes from @code{hydra.gnu.org} or a
2149mirror thereof, you
c4202d60
LC
2150must add its public key to the access control list (ACL) of archive
2151imports, using the @command{guix archive} command (@pxref{Invoking guix
2152archive}). Doing so implies that you trust @code{hydra.gnu.org} to not
2153be compromised and to serve genuine substitutes.
2154
2155This public key is installed along with Guix, in
2156@code{@var{prefix}/share/guix/hydra.gnu.org.pub}, where @var{prefix} is
2157the installation prefix of Guix. If you installed Guix from source,
2158make sure you checked the GPG signature of
2159@file{guix-@value{VERSION}.tar.gz}, which contains this public key file.
2160Then, you can run something like this:
2161
2162@example
2163# guix archive --authorize < hydra.gnu.org.pub
2164@end example
2165
2166Once this is in place, the output of a command like @code{guix build}
2167should change from something like:
2168
2169@example
2170$ guix build emacs --dry-run
2171The following derivations would be built:
2172 /gnu/store/yr7bnx8xwcayd6j95r2clmkdl1qh688w-emacs-24.3.drv
2173 /gnu/store/x8qsh1hlhgjx6cwsjyvybnfv2i37z23w-dbus-1.6.4.tar.gz.drv
2174 /gnu/store/1ixwp12fl950d15h2cj11c73733jay0z-alsa-lib-1.0.27.1.tar.bz2.drv
2175 /gnu/store/nlma1pw0p603fpfiqy7kn4zm105r5dmw-util-linux-2.21.drv
2176@dots{}
2177@end example
2178
2179@noindent
2180to something like:
2181
2182@example
2183$ guix build emacs --dry-run
2184The following files would be downloaded:
2185 /gnu/store/pk3n22lbq6ydamyymqkkz7i69wiwjiwi-emacs-24.3
2186 /gnu/store/2ygn4ncnhrpr61rssa6z0d9x22si0va3-libjpeg-8d
2187 /gnu/store/71yz6lgx4dazma9dwn2mcjxaah9w77jq-cairo-1.12.16
2188 /gnu/store/7zdhgp0n1518lvfn8mb96sxqfmvqrl7v-libxrender-0.9.7
2189@dots{}
2190@end example
2191
2192@noindent
2193This indicates that substitutes from @code{hydra.gnu.org} are usable and
2194will be downloaded, when possible, for future builds.
2195
a9468b42
LC
2196Guix detects and raises an error when attempting to use a substitute
2197that has been tampered with. Likewise, it ignores substitutes that are
2198not signed, or that are not signed by one of the keys listed in the ACL.
2199
2200There is one exception though: if an unauthorized server provides
2201substitutes that are @emph{bit-for-bit identical} to those provided by
2202an authorized server, then the unauthorized server becomes eligible for
2203downloads. For example, assume we have chosen two substitute servers
2204with this option:
2205
2206@example
2207--substitute-urls="https://a.example.org https://b.example.org"
2208@end example
2209
2210@noindent
2211@cindex reproducible builds
2212If the ACL contains only the key for @code{b.example.org}, and if
2213@code{a.example.org} happens to serve the @emph{exact same} substitutes,
2214then Guix will download substitutes from @code{a.example.org} because it
2215comes first in the list and can be considered a mirror of
2216@code{b.example.org}. In practice, independent build machines usually
2217produce the same binaries, thanks to bit-reproducible builds (see
2218below).
c4202d60 2219
e0c941fe 2220@vindex http_proxy
9b7bd1b1
LC
2221Substitutes are downloaded over HTTP or HTTPS.
2222The @code{http_proxy} environment
e0c941fe
LC
2223variable can be set in the environment of @command{guix-daemon} and is
2224honored for downloads of substitutes. Note that the value of
2225@code{http_proxy} in the environment where @command{guix build},
2226@command{guix package}, and other client commands are run has
2227@emph{absolutely no effect}.
2228
9b7bd1b1
LC
2229When using HTTPS, the server's X.509 certificate is @emph{not} validated
2230(in other words, the server is not authenticated), contrary to what
2231HTTPS clients such as Web browsers usually do. This is because Guix
2232authenticates substitute information itself, as explained above, which
2233is what we care about (whereas X.509 certificates are about
2234authenticating bindings between domain names and public keys.)
2235
585347d7
LC
2236You can get statistics on the substitutes provided by a server using the
2237@command{guix weather} command (@pxref{Invoking guix weather}).
2238
c4202d60
LC
2239The substitute mechanism can be disabled globally by running
2240@code{guix-daemon} with @code{--no-substitutes} (@pxref{Invoking
2241guix-daemon}). It can also be disabled temporarily by passing the
2242@code{--no-substitutes} option to @command{guix package}, @command{guix
2243build}, and other command-line tools.
2244
2245
9b7bd1b1
LC
2246@unnumberedsubsec On Trusting Binaries
2247
c4202d60
LC
2248Today, each individual's control over their own computing is at the
2249mercy of institutions, corporations, and groups with enough power and
2250determination to subvert the computing infrastructure and exploit its
2251weaknesses. While using @code{hydra.gnu.org} substitutes can be
2252convenient, we encourage users to also build on their own, or even run
2253their own build farm, such that @code{hydra.gnu.org} is less of an
8ce229fc
LC
2254interesting target. One way to help is by publishing the software you
2255build using @command{guix publish} so that others have one more choice
2256of server to download substitutes from (@pxref{Invoking guix publish}).
c4202d60
LC
2257
2258Guix has the foundations to maximize build reproducibility
2259(@pxref{Features}). In most cases, independent builds of a given
2260package or derivation should yield bit-identical results. Thus, through
2261a diverse set of independent package builds, we can strengthen the
d23c20f1
LC
2262integrity of our systems. The @command{guix challenge} command aims to
2263help users assess substitute servers, and to assist developers in
2264finding out about non-deterministic package builds (@pxref{Invoking guix
a8d65643
LC
2265challenge}). Similarly, the @option{--check} option of @command{guix
2266build} allows users to check whether previously-installed substitutes
2267are genuine by rebuilding them locally (@pxref{build-check,
2268@command{guix build --check}}).
c4202d60
LC
2269
2270In the future, we want Guix to have support to publish and retrieve
2271binaries to/from other users, in a peer-to-peer fashion. If you would
2272like to discuss this project, join us on @email{guix-devel@@gnu.org}.
2273
2274
6e721c4d
LC
2275@node Packages with Multiple Outputs
2276@section Packages with Multiple Outputs
2277
2278@cindex multiple-output packages
2279@cindex package outputs
e32171ee 2280@cindex outputs
6e721c4d
LC
2281
2282Often, packages defined in Guix have a single @dfn{output}---i.e., the
f97c9175 2283source package leads to exactly one directory in the store. When running
6e721c4d
LC
2284@command{guix package -i glibc}, one installs the default output of the
2285GNU libc package; the default output is called @code{out}, but its name
2286can be omitted as shown in this command. In this particular case, the
2287default output of @code{glibc} contains all the C header files, shared
2288libraries, static libraries, Info documentation, and other supporting
2289files.
2290
2291Sometimes it is more appropriate to separate the various types of files
2292produced from a single source package into separate outputs. For
2293instance, the GLib C library (used by GTK+ and related packages)
2294installs more than 20 MiB of reference documentation as HTML pages.
2295To save space for users who do not need it, the documentation goes to a
2296separate output, called @code{doc}. To install the main GLib output,
2297which contains everything but the documentation, one would run:
2298
2299@example
2300guix package -i glib
2301@end example
2302
e32171ee 2303@cindex documentation
6e721c4d
LC
2304The command to install its documentation is:
2305
2306@example
2307guix package -i glib:doc
2308@end example
2309
2310Some packages install programs with different ``dependency footprints''.
f97c9175 2311For instance, the WordNet package installs both command-line tools and
6e721c4d
LC
2312graphical user interfaces (GUIs). The former depend solely on the C
2313library, whereas the latter depend on Tcl/Tk and the underlying X
2314libraries. In this case, we leave the command-line tools in the default
2315output, whereas the GUIs are in a separate output. This allows users
fcc58db6
LC
2316who do not need the GUIs to save space. The @command{guix size} command
2317can help find out about such situations (@pxref{Invoking guix size}).
88856916 2318@command{guix graph} can also be helpful (@pxref{Invoking guix graph}).
6e721c4d
LC
2319
2320There are several such multiple-output packages in the GNU distribution.
91ef73d4
LC
2321Other conventional output names include @code{lib} for libraries and
2322possibly header files, @code{bin} for stand-alone programs, and
2323@code{debug} for debugging information (@pxref{Installing Debugging
2324Files}). The outputs of a packages are listed in the third column of
2325the output of @command{guix package --list-available} (@pxref{Invoking
2326guix package}).
6e721c4d 2327
eeaf4427 2328
e49951eb
MW
2329@node Invoking guix gc
2330@section Invoking @command{guix gc}
fe8ff028
LC
2331
2332@cindex garbage collector
e32171ee 2333@cindex disk space
f97c9175 2334Packages that are installed, but not used, may be @dfn{garbage-collected}.
e49951eb 2335The @command{guix gc} command allows users to explicitly run the garbage
c22eb992
LC
2336collector to reclaim space from the @file{/gnu/store} directory. It is
2337the @emph{only} way to remove files from @file{/gnu/store}---removing
2338files or directories manually may break it beyond repair!
fe8ff028
LC
2339
2340The garbage collector has a set of known @dfn{roots}: any file under
834129e0 2341@file{/gnu/store} reachable from a root is considered @dfn{live} and
fe8ff028
LC
2342cannot be deleted; any other file is considered @dfn{dead} and may be
2343deleted. The set of garbage collector roots includes default user
e49951eb
MW
2344profiles, and may be augmented with @command{guix build --root}, for
2345example (@pxref{Invoking guix build}).
fe8ff028 2346
1bb9900a
LC
2347Prior to running @code{guix gc --collect-garbage} to make space, it is
2348often useful to remove old generations from user profiles; that way, old
2349package builds referenced by those generations can be reclaimed. This
2350is achieved by running @code{guix package --delete-generations}
2351(@pxref{Invoking guix package}).
2352
457103b9
LC
2353Our recommendation is to run a garbage collection periodically, or when
2354you are short on disk space. For instance, to guarantee that at least
23555@tie{}GB are available on your disk, simply run:
2356
2357@example
2358guix gc -F 5G
2359@end example
2360
2361It is perfectly safe to run as a non-interactive periodic job
2362(@pxref{Scheduled Job Execution}, for how to set up such a job on
2363GuixSD). Running @command{guix gc} with no arguments will collect as
2364much garbage as it can, but that is often inconvenient: you may find
2365yourself having to rebuild or re-download software that is ``dead'' from
2366the GC viewpoint but that is necessary to build other pieces of
2367software---e.g., the compiler tool chain.
2368
e49951eb 2369The @command{guix gc} command has three modes of operation: it can be
fe8ff028 2370used to garbage-collect any dead files (the default), to delete specific
7770aafc
LC
2371files (the @code{--delete} option), to print garbage-collector
2372information, or for more advanced queries. The garbage collection
2373options are as follows:
fe8ff028
LC
2374
2375@table @code
2376@item --collect-garbage[=@var{min}]
2377@itemx -C [@var{min}]
834129e0 2378Collect garbage---i.e., unreachable @file{/gnu/store} files and
fe8ff028
LC
2379sub-directories. This is the default operation when no option is
2380specified.
2381
2382When @var{min} is given, stop once @var{min} bytes have been collected.
2383@var{min} may be a number of bytes, or it may include a unit as a
4a44d7bb
LC
2384suffix, such as @code{MiB} for mebibytes and @code{GB} for gigabytes
2385(@pxref{Block size, size specifications,, coreutils, GNU Coreutils}).
fe8ff028
LC
2386
2387When @var{min} is omitted, collect all the garbage.
2388
0054e470
LC
2389@item --free-space=@var{free}
2390@itemx -F @var{free}
2391Collect garbage until @var{free} space is available under
2392@file{/gnu/store}, if possible; @var{free} denotes storage space, such
2393as @code{500MiB}, as described above.
2394
2395When @var{free} or more is already available in @file{/gnu/store}, do
2396nothing and exit immediately.
2397
fe8ff028
LC
2398@item --delete
2399@itemx -d
2400Attempt to delete all the store files and directories specified as
2401arguments. This fails if some of the files are not in the store, or if
2402they are still live.
2403
30d9aa54
LC
2404@item --list-failures
2405List store items corresponding to cached build failures.
2406
2407This prints nothing unless the daemon was started with
2408@option{--cache-failures} (@pxref{Invoking guix-daemon,
2409@option{--cache-failures}}).
2410
2411@item --clear-failures
2412Remove the specified store items from the failed-build cache.
2413
2414Again, this option only makes sense when the daemon is started with
2415@option{--cache-failures}. Otherwise, it does nothing.
2416
fe8ff028
LC
2417@item --list-dead
2418Show the list of dead files and directories still present in the
2419store---i.e., files and directories no longer reachable from any root.
2420
2421@item --list-live
2422Show the list of live store files and directories.
ba8b732d
LC
2423
2424@end table
2425
2426In addition, the references among existing store files can be queried:
2427
2428@table @code
2429
2430@item --references
2431@itemx --referrers
e32171ee 2432@cindex package dependencies
ba8b732d
LC
2433List the references (respectively, the referrers) of store files given
2434as arguments.
2435
8e59fdd5
LC
2436@item --requisites
2437@itemx -R
fcc58db6 2438@cindex closure
8e59fdd5
LC
2439List the requisites of the store files passed as arguments. Requisites
2440include the store files themselves, their references, and the references
2441of these, recursively. In other words, the returned list is the
2442@dfn{transitive closure} of the store files.
2443
f97c9175
AE
2444@xref{Invoking guix size}, for a tool to profile the size of the closure
2445of an element. @xref{Invoking guix graph}, for a tool to visualize
88856916 2446the graph of references.
fcc58db6 2447
fe8ff028
LC
2448@end table
2449
7770aafc
LC
2450Lastly, the following options allow you to check the integrity of the
2451store and to control disk usage.
2452
2453@table @option
2454
2455@item --verify[=@var{options}]
2456@cindex integrity, of the store
2457@cindex integrity checking
2458Verify the integrity of the store.
2459
2460By default, make sure that all the store items marked as valid in the
f97c9175 2461database of the daemon actually exist in @file{/gnu/store}.
7770aafc 2462
f97c9175 2463When provided, @var{options} must be a comma-separated list containing one
7770aafc
LC
2464or more of @code{contents} and @code{repair}.
2465
7414de0a 2466When passing @option{--verify=contents}, the daemon computes the
f97c9175 2467content hash of each store item and compares it against its hash in the
7770aafc
LC
2468database. Hash mismatches are reported as data corruptions. Because it
2469traverses @emph{all the files in the store}, this command can take a
2470long time, especially on systems with a slow disk drive.
2471
2472@cindex repairing the store
6da5bb7b 2473@cindex corruption, recovering from
7770aafc
LC
2474Using @option{--verify=repair} or @option{--verify=contents,repair}
2475causes the daemon to try to repair corrupt store items by fetching
2476substitutes for them (@pxref{Substitutes}). Because repairing is not
2477atomic, and thus potentially dangerous, it is available only to the
6da5bb7b
LC
2478system administrator. A lightweight alternative, when you know exactly
2479which items in the store are corrupt, is @command{guix build --repair}
2480(@pxref{Invoking guix build}).
7770aafc
LC
2481
2482@item --optimize
2483@cindex deduplication
2484Optimize the store by hard-linking identical files---this is
2485@dfn{deduplication}.
2486
2487The daemon performs deduplication after each successful build or archive
2488import, unless it was started with @code{--disable-deduplication}
2489(@pxref{Invoking guix-daemon, @code{--disable-deduplication}}). Thus,
2490this option is primarily useful when the daemon was running with
2491@code{--disable-deduplication}.
2492
2493@end table
eeaf4427 2494
f651b477
LC
2495@node Invoking guix pull
2496@section Invoking @command{guix pull}
2497
e32171ee 2498@cindex upgrading Guix
7fcf2a0b 2499@cindex updating Guix
e32171ee
JD
2500@cindex @command{guix pull}
2501@cindex pull
f651b477
LC
2502Packages are installed or upgraded to the latest version available in
2503the distribution currently available on your local machine. To update
2504that distribution, along with the Guix tools, you must run @command{guix
2505pull}: the command downloads the latest Guix source code and package
59a16275
LC
2506descriptions, and deploys it. Source code is downloaded from a
2507@uref{https://git-scm.com, Git} repository.
f651b477
LC
2508
2509On completion, @command{guix package} will use packages and package
2510versions from this just-retrieved copy of Guix. Not only that, but all
2511the Guix commands and Scheme modules will also be taken from that latest
2512version. New @command{guix} sub-commands added by the update also
cb05108a
LC
2513become available.
2514
2515Any user can update their Guix copy using @command{guix pull}, and the
2516effect is limited to the user who run @command{guix pull}. For
2517instance, when user @code{root} runs @command{guix pull}, this has no
2518effect on the version of Guix that user @code{alice} sees, and vice
2519versa@footnote{Under the hood, @command{guix pull} updates the
2520@file{~/.config/guix/latest} symbolic link to point to the latest Guix,
5e2017ed
CM
2521and the @command{guix} command loads code from there. Currently, the
2522only way to roll back an invocation of @command{guix pull} is to
2523manually update this symlink to point to the previous Guix.}.
f651b477
LC
2524
2525The @command{guix pull} command is usually invoked with no arguments,
2526but it supports the following options:
2527
2528@table @code
2529@item --verbose
2530Produce verbose output, writing build logs to the standard error output.
2531
ab5d72ad 2532@item --url=@var{url}
59a16275 2533Download Guix from the Git repository at @var{url}.
ab5d72ad 2534
cca6941f 2535@vindex GUIX_PULL_URL
59a16275 2536By default, the source is taken from its canonical Git repository at
cca6941f
OP
2537@code{gnu.org}, for the stable branch of Guix. To use a different source,
2538set the @code{GUIX_PULL_URL} environment variable.
ab5d72ad 2539
59a16275
LC
2540@item --commit=@var{commit}
2541Deploy @var{commit}, a valid Git commit ID represented as a hexadecimal
2542string.
8a9cffb2 2543
59a16275
LC
2544@item --branch=@var{branch}
2545Deploy the tip of @var{branch}, the name of a Git branch available on
2546the repository at @var{url}.
8a9cffb2 2547
f651b477
LC
2548@item --bootstrap
2549Use the bootstrap Guile to build the latest Guix. This option is only
2550useful to Guix developers.
2551@end table
2552
4902d3c4
LC
2553In addition, @command{guix pull} supports all the common build options
2554(@pxref{Common Build Options}).
760c60d6 2555
239c2266
LC
2556@node Invoking guix pack
2557@section Invoking @command{guix pack}
2558
2559Occasionally you want to pass software to people who are not (yet!)
2560lucky enough to be using Guix. You'd tell them to run @command{guix
2561package -i @var{something}}, but that's not possible in this case. This
2562is where @command{guix pack} comes in.
2563
2564@cindex pack
2565@cindex bundle
2566@cindex application bundle
2567@cindex software bundle
2568The @command{guix pack} command creates a shrink-wrapped @dfn{pack} or
2569@dfn{software bundle}: it creates a tarball or some other archive
2570containing the binaries of the software you're interested in, and all
2571its dependencies. The resulting archive can be used on any machine that
2572does not have Guix, and people can run the exact same binaries as those
107b8da6
LC
2573you have with Guix. The pack itself is created in a bit-reproducible
2574fashion, so anyone can verify that it really contains the build results
2575that you pretend to be shipping.
239c2266
LC
2576
2577For example, to create a bundle containing Guile, Emacs, Geiser, and all
2578their dependencies, you can run:
2579
2580@example
2581$ guix pack guile emacs geiser
2582@dots{}
2583/gnu/store/@dots{}-pack.tar.gz
2584@end example
2585
2586The result here is a tarball containing a @file{/gnu/store} directory
2587with all the relevant packages. The resulting tarball contains a
2588@dfn{profile} with the three packages of interest; the profile is the
2589same as would be created by @command{guix package -i}. It is this
2590mechanism that is used to create Guix's own standalone binary tarball
2591(@pxref{Binary Installation}).
2592
5895ec8a
LC
2593Users of this pack would have to run
2594@file{/gnu/store/@dots{}-profile/bin/guile} to run Guile, which you may
2595find inconvenient. To work around it, you can create, say, a
2596@file{/opt/gnu/bin} symlink to the profile:
2597
2598@example
2599guix pack -S /opt/gnu/bin=bin guile emacs geiser
2600@end example
2601
2602@noindent
2603That way, users can happily type @file{/opt/gnu/bin/guile} and enjoy.
2604
708b54a9
LC
2605Alternatively, you can produce a pack in the Docker image format using
2606the following command:
b1edfbc3
LC
2607
2608@example
2609guix pack -f docker guile emacs geiser
2610@end example
2611
2612@noindent
2613The result is a tarball that can be passed to the @command{docker load}
2614command. See the
2615@uref{https://docs.docker.com/engine/reference/commandline/load/, Docker
2616documentation} for more information.
2617
239c2266
LC
2618Several command-line options allow you to customize your pack:
2619
2620@table @code
708b54a9
LC
2621@item --format=@var{format}
2622@itemx -f @var{format}
2623Produce a pack in the given @var{format}.
2624
2625The available formats are:
2626
2627@table @code
2628@item tarball
2629This is the default format. It produces a tarball containing all the
7b14c48b 2630specified binaries and symlinks.
708b54a9
LC
2631
2632@item docker
2633This produces a tarball that follows the
2634@uref{https://github.com/docker/docker/blob/master/image/spec/v1.2.md,
2635Docker Image Specification}.
2636@end table
2637
83cfa024
LC
2638@item --expression=@var{expr}
2639@itemx -e @var{expr}
2640Consider the package @var{expr} evaluates to.
2641
2642This has the same purpose as the same-named option in @command{guix
2643build} (@pxref{Additional Build Options, @code{--expression} in
2644@command{guix build}}).
2645
239c2266
LC
2646@item --system=@var{system}
2647@itemx -s @var{system}
2648Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of
2649the system type of the build host.
2650
5461115e
LC
2651@item --target=@var{triplet}
2652@cindex cross-compilation
2653Cross-build for @var{triplet}, which must be a valid GNU triplet, such
2654as @code{"mips64el-linux-gnu"} (@pxref{Specifying target triplets, GNU
2655configuration triplets,, autoconf, Autoconf}).
2656
239c2266
LC
2657@item --compression=@var{tool}
2658@itemx -C @var{tool}
2659Compress the resulting tarball using @var{tool}---one of @code{gzip},
af735661 2660@code{bzip2}, @code{xz}, @code{lzip}, or @code{none} for no compression.
6b63c43e 2661
5895ec8a
LC
2662@item --symlink=@var{spec}
2663@itemx -S @var{spec}
2664Add the symlinks specified by @var{spec} to the pack. This option can
2665appear several times.
2666
2667@var{spec} has the form @code{@var{source}=@var{target}}, where
2668@var{source} is the symlink that will be created and @var{target} is the
2669symlink target.
2670
2671For instance, @code{-S /opt/gnu/bin=bin} creates a @file{/opt/gnu/bin}
2672symlink pointing to the @file{bin} sub-directory of the profile.
2673
6b63c43e
LC
2674@item --localstatedir
2675Include the ``local state directory'', @file{/var/guix}, in the
2676resulting pack.
2677
2678@file{/var/guix} contains the store database (@pxref{The Store}) as well
2679as garbage-collector roots (@pxref{Invoking guix gc}). Providing it in
2680the pack means that the store is ``complete'' and manageable by Guix;
2681not providing it pack means that the store is ``dead'': items cannot be
2682added to it or removed from it after extraction of the pack.
2683
2684One use case for this is the Guix self-contained binary tarball
2685(@pxref{Binary Installation}).
239c2266
LC
2686@end table
2687
2688In addition, @command{guix pack} supports all the common build options
2689(@pxref{Common Build Options}) and all the package transformation
2690options (@pxref{Package Transformation Options}).
2691
2692
760c60d6
LC
2693@node Invoking guix archive
2694@section Invoking @command{guix archive}
2695
e32171ee
JD
2696@cindex @command{guix archive}
2697@cindex archive
760c60d6
LC
2698The @command{guix archive} command allows users to @dfn{export} files
2699from the store into a single archive, and to later @dfn{import} them.
2700In particular, it allows store files to be transferred from one machine
4d4c4816
AE
2701to the store on another machine.
2702
e32171ee 2703@cindex exporting store items
4d4c4816
AE
2704To export store files as an archive to standard output, run:
2705
2706@example
2707guix archive --export @var{options} @var{specifications}...
2708@end example
2709
2710@var{specifications} may be either store file names or package
2711specifications, as for @command{guix package} (@pxref{Invoking guix
2712package}). For instance, the following command creates an archive
2713containing the @code{gui} output of the @code{git} package and the main
2714output of @code{emacs}:
2715
2716@example
2717guix archive --export git:gui /gnu/store/...-emacs-24.3 > great.nar
2718@end example
2719
2720If the specified packages are not built yet, @command{guix archive}
2721automatically builds them. The build process may be controlled with the
2722common build options (@pxref{Common Build Options}).
2723
2724To transfer the @code{emacs} package to a machine connected over SSH,
2725one would run:
760c60d6
LC
2726
2727@example
56607088 2728guix archive --export -r emacs | ssh the-machine guix archive --import
760c60d6
LC
2729@end example
2730
87236aed 2731@noindent
56607088
LC
2732Similarly, a complete user profile may be transferred from one machine
2733to another like this:
2734
2735@example
2736guix archive --export -r $(readlink -f ~/.guix-profile) | \
2737 ssh the-machine guix-archive --import
2738@end example
2739
2740@noindent
2741However, note that, in both examples, all of @code{emacs} and the
2742profile as well as all of their dependencies are transferred (due to
f97c9175
AE
2743@code{-r}), regardless of what is already available in the store on the
2744target machine. The @code{--missing} option can help figure out which
f11c444d
LC
2745items are missing from the target store. The @command{guix copy}
2746command simplifies and optimizes this whole process, so this is probably
2747what you should use in this case (@pxref{Invoking guix copy}).
87236aed 2748
5597b3ae
LC
2749@cindex nar, archive format
2750@cindex normalized archive (nar)
b1edfbc3 2751Archives are stored in the ``normalized archive'' or ``nar'' format, which is
5597b3ae 2752comparable in spirit to `tar', but with differences
0dbd88db 2753that make it more appropriate for our purposes. First, rather than
5597b3ae 2754recording all Unix metadata for each file, the nar format only mentions
0dbd88db
LC
2755the file type (regular, directory, or symbolic link); Unix permissions
2756and owner/group are dismissed. Second, the order in which directory
2757entries are stored always follows the order of file names according to
2758the C locale collation order. This makes archive production fully
2759deterministic.
2760
2761When exporting, the daemon digitally signs the contents of the archive,
2762and that digital signature is appended. When importing, the daemon
2763verifies the signature and rejects the import in case of an invalid
2764signature or if the signing key is not authorized.
760c60d6
LC
2765@c FIXME: Add xref to daemon doc about signatures.
2766
2767The main options are:
2768
2769@table @code
2770@item --export
2771Export the specified store files or packages (see below.) Write the
2772resulting archive to the standard output.
2773
56607088
LC
2774Dependencies are @emph{not} included in the output, unless
2775@code{--recursive} is passed.
2776
2777@item -r
2778@itemx --recursive
2779When combined with @code{--export}, this instructs @command{guix
2780archive} to include dependencies of the given items in the archive.
2781Thus, the resulting archive is self-contained: it contains the closure
2782of the exported store items.
2783
760c60d6
LC
2784@item --import
2785Read an archive from the standard input, and import the files listed
2786therein into the store. Abort if the archive has an invalid digital
f82cc5fd
LC
2787signature, or if it is signed by a public key not among the authorized
2788keys (see @code{--authorize} below.)
554f26ec 2789
87236aed
LC
2790@item --missing
2791Read a list of store file names from the standard input, one per line,
2792and write on the standard output the subset of these files missing from
2793the store.
2794
554f26ec 2795@item --generate-key[=@var{parameters}]
f82cc5fd 2796@cindex signing, archives
f97c9175 2797Generate a new key pair for the daemon. This is a prerequisite before
554f26ec
LC
2798archives can be exported with @code{--export}. Note that this operation
2799usually takes time, because it needs to gather enough entropy to
2800generate the key pair.
2801
2802The generated key pair is typically stored under @file{/etc/guix}, in
2803@file{signing-key.pub} (public key) and @file{signing-key.sec} (private
867d8473
LC
2804key, which must be kept secret.) When @var{parameters} is omitted,
2805an ECDSA key using the Ed25519 curve is generated, or, for Libgcrypt
2806versions before 1.6.0, it is a 4096-bit RSA key.
f97c9175 2807Alternatively, @var{parameters} can specify
554f26ec
LC
2808@code{genkey} parameters suitable for Libgcrypt (@pxref{General
2809public-key related Functions, @code{gcry_pk_genkey},, gcrypt, The
2810Libgcrypt Reference Manual}).
f82cc5fd
LC
2811
2812@item --authorize
2813@cindex authorizing, archives
2814Authorize imports signed by the public key passed on standard input.
2815The public key must be in ``s-expression advanced format''---i.e., the
2816same format as the @file{signing-key.pub} file.
2817
2818The list of authorized keys is kept in the human-editable file
2819@file{/etc/guix/acl}. The file contains
2820@url{http://people.csail.mit.edu/rivest/Sexp.txt, ``advanced-format
2821s-expressions''} and is structured as an access-control list in the
2822@url{http://theworld.com/~cme/spki.txt, Simple Public-Key Infrastructure
2823(SPKI)}.
c6f8e9dd
LC
2824
2825@item --extract=@var{directory}
2826@itemx -x @var{directory}
2827Read a single-item archive as served by substitute servers
2828(@pxref{Substitutes}) and extract it to @var{directory}. This is a
2829low-level operation needed in only very narrow use cases; see below.
2830
2831For example, the following command extracts the substitute for Emacs
2832served by @code{hydra.gnu.org} to @file{/tmp/emacs}:
2833
2834@example
2835$ wget -O - \
df061d07 2836 https://hydra.gnu.org/nar/@dots{}-emacs-24.5 \
c6f8e9dd
LC
2837 | bunzip2 | guix archive -x /tmp/emacs
2838@end example
2839
2840Single-item archives are different from multiple-item archives produced
2841by @command{guix archive --export}; they contain a single store item,
2842and they do @emph{not} embed a signature. Thus this operation does
2843@emph{no} signature verification and its output should be considered
2844unsafe.
2845
2846The primary purpose of this operation is to facilitate inspection of
2847archive contents coming from possibly untrusted substitute servers.
2848
760c60d6
LC
2849@end table
2850
568717fd
LC
2851@c *********************************************************************
2852@node Programming Interface
2853@chapter Programming Interface
2854
3dc1970d
LC
2855GNU Guix provides several Scheme programming interfaces (APIs) to
2856define, build, and query packages. The first interface allows users to
2857write high-level package definitions. These definitions refer to
2858familiar packaging concepts, such as the name and version of a package,
2859its build system, and its dependencies. These definitions can then be
2860turned into concrete build actions.
2861
ba55b1cb 2862Build actions are performed by the Guix daemon, on behalf of users. In a
3dc1970d 2863standard setup, the daemon has write access to the store---the
834129e0 2864@file{/gnu/store} directory---whereas users do not. The recommended
3dc1970d
LC
2865setup also has the daemon perform builds in chroots, under a specific
2866build users, to minimize interference with the rest of the system.
2867
2868@cindex derivation
2869Lower-level APIs are available to interact with the daemon and the
2870store. To instruct the daemon to perform a build action, users actually
2871provide it with a @dfn{derivation}. A derivation is a low-level
2872representation of the build actions to be taken, and the environment in
2873which they should occur---derivations are to package definitions what
49ad317a
LC
2874assembly is to C programs. The term ``derivation'' comes from the fact
2875that build results @emph{derive} from them.
3dc1970d
LC
2876
2877This chapter describes all these APIs in turn, starting from high-level
2878package definitions.
2879
568717fd 2880@menu
b860f382 2881* Defining Packages:: Defining new packages.
7458bd0a 2882* Build Systems:: Specifying how packages are built.
b860f382
LC
2883* The Store:: Manipulating the package store.
2884* Derivations:: Low-level interface to package derivations.
2885* The Store Monad:: Purely functional interface to the store.
21b679f6 2886* G-Expressions:: Manipulating build expressions.
568717fd
LC
2887@end menu
2888
2889@node Defining Packages
2890@section Defining Packages
2891
3dc1970d
LC
2892The high-level interface to package definitions is implemented in the
2893@code{(guix packages)} and @code{(guix build-system)} modules. As an
2894example, the package definition, or @dfn{recipe}, for the GNU Hello
2895package looks like this:
2896
2897@example
e7f34eb0
LC
2898(define-module (gnu packages hello)
2899 #:use-module (guix packages)
2900 #:use-module (guix download)
2901 #:use-module (guix build-system gnu)
a6dcdcac
SB
2902 #:use-module (guix licenses)
2903 #:use-module (gnu packages gawk))
b22a12fd 2904
79f5dd59 2905(define-public hello
3dc1970d
LC
2906 (package
2907 (name "hello")
17d8e33f 2908 (version "2.10")
3dc1970d 2909 (source (origin
17d8e33f
ML
2910 (method url-fetch)
2911 (uri (string-append "mirror://gnu/hello/hello-" version
2912 ".tar.gz"))
2913 (sha256
2914 (base32
2915 "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
3dc1970d 2916 (build-system gnu-build-system)
654c0d97 2917 (arguments '(#:configure-flags '("--enable-silent-rules")))
3dc1970d 2918 (inputs `(("gawk" ,gawk)))
7458bd0a
LC
2919 (synopsis "Hello, GNU world: An example GNU package")
2920 (description "Guess what GNU Hello prints!")
3dc1970d 2921 (home-page "http://www.gnu.org/software/hello/")
b22a12fd 2922 (license gpl3+)))
3dc1970d
LC
2923@end example
2924
2925@noindent
2926Without being a Scheme expert, the reader may have guessed the meaning
f97c9175
AE
2927of the various fields here. This expression binds the variable
2928@code{hello} to a @code{<package>} object, which is essentially a record
3dc1970d
LC
2929(@pxref{SRFI-9, Scheme records,, guile, GNU Guile Reference Manual}).
2930This package object can be inspected using procedures found in the
2931@code{(guix packages)} module; for instance, @code{(package-name hello)}
2932returns---surprise!---@code{"hello"}.
2933
2f7d2d91
LC
2934With luck, you may be able to import part or all of the definition of
2935the package you are interested in from another repository, using the
2936@code{guix import} command (@pxref{Invoking guix import}).
2937
f97c9175 2938In the example above, @var{hello} is defined in a module of its own,
e7f34eb0
LC
2939@code{(gnu packages hello)}. Technically, this is not strictly
2940necessary, but it is convenient to do so: all the packages defined in
2941modules under @code{(gnu packages @dots{})} are automatically known to
2942the command-line tools (@pxref{Package Modules}).
2943
3dc1970d
LC
2944There are a few points worth noting in the above package definition:
2945
2946@itemize
2947@item
a2bf4907
LC
2948The @code{source} field of the package is an @code{<origin>} object
2949(@pxref{origin Reference}, for the complete reference).
3dc1970d
LC
2950Here, the @code{url-fetch} method from @code{(guix download)} is used,
2951meaning that the source is a file to be downloaded over FTP or HTTP.
2952
2953The @code{mirror://gnu} prefix instructs @code{url-fetch} to use one of
2954the GNU mirrors defined in @code{(guix download)}.
2955
2956The @code{sha256} field specifies the expected SHA256 hash of the file
2957being downloaded. It is mandatory, and allows Guix to check the
2958integrity of the file. The @code{(base32 @dots{})} form introduces the
6c365eca 2959base32 representation of the hash. You can obtain this information with
210cc920
LC
2960@code{guix download} (@pxref{Invoking guix download}) and @code{guix
2961hash} (@pxref{Invoking guix hash}).
3dc1970d 2962
f9cc8971
LC
2963@cindex patches
2964When needed, the @code{origin} form can also have a @code{patches} field
2965listing patches to be applied, and a @code{snippet} field giving a
2966Scheme expression to modify the source code.
2967
3dc1970d
LC
2968@item
2969@cindex GNU Build System
7458bd0a
LC
2970The @code{build-system} field specifies the procedure to build the
2971package (@pxref{Build Systems}). Here, @var{gnu-build-system}
2972represents the familiar GNU Build System, where packages may be
2973configured, built, and installed with the usual @code{./configure &&
2974make && make check && make install} command sequence.
2975
2976@item
2977The @code{arguments} field specifies options for the build system
2978(@pxref{Build Systems}). Here it is interpreted by
2979@var{gnu-build-system} as a request run @file{configure} with the
2980@code{--enable-silent-rules} flag.
3dc1970d 2981
654c0d97
LC
2982@cindex quote
2983@cindex quoting
2984@findex '
2985@findex quote
2986What about these quote (@code{'}) characters? They are Scheme syntax to
2987introduce a literal list; @code{'} is synonymous with @code{quote}.
2988@xref{Expression Syntax, quoting,, guile, GNU Guile Reference Manual},
2989for details. Here the value of the @code{arguments} field is a list of
2990arguments passed to the build system down the road, as with @code{apply}
2991(@pxref{Fly Evaluation, @code{apply},, guile, GNU Guile Reference
2992Manual}).
2993
2994The hash-colon (@code{#:}) sequence defines a Scheme @dfn{keyword}
2995(@pxref{Keywords,,, guile, GNU Guile Reference Manual}), and
2996@code{#:configure-flags} is a keyword used to pass a keyword argument
2997to the build system (@pxref{Coding With Keywords,,, guile, GNU Guile
2998Reference Manual}).
2999
3dc1970d
LC
3000@item
3001The @code{inputs} field specifies inputs to the build process---i.e.,
3002build-time or run-time dependencies of the package. Here, we define an
3003input called @code{"gawk"} whose value is that of the @var{gawk}
3004variable; @var{gawk} is itself bound to a @code{<package>} object.
3005
654c0d97
LC
3006@cindex backquote (quasiquote)
3007@findex `
3008@findex quasiquote
3009@cindex comma (unquote)
3010@findex ,
3011@findex unquote
3012@findex ,@@
3013@findex unquote-splicing
3014Again, @code{`} (a backquote, synonymous with @code{quasiquote}) allows
3015us to introduce a literal list in the @code{inputs} field, while
3016@code{,} (a comma, synonymous with @code{unquote}) allows us to insert a
3017value in that list (@pxref{Expression Syntax, unquote,, guile, GNU Guile
3018Reference Manual}).
3019
3dc1970d
LC
3020Note that GCC, Coreutils, Bash, and other essential tools do not need to
3021be specified as inputs here. Instead, @var{gnu-build-system} takes care
7458bd0a 3022of ensuring that they are present (@pxref{Build Systems}).
3dc1970d
LC
3023
3024However, any other dependencies need to be specified in the
3025@code{inputs} field. Any dependency not specified here will simply be
3026unavailable to the build process, possibly leading to a build failure.
3027@end itemize
3028
87eafdbd
TUBK
3029@xref{package Reference}, for a full description of possible fields.
3030
2f7d2d91 3031Once a package definition is in place, the
e49951eb 3032package may actually be built using the @code{guix build} command-line
fc06b15e
AP
3033tool (@pxref{Invoking guix build}), troubleshooting any build failures
3034you encounter (@pxref{Debugging Build Failures}). You can easily jump back to the
39bee8a2
LC
3035package definition using the @command{guix edit} command
3036(@pxref{Invoking guix edit}).
3037@xref{Packaging Guidelines}, for
b4f5e0e8
CR
3038more information on how to test package definitions, and
3039@ref{Invoking guix lint}, for information on how to check a definition
3040for style conformance.
b7ebcfe3
LC
3041@vindex GUIX_PACKAGE_PATH
3042Lastly, @pxref{Package Modules}, for information
3043on how to extend the distribution by adding your own package definitions
3044to @code{GUIX_PACKAGE_PATH}.
b4f5e0e8 3045
f97c9175 3046Finally, updating the package definition to a new upstream version
7458bd0a
LC
3047can be partly automated by the @command{guix refresh} command
3048(@pxref{Invoking guix refresh}).
3dc1970d
LC
3049
3050Behind the scenes, a derivation corresponding to the @code{<package>}
3051object is first computed by the @code{package-derivation} procedure.
834129e0 3052That derivation is stored in a @code{.drv} file under @file{/gnu/store}.
ba55b1cb 3053The build actions it prescribes may then be realized by using the
3dc1970d
LC
3054@code{build-derivations} procedure (@pxref{The Store}).
3055
3056@deffn {Scheme Procedure} package-derivation @var{store} @var{package} [@var{system}]
59688fc4
LC
3057Return the @code{<derivation>} object of @var{package} for @var{system}
3058(@pxref{Derivations}).
3dc1970d
LC
3059
3060@var{package} must be a valid @code{<package>} object, and @var{system}
3061must be a string denoting the target system type---e.g.,
3062@code{"x86_64-linux"} for an x86_64 Linux-based GNU system. @var{store}
3063must be a connection to the daemon, which operates on the store
3064(@pxref{The Store}).
3065@end deffn
568717fd 3066
9c1edabd
LC
3067@noindent
3068@cindex cross-compilation
3069Similarly, it is possible to compute a derivation that cross-builds a
3070package for some other system:
3071
3072@deffn {Scheme Procedure} package-cross-derivation @var{store} @
3073 @var{package} @var{target} [@var{system}]
59688fc4
LC
3074Return the @code{<derivation>} object of @var{package} cross-built from
3075@var{system} to @var{target}.
9c1edabd
LC
3076
3077@var{target} must be a valid GNU triplet denoting the target hardware
3078and operating system, such as @code{"mips64el-linux-gnu"}
3079(@pxref{Configuration Names, GNU configuration triplets,, configure, GNU
3080Configure and Build System}).
3081@end deffn
3082
2a75b0b6
LC
3083@cindex package transformations
3084@cindex input rewriting
3085@cindex dependency tree rewriting
3086Packages can be manipulated in arbitrary ways. An example of a useful
3087transformation is @dfn{input rewriting}, whereby the dependency tree of
3088a package is rewritten by replacing specific inputs by others:
3089
3090@deffn {Scheme Procedure} package-input-rewriting @var{replacements} @
3091 [@var{rewrite-name}]
3092Return a procedure that, when passed a package, replaces its direct and
3093indirect dependencies (but not its implicit inputs) according to
3094@var{replacements}. @var{replacements} is a list of package pairs; the
3095first element of each pair is the package to replace, and the second one
3096is the replacement.
3097
3098Optionally, @var{rewrite-name} is a one-argument procedure that takes
3099the name of a package and returns its new name after rewrite.
3100@end deffn
3101
3102@noindent
3103Consider this example:
3104
3105@example
3106(define libressl-instead-of-openssl
3107 ;; This is a procedure to replace OPENSSL by LIBRESSL,
3108 ;; recursively.
3109 (package-input-rewriting `((,openssl . ,libressl))))
3110
3111(define git-with-libressl
3112 (libressl-instead-of-openssl git))
3113@end example
3114
3115@noindent
3116Here we first define a rewriting procedure that replaces @var{openssl}
3117with @var{libressl}. Then we use it to define a @dfn{variant} of the
3118@var{git} package that uses @var{libressl} instead of @var{openssl}.
3119This is exactly what the @option{--with-input} command-line option does
3120(@pxref{Package Transformation Options, @option{--with-input}}).
3121
f37f2b83
LC
3122A more generic procedure to rewrite a package dependency graph is
3123@code{package-mapping}: it supports arbitrary changes to nodes in the
3124graph.
3125
3126@deffn {Scheme Procedure} package-mapping @var{proc} [@var{cut?}]
3127Return a procedure that, given a package, applies @var{proc} to all the packages
3128depended on and returns the resulting package. The procedure stops recursion
3129when @var{cut?} returns true for a given package.
3130@end deffn
3131
87eafdbd
TUBK
3132@menu
3133* package Reference :: The package data type.
3134* origin Reference:: The origin data type.
3135@end menu
3136
3137
3138@node package Reference
3139@subsection @code{package} Reference
3140
3141This section summarizes all the options available in @code{package}
3142declarations (@pxref{Defining Packages}).
3143
3144@deftp {Data Type} package
3145This is the data type representing a package recipe.
3146
3147@table @asis
3148@item @code{name}
3149The name of the package, as a string.
3150
3151@item @code{version}
3152The version of the package, as a string.
3153
3154@item @code{source}
da675305
LC
3155An object telling how the source code for the package should be
3156acquired. Most of the time, this is an @code{origin} object, which
3157denotes a file fetched from the Internet (@pxref{origin Reference}). It
3158can also be any other ``file-like'' object such as a @code{local-file},
3159which denotes a file from the local file system (@pxref{G-Expressions,
3160@code{local-file}}).
87eafdbd
TUBK
3161
3162@item @code{build-system}
3163The build system that should be used to build the package (@pxref{Build
3164Systems}).
3165
3166@item @code{arguments} (default: @code{'()})
3167The arguments that should be passed to the build system. This is a
3168list, typically containing sequential keyword-value pairs.
3169
3170@item @code{inputs} (default: @code{'()})
70650c68
LC
3171@itemx @code{native-inputs} (default: @code{'()})
3172@itemx @code{propagated-inputs} (default: @code{'()})
3173@cindex inputs, of packages
3174These fields list dependencies of the package. Each one is a list of
3175tuples, where each tuple has a label for the input (a string) as its
3176first element, a package, origin, or derivation as its second element,
3177and optionally the name of the output thereof that should be used, which
3178defaults to @code{"out"} (@pxref{Packages with Multiple Outputs}, for
f97c9175 3179more on package outputs). For example, the list below specifies three
70650c68 3180inputs:
87eafdbd 3181
70650c68
LC
3182@example
3183`(("libffi" ,libffi)
3184 ("libunistring" ,libunistring)
3185 ("glib:bin" ,glib "bin")) ;the "bin" output of Glib
3186@end example
3187
3188@cindex cross compilation, package dependencies
3189The distinction between @code{native-inputs} and @code{inputs} is
3190necessary when considering cross-compilation. When cross-compiling,
3191dependencies listed in @code{inputs} are built for the @emph{target}
3192architecture; conversely, dependencies listed in @code{native-inputs}
3193are built for the architecture of the @emph{build} machine.
3194
f97c9175
AE
3195@code{native-inputs} is typically used to list tools needed at
3196build time, but not at run time, such as Autoconf, Automake, pkg-config,
70650c68
LC
3197Gettext, or Bison. @command{guix lint} can report likely mistakes in
3198this area (@pxref{Invoking guix lint}).
3199
3200@anchor{package-propagated-inputs}
3201Lastly, @code{propagated-inputs} is similar to @code{inputs}, but the
f97c9175
AE
3202specified packages will be automatically installed alongside the package
3203they belong to (@pxref{package-cmd-propagated-inputs, @command{guix
70650c68
LC
3204package}}, for information on how @command{guix package} deals with
3205propagated inputs.)
21461f27 3206
e0508b6b
LC
3207For example this is necessary when a C/C++ library needs headers of
3208another library to compile, or when a pkg-config file refers to another
3209one @i{via} its @code{Requires} field.
3210
f97c9175
AE
3211Another example where @code{propagated-inputs} is useful is for languages
3212that lack a facility to record the run-time search path akin to the
c8ebb4c4 3213@code{RUNPATH} of ELF files; this includes Guile, Python, Perl, and
e0508b6b
LC
3214more. To ensure that libraries written in those languages can find
3215library code they depend on at run time, run-time dependencies must be
3216listed in @code{propagated-inputs} rather than @code{inputs}.
87eafdbd 3217
87eafdbd
TUBK
3218@item @code{self-native-input?} (default: @code{#f})
3219This is a Boolean field telling whether the package should use itself as
3220a native input when cross-compiling.
3221
3222@item @code{outputs} (default: @code{'("out")})
3223The list of output names of the package. @xref{Packages with Multiple
3224Outputs}, for typical uses of additional outputs.
3225
3226@item @code{native-search-paths} (default: @code{'()})
3227@itemx @code{search-paths} (default: @code{'()})
3228A list of @code{search-path-specification} objects describing
3229search-path environment variables honored by the package.
3230
3231@item @code{replacement} (default: @code{#f})
f97c9175 3232This must be either @code{#f} or a package object that will be used as a
87eafdbd
TUBK
3233@dfn{replacement} for this package. @xref{Security Updates, grafts},
3234for details.
3235
3236@item @code{synopsis}
3237A one-line description of the package.
3238
3239@item @code{description}
3240A more elaborate description of the package.
3241
3242@item @code{license}
e32171ee 3243@cindex license, of packages
f97c9175
AE
3244The license of the package; a value from @code{(guix licenses)},
3245or a list of such values.
87eafdbd
TUBK
3246
3247@item @code{home-page}
3248The URL to the home-page of the package, as a string.
3249
3250@item @code{supported-systems} (default: @var{%supported-systems})
3251The list of systems supported by the package, as strings of the form
3252@code{architecture-kernel}, for example @code{"x86_64-linux"}.
3253
3254@item @code{maintainers} (default: @code{'()})
3255The list of maintainers of the package, as @code{maintainer} objects.
3256
3257@item @code{location} (default: source location of the @code{package} form)
f97c9175 3258The source location of the package. It is useful to override this when
87eafdbd
TUBK
3259inheriting from another package, in which case this field is not
3260automatically corrected.
3261@end table
3262@end deftp
3263
3264
3265@node origin Reference
3266@subsection @code{origin} Reference
3267
3268This section summarizes all the options available in @code{origin}
3269declarations (@pxref{Defining Packages}).
3270
3271@deftp {Data Type} origin
3272This is the data type representing a source code origin.
3273
3274@table @asis
3275@item @code{uri}
3276An object containing the URI of the source. The object type depends on
3277the @code{method} (see below). For example, when using the
3278@var{url-fetch} method of @code{(guix download)}, the valid @code{uri}
3279values are: a URL represented as a string, or a list thereof.
3280
3281@item @code{method}
f97c9175 3282A procedure that handles the URI.
87eafdbd
TUBK
3283
3284Examples include:
3285
3286@table @asis
3287@item @var{url-fetch} from @code{(guix download)}
f97c9175 3288download a file from the HTTP, HTTPS, or FTP URL specified in the
87eafdbd
TUBK
3289@code{uri} field;
3290
db97a03a 3291@vindex git-fetch
87eafdbd
TUBK
3292@item @var{git-fetch} from @code{(guix git-download)}
3293clone the Git version control repository, and check out the revision
3294specified in the @code{uri} field as a @code{git-reference} object; a
3295@code{git-reference} looks like this:
3296
3297@example
3298(git-reference
3299 (url "git://git.debian.org/git/pkg-shadow/shadow")
3300 (commit "v4.1.5.1"))
3301@end example
3302@end table
3303
3304@item @code{sha256}
3305A bytevector containing the SHA-256 hash of the source. Typically the
3306@code{base32} form is used here to generate the bytevector from a
3307base-32 string.
3308
db97a03a
LC
3309You can obtain this information using @code{guix download}
3310(@pxref{Invoking guix download}) or @code{guix hash} (@pxref{Invoking
3311guix hash}).
3312
87eafdbd
TUBK
3313@item @code{file-name} (default: @code{#f})
3314The file name under which the source code should be saved. When this is
3315@code{#f}, a sensible default value will be used in most cases. In case
3316the source is fetched from a URL, the file name from the URL will be
f97c9175 3317used. For version control checkouts, it is recommended to provide the
87eafdbd
TUBK
3318file name explicitly because the default is not very descriptive.
3319
3320@item @code{patches} (default: @code{'()})
ec5495ba
LC
3321A list of file names, origins, or file-like objects (@pxref{G-Expressions,
3322file-like objects}) pointing to patches to be applied to the source.
87eafdbd 3323
0dfebdaa
LC
3324This list of patches must be unconditional. In particular, it cannot
3325depend on the value of @code{%current-system} or
3326@code{%current-target-system}.
3327
87eafdbd 3328@item @code{snippet} (default: @code{#f})
1929fdba
LC
3329A G-expression (@pxref{G-Expressions}) or S-expression that will be run
3330in the source directory. This is a convenient way to modify the source,
3331sometimes more convenient than a patch.
87eafdbd
TUBK
3332
3333@item @code{patch-flags} (default: @code{'("-p1")})
3334A list of command-line flags that should be passed to the @code{patch}
3335command.
3336
3337@item @code{patch-inputs} (default: @code{#f})
3338Input packages or derivations to the patching process. When this is
3339@code{#f}, the usual set of inputs necessary for patching are provided,
3340such as GNU@tie{}Patch.
3341
3342@item @code{modules} (default: @code{'()})
3343A list of Guile modules that should be loaded during the patching
3344process and while running the code in the @code{snippet} field.
3345
87eafdbd
TUBK
3346@item @code{patch-guile} (default: @code{#f})
3347The Guile package that should be used in the patching process. When
3348this is @code{#f}, a sensible default is used.
3349@end table
3350@end deftp
3351
9c1edabd 3352
7458bd0a
LC
3353@node Build Systems
3354@section Build Systems
3355
3356@cindex build system
3357Each package definition specifies a @dfn{build system} and arguments for
3358that build system (@pxref{Defining Packages}). This @code{build-system}
f97c9175 3359field represents the build procedure of the package, as well as implicit
7458bd0a
LC
3360dependencies of that build procedure.
3361
3362Build systems are @code{<build-system>} objects. The interface to
3363create and manipulate them is provided by the @code{(guix build-system)}
3364module, and actual build systems are exported by specific modules.
3365
f5fd4fd2 3366@cindex bag (low-level package representation)
0d5a559f
LC
3367Under the hood, build systems first compile package objects to
3368@dfn{bags}. A @dfn{bag} is like a package, but with less
3369ornamentation---in other words, a bag is a lower-level representation of
3370a package, which includes all the inputs of that package, including some
3371that were implicitly added by the build system. This intermediate
3372representation is then compiled to a derivation (@pxref{Derivations}).
3373
7458bd0a
LC
3374Build systems accept an optional list of @dfn{arguments}. In package
3375definitions, these are passed @i{via} the @code{arguments} field
3376(@pxref{Defining Packages}). They are typically keyword arguments
3377(@pxref{Optional Arguments, keyword arguments in Guile,, guile, GNU
3378Guile Reference Manual}). The value of these arguments is usually
3379evaluated in the @dfn{build stratum}---i.e., by a Guile process launched
3380by the daemon (@pxref{Derivations}).
3381
3382The main build system is @var{gnu-build-system}, which implements the
f97c9175 3383standard build procedure for GNU and many other packages. It
7458bd0a
LC
3384is provided by the @code{(guix build-system gnu)} module.
3385
3386@defvr {Scheme Variable} gnu-build-system
3387@var{gnu-build-system} represents the GNU Build System, and variants
3388thereof (@pxref{Configuration, configuration and makefile conventions,,
3389standards, GNU Coding Standards}).
3390
3391@cindex build phases
f97c9175 3392In a nutshell, packages using it are configured, built, and installed with
7458bd0a
LC
3393the usual @code{./configure && make && make check && make install}
3394command sequence. In practice, a few additional steps are often needed.
3395All these steps are split up in separate @dfn{phases},
3396notably@footnote{Please see the @code{(guix build gnu-build-system)}
3397modules for more details about the build phases.}:
3398
3399@table @code
3400@item unpack
3401Unpack the source tarball, and change the current directory to the
3402extracted source tree. If the source is actually a directory, copy it
3403to the build tree, and enter that directory.
3404
3405@item patch-source-shebangs
3406Patch shebangs encountered in source files so they refer to the right
3407store file names. For instance, this changes @code{#!/bin/sh} to
3408@code{#!/gnu/store/@dots{}-bash-4.3/bin/sh}.
3409
3410@item configure
3411Run the @file{configure} script with a number of default options, such
3412as @code{--prefix=/gnu/store/@dots{}}, as well as the options specified
3413by the @code{#:configure-flags} argument.
3414
3415@item build
3416Run @code{make} with the list of flags specified with
0917e80e 3417@code{#:make-flags}. If the @code{#:parallel-build?} argument is true
7458bd0a
LC
3418(the default), build with @code{make -j}.
3419
3420@item check
3421Run @code{make check}, or some other target specified with
3422@code{#:test-target}, unless @code{#:tests? #f} is passed. If the
3423@code{#:parallel-tests?} argument is true (the default), run @code{make
3424check -j}.
3425
3426@item install
3427Run @code{make install} with the flags listed in @code{#:make-flags}.
3428
3429@item patch-shebangs
3430Patch shebangs on the installed executable files.
3431
3432@item strip
3433Strip debugging symbols from ELF files (unless @code{#:strip-binaries?}
3434is false), copying them to the @code{debug} output when available
3435(@pxref{Installing Debugging Files}).
3436@end table
3437
3438@vindex %standard-phases
3439The build-side module @code{(guix build gnu-build-system)} defines
3440@var{%standard-phases} as the default list of build phases.
3441@var{%standard-phases} is a list of symbol/procedure pairs, where the
3442procedure implements the actual phase.
3443
3444The list of phases used for a particular package can be changed with the
3445@code{#:phases} parameter. For instance, passing:
3446
3447@example
c2c5dc79 3448#:phases (modify-phases %standard-phases (delete 'configure))
7458bd0a
LC
3449@end example
3450
9bf404e9 3451means that all the phases described above will be used, except the
7458bd0a
LC
3452@code{configure} phase.
3453
3454In addition, this build system ensures that the ``standard'' environment
3455for GNU packages is available. This includes tools such as GCC, libc,
3456Coreutils, Bash, Make, Diffutils, grep, and sed (see the @code{(guix
f97c9175
AE
3457build-system gnu)} module for a complete list). We call these the
3458@dfn{implicit inputs} of a package, because package definitions do not
7458bd0a
LC
3459have to mention them.
3460@end defvr
3461
3462Other @code{<build-system>} objects are defined to support other
3463conventions and tools used by free software packages. They inherit most
3464of @var{gnu-build-system}, and differ mainly in the set of inputs
3465implicitly added to the build process, and in the list of phases
3466executed. Some of these build systems are listed below.
3467
5f7a1a4d
RW
3468@defvr {Scheme Variable} ant-build-system
3469This variable is exported by @code{(guix build-system ant)}. It
3470implements the build procedure for Java packages that can be built with
3471@url{http://ant.apache.org/, Ant build tool}.
3472
3473It adds both @code{ant} and the @dfn{Java Development Kit} (JDK) as
3474provided by the @code{icedtea} package to the set of inputs. Different
3475packages can be specified with the @code{#:ant} and @code{#:jdk}
3476parameters, respectively.
3477
3478When the original package does not provide a suitable Ant build file,
3479the parameter @code{#:jar-name} can be used to generate a minimal Ant
3480build file @file{build.xml} with tasks to build the specified jar
8df64f73
HG
3481archive. In this case the parameter @code{#:source-dir} can be used to
3482specify the source sub-directory, defaulting to ``src''.
5f7a1a4d 3483
8df1faa0
JL
3484The @code{#:main-class} parameter can be used with the minimal ant
3485buildfile to specify the main class of the resulting jar. This makes the
f403d7ab
JL
3486jar file executable. The @code{#:test-include} parameter can be used to
3487specify the list of junit tests to run. It defaults to
3488@code{(list "**/*Test.java")}. The @code{#:test-exclude} can be used to
3489disable some tests. It defaults to @code{(list "**/Abstract*.java")},
3490because abstract classes cannot be run as tests.
8df1faa0 3491
5f7a1a4d
RW
3492The parameter @code{#:build-target} can be used to specify the Ant task
3493that should be run during the @code{build} phase. By default the
3494``jar'' task will be run.
3495
3496@end defvr
3497
a1b30f99
AP
3498@defvr {Scheme Variable} asdf-build-system/source
3499@defvrx {Scheme Variable} asdf-build-system/sbcl
3500@defvrx {Scheme Variable} asdf-build-system/ecl
3501
3502These variables, exported by @code{(guix build-system asdf)}, implement
3503build procedures for Common Lisp packages using
3504@url{https://common-lisp.net/project/asdf/, ``ASDF''}. ASDF is a system
3505definition facility for Common Lisp programs and libraries.
3506
3507The @code{asdf-build-system/source} system installs the packages in
3508source form, and can be loaded using any common lisp implementation, via
3509ASDF. The others, such as @code{asdf-build-system/sbcl}, install binary
3510systems in the format which a particular implementation understands.
3511These build systems can also be used to produce executable programs, or
3512lisp images which contain a set of packages pre-loaded.
3513
3514The build system uses naming conventions. For binary packages, the
8a3814cd
AP
3515package name should be prefixed with the lisp implementation, such as
3516@code{sbcl-} for @code{asdf-build-system/sbcl}.
a1b30f99
AP
3517
3518Additionally, the corresponding source package should be labeled using
3519the same convention as python packages (see @ref{Python Modules}), using
3520the @code{cl-} prefix.
3521
3522For binary packages, each system should be defined as a Guix package.
3523If one package @code{origin} contains several systems, package variants
3524can be created in order to build all the systems. Source packages,
3525which use @code{asdf-build-system/source}, may contain several systems.
3526
3527In order to create executable programs and images, the build-side
3528procedures @code{build-program} and @code{build-image} can be used.
3529They should be called in a build phase after the @code{create-symlinks}
3530phase, so that the system which was just built can be used within the
3531resulting image. @code{build-program} requires a list of Common Lisp
3532expressions to be passed as the @code{#:entry-program} argument.
3533
3534If the system is not defined within its own @code{.asd} file of the same
3535name, then the @code{#:asd-file} parameter should be used to specify
8a3814cd
AP
3536which file the system is defined in. Furthermore, if the package
3537defines a system for its tests in a separate file, it will be loaded
3538before the tests are run if it is specified by the
3539@code{#:test-asd-file} parameter. If it is not set, the files
3540@code{<system>-tests.asd}, @code{<system>-test.asd}, @code{tests.asd},
3541and @code{test.asd} will be tried if they exist.
3542
3543If for some reason the package must be named in a different way than the
3544naming conventions suggest, the @code{#:asd-system-name} parameter can
3545be used to specify the name of the system.
a1b30f99
AP
3546
3547@end defvr
3548
1ec34dd7
LC
3549@defvr {Scheme Variable} cargo-build-system
3550@cindex Rust programming language
3551@cindex Cargo (Rust build system)
3552This variable is exported by @code{(guix build-system cargo)}. It
3553supports builds of packages using Cargo, the build tool of the
3554@uref{https://www.rust-lang.org, Rust programming language}.
3555
3556In its @code{configure} phase, this build system replaces dependencies
3557specified in the @file{Carto.toml} file with inputs to the Guix package.
3558The @code{install} phase installs the binaries, and it also installs the
3559source code and @file{Cargo.toml} file.
3560@end defvr
3561
7458bd0a
LC
3562@defvr {Scheme Variable} cmake-build-system
3563This variable is exported by @code{(guix build-system cmake)}. It
3564implements the build procedure for packages using the
3565@url{http://www.cmake.org, CMake build tool}.
3566
3567It automatically adds the @code{cmake} package to the set of inputs.
3568Which package is used can be specified with the @code{#:cmake}
3569parameter.
9849cfc1
LC
3570
3571The @code{#:configure-flags} parameter is taken as a list of flags
3572passed to the @command{cmake} command. The @code{#:build-type}
3573parameter specifies in abstract terms the flags passed to the compiler;
3574it defaults to @code{"RelWithDebInfo"} (short for ``release mode with
3575debugging information''), which roughly means that code is compiled with
3576@code{-O2 -g}, as is the case for Autoconf-based packages by default.
7458bd0a
LC
3577@end defvr
3578
3afcf52b
FB
3579@defvr {Scheme Variable} glib-or-gtk-build-system
3580This variable is exported by @code{(guix build-system glib-or-gtk)}. It
3581is intended for use with packages making use of GLib or GTK+.
3582
3583This build system adds the following two phases to the ones defined by
3584@var{gnu-build-system}:
3585
3586@table @code
3587@item glib-or-gtk-wrap
f97c9175
AE
3588The phase @code{glib-or-gtk-wrap} ensures that programs in
3589@file{bin/} are able to find GLib ``schemas'' and
3afcf52b
FB
3590@uref{https://developer.gnome.org/gtk3/stable/gtk-running.html, GTK+
3591modules}. This is achieved by wrapping the programs in launch scripts
3592that appropriately set the @code{XDG_DATA_DIRS} and @code{GTK_PATH}
3593environment variables.
3594
73aa8ddb
LC
3595It is possible to exclude specific package outputs from that wrapping
3596process by listing their names in the
3597@code{#:glib-or-gtk-wrap-excluded-outputs} parameter. This is useful
3598when an output is known not to contain any GLib or GTK+ binaries, and
3599where wrapping would gratuitously add a dependency of that output on
3600GLib and GTK+.
3601
3afcf52b 3602@item glib-or-gtk-compile-schemas
f97c9175 3603The phase @code{glib-or-gtk-compile-schemas} makes sure that all
3afcf52b 3604@uref{https://developer.gnome.org/gio/stable/glib-compile-schemas.html,
f97c9175 3605GSettings schemas} of GLib are compiled. Compilation is performed by the
3afcf52b
FB
3606@command{glib-compile-schemas} program. It is provided by the package
3607@code{glib:bin} which is automatically imported by the build system.
3608The @code{glib} package providing @command{glib-compile-schemas} can be
3609specified with the @code{#:glib} parameter.
3610@end table
3611
3612Both phases are executed after the @code{install} phase.
3613@end defvr
3614
88c8f247
RW
3615@defvr {Scheme Variable} minify-build-system
3616This variable is exported by @code{(guix build-system minify)}. It
3617implements a minification procedure for simple JavaScript packages.
3618
3619It adds @code{uglify-js} to the set of inputs and uses it to compress
3620all JavaScript files in the @file{src} directory. A different minifier
3621package can be specified with the @code{#:uglify-js} parameter, but it
3622is expected that the package writes the minified code to the standard
3623output.
3624
3625When the input JavaScript files are not all located in the @file{src}
3626directory, the parameter @code{#:javascript-files} can be used to
3627specify a list of file names to feed to the minifier.
3628@end defvr
3629
3184f14a 3630@defvr {Scheme Variable} ocaml-build-system
9fc221b5 3631This variable is exported by @code{(guix build-system ocaml)}. It implements
3184f14a
JL
3632a build procedure for @uref{https://ocaml.org, OCaml} packages, which consists
3633of choosing the correct set of commands to run for each package. OCaml
3634packages can expect many different commands to be run. This build system will
3635try some of them.
3636
3637When the package has a @file{setup.ml} file present at the top-level, it will
3638run @code{ocaml setup.ml -configure}, @code{ocaml setup.ml -build} and
3639@code{ocaml setup.ml -install}. The build system will assume that this file
3640was generated by @uref{http://oasis.forge.ocamlcore.org/, OASIS} and will take
3641care of setting the prefix and enabling tests if they are not disabled. You
3642can pass configure and build flags with the @code{#:configure-flags} and
3643@code{#:build-flags}. The @code{#:test-flags} key can be passed to change the
3644set of flags used to enable tests. The @code{#:use-make?} key can be used to
3645bypass this system in the build and install phases.
3646
3647When the package has a @file{configure} file, it is assumed that it is a
3648hand-made configure script that requires a different argument format than
3649in the @code{gnu-build-system}. You can add more flags with the
3650@code{#:configure-flags} key.
3651
3652When the package has a @file{Makefile} file (or @code{#:use-make?} is
3653@code{#t}), it will be used and more flags can be passed to the build and
3654install phases with the @code{#:make-flags} key.
3655
3656Finally, some packages do not have these files and use a somewhat standard
3657location for its build system. In that case, the build system will run
3658@code{ocaml pkg/pkg.ml} or @code{ocaml pkg/build.ml} and take care of
3659providing the path to the required findlib module. Additional flags can
3660be passed via the @code{#:build-flags} key. Install is taken care of by
3661@command{opam-installer}. In this case, the @code{opam} package must
3662be added to the @code{native-inputs} field of the package definition.
3663
3664Note that most OCaml packages assume they will be installed in the same
88ba7852 3665directory as OCaml, which is not what we want in guix. In particular, they
3184f14a 3666will install @file{.so} files in their module's directory, which is usually
88ba7852 3667fine because it is in the OCaml compiler directory. In guix though, these
3184f14a
JL
3668libraries cannot be found and we use @code{CAML_LD_LIBRARY_PATH}. This
3669variable points to @file{lib/ocaml/site-lib/stubslibs} and this is where
3670@file{.so} libraries should be installed.
3671@end defvr
3672
7458bd0a
LC
3673@defvr {Scheme Variable} python-build-system
3674This variable is exported by @code{(guix build-system python)}. It
3675implements the more or less standard build procedure used by Python
3676packages, which consists in running @code{python setup.py build} and
3677then @code{python setup.py install --prefix=/gnu/store/@dots{}}.
3678
3679For packages that install stand-alone Python programs under @code{bin/},
f97c9175 3680it takes care of wrapping these programs so that their @code{PYTHONPATH}
7458bd0a
LC
3681environment variable points to all the Python libraries they depend on.
3682
8a46205b
CM
3683Which Python package is used to perform the build can be specified with
3684the @code{#:python} parameter. This is a useful way to force a package
3685to be built for a specific version of the Python interpreter, which
3686might be necessary if the package is only compatible with a single
3687interpreter version.
5f7565d1
HG
3688
3689By default guix calls @code{setup.py} under control of
3690@code{setuptools}, much like @command{pip} does. Some packages are not
3691compatible with setuptools (and pip), thus you can disable this by
3692setting the @code{#:use-setuptools} parameter to @code{#f}.
7458bd0a
LC
3693@end defvr
3694
3695@defvr {Scheme Variable} perl-build-system
3696This variable is exported by @code{(guix build-system perl)}. It
2d2a53fc
EB
3697implements the standard build procedure for Perl packages, which either
3698consists in running @code{perl Build.PL --prefix=/gnu/store/@dots{}},
3699followed by @code{Build} and @code{Build install}; or in running
3700@code{perl Makefile.PL PREFIX=/gnu/store/@dots{}}, followed by
f97c9175 3701@code{make} and @code{make install}, depending on which of
2d2a53fc
EB
3702@code{Build.PL} or @code{Makefile.PL} is present in the package
3703distribution. Preference is given to the former if both @code{Build.PL}
3704and @code{Makefile.PL} exist in the package distribution. This
3705preference can be reversed by specifying @code{#t} for the
3706@code{#:make-maker?} parameter.
3707
3708The initial @code{perl Makefile.PL} or @code{perl Build.PL} invocation
3709passes flags specified by the @code{#:make-maker-flags} or
3710@code{#:module-build-flags} parameter, respectively.
7458bd0a
LC
3711
3712Which Perl package is used can be specified with @code{#:perl}.
3713@end defvr
3714
f8f3bef6
RW
3715@defvr {Scheme Variable} r-build-system
3716This variable is exported by @code{(guix build-system r)}. It
3717implements the build procedure used by @uref{http://r-project.org, R}
3718packages, which essentially is little more than running @code{R CMD
3719INSTALL --library=/gnu/store/@dots{}} in an environment where
3720@code{R_LIBS_SITE} contains the paths to all R package inputs. Tests
3721are run after installation using the R function
3722@code{tools::testInstalledPackage}.
3723@end defvr
3724
205794c8
RW
3725@defvr {Scheme Variable} texlive-build-system
3726This variable is exported by @code{(guix build-system texlive)}. It is
3727used to build TeX packages in batch mode with a specified engine. The
3728build system sets the @code{TEXINPUTS} variable to find all TeX source
3729files in the inputs.
3730
3731By default it runs @code{luatex} on all files ending on @code{ins}. A
3732different engine and format can be specified with the
3733@code{#:tex-format} argument. Different build targets can be specified
3734with the @code{#:build-targets} argument, which expects a list of file
3735names. The build system adds only @code{texlive-bin} and
3736@code{texlive-latex-base} (both from @code{(gnu packages tex}) to the
3737inputs. Both can be overridden with the arguments @code{#:texlive-bin}
3738and @code{#:texlive-latex-base}, respectively.
3739
3740The @code{#:tex-directory} parameter tells the build system where to
3741install the built files under the texmf tree.
3742@end defvr
3743
c08f9818
DT
3744@defvr {Scheme Variable} ruby-build-system
3745This variable is exported by @code{(guix build-system ruby)}. It
3746implements the RubyGems build procedure used by Ruby packages, which
3747involves running @code{gem build} followed by @code{gem install}.
3748
5dc87623
DT
3749The @code{source} field of a package that uses this build system
3750typically references a gem archive, since this is the format that Ruby
3751developers use when releasing their software. The build system unpacks
3752the gem archive, potentially patches the source, runs the test suite,
3753repackages the gem, and installs it. Additionally, directories and
3754tarballs may be referenced to allow building unreleased gems from Git or
3755a traditional source release tarball.
e83c6d00 3756
c08f9818 3757Which Ruby package is used can be specified with the @code{#:ruby}
6e9f2913
PP
3758parameter. A list of additional flags to be passed to the @command{gem}
3759command can be specified with the @code{#:gem-flags} parameter.
c08f9818 3760@end defvr
7458bd0a 3761
a677c726
RW
3762@defvr {Scheme Variable} waf-build-system
3763This variable is exported by @code{(guix build-system waf)}. It
3764implements a build procedure around the @code{waf} script. The common
3765phases---@code{configure}, @code{build}, and @code{install}---are
3766implemented by passing their names as arguments to the @code{waf}
3767script.
3768
3769The @code{waf} script is executed by the Python interpreter. Which
3770Python package is used to run the script can be specified with the
3771@code{#:python} parameter.
3772@end defvr
3773
14dfdf2e
FB
3774@defvr {Scheme Variable} haskell-build-system
3775This variable is exported by @code{(guix build-system haskell)}. It
3776implements the Cabal build procedure used by Haskell packages, which
3777involves running @code{runhaskell Setup.hs configure
3778--prefix=/gnu/store/@dots{}} and @code{runhaskell Setup.hs build}.
3779Instead of installing the package by running @code{runhaskell Setup.hs
3780install}, to avoid trying to register libraries in the read-only
3781compiler store directory, the build system uses @code{runhaskell
3782Setup.hs copy}, followed by @code{runhaskell Setup.hs register}. In
3783addition, the build system generates the package documentation by
3784running @code{runhaskell Setup.hs haddock}, unless @code{#:haddock? #f}
3785is passed. Optional Haddock parameters can be passed with the help of
3786the @code{#:haddock-flags} parameter. If the file @code{Setup.hs} is
3787not found, the build system looks for @code{Setup.lhs} instead.
3788
3789Which Haskell compiler is used can be specified with the @code{#:haskell}
a54bd6d7 3790parameter which defaults to @code{ghc}.
14dfdf2e
FB
3791@end defvr
3792
65e862d1
DM
3793@defvr {Scheme Variable} dub-build-system
3794This variable is exported by @code{(guix build-system dub)}. It
3795implements the Dub build procedure used by D packages, which
3796involves running @code{dub build} and @code{dub run}.
3797Installation is done by copying the files manually.
3798
3799Which D compiler is used can be specified with the @code{#:ldc}
3800parameter which defaults to @code{ldc}.
3801@end defvr
3802
e9137a53
FB
3803@defvr {Scheme Variable} emacs-build-system
3804This variable is exported by @code{(guix build-system emacs)}. It
f97c9175
AE
3805implements an installation procedure similar to the packaging system
3806of Emacs itself (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
e9137a53
FB
3807
3808It first creates the @code{@var{package}-autoloads.el} file, then it
3809byte compiles all Emacs Lisp files. Differently from the Emacs
3810packaging system, the Info documentation files are moved to the standard
3811documentation directory and the @file{dir} file is deleted. Each
3812package is installed in its own directory under
3813@file{share/emacs/site-lisp/guix.d}.
3814@end defvr
3815
3d90fa98
AI
3816@defvr {Scheme Variable} font-build-system
3817This variable is exported by @code{(guix build-system font)}. It
3818implements an installation procedure for font packages where upstream
3819provides pre-compiled TrueType, OpenType, etc. font files that merely
3820need to be copied into place. It copies font files to standard
3821locations in the output directory.
3822@end defvr
3823
07c101e2
PM
3824@defvr {Scheme Variable} meson-build-system
3825This variable is exported by @code{(guix build-system meson)}. It
3826implements the build procedure for packages that use
3827@url{http://mesonbuild.com, Meson} as their build system.
3828
3829It adds both Meson and @uref{https://ninja-build.org/, Ninja} to the set
3830of inputs, and they can be changed with the parameters @code{#:meson}
3831and @code{#:ninja} if needed. The default Meson is
3832@code{meson-for-build}, which is special because it doesn't clear the
3833@code{RUNPATH} of binaries and libraries when they are installed.
3834
3835This build system is an extension of @var{gnu-build-system}, but with the
3836following phases changed to some specific for Meson:
3837
3838@table @code
3839
3840@item configure
3841The phase runs @code{meson} with the flags specified in
3842@code{#:configure-flags}. The flag @code{--build-type} is always set to
3843@code{plain} unless something else is specified in @code{#:build-type}.
3844
3845@item build
3846The phase runs @code{ninja} to build the package in parallel by default, but
3847this can be changed with @code{#:parallel-build?}.
3848
3849@item check
3850The phase runs @code{ninja} with the target specified in @code{#:test-target},
3851which is @code{"test"} by default.
3852
3853@item install
3854The phase runs @code{ninja install} and can not be changed.
3855@end table
3856
3857Apart from that, the build system also adds the following phases:
3858
3859@table @code
3860
3861@item fix-runpath
3862This phase tries to locate the local directories in the package being build,
3863which has libraries that some of the binaries need. If any are found, they will
3864be added to the programs @code{RUNPATH}. It is needed because
3865@code{meson-for-build} keeps the @code{RUNPATH} of binaries and libraries from
3866when they are build, but often that is not the @code{RUNPATH} we want.
3867Therefor it is also shrinked to the minimum needed by the program.
3868
3869@item glib-or-gtk-wrap
3870This phase is the phase provided by @code{glib-or-gtk-build-system}, and it
3871is not enabled by default. It can be enabled with @code{#:glib-or-gtk?}.
3872
3873@item glib-or-gtk-compile-schemas
3874This phase is the phase provided by @code{glib-or-gtk-build-system}, and it
3875is not enabled by default. It can be enabled with @code{#:glib-or-gtk?}.
3876@end table
3877@end defvr
3878
7458bd0a
LC
3879Lastly, for packages that do not need anything as sophisticated, a
3880``trivial'' build system is provided. It is trivial in the sense that
3881it provides basically no support: it does not pull any implicit inputs,
3882and does not have a notion of build phases.
3883
3884@defvr {Scheme Variable} trivial-build-system
3885This variable is exported by @code{(guix build-system trivial)}.
3886
3887This build system requires a @code{#:builder} argument. This argument
f97c9175 3888must be a Scheme expression that builds the package output(s)---as
7458bd0a
LC
3889with @code{build-expression->derivation} (@pxref{Derivations,
3890@code{build-expression->derivation}}).
3891@end defvr
3892
568717fd
LC
3893@node The Store
3894@section The Store
3895
e531ac2a 3896@cindex store
1ddee424 3897@cindex store items
e531ac2a
LC
3898@cindex store paths
3899
f97c9175
AE
3900Conceptually, the @dfn{store} is the place where derivations that have
3901been built successfully are stored---by default, @file{/gnu/store}.
1ddee424
LC
3902Sub-directories in the store are referred to as @dfn{store items} or
3903sometimes @dfn{store paths}. The store has an associated database that
3904contains information such as the store paths referred to by each store
3905path, and the list of @emph{valid} store items---results of successful
ef5f5c86
LC
3906builds. This database resides in @file{@var{localstatedir}/guix/db},
3907where @var{localstatedir} is the state directory specified @i{via}
3908@option{--localstatedir} at configure time, usually @file{/var}.
1ddee424
LC
3909
3910The store is @emph{always} accessed by the daemon on behalf of its clients
e531ac2a 3911(@pxref{Invoking guix-daemon}). To manipulate the store, clients
f97c9175
AE
3912connect to the daemon over a Unix-domain socket, send requests to it,
3913and read the result---these are remote procedure calls, or RPCs.
e531ac2a 3914
1ddee424
LC
3915@quotation Note
3916Users must @emph{never} modify files under @file{/gnu/store} directly.
3917This would lead to inconsistencies and break the immutability
3918assumptions of Guix's functional model (@pxref{Introduction}).
3919
3920@xref{Invoking guix gc, @command{guix gc --verify}}, for information on
3921how to check the integrity of the store and attempt recovery from
3922accidental modifications.
3923@end quotation
3924
e531ac2a 3925The @code{(guix store)} module provides procedures to connect to the
1397b422
LC
3926daemon, and to perform RPCs. These are described below. By default,
3927@code{open-connection}, and thus all the @command{guix} commands,
3928connect to the local daemon or to the URI specified by the
3929@code{GUIX_DAEMON_SOCKET} environment variable.
e531ac2a 3930
1397b422
LC
3931@defvr {Environment Variable} GUIX_DAEMON_SOCKET
3932When set, the value of this variable should be a file name or a URI
3933designating the daemon endpoint. When it is a file name, it denotes a
3934Unix-domain socket to connect to. In addition to file names, the
3935supported URI schemes are:
3936
3937@table @code
3938@item file
3939@itemx unix
3940These are for Unix-domain sockets.
3941@code{file:///var/guix/daemon-socket/socket} is equivalent to
3942@file{/var/guix/daemon-socket/socket}.
3dff90ce
LC
3943
3944@item guix
1071f781
LC
3945@cindex daemon, remote access
3946@cindex remote access to the daemon
3947@cindex daemon, cluster setup
3948@cindex clusters, daemon setup
3dff90ce 3949These URIs denote connections over TCP/IP, without encryption nor
5df1395a
LC
3950authentication of the remote host. The URI must specify the host name
3951and optionally a port number (by default port 44146 is used):
3dff90ce
LC
3952
3953@example
3954guix://master.guix.example.org:1234
3955@end example
3956
3957This setup is suitable on local networks, such as clusters, where only
3958trusted nodes may connect to the build daemon at
3959@code{master.guix.example.org}.
285f63e8 3960
1071f781
LC
3961The @code{--listen} option of @command{guix-daemon} can be used to
3962instruct it to listen for TCP connections (@pxref{Invoking guix-daemon,
3963@code{--listen}}).
3964
285f63e8
LC
3965@item ssh
3966@cindex SSH access to build daemons
3967These URIs allow you to connect to a remote daemon over
3968SSH@footnote{This feature requires Guile-SSH (@pxref{Requirements}).}.
3969A typical URL might look like this:
3970
3971@example
3972ssh://charlie@@guix.example.org:22
3973@end example
3974
3975As for @command{guix copy}, the usual OpenSSH client configuration files
3976are honored (@pxref{Invoking guix copy}).
1397b422
LC
3977@end table
3978
3979Additional URI schemes may be supported in the future.
285f63e8
LC
3980
3981@c XXX: Remove this note when the protocol incurs fewer round trips
3982@c and when (guix derivations) no longer relies on file system access.
3983@quotation Note
3984The ability to connect to remote build daemons is considered
3985experimental as of @value{VERSION}. Please get in touch with us to
3986share any problems or suggestions you may have (@pxref{Contributing}).
3987@end quotation
1397b422
LC
3988@end defvr
3989
3990@deffn {Scheme Procedure} open-connection [@var{uri}] [#:reserve-space? #t]
3991Connect to the daemon over the Unix-domain socket at @var{uri} (a string). When
e531ac2a
LC
3992@var{reserve-space?} is true, instruct it to reserve a little bit of
3993extra space on the file system so that the garbage collector can still
f97c9175 3994operate should the disk become full. Return a server object.
e531ac2a
LC
3995
3996@var{file} defaults to @var{%default-socket-path}, which is the normal
3997location given the options that were passed to @command{configure}.
3998@end deffn
3999
4000@deffn {Scheme Procedure} close-connection @var{server}
4001Close the connection to @var{server}.
4002@end deffn
4003
4004@defvr {Scheme Variable} current-build-output-port
4005This variable is bound to a SRFI-39 parameter, which refers to the port
4006where build and error logs sent by the daemon should be written.
4007@end defvr
4008
4009Procedures that make RPCs all take a server object as their first
4010argument.
4011
4012@deffn {Scheme Procedure} valid-path? @var{server} @var{path}
06b76acc
LC
4013@cindex invalid store items
4014Return @code{#t} when @var{path} designates a valid store item and
4015@code{#f} otherwise (an invalid item may exist on disk but still be
4016invalid, for instance because it is the result of an aborted or failed
4017build.)
4018
4019A @code{&nix-protocol-error} condition is raised if @var{path} is not
4020prefixed by the store directory (@file{/gnu/store}).
e531ac2a
LC
4021@end deffn
4022
cfbf9160 4023@deffn {Scheme Procedure} add-text-to-store @var{server} @var{name} @var{text} [@var{references}]
e531ac2a
LC
4024Add @var{text} under file @var{name} in the store, and return its store
4025path. @var{references} is the list of store paths referred to by the
4026resulting store path.
4027@end deffn
4028
874e6874 4029@deffn {Scheme Procedure} build-derivations @var{server} @var{derivations}
59688fc4
LC
4030Build @var{derivations} (a list of @code{<derivation>} objects or
4031derivation paths), and return when the worker is done building them.
4032Return @code{#t} on success.
874e6874
LC
4033@end deffn
4034
b860f382
LC
4035Note that the @code{(guix monads)} module provides a monad as well as
4036monadic versions of the above procedures, with the goal of making it
4037more convenient to work with code that accesses the store (@pxref{The
4038Store Monad}).
4039
e531ac2a
LC
4040@c FIXME
4041@i{This section is currently incomplete.}
568717fd
LC
4042
4043@node Derivations
4044@section Derivations
4045
874e6874
LC
4046@cindex derivations
4047Low-level build actions and the environment in which they are performed
70458ed5 4048are represented by @dfn{derivations}. A derivation contains the
874e6874
LC
4049following pieces of information:
4050
4051@itemize
4052@item
4053The outputs of the derivation---derivations produce at least one file or
4054directory in the store, but may produce more.
4055
4056@item
4057The inputs of the derivations, which may be other derivations or plain
4058files in the store (patches, build scripts, etc.)
4059
4060@item
4061The system type targeted by the derivation---e.g., @code{x86_64-linux}.
4062
4063@item
4064The file name of a build script in the store, along with the arguments
4065to be passed.
4066
4067@item
4068A list of environment variables to be defined.
4069
4070@end itemize
4071
4072@cindex derivation path
4073Derivations allow clients of the daemon to communicate build actions to
4074the store. They exist in two forms: as an in-memory representation,
4075both on the client- and daemon-side, and as files in the store whose
4076name end in @code{.drv}---these files are referred to as @dfn{derivation
4077paths}. Derivations paths can be passed to the @code{build-derivations}
4078procedure to perform the build actions they prescribe (@pxref{The
4079Store}).
4080
4081The @code{(guix derivations)} module provides a representation of
4082derivations as Scheme objects, along with procedures to create and
4083otherwise manipulate derivations. The lowest-level primitive to create
4084a derivation is the @code{derivation} procedure:
4085
1909431c
LC
4086@deffn {Scheme Procedure} derivation @var{store} @var{name} @var{builder} @
4087 @var{args} [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
2096ef47 4088 [#:recursive? #f] [#:inputs '()] [#:env-vars '()] @
1909431c 4089 [#:system (%current-system)] [#:references-graphs #f] @
35b5ca78
LC
4090 [#:allowed-references #f] [#:disallowed-references #f] @
4091 [#:leaked-env-vars #f] [#:local-build? #f] @
4a6aeb67 4092 [#:substitutable? #t]
59688fc4
LC
4093Build a derivation with the given arguments, and return the resulting
4094@code{<derivation>} object.
874e6874 4095
2096ef47 4096When @var{hash} and @var{hash-algo} are given, a
874e6874 4097@dfn{fixed-output derivation} is created---i.e., one whose result is
36bbbbd1
LC
4098known in advance, such as a file download. If, in addition,
4099@var{recursive?} is true, then that fixed output may be an executable
4100file or a directory and @var{hash} must be the hash of an archive
4101containing this output.
5b0c9d16 4102
858e9282 4103When @var{references-graphs} is true, it must be a list of file
5b0c9d16
LC
4104name/store path pairs. In that case, the reference graph of each store
4105path is exported in the build environment in the corresponding file, in
4106a simple text format.
1909431c 4107
b53be755 4108When @var{allowed-references} is true, it must be a list of store items
35b5ca78
LC
4109or outputs that the derivation's output may refer to. Likewise,
4110@var{disallowed-references}, if true, must be a list of things the
4111outputs may @emph{not} refer to.
b53be755 4112
c0468155
LC
4113When @var{leaked-env-vars} is true, it must be a list of strings
4114denoting environment variables that are allowed to ``leak'' from the
4115daemon's environment to the build environment. This is only applicable
4116to fixed-output derivations---i.e., when @var{hash} is true. The main
4117use is to allow variables such as @code{http_proxy} to be passed to
4118derivations that download files.
4119
1909431c
LC
4120When @var{local-build?} is true, declare that the derivation is not a
4121good candidate for offloading and should rather be built locally
4122(@pxref{Daemon Offload Setup}). This is the case for small derivations
4123where the costs of data transfers would outweigh the benefits.
4a6aeb67
LC
4124
4125When @var{substitutable?} is false, declare that substitutes of the
4126derivation's output should not be used (@pxref{Substitutes}). This is
4127useful, for instance, when building packages that capture details of the
4128host CPU instruction set.
874e6874
LC
4129@end deffn
4130
4131@noindent
4132Here's an example with a shell script as its builder, assuming
4133@var{store} is an open connection to the daemon, and @var{bash} points
4134to a Bash executable in the store:
4135
4136@lisp
4137(use-modules (guix utils)
4138 (guix store)
4139 (guix derivations))
4140
59688fc4
LC
4141(let ((builder ; add the Bash script to the store
4142 (add-text-to-store store "my-builder.sh"
4143 "echo hello world > $out\n" '())))
4144 (derivation store "foo"
4145 bash `("-e" ,builder)
21b679f6 4146 #:inputs `((,bash) (,builder))
59688fc4 4147 #:env-vars '(("HOME" . "/homeless"))))
834129e0 4148@result{} #<derivation /gnu/store/@dots{}-foo.drv => /gnu/store/@dots{}-foo>
874e6874
LC
4149@end lisp
4150
21b679f6
LC
4151As can be guessed, this primitive is cumbersome to use directly. A
4152better approach is to write build scripts in Scheme, of course! The
4153best course of action for that is to write the build code as a
4154``G-expression'', and to pass it to @code{gexp->derivation}. For more
6621cdb6 4155information, @pxref{G-Expressions}.
21b679f6 4156
f2fadbc1
AE
4157Once upon a time, @code{gexp->derivation} did not exist and constructing
4158derivations with build code written in Scheme was achieved with
4159@code{build-expression->derivation}, documented below. This procedure
4160is now deprecated in favor of the much nicer @code{gexp->derivation}.
4161
4162@deffn {Scheme Procedure} build-expression->derivation @var{store} @
4163 @var{name} @var{exp} @
4164 [#:system (%current-system)] [#:inputs '()] @
4165 [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
4166 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
4167 [#:references-graphs #f] [#:allowed-references #f] @
35b5ca78 4168 [#:disallowed-references #f] @
f2fadbc1
AE
4169 [#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
4170Return a derivation that executes Scheme expression @var{exp} as a
4171builder for derivation @var{name}. @var{inputs} must be a list of
4172@code{(name drv-path sub-drv)} tuples; when @var{sub-drv} is omitted,
4173@code{"out"} is assumed. @var{modules} is a list of names of Guile
4174modules from the current search path to be copied in the store,
4175compiled, and made available in the load path during the execution of
4176@var{exp}---e.g., @code{((guix build utils) (guix build
4177gnu-build-system))}.
4178
4179@var{exp} is evaluated in an environment where @code{%outputs} is bound
4180to a list of output/path pairs, and where @code{%build-inputs} is bound
4181to a list of string/output-path pairs made from @var{inputs}.
4182Optionally, @var{env-vars} is a list of string pairs specifying the name
4183and value of environment variables visible to the builder. The builder
4184terminates by passing the result of @var{exp} to @code{exit}; thus, when
4185@var{exp} returns @code{#f}, the build is considered to have failed.
4186
4187@var{exp} is built using @var{guile-for-build} (a derivation). When
4188@var{guile-for-build} is omitted or is @code{#f}, the value of the
4189@code{%guile-for-build} fluid is used instead.
4190
4191See the @code{derivation} procedure for the meaning of
35b5ca78
LC
4192@var{references-graphs}, @var{allowed-references},
4193@var{disallowed-references}, @var{local-build?}, and
4194@var{substitutable?}.
f2fadbc1
AE
4195@end deffn
4196
4197@noindent
4198Here's an example of a single-output derivation that creates a directory
4199containing one file:
4200
4201@lisp
4202(let ((builder '(let ((out (assoc-ref %outputs "out")))
4203 (mkdir out) ; create /gnu/store/@dots{}-goo
4204 (call-with-output-file (string-append out "/test")
4205 (lambda (p)
4206 (display '(hello guix) p))))))
4207 (build-expression->derivation store "goo" builder))
4208
4209@result{} #<derivation /gnu/store/@dots{}-goo.drv => @dots{}>
4210@end lisp
4211
568717fd 4212
b860f382
LC
4213@node The Store Monad
4214@section The Store Monad
4215
4216@cindex monad
4217
4218The procedures that operate on the store described in the previous
4219sections all take an open connection to the build daemon as their first
4220argument. Although the underlying model is functional, they either have
4221side effects or depend on the current state of the store.
4222
4223The former is inconvenient: the connection to the build daemon has to be
4224carried around in all those functions, making it impossible to compose
4225functions that do not take that parameter with functions that do. The
4226latter can be problematic: since store operations have side effects
4227and/or depend on external state, they have to be properly sequenced.
4228
4229@cindex monadic values
4230@cindex monadic functions
4231This is where the @code{(guix monads)} module comes in. This module
4232provides a framework for working with @dfn{monads}, and a particularly
4233useful monad for our uses, the @dfn{store monad}. Monads are a
4234construct that allows two things: associating ``context'' with values
4235(in our case, the context is the store), and building sequences of
4827b36d 4236computations (here computations include accesses to the store). Values
b860f382
LC
4237in a monad---values that carry this additional context---are called
4238@dfn{monadic values}; procedures that return such values are called
4239@dfn{monadic procedures}.
4240
4241Consider this ``normal'' procedure:
4242
4243@example
45adbd62
LC
4244(define (sh-symlink store)
4245 ;; Return a derivation that symlinks the 'bash' executable.
4246 (let* ((drv (package-derivation store bash))
4247 (out (derivation->output-path drv))
4248 (sh (string-append out "/bin/bash")))
4249 (build-expression->derivation store "sh"
4250 `(symlink ,sh %output))))
b860f382
LC
4251@end example
4252
c6f30b81
LC
4253Using @code{(guix monads)} and @code{(guix gexp)}, it may be rewritten
4254as a monadic function:
b860f382
LC
4255
4256@example
45adbd62 4257(define (sh-symlink)
b860f382 4258 ;; Same, but return a monadic value.
c6f30b81
LC
4259 (mlet %store-monad ((drv (package->derivation bash)))
4260 (gexp->derivation "sh"
4261 #~(symlink (string-append #$drv "/bin/bash")
4262 #$output))))
b860f382
LC
4263@end example
4264
4827b36d 4265There are several things to note in the second version: the @code{store}
c6f30b81
LC
4266parameter is now implicit and is ``threaded'' in the calls to the
4267@code{package->derivation} and @code{gexp->derivation} monadic
4268procedures, and the monadic value returned by @code{package->derivation}
4269is @dfn{bound} using @code{mlet} instead of plain @code{let}.
4270
4271As it turns out, the call to @code{package->derivation} can even be
4272omitted since it will take place implicitly, as we will see later
4273(@pxref{G-Expressions}):
4274
4275@example
4276(define (sh-symlink)
4277 (gexp->derivation "sh"
4278 #~(symlink (string-append #$bash "/bin/bash")
4279 #$output)))
4280@end example
b860f382 4281
7ce21611 4282@c See
a01ad638 4283@c <https://syntaxexclamation.wordpress.com/2014/06/26/escaping-continuations/>
7ce21611
LC
4284@c for the funny quote.
4285Calling the monadic @code{sh-symlink} has no effect. As someone once
4286said, ``you exit a monad like you exit a building on fire: by running''.
4287So, to exit the monad and get the desired effect, one must use
4288@code{run-with-store}:
b860f382
LC
4289
4290@example
8e9aa37f
CAW
4291(run-with-store (open-connection) (sh-symlink))
4292@result{} /gnu/store/...-sh-symlink
b860f382
LC
4293@end example
4294
f97c9175 4295Note that the @code{(guix monad-repl)} module extends the Guile REPL with
b9b86078 4296new ``meta-commands'' to make it easier to deal with monadic procedures:
f97c9175 4297@code{run-in-store}, and @code{enter-store-monad}. The former is used
b9b86078
LC
4298to ``run'' a single monadic value through the store:
4299
4300@example
4301scheme@@(guile-user)> ,run-in-store (package->derivation hello)
4302$1 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
4303@end example
4304
4305The latter enters a recursive REPL, where all the return values are
4306automatically run through the store:
4307
4308@example
4309scheme@@(guile-user)> ,enter-store-monad
4310store-monad@@(guile-user) [1]> (package->derivation hello)
4311$2 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
4312store-monad@@(guile-user) [1]> (text-file "foo" "Hello!")
4313$3 = "/gnu/store/@dots{}-foo"
4314store-monad@@(guile-user) [1]> ,q
4315scheme@@(guile-user)>
4316@end example
4317
4318@noindent
4319Note that non-monadic values cannot be returned in the
4320@code{store-monad} REPL.
4321
e87f0591
LC
4322The main syntactic forms to deal with monads in general are provided by
4323the @code{(guix monads)} module and are described below.
b860f382
LC
4324
4325@deffn {Scheme Syntax} with-monad @var{monad} @var{body} ...
4326Evaluate any @code{>>=} or @code{return} forms in @var{body} as being
4327in @var{monad}.
4328@end deffn
4329
4330@deffn {Scheme Syntax} return @var{val}
4331Return a monadic value that encapsulates @var{val}.
4332@end deffn
4333
751630c9 4334@deffn {Scheme Syntax} >>= @var{mval} @var{mproc} ...
b860f382 4335@dfn{Bind} monadic value @var{mval}, passing its ``contents'' to monadic
751630c9
LC
4336procedures @var{mproc}@dots{}@footnote{This operation is commonly
4337referred to as ``bind'', but that name denotes an unrelated procedure in
4338Guile. Thus we use this somewhat cryptic symbol inherited from the
4339Haskell language.}. There can be one @var{mproc} or several of them, as
4340in this example:
4341
4342@example
4343(run-with-state
4344 (with-monad %state-monad
4345 (>>= (return 1)
4346 (lambda (x) (return (+ 1 x)))
4347 (lambda (x) (return (* 2 x)))))
4348 'some-state)
4349
4350@result{} 4
4351@result{} some-state
4352@end example
b860f382
LC
4353@end deffn
4354
4355@deffn {Scheme Syntax} mlet @var{monad} ((@var{var} @var{mval}) ...) @
4356 @var{body} ...
4357@deffnx {Scheme Syntax} mlet* @var{monad} ((@var{var} @var{mval}) ...) @
4358 @var{body} ...
4359Bind the variables @var{var} to the monadic values @var{mval} in
8bc2183f
CM
4360@var{body}, which is a sequence of expressions. As with the bind
4361operator, this can be thought of as ``unpacking'' the raw, non-monadic
4362value ``contained'' in @var{mval} and making @var{var} refer to that
4363raw, non-monadic value within the scope of the @var{body}. The form
4364(@var{var} -> @var{val}) binds @var{var} to the ``normal'' value
4365@var{val}, as per @code{let}. The binding operations occur in sequence
4366from left to right. The last expression of @var{body} must be a monadic
4367expression, and its result will become the result of the @code{mlet} or
4368@code{mlet*} when run in the @var{monad}.
b860f382
LC
4369
4370@code{mlet*} is to @code{mlet} what @code{let*} is to @code{let}
4371(@pxref{Local Bindings,,, guile, GNU Guile Reference Manual}).
4372@end deffn
4373
405a9d4e
LC
4374@deffn {Scheme System} mbegin @var{monad} @var{mexp} ...
4375Bind @var{mexp} and the following monadic expressions in sequence,
8bc2183f
CM
4376returning the result of the last expression. Every expression in the
4377sequence must be a monadic expression.
405a9d4e
LC
4378
4379This is akin to @code{mlet}, except that the return values of the
4380monadic expressions are ignored. In that sense, it is analogous to
4381@code{begin}, but applied to monadic expressions.
4382@end deffn
4383
60a9fcb1
CM
4384@deffn {Scheme System} mwhen @var{condition} @var{mexp0} @var{mexp*} ...
4385When @var{condition} is true, evaluate the sequence of monadic
4386expressions @var{mexp0}..@var{mexp*} as in an @code{mbegin}. When
4387@var{condition} is false, return @code{*unspecified*} in the current
4388monad. Every expression in the sequence must be a monadic expression.
4389@end deffn
4390
4391@deffn {Scheme System} munless @var{condition} @var{mexp0} @var{mexp*} ...
4392When @var{condition} is false, evaluate the sequence of monadic
4393expressions @var{mexp0}..@var{mexp*} as in an @code{mbegin}. When
4394@var{condition} is true, return @code{*unspecified*} in the current
4395monad. Every expression in the sequence must be a monadic expression.
4396@end deffn
4397
561fb6c3
LC
4398@cindex state monad
4399The @code{(guix monads)} module provides the @dfn{state monad}, which
4400allows an additional value---the state---to be @emph{threaded} through
4401monadic procedure calls.
4402
4403@defvr {Scheme Variable} %state-monad
4404The state monad. Procedures in the state monad can access and change
4405the state that is threaded.
4406
4407Consider the example below. The @code{square} procedure returns a value
4408in the state monad. It returns the square of its argument, but also
4409increments the current state value:
4410
4411@example
4412(define (square x)
4413 (mlet %state-monad ((count (current-state)))
4414 (mbegin %state-monad
4415 (set-current-state (+ 1 count))
4416 (return (* x x)))))
4417
4418(run-with-state (sequence %state-monad (map square (iota 3))) 0)
4419@result{} (0 1 4)
4420@result{} 3
4421@end example
4422
4423When ``run'' through @var{%state-monad}, we obtain that additional state
4424value, which is the number of @code{square} calls.
4425@end defvr
4426
4427@deffn {Monadic Procedure} current-state
4428Return the current state as a monadic value.
4429@end deffn
4430
4431@deffn {Monadic Procedure} set-current-state @var{value}
4432Set the current state to @var{value} and return the previous state as a
4433monadic value.
4434@end deffn
4435
4436@deffn {Monadic Procedure} state-push @var{value}
4437Push @var{value} to the current state, which is assumed to be a list,
4438and return the previous state as a monadic value.
4439@end deffn
4440
4441@deffn {Monadic Procedure} state-pop
4442Pop a value from the current state and return it as a monadic value.
4443The state is assumed to be a list.
4444@end deffn
4445
4446@deffn {Scheme Procedure} run-with-state @var{mval} [@var{state}]
4447Run monadic value @var{mval} starting with @var{state} as the initial
4448state. Return two values: the resulting value, and the resulting state.
4449@end deffn
4450
e87f0591
LC
4451The main interface to the store monad, provided by the @code{(guix
4452store)} module, is as follows.
b860f382
LC
4453
4454@defvr {Scheme Variable} %store-monad
561fb6c3
LC
4455The store monad---an alias for @var{%state-monad}.
4456
4457Values in the store monad encapsulate accesses to the store. When its
4458effect is needed, a value of the store monad must be ``evaluated'' by
4459passing it to the @code{run-with-store} procedure (see below.)
b860f382
LC
4460@end defvr
4461
4462@deffn {Scheme Procedure} run-with-store @var{store} @var{mval} [#:guile-for-build] [#:system (%current-system)]
4463Run @var{mval}, a monadic value in the store monad, in @var{store}, an
4464open store connection.
4465@end deffn
4466
ad372953 4467@deffn {Monadic Procedure} text-file @var{name} @var{text} [@var{references}]
b860f382 4468Return as a monadic value the absolute file name in the store of the file
ad372953
LC
4469containing @var{text}, a string. @var{references} is a list of store items that the
4470resulting text file refers to; it defaults to the empty list.
45adbd62
LC
4471@end deffn
4472
0a90af15 4473@deffn {Monadic Procedure} interned-file @var{file} [@var{name}] @
1ec32f4a 4474 [#:recursive? #t] [#:select? (const #t)]
0a90af15
LC
4475Return the name of @var{file} once interned in the store. Use
4476@var{name} as its store name, or the basename of @var{file} if
4477@var{name} is omitted.
4478
4479When @var{recursive?} is true, the contents of @var{file} are added
4480recursively; if @var{file} designates a flat file and @var{recursive?}
4481is true, its contents are added, and its permission bits are kept.
4482
1ec32f4a
LC
4483When @var{recursive?} is true, call @code{(@var{select?} @var{file}
4484@var{stat})} for each directory entry, where @var{file} is the entry's
4485absolute file name and @var{stat} is the result of @code{lstat}; exclude
4486entries for which @var{select?} does not return true.
4487
0a90af15
LC
4488The example below adds a file to the store, under two different names:
4489
4490@example
4491(run-with-store (open-connection)
4492 (mlet %store-monad ((a (interned-file "README"))
4493 (b (interned-file "README" "LEGU-MIN")))
4494 (return (list a b))))
4495
4496@result{} ("/gnu/store/rwm@dots{}-README" "/gnu/store/44i@dots{}-LEGU-MIN")
4497@end example
4498
4499@end deffn
4500
e87f0591
LC
4501The @code{(guix packages)} module exports the following package-related
4502monadic procedures:
4503
b860f382 4504@deffn {Monadic Procedure} package-file @var{package} [@var{file}] @
4231f05b 4505 [#:system (%current-system)] [#:target #f] @
f97c9175
AE
4506 [#:output "out"]
4507Return as a monadic
b860f382
LC
4508value in the absolute file name of @var{file} within the @var{output}
4509directory of @var{package}. When @var{file} is omitted, return the name
4231f05b
LC
4510of the @var{output} directory of @var{package}. When @var{target} is
4511true, use it as a cross-compilation target triplet.
b860f382
LC
4512@end deffn
4513
b860f382 4514@deffn {Monadic Procedure} package->derivation @var{package} [@var{system}]
4231f05b
LC
4515@deffnx {Monadic Procedure} package->cross-derivation @var{package} @
4516 @var{target} [@var{system}]
4517Monadic version of @code{package-derivation} and
4518@code{package-cross-derivation} (@pxref{Defining Packages}).
b860f382
LC
4519@end deffn
4520
4521
21b679f6
LC
4522@node G-Expressions
4523@section G-Expressions
4524
4525@cindex G-expression
4526@cindex build code quoting
4527So we have ``derivations'', which represent a sequence of build actions
4528to be performed to produce an item in the store (@pxref{Derivations}).
f97c9175 4529These build actions are performed when asking the daemon to actually
21b679f6
LC
4530build the derivations; they are run by the daemon in a container
4531(@pxref{Invoking guix-daemon}).
4532
4533@cindex strata of code
f97c9175 4534It should come as no surprise that we like to write these build actions
21b679f6
LC
4535in Scheme. When we do that, we end up with two @dfn{strata} of Scheme
4536code@footnote{The term @dfn{stratum} in this context was coined by
ef4ab0a4
LC
4537Manuel Serrano et al.@: in the context of their work on Hop. Oleg
4538Kiselyov, who has written insightful
4539@url{http://okmij.org/ftp/meta-programming/#meta-scheme, essays and code
4540on this topic}, refers to this kind of code generation as
4541@dfn{staging}.}: the ``host code''---code that defines packages, talks
4542to the daemon, etc.---and the ``build code''---code that actually
4543performs build actions, such as making directories, invoking
4544@command{make}, etc.
21b679f6
LC
4545
4546To describe a derivation and its build actions, one typically needs to
4547embed build code inside host code. It boils down to manipulating build
f97c9175 4548code as data, and the homoiconicity of Scheme---code has a direct
21b679f6 4549representation as data---comes in handy for that. But we need more than
f97c9175 4550the normal @code{quasiquote} mechanism in Scheme to construct build
21b679f6
LC
4551expressions.
4552
4553The @code{(guix gexp)} module implements @dfn{G-expressions}, a form of
4554S-expressions adapted to build expressions. G-expressions, or
f97c9175 4555@dfn{gexps}, consist essentially of three syntactic forms: @code{gexp},
21b679f6 4556@code{ungexp}, and @code{ungexp-splicing} (or simply: @code{#~},
f97c9175
AE
4557@code{#$}, and @code{#$@@}), which are comparable to
4558@code{quasiquote}, @code{unquote}, and @code{unquote-splicing},
4827b36d 4559respectively (@pxref{Expression Syntax, @code{quasiquote},, guile,
f97c9175 4560GNU Guile Reference Manual}). However, there are major differences:
21b679f6
LC
4561
4562@itemize
4563@item
4564Gexps are meant to be written to a file and run or manipulated by other
4565processes.
4566
4567@item
b39fc6f7
LC
4568When a high-level object such as a package or derivation is unquoted
4569inside a gexp, the result is as if its output file name had been
4570introduced.
ff40e9b7 4571
21b679f6
LC
4572@item
4573Gexps carry information about the packages or derivations they refer to,
4574and these dependencies are automatically added as inputs to the build
4575processes that use them.
4576@end itemize
4577
c2b84676 4578@cindex lowering, of high-level objects in gexps
343eacbe
LC
4579This mechanism is not limited to package and derivation
4580objects: @dfn{compilers} able to ``lower'' other high-level objects to
c2b84676
LC
4581derivations or files in the store can be defined,
4582such that these objects can also be inserted
f97c9175 4583into gexps. For example, a useful type of high-level objects that can be
343eacbe 4584inserted in a gexp is ``file-like objects'', which make it easy to
f97c9175 4585add files to the store and to refer to them in
558e8b11
LC
4586derivations and such (see @code{local-file} and @code{plain-file}
4587below.)
b39fc6f7 4588
21b679f6
LC
4589To illustrate the idea, here is an example of a gexp:
4590
4591@example
4592(define build-exp
4593 #~(begin
4594 (mkdir #$output)
4595 (chdir #$output)
aff8ce7c 4596 (symlink (string-append #$coreutils "/bin/ls")
21b679f6
LC
4597 "list-files")))
4598@end example
4599
4600This gexp can be passed to @code{gexp->derivation}; we obtain a
4601derivation that builds a directory containing exactly one symlink to
4602@file{/gnu/store/@dots{}-coreutils-8.22/bin/ls}:
4603
4604@example
4605(gexp->derivation "the-thing" build-exp)
4606@end example
4607
e20fd1bf 4608As one would expect, the @code{"/gnu/store/@dots{}-coreutils-8.22"} string is
21b679f6
LC
4609substituted to the reference to the @var{coreutils} package in the
4610actual build code, and @var{coreutils} is automatically made an input to
4611the derivation. Likewise, @code{#$output} (equivalent to @code{(ungexp
f97c9175
AE
4612output)}) is replaced by a string containing the directory name of the
4613output of the derivation.
667b2508
LC
4614
4615@cindex cross compilation
4616In a cross-compilation context, it is useful to distinguish between
4617references to the @emph{native} build of a package---that can run on the
4618host---versus references to cross builds of a package. To that end, the
4619@code{#+} plays the same role as @code{#$}, but is a reference to a
4620native package build:
4621
4622@example
4623(gexp->derivation "vi"
4624 #~(begin
4625 (mkdir #$output)
4626 (system* (string-append #+coreutils "/bin/ln")
4627 "-s"
4628 (string-append #$emacs "/bin/emacs")
4629 (string-append #$output "/bin/vi")))
4a3b6aa5 4630 #:target "mips64el-linux-gnu")
667b2508
LC
4631@end example
4632
4633@noindent
4634In the example above, the native build of @var{coreutils} is used, so
4635that @command{ln} can actually run on the host; but then the
4636cross-compiled build of @var{emacs} is referenced.
4637
0bb9929e
LC
4638@cindex imported modules, for gexps
4639@findex with-imported-modules
4640Another gexp feature is @dfn{imported modules}: sometimes you want to be
4641able to use certain Guile modules from the ``host environment'' in the
4642gexp, so those modules should be imported in the ``build environment''.
4643The @code{with-imported-modules} form allows you to express that:
4644
4645@example
4646(let ((build (with-imported-modules '((guix build utils))
4647 #~(begin
4648 (use-modules (guix build utils))
4649 (mkdir-p (string-append #$output "/bin"))))))
4650 (gexp->derivation "empty-dir"
4651 #~(begin
4652 #$build
4653 (display "success!\n")
4654 #t)))
4655@end example
4656
4657@noindent
4658In this example, the @code{(guix build utils)} module is automatically
4659pulled into the isolated build environment of our gexp, such that
4660@code{(use-modules (guix build utils))} works as expected.
4661
7ca87354
LC
4662@cindex module closure
4663@findex source-module-closure
4664Usually you want the @emph{closure} of the module to be imported---i.e.,
4665the module itself and all the modules it depends on---rather than just
4666the module; failing to do that, attempts to use the module will fail
4667because of missing dependent modules. The @code{source-module-closure}
4668procedure computes the closure of a module by looking at its source file
4669headers, which comes in handy in this case:
4670
4671@example
4672(use-modules (guix modules)) ;for 'source-module-closure'
4673
4674(with-imported-modules (source-module-closure
4675 '((guix build utils)
4676 (gnu build vm)))
4677 (gexp->derivation "something-with-vms"
4678 #~(begin
4679 (use-modules (guix build utils)
4680 (gnu build vm))
4681 @dots{})))
4682@end example
4683
667b2508 4684The syntactic form to construct gexps is summarized below.
21b679f6
LC
4685
4686@deffn {Scheme Syntax} #~@var{exp}
4687@deffnx {Scheme Syntax} (gexp @var{exp})
4688Return a G-expression containing @var{exp}. @var{exp} may contain one
4689or more of the following forms:
4690
4691@table @code
4692@item #$@var{obj}
4693@itemx (ungexp @var{obj})
b39fc6f7
LC
4694Introduce a reference to @var{obj}. @var{obj} may have one of the
4695supported types, for example a package or a
21b679f6
LC
4696derivation, in which case the @code{ungexp} form is replaced by its
4697output file name---e.g., @code{"/gnu/store/@dots{}-coreutils-8.22}.
4698
b39fc6f7
LC
4699If @var{obj} is a list, it is traversed and references to supported
4700objects are substituted similarly.
21b679f6
LC
4701
4702If @var{obj} is another gexp, its contents are inserted and its
4703dependencies are added to those of the containing gexp.
4704
4705If @var{obj} is another kind of object, it is inserted as is.
4706
b39fc6f7
LC
4707@item #$@var{obj}:@var{output}
4708@itemx (ungexp @var{obj} @var{output})
21b679f6 4709This is like the form above, but referring explicitly to the
b39fc6f7
LC
4710@var{output} of @var{obj}---this is useful when @var{obj} produces
4711multiple outputs (@pxref{Packages with Multiple Outputs}).
21b679f6 4712
667b2508
LC
4713@item #+@var{obj}
4714@itemx #+@var{obj}:output
4715@itemx (ungexp-native @var{obj})
4716@itemx (ungexp-native @var{obj} @var{output})
4717Same as @code{ungexp}, but produces a reference to the @emph{native}
4718build of @var{obj} when used in a cross compilation context.
4719
21b679f6
LC
4720@item #$output[:@var{output}]
4721@itemx (ungexp output [@var{output}])
4722Insert a reference to derivation output @var{output}, or to the main
4723output when @var{output} is omitted.
4724
4725This only makes sense for gexps passed to @code{gexp->derivation}.
4726
4727@item #$@@@var{lst}
4728@itemx (ungexp-splicing @var{lst})
4729Like the above, but splices the contents of @var{lst} inside the
4730containing list.
4731
667b2508
LC
4732@item #+@@@var{lst}
4733@itemx (ungexp-native-splicing @var{lst})
4734Like the above, but refers to native builds of the objects listed in
4735@var{lst}.
4736
21b679f6
LC
4737@end table
4738
4739G-expressions created by @code{gexp} or @code{#~} are run-time objects
4740of the @code{gexp?} type (see below.)
4741@end deffn
4742
0bb9929e
LC
4743@deffn {Scheme Syntax} with-imported-modules @var{modules} @var{body}@dots{}
4744Mark the gexps defined in @var{body}@dots{} as requiring @var{modules}
d938a58b
LC
4745in their execution environment.
4746
4747Each item in @var{modules} can be the name of a module, such as
4748@code{(guix build utils)}, or it can be a module name, followed by an
4749arrow, followed by a file-like object:
4750
4751@example
4752`((guix build utils)
4753 (guix gcrypt)
4754 ((guix config) => ,(scheme-file "config.scm"
4755 #~(define-module @dots{}))))
4756@end example
4757
4758@noindent
4759In the example above, the first two modules are taken from the search
4760path, and the last one is created from the given file-like object.
0bb9929e
LC
4761
4762This form has @emph{lexical} scope: it has an effect on the gexps
4763directly defined in @var{body}@dots{}, but not on those defined, say, in
4764procedures called from @var{body}@dots{}.
4765@end deffn
4766
21b679f6
LC
4767@deffn {Scheme Procedure} gexp? @var{obj}
4768Return @code{#t} if @var{obj} is a G-expression.
4769@end deffn
4770
4771G-expressions are meant to be written to disk, either as code building
4772some derivation, or as plain files in the store. The monadic procedures
4773below allow you to do that (@pxref{The Store Monad}, for more
4774information about monads.)
4775
4776@deffn {Monadic Procedure} gexp->derivation @var{name} @var{exp} @
ce45eb4c 4777 [#:system (%current-system)] [#:target #f] [#:graft? #t] @
21b679f6
LC
4778 [#:hash #f] [#:hash-algo #f] @
4779 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
4684f301 4780 [#:module-path @var{%load-path}] @
c8351d9a 4781 [#:references-graphs #f] [#:allowed-references #f] @
3f4ecf32 4782 [#:disallowed-references #f] @
c0468155 4783 [#:leaked-env-vars #f] @
0309e1b0 4784 [#:script-name (string-append @var{name} "-builder")] @
4a6aeb67 4785 [#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
21b679f6 4786Return a derivation @var{name} that runs @var{exp} (a gexp) with
0309e1b0
LC
4787@var{guile-for-build} (a derivation) on @var{system}; @var{exp} is
4788stored in a file called @var{script-name}. When @var{target} is true,
4789it is used as the cross-compilation target triplet for packages referred
4790to by @var{exp}.
21b679f6 4791
0bb9929e
LC
4792@var{modules} is deprecated in favor of @code{with-imported-modules}.
4793Its meaning is to
4794make @var{modules} available in the evaluation context of @var{exp};
ce45eb4c
LC
4795@var{modules} is a list of names of Guile modules searched in
4796@var{module-path} to be copied in the store, compiled, and made available in
21b679f6
LC
4797the load path during the execution of @var{exp}---e.g., @code{((guix
4798build utils) (guix build gnu-build-system))}.
4799
ce45eb4c
LC
4800@var{graft?} determines whether packages referred to by @var{exp} should be grafted when
4801applicable.
4802
b53833b2
LC
4803When @var{references-graphs} is true, it must be a list of tuples of one of the
4804following forms:
4805
4806@example
4807(@var{file-name} @var{package})
4808(@var{file-name} @var{package} @var{output})
4809(@var{file-name} @var{derivation})
4810(@var{file-name} @var{derivation} @var{output})
4811(@var{file-name} @var{store-item})
4812@end example
4813
4814The right-hand-side of each element of @var{references-graphs} is automatically made
4815an input of the build process of @var{exp}. In the build environment, each
4816@var{file-name} contains the reference graph of the corresponding item, in a simple
4817text format.
4818
c8351d9a
LC
4819@var{allowed-references} must be either @code{#f} or a list of output names and packages.
4820In the latter case, the list denotes store items that the result is allowed to
4821refer to. Any reference to another store item will lead to a build error.
3f4ecf32
LC
4822Similarly for @var{disallowed-references}, which can list items that must not be
4823referenced by the outputs.
c8351d9a 4824
e20fd1bf 4825The other arguments are as for @code{derivation} (@pxref{Derivations}).
21b679f6
LC
4826@end deffn
4827
343eacbe 4828@cindex file-like objects
e1c153e0
LC
4829The @code{local-file}, @code{plain-file}, @code{computed-file},
4830@code{program-file}, and @code{scheme-file} procedures below return
4831@dfn{file-like objects}. That is, when unquoted in a G-expression,
4832these objects lead to a file in the store. Consider this G-expression:
343eacbe
LC
4833
4834@example
a9e5e92f 4835#~(system* #$(file-append glibc "/sbin/nscd") "-f"
343eacbe
LC
4836 #$(local-file "/tmp/my-nscd.conf"))
4837@end example
4838
4839The effect here is to ``intern'' @file{/tmp/my-nscd.conf} by copying it
4840to the store. Once expanded, for instance @i{via}
4841@code{gexp->derivation}, the G-expression refers to that copy under
4842@file{/gnu/store}; thus, modifying or removing the file in @file{/tmp}
4843does not have any effect on what the G-expression does.
4844@code{plain-file} can be used similarly; it differs in that the file
4845content is directly passed as a string.
4846
d9ae938f 4847@deffn {Scheme Procedure} local-file @var{file} [@var{name}] @
0687fc9c 4848 [#:recursive? #f] [#:select? (const #t)]
d9ae938f 4849Return an object representing local file @var{file} to add to the store; this
9d3994f7
LC
4850object can be used in a gexp. If @var{file} is a relative file name, it is looked
4851up relative to the source file where this form appears. @var{file} will be added to
4852the store under @var{name}--by default the base name of @var{file}.
d9ae938f
LC
4853
4854When @var{recursive?} is true, the contents of @var{file} are added recursively; if @var{file}
4855designates a flat file and @var{recursive?} is true, its contents are added, and its
4856permission bits are kept.
4857
0687fc9c
LC
4858When @var{recursive?} is true, call @code{(@var{select?} @var{file}
4859@var{stat})} for each directory entry, where @var{file} is the entry's
4860absolute file name and @var{stat} is the result of @code{lstat}; exclude
4861entries for which @var{select?} does not return true.
4862
d9ae938f
LC
4863This is the declarative counterpart of the @code{interned-file} monadic
4864procedure (@pxref{The Store Monad, @code{interned-file}}).
4865@end deffn
4866
558e8b11
LC
4867@deffn {Scheme Procedure} plain-file @var{name} @var{content}
4868Return an object representing a text file called @var{name} with the given
4869@var{content} (a string) to be added to the store.
4870
4871This is the declarative counterpart of @code{text-file}.
4872@end deffn
4873
91937029 4874@deffn {Scheme Procedure} computed-file @var{name} @var{gexp} @
a769bffb 4875 [#:options '(#:local-build? #t)]
91937029 4876Return an object representing the store item @var{name}, a file or
a769bffb 4877directory computed by @var{gexp}. @var{options}
91937029
LC
4878is a list of additional arguments to pass to @code{gexp->derivation}.
4879
4880This is the declarative counterpart of @code{gexp->derivation}.
4881@end deffn
4882
21b679f6
LC
4883@deffn {Monadic Procedure} gexp->script @var{name} @var{exp}
4884Return an executable script @var{name} that runs @var{exp} using
9c14a487 4885@var{guile}, with @var{exp}'s imported modules in its search path.
21b679f6
LC
4886
4887The example below builds a script that simply invokes the @command{ls}
4888command:
4889
4890@example
4891(use-modules (guix gexp) (gnu packages base))
4892
4893(gexp->script "list-files"
a9e5e92f 4894 #~(execl #$(file-append coreutils "/bin/ls")
21b679f6
LC
4895 "ls"))
4896@end example
4897
4898When ``running'' it through the store (@pxref{The Store Monad,
e20fd1bf 4899@code{run-with-store}}), we obtain a derivation that produces an
21b679f6
LC
4900executable file @file{/gnu/store/@dots{}-list-files} along these lines:
4901
4902@example
4903#!/gnu/store/@dots{}-guile-2.0.11/bin/guile -ds
4904!#
a9e5e92f 4905(execl "/gnu/store/@dots{}-coreutils-8.22"/bin/ls" "ls")
21b679f6
LC
4906@end example
4907@end deffn
4908
15a01c72 4909@deffn {Scheme Procedure} program-file @var{name} @var{exp} @
9c14a487 4910 [#:guile #f]
15a01c72
LC
4911Return an object representing the executable store item @var{name} that
4912runs @var{gexp}. @var{guile} is the Guile package used to execute that
9c14a487 4913script.
15a01c72
LC
4914
4915This is the declarative counterpart of @code{gexp->script}.
4916@end deffn
4917
2b418579
LC
4918@deffn {Monadic Procedure} gexp->file @var{name} @var{exp} @
4919 [#:set-load-path? #t]
21b679f6 4920Return a derivation that builds a file @var{name} containing @var{exp}.
2b418579
LC
4921When @var{set-load-path?} is true, emit code in the resulting file to
4922set @code{%load-path} and @code{%load-compiled-path} to honor
4923@var{exp}'s imported modules.
21b679f6
LC
4924
4925The resulting file holds references to all the dependencies of @var{exp}
4926or a subset thereof.
4927@end deffn
1ed19464 4928
e1c153e0
LC
4929@deffn {Scheme Procedure} scheme-file @var{name} @var{exp}
4930Return an object representing the Scheme file @var{name} that contains
4931@var{exp}.
4932
4933This is the declarative counterpart of @code{gexp->file}.
4934@end deffn
4935
1ed19464
LC
4936@deffn {Monadic Procedure} text-file* @var{name} @var{text} @dots{}
4937Return as a monadic value a derivation that builds a text file
4938containing all of @var{text}. @var{text} may list, in addition to
d9ae938f
LC
4939strings, objects of any type that can be used in a gexp: packages,
4940derivations, local file objects, etc. The resulting store file holds
4941references to all these.
1ed19464
LC
4942
4943This variant should be preferred over @code{text-file} anytime the file
4944to create will reference items from the store. This is typically the
4945case when building a configuration file that embeds store file names,
4946like this:
4947
4948@example
4949(define (profile.sh)
4950 ;; Return the name of a shell script in the store that
4951 ;; initializes the 'PATH' environment variable.
4952 (text-file* "profile.sh"
4953 "export PATH=" coreutils "/bin:"
4954 grep "/bin:" sed "/bin\n"))
4955@end example
4956
4957In this example, the resulting @file{/gnu/store/@dots{}-profile.sh} file
b7899749 4958will reference @var{coreutils}, @var{grep}, and @var{sed}, thereby
1ed19464
LC
4959preventing them from being garbage-collected during its lifetime.
4960@end deffn
21b679f6 4961
b751cde3
LC
4962@deffn {Scheme Procedure} mixed-text-file @var{name} @var{text} @dots{}
4963Return an object representing store file @var{name} containing
4964@var{text}. @var{text} is a sequence of strings and file-like objects,
4965as in:
4966
4967@example
4968(mixed-text-file "profile"
4969 "export PATH=" coreutils "/bin:" grep "/bin")
4970@end example
4971
4972This is the declarative counterpart of @code{text-file*}.
4973@end deffn
4974
a9e5e92f
LC
4975@deffn {Scheme Procedure} file-append @var{obj} @var{suffix} @dots{}
4976Return a file-like object that expands to the concatenation of @var{obj}
4977and @var{suffix}, where @var{obj} is a lowerable object and each
4978@var{suffix} is a string.
4979
4980As an example, consider this gexp:
4981
4982@example
4983(gexp->script "run-uname"
4984 #~(system* #$(file-append coreutils
4985 "/bin/uname")))
4986@end example
4987
4988The same effect could be achieved with:
4989
4990@example
4991(gexp->script "run-uname"
4992 #~(system* (string-append #$coreutils
4993 "/bin/uname")))
4994@end example
4995
4996There is one difference though: in the @code{file-append} case, the
4997resulting script contains the absolute file name as a string, whereas in
4998the second case, the resulting script contains a @code{(string-append
4999@dots{})} expression to construct the file name @emph{at run time}.
5000@end deffn
5001
5002
21b679f6
LC
5003Of course, in addition to gexps embedded in ``host'' code, there are
5004also modules containing build tools. To make it clear that they are
5005meant to be used in the build stratum, these modules are kept in the
5006@code{(guix build @dots{})} name space.
5007
c2b84676
LC
5008@cindex lowering, of high-level objects in gexps
5009Internally, high-level objects are @dfn{lowered}, using their compiler,
5010to either derivations or store items. For instance, lowering a package
5011yields a derivation, and lowering a @code{plain-file} yields a store
5012item. This is achieved using the @code{lower-object} monadic procedure.
5013
5014@deffn {Monadic Procedure} lower-object @var{obj} [@var{system}] @
5015 [#:target #f]
5016Return as a value in @var{%store-monad} the derivation or store item
5017corresponding to @var{obj} for @var{system}, cross-compiling for
5018@var{target} if @var{target} is true. @var{obj} must be an object that
5019has an associated gexp compiler, such as a @code{<package>}.
5020@end deffn
5021
21b679f6 5022
568717fd
LC
5023@c *********************************************************************
5024@node Utilities
5025@chapter Utilities
5026
6f773606
LC
5027This section describes Guix command-line utilities. Some of them are
5028primarily targeted at developers and users who write new package
5029definitions, while others are more generally useful. They complement
5030the Scheme programming interface of Guix in a convenient way.
210cc920 5031
568717fd 5032@menu
37166310 5033* Invoking guix build:: Building packages from the command line.
39bee8a2 5034* Invoking guix edit:: Editing package definitions.
210cc920 5035* Invoking guix download:: Downloading a file and printing its hash.
37166310 5036* Invoking guix hash:: Computing the cryptographic hash of a file.
2f7d2d91 5037* Invoking guix import:: Importing package definitions.
37166310 5038* Invoking guix refresh:: Updating package definitions.
b4f5e0e8 5039* Invoking guix lint:: Finding errors in package definitions.
fcc58db6 5040* Invoking guix size:: Profiling disk usage.
88856916 5041* Invoking guix graph:: Visualizing the graph of packages.
372c4bbc 5042* Invoking guix environment:: Setting up development environments.
aff8ce7c 5043* Invoking guix publish:: Sharing substitutes.
d23c20f1 5044* Invoking guix challenge:: Challenging substitute servers.
f11c444d 5045* Invoking guix copy:: Copying to and from a remote store.
32efa254 5046* Invoking guix container:: Process isolation.
585347d7 5047* Invoking guix weather:: Assessing substitute availability.
568717fd
LC
5048@end menu
5049
e49951eb
MW
5050@node Invoking guix build
5051@section Invoking @command{guix build}
568717fd 5052
e32171ee
JD
5053@cindex package building
5054@cindex @command{guix build}
e49951eb 5055The @command{guix build} command builds packages or derivations and
6798a8e4
LC
5056their dependencies, and prints the resulting store paths. Note that it
5057does not modify the user's profile---this is the job of the
e49951eb 5058@command{guix package} command (@pxref{Invoking guix package}). Thus,
6798a8e4
LC
5059it is mainly useful for distribution developers.
5060
5061The general syntax is:
c78bd12b
LC
5062
5063@example
e49951eb 5064guix build @var{options} @var{package-or-derivation}@dots{}
c78bd12b
LC
5065@end example
5066
f97c9175 5067As an example, the following command builds the latest versions of Emacs
ccd7158d
LC
5068and of Guile, displays their build logs, and finally displays the
5069resulting directories:
5070
5071@example
5072guix build emacs guile
5073@end example
5074
5075Similarly, the following command builds all the available packages:
5076
5077@example
5284339d 5078guix build --quiet --keep-going \
ccd7158d
LC
5079 `guix package -A | cut -f1,2 --output-delimiter=@@`
5080@end example
5081
c78bd12b 5082@var{package-or-derivation} may be either the name of a package found in
5401dd75 5083the software distribution such as @code{coreutils} or
e1a65ae5 5084@code{coreutils@@8.20}, or a derivation such as
834129e0 5085@file{/gnu/store/@dots{}-coreutils-8.19.drv}. In the former case, a
e7f34eb0
LC
5086package with the corresponding name (and optionally version) is searched
5087for among the GNU distribution modules (@pxref{Package Modules}).
5088
5089Alternatively, the @code{--expression} option may be used to specify a
5090Scheme expression that evaluates to a package; this is useful when
b7899749 5091disambiguating among several same-named packages or package variants is
e7f34eb0 5092needed.
c78bd12b 5093
ccd7158d
LC
5094There may be zero or more @var{options}. The available options are
5095described in the subsections below.
5096
5097@menu
5098* Common Build Options:: Build options for most commands.
f11c444d 5099* Package Transformation Options:: Creating variants of packages.
ccd7158d 5100* Additional Build Options:: Options specific to 'guix build'.
10f4353d 5101* Debugging Build Failures:: Real life packaging experience.
ccd7158d
LC
5102@end menu
5103
5104@node Common Build Options
5105@subsection Common Build Options
5106
5107A number of options that control the build process are common to
5108@command{guix build} and other commands that can spawn builds, such as
5109@command{guix package} or @command{guix archive}. These are the
5110following:
5111
5112@table @code
5113
5114@item --load-path=@var{directory}
5115@itemx -L @var{directory}
5116Add @var{directory} to the front of the package module search path
5117(@pxref{Package Modules}).
5118
5119This allows users to define their own packages and make them visible to
5120the command-line tools.
5121
5122@item --keep-failed
5123@itemx -K
b7899749 5124Keep the build tree of failed builds. Thus, if a build fails, its build
ccd7158d
LC
5125tree is kept under @file{/tmp}, in a directory whose name is shown at
5126the end of the build log. This is useful when debugging build issues.
fc06b15e
AP
5127@xref{Debugging Build Failures}, for tips and tricks on how to debug
5128build issues.
ccd7158d
LC
5129
5130@item --keep-going
5131@itemx -k
5132Keep going when some of the derivations fail to build; return only once
5133all the builds have either completed or failed.
5134
5135The default behavior is to stop as soon as one of the specified
5136derivations has failed.
5137
5138@item --dry-run
5139@itemx -n
5140Do not build the derivations.
5141
5142@item --fallback
5143When substituting a pre-built binary fails, fall back to building
5144packages locally.
5145
5146@item --substitute-urls=@var{urls}
5147@anchor{client-substitute-urls}
5148Consider @var{urls} the whitespace-separated list of substitute source
5149URLs, overriding the default list of URLs of @command{guix-daemon}
5150(@pxref{daemon-substitute-urls,, @command{guix-daemon} URLs}).
5151
5152This means that substitutes may be downloaded from @var{urls}, provided
5153they are signed by a key authorized by the system administrator
5154(@pxref{Substitutes}).
5155
71e2065a
LC
5156When @var{urls} is the empty string, substitutes are effectively
5157disabled.
5158
ccd7158d
LC
5159@item --no-substitutes
5160Do not use substitutes for build products. That is, always build things
5161locally instead of allowing downloads of pre-built binaries
5162(@pxref{Substitutes}).
5163
7573d30f
LC
5164@item --no-grafts
5165Do not ``graft'' packages. In practice, this means that package updates
5166available as grafts are not applied. @xref{Security Updates}, for more
5167information on grafts.
5168
ccd7158d
LC
5169@item --rounds=@var{n}
5170Build each derivation @var{n} times in a row, and raise an error if
5171consecutive build results are not bit-for-bit identical.
5172
5173This is a useful way to detect non-deterministic builds processes.
5174Non-deterministic build processes are a problem because they make it
5175practically impossible for users to @emph{verify} whether third-party
5176binaries are genuine. @xref{Invoking guix challenge}, for more.
5177
5178Note that, currently, the differing build results are not kept around,
5179so you will have to manually investigate in case of an error---e.g., by
e66d1f59
ML
5180stashing one of the build results with @code{guix archive --export}
5181(@pxref{Invoking guix archive}), then rebuilding, and finally comparing
5182the two results.
ccd7158d
LC
5183
5184@item --no-build-hook
f97c9175 5185Do not attempt to offload builds @i{via} the ``build hook'' of the daemon
ccd7158d
LC
5186(@pxref{Daemon Offload Setup}). That is, always build things locally
5187instead of offloading builds to remote machines.
5188
5189@item --max-silent-time=@var{seconds}
5190When the build or substitution process remains silent for more than
5191@var{seconds}, terminate it and report a build failure.
5192
2ca9f51e
LC
5193By default, the daemon's setting is honored (@pxref{Invoking
5194guix-daemon, @code{--max-silent-time}}).
5195
ccd7158d
LC
5196@item --timeout=@var{seconds}
5197Likewise, when the build or substitution process lasts for more than
5198@var{seconds}, terminate it and report a build failure.
5199
2ca9f51e
LC
5200By default, the daemon's setting is honored (@pxref{Invoking
5201guix-daemon, @code{--timeout}}).
ccd7158d
LC
5202
5203@item --verbosity=@var{level}
5204Use the given verbosity level. @var{level} must be an integer between 0
5205and 5; higher means more verbose output. Setting a level of 4 or more
5206may be helpful when debugging setup issues with the build daemon.
5207
5208@item --cores=@var{n}
5209@itemx -c @var{n}
5210Allow the use of up to @var{n} CPU cores for the build. The special
5211value @code{0} means to use as many CPU cores as available.
5212
5213@item --max-jobs=@var{n}
5214@itemx -M @var{n}
5215Allow at most @var{n} build jobs in parallel. @xref{Invoking
5216guix-daemon, @code{--max-jobs}}, for details about this option and the
5217equivalent @command{guix-daemon} option.
5218
5219@end table
5220
5221Behind the scenes, @command{guix build} is essentially an interface to
5222the @code{package-derivation} procedure of the @code{(guix packages)}
5223module, and to the @code{build-derivations} procedure of the @code{(guix
5224derivations)} module.
5225
5226In addition to options explicitly passed on the command line,
5227@command{guix build} and other @command{guix} commands that support
5228building honor the @code{GUIX_BUILD_OPTIONS} environment variable.
5229
5230@defvr {Environment Variable} GUIX_BUILD_OPTIONS
5231Users can define this variable to a list of command line options that
5232will automatically be used by @command{guix build} and other
5233@command{guix} commands that can perform builds, as in the example
5234below:
5235
5236@example
5237$ export GUIX_BUILD_OPTIONS="--no-substitutes -c 2 -L /foo/bar"
5238@end example
5239
5240These options are parsed independently, and the result is appended to
5241the parsed command-line options.
5242@end defvr
5243
88ad6ded
LC
5244
5245@node Package Transformation Options
5246@subsection Package Transformation Options
5247
5248@cindex package variants
5249Another set of command-line options supported by @command{guix build}
b8638f03 5250and also @command{guix package} are @dfn{package transformation
f97c9175 5251options}. These are options that make it possible to define @dfn{package
b8638f03
LC
5252variants}---for instance, packages built from different source code.
5253This is a convenient way to create customized packages on the fly
5254without having to type in the definitions of package variants
5255(@pxref{Defining Packages}).
88ad6ded
LC
5256
5257@table @code
5258
5259@item --with-source=@var{source}
5260Use @var{source} as the source of the corresponding package.
5261@var{source} must be a file name or a URL, as for @command{guix
5262download} (@pxref{Invoking guix download}).
5263
f97c9175
AE
5264The ``corresponding package'' is taken to be the one specified on the
5265command line the name of which matches the base of @var{source}---e.g.,
5266if @var{source} is @code{/src/guile-2.0.10.tar.gz}, the corresponding
88ad6ded 5267package is @code{guile}. Likewise, the version string is inferred from
f97c9175 5268@var{source}; in the previous example, it is @code{2.0.10}.
88ad6ded
LC
5269
5270This option allows users to try out versions of packages other than the
5271one provided by the distribution. The example below downloads
5272@file{ed-1.7.tar.gz} from a GNU mirror and uses that as the source for
5273the @code{ed} package:
5274
5275@example
5276guix build ed --with-source=mirror://gnu/ed/ed-1.7.tar.gz
5277@end example
5278
5279As a developer, @code{--with-source} makes it easy to test release
5280candidates:
5281
5282@example
5283guix build guile --with-source=../guile-2.0.9.219-e1bb7.tar.xz
5284@end example
5285
5286@dots{} or to build from a checkout in a pristine environment:
5287
5288@example
5289$ git clone git://git.sv.gnu.org/guix.git
5290$ guix build guix --with-source=./guix
5291@end example
5292
47c0f92c
LC
5293@item --with-input=@var{package}=@var{replacement}
5294Replace dependency on @var{package} by a dependency on
5295@var{replacement}. @var{package} must be a package name, and
5296@var{replacement} must be a package specification such as @code{guile}
5297or @code{guile@@1.8}.
5298
f97c9175 5299For instance, the following command builds Guix, but replaces its
47c0f92c 5300dependency on the current stable version of Guile with a dependency on
f6396d86 5301the legacy version of Guile, @code{guile@@2.0}:
47c0f92c
LC
5302
5303@example
f6396d86 5304guix build --with-input=guile=guile@@2.0 guix
47c0f92c
LC
5305@end example
5306
5307This is a recursive, deep replacement. So in this example, both
5308@code{guix} and its dependency @code{guile-json} (which also depends on
f6396d86 5309@code{guile}) get rebuilt against @code{guile@@2.0}.
47c0f92c 5310
2a75b0b6
LC
5311This is implemented using the @code{package-input-rewriting} Scheme
5312procedure (@pxref{Defining Packages, @code{package-input-rewriting}}).
645b9df8
LC
5313
5314@item --with-graft=@var{package}=@var{replacement}
5315This is similar to @code{--with-input} but with an important difference:
9b4ec573 5316instead of rebuilding the whole dependency chain, @var{replacement} is
645b9df8
LC
5317built and then @dfn{grafted} onto the binaries that were initially
5318referring to @var{package}. @xref{Security Updates}, for more
5319information on grafts.
5320
5321For example, the command below grafts version 3.5.4 of GnuTLS onto Wget
5322and all its dependencies, replacing references to the version of GnuTLS
5323they currently refer to:
5324
5325@example
5326guix build --with-graft=gnutls=gnutls@@3.5.4 wget
5327@end example
5328
5329This has the advantage of being much faster than rebuilding everything.
5330But there is a caveat: it works if and only if @var{package} and
5331@var{replacement} are strictly compatible---for example, if they provide
5332a library, the application binary interface (ABI) of those libraries
5333must be compatible. If @var{replacement} is somehow incompatible with
5334@var{package}, then the resulting package may be unusable. Use with
5335care!
5336
88ad6ded
LC
5337@end table
5338
ccd7158d
LC
5339@node Additional Build Options
5340@subsection Additional Build Options
5341
5342The command-line options presented below are specific to @command{guix
5343build}.
c78bd12b
LC
5344
5345@table @code
5346
5284339d
LC
5347@item --quiet
5348@itemx -q
5349Build quietly, without displaying the build log. Upon completion, the
5350build log is kept in @file{/var} (or similar) and can always be
5351retrieved using the @option{--log-file} option.
5352
34a1783f
DT
5353@item --file=@var{file}
5354@itemx -f @var{file}
5355
5356Build the package or derivation that the code within @var{file}
5357evaluates to.
5358
5359As an example, @var{file} might contain a package definition like this
5360(@pxref{Defining Packages}):
5361
5362@example
5363@verbatiminclude package-hello.scm
5364@end example
5365
c78bd12b
LC
5366@item --expression=@var{expr}
5367@itemx -e @var{expr}
ac5de156 5368Build the package or derivation @var{expr} evaluates to.
c78bd12b 5369
5401dd75 5370For example, @var{expr} may be @code{(@@ (gnu packages guile)
c78bd12b
LC
5371guile-1.8)}, which unambiguously designates this specific variant of
5372version 1.8 of Guile.
5373
f97c9175 5374Alternatively, @var{expr} may be a G-expression, in which case it is used
56b82106
LC
5375as a build program passed to @code{gexp->derivation}
5376(@pxref{G-Expressions}).
5377
5378Lastly, @var{expr} may refer to a zero-argument monadic procedure
ac5de156
LC
5379(@pxref{The Store Monad}). The procedure must return a derivation as a
5380monadic value, which is then passed through @code{run-with-store}.
5381
c78bd12b
LC
5382@item --source
5383@itemx -S
f97c9175 5384Build the source derivations of the packages, rather than the packages
c78bd12b
LC
5385themselves.
5386
e49951eb 5387For instance, @code{guix build -S gcc} returns something like
f97c9175
AE
5388@file{/gnu/store/@dots{}-gcc-4.7.2.tar.bz2}, which is the GCC
5389source tarball.
c78bd12b 5390
f9cc8971 5391The returned source tarball is the result of applying any patches and
f97c9175 5392code snippets specified in the package @code{origin} (@pxref{Defining
f9cc8971
LC
5393Packages}).
5394
2cdfe13d
EB
5395@item --sources
5396Fetch and return the source of @var{package-or-derivation} and all their
5397dependencies, recursively. This is a handy way to obtain a local copy
5398of all the source code needed to build @var{packages}, allowing you to
5399eventually build them even without network access. It is an extension
5400of the @code{--source} option and can accept one of the following
5401optional argument values:
5402
5403@table @code
5404@item package
5405This value causes the @code{--sources} option to behave in the same way
5406as the @code{--source} option.
5407
5408@item all
f97c9175
AE
5409Build the source derivations of all packages, including any source that
5410might be listed as @code{inputs}. This is the default value.
2cdfe13d
EB
5411
5412@example
5413$ guix build --sources tzdata
5414The following derivations will be built:
5415 /gnu/store/@dots{}-tzdata2015b.tar.gz.drv
5416 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
5417@end example
5418
5419@item transitive
f97c9175
AE
5420Build the source derivations of all packages, as well of all transitive
5421inputs to the packages. This can be used e.g. to
2cdfe13d
EB
5422prefetch package source for later offline building.
5423
5424@example
5425$ guix build --sources=transitive tzdata
5426The following derivations will be built:
5427 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
5428 /gnu/store/@dots{}-findutils-4.4.2.tar.xz.drv
5429 /gnu/store/@dots{}-grep-2.21.tar.xz.drv
5430 /gnu/store/@dots{}-coreutils-8.23.tar.xz.drv
5431 /gnu/store/@dots{}-make-4.1.tar.xz.drv
5432 /gnu/store/@dots{}-bash-4.3.tar.xz.drv
5433@dots{}
5434@end example
5435
5436@end table
5437
c78bd12b
LC
5438@item --system=@var{system}
5439@itemx -s @var{system}
5440Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of
f97c9175 5441the system type of the build host.
c78bd12b
LC
5442
5443An example use of this is on Linux-based systems, which can emulate
5444different personalities. For instance, passing
5445@code{--system=i686-linux} on an @code{x86_64-linux} system allows users
5446to build packages in a complete 32-bit environment.
5447
e55ec43d
LC
5448@item --target=@var{triplet}
5449@cindex cross-compilation
5450Cross-build for @var{triplet}, which must be a valid GNU triplet, such
5461115e
LC
5451as @code{"mips64el-linux-gnu"} (@pxref{Specifying target triplets, GNU
5452configuration triplets,, autoconf, Autoconf}).
e55ec43d 5453
a8d65643
LC
5454@anchor{build-check}
5455@item --check
5456@cindex determinism, checking
5457@cindex reproducibility, checking
5458Rebuild @var{package-or-derivation}, which are already available in the
5459store, and raise an error if the build results are not bit-for-bit
5460identical.
5461
f97c9175
AE
5462This mechanism allows you to check whether previously installed
5463substitutes are genuine (@pxref{Substitutes}), or whether the build result
5464of a package is deterministic. @xref{Invoking guix challenge}, for more
a8d65643
LC
5465background information and tools.
5466
7f3b2510
ED
5467When used in conjunction with @option{--keep-failed}, the differing
5468output is kept in the store, under @file{/gnu/store/@dots{}-check}.
5469This makes it easy to look for differences between the two results.
5470
6da5bb7b
LC
5471@item --repair
5472@cindex repairing store items
5473@cindex corruption, recovering from
5474Attempt to repair the specified store items, if they are corrupt, by
5475re-downloading or rebuilding them.
5476
5477This operation is not atomic and thus restricted to @code{root}.
5478
c78bd12b
LC
5479@item --derivations
5480@itemx -d
5481Return the derivation paths, not the output paths, of the given
5482packages.
5483
70ee5642
LC
5484@item --root=@var{file}
5485@itemx -r @var{file}
5486Make @var{file} a symlink to the result, and register it as a garbage
5487collector root.
5488
5489@item --log-file
3f208ad7 5490Return the build log file names or URLs for the given
f97c9175 5491@var{package-or-derivation}, or raise an error if build logs are
70ee5642
LC
5492missing.
5493
5494This works regardless of how packages or derivations are specified. For
5495instance, the following invocations are equivalent:
5496
5497@example
5498guix build --log-file `guix build -d guile`
5499guix build --log-file `guix build guile`
5500guix build --log-file guile
5501guix build --log-file -e '(@@ (gnu packages guile) guile-2.0)'
5502@end example
5503
3f208ad7
LC
5504If a log is unavailable locally, and unless @code{--no-substitutes} is
5505passed, the command looks for a corresponding log on one of the
5506substitute servers (as specified with @code{--substitute-urls}.)
70ee5642 5507
f97c9175
AE
5508So for instance, imagine you want to see the build log of GDB on MIPS,
5509but you are actually on an @code{x86_64} machine:
3f208ad7
LC
5510
5511@example
a01ad638 5512$ guix build --log-file gdb -s mips64el-linux
df061d07 5513https://hydra.gnu.org/log/@dots{}-gdb-7.10
3f208ad7
LC
5514@end example
5515
5516You can freely access a huge library of build logs!
70ee5642
LC
5517@end table
5518
fc06b15e
AP
5519@node Debugging Build Failures
5520@subsection Debugging Build Failures
5521
5522@cindex build failures, debugging
5523When defining a new package (@pxref{Defining Packages}), you will
5524probably find yourself spending some time debugging and tweaking the
5525build until it succeeds. To do that, you need to operate the build
5526commands yourself in an environment as close as possible to the one the
5527build daemon uses.
5528
5529To that end, the first thing to do is to use the @option{--keep-failed}
5530or @option{-K} option of @command{guix build}, which will keep the
5531failed build tree in @file{/tmp} or whatever directory you specified as
5532@code{TMPDIR} (@pxref{Invoking guix build, @code{--keep-failed}}).
5533
5534From there on, you can @command{cd} to the failed build tree and source
5535the @file{environment-variables} file, which contains all the
5536environment variable definitions that were in place when the build
5537failed. So let's say you're debugging a build failure in package
5538@code{foo}; a typical session would look like this:
5539
5540@example
5541$ guix build foo -K
5542@dots{} @i{build fails}
5543$ cd /tmp/guix-build-foo.drv-0
5544$ source ./environment-variables
5545$ cd foo-1.2
5546@end example
5547
5548Now, you can invoke commands as if you were the daemon (almost) and
5549troubleshoot your build process.
5550
5551Sometimes it happens that, for example, a package's tests pass when you
5552run them manually but they fail when the daemon runs them. This can
5553happen because the daemon runs builds in containers where, unlike in our
5554environment above, network access is missing, @file{/bin/sh} does not
5555exist, etc. (@pxref{Build Environment Setup}).
5556
5557In such cases, you may need to run inspect the build process from within
5558a container similar to the one the build daemon creates:
5559
5560@example
5561$ guix build -K foo
5562@dots{}
5563$ cd /tmp/guix-build-foo.drv-0
fa511e29 5564$ guix environment --no-grafts -C foo --ad-hoc strace gdb
fc06b15e
AP
5565[env]# source ./environment-variables
5566[env]# cd foo-1.2
5567@end example
5568
5569Here, @command{guix environment -C} creates a container and spawns a new
5570shell in it (@pxref{Invoking guix environment}). The @command{--ad-hoc
5571strace gdb} part adds the @command{strace} and @command{gdb} commands to
fa511e29
LC
5572the container, which would may find handy while debugging. The
5573@option{--no-grafts} option makes sure we get the exact same
5574environment, with ungrafted packages (@pxref{Security Updates}, for more
5575info on grafts).
fc06b15e
AP
5576
5577To get closer to a container like that used by the build daemon, we can
5578remove @file{/bin/sh}:
5579
5580@example
5581[env]# rm /bin/sh
5582@end example
5583
5584(Don't worry, this is harmless: this is all happening in the throw-away
5585container created by @command{guix environment}.)
5586
5587The @command{strace} command is probably not in the search path, but we
5588can run:
5589
5590@example
5591[env]# $GUIX_ENVIRONMENT/bin/strace -f -o log make check
5592@end example
5593
5594In this way, not only you will have reproduced the environment variables
5595the daemon uses, you will also be running the build process in a container
5596similar to the one the daemon uses.
5597
16eb115e 5598
39bee8a2
LC
5599@node Invoking guix edit
5600@section Invoking @command{guix edit}
5601
e32171ee 5602@cindex @command{guix edit}
39bee8a2
LC
5603@cindex package definition, editing
5604So many packages, so many source files! The @command{guix edit} command
424a323e
GC
5605facilitates the life of users and packagers by pointing their editor at
5606the source file containing the definition of the specified packages.
5607For instance:
39bee8a2
LC
5608
5609@example
7b9a66e5 5610guix edit gcc@@4.9 vim
39bee8a2
LC
5611@end example
5612
5613@noindent
6237b9fa 5614launches the program specified in the @code{VISUAL} or in the
424a323e 5615@code{EDITOR} environment variable to view the recipe of GCC@tie{}4.9.3
6237b9fa 5616and that of Vim.
39bee8a2 5617
424a323e
GC
5618If you are using a Guix Git checkout (@pxref{Building from Git}), or
5619have created your own packages on @code{GUIX_PACKAGE_PATH}
5620(@pxref{Defining Packages}), you will be able to edit the package
5621recipes. Otherwise, you will be able to examine the read-only recipes
5622for packages currently in the store.
5623
39bee8a2 5624
210cc920
LC
5625@node Invoking guix download
5626@section Invoking @command{guix download}
5627
e32171ee
JD
5628@cindex @command{guix download}
5629@cindex downloading package sources
210cc920 5630When writing a package definition, developers typically need to download
f97c9175 5631a source tarball, compute its SHA256 hash, and write that
210cc920
LC
5632hash in the package definition (@pxref{Defining Packages}). The
5633@command{guix download} tool helps with this task: it downloads a file
5634from the given URI, adds it to the store, and prints both its file name
5635in the store and its SHA256 hash.
5636
5637The fact that the downloaded file is added to the store saves bandwidth:
5638when the developer eventually tries to build the newly defined package
5639with @command{guix build}, the source tarball will not have to be
5640downloaded again because it is already in the store. It is also a
5641convenient way to temporarily stash files, which may be deleted
5642eventually (@pxref{Invoking guix gc}).
5643
5644The @command{guix download} command supports the same URIs as used in
5645package definitions. In particular, it supports @code{mirror://} URIs.
5646@code{https} URIs (HTTP over TLS) are supported @emph{provided} the
5647Guile bindings for GnuTLS are available in the user's environment; when
537c8bb3
LC
5648they are not available, an error is raised. @xref{Guile Preparations,
5649how to install the GnuTLS bindings for Guile,, gnutls-guile,
5650GnuTLS-Guile}, for more information.
210cc920 5651
bc3c41ce
LC
5652@command{guix download} verifies HTTPS server certificates by loading
5653the certificates of X.509 authorities from the directory pointed to by
5654the @code{SSL_CERT_DIR} environment variable (@pxref{X.509
64b8695c 5655Certificates}), unless @option{--no-check-certificate} is used.
bc3c41ce 5656
64b8695c 5657The following options are available:
210cc920
LC
5658
5659@table @code
5660@item --format=@var{fmt}
5661@itemx -f @var{fmt}
5662Write the hash in the format specified by @var{fmt}. For more
081145cf 5663information on the valid values for @var{fmt}, @pxref{Invoking guix hash}.
64b8695c
LC
5664
5665@item --no-check-certificate
5666Do not validate the X.509 certificates of HTTPS servers.
5667
5668When using this option, you have @emph{absolutely no guarantee} that you
5669are communicating with the authentic server responsible for the given
5670URL, which makes you vulnerable to ``man-in-the-middle'' attacks.
5671
1bcc87bb
LC
5672@item --output=@var{file}
5673@itemx -o @var{file}
5674Save the downloaded file to @var{file} instead of adding it to the
5675store.
210cc920
LC
5676@end table
5677
6c365eca
NK
5678@node Invoking guix hash
5679@section Invoking @command{guix hash}
5680
e32171ee 5681@cindex @command{guix hash}
210cc920 5682The @command{guix hash} command computes the SHA256 hash of a file.
6c365eca
NK
5683It is primarily a convenience tool for anyone contributing to the
5684distribution: it computes the cryptographic hash of a file, which can be
5685used in the definition of a package (@pxref{Defining Packages}).
5686
5687The general syntax is:
5688
5689@example
5690guix hash @var{option} @var{file}
5691@end example
5692
343dc117
LC
5693When @var{file} is @code{-} (a hyphen), @command{guix hash} computes the
5694hash of data read from standard input. @command{guix hash} has the
5695following options:
6c365eca
NK
5696
5697@table @code
5698
5699@item --format=@var{fmt}
5700@itemx -f @var{fmt}
210cc920 5701Write the hash in the format specified by @var{fmt}.
6c365eca
NK
5702
5703Supported formats: @code{nix-base32}, @code{base32}, @code{base16}
5704(@code{hex} and @code{hexadecimal} can be used as well).
5705
5706If the @option{--format} option is not specified, @command{guix hash}
5707will output the hash in @code{nix-base32}. This representation is used
5708in the definitions of packages.
5709
3140f2df
LC
5710@item --recursive
5711@itemx -r
5712Compute the hash on @var{file} recursively.
5713
5714In this case, the hash is computed on an archive containing @var{file},
f97c9175
AE
5715including its children if it is a directory. Some of the metadata of
5716@var{file} is part of the archive; for instance, when @var{file} is a
3140f2df 5717regular file, the hash is different depending on whether @var{file} is
f97c9175 5718executable or not. Metadata such as time stamps has no impact on the
3140f2df
LC
5719hash (@pxref{Invoking guix archive}).
5720@c FIXME: Replace xref above with xref to an ``Archive'' section when
5721@c it exists.
5722
392a4e12
JN
5723@item --exclude-vcs
5724@itemx -x
5725When combined with @option{--recursive}, exclude version control system
5726directories (@file{.bzr}, @file{.git}, @file{.hg}, etc.)
5727
db97a03a
LC
5728@vindex git-fetch
5729As an example, here is how you would compute the hash of a Git checkout,
5730which is useful when using the @code{git-fetch} method (@pxref{origin
5731Reference}):
5732
5733@example
5734$ git clone http://example.org/foo.git
5735$ cd foo
392a4e12 5736$ guix hash -rx .
db97a03a 5737@end example
6c365eca
NK
5738@end table
5739
2f7d2d91
LC
5740@node Invoking guix import
5741@section Invoking @command{guix import}
5742
5743@cindex importing packages
5744@cindex package import
5745@cindex package conversion
e32171ee 5746@cindex Invoking @command{guix import}
f97c9175
AE
5747The @command{guix import} command is useful for people who would like to
5748add a package to the distribution with as little work as
5749possible---a legitimate demand. The command knows of a few
5750repositories from which it can ``import'' package metadata. The result
2f7d2d91
LC
5751is a package definition, or a template thereof, in the format we know
5752(@pxref{Defining Packages}).
5753
5754The general syntax is:
5755
5756@example
5757guix import @var{importer} @var{options}@dots{}
5758@end example
5759
5760@var{importer} specifies the source from which to import package
f97c9175 5761metadata, and @var{options} specifies a package identifier and other
2f7d2d91
LC
5762options specific to @var{importer}. Currently, the available
5763``importers'' are:
5764
5765@table @code
5766@item gnu
f97c9175 5767Import metadata for the given GNU package. This provides a template
2f7d2d91
LC
5768for the latest version of that GNU package, including the hash of its
5769source tarball, and its canonical synopsis and description.
5770
f97c9175 5771Additional information such as the package dependencies and its
2f7d2d91
LC
5772license needs to be figured out manually.
5773
5774For example, the following command returns a package definition for
5775GNU@tie{}Hello:
5776
5777@example
5778guix import gnu hello
5779@end example
5780
5781Specific command-line options are:
5782
5783@table @code
5784@item --key-download=@var{policy}
5785As for @code{guix refresh}, specify the policy to handle missing OpenPGP
f97c9175 5786keys when verifying the package signature. @xref{Invoking guix
2f7d2d91
LC
5787refresh, @code{--key-download}}.
5788@end table
5789
5790@item pypi
5791@cindex pypi
f97c9175 5792Import metadata from the @uref{https://pypi.python.org/, Python Package
2f7d2d91
LC
5793Index}@footnote{This functionality requires Guile-JSON to be installed.
5794@xref{Requirements}.}. Information is taken from the JSON-formatted
5795description available at @code{pypi.python.org} and usually includes all
266785d2
CR
5796the relevant information, including package dependencies. For maximum
5797efficiency, it is recommended to install the @command{unzip} utility, so
5798that the importer can unzip Python wheels and gather data from them.
2f7d2d91 5799
f97c9175 5800The command below imports metadata for the @code{itsdangerous} Python
2f7d2d91
LC
5801package:
5802
5803@example
5804guix import pypi itsdangerous
5805@end example
5806
3aae8145
DT
5807@item gem
5808@cindex gem
f97c9175 5809Import metadata from @uref{https://rubygems.org/,
3aae8145
DT
5810RubyGems}@footnote{This functionality requires Guile-JSON to be
5811installed. @xref{Requirements}.}. Information is taken from the
5812JSON-formatted description available at @code{rubygems.org} and includes
5813most relevant information, including runtime dependencies. There are
f97c9175 5814some caveats, however. The metadata doesn't distinguish between
3aae8145
DT
5815synopses and descriptions, so the same string is used for both fields.
5816Additionally, the details of non-Ruby dependencies required to build
5817native extensions is unavailable and left as an exercise to the
5818packager.
5819
f97c9175 5820The command below imports metadata for the @code{rails} Ruby package:
3aae8145
DT
5821
5822@example
5823guix import gem rails
5824@end example
5825
d45dc6da
EB
5826@item cpan
5827@cindex CPAN
3c192e4e
AE
5828Import metadata from @uref{https://www.metacpan.org/, MetaCPAN}@footnote{This
5829functionality requires Guile-JSON to be installed.
5830@xref{Requirements}.}.
f97c9175 5831Information is taken from the JSON-formatted metadata provided through
d45dc6da 5832@uref{https://api.metacpan.org/, MetaCPAN's API} and includes most
66392e47
EB
5833relevant information, such as module dependencies. License information
5834should be checked closely. If Perl is available in the store, then the
5835@code{corelist} utility will be used to filter core modules out of the
5836list of dependencies.
d45dc6da 5837
f97c9175 5838The command command below imports metadata for the @code{Acme::Boolean}
d45dc6da
EB
5839Perl module:
5840
5841@example
5842guix import cpan Acme::Boolean
5843@end example
5844
e1248602
RW
5845@item cran
5846@cindex CRAN
d0bd632f 5847@cindex Bioconductor
f97c9175 5848Import metadata from @uref{http://cran.r-project.org/, CRAN}, the
e1248602
RW
5849central repository for the @uref{http://r-project.org, GNU@tie{}R
5850statistical and graphical environment}.
5851
f97c9175 5852Information is extracted from the @code{DESCRIPTION} file of the package.
e1248602 5853
f97c9175 5854The command command below imports metadata for the @code{Cairo}
e1248602
RW
5855R package:
5856
5857@example
5858guix import cran Cairo
5859@end example
5860
64ce53eb
RW
5861When @code{--recursive} is added, the importer will traverse the
5862dependency graph of the given upstream package recursively and generate
5863package expressions for all those packages that are not yet in Guix.
5864
f97c9175 5865When @code{--archive=bioconductor} is added, metadata is imported from
d0bd632f
RW
5866@uref{http://www.bioconductor.org/, Bioconductor}, a repository of R
5867packages for for the analysis and comprehension of high-throughput
5868genomic data in bioinformatics.
5869
f97c9175 5870Information is extracted from the @code{DESCRIPTION} file of a package
d0bd632f
RW
5871published on the web interface of the Bioconductor SVN repository.
5872
f97c9175 5873The command below imports metadata for the @code{GenomicRanges}
d0bd632f
RW
5874R package:
5875
5876@example
5877guix import cran --archive=bioconductor GenomicRanges
5878@end example
5879
afbc9419
RW
5880@item texlive
5881@cindex TeX Live
5882@cindex CTAN
5883Import metadata from @uref{http://www.ctan.org/, CTAN}, the
5884comprehensive TeX archive network for TeX packages that are part of the
5885@uref{https://www.tug.org/texlive/, TeX Live distribution}.
5886
5887Information about the package is obtained through the XML API provided
5888by CTAN, while the source code is downloaded from the SVN repository of
5889the Tex Live project. This is done because the CTAN does not keep
5890versioned archives.
5891
5892The command command below imports metadata for the @code{fontspec}
5893TeX package:
5894
5895@example
5896guix import texlive fontspec
5897@end example
5898
5899When @code{--archive=DIRECTORY} is added, the source code is downloaded
5900not from the @file{latex} sub-directory of the @file{texmf-dist/source}
5901tree in the TeX Live SVN repository, but from the specified sibling
5902directory under the same root.
5903
5904The command below imports metadata for the @code{ifxetex} package from
5905CTAN while fetching the sources from the directory
5906@file{texmf/source/generic}:
5907
5908@example
5909guix import texlive --archive=generic ifxetex
5910@end example
5911
fb1db385
RW
5912@item json
5913@cindex JSON, import
5914Import package metadata from a local JSON file@footnote{This
5915functionality requires Guile-JSON to be installed.
5916@xref{Requirements}.}. Consider the following example package
5917definition in JSON format:
5918
5919@example
5920@{
5921 "name": "hello",
5922 "version": "2.10",
5923 "source": "mirror://gnu/hello/hello-2.10.tar.gz",
5924 "build-system": "gnu",
5925 "home-page": "https://www.gnu.org/software/hello/",
5926 "synopsis": "Hello, GNU world: An example GNU package",
5927 "description": "GNU Hello prints a greeting.",
5928 "license": "GPL-3.0+",
5929 "native-inputs": ["gcc@@6"]
5930@}
5931@end example
5932
5933The field names are the same as for the @code{<package>} record
5934(@xref{Defining Packages}). References to other packages are provided
5935as JSON lists of quoted package specification strings such as
5936@code{guile} or @code{guile@@2.0}.
5937
5938The importer also supports a more explicit source definition using the
5939common fields for @code{<origin>} records:
5940
5941@example
5942@{
5943 @dots{}
5944 "source": @{
5945 "method": "url-fetch",
5946 "uri": "mirror://gnu/hello/hello-2.10.tar.gz",
5947 "sha256": @{
5948 "base32": "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"
5949 @}
5950 @}
5951 @dots{}
5952@}
5953@end example
5954
5955The command below reads metadata from the JSON file @code{hello.json}
5956and outputs a package expression:
5957
5958@example
5959guix import json hello.json
5960@end example
5961
2f7d2d91 5962@item nix
f97c9175 5963Import metadata from a local copy of the source of the
2f7d2d91
LC
5964@uref{http://nixos.org/nixpkgs/, Nixpkgs distribution}@footnote{This
5965relies on the @command{nix-instantiate} command of
5966@uref{http://nixos.org/nix/, Nix}.}. Package definitions in Nixpkgs are
5967typically written in a mixture of Nix-language and Bash code. This
5968command only imports the high-level package structure that is written in
5969the Nix language. It normally includes all the basic fields of a
5970package definition.
5971
5972When importing a GNU package, the synopsis and descriptions are replaced
5973by their canonical upstream variant.
5974
961d0d2d
LC
5975Usually, you will first need to do:
5976
5977@example
5978export NIX_REMOTE=daemon
5979@end example
5980
5981@noindent
5982so that @command{nix-instantiate} does not try to open the Nix database.
5983
2f7d2d91
LC
5984As an example, the command below imports the package definition of
5985LibreOffice (more precisely, it imports the definition of the package
5986bound to the @code{libreoffice} top-level attribute):
5987
5988@example
5989guix import nix ~/path/to/nixpkgs libreoffice
5990@end example
863af4e1
FB
5991
5992@item hackage
5993@cindex hackage
f97c9175 5994Import metadata from the Haskell community's central package archive
863af4e1
FB
5995@uref{https://hackage.haskell.org/, Hackage}. Information is taken from
5996Cabal files and includes all the relevant information, including package
5997dependencies.
5998
5999Specific command-line options are:
6000
6001@table @code
a4154748
FB
6002@item --stdin
6003@itemx -s
f97c9175 6004Read a Cabal file from standard input.
863af4e1
FB
6005@item --no-test-dependencies
6006@itemx -t
f97c9175 6007Do not include dependencies required only by the test suites.
a4154748
FB
6008@item --cabal-environment=@var{alist}
6009@itemx -e @var{alist}
6010@var{alist} is a Scheme alist defining the environment in which the
6011Cabal conditionals are evaluated. The accepted keys are: @code{os},
6012@code{arch}, @code{impl} and a string representing the name of a flag.
6013The value associated with a flag has to be either the symbol
6014@code{true} or @code{false}. The value associated with other keys
6015has to conform to the Cabal file format definition. The default value
6016associated with the keys @code{os}, @code{arch} and @code{impl} is
f97c9175 6017@samp{linux}, @samp{x86_64} and @samp{ghc}, respectively.
863af4e1
FB
6018@end table
6019
f97c9175 6020The command below imports metadata for the latest version of the
a4154748
FB
6021@code{HTTP} Haskell package without including test dependencies and
6022specifying the value of the flag @samp{network-uri} as @code{false}:
863af4e1
FB
6023
6024@example
a4154748 6025guix import hackage -t -e "'((\"network-uri\" . false))" HTTP
863af4e1
FB
6026@end example
6027
6028A specific package version may optionally be specified by following the
1b846da8 6029package name by an at-sign and a version number as in the following example:
863af4e1
FB
6030
6031@example
1b846da8 6032guix import hackage mtl@@2.1.3.1
863af4e1 6033@end example
7f74a931 6034
bc5844d1
FB
6035@item stackage
6036@cindex stackage
6037The @code{stackage} importer is a wrapper around the @code{hackage} one.
6038It takes a package name, looks up the package version included in a
6039long-term support (LTS) @uref{https://www.stackage.org, Stackage}
6040release and uses the @code{hackage} importer to retrieve its metadata.
6041Note that it is up to you to select an LTS release compatible with the
6042GHC compiler used by Guix.
6043
6044Specific command-line options are:
6045
6046@table @code
6047@item --no-test-dependencies
6048@itemx -t
6049Do not include dependencies required only by the test suites.
6050@item --lts-version=@var{version}
6051@itemx -r @var{version}
6052@var{version} is the desired LTS release version. If omitted the latest
6053release is used.
6054@end table
6055
6056The command below imports metadata for the @code{HTTP} Haskell package
6057included in the LTS Stackage release version 7.18:
6058
6059@example
6060guix import stackage --lts-version=7.18 HTTP
6061@end example
6062
7f74a931
FB
6063@item elpa
6064@cindex elpa
f97c9175 6065Import metadata from an Emacs Lisp Package Archive (ELPA) package
7f74a931
FB
6066repository (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
6067
6068Specific command-line options are:
6069
6070@table @code
6071@item --archive=@var{repo}
6072@itemx -a @var{repo}
6073@var{repo} identifies the archive repository from which to retrieve the
6074information. Currently the supported repositories and their identifiers
6075are:
6076@itemize -
6077@item
840bd1d3 6078@uref{http://elpa.gnu.org/packages, GNU}, selected by the @code{gnu}
7f74a931
FB
6079identifier. This is the default.
6080
624144e0
LC
6081Packages from @code{elpa.gnu.org} are signed with one of the keys
6082contained in the GnuPG keyring at
6083@file{share/emacs/25.1/etc/package-keyring.gpg} (or similar) in the
6084@code{emacs} package (@pxref{Package Installation, ELPA package
6085signatures,, emacs, The GNU Emacs Manual}).
6086
7f74a931 6087@item
840bd1d3 6088@uref{http://stable.melpa.org/packages, MELPA-Stable}, selected by the
7f74a931
FB
6089@code{melpa-stable} identifier.
6090
6091@item
840bd1d3 6092@uref{http://melpa.org/packages, MELPA}, selected by the @code{melpa}
7f74a931
FB
6093identifier.
6094@end itemize
6095@end table
3e0c0365
DC
6096
6097@item crate
6098@cindex crate
6099Import metadata from the crates.io Rust package repository
6100@uref{https://crates.io, crates.io}.
2f7d2d91
LC
6101@end table
6102
6103The structure of the @command{guix import} code is modular. It would be
6104useful to have more importers for other package formats, and your help
6105is welcome here (@pxref{Contributing}).
6106
37166310
LC
6107@node Invoking guix refresh
6108@section Invoking @command{guix refresh}
6109
e32171ee 6110@cindex @command {guix refresh}
37166310
LC
6111The primary audience of the @command{guix refresh} command is developers
6112of the GNU software distribution. By default, it reports any packages
6113provided by the distribution that are outdated compared to the latest
6114upstream version, like this:
6115
6116@example
6117$ guix refresh
6118gnu/packages/gettext.scm:29:13: gettext would be upgraded from 0.18.1.1 to 0.18.2.1
6119gnu/packages/glib.scm:77:12: glib would be upgraded from 2.34.3 to 2.37.0
6120@end example
6121
e9c72306
LC
6122Alternately, one can specify packages to consider, in which case a
6123warning is emitted for packages that lack an updater:
6124
6125@example
6126$ guix refresh coreutils guile guile-ssh
6127gnu/packages/ssh.scm:205:2: warning: no updater for guile-ssh
6128gnu/packages/guile.scm:136:12: guile would be upgraded from 2.0.12 to 2.0.13
6129@end example
6130
6131@command{guix refresh} browses the upstream repository of each package and determines
6132the highest version number of the releases therein. The command
bcb571cb 6133knows how to update specific types of packages: GNU packages, ELPA
e9c72306 6134packages, etc.---see the documentation for @option{--type} below. There
bcb571cb
LC
6135are many packages, though, for which it lacks a method to determine
6136whether a new upstream release is available. However, the mechanism is
6137extensible, so feel free to get in touch with us to add a new method!
37166310
LC
6138
6139When passed @code{--update}, it modifies distribution source files to
f97c9175 6140update the version numbers and source tarball hashes of those package
37166310
LC
6141recipes (@pxref{Defining Packages}). This is achieved by downloading
6142each package's latest source tarball and its associated OpenPGP
6143signature, authenticating the downloaded tarball against its signature
6144using @command{gpg}, and finally computing its hash. When the public
6145key used to sign the tarball is missing from the user's keyring, an
6146attempt is made to automatically retrieve it from a public key server;
f97c9175 6147when this is successful, the key is added to the user's keyring; otherwise,
37166310
LC
6148@command{guix refresh} reports an error.
6149
6150The following options are supported:
6151
6152@table @code
6153
2d7fc7da
LC
6154@item --expression=@var{expr}
6155@itemx -e @var{expr}
6156Consider the package @var{expr} evaluates to.
6157
6158This is useful to precisely refer to a package, as in this example:
6159
6160@example
6161guix refresh -l -e '(@@@@ (gnu packages commencement) glibc-final)'
6162@end example
6163
6164This command lists the dependents of the ``final'' libc (essentially all
6165the packages.)
6166
37166310
LC
6167@item --update
6168@itemx -u
38e16b49
LC
6169Update distribution source files (package recipes) in place. This is
6170usually run from a checkout of the Guix source tree (@pxref{Running
6171Guix Before It Is Installed}):
6172
6173@example
e9c72306 6174$ ./pre-inst-env guix refresh -s non-core -u
38e16b49
LC
6175@end example
6176
081145cf 6177@xref{Defining Packages}, for more information on package definitions.
37166310
LC
6178
6179@item --select=[@var{subset}]
6180@itemx -s @var{subset}
6181Select all the packages in @var{subset}, one of @code{core} or
6182@code{non-core}.
6183
6184The @code{core} subset refers to all the packages at the core of the
6185distribution---i.e., packages that are used to build ``everything
6186else''. This includes GCC, libc, Binutils, Bash, etc. Usually,
6187changing one of these packages in the distribution entails a rebuild of
6188all the others. Thus, such updates are an inconvenience to users in
6189terms of build time or bandwidth used to achieve the upgrade.
6190
6191The @code{non-core} subset refers to the remaining packages. It is
6192typically useful in cases where an update of the core packages would be
6193inconvenient.
6194
1335ac31
MO
6195@item --manifest=@var{file}
6196@itemx -m @var{file}
6197Select all the packages from the manifest in @var{file}. This is useful to
6198check if any packages of the user manifest can be updated.
6199
bcb571cb
LC
6200@item --type=@var{updater}
6201@itemx -t @var{updater}
7191adc5
AK
6202Select only packages handled by @var{updater} (may be a comma-separated
6203list of updaters). Currently, @var{updater} may be one of:
bcb571cb
LC
6204
6205@table @code
6206@item gnu
6207the updater for GNU packages;
e80c0f85
LC
6208@item gnome
6209the updater for GNOME packages;
9c97afe8
DC
6210@item kde
6211the updater for KDE packages;
62061d6b
AW
6212@item xorg
6213the updater for X.org packages;
2fd370e8
LC
6214@item kernel.org
6215the updater for packages hosted on kernel.org;
bcb571cb 6216@item elpa
d882c235
LC
6217the updater for @uref{http://elpa.gnu.org/, ELPA} packages;
6218@item cran
b9d044ef 6219the updater for @uref{http://cran.r-project.org/, CRAN} packages;
d0bd632f
RW
6220@item bioconductor
6221the updater for @uref{http://www.bioconductor.org/, Bioconductor} R packages;
200cdf81
EB
6222@item cpan
6223the updater for @uref{http://www.cpan.org/, CPAN} packages;
bab020d7 6224@item pypi
b9d044ef 6225the updater for @uref{https://pypi.python.org, PyPI} packages.
fbc5b815
BW
6226@item gem
6227the updater for @uref{https://rubygems.org, RubyGems} packages.
917a2a58
BW
6228@item github
6229the updater for @uref{https://github.com, GitHub} packages.
42efe27a
EB
6230@item hackage
6231the updater for @uref{https://hackage.haskell.org, Hackage} packages.
bc5844d1
FB
6232@item stackage
6233the updater for @uref{https://www.stackage.org, Stackage} packages.
8ac52987
DC
6234@item crate
6235the updater for @uref{https://crates.io, Crates} packages.
bcb571cb
LC
6236@end table
6237
f97c9175
AE
6238For instance, the following command only checks for updates of Emacs
6239packages hosted at @code{elpa.gnu.org} and for updates of CRAN packages:
bcb571cb
LC
6240
6241@example
7191adc5 6242$ guix refresh --type=elpa,cran
d882c235 6243gnu/packages/statistics.scm:819:13: r-testthat would be upgraded from 0.10.0 to 0.11.0
bcb571cb
LC
6244gnu/packages/emacs.scm:856:13: emacs-auctex would be upgraded from 11.88.6 to 11.88.9
6245@end example
6246
37166310
LC
6247@end table
6248
6249In addition, @command{guix refresh} can be passed one or more package
6250names, as in this example:
6251
6252@example
e9c72306 6253$ ./pre-inst-env guix refresh -u emacs idutils gcc@@4.8
37166310
LC
6254@end example
6255
6256@noindent
6257The command above specifically updates the @code{emacs} and
6258@code{idutils} packages. The @code{--select} option would have no
6259effect in this case.
6260
7d193ec3
EB
6261When considering whether to upgrade a package, it is sometimes
6262convenient to know which packages would be affected by the upgrade and
6263should be checked for compatibility. For this the following option may
6264be used when passing @command{guix refresh} one or more package names:
6265
6266@table @code
6267
6ffa706b
AK
6268@item --list-updaters
6269@itemx -L
6270List available updaters and exit (see @option{--type} above.)
6271
3676f892
LC
6272For each updater, display the fraction of packages it covers; at the
6273end, display the fraction of packages covered by all these updaters.
6274
7d193ec3
EB
6275@item --list-dependent
6276@itemx -l
6277List top-level dependent packages that would need to be rebuilt as a
6278result of upgrading one or more packages.
6279
b96a0640
LC
6280@xref{Invoking guix graph, the @code{reverse-package} type of
6281@command{guix graph}}, for information on how to visualize the list of
6282dependents of a package.
6283
7d193ec3
EB
6284@end table
6285
6286Be aware that the @code{--list-dependent} option only
6287@emph{approximates} the rebuilds that would be required as a result of
6288an upgrade. More rebuilds might be required under some circumstances.
6289
6290@example
7779ab61
LC
6291$ guix refresh --list-dependent flex
6292Building the following 120 packages would ensure 213 dependent packages are rebuilt:
6d1a5e5f 6293hop@@2.4.0 geiser@@0.4 notmuch@@0.18 mu@@0.9.9.5 cflow@@1.4 idutils@@4.6 @dots{}
7d193ec3
EB
6294@end example
6295
6296The command above lists a set of packages that could be built to check
6297for compatibility with an upgraded @code{flex} package.
6298
f9230085
LC
6299The following options can be used to customize GnuPG operation:
6300
6301@table @code
6302
f9230085
LC
6303@item --gpg=@var{command}
6304Use @var{command} as the GnuPG 2.x command. @var{command} is searched
6305for in @code{$PATH}.
6306
2bc53ba9
LC
6307@item --key-download=@var{policy}
6308Handle missing OpenPGP keys according to @var{policy}, which may be one
6309of:
6310
6311@table @code
6312@item always
6313Always download missing OpenPGP keys from the key server, and add them
6314to the user's GnuPG keyring.
6315
6316@item never
6317Never try to download missing OpenPGP keys. Instead just bail out.
6318
6319@item interactive
6320When a package signed with an unknown OpenPGP key is encountered, ask
6321the user whether to download it or not. This is the default behavior.
6322@end table
6323
6324@item --key-server=@var{host}
6325Use @var{host} as the OpenPGP key server when importing a public key.
6326
f9230085
LC
6327@end table
6328
917a2a58
BW
6329The @code{github} updater uses the
6330@uref{https://developer.github.com/v3/, GitHub API} to query for new
6331releases. When used repeatedly e.g. when refreshing all packages,
6332GitHub will eventually refuse to answer any further API requests. By
6333default 60 API requests per hour are allowed, and a full refresh on all
6334GitHub packages in Guix requires more than this. Authentication with
6335GitHub through the use of an API token alleviates these limits. To use
6336an API token, set the environment variable @code{GUIX_GITHUB_TOKEN} to a
6337token procured from @uref{https://github.com/settings/tokens} or
6338otherwise.
6339
6340
b4f5e0e8
CR
6341@node Invoking guix lint
6342@section Invoking @command{guix lint}
e32171ee
JD
6343
6344@cindex @command{guix lint}
6345@cindex package, checking for errors
f97c9175
AE
6346The @command{guix lint} command is meant to help package developers avoid
6347common errors and use a consistent style. It runs a number of checks on
6348a given set of packages in order to find common mistakes in their
873c4085
LC
6349definitions. Available @dfn{checkers} include (see
6350@code{--list-checkers} for a complete list):
6351
6352@table @code
6353@item synopsis
6354@itemx description
6355Validate certain typographical and stylistic rules about package
6356descriptions and synopses.
6357
6358@item inputs-should-be-native
6359Identify inputs that should most likely be native inputs.
6360
6361@item source
6362@itemx home-page
fac46e3f 6363@itemx mirror-url
50f5c46d 6364@itemx source-file-name
873c4085 6365Probe @code{home-page} and @code{source} URLs and report those that are
fac46e3f
LC
6366invalid. Suggest a @code{mirror://} URL when applicable. Check that
6367the source file name is meaningful, e.g. is not
f97c9175
AE
6368just a version number or ``git-checkout'', without a declared
6369@code{file-name} (@pxref{origin Reference}).
40a7d4e5 6370
5432734b 6371@item cve
09866b39
LC
6372@cindex security vulnerabilities
6373@cindex CVE, Common Vulnerabilities and Exposures
5432734b 6374Report known vulnerabilities found in the Common Vulnerabilities and
09866b39 6375Exposures (CVE) databases of the current and past year
5432734b
LC
6376@uref{https://nvd.nist.gov/download.cfm#CVE_FEED, published by the US
6377NIST}.
6378
09866b39
LC
6379To view information about a particular vulnerability, visit pages such as:
6380
6381@itemize
6382@item
6383@indicateurl{https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-YYYY-ABCD}
6384@item
6385@indicateurl{https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-YYYY-ABCD}
6386@end itemize
6387
6388@noindent
6389where @code{CVE-YYYY-ABCD} is the CVE identifier---e.g.,
6390@code{CVE-2015-7554}.
6391
99effc8f
LC
6392Package developers can specify in package recipes the
6393@uref{https://nvd.nist.gov/cpe.cfm,Common Platform Enumeration (CPE)}
6394name and version of the package when they differ from the name that Guix
6395uses, as in this example:
6396
6397@example
6398(package
6399 (name "grub")
6400 ;; @dots{}
6401 ;; CPE calls this package "grub2".
6402 (properties '((cpe-name . "grub2"))))
6403@end example
6404
40a7d4e5
LC
6405@item formatting
6406Warn about obvious source code formatting issues: trailing white space,
6407use of tabulations, etc.
873c4085 6408@end table
b4f5e0e8
CR
6409
6410The general syntax is:
6411
6412@example
6413guix lint @var{options} @var{package}@dots{}
6414@end example
6415
6416If no package is given on the command line, then all packages are checked.
6417The @var{options} may be zero or more of the following:
6418
6419@table @code
f97c9175
AE
6420@item --list-checkers
6421@itemx -l
6422List and describe all the available checkers that will be run on packages
6423and exit.
b4f5e0e8 6424
dd7c013d
CR
6425@item --checkers
6426@itemx -c
6427Only enable the checkers specified in a comma-separated list using the
6428names returned by @code{--list-checkers}.
6429
b4f5e0e8 6430@end table
37166310 6431
fcc58db6
LC
6432@node Invoking guix size
6433@section Invoking @command{guix size}
6434
e32171ee
JD
6435@cindex size
6436@cindex package size
6437@cindex closure
6438@cindex @command{guix size}
fcc58db6
LC
6439The @command{guix size} command helps package developers profile the
6440disk usage of packages. It is easy to overlook the impact of an
6441additional dependency added to a package, or the impact of using a
6442single output for a package that could easily be split (@pxref{Packages
f97c9175 6443with Multiple Outputs}). Such are the typical issues that
fcc58db6
LC
6444@command{guix size} can highlight.
6445
e1a65ae5 6446The command can be passed a package specification such as @code{gcc@@4.8}
fcc58db6
LC
6447or @code{guile:debug}, or a file name in the store. Consider this
6448example:
6449
6450@example
6451$ guix size coreutils
6452store item total self
6453/gnu/store/@dots{}-coreutils-8.23 70.0 13.9 19.8%
6454/gnu/store/@dots{}-gmp-6.0.0a 55.3 2.5 3.6%
6455/gnu/store/@dots{}-acl-2.2.52 53.7 0.5 0.7%
6456/gnu/store/@dots{}-attr-2.4.46 53.2 0.3 0.5%
6457/gnu/store/@dots{}-gcc-4.8.4-lib 52.9 15.7 22.4%
6458/gnu/store/@dots{}-glibc-2.21 37.2 37.2 53.1%
6459@end example
6460
6461@cindex closure
6462The store items listed here constitute the @dfn{transitive closure} of
6463Coreutils---i.e., Coreutils and all its dependencies, recursively---as
6464would be returned by:
6465
6466@example
6467$ guix gc -R /gnu/store/@dots{}-coreutils-8.23
6468@end example
6469
f97c9175 6470Here the output shows three columns next to store items. The first column,
fcc58db6
LC
6471labeled ``total'', shows the size in mebibytes (MiB) of the closure of
6472the store item---that is, its own size plus the size of all its
6473dependencies. The next column, labeled ``self'', shows the size of the
f97c9175
AE
6474item itself. The last column shows the ratio of the size of the item
6475itself to the space occupied by all the items listed here.
fcc58db6
LC
6476
6477In this example, we see that the closure of Coreutils weighs in at
647870@tie{}MiB, half of which is taken by libc. (That libc represents a
6479large fraction of the closure is not a problem @i{per se} because it is
6480always available on the system anyway.)
6481
6482When the package passed to @command{guix size} is available in the
6483store, @command{guix size} queries the daemon to determine its
6484dependencies, and measures its size in the store, similar to @command{du
6485-ms --apparent-size} (@pxref{du invocation,,, coreutils, GNU
6486Coreutils}).
6487
6488When the given package is @emph{not} in the store, @command{guix size}
f97c9175
AE
6489reports information based on the available substitutes
6490(@pxref{Substitutes}). This makes it possible it to profile disk usage of
6491store items that are not even on disk, only available remotely.
fcc58db6 6492
db761534
LC
6493You can also specify several package names:
6494
6495@example
6496$ guix size coreutils grep sed bash
6497store item total self
6498/gnu/store/@dots{}-coreutils-8.24 77.8 13.8 13.4%
6499/gnu/store/@dots{}-grep-2.22 73.1 0.8 0.8%
6500/gnu/store/@dots{}-bash-4.3.42 72.3 4.7 4.6%
6501/gnu/store/@dots{}-readline-6.3 67.6 1.2 1.2%
6502@dots{}
6503total: 102.3 MiB
6504@end example
6505
6506@noindent
6507In this example we see that the combination of the four packages takes
6508102.3@tie{}MiB in total, which is much less than the sum of each closure
6509since they have a lot of dependencies in common.
6510
a8f996c6 6511The available options are:
fcc58db6
LC
6512
6513@table @option
6514
d490d06e
LC
6515@item --substitute-urls=@var{urls}
6516Use substitute information from @var{urls}.
6517@xref{client-substitute-urls, the same option for @code{guix build}}.
6518
a6c1fe82
LC
6519@item --sort=@var{key}
6520Sort lines according to @var{key}, one of the following options:
6521
6522@table @code
a6c1fe82 6523@item self
fb255088
LC
6524the size of each item (the default);
6525@item closure
6526the total size of the item's closure.
a6c1fe82
LC
6527@end table
6528
a8f996c6 6529@item --map-file=@var{file}
f97c9175 6530Write a graphical map of disk usage in PNG format to @var{file}.
a8f996c6
LC
6531
6532For the example above, the map looks like this:
6533
6534@image{images/coreutils-size-map,5in,, map of Coreutils disk usage
6535produced by @command{guix size}}
6536
6537This option requires that
6538@uref{http://wingolog.org/software/guile-charting/, Guile-Charting} be
6539installed and visible in Guile's module search path. When that is not
6540the case, @command{guix size} fails as it tries to load it.
6541
fcc58db6
LC
6542@item --system=@var{system}
6543@itemx -s @var{system}
6544Consider packages for @var{system}---e.g., @code{x86_64-linux}.
6545
6546@end table
6547
88856916
LC
6548@node Invoking guix graph
6549@section Invoking @command{guix graph}
6550
6551@cindex DAG
e32171ee
JD
6552@cindex @command{guix graph}
6553@cindex package dependencies
88856916
LC
6554Packages and their dependencies form a @dfn{graph}, specifically a
6555directed acyclic graph (DAG). It can quickly become difficult to have a
f97c9175 6556mental model of the package DAG, so the @command{guix graph} command
9ea36197
LC
6557provides a visual representation of the DAG. By default,
6558@command{guix graph} emits a DAG representation in the input format of
88856916 6559@uref{http://www.graphviz.org/, Graphviz}, so its output can be passed
9ea36197
LC
6560directly to the @command{dot} command of Graphviz. It can also emit an
6561HTML page with embedded JavaScript code to display a ``chord diagram''
5899fafb
RJ
6562in a Web browser, using the @uref{https://d3js.org/, d3.js} library, or
6563emit Cypher queries to construct a graph in a graph database supporting
6564the @uref{http://www.opencypher.org/, openCypher} query language.
9ea36197 6565The general syntax is:
88856916
LC
6566
6567@example
6568guix graph @var{options} @var{package}@dots{}
6569@end example
6570
6571For example, the following command generates a PDF file representing the
6572package DAG for the GNU@tie{}Core Utilities, showing its build-time
6573dependencies:
6574
6575@example
6576guix graph coreutils | dot -Tpdf > dag.pdf
6577@end example
6578
6579The output looks like this:
6580
6581@image{images/coreutils-graph,2in,,Dependency graph of the GNU Coreutils}
6582
6583Nice little graph, no?
6584
f97c9175 6585But there is more than one graph! The one above is concise: it is the
88856916 6586graph of package objects, omitting implicit inputs such as GCC, libc,
f97c9175
AE
6587grep, etc. It is often useful to have such a concise graph, but
6588sometimes one may want to see more details. @command{guix graph} supports
6589several types of graphs, allowing you to choose the level of detail:
88856916
LC
6590
6591@table @code
6592@item package
f97c9175 6593This is the default type used in the example above. It shows the DAG of
88856916
LC
6594package objects, excluding implicit dependencies. It is concise, but
6595filters out many details.
6596
b96a0640
LC
6597@item reverse-package
6598This shows the @emph{reverse} DAG of packages. For example:
6599
6600@example
6601guix graph --type=reverse-package ocaml
6602@end example
6603
6604... yields the graph of packages that depend on OCaml.
6605
6606Note that for core packages this can yield huge graphs. If all you want
6607is to know the number of packages that depend on a given package, use
6608@command{guix refresh --list-dependent} (@pxref{Invoking guix refresh,
6609@option{--list-dependent}}).
6610
88856916
LC
6611@item bag-emerged
6612This is the package DAG, @emph{including} implicit inputs.
6613
6614For instance, the following command:
6615
6616@example
6617guix graph --type=bag-emerged coreutils | dot -Tpdf > dag.pdf
6618@end example
6619
6620... yields this bigger graph:
6621
6622@image{images/coreutils-bag-graph,,5in,Detailed dependency graph of the GNU Coreutils}
6623
6624At the bottom of the graph, we see all the implicit inputs of
6625@var{gnu-build-system} (@pxref{Build Systems, @code{gnu-build-system}}).
6626
f97c9175 6627Now, note that the dependencies of these implicit inputs---that is, the
88856916
LC
6628@dfn{bootstrap dependencies} (@pxref{Bootstrapping})---are not shown
6629here, for conciseness.
6630
6631@item bag
6632Similar to @code{bag-emerged}, but this time including all the bootstrap
6633dependencies.
6634
38b92daa
LC
6635@item bag-with-origins
6636Similar to @code{bag}, but also showing origins and their dependencies.
6637
88856916
LC
6638@item derivations
6639This is the most detailed representation: It shows the DAG of
6640derivations (@pxref{Derivations}) and plain store items. Compared to
6641the above representation, many additional nodes are visible, including
f97c9175 6642build scripts, patches, Guile modules, etc.
88856916 6643
a773c314
LC
6644For this type of graph, it is also possible to pass a @file{.drv} file
6645name instead of a package name, as in:
6646
6647@example
6648guix graph -t derivation `guix system build -d my-config.scm`
6649@end example
88856916
LC
6650@end table
6651
f97c9175 6652All the types above correspond to @emph{build-time dependencies}. The
88856916
LC
6653following graph type represents the @emph{run-time dependencies}:
6654
6655@table @code
6656@item references
6657This is the graph of @dfn{references} of a package output, as returned
6658by @command{guix gc --references} (@pxref{Invoking guix gc}).
6659
6660If the given package output is not available in the store, @command{guix
6661graph} attempts to obtain dependency information from substitutes.
a773c314
LC
6662
6663Here you can also pass a store file name instead of a package name. For
6664example, the command below produces the reference graph of your profile
6665(which can be big!):
6666
6667@example
6668guix graph -t references `readlink -f ~/.guix-profile`
6669@end example
7f8fec0f
LC
6670
6671@item referrers
6672This is the graph of the @dfn{referrers} of a store item, as returned by
6673@command{guix gc --referrers} (@pxref{Invoking guix gc}).
6674
6675This relies exclusively on local information from your store. For
6676instance, let us suppose that the current Inkscape is available in 10
6677profiles on your machine; @command{guix graph -t referrers inkscape}
6678will show a graph rooted at Inkscape and with those 10 profiles linked
6679to it.
6680
6681It can help determine what is preventing a store item from being garbage
6682collected.
6683
88856916
LC
6684@end table
6685
6686The available options are the following:
6687
6688@table @option
6689@item --type=@var{type}
6690@itemx -t @var{type}
6691Produce a graph output of @var{type}, where @var{type} must be one of
6692the values listed above.
6693
6694@item --list-types
6695List the supported graph types.
4c8f997a 6696
642339dc
RW
6697@item --backend=@var{backend}
6698@itemx -b @var{backend}
6699Produce a graph using the selected @var{backend}.
6700
6701@item --list-backends
6702List the supported graph backends.
6703
9ea36197
LC
6704Currently, the available backends are Graphviz and d3.js.
6705
4c8f997a
LC
6706@item --expression=@var{expr}
6707@itemx -e @var{expr}
6708Consider the package @var{expr} evaluates to.
6709
6710This is useful to precisely refer to a package, as in this example:
6711
6712@example
6713guix graph -e '(@@@@ (gnu packages commencement) gnu-make-final)'
6714@end example
88856916
LC
6715@end table
6716
6717
372c4bbc
DT
6718@node Invoking guix environment
6719@section Invoking @command{guix environment}
6720
f5fd4fd2 6721@cindex reproducible build environments
fe36d84e 6722@cindex development environments
e32171ee
JD
6723@cindex @command{guix environment}
6724@cindex environment, package build environment
372c4bbc
DT
6725The purpose of @command{guix environment} is to assist hackers in
6726creating reproducible development environments without polluting their
6727package profile. The @command{guix environment} tool takes one or more
f97c9175 6728packages, builds all of their inputs, and creates a shell
372c4bbc
DT
6729environment to use them.
6730
6731The general syntax is:
6732
6733@example
6734guix environment @var{options} @var{package}@dots{}
6735@end example
6736
fe36d84e
LC
6737The following example spawns a new shell set up for the development of
6738GNU@tie{}Guile:
372c4bbc
DT
6739
6740@example
6741guix environment guile
6742@end example
6743
f97c9175
AE
6744If the needed dependencies are not built yet, @command{guix environment}
6745automatically builds them. The environment of the new shell is an augmented
372c4bbc
DT
6746version of the environment that @command{guix environment} was run in.
6747It contains the necessary search paths for building the given package
6748added to the existing environment variables. To create a ``pure''
f97c9175 6749environment, in which the original environment variables have been unset,
50500f7c
LC
6750use the @code{--pure} option@footnote{Users sometimes wrongfully augment
6751environment variables such as @code{PATH} in their @file{~/.bashrc}
6752file. As a consequence, when @code{guix environment} launches it, Bash
6753may read @file{~/.bashrc}, thereby introducing ``impurities'' in these
6754environment variables. It is an error to define such environment
6755variables in @file{.bashrc}; instead, they should be defined in
6756@file{.bash_profile}, which is sourced only by log-in shells.
6757@xref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}, for
6758details on Bash start-up files.}.
372c4bbc 6759
28de8d25
LC
6760@vindex GUIX_ENVIRONMENT
6761@command{guix environment} defines the @code{GUIX_ENVIRONMENT}
20185522
LC
6762variable in the shell it spawns; its value is the file name of the
6763profile of this environment. This allows users to, say, define a
28de8d25
LC
6764specific prompt for development environments in their @file{.bashrc}
6765(@pxref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}):
6766
6767@example
6768if [ -n "$GUIX_ENVIRONMENT" ]
6769then
6770 export PS1="\u@@\h \w [dev]\$ "
6771fi
6772@end example
6773
20185522
LC
6774@noindent
6775... or to browse the profile:
6776
6777@example
6778$ ls "$GUIX_ENVIRONMENT/bin"
6779@end example
6780
372c4bbc
DT
6781Additionally, more than one package may be specified, in which case the
6782union of the inputs for the given packages are used. For example, the
6783command below spawns a shell where all of the dependencies of both Guile
6784and Emacs are available:
6785
6786@example
6787guix environment guile emacs
6788@end example
6789
1de2fe95
DT
6790Sometimes an interactive shell session is not desired. An arbitrary
6791command may be invoked by placing the @code{--} token to separate the
6792command from the rest of the arguments:
372c4bbc
DT
6793
6794@example
1de2fe95 6795guix environment guile -- make -j4
372c4bbc
DT
6796@end example
6797
fe36d84e
LC
6798In other situations, it is more convenient to specify the list of
6799packages needed in the environment. For example, the following command
6800runs @command{python} from an environment containing Python@tie{}2.7 and
6801NumPy:
6802
6803@example
1de2fe95 6804guix environment --ad-hoc python2-numpy python-2.7 -- python
fe36d84e
LC
6805@end example
6806
cc90fbbf
DT
6807Furthermore, one might want the dependencies of a package and also some
6808additional packages that are not build-time or runtime dependencies, but
6809are useful when developing nonetheless. Because of this, the
6810@code{--ad-hoc} flag is positional. Packages appearing before
6811@code{--ad-hoc} are interpreted as packages whose dependencies will be
6812added to the environment. Packages appearing after are interpreted as
6813packages that will be added to the environment directly. For example,
6814the following command creates a Guix development environment that
6815additionally includes Git and strace:
6816
6817@example
6818guix environment guix --ad-hoc git strace
6819@end example
6820
f535dcbe
DT
6821Sometimes it is desirable to isolate the environment as much as
6822possible, for maximal purity and reproducibility. In particular, when
6823using Guix on a host distro that is not GuixSD, it is desirable to
6824prevent access to @file{/usr/bin} and other system-wide resources from
6825the development environment. For example, the following command spawns
6826a Guile REPL in a ``container'' where only the store and the current
6827working directory are mounted:
6828
6829@example
6830guix environment --ad-hoc --container guile -- guile
6831@end example
6832
0f252e26 6833@quotation Note
cfd35b4e 6834The @code{--container} option requires Linux-libre 3.19 or newer.
0f252e26
DT
6835@end quotation
6836
fe36d84e 6837The available options are summarized below.
372c4bbc
DT
6838
6839@table @code
f943c317
LC
6840@item --root=@var{file}
6841@itemx -r @var{file}
6842@cindex persistent environment
6843@cindex garbage collector root, for environments
6844Make @var{file} a symlink to the profile for this environment, and
6845register it as a garbage collector root.
6846
6847This is useful if you want to protect your environment from garbage
6848collection, to make it ``persistent''.
6849
6850When this option is omitted, the environment is protected from garbage
6851collection only for the duration of the @command{guix environment}
6852session. This means that next time you recreate the same environment,
6853you could have to rebuild or re-download packages.
6854
372c4bbc
DT
6855@item --expression=@var{expr}
6856@itemx -e @var{expr}
c9c282ce
DT
6857Create an environment for the package or list of packages that
6858@var{expr} evaluates to.
372c4bbc 6859
fe36d84e
LC
6860For example, running:
6861
6862@example
6863guix environment -e '(@@ (gnu packages maths) petsc-openmpi)'
6864@end example
6865
6866starts a shell with the environment for this specific variant of the
6867PETSc package.
6868
c9c282ce
DT
6869Running:
6870
6871@example
5c2b2f00 6872guix environment --ad-hoc -e '(@@ (gnu) %base-packages)'
c9c282ce
DT
6873@end example
6874
6875starts a shell with all the GuixSD base packages available.
6876
fa445d64 6877The above commands only use the default output of the given packages.
779aa003
DT
6878To select other outputs, two element tuples can be specified:
6879
6880@example
6881guix environment --ad-hoc -e '(list (@ (gnu packages bash) bash) "include")'
6882@end example
6883
372c4bbc
DT
6884@item --load=@var{file}
6885@itemx -l @var{file}
c9c282ce
DT
6886Create an environment for the package or list of packages that the code
6887within @var{file} evaluates to.
372c4bbc 6888
fe36d84e
LC
6889As an example, @var{file} might contain a definition like this
6890(@pxref{Defining Packages}):
6891
6892@example
6893@verbatiminclude environment-gdb.scm
6894@end example
6895
a54bd6d7
DT
6896@item --ad-hoc
6897Include all specified packages in the resulting environment, as if an
6898@i{ad hoc} package were defined with them as inputs. This option is
6899useful for quickly creating an environment without having to write a
6900package expression to contain the desired inputs.
6901
6902For instance, the command:
6903
6904@example
1de2fe95 6905guix environment --ad-hoc guile guile-sdl -- guile
a54bd6d7
DT
6906@end example
6907
6908runs @command{guile} in an environment where Guile and Guile-SDL are
6909available.
6910
417c39f1 6911Note that this example implicitly asks for the default output of
f97c9175 6912@code{guile} and @code{guile-sdl}, but it is possible to ask for a
417c39f1
LC
6913specific output---e.g., @code{glib:bin} asks for the @code{bin} output
6914of @code{glib} (@pxref{Packages with Multiple Outputs}).
6915
cc90fbbf
DT
6916This option may be composed with the default behavior of @command{guix
6917environment}. Packages appearing before @code{--ad-hoc} are interpreted
6918as packages whose dependencies will be added to the environment, the
6919default behavior. Packages appearing after are interpreted as packages
6920that will be added to the environment directly.
6921
372c4bbc
DT
6922@item --pure
6923Unset existing environment variables when building the new environment.
6924This has the effect of creating an environment in which search paths
6925only contain package inputs.
6926
6927@item --search-paths
6928Display the environment variable definitions that make up the
6929environment.
ce367ef3
LC
6930
6931@item --system=@var{system}
6932@itemx -s @var{system}
6933Attempt to build for @var{system}---e.g., @code{i686-linux}.
f535dcbe
DT
6934
6935@item --container
6936@itemx -C
6937@cindex container
6938Run @var{command} within an isolated container. The current working
a01ad638
DT
6939directory outside the container is mapped inside the container.
6940Additionally, a dummy home directory is created that matches the current
6941user's home directory, and @file{/etc/passwd} is configured accordingly.
6942The spawned process runs as the current user outside the container, but
6943has root privileges in the context of the container.
f535dcbe
DT
6944
6945@item --network
6946@itemx -N
6947For containers, share the network namespace with the host system.
6948Containers created without this flag only have access to the loopback
6949device.
6950
6951@item --expose=@var{source}[=@var{target}]
6952For containers, expose the file system @var{source} from the host system
6953as the read-only file system @var{target} within the container. If
6954@var{target} is not specified, @var{source} is used as the target mount
6955point in the container.
6956
6957The example below spawns a Guile REPL in a container in which the user's
6958home directory is accessible read-only via the @file{/exchange}
6959directory:
6960
6961@example
da31b9c7 6962guix environment --container --expose=$HOME=/exchange --ad-hoc guile -- guile
f535dcbe
DT
6963@end example
6964
5c2b2f00 6965@item --share=@var{source}[=@var{target}]
f535dcbe
DT
6966For containers, share the file system @var{source} from the host system
6967as the writable file system @var{target} within the container. If
6968@var{target} is not specified, @var{source} is used as the target mount
6969point in the container.
6970
6971The example below spawns a Guile REPL in a container in which the user's
6972home directory is accessible for both reading and writing via the
6973@file{/exchange} directory:
6974
6975@example
da31b9c7 6976guix environment --container --share=$HOME=/exchange --ad-hoc guile -- guile
f535dcbe 6977@end example
372c4bbc
DT
6978@end table
6979
fdcb04af
HG
6980@command{guix environment}
6981also supports all of the common build options that @command{guix
ccd7158d 6982build} supports (@pxref{Common Build Options}).
372c4bbc 6983
fdcb04af 6984
aff8ce7c
DT
6985@node Invoking guix publish
6986@section Invoking @command{guix publish}
6987
e32171ee 6988@cindex @command{guix publish}
aff8ce7c 6989The purpose of @command{guix publish} is to enable users to easily share
f97c9175 6990their store with others, who can then use it as a substitute server
8ce229fc
LC
6991(@pxref{Substitutes}).
6992
6993When @command{guix publish} runs, it spawns an HTTP server which allows
6994anyone with network access to obtain substitutes from it. This means
6995that any machine running Guix can also act as if it were a build farm,
6996since the HTTP interface is compatible with Hydra, the software behind
6997the @code{hydra.gnu.org} build farm.
aff8ce7c
DT
6998
6999For security, each substitute is signed, allowing recipients to check
7000their authenticity and integrity (@pxref{Substitutes}). Because
f97c9175 7001@command{guix publish} uses the signing key of the system, which is only
5463fe51
LC
7002readable by the system administrator, it must be started as root; the
7003@code{--user} option makes it drop root privileges early on.
aff8ce7c 7004
b18812b6
LC
7005The signing key pair must be generated before @command{guix publish} is
7006launched, using @command{guix archive --generate-key} (@pxref{Invoking
7007guix archive}).
7008
aff8ce7c
DT
7009The general syntax is:
7010
7011@example
7012guix publish @var{options}@dots{}
7013@end example
7014
7015Running @command{guix publish} without any additional arguments will
7016spawn an HTTP server on port 8080:
7017
7018@example
7019guix publish
7020@end example
7021
7022Once a publishing server has been authorized (@pxref{Invoking guix
7023archive}), the daemon may download substitutes from it:
7024
7025@example
7026guix-daemon --substitute-urls=http://example.org:8080
7027@end example
7028
00753f70
LC
7029By default, @command{guix publish} compresses archives on the fly as it
7030serves them. This ``on-the-fly'' mode is convenient in that it requires
7031no setup and is immediately available. However, when serving lots of
7032clients, we recommend using the @option{--cache} option, which enables
7033caching of the archives before they are sent to clients---see below for
585347d7
LC
7034details. The @command{guix weather} command provides a handy way to
7035check what a server provides (@pxref{Invoking guix weather}).
00753f70 7036
ff6638d1
LC
7037As a bonus, @command{guix publish} also serves as a content-addressed
7038mirror for source files referenced in @code{origin} records
7039(@pxref{origin Reference}). For instance, assuming @command{guix
7040publish} is running on @code{example.org}, the following URL returns the
7041raw @file{hello-2.10.tar.gz} file with the given SHA256 hash
7042(represented in @code{nix-base32} format, @pxref{Invoking guix hash}):
7043
7044@example
7045http://example.org/file/hello-2.10.tar.gz/sha256/0ssi1@dots{}ndq1i
7046@end example
7047
7048Obviously, these URLs only work for files that are in the store; in
7049other cases, they return 404 (``Not Found'').
7050
aff8ce7c
DT
7051The following options are available:
7052
7053@table @code
7054@item --port=@var{port}
7055@itemx -p @var{port}
7056Listen for HTTP requests on @var{port}.
7057
9e2292ef
LC
7058@item --listen=@var{host}
7059Listen on the network interface for @var{host}. The default is to
7060accept connections from any interface.
7061
5463fe51
LC
7062@item --user=@var{user}
7063@itemx -u @var{user}
7064Change privileges to @var{user} as soon as possible---i.e., once the
7065server socket is open and the signing key has been read.
7066
4a1fc562
LC
7067@item --compression[=@var{level}]
7068@itemx -C [@var{level}]
7069Compress data using the given @var{level}. When @var{level} is zero,
7070disable compression. The range 1 to 9 corresponds to different gzip
7071compression levels: 1 is the fastest, and 9 is the best (CPU-intensive).
7072The default is 3.
7073
00753f70
LC
7074Unless @option{--cache} is used, compression occurs on the fly and
7075the compressed streams are not
4a1fc562 7076cached. Thus, to reduce load on the machine that runs @command{guix
00753f70
LC
7077publish}, it may be a good idea to choose a low compression level, to
7078run @command{guix publish} behind a caching proxy, or to use
7079@option{--cache}. Using @option{--cache} has the advantage that it
7080allows @command{guix publish} to add @code{Content-Length} HTTP header
7081to its responses.
7082
7083@item --cache=@var{directory}
7084@itemx -c @var{directory}
7085Cache archives and meta-data (@code{.narinfo} URLs) to @var{directory}
7086and only serve archives that are in cache.
7087
7088When this option is omitted, archives and meta-data are created
7089on-the-fly. This can reduce the available bandwidth, especially when
7090compression is enabled, since this may become CPU-bound. Another
7091drawback of the default mode is that the length of archives is not known
7092in advance, so @command{guix publish} does not add a
7093@code{Content-Length} HTTP header to its responses, which in turn
7094prevents clients from knowing the amount of data being downloaded.
7095
7096Conversely, when @option{--cache} is used, the first request for a store
7097item (@i{via} a @code{.narinfo} URL) returns 404 and triggers a
7098background process to @dfn{bake} the archive---computing its
7099@code{.narinfo} and compressing the archive, if needed. Once the
7100archive is cached in @var{directory}, subsequent requests succeed and
7101are served directly from the cache, which guarantees that clients get
7102the best possible bandwidth.
7103
7104The ``baking'' process is performed by worker threads. By default, one
7105thread per CPU core is created, but this can be customized. See
7106@option{--workers} below.
7107
d72b4206
LC
7108When @option{--ttl} is used, cached entries are automatically deleted
7109when they have expired.
7110
00753f70
LC
7111@item --workers=@var{N}
7112When @option{--cache} is used, request the allocation of @var{N} worker
7113threads to ``bake'' archives.
4a1fc562 7114
e4c7a5f7
LC
7115@item --ttl=@var{ttl}
7116Produce @code{Cache-Control} HTTP headers that advertise a time-to-live
7117(TTL) of @var{ttl}. @var{ttl} must denote a duration: @code{5d} means 5
7118days, @code{1m} means 1 month, and so on.
7119
7120This allows the user's Guix to keep substitute information in cache for
7121@var{ttl}. However, note that @code{guix publish} does not itself
7122guarantee that the store items it provides will indeed remain available
7123for as long as @var{ttl}.
7124
d72b4206 7125Additionally, when @option{--cache} is used, cached entries that have
c95644f0
LC
7126not been accessed for @var{ttl} and that no longer have a corresponding
7127item in the store, may be deleted.
d72b4206 7128
4bb5e0ae
LC
7129@item --nar-path=@var{path}
7130Use @var{path} as the prefix for the URLs of ``nar'' files
7131(@pxref{Invoking guix archive, normalized archives}).
7132
7133By default, nars are served at a URL such as
7134@code{/nar/gzip/@dots{}-coreutils-8.25}. This option allows you to
7135change the @code{/nar} part to @var{path}.
7136
46f58390
LC
7137@item --public-key=@var{file}
7138@itemx --private-key=@var{file}
7139Use the specific @var{file}s as the public/private key pair used to sign
7140the store items being published.
7141
7142The files must correspond to the same key pair (the private key is used
7143for signing and the public key is merely advertised in the signature
7144metadata). They must contain keys in the canonical s-expression format
7145as produced by @command{guix archive --generate-key} (@pxref{Invoking
7146guix archive}). By default, @file{/etc/guix/signing-key.pub} and
7147@file{/etc/guix/signing-key.sec} are used.
7148
aff8ce7c
DT
7149@item --repl[=@var{port}]
7150@itemx -r [@var{port}]
7151Spawn a Guile REPL server (@pxref{REPL Servers,,, guile, GNU Guile
8ce229fc
LC
7152Reference Manual}) on @var{port} (37146 by default). This is used
7153primarily for debugging a running @command{guix publish} server.
aff8ce7c
DT
7154@end table
7155
1c52181f 7156Enabling @command{guix publish} on a GuixSD system is a one-liner: just
f1e900a3
LC
7157instantiate a @code{guix-publish-service-type} service in the @code{services} field
7158of the @code{operating-system} declaration (@pxref{guix-publish-service-type,
7159@code{guix-publish-service-type}}).
1c52181f 7160
332d7903
HG
7161If you are instead running Guix on a ``foreign distro'', follow these
7162instructions:”
7163
7164@itemize
7165@item
7166If your host distro uses the systemd init system:
7167
7168@example
7169# ln -s ~root/.guix-profile/lib/systemd/system/guix-publish.service \
7170 /etc/systemd/system/
7171# systemctl start guix-publish && systemctl enable guix-publish
7172@end example
7173
7174@item
7175If your host distro uses the Upstart init system:
7176
7177@example
7178# ln -s ~root/.guix-profile/lib/upstart/system/guix-publish.conf /etc/init/
7179# start guix-publish
7180@end example
7181
7182@item
7183Otherwise, proceed similarly with your distro's init system.
7184@end itemize
d23c20f1
LC
7185
7186@node Invoking guix challenge
7187@section Invoking @command{guix challenge}
7188
7189@cindex reproducible builds
7190@cindex verifiable builds
e32171ee
JD
7191@cindex @command{guix challenge}
7192@cindex challenge
d23c20f1 7193Do the binaries provided by this server really correspond to the source
f97c9175 7194code it claims to build? Is a package build process deterministic?
d23c20f1
LC
7195These are the questions the @command{guix challenge} command attempts to
7196answer.
7197
7198The former is obviously an important question: Before using a substitute
f97c9175 7199server (@pxref{Substitutes}), one had better @emph{verify} that it
d23c20f1
LC
7200provides the right binaries, and thus @emph{challenge} it. The latter
7201is what enables the former: If package builds are deterministic, then
7202independent builds of the package should yield the exact same result,
7203bit for bit; if a server provides a binary different from the one
7204obtained locally, it may be either corrupt or malicious.
7205
7206We know that the hash that shows up in @file{/gnu/store} file names is
7207the hash of all the inputs of the process that built the file or
7208directory---compilers, libraries, build scripts,
7209etc. (@pxref{Introduction}). Assuming deterministic build processes,
7210one store file name should map to exactly one build output.
7211@command{guix challenge} checks whether there is, indeed, a single
7212mapping by comparing the build outputs of several independent builds of
7213any given store item.
7214
f97c9175 7215The command output looks like this:
d23c20f1
LC
7216
7217@smallexample
ddbc7f7d
LC
7218$ guix challenge --substitute-urls="https://hydra.gnu.org https://guix.example.org"
7219updating list of substitutes from 'https://hydra.gnu.org'... 100.0%
7220updating list of substitutes from 'https://guix.example.org'... 100.0%
d23c20f1
LC
7221/gnu/store/@dots{}-openssl-1.0.2d contents differ:
7222 local hash: 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
ddbc7f7d
LC
7223 https://hydra.gnu.org/nar/@dots{}-openssl-1.0.2d: 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
7224 https://guix.example.org/nar/@dots{}-openssl-1.0.2d: 1zy4fmaaqcnjrzzajkdn3f5gmjk754b43qkq47llbyak9z0qjyim
d23c20f1
LC
7225/gnu/store/@dots{}-git-2.5.0 contents differ:
7226 local hash: 00p3bmryhjxrhpn2gxs2fy0a15lnip05l97205pgbk5ra395hyha
ddbc7f7d
LC
7227 https://hydra.gnu.org/nar/@dots{}-git-2.5.0: 069nb85bv4d4a6slrwjdy8v1cn4cwspm3kdbmyb81d6zckj3nq9f
7228 https://guix.example.org/nar/@dots{}-git-2.5.0: 0mdqa9w1p6cmli6976v4wi0sw9r4p5prkj7lzfd1877wk11c9c73
d23c20f1
LC
7229/gnu/store/@dots{}-pius-2.1.1 contents differ:
7230 local hash: 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
ddbc7f7d
LC
7231 https://hydra.gnu.org/nar/@dots{}-pius-2.1.1: 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
7232 https://guix.example.org/nar/@dots{}-pius-2.1.1: 1cy25x1a4fzq5rk0pmvc8xhwyffnqz95h2bpvqsz2mpvlbccy0gs
d23c20f1
LC
7233@end smallexample
7234
7235@noindent
7236In this example, @command{guix challenge} first scans the store to
7237determine the set of locally-built derivations---as opposed to store
7238items that were downloaded from a substitute server---and then queries
7239all the substitute servers. It then reports those store items for which
7240the servers obtained a result different from the local build.
7241
7242@cindex non-determinism, in package builds
7243As an example, @code{guix.example.org} always gets a different answer.
7244Conversely, @code{hydra.gnu.org} agrees with local builds, except in the
7245case of Git. This might indicate that the build process of Git is
7246non-deterministic, meaning that its output varies as a function of
7247various things that Guix does not fully control, in spite of building
7248packages in isolated environments (@pxref{Features}). Most common
7249sources of non-determinism include the addition of timestamps in build
7250results, the inclusion of random numbers, and directory listings sorted
a70a5004 7251by inode number. See @uref{https://reproducible-builds.org/docs/}, for
d23c20f1
LC
7252more information.
7253
f97c9175 7254To find out what is wrong with this Git binary, we can do something along
d23c20f1
LC
7255these lines (@pxref{Invoking guix archive}):
7256
7257@example
ddbc7f7d 7258$ wget -q -O - https://hydra.gnu.org/nar/@dots{}-git-2.5.0 \
d23c20f1 7259 | guix archive -x /tmp/git
043f4698 7260$ diff -ur --no-dereference /gnu/store/@dots{}-git.2.5.0 /tmp/git
d23c20f1
LC
7261@end example
7262
7263This command shows the difference between the files resulting from the
7264local build, and the files resulting from the build on
7265@code{hydra.gnu.org} (@pxref{Overview, Comparing and Merging Files,,
7266diffutils, Comparing and Merging Files}). The @command{diff} command
7267works great for text files. When binary files differ, a better option
ddbc7f7d 7268is @uref{https://diffoscope.org/, Diffoscope}, a tool that helps
d23c20f1
LC
7269visualize differences for all kinds of files.
7270
f97c9175 7271Once you have done that work, you can tell whether the differences are due
d23c20f1
LC
7272to a non-deterministic build process or to a malicious server. We try
7273hard to remove sources of non-determinism in packages to make it easier
f97c9175
AE
7274to verify substitutes, but of course, this is a process that
7275involves not just Guix, but a large part of the free software community.
d23c20f1
LC
7276In the meantime, @command{guix challenge} is one tool to help address
7277the problem.
7278
7279If you are writing packages for Guix, you are encouraged to check
7280whether @code{hydra.gnu.org} and other substitute servers obtain the
7281same build result as you did with:
7282
7283@example
7284$ guix challenge @var{package}
7285@end example
7286
7287@noindent
f97c9175 7288where @var{package} is a package specification such as
7cffaeb6 7289@code{guile@@2.0} or @code{glibc:debug}.
d23c20f1
LC
7290
7291The general syntax is:
7292
7293@example
7294guix challenge @var{options} [@var{packages}@dots{}]
7295@end example
7296
7cffaeb6
LC
7297When a difference is found between the hash of a locally-built item and
7298that of a server-provided substitute, or among substitutes provided by
7299different servers, the command displays it as in the example above and
a17417a8
LC
7300its exit code is 2 (other non-zero exit codes denote other kinds of
7301errors.)
7cffaeb6 7302
d23c20f1
LC
7303The one option that matters is:
7304
7305@table @code
7306
7307@item --substitute-urls=@var{urls}
7308Consider @var{urls} the whitespace-separated list of substitute source
7309URLs to compare to.
7310
153b6295
LC
7311@item --verbose
7312@itemx -v
7313Show details about matches (identical contents) in addition to
7314information about mismatches.
7315
d23c20f1
LC
7316@end table
7317
f11c444d
LC
7318@node Invoking guix copy
7319@section Invoking @command{guix copy}
7320
7321@cindex copy, of store items, over SSH
7322@cindex SSH, copy of store items
7323@cindex sharing store items across machines
7324@cindex transferring store items across machines
7325The @command{guix copy} command copies items from the store of one
7326machine to that of another machine over a secure shell (SSH)
7327connection@footnote{This command is available only when Guile-SSH was
7328found. @xref{Requirements}, for details.}. For example, the following
7329command copies the @code{coreutils} package, the user's profile, and all
7330their dependencies over to @var{host}, logged in as @var{user}:
7331
7332@example
7333guix copy --to=@var{user}@@@var{host} \
7334 coreutils `readlink -f ~/.guix-profile`
7335@end example
7336
7337If some of the items to be copied are already present on @var{host},
7338they are not actually sent.
7339
7340The command below retrieves @code{libreoffice} and @code{gimp} from
7341@var{host}, assuming they are available there:
7342
7343@example
7344guix copy --from=@var{host} libreoffice gimp
7345@end example
7346
7347The SSH connection is established using the Guile-SSH client, which is
7348compatible with OpenSSH: it honors @file{~/.ssh/known_hosts} and
7349@file{~/.ssh/config}, and uses the SSH agent for authentication.
7350
7351The key used to sign items that are sent must be accepted by the remote
7352machine. Likewise, the key used by the remote machine to sign items you
7353are retrieving must be in @file{/etc/guix/acl} so it is accepted by your
7354own daemon. @xref{Invoking guix archive}, for more information about
7355store item authentication.
7356
7357The general syntax is:
7358
7359@example
7360guix copy [--to=@var{spec}|--from=@var{spec}] @var{items}@dots{}
7361@end example
7362
7363You must always specify one of the following options:
7364
7365@table @code
7366@item --to=@var{spec}
7367@itemx --from=@var{spec}
7368Specify the host to send to or receive from. @var{spec} must be an SSH
7369spec such as @code{example.org}, @code{charlie@@example.org}, or
7370@code{charlie@@example.org:2222}.
7371@end table
7372
7373The @var{items} can be either package names, such as @code{gimp}, or
7374store items, such as @file{/gnu/store/@dots{}-idutils-4.6}.
7375
7376When specifying the name of a package to send, it is first built if
7377needed, unless @option{--dry-run} was specified. Common build options
7378are supported (@pxref{Common Build Options}).
7379
d23c20f1 7380
32efa254
DT
7381@node Invoking guix container
7382@section Invoking @command{guix container}
7383@cindex container
e32171ee 7384@cindex @command{guix container}
32efa254
DT
7385@quotation Note
7386As of version @value{VERSION}, this tool is experimental. The interface
7387is subject to radical change in the future.
7388@end quotation
7389
7390The purpose of @command{guix container} is to manipulate processes
7391running within an isolated environment, commonly known as a
46c36586 7392``container'', typically created by the @command{guix environment}
32efa254
DT
7393(@pxref{Invoking guix environment}) and @command{guix system container}
7394(@pxref{Invoking guix system}) commands.
7395
7396The general syntax is:
7397
7398@example
7399guix container @var{action} @var{options}@dots{}
7400@end example
7401
7402@var{action} specifies the operation to perform with a container, and
7403@var{options} specifies the context-specific arguments for the action.
7404
7405The following actions are available:
7406
7407@table @code
7408@item exec
7409Execute a command within the context of a running container.
7410
7411The syntax is:
7412
7413@example
7414guix container exec @var{pid} @var{program} @var{arguments}@dots{}
7415@end example
7416
7417@var{pid} specifies the process ID of the running container.
f97c9175
AE
7418@var{program} specifies an executable file name within the root file
7419system of the container. @var{arguments} are the additional options that
7420will be passed to @var{program}.
32efa254
DT
7421
7422The following command launches an interactive login shell inside a
7423GuixSD container, started by @command{guix system container}, and whose
7424process ID is 9001:
7425
7426@example
7427guix container exec 9001 /run/current-system/profile/bin/bash --login
7428@end example
7429
7430Note that the @var{pid} cannot be the parent process of a container. It
f97c9175 7431must be PID 1 of the container or one of its child processes.
32efa254
DT
7432
7433@end table
7434
585347d7
LC
7435@node Invoking guix weather
7436@section Invoking @command{guix weather}
7437
7438Occasionally you're grumpy because substitutes are lacking and you end
7439up building packages by yourself (@pxref{Substitutes}). The
7440@command{guix weather} command reports on substitute availability on the
7441specified servers so you can have an idea of whether you'll be grumpy
7442today. It can sometimes be useful info as a user, but it is primarily
7443useful to people running @command{guix publish} (@pxref{Invoking guix
7444publish}).
7445
7446@cindex statistics, for substitutes
7447@cindex availability of substitutes
7448@cindex substitute availability
7449@cindex weather, substitute availability
7450Here's a sample run:
7451
7452@example
7453$ guix weather --substitute-urls=https://guix.example.org
7454computing 5,872 package derivations for x86_64-linux...
7455looking for 6,128 store items on https://guix.example.org..
7456updating list of substitutes from 'https://guix.example.org'... 100.0%
7457https://guix.example.org
7458 43.4% substitutes available (2,658 out of 6,128)
7459 7,032.5 MiB of nars (compressed)
7460 19,824.2 MiB on disk (uncompressed)
7461 0.030 seconds per request (182.9 seconds in total)
7462 33.5 requests per second
7463@end example
7464
7465As you can see, it reports the fraction of all the packages for which
7466substitutes are available on the server---regardless of whether
7467substitutes are enabled, and regardless of whether this server's signing
7468key is authorized. It also reports the size of the compressed archives
7469(``nars'') provided by the server, the size the corresponding store
7470items occupy in the store (assuming deduplication is turned off), and
7471the server's throughput.
7472
7473To achieve that, @command{guix weather} queries over HTTP(S) meta-data
7474(@dfn{narinfos}) for all the relevant store items. Like @command{guix
7475challenge}, it ignores signatures on those substitutes, which is
7476innocuous since the command only gathers statistics and cannot install
7477those substitutes.
7478
7479Among other things, it is possible to query specific system types and
7480specific package sets. The available options are listed below.
7481
7482@table @code
7483@item --substitute-urls=@var{urls}
7484@var{urls} is the space-separated list of substitute server URLs to
7485query. When this option is omitted, the default set of substitute
7486servers is queried.
7487
7488@item --system=@var{system}
7489@itemx -s @var{system}
7490Query substitutes for @var{system}---e.g., @code{aarch64-linux}. This
7491option can be repeated, in which case @command{guix weather} will query
7492substitutes for several system types.
7493
7494@item --manifest=@var{file}
7495Instead of querying substitutes for all the packages, only ask for those
7496specified in @var{file}. @var{file} must contain a @dfn{manifest}, as
7497with the @code{-m} option of @command{guix package} (@pxref{Invoking
7498guix package}).
7499@end table
7500
7501
a1ba8475
LC
7502@c *********************************************************************
7503@node GNU Distribution
7504@chapter GNU Distribution
7505
3ca2731c 7506@cindex Guix System Distribution
4705641f 7507@cindex GuixSD
3ca2731c
LC
7508Guix comes with a distribution of the GNU system consisting entirely of
7509free software@footnote{The term ``free'' here refers to the
a1ba8475 7510@url{http://www.gnu.org/philosophy/free-sw.html,freedom provided to
3ca2731c 7511users of that software}.}. The
35ed9306
LC
7512distribution can be installed on its own (@pxref{System Installation}),
7513but it is also possible to install Guix as a package manager on top of
7514an installed GNU/Linux system (@pxref{Installation}). To distinguish
3ca2731c 7515between the two, we refer to the standalone distribution as the Guix
4705641f 7516System Distribution, or GuixSD.
35ed9306
LC
7517
7518The distribution provides core GNU packages such as GNU libc, GCC, and
7519Binutils, as well as many GNU and non-GNU applications. The complete
7520list of available packages can be browsed
093ae1be 7521@url{http://www.gnu.org/software/guix/packages,on-line} or by
d03bb653 7522running @command{guix package} (@pxref{Invoking guix package}):
a1ba8475
LC
7523
7524@example
e49951eb 7525guix package --list-available
a1ba8475
LC
7526@end example
7527
f97c9175 7528Our goal is to provide a practical 100% free software distribution of
401c53c4
LC
7529Linux-based and other variants of GNU, with a focus on the promotion and
7530tight integration of GNU components, and an emphasis on programs and
7531tools that help users exert that freedom.
7532
3ca2731c 7533Packages are currently available on the following platforms:
c320011d
LC
7534
7535@table @code
7536
7537@item x86_64-linux
7538Intel/AMD @code{x86_64} architecture, Linux-Libre kernel;
7539
7540@item i686-linux
7541Intel 32-bit architecture (IA32), Linux-Libre kernel;
7542
aa1e1947 7543@item armhf-linux
aa725117 7544ARMv7-A architecture with hard float, Thumb-2 and NEON,
f97c9175
AE
7545using the EABI hard-float application binary interface (ABI),
7546and Linux-Libre kernel.
aa1e1947 7547
3b88f376
EF
7548@item aarch64-linux
7549little-endian 64-bit ARMv8-A processors, Linux-Libre kernel. This is
be2ba697 7550currently in an experimental stage, with limited support.
3b88f376
EF
7551@xref{Contributing}, for how to help!
7552
c320011d
LC
7553@item mips64el-linux
7554little-endian 64-bit MIPS processors, specifically the Loongson series,
f97c9175 7555n32 ABI, and Linux-Libre kernel.
c320011d
LC
7556
7557@end table
7558
4705641f 7559GuixSD itself is currently only available on @code{i686} and @code{x86_64}.
3ca2731c 7560
c320011d
LC
7561@noindent
7562For information on porting to other architectures or kernels,
f97c9175 7563@pxref{Porting}.
c320011d 7564
401c53c4 7565@menu
5af6de3e 7566* System Installation:: Installing the whole operating system.
35ed9306 7567* System Configuration:: Configuring the operating system.
31f1f593 7568* Documentation:: Browsing software user manuals.
91ef73d4 7569* Installing Debugging Files:: Feeding the debugger.
05962f29 7570* Security Updates:: Deploying security fixes quickly.
401c53c4 7571* Package Modules:: Packages from the programmer's viewpoint.
da7cabd4 7572* Packaging Guidelines:: Growing the distribution.
401c53c4 7573* Bootstrapping:: GNU/Linux built from scratch.
8b315a6d 7574* Porting:: Targeting another platform or kernel.
401c53c4
LC
7575@end menu
7576
7577Building this distribution is a cooperative effort, and you are invited
081145cf 7578to join! @xref{Contributing}, for information about how you can help.
401c53c4 7579
5af6de3e
LC
7580@node System Installation
7581@section System Installation
7582
e32171ee 7583@cindex installing GuixSD
3ca2731c 7584@cindex Guix System Distribution
c8b54374 7585This section explains how to install the Guix System Distribution (GuixSD)
3ca2731c 7586on a machine. The Guix package manager can
35ed9306
LC
7587also be installed on top of a running GNU/Linux system,
7588@pxref{Installation}.
5af6de3e
LC
7589
7590@ifinfo
9c18cf9b 7591@quotation Note
5af6de3e
LC
7592@c This paragraph is for people reading this from tty2 of the
7593@c installation image.
1068f26b 7594You are reading this documentation with an Info reader. For details on
5af6de3e 7595how to use it, hit the @key{RET} key (``return'' or ``enter'') on the
de341e7c
LC
7596link that follows: @pxref{Top, Info reader,, info-stnd, Stand-alone GNU
7597Info}. Hit @kbd{l} afterwards to come back here.
9c18cf9b
LC
7598
7599Alternately, run @command{info info} in another tty to keep the manual
7600available.
7601@end quotation
5af6de3e
LC
7602@end ifinfo
7603
dedb8d5e 7604@menu
e3009f60
LC
7605* Limitations:: What you can expect.
7606* Hardware Considerations:: Supported hardware.
7607* USB Stick Installation:: Preparing the installation medium.
d79013f6 7608* DVD Installation:: Preparing the installation medium.
e3009f60
LC
7609* Preparing for Installation:: Networking, partitioning, etc.
7610* Proceeding with the Installation:: The real thing.
c8b54374 7611* Installing GuixSD in a VM:: GuixSD playground.
e3009f60 7612* Building the Installation Image:: How this comes to be.
dedb8d5e
LC
7613@end menu
7614
7615@node Limitations
8aaaae38
LC
7616@subsection Limitations
7617
4705641f 7618As of version @value{VERSION}, the Guix System Distribution (GuixSD) is
3ca2731c 7619not production-ready. It may contain bugs and lack important
8aaaae38
LC
7620features. Thus, if you are looking for a stable production system that
7621respects your freedom as a computer user, a good solution at this point
7622is to consider @url{http://www.gnu.org/distros/free-distros.html, one of
f97c9175 7623the more established GNU/Linux distributions}. We hope you can soon switch
4705641f 7624to the GuixSD without fear, of course. In the meantime, you can
8aaaae38
LC
7625also keep using your distribution and try out the package manager on top
7626of it (@pxref{Installation}).
7627
7628Before you proceed with the installation, be aware of the following
7629noteworthy limitations applicable to version @value{VERSION}:
7630
7631@itemize
7632@item
7633The installation process does not include a graphical user interface and
7634requires familiarity with GNU/Linux (see the following subsections to
7635get a feel of what that means.)
7636
8aaaae38 7637@item
dbcb0ab1 7638Support for the Logical Volume Manager (LVM) is missing.
8aaaae38
LC
7639
7640@item
0be9b4a9
LC
7641More and more system services are provided (@pxref{Services}), but some
7642may be missing.
8aaaae38
LC
7643
7644@item
0be9b4a9 7645More than 5,300 packages are available, but you may
8aaaae38 7646occasionally find that a useful package is missing.
5fe01c2d
LC
7647
7648@item
0be9b4a9 7649GNOME, Xfce, LXDE, and Enlightenment are available (@pxref{Desktop Services}),
5fe01c2d
LC
7650as well as a number of X11 window managers. However, some graphical
7651applications may be missing, as well as KDE.
8aaaae38
LC
7652@end itemize
7653
f97c9175
AE
7654You have been warned! But more than a disclaimer, this is an invitation
7655to report issues (and success stories!), and to join us in improving it.
8aaaae38 7656@xref{Contributing}, for more info.
5af6de3e 7657
e3009f60
LC
7658
7659@node Hardware Considerations
7660@subsection Hardware Considerations
7661
7662@cindex hardware support on GuixSD
7663GNU@tie{}GuixSD focuses on respecting the user's computing freedom. It
7664builds around the kernel Linux-libre, which means that only hardware for
e0b3f97e 7665which free software drivers and firmware exist is supported. Nowadays,
e3009f60
LC
7666a wide range of off-the-shelf hardware is supported on
7667GNU/Linux-libre---from keyboards to graphics cards to scanners and
7668Ethernet controllers. Unfortunately, there are still areas where
7669hardware vendors deny users control over their own computing, and such
7670hardware is not supported on GuixSD.
7671
7672@cindex WiFi, hardware support
e0b3f97e 7673One of the main areas where free drivers or firmware are lacking is WiFi
e3009f60
LC
7674devices. WiFi devices known to work include those using Atheros chips
7675(AR9271 and AR7010), which corresponds to the @code{ath9k} Linux-libre
52db41af
EB
7676driver, and those using Broadcom/AirForce chips (BCM43xx with
7677Wireless-Core Revision 5), which corresponds to the @code{b43-open}
7678Linux-libre driver. Free firmware exists for both and is available
e3009f60
LC
7679out-of-the-box on GuixSD, as part of @var{%base-firmware}
7680(@pxref{operating-system Reference, @code{firmware}}).
7681
7682@cindex RYF, Respects Your Freedom
7683The @uref{https://www.fsf.org/, Free Software Foundation} runs
e0b3f97e 7684@uref{https://www.fsf.org/ryf, @dfn{Respects Your Freedom}} (RYF), a
e3009f60
LC
7685certification program for hardware products that respect your freedom
7686and your privacy and ensure that you have control over your device. We
e0b3f97e 7687encourage you to check the list of RYF-certified devices.
e3009f60
LC
7688
7689Another useful resource is the @uref{https://www.h-node.org/, H-Node}
7690web site. It contains a catalog of hardware devices with information
7691about their support in GNU/Linux.
7692
7693
dedb8d5e 7694@node USB Stick Installation
5af6de3e
LC
7695@subsection USB Stick Installation
7696
7697An installation image for USB sticks can be downloaded from
d79013f6 7698@indicateurl{ftp://alpha.gnu.org/gnu/guix/guixsd-install-@value{VERSION}.@var{system}.xz},
5af6de3e
LC
7699where @var{system} is one of:
7700
7701@table @code
7702@item x86_64-linux
7703for a GNU/Linux system on Intel/AMD-compatible 64-bit CPUs;
7704
7705@item i686-linux
7706for a 32-bit GNU/Linux system on Intel-compatible CPUs.
7707@end table
7708
debc6360
LC
7709@c start duplication of authentication part from ``Binary Installation''
7710Make sure to download the associated @file{.sig} file and to verify the
7711authenticity of the image against it, along these lines:
7712
7713@example
d79013f6
DM
7714$ wget ftp://alpha.gnu.org/gnu/guix/guixsd-install-@value{VERSION}.@var{system}.xz.sig
7715$ gpg --verify guixsd-install-@value{VERSION}.@var{system}.xz.sig
debc6360
LC
7716@end example
7717
7718If that command fails because you do not have the required public key,
7719then run this command to import it:
7720
7721@example
7722$ gpg --keyserver pgp.mit.edu --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
7723@end example
7724
7725@noindent
7726and rerun the @code{gpg --verify} command.
7727@c end duplication
7728
d79013f6
DM
7729This image contains the tools necessary for an installation.
7730It is meant to be copied @emph{as is} to a large-enough USB stick or DVD.
5af6de3e
LC
7731
7732To copy the image to a USB stick, follow these steps:
7733
7734@enumerate
7735@item
7736Decompress the image using the @command{xz} command:
7737
7738@example
d79013f6 7739xz -d guixsd-install-@value{VERSION}.@var{system}.xz
5af6de3e
LC
7740@end example
7741
7742@item
f97c9175
AE
7743Insert a USB stick of 1@tie{}GiB or more into your machine, and determine
7744its device name. Assuming that the USB stick is known as @file{/dev/sdX},
5af6de3e
LC
7745copy the image with:
7746
7747@example
d79013f6 7748dd if=guixsd-install-@value{VERSION}.x86_64 of=/dev/sdX
0e2bfa3a 7749sync
5af6de3e
LC
7750@end example
7751
7752Access to @file{/dev/sdX} usually requires root privileges.
7753@end enumerate
7754
7755Once this is done, you should be able to reboot the system and boot from
4fed93a1 7756the USB stick. The latter usually requires you to get in the BIOS or
8ea98ee1 7757UEFI boot menu, where you can choose to boot from the USB stick.
5af6de3e 7758
c8b54374
VL
7759@xref{Installing GuixSD in a VM}, if, instead, you would like to install
7760GuixSD in a virtual machine (VM).
7761
d79013f6
DM
7762@node DVD Installation
7763@subsection DVD Installation
7764
7765An installation image for DVDs can be downloaded from
7766@indicateurl{ftp://alpha.gnu.org/gnu/guix/guixsd-install-@value{VERSION}.@var{system}.xz},
7767where @var{system} is one of:
7768
7769@table @code
7770@item x86_64-linux
7771for a GNU/Linux system on Intel/AMD-compatible 64-bit CPUs;
7772
7773@item i686-linux
7774for a 32-bit GNU/Linux system on Intel-compatible CPUs.
7775@end table
7776
7777@c start duplication of authentication part from ``Binary Installation''
7778Make sure to download the associated @file{.sig} file and to verify the
7779authenticity of the image against it, along these lines:
7780
7781@example
7782$ wget ftp://alpha.gnu.org/gnu/guix/guixsd-install-@value{VERSION}.@var{system}.xz.sig
7783$ gpg --verify guixsd-install-@value{VERSION}.@var{system}.xz.sig
7784@end example
7785
7786If that command fails because you do not have the required public key,
7787then run this command to import it:
7788
7789@example
7790$ gpg --keyserver pgp.mit.edu --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
7791@end example
7792
7793@noindent
7794and rerun the @code{gpg --verify} command.
7795@c end duplication
7796
7797This image contains the tools necessary for an installation.
7798It is meant to be copied @emph{as is} to a large-enough USB stick or DVD.
7799
7800To copy the image to a DVD, follow these steps:
7801
7802@enumerate
7803@item
7804Decompress the image using the @command{xz} command:
7805
7806@example
7807xz -d guixsd-install-@value{VERSION}.@var{system}.xz
7808@end example
7809
7810@item
7811Insert a blank DVD into your machine, and determine
7812its device name. Assuming that the DVD drive is known as @file{/dev/srX},
7813copy the image with:
7814
7815@example
7816growisofs -dvd-compat -Z /dev/srX=guixsd-install-@value{VERSION}.x86_64
7817@end example
7818
7819Access to @file{/dev/srX} usually requires root privileges.
7820@end enumerate
7821
7822Once this is done, you should be able to reboot the system and boot from
7823the DVD. The latter usually requires you to get in the BIOS or
7824UEFI boot menu, where you can choose to boot from the DVD.
7825
7826@xref{Installing GuixSD in a VM}, if, instead, you would like to install
7827GuixSD in a virtual machine (VM).
7828
dedb8d5e 7829@node Preparing for Installation
5af6de3e
LC
7830@subsection Preparing for Installation
7831
d79013f6
DM
7832Once you have successfully booted your computer using the installation medium,
7833you should end up with a root prompt. Several console TTYs are configured
7834and can be used to run commands as root. TTY2 shows this documentation,
de341e7c
LC
7835browsable using the Info reader commands (@pxref{Top,,, info-stnd,
7836Stand-alone GNU Info}). The installation system runs the GPM mouse
7837daemon, which allows you to select text with the left mouse button and
7838to paste it with the middle button.
5af6de3e 7839
ff925d37
LC
7840@quotation Note
7841Installation requires access to the Internet so that any missing
7842dependencies of your system configuration can be downloaded. See the
7843``Networking'' section below.
7844@end quotation
7845
0e69cf67
LC
7846The installation system includes many common tools needed for this task.
7847But it is also a full-blown GuixSD system, which means that you can
7848install additional packages, should you need it, using @command{guix
7849package} (@pxref{Invoking guix package}).
7850
dedb8d5e 7851@subsubsection Keyboard Layout
5af6de3e 7852
dedb8d5e
LC
7853@cindex keyboard layout
7854The installation image uses the US qwerty keyboard layout. If you want
7855to change it, you can use the @command{loadkeys} command. For example,
7856the following command selects the Dvorak keyboard layout:
5af6de3e 7857
dedb8d5e
LC
7858@example
7859loadkeys dvorak
7860@end example
7861
7862See the files under @file{/run/current-system/profile/share/keymaps} for
7863a list of available keyboard layouts. Run @command{man loadkeys} for
7864more information.
7865
7866@subsubsection Networking
7867
7868Run the following command see what your network interfaces are called:
235cba85
LC
7869
7870@example
dedb8d5e 7871ifconfig -a
235cba85
LC
7872@end example
7873
1713c37f
LC
7874@noindent
7875@dots{} or, using the GNU/Linux-specific @command{ip} command:
7876
7877@example
7878ip a
7879@end example
7880
95c559c1 7881@c http://cgit.freedesktop.org/systemd/systemd/tree/src/udev/udev-builtin-net_id.c#n20
dedb8d5e
LC
7882Wired interfaces have a name starting with @samp{e}; for example, the
7883interface corresponding to the first on-board Ethernet controller is
7884called @samp{eno1}. Wireless interfaces have a name starting with
7885@samp{w}, like @samp{w1p2s0}.
7886
7887@table @asis
7888@item Wired connection
7889To configure a wired network run the following command, substituting
7890@var{interface} with the name of the wired interface you want to use.
7891
7892@example
7893ifconfig @var{interface} up
7894@end example
7895
7896@item Wireless connection
e32171ee
JD
7897@cindex wireless
7898@cindex WiFi
dedb8d5e
LC
7899To configure wireless networking, you can create a configuration file
7900for the @command{wpa_supplicant} configuration tool (its location is not
7901important) using one of the available text editors such as
7902@command{zile}:
7903
7904@example
7905zile wpa_supplicant.conf
7906@end example
7907
7908As an example, the following stanza can go to this file and will work
7909for many wireless networks, provided you give the actual SSID and
7910passphrase for the network you are connecting to:
7911
7912@example
7913network=@{
ae768308 7914 ssid="@var{my-ssid}"
dedb8d5e
LC
7915 key_mgmt=WPA-PSK
7916 psk="the network's secret passphrase"
7917@}
7918@end example
7919
7920Start the wireless service and run it in the background with the
7921following command (substitute @var{interface} with the name of the
7922network interface you want to use):
7923
7924@example
7925wpa_supplicant -c wpa_supplicant.conf -i @var{interface} -B
7926@end example
7927
641d0518 7928Run @command{man wpa_supplicant} for more information.
dedb8d5e
LC
7929@end table
7930
e32171ee 7931@cindex DHCP
dedb8d5e
LC
7932At this point, you need to acquire an IP address. On a network where IP
7933addresses are automatically assigned @i{via} DHCP, you can run:
7934
7935@example
15650ac2 7936dhclient -v @var{interface}
dedb8d5e 7937@end example
5af6de3e 7938
dedb8d5e
LC
7939Try to ping a server to see if networking is up and running:
7940
7941@example
7942ping -c 3 gnu.org
7943@end example
5af6de3e
LC
7944
7945Setting up network access is almost always a requirement because the
7946image does not contain all the software and tools that may be needed.
7947
c80cd4df
MB
7948@cindex installing over SSH
7949If you want to, you can continue the installation remotely by starting
7950an SSH server:
7951
7952@example
7953herd start ssh-daemon
7954@end example
7955
7956Make sure to either set a password with @command{passwd}, or configure
7957OpenSSH public key authentication before logging in.
7958
dedb8d5e
LC
7959@subsubsection Disk Partitioning
7960
7961Unless this has already been done, the next step is to partition, and
7962then format the target partition(s).
7963
7964The installation image includes several partitioning tools, including
7965Parted (@pxref{Overview,,, parted, GNU Parted User Manual}),
7966@command{fdisk}, and @command{cfdisk}. Run it and set up your disk with
7967the partition layout you want:
7968
7969@example
7970cfdisk
7971@end example
7972
d918d79f
SB
7973If your disk uses the GUID Partition Table (GPT) format and you plan to
7974install BIOS-based GRUB (which is the default), make sure a BIOS Boot
7975Partition is available (@pxref{BIOS installation,,, grub, GNU GRUB
7976manual}).
7977
8ea98ee1
MB
7978@cindex EFI, installation
7979@cindex UEFI, installation
7980@cindex ESP, EFI system partition
7981If you instead wish to use EFI-based GRUB, a FAT32 @dfn{EFI System Partition}
7982(ESP) is required. This partition should be mounted at @file{/boot/efi} and
7983must have the @code{esp} flag set. E.g., for @command{parted}:
7984
7985@example
7986parted /dev/sda set 1 esp on
7987@end example
7988
dedb8d5e
LC
7989Once you are done partitioning the target hard disk drive, you have to
7990create a file system on the relevant partition(s)@footnote{Currently
b1a505ba
DC
7991GuixSD only supports ext4 and btrfs file systems. In particular, code
7992that reads partition UUIDs and labels only works for these file system
6ab63268
LC
7993types.}. For the ESP, if you have one and assuming it is
7994@file{/dev/sda2}, run:
7995
7996@example
7997mkfs.fat -F32 /dev/sda2
7998@end example
5af6de3e 7999
7ab44369
LC
8000Preferably, assign partitions a label so that you can easily and
8001reliably refer to them in @code{file-system} declarations (@pxref{File
8002Systems}). This is typically done using the @code{-L} option of
dedb8d5e
LC
8003@command{mkfs.ext4} and related commands. So, assuming the target root
8004partition lives at @file{/dev/sda1}, a file system with the label
8005@code{my-root} can be created with:
7ab44369 8006
dedb8d5e
LC
8007@example
8008mkfs.ext4 -L my-root /dev/sda1
8009@end example
dd816355 8010
13fb1bd9
LC
8011@cindex encrypted disk
8012If you are instead planning to encrypt the root partition, you can use
8013the Cryptsetup/LUKS utilities to do that (see @inlinefmtifelse{html,
8014@uref{https://linux.die.net/man/8/cryptsetup, @code{man cryptsetup}},
8015@code{man cryptsetup}} for more information.) Assuming you want to
8016store the root partition on @file{/dev/sda1}, the command sequence would
8017be along these lines:
6d6e6281 8018
13fb1bd9
LC
8019@example
8020cryptsetup luksFormat /dev/sda1
8021cryptsetup open --type luks /dev/sda1 my-partition
8022mkfs.ext4 -L my-root /dev/mapper/my-partition
8023@end example
5af6de3e 8024
dedb8d5e 8025Once that is done, mount the target root partition under @file{/mnt}
13fb1bd9
LC
8026with a command like (again, assuming @code{my-root} is the label of the
8027root partition):
83a17b62 8028
dedb8d5e 8029@example
13fb1bd9 8030mount LABEL=my-root /mnt
dedb8d5e 8031@end example
83a17b62 8032
8ea98ee1
MB
8033Also mount any other partitions you would like to use on the target
8034system relative to this path. If you have @file{/boot} on a separate
8035partition for example, mount it at @file{/mnt/boot} now so it is found
8036by @code{guix system init} afterwards.
8037
31b6cdf8
LC
8038Finally, if you plan to use one or more swap partitions (@pxref{Memory
8039Concepts, swap space,, libc, The GNU C Library Reference Manual}), make
8040sure to initialize them with @command{mkswap}. Assuming you have one
8041swap partition on @file{/dev/sda2}, you would run:
8042
8043@example
8044mkswap /dev/sda2
b2ff76a0 8045swapon /dev/sda2
31b6cdf8
LC
8046@end example
8047
a4ca4362
CM
8048Alternatively, you may use a swap file. For example, assuming that in
8049the new system you want to use the file @file{/swapfile} as a swap file,
8050you would run@footnote{This example will work for many types of file
8051systems (e.g., ext4). However, for copy-on-write file systems (e.g.,
8052btrfs), the required steps may be different. For details, see the
8053manual pages for @command{mkswap} and @command{swapon}.}:
8054
8055@example
8056# This is 10 GiB of swap space. Adjust "count" to change the size.
8057dd if=/dev/zero of=/mnt/swapfile bs=1MiB count=10240
8058# For security, make the file readable and writable only by root.
8059chmod 600 /mnt/swapfile
8060mkswap /mnt/swapfile
8061swapon /mnt/swapfile
8062@end example
8063
8064Note that if you have encrypted the root partition and created a swap
8065file in its file system as described above, then the encryption also
8066protects the swap file, just like any other file in that file system.
8067
dedb8d5e
LC
8068@node Proceeding with the Installation
8069@subsection Proceeding with the Installation
83a17b62 8070
dedb8d5e
LC
8071With the target partitions ready and the target root mounted on
8072@file{/mnt}, we're ready to go. First, run:
5af6de3e 8073
dedb8d5e
LC
8074@example
8075herd start cow-store /mnt
8076@end example
5af6de3e 8077
b397c0d5
LC
8078This makes @file{/gnu/store} copy-on-write, such that packages added to it
8079during the installation phase are written to the target disk on @file{/mnt}
8080rather than kept in memory. This is necessary because the first phase of
8081the @command{guix system init} command (see below) entails downloads or
8082builds to @file{/gnu/store} which, initially, is an in-memory file system.
5af6de3e 8083
dedb8d5e 8084Next, you have to edit a file and
5af6de3e 8085provide the declaration of the operating system to be installed. To
a8cb87ab
LC
8086that end, the installation system comes with three text editors: GNU nano
8087(@pxref{Top,,, nano, GNU nano Manual}), GNU Zile (an Emacs clone), and
8088nvi (a clone of the original BSD @command{vi} editor).
efa77c6c
LC
8089We strongly recommend storing that file on the target root file system, say,
8090as @file{/mnt/etc/config.scm}. Failing to do that, you will have lost your
8091configuration file once you have rebooted into the newly-installed system.
5af6de3e 8092
dedb8d5e
LC
8093@xref{Using the Configuration System}, for an overview of the
8094configuration file. The example configurations discussed in that
8095section are available under @file{/etc/configuration} in the
8096installation image. Thus, to get started with a system configuration
8097providing a graphical display server (a ``desktop'' system), you can run
8098something along these lines:
8099
8100@example
8101# mkdir /mnt/etc
8102# cp /etc/configuration/desktop.scm /mnt/etc/config.scm
8103# zile /mnt/etc/config.scm
8104@end example
8105
8106You should pay attention to what your configuration file contains, and
8107in particular:
8108
8109@itemize
8110@item
045ebb3e
AW
8111Make sure the @code{grub-configuration} form refers to the target you
8112want to install GRUB on. It should mention @code{grub-bootloader} if
8113you are installing GRUB in the legacy way, or @code{grub-efi-bootloader}
8114for newer UEFI systems. For legacy systems, the @code{target} field
8115names a device, like @code{/dev/sda}; for UEFI systems it names a path
8116to a mounted EFI partition, like @code{/boot/efi}, and do make sure the
8117path is actually mounted.
dedb8d5e
LC
8118
8119@item
8120Be sure that your partition labels match the value of their respective
8121@code{device} fields in your @code{file-system} configuration, assuming
8122your @code{file-system} configuration sets the value of @code{title} to
8123@code{'label}.
13fb1bd9
LC
8124
8125@item
8126If there are encrypted or RAID partitions, make sure to add a
8127@code{mapped-devices} field to describe them (@pxref{Mapped Devices}).
dedb8d5e 8128@end itemize
5af6de3e 8129
dd51caac
LC
8130Once you are done preparing the configuration file, the new system must
8131be initialized (remember that the target root file system is mounted
8132under @file{/mnt}):
5af6de3e
LC
8133
8134@example
8135guix system init /mnt/etc/config.scm /mnt
8136@end example
8137
8138@noindent
dedb8d5e 8139This copies all the necessary files and installs GRUB on
f8818360 8140@file{/dev/sdX}, unless you pass the @option{--no-bootloader} option. For
6621cdb6 8141more information, @pxref{Invoking guix system}. This command may trigger
5af6de3e
LC
8142downloads or builds of missing packages, which can take some time.
8143
1bd4e6db
LC
8144Once that command has completed---and hopefully succeeded!---you can run
8145@command{reboot} and boot into the new system. The @code{root} password
8146in the new system is initially empty; other users' passwords need to be
8147initialized by running the @command{passwd} command as @code{root},
8148unless your configuration specifies otherwise
8149(@pxref{user-account-password, user account passwords}).
8150
7fcf2a0b
LC
8151@cindex upgrading GuixSD
8152From then on, you can update GuixSD whenever you want by running
8153@command{guix pull} as @code{root} (@pxref{Invoking guix pull}), and
8154then running @command{guix system reconfigure} to build a new system
8155generation with the latest packages and services (@pxref{Invoking guix
8156system}). We recommend doing that regularly so that your system
8157includes the latest security updates (@pxref{Security Updates}).
8158
1bd4e6db 8159Join us on @code{#guix} on the Freenode IRC network or on
5af6de3e
LC
8160@file{guix-devel@@gnu.org} to share your experience---good or not so
8161good.
8162
c8b54374
VL
8163@node Installing GuixSD in a VM
8164@subsection Installing GuixSD in a Virtual Machine
8165
8166@cindex virtual machine, GuixSD installation
4b236c88
LF
8167@cindex virtual private server (VPS)
8168@cindex VPS (virtual private server)
8169If you'd like to install GuixSD in a virtual machine (VM) or on a
8170virtual private server (VPS) rather than on your beloved machine, this
8171section is for you.
c8b54374
VL
8172
8173To boot a @uref{http://qemu.org/,QEMU} VM for installing GuixSD in a
8174disk image, follow these steps:
8175
8176@enumerate
8177@item
a0885414
LF
8178First, retrieve and decompress the GuixSD installation image as
8179described previously (@pxref{USB Stick Installation}).
c8b54374
VL
8180
8181@item
8182Create a disk image that will hold the installed system. To make a
8183qcow2-formatted disk image, use the @command{qemu-img} command:
8184
8185@example
01049bb0 8186qemu-img create -f qcow2 guixsd.img 50G
c8b54374
VL
8187@end example
8188
01049bb0
LF
8189The resulting file will be much smaller than 50 GB (typically less than
81901 MB), but it will grow as the virtualized storage device is filled up.
c8b54374
VL
8191
8192@item
8193Boot the USB installation image in an VM:
8194
8195@example
8196qemu-system-x86_64 -m 1024 -smp 1 \
d36b8457 8197 -net user -net nic,model=virtio -boot menu=on \
d79013f6 8198 -drive file=guixsd-install-@value{VERSION}.@var{system} \
1c25d6d0 8199 -drive file=guixsd.img
c8b54374
VL
8200@end example
8201
1c25d6d0
DM
8202The ordering of the drives matters.
8203
c8b54374
VL
8204In the VM console, quickly press the @kbd{F12} key to enter the boot
8205menu. Then press the @kbd{2} key and the @kbd{RET} key to validate your
8206selection.
8207
8208@item
8209You're now root in the VM, proceed with the installation process.
8210@xref{Preparing for Installation}, and follow the instructions.
8211@end enumerate
8212
8213Once installation is complete, you can boot the system that's on your
8214@file{guixsd.img} image. @xref{Running GuixSD in a VM}, for how to do
8215that.
8216
dedb8d5e 8217@node Building the Installation Image
5af6de3e
LC
8218@subsection Building the Installation Image
8219
e32171ee 8220@cindex installation image
5af6de3e
LC
8221The installation image described above was built using the @command{guix
8222system} command, specifically:
8223
8224@example
a8ac4f08 8225guix system disk-image gnu/system/install.scm
5af6de3e
LC
8226@end example
8227
6e6a0401
AE
8228Have a look at @file{gnu/system/install.scm} in the source tree,
8229and see also @ref{Invoking guix system} for more information
5af6de3e
LC
8230about the installation image.
8231
cf4a9129
LC
8232@node System Configuration
8233@section System Configuration
b208a005 8234
cf4a9129 8235@cindex system configuration
3ca2731c 8236The Guix System Distribution supports a consistent whole-system configuration
cf4a9129
LC
8237mechanism. By that we mean that all aspects of the global system
8238configuration---such as the available system services, timezone and
8239locale settings, user accounts---are declared in a single place. Such
8240a @dfn{system configuration} can be @dfn{instantiated}---i.e., effected.
91ef73d4 8241
cf4a9129
LC
8242One of the advantages of putting all the system configuration under the
8243control of Guix is that it supports transactional system upgrades, and
1068f26b 8244makes it possible to roll back to a previous system instantiation,
cf4a9129 8245should something go wrong with the new one (@pxref{Features}). Another
1068f26b 8246advantage is that it makes it easy to replicate the exact same configuration
cf4a9129
LC
8247across different machines, or at different points in time, without
8248having to resort to additional administration tools layered on top of
1068f26b 8249the own tools of the system.
cf4a9129 8250@c Yes, we're talking of Puppet, Chef, & co. here. ↑
91ef73d4 8251
cf4a9129
LC
8252This section describes this mechanism. First we focus on the system
8253administrator's viewpoint---explaining how the system is configured and
8254instantiated. Then we show how this mechanism can be extended, for
8255instance to support new system services.
91ef73d4 8256
cf4a9129
LC
8257@menu
8258* Using the Configuration System:: Customizing your GNU system.
7313a52e 8259* operating-system Reference:: Detail of operating-system declarations.
cf4a9129 8260* File Systems:: Configuring file system mounts.
510f9d86 8261* Mapped Devices:: Block device extra processing.
cf4a9129 8262* User Accounts:: Specifying user accounts.
598e19dc 8263* Locales:: Language and cultural convention settings.
cf4a9129 8264* Services:: Specifying system services.
0ae8c15a 8265* Setuid Programs:: Programs running with root privileges.
efb5e833 8266* X.509 Certificates:: Authenticating HTTPS servers.
996ed739 8267* Name Service Switch:: Configuring libc's name service switch.
fd1b1fa2 8268* Initial RAM Disk:: Linux-Libre bootstrapping.
74e64724 8269* Bootloader Configuration:: Configuring the boot loader.
cf4a9129 8270* Invoking guix system:: Instantiating a system configuration.
97d76250 8271* Running GuixSD in a VM:: How to run GuixSD in a virtual machine.
cf4a9129
LC
8272* Defining Services:: Adding new service definitions.
8273@end menu
91ef73d4 8274
cf4a9129
LC
8275@node Using the Configuration System
8276@subsection Using the Configuration System
64d76fa6 8277
cf4a9129
LC
8278The operating system is configured by providing an
8279@code{operating-system} declaration in a file that can then be passed to
8280the @command{guix system} command (@pxref{Invoking guix system}). A
8281simple setup, with the default system services, the default Linux-Libre
8282kernel, initial RAM disk, and boot loader looks like this:
91ef73d4 8283
cf4a9129
LC
8284@findex operating-system
8285@lisp
dd51caac 8286@include os-config-bare-bones.texi
cf4a9129 8287@end lisp
401c53c4 8288
cf4a9129
LC
8289This example should be self-describing. Some of the fields defined
8290above, such as @code{host-name} and @code{bootloader}, are mandatory.
8291Others, such as @code{packages} and @code{services}, can be omitted, in
8292which case they get a default value.
e7f34eb0 8293
5d94ac51
LC
8294Below we discuss the effect of some of the most important fields
8295(@pxref{operating-system Reference}, for details about all the available
8296fields), and how to @dfn{instantiate} the operating system using
8297@command{guix system}.
8298
8299@unnumberedsubsubsec Globally-Visible Packages
8300
cf4a9129 8301@vindex %base-packages
5d94ac51
LC
8302The @code{packages} field lists packages that will be globally visible
8303on the system, for all user accounts---i.e., in every user's @code{PATH}
8304environment variable---in addition to the per-user profiles
8305(@pxref{Invoking guix package}). The @var{%base-packages} variable
8306provides all the tools one would expect for basic user and administrator
8307tasks---including the GNU Core Utilities, the GNU Networking Utilities,
8308the GNU Zile lightweight text editor, @command{find}, @command{grep},
960c40de
LC
8309etc. The example above adds GNU@tie{}Screen and OpenSSH to those,
8310taken from the @code{(gnu packages screen)} and @code{(gnu packages ssh)}
8311modules (@pxref{Package Modules}). The
fe0915cf
JL
8312@code{(list package output)} syntax can be used to add a specific output
8313of a package:
8314
8315@lisp
8316(use-modules (gnu packages))
8317(use-modules (gnu packages dns))
8318
8319(operating-system
8320 ;; ...
8321 (packages (cons (list bind "utils")
8322 %base-packages)))
8323@end lisp
e7f34eb0 8324
f6c9fb1b
LC
8325@findex specification->package
8326Referring to packages by variable name, like @var{tcpdump} above, has
8327the advantage of being unambiguous; it also allows typos and such to be
8328diagnosed right away as ``unbound variables''. The downside is that one
8329needs to know which module defines which package, and to augment the
8330@code{use-package-modules} line accordingly. To avoid that, one can use
8331the @code{specification->package} procedure of the @code{(gnu packages)}
8332module, which returns the best package for a given name or name and
8333version:
8334
8335@lisp
8336(use-modules (gnu packages))
8337
8338(operating-system
8339 ;; ...
8340 (packages (append (map specification->package
d5e59248 8341 '("tcpdump" "htop" "gnupg@@2.0"))
f6c9fb1b
LC
8342 %base-packages)))
8343@end lisp
8344
5d94ac51
LC
8345@unnumberedsubsubsec System Services
8346
e32171ee 8347@cindex services
cf4a9129
LC
8348@vindex %base-services
8349The @code{services} field lists @dfn{system services} to be made
8350available when the system starts (@pxref{Services}).
8351The @code{operating-system} declaration above specifies that, in
8352addition to the basic services, we want the @command{lshd} secure shell
cd6f6c22
LC
8353daemon listening on port 2222 (@pxref{Networking Services,
8354@code{lsh-service}}). Under the hood,
cf4a9129
LC
8355@code{lsh-service} arranges so that @code{lshd} is started with the
8356right command-line options, possibly with supporting configuration files
cd6f6c22
LC
8357generated as needed (@pxref{Defining Services}).
8358
8359@cindex customization, of services
8360@findex modify-services
8361Occasionally, instead of using the base services as is, you will want to
4d343a14
CM
8362customize them. To do this, use @code{modify-services} (@pxref{Service
8363Reference, @code{modify-services}}) to modify the list.
8364
8365For example, suppose you want to modify @code{guix-daemon} and Mingetty
8366(the console log-in) in the @var{%base-services} list (@pxref{Base
8367Services, @code{%base-services}}). To do that, you can write the
8368following in your operating system declaration:
cd6f6c22
LC
8369
8370@lisp
4d343a14
CM
8371(define %my-services
8372 ;; My very own list of services.
8373 (modify-services %base-services
8374 (guix-service-type config =>
8375 (guix-configuration
8376 (inherit config)
8377 (use-substitutes? #f)
8378 (extra-options '("--gc-keep-derivations"))))
8379 (mingetty-service-type config =>
8380 (mingetty-configuration
317d3b47 8381 (inherit config)))))
4d343a14
CM
8382
8383(operating-system
8384 ;; @dots{}
8385 (services %my-services))
cd6f6c22
LC
8386@end lisp
8387
4d343a14
CM
8388This changes the configuration---i.e., the service parameters---of the
8389@code{guix-service-type} instance, and that of all the
8390@code{mingetty-service-type} instances in the @var{%base-services} list.
8391Observe how this is accomplished: first, we arrange for the original
8392configuration to be bound to the identifier @code{config} in the
8393@var{body}, and then we write the @var{body} so that it evaluates to the
8394desired configuration. In particular, notice how we use @code{inherit}
8395to create a new configuration which has the same values as the old
8396configuration, but with a few modifications.
a1ba8475 8397
13fb1bd9
LC
8398@cindex encrypted disk
8399The configuration for a typical ``desktop'' usage, with an encrypted
8400root partition, the X11 display
d038b674
LC
8401server, GNOME and Xfce (users can choose which of these desktop
8402environments to use at the log-in screen by pressing @kbd{F1}), network
8403management, power management, and more, would look like this:
dd51caac
LC
8404
8405@lisp
8406@include os-config-desktop.texi
8407@end lisp
8408
50fcf37c 8409@cindex UEFI
8ea98ee1 8410A graphical UEFI system with a choice of lightweight window managers
d038b674
LC
8411instead of full-blown desktop environments would look like this:
8412
8413@lisp
8414@include os-config-lightweight-desktop.texi
8415@end lisp
8416
50fcf37c
LC
8417This example refers to the @file{/boot/efi} partition by its UUID,
8418@code{1234-ABCD}. Replace this UUID with the right UUID on your system,
8419as returned by the @command{blkid} command.
8420
dd51caac 8421@xref{Desktop Services}, for the exact list of services provided by
efb5e833
LC
8422@var{%desktop-services}. @xref{X.509 Certificates}, for background
8423information about the @code{nss-certs} package that is used here.
dd51caac 8424
5d94ac51
LC
8425Again, @var{%desktop-services} is just a list of service objects. If
8426you want to remove services from there, you can do so using the
8427procedures for list filtering (@pxref{SRFI-1 Filtering and
8428Partitioning,,, guile, GNU Guile Reference Manual}). For instance, the
8429following expression returns a list that contains all the services in
8430@var{%desktop-services} minus the Avahi service:
8431
8432@example
8433(remove (lambda (service)
8434 (eq? (service-kind service) avahi-service-type))
8435 %desktop-services)
8436@end example
8437
8438@unnumberedsubsubsec Instantiating the System
8439
8440Assuming the @code{operating-system} declaration
8441is stored in the @file{my-system-config.scm}
cf4a9129
LC
8442file, the @command{guix system reconfigure my-system-config.scm} command
8443instantiates that configuration, and makes it the default GRUB boot
65797bff
LC
8444entry (@pxref{Invoking guix system}).
8445
1068f26b 8446The normal way to change the system configuration is by updating this
65797bff 8447file and re-running @command{guix system reconfigure}. One should never
8b499030 8448have to touch files in @file{/etc} or to run commands that modify the
65797bff
LC
8449system state such as @command{useradd} or @command{grub-install}. In
8450fact, you must avoid that since that would not only void your warranty
8451but also prevent you from rolling back to previous versions of your
8452system, should you ever need to.
8453
8454@cindex roll-back, of the operating system
8455Speaking of roll-back, each time you run @command{guix system
8456reconfigure}, a new @dfn{generation} of the system is created---without
8457modifying or deleting previous generations. Old system generations get
74e64724 8458an entry in the bootloader boot menu, allowing you to boot them in case
65797bff
LC
8459something went wrong with the latest generation. Reassuring, no? The
8460@command{guix system list-generations} command lists the system
067a2e2d
CM
8461generations available on disk. It is also possible to roll back the
8462system via the commands @command{guix system roll-back} and
8463@command{guix system switch-generation}.
8464
8465Although the command @command{guix system reconfigure} will not modify
8466previous generations, must take care when the current generation is not
8467the latest (e.g., after invoking @command{guix system roll-back}), since
8468the operation might overwrite a later generation (@pxref{Invoking guix
8469system}).
b81e1947 8470
5d94ac51
LC
8471@unnumberedsubsubsec The Programming Interface
8472
cf4a9129
LC
8473At the Scheme level, the bulk of an @code{operating-system} declaration
8474is instantiated with the following monadic procedure (@pxref{The Store
8475Monad}):
b81e1947 8476
cf4a9129
LC
8477@deffn {Monadic Procedure} operating-system-derivation os
8478Return a derivation that builds @var{os}, an @code{operating-system}
8479object (@pxref{Derivations}).
b81e1947 8480
cf4a9129
LC
8481The output of the derivation is a single directory that refers to all
8482the packages, configuration files, and other supporting files needed to
8483instantiate @var{os}.
8484@end deffn
b81e1947 8485
5d94ac51
LC
8486This procedure is provided by the @code{(gnu system)} module. Along
8487with @code{(gnu services)} (@pxref{Services}), this module contains the
8488guts of GuixSD. Make sure to visit it!
8489
8490
7313a52e
LC
8491@node operating-system Reference
8492@subsection @code{operating-system} Reference
8493
8494This section summarizes all the options available in
8495@code{operating-system} declarations (@pxref{Using the Configuration
8496System}).
8497
8498@deftp {Data Type} operating-system
8499This is the data type representing an operating system configuration.
8500By that, we mean all the global system configuration, not per-user
8501configuration (@pxref{Using the Configuration System}).
8502
8503@table @asis
8504@item @code{kernel} (default: @var{linux-libre})
fbb25e56 8505The package object of the operating system kernel to use@footnote{Currently
7313a52e
LC
8506only the Linux-libre kernel is supported. In the future, it will be
8507possible to use the GNU@tie{}Hurd.}.
8508
ee2a6304
LC
8509@item @code{kernel-arguments} (default: @code{'()})
8510List of strings or gexps representing additional arguments to pass on
1068f26b 8511the command-line of the kernel---e.g., @code{("console=ttyS0")}.
ee2a6304 8512
7313a52e 8513@item @code{bootloader}
74e64724 8514The system bootloader configuration object. @xref{Bootloader Configuration}.
7313a52e
LC
8515
8516@item @code{initrd} (default: @code{base-initrd})
e32171ee
JD
8517@cindex initrd
8518@cindex initial RAM disk
7313a52e
LC
8519A two-argument monadic procedure that returns an initial RAM disk for
8520the Linux kernel. @xref{Initial RAM Disk}.
8521
f34c56be
LC
8522@item @code{firmware} (default: @var{%base-firmware})
8523@cindex firmware
8524List of firmware packages loadable by the operating system kernel.
8525
52db41af
EB
8526The default includes firmware needed for Atheros- and Broadcom-based
8527WiFi devices (Linux-libre modules @code{ath9k} and @code{b43-open},
8528respectively). @xref{Hardware Considerations}, for more info on
8529supported hardware.
f34c56be 8530
7313a52e
LC
8531@item @code{host-name}
8532The host name.
8533
8534@item @code{hosts-file}
8535@cindex hosts file
24e02c28 8536A file-like object (@pxref{G-Expressions, file-like objects}) for use as
7313a52e 8537@file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C Library
24e02c28 8538Reference Manual}). The default is a file with entries for
7313a52e
LC
8539@code{localhost} and @var{host-name}.
8540
8541@item @code{mapped-devices} (default: @code{'()})
8542A list of mapped devices. @xref{Mapped Devices}.
8543
8544@item @code{file-systems}
8545A list of file systems. @xref{File Systems}.
8546
8547@item @code{swap-devices} (default: @code{'()})
8548@cindex swap devices
a4ca4362
CM
8549A list of strings identifying devices or files to be used for ``swap
8550space'' (@pxref{Memory Concepts,,, libc, The GNU C Library Reference
8551Manual}). For example, @code{'("/dev/sda3")} or @code{'("/swapfile")}.
8552It is possible to specify a swap file in a file system on a mapped
8553device, provided that the necessary device mapping and file system are
8554also specified. @xref{Mapped Devices} and @ref{File Systems}.
7313a52e 8555
bf87f38a 8556@item @code{users} (default: @code{%base-user-accounts})
7313a52e
LC
8557@itemx @code{groups} (default: @var{%base-groups})
8558List of user accounts and groups. @xref{User Accounts}.
8559
8560@item @code{skeletons} (default: @code{(default-skeletons)})
e9dffec1
LC
8561A list target file name/file-like object tuples (@pxref{G-Expressions,
8562file-like objects}). These are the skeleton files that will be added to
8563the home directory of newly-created user accounts.
7313a52e
LC
8564
8565For instance, a valid value may look like this:
8566
8567@example
e9dffec1
LC
8568`((".bashrc" ,(plain-file "bashrc" "echo Hello\n"))
8569 (".guile" ,(plain-file "guile"
8570 "(use-modules (ice-9 readline))
8571 (activate-readline)")))
7313a52e
LC
8572@end example
8573
8574@item @code{issue} (default: @var{%default-issue})
8575A string denoting the contents of the @file{/etc/issue} file, which is
1068f26b 8576displayed when users log in on a text console.
7313a52e
LC
8577
8578@item @code{packages} (default: @var{%base-packages})
8579The set of packages installed in the global profile, which is accessible
8580at @file{/run/current-system/profile}.
8581
1068f26b 8582The default set includes core utilities and it is good practice to
7313a52e
LC
8583install non-core utilities in user profiles (@pxref{Invoking guix
8584package}).
8585
8586@item @code{timezone}
8587A timezone identifying string---e.g., @code{"Europe/Paris"}.
8588
17c20385
LC
8589You can run the @command{tzselect} command to find out which timezone
8590string corresponds to your region. Choosing an invalid timezone name
8591causes @command{guix system} to fail.
8592
598e19dc
LC
8593@item @code{locale} (default: @code{"en_US.utf8"})
8594The name of the default locale (@pxref{Locale Names,,, libc, The GNU C
8595Library Reference Manual}). @xref{Locales}, for more information.
8596
8597@item @code{locale-definitions} (default: @var{%default-locale-definitions})
8598The list of locale definitions to be compiled and that may be used at
8599run time. @xref{Locales}.
7313a52e 8600
34760ae7
LC
8601@item @code{locale-libcs} (default: @code{(list @var{glibc})})
8602The list of GNU@tie{}libc packages whose locale data and tools are used
8603to build the locale definitions. @xref{Locales}, for compatibility
8604considerations that justify this option.
8605
996ed739 8606@item @code{name-service-switch} (default: @var{%default-nss})
1068f26b 8607Configuration of the libc name service switch (NSS)---a
996ed739
LC
8608@code{<name-service-switch>} object. @xref{Name Service Switch}, for
8609details.
8610
7313a52e 8611@item @code{services} (default: @var{%base-services})
28d939af 8612A list of service objects denoting system services. @xref{Services}.
7313a52e
LC
8613
8614@item @code{pam-services} (default: @code{(base-pam-services)})
8615@cindex PAM
8616@cindex pluggable authentication modules
8617Linux @dfn{pluggable authentication module} (PAM) services.
8618@c FIXME: Add xref to PAM services section.
8619
8620@item @code{setuid-programs} (default: @var{%setuid-programs})
8621List of string-valued G-expressions denoting setuid programs.
8622@xref{Setuid Programs}.
8623
f5a9ffa0
AK
8624@item @code{sudoers-file} (default: @var{%sudoers-specification})
8625@cindex sudoers file
84765839
LC
8626The contents of the @file{/etc/sudoers} file as a file-like object
8627(@pxref{G-Expressions, @code{local-file} and @code{plain-file}}).
7313a52e
LC
8628
8629This file specifies which users can use the @command{sudo} command, what
8630they are allowed to do, and what privileges they may gain. The default
8631is that only @code{root} and members of the @code{wheel} group may use
8632@code{sudo}.
8633
8634@end table
8635@end deftp
8636
cf4a9129
LC
8637@node File Systems
8638@subsection File Systems
b81e1947 8639
cf4a9129 8640The list of file systems to be mounted is specified in the
1068f26b 8641@code{file-systems} field of the operating system declaration
cf4a9129
LC
8642(@pxref{Using the Configuration System}). Each file system is declared
8643using the @code{file-system} form, like this:
b81e1947
LC
8644
8645@example
cf4a9129
LC
8646(file-system
8647 (mount-point "/home")
8648 (device "/dev/sda3")
8649 (type "ext4"))
b81e1947
LC
8650@end example
8651
cf4a9129
LC
8652As usual, some of the fields are mandatory---those shown in the example
8653above---while others can be omitted. These are described below.
b81e1947 8654
cf4a9129
LC
8655@deftp {Data Type} file-system
8656Objects of this type represent file systems to be mounted. They
8657contain the following members:
5ff3c4b8 8658
cf4a9129
LC
8659@table @asis
8660@item @code{type}
8661This is a string specifying the type of the file system---e.g.,
8662@code{"ext4"}.
5ff3c4b8 8663
cf4a9129
LC
8664@item @code{mount-point}
8665This designates the place where the file system is to be mounted.
b81e1947 8666
cf4a9129
LC
8667@item @code{device}
8668This names the ``source'' of the file system. By default it is the name
8669of a node under @file{/dev}, but its meaning depends on the @code{title}
8670field described below.
401c53c4 8671
cf4a9129
LC
8672@item @code{title} (default: @code{'device})
8673This is a symbol that specifies how the @code{device} field is to be
8674interpreted.
401c53c4 8675
cf4a9129
LC
8676When it is the symbol @code{device}, then the @code{device} field is
8677interpreted as a file name; when it is @code{label}, then @code{device}
8678is interpreted as a partition label name; when it is @code{uuid},
8679@code{device} is interpreted as a partition unique identifier (UUID).
da7cabd4 8680
661a1d79 8681UUIDs may be converted from their string representation (as shown by the
0767f6a6
LC
8682@command{tune2fs -l} command) using the @code{uuid} form@footnote{The
8683@code{uuid} form expects 16-byte UUIDs as defined in
8684@uref{https://tools.ietf.org/html/rfc4122, RFC@tie{}4122}. This is the
8685form of UUID used by the ext2 family of file systems and others, but it
8686is different from ``UUIDs'' found in FAT file systems, for instance.},
8687like this:
661a1d79
LC
8688
8689@example
8690(file-system
8691 (mount-point "/home")
8692 (type "ext4")
8693 (title 'uuid)
8694 (device (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")))
8695@end example
8696
cf4a9129 8697The @code{label} and @code{uuid} options offer a way to refer to disk
661a1d79
LC
8698partitions without having to hard-code their actual device
8699name@footnote{Note that, while it is tempting to use
8700@file{/dev/disk/by-uuid} and similar device names to achieve the same
8701result, this is not recommended: These special device nodes are created
8702by the udev daemon and may be unavailable at the time the device is
8703mounted.}.
da7cabd4 8704
1068f26b 8705However, when the source of a file system is a mapped device (@pxref{Mapped
5f86a66e
LC
8706Devices}), its @code{device} field @emph{must} refer to the mapped
8707device name---e.g., @file{/dev/mapper/root-partition}---and consequently
8708@code{title} must be set to @code{'device}. This is required so that
8709the system knows that mounting the file system depends on having the
8710corresponding device mapping established.
8711
cf4a9129
LC
8712@item @code{flags} (default: @code{'()})
8713This is a list of symbols denoting mount flags. Recognized flags
2c071ce9
LC
8714include @code{read-only}, @code{bind-mount}, @code{no-dev} (disallow
8715access to special files), @code{no-suid} (ignore setuid and setgid
8716bits), and @code{no-exec} (disallow program execution.)
da7cabd4 8717
cf4a9129
LC
8718@item @code{options} (default: @code{#f})
8719This is either @code{#f}, or a string denoting mount options.
da7cabd4 8720
be21979d
LC
8721@item @code{mount?} (default: @code{#t})
8722This value indicates whether to automatically mount the file system when
8723the system is brought up. When set to @code{#f}, the file system gets
8724an entry in @file{/etc/fstab} (read by the @command{mount} command) but
8725is not automatically mounted.
8726
cf4a9129
LC
8727@item @code{needed-for-boot?} (default: @code{#f})
8728This Boolean value indicates whether the file system is needed when
8729booting. If that is true, then the file system is mounted when the
8730initial RAM disk (initrd) is loaded. This is always the case, for
8731instance, for the root file system.
da7cabd4 8732
cf4a9129
LC
8733@item @code{check?} (default: @code{#t})
8734This Boolean indicates whether the file system needs to be checked for
8735errors before being mounted.
f9cc8971 8736
4e469051
LC
8737@item @code{create-mount-point?} (default: @code{#f})
8738When true, the mount point is created if it does not exist yet.
8739
e51710d1 8740@item @code{dependencies} (default: @code{'()})
13fb1bd9
LC
8741This is a list of @code{<file-system>} or @code{<mapped-device>} objects
8742representing file systems that must be mounted or mapped devices that
8743must be opened before (and unmounted or closed after) this one.
e51710d1
LC
8744
8745As an example, consider a hierarchy of mounts: @file{/sys/fs/cgroup} is
8746a dependency of @file{/sys/fs/cgroup/cpu} and
8747@file{/sys/fs/cgroup/memory}.
8748
13fb1bd9
LC
8749Another example is a file system that depends on a mapped device, for
8750example for an encrypted partition (@pxref{Mapped Devices}).
cf4a9129
LC
8751@end table
8752@end deftp
da7cabd4 8753
a69576ea
LC
8754The @code{(gnu system file-systems)} exports the following useful
8755variables.
8756
8757@defvr {Scheme Variable} %base-file-systems
8758These are essential file systems that are required on normal systems,
cc0e575a 8759such as @var{%pseudo-terminal-file-system} and @var{%immutable-store} (see
3392ce5d
LC
8760below.) Operating system declarations should always contain at least
8761these.
a69576ea
LC
8762@end defvr
8763
7f239fd3
LC
8764@defvr {Scheme Variable} %pseudo-terminal-file-system
8765This is the file system to be mounted as @file{/dev/pts}. It supports
8766@dfn{pseudo-terminals} created @i{via} @code{openpty} and similar
8767functions (@pxref{Pseudo-Terminals,,, libc, The GNU C Library Reference
8768Manual}). Pseudo-terminals are used by terminal emulators such as
8769@command{xterm}.
8770@end defvr
8771
db17ae5c
LC
8772@defvr {Scheme Variable} %shared-memory-file-system
8773This file system is mounted as @file{/dev/shm} and is used to support
8774memory sharing across processes (@pxref{Memory-mapped I/O,
8775@code{shm_open},, libc, The GNU C Library Reference Manual}).
8776@end defvr
8777
3392ce5d
LC
8778@defvr {Scheme Variable} %immutable-store
8779This file system performs a read-only ``bind mount'' of
8780@file{/gnu/store}, making it read-only for all the users including
8781@code{root}. This prevents against accidental modification by software
8782running as @code{root} or by system administrators.
8783
8784The daemon itself is still able to write to the store: it remounts it
8785read-write in its own ``name space.''
8786@end defvr
8787
a69576ea
LC
8788@defvr {Scheme Variable} %binary-format-file-system
8789The @code{binfmt_misc} file system, which allows handling of arbitrary
8790executable file types to be delegated to user space. This requires the
8791@code{binfmt.ko} kernel module to be loaded.
8792@end defvr
8793
8794@defvr {Scheme Variable} %fuse-control-file-system
8795The @code{fusectl} file system, which allows unprivileged users to mount
8796and unmount user-space FUSE file systems. This requires the
8797@code{fuse.ko} kernel module to be loaded.
8798@end defvr
8799
510f9d86
LC
8800@node Mapped Devices
8801@subsection Mapped Devices
8802
8803@cindex device mapping
8804@cindex mapped devices
8805The Linux kernel has a notion of @dfn{device mapping}: a block device,
8806such as a hard disk partition, can be @dfn{mapped} into another device,
97c8aef1 8807usually in @code{/dev/mapper/},
510f9d86
LC
8808with additional processing over the data that flows through
8809it@footnote{Note that the GNU@tie{}Hurd makes no difference between the
8810concept of a ``mapped device'' and that of a file system: both boil down
8811to @emph{translating} input/output operations made on a file to
8812operations on its backing store. Thus, the Hurd implements mapped
8813devices, like file systems, using the generic @dfn{translator} mechanism
8814(@pxref{Translators,,, hurd, The GNU Hurd Reference Manual}).}. A
8815typical example is encryption device mapping: all writes to the mapped
8816device are encrypted, and all reads are deciphered, transparently.
97c8aef1
AE
8817Guix extends this notion by considering any device or set of devices that
8818are @dfn{transformed} in some way to create a new device; for instance,
8819RAID devices are obtained by @dfn{assembling} several other devices, such
8820as hard disks or partitions, into a new one that behaves as one partition.
8821Other examples, not yet implemented, are LVM logical volumes.
510f9d86 8822
97c8aef1
AE
8823Mapped devices are declared using the @code{mapped-device} form,
8824defined as follows; for examples, see below.
510f9d86
LC
8825
8826@deftp {Data Type} mapped-device
8827Objects of this type represent device mappings that will be made when
8828the system boots up.
8829
9cb426b8
LC
8830@table @code
8831@item source
97c8aef1
AE
8832This is either a string specifying the name of the block device to be mapped,
8833such as @code{"/dev/sda3"}, or a list of such strings when several devices
8834need to be assembled for creating a new one.
510f9d86 8835
9cb426b8 8836@item target
97c8aef1
AE
8837This string specifies the name of the resulting mapped device. For
8838kernel mappers such as encrypted devices of type @code{luks-device-mapping},
8839specifying @code{"my-partition"} leads to the creation of
510f9d86 8840the @code{"/dev/mapper/my-partition"} device.
97c8aef1
AE
8841For RAID devices of type @code{raid-device-mapping}, the full device name
8842such as @code{"/dev/md0"} needs to be given.
510f9d86 8843
9cb426b8 8844@item type
510f9d86
LC
8845This must be a @code{mapped-device-kind} object, which specifies how
8846@var{source} is mapped to @var{target}.
8847@end table
8848@end deftp
8849
8850@defvr {Scheme Variable} luks-device-mapping
8851This defines LUKS block device encryption using the @command{cryptsetup}
1068f26b 8852command from the package with the same name. It relies on the
510f9d86
LC
8853@code{dm-crypt} Linux kernel module.
8854@end defvr
8855
97c8aef1
AE
8856@defvr {Scheme Variable} raid-device-mapping
8857This defines a RAID device, which is assembled using the @code{mdadm}
8858command from the package with the same name. It requires a Linux kernel
8859module for the appropriate RAID level to be loaded, such as @code{raid456}
8860for RAID-4, RAID-5 or RAID-6, or @code{raid10} for RAID-10.
8861@end defvr
8862
8863@cindex disk encryption
8864@cindex LUKS
8865The following example specifies a mapping from @file{/dev/sda3} to
8866@file{/dev/mapper/home} using LUKS---the
ddf1cd51 8867@url{https://gitlab.com/cryptsetup/cryptsetup,Linux Unified Key Setup}, a
97c8aef1
AE
8868standard mechanism for disk encryption.
8869The @file{/dev/mapper/home}
8870device can then be used as the @code{device} of a @code{file-system}
8871declaration (@pxref{File Systems}).
8872
8873@example
8874(mapped-device
8875 (source "/dev/sda3")
8876 (target "home")
8877 (type luks-device-mapping))
8878@end example
8879
8880Alternatively, to become independent of device numbering, one may obtain
8881the LUKS UUID (@dfn{unique identifier}) of the source device by a
8882command like:
8883
8884@example
8885cryptsetup luksUUID /dev/sda3
8886@end example
8887
8888and use it as follows:
8889
8890@example
8891(mapped-device
8892 (source (uuid "cb67fc72-0d54-4c88-9d4b-b225f30b0f44"))
8893 (target "home")
8894 (type luks-device-mapping))
8895@end example
8896
a4ca4362
CM
8897@cindex swap encryption
8898It is also desirable to encrypt swap space, since swap space may contain
8899sensitive data. One way to accomplish that is to use a swap file in a
8900file system on a device mapped via LUKS encryption. In this way, the
8901swap file is encrypted because the entire device is encrypted.
8902@xref{Preparing for Installation,,Disk Partitioning}, for an example.
8903
97c8aef1
AE
8904A RAID device formed of the partitions @file{/dev/sda1} and @file{/dev/sdb1}
8905may be declared as follows:
8906
8907@example
8908(mapped-device
8909 (source (list "/dev/sda1" "/dev/sdb1"))
8910 (target "/dev/md0")
8911 (type raid-device-mapping))
8912@end example
8913
8914The @file{/dev/md0} device can then be used as the @code{device} of a
8915@code{file-system} declaration (@pxref{File Systems}).
8916Note that the RAID level need not be given; it is chosen during the
8917initial creation and formatting of the RAID device and is determined
8918automatically later.
8919
8920
cf4a9129
LC
8921@node User Accounts
8922@subsection User Accounts
ee85f3db 8923
e32171ee
JD
8924@cindex users
8925@cindex accounts
8926@cindex user accounts
9bea87a5
LC
8927User accounts and groups are entirely managed through the
8928@code{operating-system} declaration. They are specified with the
8929@code{user-account} and @code{user-group} forms:
ee85f3db 8930
cf4a9129
LC
8931@example
8932(user-account
8933 (name "alice")
8934 (group "users")
24e752c0
LC
8935 (supplementary-groups '("wheel" ;allow use of sudo, etc.
8936 "audio" ;sound card
8937 "video" ;video devices such as webcams
8938 "cdrom")) ;the good ol' CD-ROM
cf4a9129
LC
8939 (comment "Bob's sister")
8940 (home-directory "/home/alice"))
8941@end example
25083588 8942
9bea87a5
LC
8943When booting or upon completion of @command{guix system reconfigure},
8944the system ensures that only the user accounts and groups specified in
8945the @code{operating-system} declaration exist, and with the specified
8946properties. Thus, account or group creations or modifications made by
8947directly invoking commands such as @command{useradd} are lost upon
8948reconfiguration or reboot. This ensures that the system remains exactly
8949as declared.
8950
cf4a9129
LC
8951@deftp {Data Type} user-account
8952Objects of this type represent user accounts. The following members may
8953be specified:
ee85f3db 8954
cf4a9129
LC
8955@table @asis
8956@item @code{name}
8957The name of the user account.
ee85f3db 8958
cf4a9129 8959@item @code{group}
e32171ee 8960@cindex groups
cf4a9129
LC
8961This is the name (a string) or identifier (a number) of the user group
8962this account belongs to.
ee85f3db 8963
cf4a9129
LC
8964@item @code{supplementary-groups} (default: @code{'()})
8965Optionally, this can be defined as a list of group names that this
8966account belongs to.
ee85f3db 8967
cf4a9129
LC
8968@item @code{uid} (default: @code{#f})
8969This is the user ID for this account (a number), or @code{#f}. In the
8970latter case, a number is automatically chosen by the system when the
8971account is created.
ee85f3db 8972
cf4a9129 8973@item @code{comment} (default: @code{""})
1068f26b 8974A comment about the account, such as the account owner's full name.
c8c871d1 8975
cf4a9129
LC
8976@item @code{home-directory}
8977This is the name of the home directory for the account.
ee85f3db 8978
eb56ee02
LC
8979@item @code{create-home-directory?} (default: @code{#t})
8980Indicates whether the home directory of this account should be created
8981if it does not exist yet.
8982
cf4a9129
LC
8983@item @code{shell} (default: Bash)
8984This is a G-expression denoting the file name of a program to be used as
8985the shell (@pxref{G-Expressions}).
ee85f3db 8986
cf4a9129
LC
8987@item @code{system?} (default: @code{#f})
8988This Boolean value indicates whether the account is a ``system''
8989account. System accounts are sometimes treated specially; for instance,
8990graphical login managers do not list them.
ee85f3db 8991
1bd4e6db 8992@anchor{user-account-password}
cf4a9129 8993@item @code{password} (default: @code{#f})
eb59595c
LC
8994You would normally leave this field to @code{#f}, initialize user
8995passwords as @code{root} with the @command{passwd} command, and then let
9bea87a5
LC
8996users change it with @command{passwd}. Passwords set with
8997@command{passwd} are of course preserved across reboot and
8998reconfiguration.
eb59595c
LC
8999
9000If you @emph{do} want to have a preset password for an account, then
9001this field must contain the encrypted password, as a string.
5d1f1177
LC
9002@xref{crypt,,, libc, The GNU C Library Reference Manual}, for more information
9003on password encryption, and @ref{Encryption,,, guile, GNU Guile Reference
eb59595c 9004Manual}, for information on Guile's @code{crypt} procedure.
c8c871d1 9005
cf4a9129
LC
9006@end table
9007@end deftp
ee85f3db 9008
e32171ee 9009@cindex groups
cf4a9129 9010User group declarations are even simpler:
ee85f3db 9011
cf4a9129
LC
9012@example
9013(user-group (name "students"))
9014@end example
ee85f3db 9015
cf4a9129
LC
9016@deftp {Data Type} user-group
9017This type is for, well, user groups. There are just a few fields:
af8a56b8 9018
cf4a9129
LC
9019@table @asis
9020@item @code{name}
1068f26b 9021The name of the group.
ee85f3db 9022
cf4a9129
LC
9023@item @code{id} (default: @code{#f})
9024The group identifier (a number). If @code{#f}, a new number is
9025automatically allocated when the group is created.
ee85f3db 9026
c8fa3426
LC
9027@item @code{system?} (default: @code{#f})
9028This Boolean value indicates whether the group is a ``system'' group.
9029System groups have low numerical IDs.
9030
cf4a9129
LC
9031@item @code{password} (default: @code{#f})
9032What, user groups can have a password? Well, apparently yes. Unless
1068f26b 9033@code{#f}, this field specifies the password of the group.
ee85f3db 9034
cf4a9129
LC
9035@end table
9036@end deftp
401c53c4 9037
cf4a9129
LC
9038For convenience, a variable lists all the basic user groups one may
9039expect:
401c53c4 9040
cf4a9129
LC
9041@defvr {Scheme Variable} %base-groups
9042This is the list of basic user groups that users and/or packages expect
9043to be present on the system. This includes groups such as ``root'',
9044``wheel'', and ``users'', as well as groups used to control access to
9045specific devices such as ``audio'', ``disk'', and ``cdrom''.
9046@end defvr
401c53c4 9047
bf87f38a
LC
9048@defvr {Scheme Variable} %base-user-accounts
9049This is the list of basic system accounts that programs may expect to
9050find on a GNU/Linux system, such as the ``nobody'' account.
9051
9052Note that the ``root'' account is not included here. It is a
9053special-case and is automatically added whether or not it is specified.
9054@end defvr
9055
598e19dc
LC
9056@node Locales
9057@subsection Locales
9058
9059@cindex locale
9060A @dfn{locale} defines cultural conventions for a particular language
9061and region of the world (@pxref{Locales,,, libc, The GNU C Library
9062Reference Manual}). Each locale has a name that typically has the form
b2636518 9063@code{@var{language}_@var{territory}.@var{codeset}}---e.g.,
598e19dc
LC
9064@code{fr_LU.utf8} designates the locale for the French language, with
9065cultural conventions from Luxembourg, and using the UTF-8 encoding.
9066
9067@cindex locale definition
9068Usually, you will want to specify the default locale for the machine
9069using the @code{locale} field of the @code{operating-system} declaration
9070(@pxref{operating-system Reference, @code{locale}}).
9071
f5582b2c
LC
9072The selected locale is automatically added to the @dfn{locale
9073definitions} known to the system if needed, with its codeset inferred
9074from its name---e.g., @code{bo_CN.utf8} will be assumed to use the
9075@code{UTF-8} codeset. Additional locale definitions can be specified in
9076the @code{locale-definitions} slot of @code{operating-system}---this is
9077useful, for instance, if the codeset could not be inferred from the
9078locale name. The default set of locale definitions includes some widely
9079used locales, but not all the available locales, in order to save space.
9080
9081For instance, to add the North Frisian locale for Germany, the value of
9082that field may be:
598e19dc
LC
9083
9084@example
9085(cons (locale-definition
9086 (name "fy_DE.utf8") (source "fy_DE"))
9087 %default-locale-definitions)
9088@end example
9089
9090Likewise, to save space, one might want @code{locale-definitions} to
9091list only the locales that are actually used, as in:
9092
9093@example
9094(list (locale-definition
9095 (name "ja_JP.eucjp") (source "ja_JP")
9096 (charset "EUC-JP")))
9097@end example
9098
5c3c1427
LC
9099@vindex LOCPATH
9100The compiled locale definitions are available at
46bd6edd
LC
9101@file{/run/current-system/locale/X.Y}, where @code{X.Y} is the libc
9102version, which is the default location where the GNU@tie{}libc provided
9103by Guix looks for locale data. This can be overridden using the
9104@code{LOCPATH} environment variable (@pxref{locales-and-locpath,
5c3c1427
LC
9105@code{LOCPATH} and locale packages}).
9106
598e19dc
LC
9107The @code{locale-definition} form is provided by the @code{(gnu system
9108locale)} module. Details are given below.
9109
9110@deftp {Data Type} locale-definition
9111This is the data type of a locale definition.
9112
9113@table @asis
9114
9115@item @code{name}
9116The name of the locale. @xref{Locale Names,,, libc, The GNU C Library
9117Reference Manual}, for more information on locale names.
9118
9119@item @code{source}
9120The name of the source for that locale. This is typically the
9121@code{@var{language}_@var{territory}} part of the locale name.
9122
9123@item @code{charset} (default: @code{"UTF-8"})
9124The ``character set'' or ``code set'' for that locale,
9125@uref{http://www.iana.org/assignments/character-sets, as defined by
9126IANA}.
9127
9128@end table
9129@end deftp
9130
9131@defvr {Scheme Variable} %default-locale-definitions
1068f26b 9132A list of commonly used UTF-8 locales, used as the default
b2636518 9133value of the @code{locale-definitions} field of @code{operating-system}
598e19dc 9134declarations.
b2636518
LC
9135
9136@cindex locale name
9137@cindex normalized codeset in locale names
9138These locale definitions use the @dfn{normalized codeset} for the part
9139that follows the dot in the name (@pxref{Using gettextized software,
9140normalized codeset,, libc, The GNU C Library Reference Manual}). So for
9141instance it has @code{uk_UA.utf8} but @emph{not}, say,
9142@code{uk_UA.UTF-8}.
598e19dc 9143@end defvr
401c53c4 9144
34760ae7
LC
9145@subsubsection Locale Data Compatibility Considerations
9146
9147@cindex incompatibility, of locale data
9148@code{operating-system} declarations provide a @code{locale-libcs} field
9149to specify the GNU@tie{}libc packages that are used to compile locale
9150declarations (@pxref{operating-system Reference}). ``Why would I
9151care?'', you may ask. Well, it turns out that the binary format of
9152locale data is occasionally incompatible from one libc version to
9153another.
9154
9155@c See <https://sourceware.org/ml/libc-alpha/2015-09/msg00575.html>
9156@c and <https://lists.gnu.org/archive/html/guix-devel/2015-08/msg00737.html>.
9157For instance, a program linked against libc version 2.21 is unable to
9158read locale data produced with libc 2.22; worse, that program
9159@emph{aborts} instead of simply ignoring the incompatible locale
9160data@footnote{Versions 2.23 and later of GNU@tie{}libc will simply skip
9161the incompatible locale data, which is already an improvement.}.
9162Similarly, a program linked against libc 2.22 can read most, but not
201fff9e 9163all, of the locale data from libc 2.21 (specifically, @code{LC_COLLATE}
34760ae7
LC
9164data is incompatible); thus calls to @code{setlocale} may fail, but
9165programs will not abort.
9166
9167The ``problem'' in GuixSD is that users have a lot of freedom: They can
9168choose whether and when to upgrade software in their profiles, and might
9169be using a libc version different from the one the system administrator
9170used to build the system-wide locale data.
9171
9172Fortunately, unprivileged users can also install their own locale data
9173and define @var{GUIX_LOCPATH} accordingly (@pxref{locales-and-locpath,
9174@code{GUIX_LOCPATH} and locale packages}).
9175
9176Still, it is best if the system-wide locale data at
9177@file{/run/current-system/locale} is built for all the libc versions
9178actually in use on the system, so that all the programs can access
9179it---this is especially crucial on a multi-user system. To do that, the
9180administrator can specify several libc packages in the
9181@code{locale-libcs} field of @code{operating-system}:
9182
9183@example
9184(use-package-modules base)
9185
9186(operating-system
9187 ;; @dots{}
9188 (locale-libcs (list glibc-2.21 (canonical-package glibc))))
9189@end example
9190
9191This example would lead to a system containing locale definitions for
9192both libc 2.21 and the current version of libc in
9193@file{/run/current-system/locale}.
9194
9195
cf4a9129
LC
9196@node Services
9197@subsection Services
401c53c4 9198
cf4a9129
LC
9199@cindex system services
9200An important part of preparing an @code{operating-system} declaration is
9201listing @dfn{system services} and their configuration (@pxref{Using the
9202Configuration System}). System services are typically daemons launched
9203when the system boots, or other actions needed at that time---e.g.,
d8b94dbd
LC
9204configuring network access.
9205
e8b652d4
LC
9206GuixSD has a broad definition of ``service'' (@pxref{Service
9207Composition}), but many services are managed by the GNU@tie{}Shepherd
9208(@pxref{Shepherd Services}). On a running system, the @command{herd}
9209command allows you to list the available services, show their status,
9210start and stop them, or do other specific operations (@pxref{Jump
9211Start,,, shepherd, The GNU Shepherd Manual}). For example:
d8b94dbd
LC
9212
9213@example
dd17bc38 9214# herd status
d8b94dbd
LC
9215@end example
9216
9217The above command, run as @code{root}, lists the currently defined
dd17bc38 9218services. The @command{herd doc} command shows a synopsis of the given
d8b94dbd
LC
9219service:
9220
9221@example
dd17bc38 9222# herd doc nscd
d8b94dbd
LC
9223Run libc's name service cache daemon (nscd).
9224@end example
9225
9226The @command{start}, @command{stop}, and @command{restart} sub-commands
9227have the effect you would expect. For instance, the commands below stop
9228the nscd service and restart the Xorg display server:
9229
9230@example
dd17bc38 9231# herd stop nscd
d8b94dbd 9232Service nscd has been stopped.
dd17bc38 9233# herd restart xorg-server
d8b94dbd
LC
9234Service xorg-server has been stopped.
9235Service xorg-server has been started.
9236@end example
401c53c4 9237
cf4a9129 9238The following sections document the available services, starting with
d8b94dbd
LC
9239the core services, that may be used in an @code{operating-system}
9240declaration.
401c53c4 9241
cf4a9129
LC
9242@menu
9243* Base Services:: Essential system services.
c311089b 9244* Scheduled Job Execution:: The mcron service.
92c03a87 9245* Log Rotation:: The rottlog service.
cf4a9129
LC
9246* Networking Services:: Network setup, SSH daemon, etc.
9247* X Window:: Graphical display.
f2ec23d1 9248* Printing Services:: Local and remote printer support.
fe1a39d3 9249* Desktop Services:: D-Bus and desktop services.
065225a4 9250* Database Services:: SQL databases, key-value stores, etc.
d8c18af8 9251* Mail Services:: IMAP, POP3, SMTP, and all that.
78cef99b 9252* Messaging Services:: Messaging services.
730ed6ec 9253* Monitoring Services:: Monitoring services.
859e367d 9254* Kerberos Services:: Kerberos services.
58724c48 9255* Web Services:: Web servers.
ba69e8f7 9256* DNS Services:: DNS daemons.
2be1b471 9257* VPN Services:: VPN daemons.
eb419bc9 9258* Network File System:: NFS related services.
a7cf4eb6 9259* Continuous Integration:: The Cuirass service.
bfbf6e1e 9260* Power management Services:: The TLP tool.
06465d2b 9261* Audio Services:: The MPD.
e6051057 9262* Virtualization Services:: Virtualization services.
dbc6d370 9263* Miscellaneous Services:: Other services.
cf4a9129 9264@end menu
401c53c4 9265
cf4a9129
LC
9266@node Base Services
9267@subsubsection Base Services
a1ba8475 9268
cf4a9129
LC
9269The @code{(gnu services base)} module provides definitions for the basic
9270services that one expects from the system. The services exported by
9271this module are listed below.
401c53c4 9272
cf4a9129 9273@defvr {Scheme Variable} %base-services
31771497
LC
9274This variable contains a list of basic services (@pxref{Service Types
9275and Services}, for more information on service objects) one would
cf4a9129 9276expect from the system: a login service (mingetty) on each tty, syslogd,
1068f26b 9277the libc name service cache daemon (nscd), the udev device manager, and
cf4a9129 9278more.
401c53c4 9279
cf4a9129
LC
9280This is the default value of the @code{services} field of
9281@code{operating-system} declarations. Usually, when customizing a
9282system, you will want to append services to @var{%base-services}, like
9283this:
401c53c4 9284
cf4a9129 9285@example
fa1e31b8 9286(cons* (avahi-service) (lsh-service) %base-services)
cf4a9129
LC
9287@end example
9288@end defvr
401c53c4 9289
387e1754
LC
9290@defvr {Scheme Variable} special-files-service-type
9291This is the service that sets up ``special files'' such as
9292@file{/bin/sh}; an instance of it is part of @code{%base-services}.
9293
9294The value associated with @code{special-files-service-type} services
9295must be a list of tuples where the first element is the ``special file''
9296and the second element is its target. By default it is:
9297
9298@cindex @file{/bin/sh}
9299@cindex @file{sh}, in @file{/bin}
9300@example
9301`(("/bin/sh" ,(file-append @var{bash} "/bin/sh")))
9302@end example
9303
9304@cindex @file{/usr/bin/env}
9305@cindex @file{env}, in @file{/usr/bin}
9306If you want to add, say, @code{/usr/bin/env} to your system, you can
9307change it to:
9308
9309@example
9310`(("/bin/sh" ,(file-append @var{bash} "/bin/sh"))
9311 ("/usr/bin/env" ,(file-append @var{coreutils} "/bin/env")))
9312@end example
9313
9314Since this is part of @code{%base-services}, you can use
9315@code{modify-services} to customize the set of special files
9316(@pxref{Service Reference, @code{modify-services}}). But the simple way
9317to add a special file is @i{via} the @code{extra-special-file} procedure
9318(see below.)
9319@end defvr
9320
9321@deffn {Scheme Procedure} extra-special-file @var{file} @var{target}
9322Use @var{target} as the ``special file'' @var{file}.
9323
9324For example, adding the following lines to the @code{services} field of
9325your operating system declaration leads to a @file{/usr/bin/env}
9326symlink:
9327
9328@example
9329(extra-special-file "/usr/bin/env"
9330 (file-append coreutils "/bin/env"))
9331@end example
9332@end deffn
9333
be1c2c54 9334@deffn {Scheme Procedure} host-name-service @var{name}
cf4a9129
LC
9335Return a service that sets the host name to @var{name}.
9336@end deffn
401c53c4 9337
317d3b47
DC
9338@deffn {Scheme Procedure} login-service @var{config}
9339Return a service to run login according to @var{config}, a
9340@code{<login-configuration>} object, which specifies the message of the day,
9341among other things.
9342@end deffn
9343
9344@deftp {Data Type} login-configuration
9345This is the data type representing the configuration of login.
9346
9347@table @asis
9348
9349@item @code{motd}
e32171ee 9350@cindex message of the day
317d3b47
DC
9351A file-like object containing the ``message of the day''.
9352
9353@item @code{allow-empty-passwords?} (default: @code{#t})
9354Allow empty passwords by default so that first-time users can log in when
9355the 'root' account has just been created.
9356
9357@end table
9358@end deftp
9359
66e4f01c
LC
9360@deffn {Scheme Procedure} mingetty-service @var{config}
9361Return a service to run mingetty according to @var{config}, a
9362@code{<mingetty-configuration>} object, which specifies the tty to run, among
9363other things.
cf4a9129 9364@end deffn
401c53c4 9365
66e4f01c
LC
9366@deftp {Data Type} mingetty-configuration
9367This is the data type representing the configuration of Mingetty, which
9ee4c9ab 9368provides the default implementation of virtual console log-in.
66e4f01c
LC
9369
9370@table @asis
9371
9372@item @code{tty}
9373The name of the console this Mingetty runs on---e.g., @code{"tty1"}.
9374
66e4f01c
LC
9375@item @code{auto-login} (default: @code{#f})
9376When true, this field must be a string denoting the user name under
f9b9a033 9377which the system automatically logs in. When it is @code{#f}, a
66e4f01c
LC
9378user name and password must be entered to log in.
9379
9380@item @code{login-program} (default: @code{#f})
9381This must be either @code{#f}, in which case the default log-in program
9382is used (@command{login} from the Shadow tool suite), or a gexp denoting
9383the name of the log-in program.
9384
9385@item @code{login-pause?} (default: @code{#f})
9386When set to @code{#t} in conjunction with @var{auto-login}, the user
9387will have to press a key before the log-in shell is launched.
9388
9389@item @code{mingetty} (default: @var{mingetty})
9390The Mingetty package to use.
9391
9392@end table
9393@end deftp
9394
9ee4c9ab
LF
9395@deffn {Scheme Procedure} agetty-service @var{config}
9396Return a service to run agetty according to @var{config}, an
9397@code{<agetty-configuration>} object, which specifies the tty to run,
9398among other things.
9399@end deffn
9400
9401@deftp {Data Type} agetty-configuration
9402This is the data type representing the configuration of agetty, which
9403implements virtual and serial console log-in. See the @code{agetty(8)}
9404man page for more information.
9405
9406@table @asis
9407
9408@item @code{tty}
9409The name of the console this agetty runs on, as a string---e.g.,
9410@code{"ttyS0"}. This argument is mandatory.
9411
9412@item @code{baud-rate} (default: @code{#f})
9413A string containing a comma-separated list of one or more baud rates, in
9414descending order.
9415
9416@item @code{term} (default: @code{#f})
9417A string containing the value used for the @code{TERM} environment
9418variable.
9419
9420@item @code{eight-bits?} (default: @code{#f})
9421When @code{#t}, the tty is assumed to be 8-bit clean, and parity detection is
9422disabled.
9423
9424@item @code{auto-login} (default: @code{#f})
9425When passed a login name, as a string, the specified user will be logged
9426in automatically without prompting for their login name or password.
9427
9428@item @code{no-reset?} (default: @code{#f})
9429When @code{#t}, don't reset terminal cflags (control modes).
9430
9431@item @code{host} (default: @code{#f})
9432This accepts a string containing the "login_host", which will be written
9433into the @file{/var/run/utmpx} file.
9434
9435@item @code{remote?} (default: @code{#f})
9436When set to @code{#t} in conjunction with @var{host}, this will add an
9437@code{-r} fakehost option to the command line of the login program
9438specified in @var{login-program}.
9439
9440@item @code{flow-control?} (default: @code{#f})
9441When set to @code{#t}, enable hardware (RTS/CTS) flow control.
9442
9443@item @code{no-issue?} (default: @code{#f})
9444When set to @code{#t}, the contents of the @file{/etc/issue} file will
9445not be displayed before presenting the login prompt.
9446
9447@item @code{init-string} (default: @code{#f})
9448This accepts a string that will be sent to the tty or modem before
9449sending anything else. It can be used to initialize a modem.
9450
9451@item @code{no-clear?} (default: @code{#f})
9452When set to @code{#t}, agetty will not clear the screen before showing
9453the login prompt.
9454
9455@item @code{login-program} (default: (file-append shadow "/bin/login"))
9456This must be either a gexp denoting the name of a log-in program, or
9457unset, in which case the default value is the @command{login} from the
9458Shadow tool suite.
9459
9460@item @code{local-line} (default: @code{#f})
9461Control the CLOCAL line flag. This accepts one of three symbols as
9462arguments, @code{'auto}, @code{'always}, or @code{'never}. If @code{#f},
9463the default value chosen by agetty is @code{'auto}.
9464
9465@item @code{extract-baud?} (default: @code{#f})
9466When set to @code{#t}, instruct agetty to try to extract the baud rate
9467from the status messages produced by certain types of modems.
9468
9469@item @code{skip-login?} (default: @code{#f})
9470When set to @code{#t}, do not prompt the user for a login name. This
9471can be used with @var{login-program} field to use non-standard login
9472systems.
9473
9474@item @code{no-newline?} (default: @code{#f})
9475When set to @code{#t}, do not print a newline before printing the
9476@file{/etc/issue} file.
9477
9478@c Is this dangerous only when used with login-program, or always?
9479@item @code{login-options} (default: @code{#f})
9480This option accepts a string containing options that are passed to the
9481login program. When used with the @var{login-program}, be aware that a
9482malicious user could try to enter a login name containing embedded
9483options that could be parsed by the login program.
9484
9485@item @code{login-pause} (default: @code{#f})
9486When set to @code{#t}, wait for any key before showing the login prompt.
9487This can be used in conjunction with @var{auto-login} to save memory by
9488lazily spawning shells.
9489
9490@item @code{chroot} (default: @code{#f})
9491Change root to the specified directory. This option accepts a directory
9492path as a string.
9493
9494@item @code{hangup?} (default: @code{#f})
9495Use the Linux system call @code{vhangup} to do a virtual hangup of the
9496specified terminal.
9497
9498@item @code{keep-baud?} (default: @code{#f})
9499When set to @code{#t}, try to keep the existing baud rate. The baud
9500rates from @var{baud-rate} are used when agetty receives a @key{BREAK}
9501character.
9502
9503@item @code{timeout} (default: @code{#f})
9504When set to an integer value, terminate if no user name could be read
9505within @var{timeout} seconds.
9506
9507@item @code{detect-case?} (default: @code{#f})
9508When set to @code{#t}, turn on support for detecting an uppercase-only
9509terminal. This setting will detect a login name containing only
9510uppercase letters as indicating an uppercase-only terminal and turn on
9511some upper-to-lower case conversions. Note that this will not support
9512Unicode characters.
9513
9514@item @code{wait-cr?} (default: @code{#f})
9515When set to @code{#t}, wait for the user or modem to send a
9516carriage-return or linefeed character before displaying
9517@file{/etc/issue} or login prompt. This is typically used with the
9518@var{init-string} option.
9519
9520@item @code{no-hints?} (default: @code{#f})
9521When set to @code{#t}, do not print hints about Num, Caps, and Scroll
9522locks.
9523
9524@item @code{no-hostname?} (default: @code{#f})
9525By default, the hostname is printed. When this option is set to
9526@code{#t}, no hostname will be shown at all.
9527
9528@item @code{long-hostname?} (default: @code{#f})
9529By default, the hostname is only printed until the first dot. When this
9530option is set to @code{#t}, the fully qualified hostname by
9531@code{gethostname} or @code{getaddrinfo} is shown.
9532
9533@item @code{erase-characters} (default: @code{#f})
9534This option accepts a string of additional characters that should be
9535interpreted as backspace when the user types their login name.
9536
9537@item @code{kill-characters} (default: @code{#f})
9538This option accepts a string that should be interpreted to mean "ignore
9539all previous characters" (also called a "kill" character) when the types
9540their login name.
9541
9542@item @code{chdir} (default: @code{#f})
9543This option accepts, as a string, a directory path that will be changed
9544to before login.
9545
9546@item @code{delay} (default: @code{#f})
9547This options accepts, as an integer, the number of seconds to sleep
9548before opening the tty and displaying the login prompt.
9549
9550@item @code{nice} (default: @code{#f})
9551This option accepts, as an integer, the nice value with which to run the
9552@command{login} program.
9553
9554@item @code{extra-options} (default: @code{'()})
9555This option provides an "escape hatch" for the user to provide arbitrary
9556command-line arguments to @command{agetty} as a list of strings.
9557
9558@end table
9559@end deftp
9560
46ec2707
DC
9561@deffn {Scheme Procedure} kmscon-service-type @var{config}
9562Return a service to run @uref{https://www.freedesktop.org/wiki/Software/kmscon,kmscon}
9563according to @var{config}, a @code{<kmscon-configuration>} object, which
9564specifies the tty to run, among other things.
9565@end deffn
9566
9567@deftp {Data Type} kmscon-configuration
9568This is the data type representing the configuration of Kmscon, which
9ee4c9ab 9569implements virtual console log-in.
46ec2707
DC
9570
9571@table @asis
9572
9573@item @code{virtual-terminal}
9574The name of the console this Kmscon runs on---e.g., @code{"tty1"}.
9575
9576@item @code{login-program} (default: @code{#~(string-append #$shadow "/bin/login")})
9577A gexp denoting the name of the log-in program. The default log-in program is
9578@command{login} from the Shadow tool suite.
9579
9580@item @code{login-arguments} (default: @code{'("-p")})
9581A list of arguments to pass to @command{login}.
9582
9583@item @code{hardware-acceleration?} (default: #f)
9584Whether to use hardware acceleration.
9585
9586@item @code{kmscon} (default: @var{kmscon})
9587The Kmscon package to use.
9588
9589@end table
9590@end deftp
9591
6454b333
LC
9592@cindex name service cache daemon
9593@cindex nscd
be1c2c54 9594@deffn {Scheme Procedure} nscd-service [@var{config}] [#:glibc glibc] @
4aee6e60 9595 [#:name-services '()]
1068f26b 9596Return a service that runs the libc name service cache daemon (nscd) with the
b893f1ae
LC
9597given @var{config}---an @code{<nscd-configuration>} object. @xref{Name
9598Service Switch}, for an example.
cf4a9129 9599@end deffn
401c53c4 9600
6454b333
LC
9601@defvr {Scheme Variable} %nscd-default-configuration
9602This is the default @code{<nscd-configuration>} value (see below) used
1068f26b 9603by @code{nscd-service}. It uses the caches defined by
6454b333
LC
9604@var{%nscd-default-caches}; see below.
9605@end defvr
9606
9607@deftp {Data Type} nscd-configuration
1068f26b 9608This is the data type representing the name service cache daemon (nscd)
6454b333
LC
9609configuration.
9610
9611@table @asis
9612
b893f1ae
LC
9613@item @code{name-services} (default: @code{'()})
9614List of packages denoting @dfn{name services} that must be visible to
9615the nscd---e.g., @code{(list @var{nss-mdns})}.
9616
9617@item @code{glibc} (default: @var{glibc})
9618Package object denoting the GNU C Library providing the @command{nscd}
9619command.
9620
6454b333 9621@item @code{log-file} (default: @code{"/var/log/nscd.log"})
1068f26b 9622Name of the nscd log file. This is where debugging output goes when
6454b333
LC
9623@code{debug-level} is strictly positive.
9624
9625@item @code{debug-level} (default: @code{0})
1068f26b 9626Integer denoting the debugging levels. Higher numbers mean that more
6454b333
LC
9627debugging output is logged.
9628
9629@item @code{caches} (default: @var{%nscd-default-caches})
9630List of @code{<nscd-cache>} objects denoting things to be cached; see
9631below.
9632
9633@end table
9634@end deftp
9635
9636@deftp {Data Type} nscd-cache
9637Data type representing a cache database of nscd and its parameters.
9638
9639@table @asis
9640
9641@item @code{database}
9642This is a symbol representing the name of the database to be cached.
9643Valid values are @code{passwd}, @code{group}, @code{hosts}, and
9644@code{services}, which designate the corresponding NSS database
9645(@pxref{NSS Basics,,, libc, The GNU C Library Reference Manual}).
9646
9647@item @code{positive-time-to-live}
9648@itemx @code{negative-time-to-live} (default: @code{20})
9649A number representing the number of seconds during which a positive or
9650negative lookup result remains in cache.
9651
9652@item @code{check-files?} (default: @code{#t})
9653Whether to check for updates of the files corresponding to
9654@var{database}.
9655
9656For instance, when @var{database} is @code{hosts}, setting this flag
9657instructs nscd to check for updates in @file{/etc/hosts} and to take
9658them into account.
9659
9660@item @code{persistent?} (default: @code{#t})
9661Whether the cache should be stored persistently on disk.
9662
9663@item @code{shared?} (default: @code{#t})
9664Whether the cache should be shared among users.
9665
9666@item @code{max-database-size} (default: 32@tie{}MiB)
9667Maximum size in bytes of the database cache.
9668
9669@c XXX: 'suggested-size' and 'auto-propagate?' seem to be expert
9670@c settings, so leave them out.
9671
9672@end table
9673@end deftp
9674
9675@defvr {Scheme Variable} %nscd-default-caches
9676List of @code{<nscd-cache>} objects used by default by
1068f26b 9677@code{nscd-configuration} (see above).
6454b333
LC
9678
9679It enables persistent and aggressive caching of service and host name
9680lookups. The latter provides better host name lookup performance,
9681resilience in the face of unreliable name servers, and also better
9682privacy---often the result of host name lookups is in local cache, so
9683external name servers do not even need to be queried.
9684@end defvr
9685
ec2e2f6c 9686@anchor{syslog-configuration-type}
e32171ee
JD
9687@cindex syslog
9688@cindex logging
ec2e2f6c
DC
9689@deftp {Data Type} syslog-configuration
9690This data type represents the configuration of the syslog daemon.
6454b333 9691
ec2e2f6c
DC
9692@table @asis
9693@item @code{syslogd} (default: @code{#~(string-append #$inetutils "/libexec/syslogd")})
9694The syslog daemon to use.
9695
9696@item @code{config-file} (default: @code{%default-syslog.conf})
9697The syslog configuration file to use.
9698
9699@end table
9700@end deftp
9701
9702@anchor{syslog-service}
e32171ee 9703@cindex syslog
ec2e2f6c
DC
9704@deffn {Scheme Procedure} syslog-service @var{config}
9705Return a service that runs a syslog daemon according to @var{config}.
44abcb28
LC
9706
9707@xref{syslogd invocation,,, inetutils, GNU Inetutils}, for more
9708information on the configuration file syntax.
cf4a9129 9709@end deffn
401c53c4 9710
0adfe95a
LC
9711@anchor{guix-configuration-type}
9712@deftp {Data Type} guix-configuration
9713This data type represents the configuration of the Guix build daemon.
9714@xref{Invoking guix-daemon}, for more information.
9715
9716@table @asis
9717@item @code{guix} (default: @var{guix})
9718The Guix package to use.
401c53c4 9719
0adfe95a
LC
9720@item @code{build-group} (default: @code{"guixbuild"})
9721Name of the group for build user accounts.
401c53c4 9722
0adfe95a
LC
9723@item @code{build-accounts} (default: @code{10})
9724Number of build user accounts to create.
401c53c4 9725
0adfe95a 9726@item @code{authorize-key?} (default: @code{#t})
e32171ee 9727@cindex substitutes, authorization thereof
5b58c28b
LC
9728Whether to authorize the substitute keys listed in
9729@code{authorized-keys}---by default that of @code{hydra.gnu.org}
0adfe95a
LC
9730(@pxref{Substitutes}).
9731
5b58c28b
LC
9732@vindex %default-authorized-guix-keys
9733@item @code{authorized-keys} (default: @var{%default-authorized-guix-keys})
9734The list of authorized key files for archive imports, as a list of
9735string-valued gexps (@pxref{Invoking guix archive}). By default, it
9736contains that of @code{hydra.gnu.org} (@pxref{Substitutes}).
9737
0adfe95a
LC
9738@item @code{use-substitutes?} (default: @code{#t})
9739Whether to use substitutes.
9740
b0b9f6e0
LC
9741@item @code{substitute-urls} (default: @var{%default-substitute-urls})
9742The list of URLs where to look for substitutes by default.
9743
3bee4b61
LC
9744@item @code{max-silent-time} (default: @code{0})
9745@itemx @code{timeout} (default: @code{0})
9746The number of seconds of silence and the number of seconds of activity,
9747respectively, after which a build process times out. A value of zero
9748disables the timeout.
9749
0adfe95a
LC
9750@item @code{extra-options} (default: @code{'()})
9751List of extra command-line options for @command{guix-daemon}.
9752
dc0ef095
LC
9753@item @code{log-file} (default: @code{"/var/log/guix-daemon.log"})
9754File where @command{guix-daemon}'s standard output and standard error
9755are written.
9756
0adfe95a 9757@item @code{lsof} (default: @var{lsof})
f78903f3 9758The lsof package to use.
0adfe95a 9759
93d32da9
LF
9760@item @code{http-proxy} (default: @code{#f})
9761The HTTP proxy used for downloading fixed-output derivations and
9762substitutes.
9763
b191f0a6
LF
9764@item @code{tmpdir} (default: @code{#f})
9765A directory path where the @command{guix-daemon} will perform builds.
9766
0adfe95a
LC
9767@end table
9768@end deftp
9769
9770@deffn {Scheme Procedure} guix-service @var{config}
9771Return a service that runs the Guix build daemon according to
9772@var{config}.
cf4a9129 9773@end deffn
a1ba8475 9774
be1c2c54 9775@deffn {Scheme Procedure} udev-service [#:udev udev]
cf4a9129
LC
9776Run @var{udev}, which populates the @file{/dev} directory dynamically.
9777@end deffn
401c53c4 9778
a535e122
LF
9779@deffn {Scheme Procedure} urandom-seed-service @var{#f}
9780Save some entropy in @var{%random-seed-file} to seed @file{/dev/urandom}
9781when rebooting.
9782@end deffn
9783
9784@defvr {Scheme Variable} %random-seed-file
9785This is the name of the file where some random bytes are saved by
9786@var{urandom-seed-service} to seed @file{/dev/urandom} when rebooting.
9787It defaults to @file{/var/lib/random-seed}.
9788@end defvr
9789
e32171ee
JD
9790@cindex keymap
9791@cindex keyboard
b3d05f48 9792@deffn {Scheme Procedure} console-keymap-service @var{files} ...
dedb8d5e 9793@cindex keyboard layout
b3d05f48
AK
9794Return a service to load console keymaps from @var{files} using
9795@command{loadkeys} command. Most likely, you want to load some default
9796keymap, which can be done like this:
9797
9798@example
9799(console-keymap-service "dvorak")
9800@end example
9801
9802Or, for example, for a Swedish keyboard, you may need to combine
9803the following keymaps:
9804@example
9805(console-keymap-service "se-lat6" "se-fi-lat6")
9806@end example
9807
9808Also you can specify a full file name (or file names) of your keymap(s).
9809See @code{man loadkeys} for details.
9810
5eca9459
AK
9811@end deffn
9812
e32171ee
JD
9813@cindex mouse
9814@cindex gpm
1aaf116d 9815@deffn {Scheme Procedure} gpm-service [#:gpm @var{gpm}] @
8664cc88
LC
9816 [#:options]
9817Run @var{gpm}, the general-purpose mouse daemon, with the given
9818command-line @var{options}. GPM allows users to use the mouse in the console,
9819notably to select, copy, and paste text. The default value of @var{options}
9820uses the @code{ps2} protocol, which works for both USB and PS/2 mice.
9821
9822This service is not part of @var{%base-services}.
9823@end deffn
9824
f1e900a3 9825@anchor{guix-publish-service-type}
3d3c5650 9826@deffn {Scheme Variable} guix-publish-service-type
f1e900a3 9827This is the service type for @command{guix publish} (@pxref{Invoking
3d3c5650 9828guix publish}). Its value must be a @code{guix-configuration}
f1e900a3 9829object, as described below.
1c52181f
LC
9830
9831This assumes that @file{/etc/guix} already contains a signing key pair as
9832created by @command{guix archive --generate-key} (@pxref{Invoking guix
9833archive}). If that is not the case, the service will fail to start.
9834@end deffn
9835
f1e900a3
LC
9836@deftp {Data Type} guix-publish-configuration
9837Data type representing the configuration of the @code{guix publish}
9838service.
9839
9840@table @asis
9841@item @code{guix} (default: @code{guix})
9842The Guix package to use.
9843
9844@item @code{port} (default: @code{80})
9845The TCP port to listen for connections.
9846
9847@item @code{host} (default: @code{"localhost"})
9848The host (and thus, network interface) to listen to. Use
9849@code{"0.0.0.0"} to listen on all the network interfaces.
697ddb88
LC
9850
9851@item @code{compression-level} (default: @code{3})
9852The gzip compression level at which substitutes are compressed. Use
9853@code{0} to disable compression altogether, and @code{9} to get the best
9854compression ratio at the expense of increased CPU usage.
9855
9856@item @code{nar-path} (default: @code{"nar"})
9857The URL path at which ``nars'' can be fetched. @xref{Invoking guix
9858publish, @code{--nar-path}}, for details.
a35136cb
LC
9859
9860@item @code{cache} (default: @code{#f})
9861When it is @code{#f}, disable caching and instead generate archives on
9862demand. Otherwise, this should be the name of a directory---e.g.,
9863@code{"/var/cache/guix/publish"}---where @command{guix publish} caches
9864archives and meta-data ready to be sent. @xref{Invoking guix publish,
9865@option{--cache}}, for more information on the tradeoffs involved.
9866
9867@item @code{workers} (default: @code{#f})
9868When it is an integer, this is the number of worker threads used for
9869caching; when @code{#f}, the number of processors is used.
9870@xref{Invoking guix publish, @option{--workers}}, for more information.
9871
9872@item @code{ttl} (default: @code{#f})
9873When it is an integer, this denotes the @dfn{time-to-live} of the
9874published archives. @xref{Invoking guix publish, @option{--ttl}}, for
9875more information.
f1e900a3
LC
9876@end table
9877@end deftp
9878
b58cbf9a
DC
9879@anchor{rngd-service}
9880@deffn {Scheme Procedure} rngd-service [#:rng-tools @var{rng-tools}] @
9881 [#:device "/dev/hwrng"]
9882Return a service that runs the @command{rngd} program from @var{rng-tools}
9883to add @var{device} to the kernel's entropy pool. The service will fail if
9884@var{device} does not exist.
9885@end deffn
a69576ea 9886
909147e4
RW
9887@anchor{pam-limits-service}
9888@cindex session limits
9889@cindex ulimit
9890@cindex priority
9891@deffn {Scheme Procedure} pam-limits-service [#:limits @var{limits}]
9892
9893Return a service that installs a configuration file for the
9894@uref{http://linux-pam.org/Linux-PAM-html/sag-pam_limits.html,
9895@code{pam_limits} module}. The procedure optionally takes a list of
9896@code{pam-limits-entry} values, which can be used to specify
9897@code{ulimit} limits and nice priority limits to user sessions.
9898
9899The following limits definition sets two hard and soft limits for all
9900login sessions of users in the @code{realtime} group:
9901
9902@example
9903(pam-limits-service
9904 (list
9905 (pam-limits-entry "@@realtime" 'both 'rtprio 99)
9906 (pam-limits-entry "@@realtime" 'both 'memlock 'unlimited)))
9907@end example
9908
9909The first entry increases the maximum realtime priority for
9910non-privileged processes; the second entry lifts any restriction of the
9911maximum address space that can be locked in memory. These settings are
9912commonly used for real-time audio systems.
9913@end deffn
9914
c311089b
LC
9915@node Scheduled Job Execution
9916@subsubsection Scheduled Job Execution
9917
9918@cindex cron
e32171ee 9919@cindex mcron
c311089b
LC
9920@cindex scheduling jobs
9921The @code{(gnu services mcron)} module provides an interface to
9922GNU@tie{}mcron, a daemon to run jobs at scheduled times (@pxref{Top,,,
9923mcron, GNU@tie{}mcron}). GNU@tie{}mcron is similar to the traditional
9924Unix @command{cron} daemon; the main difference is that it is
9925implemented in Guile Scheme, which provides a lot of flexibility when
9926specifying the scheduling of jobs and their actions.
9927
8ac6282c 9928The example below defines an operating system that runs the
c311089b 9929@command{updatedb} (@pxref{Invoking updatedb,,, find, Finding Files})
8ac6282c
LC
9930and the @command{guix gc} commands (@pxref{Invoking guix gc}) daily, as
9931well as the @command{mkid} command on behalf of an unprivileged user
9932(@pxref{mkid invocation,,, idutils, ID Database Utilities}). It uses
9933gexps to introduce job definitions that are passed to mcron
9934(@pxref{G-Expressions}).
c311089b
LC
9935
9936@lisp
9937(use-modules (guix) (gnu) (gnu services mcron))
8ac6282c 9938(use-package-modules base idutils)
c311089b
LC
9939
9940(define updatedb-job
8ac6282c
LC
9941 ;; Run 'updatedb' at 3AM every day. Here we write the
9942 ;; job's action as a Scheme procedure.
c311089b 9943 #~(job '(next-hour '(3))
8ac6282c
LC
9944 (lambda ()
9945 (execl (string-append #$findutils "/bin/updatedb")
9946 "updatedb"
9947 "--prunepaths=/tmp /var/tmp /gnu/store"))))
c311089b
LC
9948
9949(define garbage-collector-job
9950 ;; Collect garbage 5 minutes after midnight every day.
8ac6282c 9951 ;; The job's action is a shell command.
c311089b
LC
9952 #~(job "5 0 * * *" ;Vixie cron syntax
9953 "guix gc -F 1G"))
9954
80d944b7 9955(define idutils-job
8ac6282c
LC
9956 ;; Update the index database as user "charlie" at 12:15PM
9957 ;; and 19:15PM. This runs from the user's home directory.
9958 #~(job '(next-minute-from (next-hour '(12 19)) '(15))
9959 (string-append #$idutils "/bin/mkid src")
9960 #:user "charlie"))
9961
c311089b
LC
9962(operating-system
9963 ;; @dots{}
9964 (services (cons (mcron-service (list garbage-collector-job
8ac6282c
LC
9965 updatedb-job
9966 idutils-job))
c311089b
LC
9967 %base-services)))
9968@end lisp
9969
9970@xref{Guile Syntax, mcron job specifications,, mcron, GNU@tie{}mcron},
9971for more information on mcron job specifications. Below is the
9972reference of the mcron service.
9973
9974@deffn {Scheme Procedure} mcron-service @var{jobs} [#:mcron @var{mcron2}]
9975Return an mcron service running @var{mcron} that schedules @var{jobs}, a
9976list of gexps denoting mcron job specifications.
9977
9978This is a shorthand for:
9979@example
80d944b7
LC
9980(service mcron-service-type
9981 (mcron-configuration (mcron mcron) (jobs jobs)))
c311089b
LC
9982@end example
9983@end deffn
9984
9985@defvr {Scheme Variable} mcron-service-type
9986This is the type of the @code{mcron} service, whose value is an
9987@code{mcron-configuration} object.
9988
9989This service type can be the target of a service extension that provides
9990it additional job specifications (@pxref{Service Composition}). In
80d944b7 9991other words, it is possible to define services that provide additional
c311089b
LC
9992mcron jobs to run.
9993@end defvr
9994
9995@deftp {Data Type} mcron-configuration
9996Data type representing the configuration of mcron.
9997
9998@table @asis
9999@item @code{mcron} (default: @var{mcron2})
10000The mcron package to use.
10001
10002@item @code{jobs}
10003This is a list of gexps (@pxref{G-Expressions}), where each gexp
10004corresponds to an mcron job specification (@pxref{Syntax, mcron job
10005specifications,, mcron, GNU@tie{}mcron}).
10006@end table
10007@end deftp
10008
10009
92c03a87
JN
10010@node Log Rotation
10011@subsubsection Log Rotation
10012
10013@cindex rottlog
10014@cindex log rotation
e32171ee 10015@cindex logging
92c03a87
JN
10016Log files such as those found in @file{/var/log} tend to grow endlessly,
10017so it's a good idea to @dfn{rotate} them once in a while---i.e., archive
10018their contents in separate files, possibly compressed. The @code{(gnu
10019services admin)} module provides an interface to GNU@tie{}Rot[t]log, a
10020log rotation tool (@pxref{Top,,, rottlog, GNU Rot[t]log Manual}).
10021
10022The example below defines an operating system that provides log rotation
81fa2229 10023with the default settings, for commonly encountered log files.
92c03a87
JN
10024
10025@lisp
10026(use-modules (guix) (gnu))
10027(use-service-modules admin mcron)
10028(use-package-modules base idutils)
10029
10030(operating-system
10031 ;; @dots{}
350cc3a2 10032 (services (cons* (service mcron-service-type)
3d3c5650 10033 (service rottlog-service-type)
92c03a87
JN
10034 %base-services)))
10035@end lisp
10036
10037@defvr {Scheme Variable} rottlog-service-type
10038This is the type of the Rottlog service, whose value is a
10039@code{rottlog-configuration} object.
10040
254ea3f9
LC
10041Other services can extend this one with new @code{log-rotation} objects
10042(see below), thereby augmenting the set of files to be rotated.
10043
92c03a87
JN
10044This service type can define mcron jobs (@pxref{Scheduled Job
10045Execution}) to run the rottlog service.
10046@end defvr
10047
10048@deftp {Data Type} rottlog-configuration
10049Data type representing the configuration of rottlog.
10050
10051@table @asis
10052@item @code{rottlog} (default: @code{rottlog})
10053The Rottlog package to use.
10054
10055@item @code{rc-file} (default: @code{(file-append rottlog "/etc/rc")})
10056The Rottlog configuration file to use (@pxref{Mandatory RC Variables,,,
10057rottlog, GNU Rot[t]log Manual}).
10058
81fa2229
LC
10059@item @code{rotations} (default: @code{%default-rotations})
10060A list of @code{log-rotation} objects as defined below.
92c03a87 10061
81fa2229
LC
10062@item @code{jobs}
10063This is a list of gexps where each gexp corresponds to an mcron job
10064specification (@pxref{Scheduled Job Execution}).
10065@end table
10066@end deftp
10067
10068@deftp {Data Type} log-rotation
10069Data type representing the rotation of a group of log files.
10070
10071Taking an example from the Rottlog manual (@pxref{Period Related File
10072Examples,,, rottlog, GNU Rot[t]log Manual}), a log rotation might be
10073defined like this:
92c03a87
JN
10074
10075@example
81fa2229
LC
10076(log-rotation
10077 (frequency 'daily)
10078 (files '("/var/log/apache/*"))
10079 (options '("storedir apache-archives"
10080 "rotate 6"
10081 "notifempty"
10082 "nocompress")))
92c03a87
JN
10083@end example
10084
81fa2229
LC
10085The list of fields is as follows:
10086
10087@table @asis
10088@item @code{frequency} (default: @code{'weekly})
10089The log rotation frequency, a symbol.
10090
10091@item @code{files}
10092The list of files or file glob patterns to rotate.
10093
10094@item @code{options} (default: @code{'()})
10095The list of rottlog options for this rotation (@pxref{Configuration
10096parameters,,, rottlog, GNU Rot[t]lg Manual}).
10097
10098@item @code{post-rotate} (default: @code{#f})
10099Either @code{#f} or a gexp to execute once the rotation has completed.
92c03a87
JN
10100@end table
10101@end deftp
10102
10103@defvr {Scheme Variable} %default-rotations
10104Specifies weekly rotation of @var{%rotated-files} and
81fa2229 10105a couple of other files.
92c03a87
JN
10106@end defvr
10107
10108@defvr {Scheme Variable} %rotated-files
10109The list of syslog-controlled files to be rotated. By default it is:
10110@code{'("/var/log/messages" "/var/log/secure")}.
10111@end defvr
10112
cf4a9129
LC
10113@node Networking Services
10114@subsubsection Networking Services
401c53c4 10115
fa1e31b8 10116The @code{(gnu services networking)} module provides services to configure
cf4a9129 10117the network interface.
a1ba8475 10118
a023cca8 10119@cindex DHCP, networking service
be1c2c54 10120@deffn {Scheme Procedure} dhcp-client-service [#:dhcp @var{isc-dhcp}]
a023cca8
LC
10121Return a service that runs @var{dhcp}, a Dynamic Host Configuration
10122Protocol (DHCP) client, on all the non-loopback network interfaces.
10123@end deffn
10124
8de3e4b3
LC
10125@defvr {Scheme Variable} static-networking-service-type
10126This is the type for statically-configured network interfaces.
10127@c TODO Document <static-networking> data structures.
10128@end defvr
10129
be1c2c54 10130@deffn {Scheme Procedure} static-networking-service @var{interface} @var{ip} @
1f9803c2 10131 [#:netmask #f] [#:gateway #f] [#:name-servers @code{'()}]
cf4a9129 10132Return a service that starts @var{interface} with address @var{ip}. If
1f9803c2
LC
10133@var{netmask} is true, use it as the network mask. If @var{gateway} is true,
10134it must be a string specifying the default network gateway.
8de3e4b3
LC
10135
10136This procedure can be called several times, one for each network
10137interface of interest. Behind the scenes what it does is extend
10138@code{static-networking-service-type} with additional network interfaces
10139to handle.
cf4a9129 10140@end deffn
8b315a6d 10141
b7d0c494 10142@cindex wicd
e32171ee
JD
10143@cindex wireless
10144@cindex WiFi
87f40011 10145@cindex network management
be1c2c54 10146@deffn {Scheme Procedure} wicd-service [#:wicd @var{wicd}]
87f40011
LC
10147Return a service that runs @url{https://launchpad.net/wicd,Wicd}, a network
10148management daemon that aims to simplify wired and wireless networking.
10149
10150This service adds the @var{wicd} package to the global profile, providing
10151several commands to interact with the daemon and configure networking:
10152@command{wicd-client}, a graphical user interface, and the @command{wicd-cli}
10153and @command{wicd-curses} user interfaces.
b7d0c494
MW
10154@end deffn
10155
c0a9589d 10156@cindex NetworkManager
b726096b
CB
10157
10158@defvr {Scheme Variable} network-manager-service-type
10159This is the service type for the
10160@uref{https://wiki.gnome.org/Projects/NetworkManager, NetworkManager}
10161service. The value for this service type is a
10162@code{network-manager-configuration} record.
4110fbc6
LC
10163
10164This service is part of @code{%desktop-services} (@pxref{Desktop
10165Services}).
b726096b
CB
10166@end defvr
10167
10168@deftp {Data Type} network-manager-configuration
10169Data type representing the configuration of NetworkManager.
10170
10171@table @asis
10172@item @code{network-manager} (default: @code{network-manager})
10173The NetworkManager package to use.
10174
10175@item @code{dns} (default: @code{"default"})
10176Processing mode for DNS, which affects how NetworkManager uses the
10177@code{resolv.conf} configuration file.
10178
10179@table @samp
10180@item default
10181NetworkManager will update @code{resolv.conf} to reflect the nameservers
10182provided by currently active connections.
10183
10184@item dnsmasq
10185NetworkManager will run @code{dnsmasq} as a local caching nameserver,
10186using a "split DNS" configuration if you are connected to a VPN, and
10187then update @code{resolv.conf} to point to the local nameserver.
10188
10189@item none
10190NetworkManager will not modify @code{resolv.conf}.
10191@end table
10192
94d2a250
LC
10193@item @code{vpn-plugins} (default: @code{'()})
10194This is the list of available plugins for virtual private networks
10195(VPNs). An example of this is the @code{network-manager-openvpn}
10196package, which allows NetworkManager to manage VPNs @i{via} OpenVPN.
10197
b726096b
CB
10198@end table
10199@end deftp
c0a9589d 10200
76192896 10201@cindex Connman
34d60c49
MO
10202@deffn {Scheme Variable} connman-service-type
10203This is the service type to run @url{https://01.org/connman,Connman},
10204a network connection manager.
10205
10206Its value must be an
10207@code{connman-configuration} record as in this example:
10208
10209@example
10210(service connman-service-type
10211 (connman-configuration
10212 (disable-vpn? #t)))
10213@end example
10214
10215See below for details about @code{connman-configuration}.
76192896
EF
10216@end deffn
10217
34d60c49
MO
10218@deftp {Data Type} connman-configuration
10219Data Type representing the configuration of connman.
10220
10221@table @asis
10222@item @code{connman} (default: @var{connman})
10223The connman package to use.
10224
10225@item @code{disable-vpn?} (default: @code{#f})
10226When true, enable connman's vpn plugin.
10227@end table
10228@end deftp
10229
2cccbc2a 10230@cindex WPA Supplicant
cbf1024e
LC
10231@defvr {Scheme Variable} wpa-supplicant-service-type
10232This is the service type to run @url{https://w1.fi/wpa_supplicant/,WPA
2cccbc2a 10233supplicant}, an authentication daemon required to authenticate against
cbf1024e 10234encrypted WiFi or ethernet networks. It is configured to listen for
2cccbc2a 10235requests on D-Bus.
cbf1024e
LC
10236
10237The value of this service is the @code{wpa-supplicant} package to use.
10238Thus, it can be instantiated like this:
10239
10240@lisp
3d3c5650 10241(use-modules (gnu services networking))
cbf1024e 10242
3d3c5650 10243(service wpa-supplicant-service-type)
cbf1024e
LC
10244@end lisp
10245@end defvr
2cccbc2a 10246
e32171ee
JD
10247@cindex NTP
10248@cindex real time clock
be1c2c54 10249@deffn {Scheme Procedure} ntp-service [#:ntp @var{ntp}] @
dc0322b5
LC
10250 [#:servers @var{%ntp-servers}] @
10251 [#:allow-large-adjustment? #f]
63854bcb
LC
10252Return a service that runs the daemon from @var{ntp}, the
10253@uref{http://www.ntp.org, Network Time Protocol package}. The daemon will
10254keep the system clock synchronized with that of @var{servers}.
dc0322b5
LC
10255@var{allow-large-adjustment?} determines whether @command{ntpd} is allowed to
10256make an initial adjustment of more than 1,000 seconds.
63854bcb
LC
10257@end deffn
10258
10259@defvr {Scheme Variable} %ntp-servers
10260List of host names used as the default NTP servers.
10261@end defvr
10262
9260b9d1
TD
10263@cindex inetd
10264@deffn {Scheme variable} inetd-service-type
10265This service runs the @command{inetd} (@pxref{inetd invocation,,,
10266inetutils, GNU Inetutils}) daemon. @command{inetd} listens for
10267connections on internet sockets, and lazily starts the specified server
10268program when a connection is made on one of these sockets.
10269
10270The value of this service is an @code{inetd-configuration} object. The
10271following example configures the @command{inetd} daemon to provide the
10272built-in @command{echo} service, as well as an smtp service which
10273forwards smtp traffic over ssh to a server @code{smtp-server} behind a
10274gateway @code{hostname}:
10275
10276@example
10277(service
10278 inetd-service-type
10279 (inetd-configuration
10280 (entries (list
10281 (inetd-entry
10282 (name "echo")
10283 (socket-type 'stream)
10284 (protocol "tcp")
10285 (wait? #f)
10286 (user "root"))
10287 (inetd-entry
10288 (node "127.0.0.1")
10289 (name "smtp")
10290 (socket-type 'stream)
10291 (protocol "tcp")
10292 (wait? #f)
10293 (user "root")
10294 (program (file-append openssh "/bin/ssh"))
10295 (arguments
10296 '("ssh" "-qT" "-i" "/path/to/ssh_key"
10297 "-W" "smtp-server:25" "user@@hostname")))))
10298@end example
10299
10300See below for more details about @code{inetd-configuration}.
10301@end deffn
10302
10303@deftp {Data Type} inetd-configuration
10304Data type representing the configuration of @command{inetd}.
10305
10306@table @asis
10307@item @code{program} (default: @code{(file-append inetutils "/libexec/inetd")})
10308The @command{inetd} executable to use.
10309
10310@item @code{entries} (default: @code{'()})
10311A list of @command{inetd} service entries. Each entry should be created
10312by the @code{inetd-entry} constructor.
10313@end table
10314@end deftp
10315
10316@deftp {Data Type} inetd-entry
10317Data type representing an entry in the @command{inetd} configuration.
10318Each entry corresponds to a socket where @command{inetd} will listen for
10319requests.
10320
10321@table @asis
10322@item @code{node} (default: @code{#f})
10323Optional string, a comma-separated list of local addresses
10324@command{inetd} should use when listening for this service.
10325@xref{Configuration file,,, inetutils, GNU Inetutils} for a complete
10326description of all options.
10327@item @code{name}
10328A string, the name must correspond to an entry in @code{/etc/services}.
10329@item @code{socket-type}
10330One of @code{'stream}, @code{'dgram}, @code{'raw}, @code{'rdm} or
10331@code{'seqpacket}.
10332@item @code{protocol}
10333A string, must correspond to an entry in @code{/etc/protocols}.
10334@item @code{wait?} (default: @code{#t})
10335Whether @command{inetd} should wait for the server to exit before
10336listening to new service requests.
10337@item @code{user}
10338A string containing the user (and, optionally, group) name of the user
10339as whom the server should run. The group name can be specified in a
10340suffix, separated by a colon or period, i.e. @code{"user"},
10341@code{"user:group"} or @code{"user.group"}.
10342@item @code{program} (default: @code{"internal"})
10343The server program which will serve the requests, or @code{"internal"}
10344if @command{inetd} should use a built-in service.
10345@item @code{arguments} (default: @code{'()})
10346A list strings or file-like objects, which are the server program's
10347arguments, starting with the zeroth argument, i.e. the name of the
10348program itself. For @command{inetd}'s internal services, this entry
10349must be @code{'()} or @code{'("internal")}.
10350@end table
10351
10352@xref{Configuration file,,, inetutils, GNU Inetutils} for a more
10353detailed discussion of each configuration field.
10354@end deftp
10355
e32171ee 10356@cindex Tor
375c6108
LC
10357@deffn {Scheme Procedure} tor-service [@var{config-file}] [#:tor @var{tor}]
10358Return a service to run the @uref{https://torproject.org, Tor} anonymous
10359networking daemon.
8b315a6d 10360
375c6108 10361The daemon runs as the @code{tor} unprivileged user. It is passed
6331bde7
LC
10362@var{config-file}, a file-like object, with an additional @code{User tor} line
10363and lines for hidden services added via @code{tor-hidden-service}. Run
10364@command{man tor} for information about the configuration file.
10365@end deffn
10366
24a8ef3b 10367@cindex hidden service
6331bde7
LC
10368@deffn {Scheme Procedure} tor-hidden-service @var{name} @var{mapping}
10369Define a new Tor @dfn{hidden service} called @var{name} and implementing
10370@var{mapping}. @var{mapping} is a list of port/host tuples, such as:
10371
10372@example
24a8ef3b
LC
10373 '((22 "127.0.0.1:22")
10374 (80 "127.0.0.1:8080"))
6331bde7
LC
10375@end example
10376
10377In this example, port 22 of the hidden service is mapped to local port 22, and
10378port 80 is mapped to local port 8080.
10379
6629099a
LC
10380This creates a @file{/var/lib/tor/hidden-services/@var{name}} directory, where
10381the @file{hostname} file contains the @code{.onion} host name for the hidden
6331bde7
LC
10382service.
10383
10384See @uref{https://www.torproject.org/docs/tor-hidden-service.html.en, the Tor
10385project's documentation} for more information.
cf4a9129 10386@end deffn
8b315a6d 10387
be1c2c54 10388@deffn {Scheme Procedure} bitlbee-service [#:bitlbee bitlbee] @
4627a464
LC
10389 [#:interface "127.0.0.1"] [#:port 6667] @
10390 [#:extra-settings ""]
10391Return a service that runs @url{http://bitlbee.org,BitlBee}, a daemon that
10392acts as a gateway between IRC and chat networks.
10393
10394The daemon will listen to the interface corresponding to the IP address
10395specified in @var{interface}, on @var{port}. @code{127.0.0.1} means that only
10396local clients can connect, whereas @code{0.0.0.0} means that connections can
10397come from any networking interface.
10398
10399In addition, @var{extra-settings} specifies a string to append to the
10400configuration file.
10401@end deffn
10402
9db7e9be
OP
10403The @code{(gnu services rsync)} module provides the following services:
10404
10405You might want an rsync daemon if you have files that you want available
10406so anyone (or just yourself) can download existing files or upload new
10407files.
10408
10409@deffn {Scheme Variable} rsync-service-type
10410This is the type for the @uref{https://rsync.samba.org, rsync} rsync daemon,
10411@command{rsync-configuration} record as in this example:
10412
10413@example
10414(service rsync-service-type)
10415@end example
10416
10417See below for details about @code{rsync-configuration}.
10418@end deffn
10419
10420@deftp {Data Type} rsync-configuration
10421Data type representing the configuration for @code{rsync-service}.
10422
10423@table @asis
10424@item @code{package} (default: @var{rsync})
10425@code{rsync} package to use.
10426
10427@item @code{port-number} (default: @code{873})
10428TCP port on which @command{rsync} listens for incoming connections. If port
10429is less than @code{1024} @command{rsync} needs to be started as the
10430@code{root} user and group.
10431
10432@item @code{pid-file} (default: @code{"/var/run/rsyncd/rsyncd.pid"})
10433Name of the file where @command{rsync} writes its PID.
10434
10435@item @code{lock-file} (default: @code{"/var/run/rsyncd/rsyncd.lock"})
10436Name of the file where @command{rsync} writes its lock file.
10437
10438@item @code{log-file} (default: @code{"/var/log/rsyncd.log"})
10439Name of the file where @command{rsync} writes its log file.
10440
10441@item @code{use-chroot?} (default: @var{#t})
10442Whether to use chroot for @command{rsync} shared directory.
10443
10444@item @code{share-path} (default: @file{/srv/rsync})
10445Location of the @command{rsync} shared directory.
10446
10447@item @code{share-comment} (default: @code{"Rsync share"})
10448Comment of the @command{rsync} shared directory.
10449
10450@item @code{read-only?} (default: @var{#f})
10451Read-write permissions to shared directory.
10452
10453@item @code{timeout} (default: @code{300})
10454I/O timeout in seconds.
10455
10456@item @code{user} (default: @var{"root"})
10457Owner of the @code{rsync} process.
10458
10459@item @code{group} (default: @var{"root"})
10460Group of the @code{rsync} process.
10461
10462@item @code{uid} (default: @var{"rsyncd"})
10463User name or user ID that file transfers to and from that module should take
10464place as when the daemon was run as @code{root}.
10465
10466@item @code{gid} (default: @var{"rsyncd"})
10467Group name or group ID that will be used when accessing the module.
10468
10469@end table
10470@end deftp
10471
71b0601a 10472Furthermore, @code{(gnu services ssh)} provides the following services.
e32171ee
JD
10473@cindex SSH
10474@cindex SSH server
8b315a6d 10475
be1c2c54 10476@deffn {Scheme Procedure} lsh-service [#:host-key "/etc/lsh/host-key"] @
5833bf33 10477 [#:daemonic? #t] [#:interfaces '()] [#:port-number 22] @
cf4a9129
LC
10478 [#:allow-empty-passwords? #f] [#:root-login? #f] @
10479 [#:syslog-output? #t] [#:x11-forwarding? #t] @
10480 [#:tcp/ip-forwarding? #t] [#:password-authentication? #t] @
21cc905a 10481 [#:public-key-authentication? #t] [#:initialize? #t]
cf4a9129
LC
10482Run the @command{lshd} program from @var{lsh} to listen on port @var{port-number}.
10483@var{host-key} must designate a file containing the host key, and readable
10484only by root.
72e25e35 10485
5833bf33
DP
10486When @var{daemonic?} is true, @command{lshd} will detach from the
10487controlling terminal and log its output to syslogd, unless one sets
10488@var{syslog-output?} to false. Obviously, it also makes lsh-service
10489depend on existence of syslogd service. When @var{pid-file?} is true,
10490@command{lshd} writes its PID to the file called @var{pid-file}.
10491
cf4a9129
LC
10492When @var{initialize?} is true, automatically create the seed and host key
10493upon service activation if they do not exist yet. This may take long and
10494require interaction.
8b315a6d 10495
20dd519c
LC
10496When @var{initialize?} is false, it is up to the user to initialize the
10497randomness generator (@pxref{lsh-make-seed,,, lsh, LSH Manual}), and to create
10498a key pair with the private key stored in file @var{host-key} (@pxref{lshd
10499basics,,, lsh, LSH Manual}).
10500
cf4a9129
LC
10501When @var{interfaces} is empty, lshd listens for connections on all the
10502network interfaces; otherwise, @var{interfaces} must be a list of host names
10503or addresses.
9bf3c1a7 10504
20dd519c
LC
10505@var{allow-empty-passwords?} specifies whether to accept log-ins with empty
10506passwords, and @var{root-login?} specifies whether to accept log-ins as
cf4a9129 10507root.
4af2447e 10508
cf4a9129
LC
10509The other options should be self-descriptive.
10510@end deffn
4af2447e 10511
e32171ee
JD
10512@cindex SSH
10513@cindex SSH server
d8f31281
LC
10514@deffn {Scheme Variable} openssh-service-type
10515This is the type for the @uref{http://www.openssh.org, OpenSSH} secure
10516shell daemon, @command{sshd}. Its value must be an
10517@code{openssh-configuration} record as in this example:
10518
10519@example
10520(service openssh-service-type
10521 (openssh-configuration
10522 (x11-forwarding? #t)
4892eb7c
LC
10523 (permit-root-login 'without-password)
10524 (authorized-keys
10525 `(("alice" ,(local-file "alice.pub"))
10526 ("bob" ,(local-file "bob.pub"))))))
d8f31281
LC
10527@end example
10528
10529See below for details about @code{openssh-configuration}.
1398a438
LC
10530
10531This service can be extended with extra authorized keys, as in this
10532example:
10533
10534@example
10535(service-extension openssh-service-type
10536 (const `(("charlie"
10537 ,(local-file "charlie.pub")))))
10538@end example
86d8f6d3
JL
10539@end deffn
10540
d8f31281
LC
10541@deftp {Data Type} openssh-configuration
10542This is the configuration record for OpenSSH's @command{sshd}.
10543
10544@table @asis
10545@item @code{pid-file} (default: @code{"/var/run/sshd.pid"})
10546Name of the file where @command{sshd} writes its PID.
10547
10548@item @code{port-number} (default: @code{22})
10549TCP port on which @command{sshd} listens for incoming connections.
10550
10551@item @code{permit-root-login} (default: @code{#f})
10552This field determines whether and when to allow logins as root. If
10553@code{#f}, root logins are disallowed; if @code{#t}, they are allowed.
10554If it's the symbol @code{'without-password}, then root logins are
10555permitted but not with password-based authentication.
10556
10557@item @code{allow-empty-passwords?} (default: @code{#f})
10558When true, users with empty passwords may log in. When false, they may
10559not.
10560
10561@item @code{password-authentication?} (default: @code{#t})
10562When true, users may log in with their password. When false, they have
10563other authentication methods.
10564
10565@item @code{public-key-authentication?} (default: @code{#t})
10566When true, users may log in using public key authentication. When
10567false, users have to use other authentication method.
10568
10569Authorized public keys are stored in @file{~/.ssh/authorized_keys}.
10570This is used only by protocol version 2.
10571
d8f31281
LC
10572@item @code{x11-forwarding?} (default: @code{#f})
10573When true, forwarding of X11 graphical client connections is
10574enabled---in other words, @command{ssh} options @option{-X} and
10575@option{-Y} will work.
10576
563c5d42
CL
10577@item @code{challenge-response-authentication?} (default: @code{#f})
10578Specifies whether challenge response authentication is allowed (e.g. via
10579PAM).
10580
10581@item @code{use-pam?} (default: @code{#t})
10582Enables the Pluggable Authentication Module interface. If set to
10583@code{#t}, this will enable PAM authentication using
10584@code{challenge-response-authentication?} and
10585@code{password-authentication?}, in addition to PAM account and session
10586module processing for all authentication types.
10587
10588Because PAM challenge response authentication usually serves an
10589equivalent role to password authentication, you should disable either
10590@code{challenge-response-authentication?} or
10591@code{password-authentication?}.
f895dce4
CL
10592
10593@item @code{print-last-log?} (default: @code{#t})
10594Specifies whether @command{sshd} should print the date and time of the
10595last user login when a user logs in interactively.
12723370
CL
10596
10597@item @code{subsystems} (default: @code{'(("sftp" "internal-sftp"))})
10598Configures external subsystems (e.g. file transfer daemon).
10599
10600This is a list of two-element lists, each of which containing the
10601subsystem name and a command (with optional arguments) to execute upon
10602subsystem request.
10603
10604The command @command{internal-sftp} implements an in-process SFTP
10605server. Alternately, one can specify the @command{sftp-server} command:
10606@example
10607(service openssh-service-type
10608 (openssh-configuration
10609 (subsystems
4892eb7c 10610 `(("sftp" ,(file-append openssh "/libexec/sftp-server"))))))
12723370 10611@end example
4892eb7c
LC
10612
10613@item @code{authorized-keys} (default: @code{'()})
10614@cindex authorized keys, SSH
10615@cindex SSH authorized keys
10616This is the list of authorized keys. Each element of the list is a user
10617name followed by one or more file-like objects that represent SSH public
10618keys. For example:
10619
10620@example
10621(openssh-configuration
10622 (authorized-keys
10623 `(("rekado" ,(local-file "rekado.pub"))
10624 ("chris" ,(local-file "chris.pub"))
10625 ("root" ,(local-file "rekado.pub") ,(local-file "chris.pub")))))
10626@end example
10627
10628@noindent
10629registers the specified public keys for user accounts @code{rekado},
10630@code{chris}, and @code{root}.
10631
1398a438
LC
10632Additional authorized keys can be specified @i{via}
10633@code{service-extension}.
10634
4892eb7c
LC
10635Note that this does @emph{not} interfere with the use of
10636@file{~/.ssh/authorized_keys}.
d8f31281
LC
10637@end table
10638@end deftp
10639
71b0601a
DC
10640@deffn {Scheme Procedure} dropbear-service [@var{config}]
10641Run the @uref{https://matt.ucc.asn.au/dropbear/dropbear.html,Dropbear SSH
10642daemon} with the given @var{config}, a @code{<dropbear-configuration>}
10643object.
10644
10645For example, to specify a Dropbear service listening on port 1234, add
10646this call to the operating system's @code{services} field:
10647
10648@example
10649(dropbear-service (dropbear-configuration
10650 (port-number 1234)))
10651@end example
10652@end deffn
10653
10654@deftp {Data Type} dropbear-configuration
10655This data type represents the configuration of a Dropbear SSH daemon.
10656
10657@table @asis
10658@item @code{dropbear} (default: @var{dropbear})
10659The Dropbear package to use.
10660
10661@item @code{port-number} (default: 22)
10662The TCP port where the daemon waits for incoming connections.
10663
10664@item @code{syslog-output?} (default: @code{#t})
10665Whether to enable syslog output.
10666
10667@item @code{pid-file} (default: @code{"/var/run/dropbear.pid"})
10668File name of the daemon's PID file.
10669
10670@item @code{root-login?} (default: @code{#f})
10671Whether to allow @code{root} logins.
10672
10673@item @code{allow-empty-passwords?} (default: @code{#f})
10674Whether to allow empty passwords.
10675
10676@item @code{password-authentication?} (default: @code{#t})
10677Whether to enable password-based authentication.
10678@end table
10679@end deftp
10680
fa0c1d61
LC
10681@defvr {Scheme Variable} %facebook-host-aliases
10682This variable contains a string for use in @file{/etc/hosts}
10683(@pxref{Host Names,,, libc, The GNU C Library Reference Manual}). Each
10684line contains a entry that maps a known server name of the Facebook
10685on-line service---e.g., @code{www.facebook.com}---to the local
10686host---@code{127.0.0.1} or its IPv6 equivalent, @code{::1}.
10687
10688This variable is typically used in the @code{hosts-file} field of an
7313a52e
LC
10689@code{operating-system} declaration (@pxref{operating-system Reference,
10690@file{/etc/hosts}}):
fa0c1d61
LC
10691
10692@example
10693(use-modules (gnu) (guix))
10694
10695(operating-system
10696 (host-name "mymachine")
10697 ;; ...
10698 (hosts-file
10699 ;; Create a /etc/hosts file with aliases for "localhost"
10700 ;; and "mymachine", as well as for Facebook servers.
24e02c28
LC
10701 (plain-file "hosts"
10702 (string-append (local-host-aliases host-name)
10703 %facebook-host-aliases))))
fa0c1d61
LC
10704@end example
10705
10706This mechanism can prevent programs running locally, such as Web
10707browsers, from accessing Facebook.
10708@end defvr
10709
965a7332
LC
10710The @code{(gnu services avahi)} provides the following definition.
10711
be1c2c54 10712@deffn {Scheme Procedure} avahi-service [#:avahi @var{avahi}] @
965a7332
LC
10713 [#:host-name #f] [#:publish? #t] [#:ipv4? #t] @
10714 [#:ipv6? #t] [#:wide-area? #f] @
c8695f32 10715 [#:domains-to-browse '()] [#:debug? #f]
965a7332
LC
10716Return a service that runs @command{avahi-daemon}, a system-wide
10717mDNS/DNS-SD responder that allows for service discovery and
cc9c1f39
LC
10718"zero-configuration" host name lookups (see @uref{http://avahi.org/}), and
10719extends the name service cache daemon (nscd) so that it can resolve
10720@code{.local} host names using
1065bed9
LC
10721@uref{http://0pointer.de/lennart/projects/nss-mdns/, nss-mdns}. Additionally,
10722add the @var{avahi} package to the system profile so that commands such as
10723@command{avahi-browse} are directly usable.
965a7332
LC
10724
10725If @var{host-name} is different from @code{#f}, use that as the host name to
10726publish for this machine; otherwise, use the machine's actual host name.
10727
10728When @var{publish?} is true, publishing of host names and services is allowed;
10729in particular, avahi-daemon will publish the machine's host name and IP
10730address via mDNS on the local network.
10731
10732When @var{wide-area?} is true, DNS-SD over unicast DNS is enabled.
10733
10734Boolean values @var{ipv4?} and @var{ipv6?} determine whether to use IPv4/IPv6
10735sockets.
10736@end deffn
10737
c32d02fe
SB
10738@deffn {Scheme Variable} openvswitch-service-type
10739This is the type of the @uref{http://www.openvswitch.org, Open vSwitch}
10740service, whose value should be an @code{openvswitch-configuration}
10741object.
10742@end deffn
10743
10744@deftp {Data Type} openvswitch-configuration
10745Data type representing the configuration of Open vSwitch, a multilayer
10746virtual switch which is designed to enable massive network automation
10747through programmatic extension.
10748
10749@table @asis
10750@item @code{package} (default: @var{openvswitch})
10751Package object of the Open vSwitch.
10752
10753@end table
10754@end deftp
965a7332 10755
cf4a9129
LC
10756@node X Window
10757@subsubsection X Window
68ad877c 10758
e32171ee
JD
10759@cindex X11
10760@cindex X Window System
cf4a9129
LC
10761Support for the X Window graphical display system---specifically
10762Xorg---is provided by the @code{(gnu services xorg)} module. Note that
10763there is no @code{xorg-service} procedure. Instead, the X server is
10764started by the @dfn{login manager}, currently SLiM.
4af2447e 10765
935644c0
DC
10766@deftp {Data Type} sddm-configuration
10767This is the data type representing the sddm service configuration.
10768
10769@table @asis
10770@item @code{display-server} (default: "x11")
10771Select display server to use for the greeter. Valid values are "x11"
10772or "wayland".
10773
10774@item @code{numlock} (default: "on")
10775Valid values are "on", "off" or "none".
10776
10777@item @code{halt-command} (default @code{#~(string-apppend #$shepherd "/sbin/halt")})
10778Command to run when halting.
10779
10780@item @code{reboot-command} (default @code{#~(string-append #$shepherd "/sbin/reboot")})
10781Command to run when rebooting.
10782
10783@item @code{theme} (default "maldives")
10784Theme to use. Default themes provided by SDDM are "elarun" or "maldives".
10785
10786@item @code{themes-directory} (default "/run/current-system/profile/share/sddm/themes")
10787Directory to look for themes.
10788
10789@item @code{faces-directory} (default "/run/current-system/profile/share/sddm/faces")
10790Directory to look for faces.
10791
10792@item @code{default-path} (default "/run/current-system/profile/bin")
10793Default PATH to use.
10794
10795@item @code{minimum-uid} (default 1000)
10796Minimum UID to display in SDDM.
10797
10798@item @code{maximum-uid} (default 2000)
10799Maximum UID to display in SDDM
10800
10801@item @code{remember-last-user?} (default #t)
10802Remember last user.
10803
10804@item @code{remember-last-session?} (default #t)
10805Remember last session.
10806
10807@item @code{hide-users} (default "")
10808Usernames to hide from SDDM greeter.
10809
10810@item @code{hide-shells} (default @code{#~(string-append #$shadow "/sbin/nologin")})
10811Users with shells listed will be hidden from the SDDM greeter.
10812
10813@item @code{session-command} (default @code{#~(string-append #$sddm "/share/sddm/scripts/wayland-session")})
10814Script to run before starting a wayland session.
10815
10816@item @code{sessions-directory} (default "/run/current-system/profile/share/wayland-sessions")
10817Directory to look for desktop files starting wayland sessions.
10818
10819@item @code{xorg-server-path} (default @code{xorg-start-command})
10820Path to xorg-server.
10821
10822@item @code{xauth-path} (default @code{#~(string-append #$xauth "/bin/xauth")})
10823Path to xauth.
10824
10825@item @code{xephyr-path} (default @code{#~(string-append #$xorg-server "/bin/Xephyr")})
10826Path to Xephyr.
10827
10828@item @code{xdisplay-start} (default @code{#~(string-append #$sddm "/share/sddm/scripts/Xsetup")})
10829Script to run after starting xorg-server.
10830
10831@item @code{xdisplay-stop} (default @code{#~(string-append #$sddm "/share/sddm/scripts/Xstop")})
10832Script to run before stopping xorg-server.
10833
10834@item @code{xsession-command} (default: @code{xinitr })
10835Script to run before starting a X session.
10836
10837@item @code{xsessions-directory} (default: "/run/current-system/profile/share/xsessions")
10838Directory to look for desktop files starting X sessions.
10839
10840@item @code{minimum-vt} (default: 7)
10841Minimum VT to use.
10842
10843@item @code{xserver-arguments} (default "-nolisten tcp")
10844Arguments to pass to xorg-server.
10845
10846@item @code{auto-login-user} (default "")
10847User to use for auto-login.
10848
10849@item @code{auto-login-session} (default "")
10850Desktop file to use for auto-login.
10851
10852@item @code{relogin?} (default #f)
10853Relogin after logout.
10854
10855@end table
10856@end deftp
10857
e32171ee 10858@cindex login manager
935644c0
DC
10859@deffn {Scheme Procedure} sddm-service config
10860Return a service that spawns the SDDM graphical login manager for config of
10861type @code{<sddm-configuration>}.
10862
10863@example
10864 (sddm-service (sddm-configuration
10865 (auto-login-user "Alice")
10866 (auto-login-session "xfce.desktop")))
10867@end example
10868@end deffn
10869
be1c2c54 10870@deffn {Scheme Procedure} slim-service [#:allow-empty-passwords? #f] @
0ecc3bf3
LC
10871 [#:auto-login? #f] [#:default-user ""] [#:startx] @
10872 [#:theme @var{%default-slim-theme}] @
4bd43bbe 10873 [#:theme-name @var{%default-slim-theme-name}]
cf4a9129
LC
10874Return a service that spawns the SLiM graphical login manager, which in
10875turn starts the X display server with @var{startx}, a command as returned by
10876@code{xorg-start-command}.
4af2447e 10877
04e4e6ab
LC
10878@cindex X session
10879
10880SLiM automatically looks for session types described by the @file{.desktop}
10881files in @file{/run/current-system/profile/share/xsessions} and allows users
10882to choose a session from the log-in screen using @kbd{F1}. Packages such as
10883@var{xfce}, @var{sawfish}, and @var{ratpoison} provide @file{.desktop} files;
10884adding them to the system-wide set of packages automatically makes them
10885available at the log-in screen.
10886
10887In addition, @file{~/.xsession} files are honored. When available,
10888@file{~/.xsession} must be an executable that starts a window manager
10889and/or other X clients.
10890
cf4a9129
LC
10891When @var{allow-empty-passwords?} is true, allow logins with an empty
10892password. When @var{auto-login?} is true, log in automatically as
10893@var{default-user}.
0ecc3bf3 10894
1068f26b 10895If @var{theme} is @code{#f}, use the default log-in theme; otherwise
0ecc3bf3
LC
10896@var{theme} must be a gexp denoting the name of a directory containing the
10897theme to use. In that case, @var{theme-name} specifies the name of the
10898theme.
cf4a9129 10899@end deffn
4af2447e 10900
0ecc3bf3
LC
10901@defvr {Scheme Variable} %default-theme
10902@defvrx {Scheme Variable} %default-theme-name
10903The G-Expression denoting the default SLiM theme and its name.
10904@end defvr
10905
be1c2c54 10906@deffn {Scheme Procedure} xorg-start-command [#:guile] @
d1cdd7ba 10907 [#:configuration-file #f] [#:xorg-server @var{xorg-server}]
f703413e 10908Return a derivation that builds a @var{guile} script to start the X server
d1cdd7ba
LC
10909from @var{xorg-server}. @var{configuration-file} is the server configuration
10910file or a derivation that builds it; when omitted, the result of
10911@code{xorg-configuration-file} is used.
10912
10913Usually the X server is started by a login manager.
10914@end deffn
10915
be1c2c54 10916@deffn {Scheme Procedure} xorg-configuration-file @
12422c9d 10917 [#:drivers '()] [#:resolutions '()] [#:extra-config '()]
d1cdd7ba
LC
10918Return a configuration file for the Xorg server containing search paths for
10919all the common drivers.
f703413e
LC
10920
10921@var{drivers} must be either the empty list, in which case Xorg chooses a
10922graphics driver automatically, or a list of driver names that will be tried in
d1cdd7ba 10923this order---e.g., @code{(\"modesetting\" \"vesa\")}.
d2e59637
LC
10924
10925Likewise, when @var{resolutions} is the empty list, Xorg chooses an
10926appropriate screen resolution; otherwise, it must be a list of
10927resolutions---e.g., @code{((1024 768) (640 480))}.
12422c9d
LC
10928
10929Last, @var{extra-config} is a list of strings or objects appended to the
10930@code{text-file*} argument list. It is used to pass extra text to be added
10931verbatim to the configuration file.
f703413e 10932@end deffn
4af2447e 10933
6726282b
LC
10934@deffn {Scheme Procedure} screen-locker-service @var{package} [@var{name}]
10935Add @var{package}, a package for a screen-locker or screen-saver whose
10936command is @var{program}, to the set of setuid programs and add a PAM entry
10937for it. For example:
10938
10939@lisp
10940(screen-locker-service xlockmore "xlock")
10941@end lisp
10942
10943makes the good ol' XlockMore usable.
10944@end deffn
10945
10946
f2ec23d1
AW
10947@node Printing Services
10948@subsubsection Printing Services
10949
de322a5d 10950@cindex printer support with CUPS
f2ec23d1
AW
10951The @code{(gnu services cups)} module provides a Guix service definition
10952for the CUPS printing service. To add printer support to a GuixSD
10953system, add a @code{cups-service} to the operating system definition:
10954
10955@deffn {Scheme Variable} cups-service-type
10956The service type for the CUPS print server. Its value should be a valid
3d3c5650
LC
10957CUPS configuration (see below). To use the default settings, simply
10958write:
f2ec23d1 10959@example
3d3c5650 10960(service cups-service-type)
f2ec23d1
AW
10961@end example
10962@end deffn
10963
10964The CUPS configuration controls the basic things about your CUPS
10965installation: what interfaces it listens on, what to do if a print job
10966fails, how much logging to do, and so on. To actually add a printer,
10967you have to visit the @url{http://localhost:631} URL, or use a tool such
10968as GNOME's printer configuration services. By default, configuring a
10969CUPS service will generate a self-signed certificate if needed, for
10970secure connections to the print server.
10971
de322a5d
LC
10972Suppose you want to enable the Web interface of CUPS and also add
10973support for HP printers @i{via} the @code{hplip} package. You can do
10974that directly, like this (you need to use the @code{(gnu packages cups)}
10975module):
f2ec23d1
AW
10976
10977@example
10978(service cups-service-type
10979 (cups-configuration
de322a5d
LC
10980 (web-interface? #t)
10981 (extensions
10982 (list cups-filters hplip))))
f2ec23d1
AW
10983@end example
10984
10985The available configuration parameters follow. Each parameter
10986definition is preceded by its type; for example, @samp{string-list foo}
10987indicates that the @code{foo} parameter should be specified as a list of
10988strings. There is also a way to specify the configuration as a string,
10989if you have an old @code{cupsd.conf} file that you want to port over
10990from some other system; see the end for more details.
10991
10992@c The following documentation was initially generated by
10993@c (generate-documentation) in (gnu services cups). Manually maintained
10994@c documentation is better, so we shouldn't hesitate to edit below as
10995@c needed. However if the change you want to make to this documentation
10996@c can be done in an automated way, it's probably easier to change
10997@c (generate-documentation) than to make it below and have to deal with
10998@c the churn as CUPS updates.
10999
11000
11001Available @code{cups-configuration} fields are:
11002
11003@deftypevr {@code{cups-configuration} parameter} package cups
11004The CUPS package.
11005@end deftypevr
11006
11007@deftypevr {@code{cups-configuration} parameter} package-list extensions
11008Drivers and other extensions to the CUPS package.
11009@end deftypevr
11010
11011@deftypevr {@code{cups-configuration} parameter} files-configuration files-configuration
11012Configuration of where to write logs, what directories to use for print
11013spools, and related privileged configuration parameters.
11014
11015Available @code{files-configuration} fields are:
11016
11017@deftypevr {@code{files-configuration} parameter} log-location access-log
11018Defines the access log filename. Specifying a blank filename disables
11019access log generation. The value @code{stderr} causes log entries to be
11020sent to the standard error file when the scheduler is running in the
11021foreground, or to the system log daemon when run in the background. The
11022value @code{syslog} causes log entries to be sent to the system log
11023daemon. The server name may be included in filenames using the string
11024@code{%s}, as in @code{/var/log/cups/%s-access_log}.
11025
11026Defaults to @samp{"/var/log/cups/access_log"}.
11027@end deftypevr
11028
11029@deftypevr {@code{files-configuration} parameter} file-name cache-dir
11030Where CUPS should cache data.
11031
11032Defaults to @samp{"/var/cache/cups"}.
11033@end deftypevr
11034
11035@deftypevr {@code{files-configuration} parameter} string config-file-perm
11036Specifies the permissions for all configuration files that the scheduler
11037writes.
11038
11039Note that the permissions for the printers.conf file are currently
11040masked to only allow access from the scheduler user (typically root).
11041This is done because printer device URIs sometimes contain sensitive
11042authentication information that should not be generally known on the
11043system. There is no way to disable this security feature.
11044
11045Defaults to @samp{"0640"}.
11046@end deftypevr
11047
11048@deftypevr {@code{files-configuration} parameter} log-location error-log
11049Defines the error log filename. Specifying a blank filename disables
11050access log generation. The value @code{stderr} causes log entries to be
11051sent to the standard error file when the scheduler is running in the
11052foreground, or to the system log daemon when run in the background. The
11053value @code{syslog} causes log entries to be sent to the system log
11054daemon. The server name may be included in filenames using the string
11055@code{%s}, as in @code{/var/log/cups/%s-error_log}.
11056
11057Defaults to @samp{"/var/log/cups/error_log"}.
11058@end deftypevr
11059
11060@deftypevr {@code{files-configuration} parameter} string fatal-errors
11061Specifies which errors are fatal, causing the scheduler to exit. The
11062kind strings are:
11063
11064@table @code
11065@item none
11066No errors are fatal.
11067
11068@item all
11069All of the errors below are fatal.
11070
11071@item browse
11072Browsing initialization errors are fatal, for example failed connections
11073to the DNS-SD daemon.
11074
11075@item config
11076Configuration file syntax errors are fatal.
11077
11078@item listen
11079Listen or Port errors are fatal, except for IPv6 failures on the
11080loopback or @code{any} addresses.
11081
11082@item log
11083Log file creation or write errors are fatal.
11084
11085@item permissions
11086Bad startup file permissions are fatal, for example shared TLS
11087certificate and key files with world-read permissions.
11088@end table
11089
11090Defaults to @samp{"all -browse"}.
11091@end deftypevr
11092
11093@deftypevr {@code{files-configuration} parameter} boolean file-device?
11094Specifies whether the file pseudo-device can be used for new printer
11095queues. The URI @uref{file:///dev/null} is always allowed.
11096
11097Defaults to @samp{#f}.
11098@end deftypevr
11099
11100@deftypevr {@code{files-configuration} parameter} string group
11101Specifies the group name or ID that will be used when executing external
11102programs.
11103
11104Defaults to @samp{"lp"}.
11105@end deftypevr
11106
11107@deftypevr {@code{files-configuration} parameter} string log-file-perm
11108Specifies the permissions for all log files that the scheduler writes.
11109
11110Defaults to @samp{"0644"}.
11111@end deftypevr
11112
11113@deftypevr {@code{files-configuration} parameter} log-location page-log
11114Defines the page log filename. Specifying a blank filename disables
11115access log generation. The value @code{stderr} causes log entries to be
11116sent to the standard error file when the scheduler is running in the
11117foreground, or to the system log daemon when run in the background. The
11118value @code{syslog} causes log entries to be sent to the system log
11119daemon. The server name may be included in filenames using the string
11120@code{%s}, as in @code{/var/log/cups/%s-page_log}.
11121
11122Defaults to @samp{"/var/log/cups/page_log"}.
11123@end deftypevr
11124
11125@deftypevr {@code{files-configuration} parameter} string remote-root
11126Specifies the username that is associated with unauthenticated accesses
11127by clients claiming to be the root user. The default is @code{remroot}.
11128
11129Defaults to @samp{"remroot"}.
11130@end deftypevr
11131
11132@deftypevr {@code{files-configuration} parameter} file-name request-root
11133Specifies the directory that contains print jobs and other HTTP request
11134data.
11135
11136Defaults to @samp{"/var/spool/cups"}.
11137@end deftypevr
11138
11139@deftypevr {@code{files-configuration} parameter} sandboxing sandboxing
11140Specifies the level of security sandboxing that is applied to print
11141filters, backends, and other child processes of the scheduler; either
11142@code{relaxed} or @code{strict}. This directive is currently only
11143used/supported on macOS.
11144
11145Defaults to @samp{strict}.
11146@end deftypevr
11147
11148@deftypevr {@code{files-configuration} parameter} file-name server-keychain
11149Specifies the location of TLS certificates and private keys. CUPS will
11150look for public and private keys in this directory: a @code{.crt} files
11151for PEM-encoded certificates and corresponding @code{.key} files for
11152PEM-encoded private keys.
11153
11154Defaults to @samp{"/etc/cups/ssl"}.
11155@end deftypevr
11156
11157@deftypevr {@code{files-configuration} parameter} file-name server-root
11158Specifies the directory containing the server configuration files.
11159
11160Defaults to @samp{"/etc/cups"}.
11161@end deftypevr
11162
11163@deftypevr {@code{files-configuration} parameter} boolean sync-on-close?
11164Specifies whether the scheduler calls fsync(2) after writing
11165configuration or state files.
11166
11167Defaults to @samp{#f}.
11168@end deftypevr
11169
11170@deftypevr {@code{files-configuration} parameter} space-separated-string-list system-group
11171Specifies the group(s) to use for @code{@@SYSTEM} group authentication.
11172@end deftypevr
11173
11174@deftypevr {@code{files-configuration} parameter} file-name temp-dir
11175Specifies the directory where temporary files are stored.
11176
11177Defaults to @samp{"/var/spool/cups/tmp"}.
11178@end deftypevr
11179
11180@deftypevr {@code{files-configuration} parameter} string user
11181Specifies the user name or ID that is used when running external
11182programs.
11183
11184Defaults to @samp{"lp"}.
11185@end deftypevr
11186@end deftypevr
11187
11188@deftypevr {@code{cups-configuration} parameter} access-log-level access-log-level
11189Specifies the logging level for the AccessLog file. The @code{config}
11190level logs when printers and classes are added, deleted, or modified and
11191when configuration files are accessed or updated. The @code{actions}
11192level logs when print jobs are submitted, held, released, modified, or
11193canceled, and any of the conditions for @code{config}. The @code{all}
11194level logs all requests.
11195
11196Defaults to @samp{actions}.
11197@end deftypevr
11198
11199@deftypevr {@code{cups-configuration} parameter} boolean auto-purge-jobs?
11200Specifies whether to purge job history data automatically when it is no
11201longer required for quotas.
11202
11203Defaults to @samp{#f}.
11204@end deftypevr
11205
11206@deftypevr {@code{cups-configuration} parameter} browse-local-protocols browse-local-protocols
11207Specifies which protocols to use for local printer sharing.
11208
11209Defaults to @samp{dnssd}.
11210@end deftypevr
11211
11212@deftypevr {@code{cups-configuration} parameter} boolean browse-web-if?
11213Specifies whether the CUPS web interface is advertised.
11214
11215Defaults to @samp{#f}.
11216@end deftypevr
11217
11218@deftypevr {@code{cups-configuration} parameter} boolean browsing?
11219Specifies whether shared printers are advertised.
11220
11221Defaults to @samp{#f}.
11222@end deftypevr
11223
11224@deftypevr {@code{cups-configuration} parameter} string classification
11225Specifies the security classification of the server. Any valid banner
11226name can be used, including "classified", "confidential", "secret",
11227"topsecret", and "unclassified", or the banner can be omitted to disable
11228secure printing functions.
11229
11230Defaults to @samp{""}.
11231@end deftypevr
11232
11233@deftypevr {@code{cups-configuration} parameter} boolean classify-override?
11234Specifies whether users may override the classification (cover page) of
11235individual print jobs using the @code{job-sheets} option.
11236
11237Defaults to @samp{#f}.
11238@end deftypevr
11239
11240@deftypevr {@code{cups-configuration} parameter} default-auth-type default-auth-type
11241Specifies the default type of authentication to use.
11242
11243Defaults to @samp{Basic}.
11244@end deftypevr
11245
11246@deftypevr {@code{cups-configuration} parameter} default-encryption default-encryption
11247Specifies whether encryption will be used for authenticated requests.
11248
11249Defaults to @samp{Required}.
11250@end deftypevr
11251
11252@deftypevr {@code{cups-configuration} parameter} string default-language
11253Specifies the default language to use for text and web content.
11254
11255Defaults to @samp{"en"}.
11256@end deftypevr
11257
11258@deftypevr {@code{cups-configuration} parameter} string default-paper-size
11259Specifies the default paper size for new print queues. @samp{"Auto"}
11260uses a locale-specific default, while @samp{"None"} specifies there is
11261no default paper size. Specific size names are typically
11262@samp{"Letter"} or @samp{"A4"}.
11263
11264Defaults to @samp{"Auto"}.
11265@end deftypevr
11266
11267@deftypevr {@code{cups-configuration} parameter} string default-policy
11268Specifies the default access policy to use.
11269
11270Defaults to @samp{"default"}.
11271@end deftypevr
11272
11273@deftypevr {@code{cups-configuration} parameter} boolean default-shared?
11274Specifies whether local printers are shared by default.
11275
11276Defaults to @samp{#t}.
11277@end deftypevr
11278
11279@deftypevr {@code{cups-configuration} parameter} non-negative-integer dirty-clean-interval
11280Specifies the delay for updating of configuration and state files, in
11281seconds. A value of 0 causes the update to happen as soon as possible,
11282typically within a few milliseconds.
11283
11284Defaults to @samp{30}.
11285@end deftypevr
11286
11287@deftypevr {@code{cups-configuration} parameter} error-policy error-policy
11288Specifies what to do when an error occurs. Possible values are
11289@code{abort-job}, which will discard the failed print job;
11290@code{retry-job}, which will retry the job at a later time;
11291@code{retry-this-job}, which retries the failed job immediately; and
11292@code{stop-printer}, which stops the printer.
11293
11294Defaults to @samp{stop-printer}.
11295@end deftypevr
11296
11297@deftypevr {@code{cups-configuration} parameter} non-negative-integer filter-limit
11298Specifies the maximum cost of filters that are run concurrently, which
11299can be used to minimize disk, memory, and CPU resource problems. A
11300limit of 0 disables filter limiting. An average print to a
11301non-PostScript printer needs a filter limit of about 200. A PostScript
11302printer needs about half that (100). Setting the limit below these
11303thresholds will effectively limit the scheduler to printing a single job
11304at any time.
11305
11306Defaults to @samp{0}.
11307@end deftypevr
11308
11309@deftypevr {@code{cups-configuration} parameter} non-negative-integer filter-nice
11310Specifies the scheduling priority of filters that are run to print a
11311job. The nice value ranges from 0, the highest priority, to 19, the
11312lowest priority.
11313
11314Defaults to @samp{0}.
11315@end deftypevr
11316
11317@deftypevr {@code{cups-configuration} parameter} host-name-lookups host-name-lookups
11318Specifies whether to do reverse lookups on connecting clients. The
11319@code{double} setting causes @code{cupsd} to verify that the hostname
11320resolved from the address matches one of the addresses returned for that
11321hostname. Double lookups also prevent clients with unregistered
11322addresses from connecting to your server. Only set this option to
11323@code{#t} or @code{double} if absolutely required.
11324
11325Defaults to @samp{#f}.
11326@end deftypevr
11327
11328@deftypevr {@code{cups-configuration} parameter} non-negative-integer job-kill-delay
11329Specifies the number of seconds to wait before killing the filters and
11330backend associated with a canceled or held job.
11331
11332Defaults to @samp{30}.
11333@end deftypevr
11334
11335@deftypevr {@code{cups-configuration} parameter} non-negative-integer job-retry-interval
11336Specifies the interval between retries of jobs in seconds. This is
11337typically used for fax queues but can also be used with normal print
11338queues whose error policy is @code{retry-job} or
11339@code{retry-current-job}.
11340
11341Defaults to @samp{30}.
11342@end deftypevr
11343
11344@deftypevr {@code{cups-configuration} parameter} non-negative-integer job-retry-limit
11345Specifies the number of retries that are done for jobs. This is
11346typically used for fax queues but can also be used with normal print
11347queues whose error policy is @code{retry-job} or
11348@code{retry-current-job}.
11349
11350Defaults to @samp{5}.
11351@end deftypevr
11352
11353@deftypevr {@code{cups-configuration} parameter} boolean keep-alive?
11354Specifies whether to support HTTP keep-alive connections.
11355
11356Defaults to @samp{#t}.
11357@end deftypevr
11358
11359@deftypevr {@code{cups-configuration} parameter} non-negative-integer keep-alive-timeout
11360Specifies how long an idle client connection remains open, in seconds.
11361
11362Defaults to @samp{30}.
11363@end deftypevr
11364
11365@deftypevr {@code{cups-configuration} parameter} non-negative-integer limit-request-body
11366Specifies the maximum size of print files, IPP requests, and HTML form
11367data. A limit of 0 disables the limit check.
11368
11369Defaults to @samp{0}.
11370@end deftypevr
11371
11372@deftypevr {@code{cups-configuration} parameter} multiline-string-list listen
11373Listens on the specified interfaces for connections. Valid values are
11374of the form @var{address}:@var{port}, where @var{address} is either an
11375IPv6 address enclosed in brackets, an IPv4 address, or @code{*} to
11376indicate all addresses. Values can also be file names of local UNIX
11377domain sockets. The Listen directive is similar to the Port directive
11378but allows you to restrict access to specific interfaces or networks.
11379@end deftypevr
11380
11381@deftypevr {@code{cups-configuration} parameter} non-negative-integer listen-back-log
11382Specifies the number of pending connections that will be allowed. This
11383normally only affects very busy servers that have reached the MaxClients
11384limit, but can also be triggered by large numbers of simultaneous
11385connections. When the limit is reached, the operating system will
11386refuse additional connections until the scheduler can accept the pending
11387ones.
11388
11389Defaults to @samp{128}.
11390@end deftypevr
11391
11392@deftypevr {@code{cups-configuration} parameter} location-access-control-list location-access-controls
11393Specifies a set of additional access controls.
11394
11395Available @code{location-access-controls} fields are:
11396
11397@deftypevr {@code{location-access-controls} parameter} file-name path
11398Specifies the URI path to which the access control applies.
11399@end deftypevr
11400
11401@deftypevr {@code{location-access-controls} parameter} access-control-list access-controls
11402Access controls for all access to this path, in the same format as the
11403@code{access-controls} of @code{operation-access-control}.
11404
11405Defaults to @samp{()}.
11406@end deftypevr
11407
11408@deftypevr {@code{location-access-controls} parameter} method-access-control-list method-access-controls
11409Access controls for method-specific access to this path.
11410
11411Defaults to @samp{()}.
11412
11413Available @code{method-access-controls} fields are:
11414
11415@deftypevr {@code{method-access-controls} parameter} boolean reverse?
11416If @code{#t}, apply access controls to all methods except the listed
11417methods. Otherwise apply to only the listed methods.
11418
11419Defaults to @samp{#f}.
11420@end deftypevr
11421
11422@deftypevr {@code{method-access-controls} parameter} method-list methods
11423Methods to which this access control applies.
11424
11425Defaults to @samp{()}.
11426@end deftypevr
11427
11428@deftypevr {@code{method-access-controls} parameter} access-control-list access-controls
11429Access control directives, as a list of strings. Each string should be
11430one directive, such as "Order allow,deny".
11431
11432Defaults to @samp{()}.
11433@end deftypevr
11434@end deftypevr
11435@end deftypevr
11436
11437@deftypevr {@code{cups-configuration} parameter} non-negative-integer log-debug-history
11438Specifies the number of debugging messages that are retained for logging
11439if an error occurs in a print job. Debug messages are logged regardless
11440of the LogLevel setting.
11441
11442Defaults to @samp{100}.
11443@end deftypevr
11444
11445@deftypevr {@code{cups-configuration} parameter} log-level log-level
11446Specifies the level of logging for the ErrorLog file. The value
11447@code{none} stops all logging while @code{debug2} logs everything.
11448
11449Defaults to @samp{info}.
11450@end deftypevr
11451
11452@deftypevr {@code{cups-configuration} parameter} log-time-format log-time-format
11453Specifies the format of the date and time in the log files. The value
11454@code{standard} logs whole seconds while @code{usecs} logs microseconds.
11455
11456Defaults to @samp{standard}.
11457@end deftypevr
11458
11459@deftypevr {@code{cups-configuration} parameter} non-negative-integer max-clients
11460Specifies the maximum number of simultaneous clients that are allowed by
11461the scheduler.
11462
11463Defaults to @samp{100}.
11464@end deftypevr
11465
11466@deftypevr {@code{cups-configuration} parameter} non-negative-integer max-clients-per-host
11467Specifies the maximum number of simultaneous clients that are allowed
11468from a single address.
11469
11470Defaults to @samp{100}.
11471@end deftypevr
11472
11473@deftypevr {@code{cups-configuration} parameter} non-negative-integer max-copies
11474Specifies the maximum number of copies that a user can print of each
11475job.
11476
11477Defaults to @samp{9999}.
11478@end deftypevr
11479
11480@deftypevr {@code{cups-configuration} parameter} non-negative-integer max-hold-time
11481Specifies the maximum time a job may remain in the @code{indefinite}
11482hold state before it is canceled. A value of 0 disables cancellation of
11483held jobs.
11484
11485Defaults to @samp{0}.
11486@end deftypevr
11487
11488@deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs
11489Specifies the maximum number of simultaneous jobs that are allowed. Set
11490to 0 to allow an unlimited number of jobs.
11491
11492Defaults to @samp{500}.
11493@end deftypevr
11494
11495@deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs-per-printer
11496Specifies the maximum number of simultaneous jobs that are allowed per
11497printer. A value of 0 allows up to MaxJobs jobs per printer.
11498
11499Defaults to @samp{0}.
11500@end deftypevr
11501
11502@deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs-per-user
11503Specifies the maximum number of simultaneous jobs that are allowed per
11504user. A value of 0 allows up to MaxJobs jobs per user.
11505
11506Defaults to @samp{0}.
11507@end deftypevr
11508
11509@deftypevr {@code{cups-configuration} parameter} non-negative-integer max-job-time
11510Specifies the maximum time a job may take to print before it is
11511canceled, in seconds. Set to 0 to disable cancellation of "stuck" jobs.
11512
11513Defaults to @samp{10800}.
11514@end deftypevr
11515
11516@deftypevr {@code{cups-configuration} parameter} non-negative-integer max-log-size
11517Specifies the maximum size of the log files before they are rotated, in
11518bytes. The value 0 disables log rotation.
11519
11520Defaults to @samp{1048576}.
11521@end deftypevr
11522
11523@deftypevr {@code{cups-configuration} parameter} non-negative-integer multiple-operation-timeout
11524Specifies the maximum amount of time to allow between files in a
11525multiple file print job, in seconds.
11526
11527Defaults to @samp{300}.
11528@end deftypevr
11529
11530@deftypevr {@code{cups-configuration} parameter} string page-log-format
11531Specifies the format of PageLog lines. Sequences beginning with percent
11532(@samp{%}) characters are replaced with the corresponding information,
11533while all other characters are copied literally. The following percent
11534sequences are recognized:
11535
11536@table @samp
11537@item %%
11538insert a single percent character
11539
11540@item %@{name@}
11541insert the value of the specified IPP attribute
11542
11543@item %C
11544insert the number of copies for the current page
11545
11546@item %P
11547insert the current page number
11548
11549@item %T
11550insert the current date and time in common log format
11551
11552@item %j
11553insert the job ID
11554
11555@item %p
11556insert the printer name
11557
11558@item %u
11559insert the username
11560@end table
11561
11562A value of the empty string disables page logging. The string @code{%p
11563%u %j %T %P %C %@{job-billing@} %@{job-originating-host-name@}
11564%@{job-name@} %@{media@} %@{sides@}} creates a page log with the
11565standard items.
11566
11567Defaults to @samp{""}.
11568@end deftypevr
11569
11570@deftypevr {@code{cups-configuration} parameter} environment-variables environment-variables
11571Passes the specified environment variable(s) to child processes; a list
11572of strings.
11573
11574Defaults to @samp{()}.
11575@end deftypevr
11576
11577@deftypevr {@code{cups-configuration} parameter} policy-configuration-list policies
11578Specifies named access control policies.
11579
11580Available @code{policy-configuration} fields are:
11581
11582@deftypevr {@code{policy-configuration} parameter} string name
11583Name of the policy.
11584@end deftypevr
11585
11586@deftypevr {@code{policy-configuration} parameter} string job-private-access
11587Specifies an access list for a job's private values. @code{@@ACL} maps
11588to the printer's requesting-user-name-allowed or
11589requesting-user-name-denied values. @code{@@OWNER} maps to the job's
11590owner. @code{@@SYSTEM} maps to the groups listed for the
11591@code{system-group} field of the @code{files-config} configuration,
11592which is reified into the @code{cups-files.conf(5)} file. Other
11593possible elements of the access list include specific user names, and
11594@code{@@@var{group}} to indicate members of a specific group. The
11595access list may also be simply @code{all} or @code{default}.
11596
11597Defaults to @samp{"@@OWNER @@SYSTEM"}.
11598@end deftypevr
11599
11600@deftypevr {@code{policy-configuration} parameter} string job-private-values
11601Specifies the list of job values to make private, or @code{all},
11602@code{default}, or @code{none}.
11603
11604Defaults to @samp{"job-name job-originating-host-name
11605job-originating-user-name phone"}.
11606@end deftypevr
11607
11608@deftypevr {@code{policy-configuration} parameter} string subscription-private-access
11609Specifies an access list for a subscription's private values.
11610@code{@@ACL} maps to the printer's requesting-user-name-allowed or
11611requesting-user-name-denied values. @code{@@OWNER} maps to the job's
11612owner. @code{@@SYSTEM} maps to the groups listed for the
11613@code{system-group} field of the @code{files-config} configuration,
11614which is reified into the @code{cups-files.conf(5)} file. Other
11615possible elements of the access list include specific user names, and
11616@code{@@@var{group}} to indicate members of a specific group. The
11617access list may also be simply @code{all} or @code{default}.
11618
11619Defaults to @samp{"@@OWNER @@SYSTEM"}.
11620@end deftypevr
11621
11622@deftypevr {@code{policy-configuration} parameter} string subscription-private-values
11623Specifies the list of job values to make private, or @code{all},
11624@code{default}, or @code{none}.
11625
11626Defaults to @samp{"notify-events notify-pull-method notify-recipient-uri
11627notify-subscriber-user-name notify-user-data"}.
11628@end deftypevr
11629
11630@deftypevr {@code{policy-configuration} parameter} operation-access-control-list access-controls
11631Access control by IPP operation.
11632
11633Defaults to @samp{()}.
11634@end deftypevr
11635@end deftypevr
11636
11637@deftypevr {@code{cups-configuration} parameter} boolean-or-non-negative-integer preserve-job-files
11638Specifies whether job files (documents) are preserved after a job is
11639printed. If a numeric value is specified, job files are preserved for
11640the indicated number of seconds after printing. Otherwise a boolean
11641value applies indefinitely.
11642
11643Defaults to @samp{86400}.
11644@end deftypevr
11645
11646@deftypevr {@code{cups-configuration} parameter} boolean-or-non-negative-integer preserve-job-history
11647Specifies whether the job history is preserved after a job is printed.
11648If a numeric value is specified, the job history is preserved for the
11649indicated number of seconds after printing. If @code{#t}, the job
11650history is preserved until the MaxJobs limit is reached.
11651
11652Defaults to @samp{#t}.
11653@end deftypevr
11654
11655@deftypevr {@code{cups-configuration} parameter} non-negative-integer reload-timeout
11656Specifies the amount of time to wait for job completion before
11657restarting the scheduler.
11658
11659Defaults to @samp{30}.
11660@end deftypevr
11661
11662@deftypevr {@code{cups-configuration} parameter} string rip-cache
11663Specifies the maximum amount of memory to use when converting documents
11664into bitmaps for a printer.
11665
11666Defaults to @samp{"128m"}.
11667@end deftypevr
11668
11669@deftypevr {@code{cups-configuration} parameter} string server-admin
11670Specifies the email address of the server administrator.
11671
11672Defaults to @samp{"root@@localhost.localdomain"}.
11673@end deftypevr
11674
11675@deftypevr {@code{cups-configuration} parameter} host-name-list-or-* server-alias
11676The ServerAlias directive is used for HTTP Host header validation when
11677clients connect to the scheduler from external interfaces. Using the
11678special name @code{*} can expose your system to known browser-based DNS
11679rebinding attacks, even when accessing sites through a firewall. If the
11680auto-discovery of alternate names does not work, we recommend listing
11681each alternate name with a ServerAlias directive instead of using
11682@code{*}.
11683
11684Defaults to @samp{*}.
11685@end deftypevr
11686
11687@deftypevr {@code{cups-configuration} parameter} string server-name
11688Specifies the fully-qualified host name of the server.
11689
11690Defaults to @samp{"localhost"}.
11691@end deftypevr
11692
11693@deftypevr {@code{cups-configuration} parameter} server-tokens server-tokens
11694Specifies what information is included in the Server header of HTTP
11695responses. @code{None} disables the Server header. @code{ProductOnly}
11696reports @code{CUPS}. @code{Major} reports @code{CUPS 2}. @code{Minor}
11697reports @code{CUPS 2.0}. @code{Minimal} reports @code{CUPS 2.0.0}.
11698@code{OS} reports @code{CUPS 2.0.0 (@var{uname})} where @var{uname} is
11699the output of the @code{uname} command. @code{Full} reports @code{CUPS
117002.0.0 (@var{uname}) IPP/2.0}.
11701
11702Defaults to @samp{Minimal}.
11703@end deftypevr
11704
11705@deftypevr {@code{cups-configuration} parameter} string set-env
11706Set the specified environment variable to be passed to child processes.
11707
11708Defaults to @samp{"variable value"}.
11709@end deftypevr
11710
11711@deftypevr {@code{cups-configuration} parameter} multiline-string-list ssl-listen
11712Listens on the specified interfaces for encrypted connections. Valid
11713values are of the form @var{address}:@var{port}, where @var{address} is
11714either an IPv6 address enclosed in brackets, an IPv4 address, or
11715@code{*} to indicate all addresses.
11716
11717Defaults to @samp{()}.
11718@end deftypevr
11719
11720@deftypevr {@code{cups-configuration} parameter} ssl-options ssl-options
11721Sets encryption options. By default, CUPS only supports encryption
11722using TLS v1.0 or higher using known secure cipher suites. The
11723@code{AllowRC4} option enables the 128-bit RC4 cipher suites, which are
11724required for some older clients that do not implement newer ones. The
11725@code{AllowSSL3} option enables SSL v3.0, which is required for some
11726older clients that do not support TLS v1.0.
11727
11728Defaults to @samp{()}.
11729@end deftypevr
11730
11731@deftypevr {@code{cups-configuration} parameter} boolean strict-conformance?
11732Specifies whether the scheduler requires clients to strictly adhere to
11733the IPP specifications.
11734
11735Defaults to @samp{#f}.
11736@end deftypevr
11737
11738@deftypevr {@code{cups-configuration} parameter} non-negative-integer timeout
11739Specifies the HTTP request timeout, in seconds.
11740
11741Defaults to @samp{300}.
11742
11743@end deftypevr
11744
11745@deftypevr {@code{cups-configuration} parameter} boolean web-interface?
11746Specifies whether the web interface is enabled.
11747
11748Defaults to @samp{#f}.
11749@end deftypevr
11750
11751At this point you're probably thinking ``oh dear, Guix manual, I like
11752you but you can stop already with the configuration options''. Indeed.
11753However, one more point: it could be that you have an existing
11754@code{cupsd.conf} that you want to use. In that case, you can pass an
11755@code{opaque-cups-configuration} as the configuration of a
11756@code{cups-service-type}.
11757
11758Available @code{opaque-cups-configuration} fields are:
11759
11760@deftypevr {@code{opaque-cups-configuration} parameter} package cups
11761The CUPS package.
11762@end deftypevr
11763
11764@deftypevr {@code{opaque-cups-configuration} parameter} string cupsd.conf
11765The contents of the @code{cupsd.conf}, as a string.
11766@end deftypevr
11767
11768@deftypevr {@code{opaque-cups-configuration} parameter} string cups-files.conf
11769The contents of the @code{cups-files.conf} file, as a string.
11770@end deftypevr
11771
11772For example, if your @code{cupsd.conf} and @code{cups-files.conf} are in
11773strings of the same name, you could instantiate a CUPS service like
11774this:
11775
11776@example
11777(service cups-service-type
11778 (opaque-cups-configuration
11779 (cupsd.conf cupsd.conf)
11780 (cups-files.conf cups-files.conf)))
11781@end example
11782
11783
fe1a39d3
LC
11784@node Desktop Services
11785@subsubsection Desktop Services
aa4ed923 11786
fe1a39d3
LC
11787The @code{(gnu services desktop)} module provides services that are
11788usually useful in the context of a ``desktop'' setup---that is, on a
11789machine running a graphical display server, possibly with graphical user
7a2413e4
AW
11790interfaces, etc. It also defines services that provide specific desktop
11791environments like GNOME and XFCE.
aa4ed923 11792
4467be21
LC
11793To simplify things, the module defines a variable containing the set of
11794services that users typically expect on a machine with a graphical
11795environment and networking:
11796
11797@defvr {Scheme Variable} %desktop-services
11798This is a list of services that builds upon @var{%base-services} and
1068f26b 11799adds or adjusts services for a typical ``desktop'' setup.
4467be21
LC
11800
11801In particular, it adds a graphical login manager (@pxref{X Window,
063c6082 11802@code{slim-service}}), screen lockers, a network management tool
4110fbc6 11803(@pxref{Networking Services, @code{network-manager-service-type}}), energy and color
063c6082
AW
11804management services, the @code{elogind} login and seat manager, the
11805Polkit privilege service, the GeoClue location service, the
11806AccountsService daemon that allows authorized users change system
11807passwords, an NTP client (@pxref{Networking Services}), the Avahi
11808daemon, and has the name service switch service configured to be able to
11809use @code{nss-mdns} (@pxref{Name Service Switch, mDNS}).
4467be21
LC
11810@end defvr
11811
11812The @var{%desktop-services} variable can be used as the @code{services}
11813field of an @code{operating-system} declaration (@pxref{operating-system
11814Reference, @code{services}}).
11815
7a2413e4
AW
11816Additionally, the @code{gnome-desktop-service} and
11817@code{xfce-desktop-service} procedures can add GNOME and/or XFCE to a
11818system. To ``add GNOME'' means that system-level services like the
11819backlight adjustment helpers and the power management utilities are
11820added to the system, extending @code{polkit} and @code{dbus}
11821appropriately, allowing GNOME to operate with elevated privileges on a
11822limited number of special-purpose system interfaces. Additionally,
11823adding a service made by @code{gnome-desktop-service} adds the GNOME
11824metapackage to the system profile. Likewise, adding the XFCE service
11825not only adds the @code{xfce} metapackage to the system profile, but it
11826also gives the Thunar file manager the ability to open a ``root-mode''
11827file management window, if the user authenticates using the
11828administrator's password via the standard polkit graphical interface.
11829
11830@deffn {Scheme Procedure} gnome-desktop-service
11831Return a service that adds the @code{gnome} package to the system
11832profile, and extends polkit with the actions from
11833@code{gnome-settings-daemon}.
11834@end deffn
11835
11836@deffn {Scheme Procedure} xfce-desktop-service
11837Return a service that adds the @code{xfce} package to the system profile,
5741e3e5 11838and extends polkit with the ability for @code{thunar} to manipulate the
7a2413e4
AW
11839file system as root from within a user session, after the user has
11840authenticated with the administrator's password.
11841@end deffn
11842
11843Because the GNOME and XFCE desktop services pull in so many packages,
11844the default @code{%desktop-services} variable doesn't include either of
11845them by default. To add GNOME or XFCE, just @code{cons} them onto
11846@code{%desktop-services} in the @code{services} field of your
11847@code{operating-system}:
11848
11849@example
11850(use-modules (gnu))
11851(use-service-modules desktop)
11852(operating-system
11853 ...
11854 ;; cons* adds items to the list given as its last argument.
11855 (services (cons* (gnome-desktop-service)
11856 (xfce-desktop-service)
11857 %desktop-services))
11858 ...)
11859@end example
11860
11861These desktop environments will then be available as options in the
11862graphical login window.
11863
11864The actual service definitions included in @code{%desktop-services} and
11865provided by @code{(gnu services dbus)} and @code{(gnu services desktop)}
11866are described below.
4467be21 11867
0adfe95a 11868@deffn {Scheme Procedure} dbus-service [#:dbus @var{dbus}] [#:services '()]
fe1a39d3
LC
11869Return a service that runs the ``system bus'', using @var{dbus}, with
11870support for @var{services}.
aa4ed923 11871
fe1a39d3
LC
11872@uref{http://dbus.freedesktop.org/, D-Bus} is an inter-process communication
11873facility. Its system bus is used to allow system services to communicate
1068f26b 11874and to be notified of system-wide events.
aa4ed923 11875
fe1a39d3
LC
11876@var{services} must be a list of packages that provide an
11877@file{etc/dbus-1/system.d} directory containing additional D-Bus configuration
11878and policy files. For example, to allow avahi-daemon to use the system bus,
11879@var{services} must be equal to @code{(list avahi)}.
aa4ed923
AK
11880@end deffn
11881
0adfe95a 11882@deffn {Scheme Procedure} elogind-service [#:config @var{config}]
4650a77e 11883Return a service that runs the @code{elogind} login and
acc2ab65 11884seat management daemon. @uref{https://github.com/elogind/elogind,
4650a77e
AW
11885Elogind} exposes a D-Bus interface that can be used to know which users
11886are logged in, know what kind of sessions they have open, suspend the
11887system, inhibit system suspend, reboot the system, and other tasks.
11888
11889Elogind handles most system-level power events for a computer, for
11890example suspending the system when a lid is closed, or shutting it down
11891when the power button is pressed.
11892
11893The @var{config} keyword argument specifies the configuration for
1068f26b 11894elogind, and should be the result of an @code{(elogind-configuration
4650a77e
AW
11895(@var{parameter} @var{value})...)} invocation. Available parameters and
11896their default values are:
11897
11898@table @code
11899@item kill-user-processes?
11900@code{#f}
11901@item kill-only-users
11902@code{()}
11903@item kill-exclude-users
11904@code{("root")}
11905@item inhibit-delay-max-seconds
11906@code{5}
11907@item handle-power-key
11908@code{poweroff}
11909@item handle-suspend-key
11910@code{suspend}
11911@item handle-hibernate-key
11912@code{hibernate}
11913@item handle-lid-switch
11914@code{suspend}
11915@item handle-lid-switch-docked
11916@code{ignore}
11917@item power-key-ignore-inhibited?
11918@code{#f}
11919@item suspend-key-ignore-inhibited?
11920@code{#f}
11921@item hibernate-key-ignore-inhibited?
11922@code{#f}
11923@item lid-switch-ignore-inhibited?
11924@code{#t}
11925@item holdoff-timeout-seconds
11926@code{30}
11927@item idle-action
11928@code{ignore}
11929@item idle-action-seconds
11930@code{(* 30 60)}
11931@item runtime-directory-size-percent
11932@code{10}
11933@item runtime-directory-size
11934@code{#f}
11935@item remove-ipc?
11936@code{#t}
11937@item suspend-state
11938@code{("mem" "standby" "freeze")}
11939@item suspend-mode
11940@code{()}
11941@item hibernate-state
11942@code{("disk")}
11943@item hibernate-mode
11944@code{("platform" "shutdown")}
11945@item hybrid-sleep-state
11946@code{("disk")}
11947@item hybrid-sleep-mode
11948@code{("suspend" "platform" "shutdown")}
11949@end table
11950@end deffn
11951
063c6082
AW
11952@deffn {Scheme Procedure} accountsservice-service @
11953 [#:accountsservice @var{accountsservice}]
11954Return a service that runs AccountsService, a system service that can
11955list available accounts, change their passwords, and so on.
11956AccountsService integrates with PolicyKit to enable unprivileged users
11957to acquire the capability to modify their system configuration.
11958@uref{https://www.freedesktop.org/wiki/Software/AccountsService/, the
11959accountsservice web site} for more information.
11960
11961The @var{accountsservice} keyword argument is the @code{accountsservice}
11962package to expose as a service.
11963@end deffn
11964
be1c2c54 11965@deffn {Scheme Procedure} polkit-service @
4650a77e 11966 [#:polkit @var{polkit}]
222e3319
LC
11967Return a service that runs the
11968@uref{http://www.freedesktop.org/wiki/Software/polkit/, Polkit privilege
11969management service}, which allows system administrators to grant access to
11970privileged operations in a structured way. By querying the Polkit service, a
11971privileged system component can know when it should grant additional
11972capabilities to ordinary users. For example, an ordinary user can be granted
11973the capability to suspend the system if the user is logged in locally.
4650a77e
AW
11974@end deffn
11975
be1c2c54 11976@deffn {Scheme Procedure} upower-service [#:upower @var{upower}] @
be234128
AW
11977 [#:watts-up-pro? #f] @
11978 [#:poll-batteries? #t] @
11979 [#:ignore-lid? #f] @
11980 [#:use-percentage-for-policy? #f] @
11981 [#:percentage-low 10] @
11982 [#:percentage-critical 3] @
11983 [#:percentage-action 2] @
11984 [#:time-low 1200] @
11985 [#:time-critical 300] @
11986 [#:time-action 120] @
11987 [#:critical-power-action 'hybrid-sleep]
11988Return a service that runs @uref{http://upower.freedesktop.org/,
11989@command{upowerd}}, a system-wide monitor for power consumption and battery
11990levels, with the given configuration settings. It implements the
11991@code{org.freedesktop.UPower} D-Bus interface, and is notably used by
11992GNOME.
11993@end deffn
11994
2b9e0a94
LC
11995@deffn {Scheme Procedure} udisks-service [#:udisks @var{udisks}]
11996Return a service for @uref{http://udisks.freedesktop.org/docs/latest/,
11997UDisks}, a @dfn{disk management} daemon that provides user interfaces with
11998notifications and ways to mount/unmount disks. Programs that talk to UDisks
11999include the @command{udisksctl} command, part of UDisks, and GNOME Disks.
12000@end deffn
12001
be1c2c54 12002@deffn {Scheme Procedure} colord-service [#:colord @var{colord}]
7ce597ff
AW
12003Return a service that runs @command{colord}, a system service with a D-Bus
12004interface to manage the color profiles of input and output devices such as
12005screens and scanners. It is notably used by the GNOME Color Manager graphical
12006tool. See @uref{http://www.freedesktop.org/software/colord/, the colord web
12007site} for more information.
12008@end deffn
12009
cee32ee4 12010@deffn {Scheme Procedure} geoclue-application name [#:allowed? #t] [#:system? #f] [#:users '()]
1068f26b 12011Return a configuration allowing an application to access GeoClue
cee32ee4
AW
12012location data. @var{name} is the Desktop ID of the application, without
12013the @code{.desktop} part. If @var{allowed?} is true, the application
12014will have access to location information by default. The boolean
1068f26b 12015@var{system?} value indicates whether an application is a system component
cee32ee4
AW
12016or not. Finally @var{users} is a list of UIDs of all users for which
12017this application is allowed location info access. An empty users list
12018means that all users are allowed.
12019@end deffn
12020
12021@defvr {Scheme Variable} %standard-geoclue-applications
12022The standard list of well-known GeoClue application configurations,
1068f26b
AE
12023granting authority to the GNOME date-and-time utility to ask for the
12024current location in order to set the time zone, and allowing the
12025IceCat and Epiphany web browsers to request location information.
12026IceCat and Epiphany both query the user before allowing a web page to
cee32ee4
AW
12027know the user's location.
12028@end defvr
12029
be1c2c54 12030@deffn {Scheme Procedure} geoclue-service [#:colord @var{colord}] @
cee32ee4
AW
12031 [#:whitelist '()] @
12032 [#:wifi-geolocation-url "https://location.services.mozilla.com/v1/geolocate?key=geoclue"] @
12033 [#:submit-data? #f]
12034 [#:wifi-submission-url "https://location.services.mozilla.com/v1/submit?key=geoclue"] @
12035 [#:submission-nick "geoclue"] @
12036 [#:applications %standard-geoclue-applications]
12037Return a service that runs the GeoClue location service. This service
12038provides a D-Bus interface to allow applications to request access to a
12039user's physical location, and optionally to add information to online
12040location databases. See
12041@uref{https://wiki.freedesktop.org/www/Software/GeoClue/, the GeoClue
12042web site} for more information.
12043@end deffn
12044
b9f67d6d
MC
12045@deffn {Scheme Procedure} bluetooth-service [#:bluez @var{bluez}] @
12046 [@w{#:auto-enable? #f}]
12047Return a service that runs the @command{bluetoothd} daemon, which
12048manages all the Bluetooth devices and provides a number of D-Bus
12049interfaces. When AUTO-ENABLE? is true, the bluetooth controller is
12050powered automatically at boot, which can be useful when using a
12051bluetooth keyboard or mouse.
922e21f4
SB
12052
12053Users need to be in the @code{lp} group to access the D-Bus service.
12054@end deffn
12055
105369a4
DT
12056@node Database Services
12057@subsubsection Database Services
12058
e32171ee
JD
12059@cindex database
12060@cindex SQL
6575183b 12061The @code{(gnu services databases)} module provides the following services.
105369a4 12062
be1c2c54 12063@deffn {Scheme Procedure} postgresql-service [#:postgresql postgresql] @
2d3d5cc5 12064 [#:config-file] [#:data-directory ``/var/lib/postgresql/data''] @
e05b780a 12065 [#:port 5432] [#:locale ``en_US.utf8'']
105369a4
DT
12066Return a service that runs @var{postgresql}, the PostgreSQL database
12067server.
12068
e05b780a
CB
12069The PostgreSQL daemon loads its runtime configuration from @var{config-file},
12070creates a database cluster with @var{locale} as the default
12071locale, stored in @var{data-directory}. It then listens on @var{port}.
105369a4 12072@end deffn
fe1a39d3 12073
6575183b
SB
12074@deffn {Scheme Procedure} mysql-service [#:config (mysql-configuration)]
12075Return a service that runs @command{mysqld}, the MySQL or MariaDB
12076database server.
12077
12078The optional @var{config} argument specifies the configuration for
c940b8e6 12079@command{mysqld}, which should be a @code{<mysql-configuration>} object.
6575183b
SB
12080@end deffn
12081
12082@deftp {Data Type} mysql-configuration
12083Data type representing the configuration of @var{mysql-service}.
12084
12085@table @asis
12086@item @code{mysql} (default: @var{mariadb})
12087Package object of the MySQL database server, can be either @var{mariadb}
12088or @var{mysql}.
12089
7414de0a 12090For MySQL, a temporary root password will be displayed at activation time.
6575183b 12091For MariaDB, the root password is empty.
4b41febf
CB
12092
12093@item @code{port} (default: @code{3306})
12094TCP port on which the database server listens for incoming connections.
6575183b
SB
12095@end table
12096@end deftp
12097
119fdd0d
CB
12098@defvr {Scheme Variable} memcached-service-type
12099This is the service type for the @uref{https://memcached.org/,
12100Memcached} service, which provides a distributed in memory cache. The
12101value for the service type is a @code{memcached-configuration} object.
12102@end defvr
12103
12104@example
12105(service memcached-service-type)
12106@end example
12107
12108@deftp {Data Type} memcached-configuration
12109Data type representing the configuration of memcached.
12110
12111@table @asis
12112@item @code{memcached} (default: @code{memcached})
12113The Memcached package to use.
12114
12115@item @code{interfaces} (default: @code{'("0.0.0.0")})
12116Network interfaces on which to listen.
12117
12118@item @code{tcp-port} (default: @code{11211})
12119Port on which to accept connections on,
12120
12121@item @code{udp-port} (default: @code{11211})
12122Port on which to accept UDP connections on, a value of 0 will disable
12123listening on a UDP socket.
12124
12125@item @code{additional-options} (default: @code{'()})
12126Additional command line options to pass to @code{memcached}.
12127@end table
12128@end deftp
12129
5266ff71
CB
12130@defvr {Scheme Variable} mongodb-service-type
12131This is the service type for @uref{https://www.mongodb.com/, MongoDB}.
12132The value for the service type is a @code{mongodb-configuration} object.
12133@end defvr
12134
12135@example
12136(service mongodb-service-type)
12137@end example
12138
12139@deftp {Data Type} mongodb-configuration
12140Data type representing the configuration of mongodb.
12141
12142@table @asis
12143@item @code{mongodb} (default: @code{mongodb})
12144The MongoDB package to use.
12145
12146@item @code{config-file} (default: @code{%default-mongodb-configuration-file})
12147The configuration file for MongoDB.
12148
12149@item @code{data-directory} (default: @code{"/var/lib/mongodb"})
12150This value is used to create the directory, so that it exists and is
12151owned by the mongodb user. It should match the data-directory which
12152MongoDB is configured to use through the configuration file.
12153@end table
12154@end deftp
12155
67cadaca
CB
12156@defvr {Scheme Variable} redis-service-type
12157This is the service type for the @uref{https://redis.io/, Redis}
12158key/value store, whose value is a @code{redis-configuration} object.
12159@end defvr
12160
12161@deftp {Data Type} redis-configuration
12162Data type representing the configuration of redis.
12163
12164@table @asis
12165@item @code{redis} (default: @code{redis})
12166The Redis package to use.
12167
12168@item @code{bind} (default: @code{"127.0.0.1"})
12169Network interface on which to listen.
12170
12171@item @code{port} (default: @code{6379})
12172Port on which to accept connections on, a value of 0 will disable
9fc221b5 12173listening on a TCP socket.
67cadaca
CB
12174
12175@item @code{working-directory} (default: @code{"/var/lib/redis"})
12176Directory in which to store the database and related files.
12177@end table
12178@end deftp
12179
d8c18af8
AW
12180@node Mail Services
12181@subsubsection Mail Services
12182
e32171ee
JD
12183@cindex mail
12184@cindex email
d8c18af8 12185The @code{(gnu services mail)} module provides Guix service definitions
f88371e8
SB
12186for email services: IMAP, POP3, and LMTP servers, as well as mail
12187transport agents (MTAs). Lots of acronyms! These services are detailed
12188in the subsections below.
d8c18af8 12189
f88371e8 12190@subsubheading Dovecot Service
d8c18af8
AW
12191
12192@deffn {Scheme Procedure} dovecot-service [#:config (dovecot-configuration)]
12193Return a service that runs the Dovecot IMAP/POP3/LMTP mail server.
12194@end deffn
12195
1068f26b 12196By default, Dovecot does not need much configuration; the default
d8c18af8
AW
12197configuration object created by @code{(dovecot-configuration)} will
12198suffice if your mail is delivered to @code{~/Maildir}. A self-signed
12199certificate will be generated for TLS-protected connections, though
12200Dovecot will also listen on cleartext ports by default. There are a
1068f26b 12201number of options, though, which mail administrators might need to change,
d8c18af8
AW
12202and as is the case with other services, Guix allows the system
12203administrator to specify these parameters via a uniform Scheme interface.
12204
12205For example, to specify that mail is located at @code{maildir~/.mail},
12206one would instantiate the Dovecot service like this:
12207
12208@example
12209(dovecot-service #:config
12210 (dovecot-configuration
12211 (mail-location "maildir:~/.mail")))
12212@end example
12213
12214The available configuration parameters follow. Each parameter
12215definition is preceded by its type; for example, @samp{string-list foo}
12216indicates that the @code{foo} parameter should be specified as a list of
12217strings. There is also a way to specify the configuration as a string,
12218if you have an old @code{dovecot.conf} file that you want to port over
12219from some other system; see the end for more details.
12220
12221@c The following documentation was initially generated by
12222@c (generate-documentation) in (gnu services mail). Manually maintained
12223@c documentation is better, so we shouldn't hesitate to edit below as
12224@c needed. However if the change you want to make to this documentation
12225@c can be done in an automated way, it's probably easier to change
12226@c (generate-documentation) than to make it below and have to deal with
12227@c the churn as dovecot updates.
12228
12229Available @code{dovecot-configuration} fields are:
12230
12231@deftypevr {@code{dovecot-configuration} parameter} package dovecot
12232The dovecot package.
12233@end deftypevr
12234
12235@deftypevr {@code{dovecot-configuration} parameter} comma-separated-string-list listen
1068f26b
AE
12236A list of IPs or hosts where to listen for connections. @samp{*}
12237listens on all IPv4 interfaces, @samp{::} listens on all IPv6
d8c18af8
AW
12238interfaces. If you want to specify non-default ports or anything more
12239complex, customize the address and port fields of the
12240@samp{inet-listener} of the specific services you are interested in.
12241@end deftypevr
12242
12243@deftypevr {@code{dovecot-configuration} parameter} protocol-configuration-list protocols
12244List of protocols we want to serve. Available protocols include
12245@samp{imap}, @samp{pop3}, and @samp{lmtp}.
12246
12247Available @code{protocol-configuration} fields are:
12248
12249@deftypevr {@code{protocol-configuration} parameter} string name
12250The name of the protocol.
12251@end deftypevr
12252
12253@deftypevr {@code{protocol-configuration} parameter} string auth-socket-path
1068f26b 12254UNIX socket path to the master authentication server to find users.
d8c18af8 12255This is used by imap (for shared users) and lda.
1068f26b 12256It defaults to @samp{"/var/run/dovecot/auth-userdb"}.
d8c18af8
AW
12257@end deftypevr
12258
12259@deftypevr {@code{protocol-configuration} parameter} space-separated-string-list mail-plugins
12260Space separated list of plugins to load.
12261@end deftypevr
12262
12263@deftypevr {@code{protocol-configuration} parameter} non-negative-integer mail-max-userip-connections
12264Maximum number of IMAP connections allowed for a user from each IP
12265address. NOTE: The username is compared case-sensitively.
12266Defaults to @samp{10}.
12267@end deftypevr
12268
12269@end deftypevr
12270
12271@deftypevr {@code{dovecot-configuration} parameter} service-configuration-list services
12272List of services to enable. Available services include @samp{imap},
12273@samp{imap-login}, @samp{pop3}, @samp{pop3-login}, @samp{auth}, and
12274@samp{lmtp}.
12275
12276Available @code{service-configuration} fields are:
12277
12278@deftypevr {@code{service-configuration} parameter} string kind
12279The service kind. Valid values include @code{director},
12280@code{imap-login}, @code{pop3-login}, @code{lmtp}, @code{imap},
12281@code{pop3}, @code{auth}, @code{auth-worker}, @code{dict},
12282@code{tcpwrap}, @code{quota-warning}, or anything else.
12283@end deftypevr
12284
12285@deftypevr {@code{service-configuration} parameter} listener-configuration-list listeners
1068f26b 12286Listeners for the service. A listener is either a
d8c18af8
AW
12287@code{unix-listener-configuration}, a @code{fifo-listener-configuration}, or
12288an @code{inet-listener-configuration}.
12289Defaults to @samp{()}.
12290
12291Available @code{unix-listener-configuration} fields are:
12292
eba56076
CL
12293@deftypevr {@code{unix-listener-configuration} parameter} string path
12294Path to the file, relative to @code{base-dir} field. This is also used as
12295the section name.
d8c18af8
AW
12296@end deftypevr
12297
12298@deftypevr {@code{unix-listener-configuration} parameter} string mode
12299The access mode for the socket.
12300Defaults to @samp{"0600"}.
12301@end deftypevr
12302
12303@deftypevr {@code{unix-listener-configuration} parameter} string user
f9b9a033 12304The user to own the socket.
d8c18af8
AW
12305Defaults to @samp{""}.
12306@end deftypevr
12307
12308@deftypevr {@code{unix-listener-configuration} parameter} string group
12309The group to own the socket.
12310Defaults to @samp{""}.
12311@end deftypevr
12312
12313
12314Available @code{fifo-listener-configuration} fields are:
12315
eba56076
CL
12316@deftypevr {@code{fifo-listener-configuration} parameter} string path
12317Path to the file, relative to @code{base-dir} field. This is also used as
12318the section name.
d8c18af8
AW
12319@end deftypevr
12320
12321@deftypevr {@code{fifo-listener-configuration} parameter} string mode
12322The access mode for the socket.
12323Defaults to @samp{"0600"}.
12324@end deftypevr
12325
12326@deftypevr {@code{fifo-listener-configuration} parameter} string user
f9b9a033 12327The user to own the socket.
d8c18af8
AW
12328Defaults to @samp{""}.
12329@end deftypevr
12330
12331@deftypevr {@code{fifo-listener-configuration} parameter} string group
12332The group to own the socket.
12333Defaults to @samp{""}.
12334@end deftypevr
12335
12336
12337Available @code{inet-listener-configuration} fields are:
12338
12339@deftypevr {@code{inet-listener-configuration} parameter} string protocol
12340The protocol to listen for.
12341@end deftypevr
12342
12343@deftypevr {@code{inet-listener-configuration} parameter} string address
12344The address on which to listen, or empty for all addresses.
12345Defaults to @samp{""}.
12346@end deftypevr
12347
12348@deftypevr {@code{inet-listener-configuration} parameter} non-negative-integer port
12349The port on which to listen.
12350@end deftypevr
12351
12352@deftypevr {@code{inet-listener-configuration} parameter} boolean ssl?
12353Whether to use SSL for this service; @samp{yes}, @samp{no}, or
12354@samp{required}.
12355Defaults to @samp{#t}.
12356@end deftypevr
12357
12358@end deftypevr
12359
12360@deftypevr {@code{service-configuration} parameter} non-negative-integer service-count
12361Number of connections to handle before starting a new process.
12362Typically the only useful values are 0 (unlimited) or 1. 1 is more
12363secure, but 0 is faster. <doc/wiki/LoginProcess.txt>.
12364Defaults to @samp{1}.
12365@end deftypevr
12366
12367@deftypevr {@code{service-configuration} parameter} non-negative-integer process-min-avail
12368Number of processes to always keep waiting for more connections.
12369Defaults to @samp{0}.
12370@end deftypevr
12371
12372@deftypevr {@code{service-configuration} parameter} non-negative-integer vsz-limit
12373If you set @samp{service-count 0}, you probably need to grow
12374this.
12375Defaults to @samp{256000000}.
12376@end deftypevr
12377
12378@end deftypevr
12379
12380@deftypevr {@code{dovecot-configuration} parameter} dict-configuration dict
12381Dict configuration, as created by the @code{dict-configuration}
12382constructor.
12383
12384Available @code{dict-configuration} fields are:
12385
12386@deftypevr {@code{dict-configuration} parameter} free-form-fields entries
12387A list of key-value pairs that this dict should hold.
12388Defaults to @samp{()}.
12389@end deftypevr
12390
12391@end deftypevr
12392
12393@deftypevr {@code{dovecot-configuration} parameter} passdb-configuration-list passdbs
1068f26b 12394A list of passdb configurations, each one created by the
d8c18af8
AW
12395@code{passdb-configuration} constructor.
12396
12397Available @code{passdb-configuration} fields are:
12398
12399@deftypevr {@code{passdb-configuration} parameter} string driver
12400The driver that the passdb should use. Valid values include
12401@samp{pam}, @samp{passwd}, @samp{shadow}, @samp{bsdauth}, and
12402@samp{static}.
12403Defaults to @samp{"pam"}.
12404@end deftypevr
12405
deb36188
CL
12406@deftypevr {@code{passdb-configuration} parameter} space-separated-string-list args
12407Space separated list of arguments to the passdb driver.
12408Defaults to @samp{""}.
d8c18af8
AW
12409@end deftypevr
12410
12411@end deftypevr
12412
12413@deftypevr {@code{dovecot-configuration} parameter} userdb-configuration-list userdbs
12414List of userdb configurations, each one created by the
12415@code{userdb-configuration} constructor.
12416
12417Available @code{userdb-configuration} fields are:
12418
12419@deftypevr {@code{userdb-configuration} parameter} string driver
12420The driver that the userdb should use. Valid values include
12421@samp{passwd} and @samp{static}.
12422Defaults to @samp{"passwd"}.
12423@end deftypevr
12424
deb36188
CL
12425@deftypevr {@code{userdb-configuration} parameter} space-separated-string-list args
12426Space separated list of arguments to the userdb driver.
12427Defaults to @samp{""}.
d8c18af8
AW
12428@end deftypevr
12429
12430@deftypevr {@code{userdb-configuration} parameter} free-form-args override-fields
12431Override fields from passwd.
12432Defaults to @samp{()}.
12433@end deftypevr
12434
12435@end deftypevr
12436
12437@deftypevr {@code{dovecot-configuration} parameter} plugin-configuration plugin-configuration
12438Plug-in configuration, created by the @code{plugin-configuration}
12439constructor.
12440@end deftypevr
12441
12442@deftypevr {@code{dovecot-configuration} parameter} list-of-namespace-configuration namespaces
12443List of namespaces. Each item in the list is created by the
12444@code{namespace-configuration} constructor.
12445
12446Available @code{namespace-configuration} fields are:
12447
12448@deftypevr {@code{namespace-configuration} parameter} string name
12449Name for this namespace.
12450@end deftypevr
12451
12452@deftypevr {@code{namespace-configuration} parameter} string type
12453Namespace type: @samp{private}, @samp{shared} or @samp{public}.
12454Defaults to @samp{"private"}.
12455@end deftypevr
12456
12457@deftypevr {@code{namespace-configuration} parameter} string separator
12458Hierarchy separator to use. You should use the same separator for
12459all namespaces or some clients get confused. @samp{/} is usually a good
12460one. The default however depends on the underlying mail storage
12461format.
12462Defaults to @samp{""}.
12463@end deftypevr
12464
12465@deftypevr {@code{namespace-configuration} parameter} string prefix
12466Prefix required to access this namespace. This needs to be
12467different for all namespaces. For example @samp{Public/}.
12468Defaults to @samp{""}.
12469@end deftypevr
12470
12471@deftypevr {@code{namespace-configuration} parameter} string location
1068f26b 12472Physical location of the mailbox. This is in the same format as
d8c18af8
AW
12473mail_location, which is also the default for it.
12474Defaults to @samp{""}.
12475@end deftypevr
12476
12477@deftypevr {@code{namespace-configuration} parameter} boolean inbox?
12478There can be only one INBOX, and this setting defines which
12479namespace has it.
12480Defaults to @samp{#f}.
12481@end deftypevr
12482
12483@deftypevr {@code{namespace-configuration} parameter} boolean hidden?
12484If namespace is hidden, it's not advertised to clients via NAMESPACE
12485extension. You'll most likely also want to set @samp{list? #f}. This is mostly
12486useful when converting from another server with different namespaces
12487which you want to deprecate but still keep working. For example you can
12488create hidden namespaces with prefixes @samp{~/mail/}, @samp{~%u/mail/}
12489and @samp{mail/}.
12490Defaults to @samp{#f}.
12491@end deftypevr
12492
12493@deftypevr {@code{namespace-configuration} parameter} boolean list?
1068f26b
AE
12494Show the mailboxes under this namespace with the LIST command. This
12495makes the namespace visible for clients that do not support the NAMESPACE
d8c18af8
AW
12496extension. The special @code{children} value lists child mailboxes, but
12497hides the namespace prefix.
12498Defaults to @samp{#t}.
12499@end deftypevr
12500
12501@deftypevr {@code{namespace-configuration} parameter} boolean subscriptions?
12502Namespace handles its own subscriptions. If set to @code{#f}, the
12503parent namespace handles them. The empty prefix should always have this
1068f26b 12504as @code{#t}).
d8c18af8
AW
12505Defaults to @samp{#t}.
12506@end deftypevr
12507
12508@deftypevr {@code{namespace-configuration} parameter} mailbox-configuration-list mailboxes
12509List of predefined mailboxes in this namespace.
12510Defaults to @samp{()}.
12511
12512Available @code{mailbox-configuration} fields are:
12513
12514@deftypevr {@code{mailbox-configuration} parameter} string name
12515Name for this mailbox.
12516@end deftypevr
12517
12518@deftypevr {@code{mailbox-configuration} parameter} string auto
12519@samp{create} will automatically create this mailbox.
12520@samp{subscribe} will both create and subscribe to the mailbox.
12521Defaults to @samp{"no"}.
12522@end deftypevr
12523
12524@deftypevr {@code{mailbox-configuration} parameter} space-separated-string-list special-use
12525List of IMAP @code{SPECIAL-USE} attributes as specified by RFC 6154.
12526Valid values are @code{\All}, @code{\Archive}, @code{\Drafts},
12527@code{\Flagged}, @code{\Junk}, @code{\Sent}, and @code{\Trash}.
12528Defaults to @samp{()}.
12529@end deftypevr
12530
12531@end deftypevr
12532
12533@end deftypevr
12534
12535@deftypevr {@code{dovecot-configuration} parameter} file-name base-dir
12536Base directory where to store runtime data.
12537Defaults to @samp{"/var/run/dovecot/"}.
12538@end deftypevr
12539
12540@deftypevr {@code{dovecot-configuration} parameter} string login-greeting
12541Greeting message for clients.
12542Defaults to @samp{"Dovecot ready."}.
12543@end deftypevr
12544
12545@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-trusted-networks
12546List of trusted network ranges. Connections from these IPs are
12547allowed to override their IP addresses and ports (for logging and for
12548authentication checks). @samp{disable-plaintext-auth} is also ignored
1068f26b 12549for these networks. Typically you would specify your IMAP proxy servers
d8c18af8
AW
12550here.
12551Defaults to @samp{()}.
12552@end deftypevr
12553
12554@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-access-sockets
12555List of login access check sockets (e.g. tcpwrap).
12556Defaults to @samp{()}.
12557@end deftypevr
12558
12559@deftypevr {@code{dovecot-configuration} parameter} boolean verbose-proctitle?
12560Show more verbose process titles (in ps). Currently shows user name
1068f26b
AE
12561and IP address. Useful for seeing who is actually using the IMAP
12562processes (e.g. shared mailboxes or if the same uid is used for multiple
d8c18af8
AW
12563accounts).
12564Defaults to @samp{#f}.
12565@end deftypevr
12566
12567@deftypevr {@code{dovecot-configuration} parameter} boolean shutdown-clients?
12568Should all processes be killed when Dovecot master process shuts down.
12569Setting this to @code{#f} means that Dovecot can be upgraded without
12570forcing existing client connections to close (although that could also
1068f26b 12571be a problem if the upgrade is e.g. due to a security fix).
d8c18af8
AW
12572Defaults to @samp{#t}.
12573@end deftypevr
12574
12575@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer doveadm-worker-count
12576If non-zero, run mail commands via this many connections to doveadm
12577server, instead of running them directly in the same process.
12578Defaults to @samp{0}.
12579@end deftypevr
12580
12581@deftypevr {@code{dovecot-configuration} parameter} string doveadm-socket-path
12582UNIX socket or host:port used for connecting to doveadm server.
12583Defaults to @samp{"doveadm-server"}.
12584@end deftypevr
12585
12586@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list import-environment
12587List of environment variables that are preserved on Dovecot startup
12588and passed down to all of its child processes. You can also give
12589key=value pairs to always set specific settings.
12590@end deftypevr
12591
12592@deftypevr {@code{dovecot-configuration} parameter} boolean disable-plaintext-auth?
12593Disable LOGIN command and all other plaintext authentications unless
12594SSL/TLS is used (LOGINDISABLED capability). Note that if the remote IP
12595matches the local IP (i.e. you're connecting from the same computer),
12596the connection is considered secure and plaintext authentication is
12597allowed. See also ssl=required setting.
12598Defaults to @samp{#t}.
12599@end deftypevr
12600
12601@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer auth-cache-size
12602Authentication cache size (e.g. @samp{#e10e6}). 0 means it's disabled.
12603Note that bsdauth, PAM and vpopmail require @samp{cache-key} to be set
12604for caching to be used.
12605Defaults to @samp{0}.
12606@end deftypevr
12607
12608@deftypevr {@code{dovecot-configuration} parameter} string auth-cache-ttl
12609Time to live for cached data. After TTL expires the cached record
12610is no longer used, *except* if the main database lookup returns internal
12611failure. We also try to handle password changes automatically: If
12612user's previous authentication was successful, but this one wasn't, the
12613cache isn't used. For now this works only with plaintext
12614authentication.
12615Defaults to @samp{"1 hour"}.
12616@end deftypevr
12617
12618@deftypevr {@code{dovecot-configuration} parameter} string auth-cache-negative-ttl
12619TTL for negative hits (user not found, password mismatch).
126200 disables caching them completely.
12621Defaults to @samp{"1 hour"}.
12622@end deftypevr
12623
12624@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list auth-realms
12625List of realms for SASL authentication mechanisms that need them.
12626You can leave it empty if you don't want to support multiple realms.
12627Many clients simply use the first one listed here, so keep the default
12628realm first.
12629Defaults to @samp{()}.
12630@end deftypevr
12631
12632@deftypevr {@code{dovecot-configuration} parameter} string auth-default-realm
12633Default realm/domain to use if none was specified. This is used for
12634both SASL realms and appending @@domain to username in plaintext
12635logins.
12636Defaults to @samp{""}.
12637@end deftypevr
12638
12639@deftypevr {@code{dovecot-configuration} parameter} string auth-username-chars
12640List of allowed characters in username. If the user-given username
12641contains a character not listed in here, the login automatically fails.
12642This is just an extra check to make sure user can't exploit any
12643potential quote escaping vulnerabilities with SQL/LDAP databases. If
12644you want to allow all characters, set this value to empty.
12645Defaults to @samp{"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@@"}.
12646@end deftypevr
12647
12648@deftypevr {@code{dovecot-configuration} parameter} string auth-username-translation
12649Username character translations before it's looked up from
12650databases. The value contains series of from -> to characters. For
12651example @samp{#@@/@@} means that @samp{#} and @samp{/} characters are
12652translated to @samp{@@}.
12653Defaults to @samp{""}.
12654@end deftypevr
12655
12656@deftypevr {@code{dovecot-configuration} parameter} string auth-username-format
12657Username formatting before it's looked up from databases. You can
12658use the standard variables here, e.g. %Lu would lowercase the username,
12659%n would drop away the domain if it was given, or @samp{%n-AT-%d} would
12660change the @samp{@@} into @samp{-AT-}. This translation is done after
12661@samp{auth-username-translation} changes.
12662Defaults to @samp{"%Lu"}.
12663@end deftypevr
12664
12665@deftypevr {@code{dovecot-configuration} parameter} string auth-master-user-separator
12666If you want to allow master users to log in by specifying the master
12667username within the normal username string (i.e. not using SASL
12668mechanism's support for it), you can specify the separator character
12669here. The format is then <username><separator><master username>.
12670UW-IMAP uses @samp{*} as the separator, so that could be a good
12671choice.
12672Defaults to @samp{""}.
12673@end deftypevr
12674
12675@deftypevr {@code{dovecot-configuration} parameter} string auth-anonymous-username
12676Username to use for users logging in with ANONYMOUS SASL
12677mechanism.
12678Defaults to @samp{"anonymous"}.
12679@end deftypevr
12680
12681@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer auth-worker-max-count
12682Maximum number of dovecot-auth worker processes. They're used to
12683execute blocking passdb and userdb queries (e.g. MySQL and PAM).
12684They're automatically created and destroyed as needed.
12685Defaults to @samp{30}.
12686@end deftypevr
12687
12688@deftypevr {@code{dovecot-configuration} parameter} string auth-gssapi-hostname
12689Host name to use in GSSAPI principal names. The default is to use
12690the name returned by gethostname(). Use @samp{$ALL} (with quotes) to
12691allow all keytab entries.
12692Defaults to @samp{""}.
12693@end deftypevr
12694
12695@deftypevr {@code{dovecot-configuration} parameter} string auth-krb5-keytab
12696Kerberos keytab to use for the GSSAPI mechanism. Will use the
8b499030 12697system default (usually @file{/etc/krb5.keytab}) if not specified. You may
d8c18af8
AW
12698need to change the auth service to run as root to be able to read this
12699file.
12700Defaults to @samp{""}.
12701@end deftypevr
12702
12703@deftypevr {@code{dovecot-configuration} parameter} boolean auth-use-winbind?
12704Do NTLM and GSS-SPNEGO authentication using Samba's winbind daemon
12705and @samp{ntlm-auth} helper.
12706<doc/wiki/Authentication/Mechanisms/Winbind.txt>.
12707Defaults to @samp{#f}.
12708@end deftypevr
12709
12710@deftypevr {@code{dovecot-configuration} parameter} file-name auth-winbind-helper-path
12711Path for Samba's @samp{ntlm-auth} helper binary.
12712Defaults to @samp{"/usr/bin/ntlm_auth"}.
12713@end deftypevr
12714
12715@deftypevr {@code{dovecot-configuration} parameter} string auth-failure-delay
12716Time to delay before replying to failed authentications.
12717Defaults to @samp{"2 secs"}.
12718@end deftypevr
12719
12720@deftypevr {@code{dovecot-configuration} parameter} boolean auth-ssl-require-client-cert?
12721Require a valid SSL client certificate or the authentication
12722fails.
12723Defaults to @samp{#f}.
12724@end deftypevr
12725
12726@deftypevr {@code{dovecot-configuration} parameter} boolean auth-ssl-username-from-cert?
12727Take the username from client's SSL certificate, using
12728@code{X509_NAME_get_text_by_NID()} which returns the subject's DN's
12729CommonName.
12730Defaults to @samp{#f}.
12731@end deftypevr
12732
12733@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list auth-mechanisms
12734List of wanted authentication mechanisms. Supported mechanisms are:
12735@samp{plain}, @samp{login}, @samp{digest-md5}, @samp{cram-md5},
12736@samp{ntlm}, @samp{rpa}, @samp{apop}, @samp{anonymous}, @samp{gssapi},
12737@samp{otp}, @samp{skey}, and @samp{gss-spnego}. NOTE: See also
12738@samp{disable-plaintext-auth} setting.
12739@end deftypevr
12740
12741@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list director-servers
12742List of IPs or hostnames to all director servers, including ourself.
12743Ports can be specified as ip:port. The default port is the same as what
12744director service's @samp{inet-listener} is using.
12745Defaults to @samp{()}.
12746@end deftypevr
12747
12748@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list director-mail-servers
12749List of IPs or hostnames to all backend mail servers. Ranges are
12750allowed too, like 10.0.0.10-10.0.0.30.
12751Defaults to @samp{()}.
12752@end deftypevr
12753
12754@deftypevr {@code{dovecot-configuration} parameter} string director-user-expire
12755How long to redirect users to a specific server after it no longer
12756has any connections.
12757Defaults to @samp{"15 min"}.
12758@end deftypevr
12759
12760@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer director-doveadm-port
12761TCP/IP port that accepts doveadm connections (instead of director
12762connections) If you enable this, you'll also need to add
12763@samp{inet-listener} for the port.
12764Defaults to @samp{0}.
12765@end deftypevr
12766
12767@deftypevr {@code{dovecot-configuration} parameter} string director-username-hash
12768How the username is translated before being hashed. Useful values
12769include %Ln if user can log in with or without @@domain, %Ld if mailboxes
12770are shared within domain.
12771Defaults to @samp{"%Lu"}.
12772@end deftypevr
12773
12774@deftypevr {@code{dovecot-configuration} parameter} string log-path
12775Log file to use for error messages. @samp{syslog} logs to syslog,
12776@samp{/dev/stderr} logs to stderr.
12777Defaults to @samp{"syslog"}.
12778@end deftypevr
12779
12780@deftypevr {@code{dovecot-configuration} parameter} string info-log-path
12781Log file to use for informational messages. Defaults to
12782@samp{log-path}.
12783Defaults to @samp{""}.
12784@end deftypevr
12785
12786@deftypevr {@code{dovecot-configuration} parameter} string debug-log-path
12787Log file to use for debug messages. Defaults to
12788@samp{info-log-path}.
12789Defaults to @samp{""}.
12790@end deftypevr
12791
12792@deftypevr {@code{dovecot-configuration} parameter} string syslog-facility
12793Syslog facility to use if you're logging to syslog. Usually if you
12794don't want to use @samp{mail}, you'll use local0..local7. Also other
12795standard facilities are supported.
12796Defaults to @samp{"mail"}.
12797@end deftypevr
12798
12799@deftypevr {@code{dovecot-configuration} parameter} boolean auth-verbose?
12800Log unsuccessful authentication attempts and the reasons why they
12801failed.
12802Defaults to @samp{#f}.
12803@end deftypevr
12804
12805@deftypevr {@code{dovecot-configuration} parameter} boolean auth-verbose-passwords?
12806In case of password mismatches, log the attempted password. Valid
12807values are no, plain and sha1. sha1 can be useful for detecting brute
12808force password attempts vs. user simply trying the same password over
12809and over again. You can also truncate the value to n chars by appending
12810":n" (e.g. sha1:6).
12811Defaults to @samp{#f}.
12812@end deftypevr
12813
12814@deftypevr {@code{dovecot-configuration} parameter} boolean auth-debug?
12815Even more verbose logging for debugging purposes. Shows for example
12816SQL queries.
12817Defaults to @samp{#f}.
12818@end deftypevr
12819
12820@deftypevr {@code{dovecot-configuration} parameter} boolean auth-debug-passwords?
12821In case of password mismatches, log the passwords and used scheme so
12822the problem can be debugged. Enabling this also enables
12823@samp{auth-debug}.
12824Defaults to @samp{#f}.
12825@end deftypevr
12826
12827@deftypevr {@code{dovecot-configuration} parameter} boolean mail-debug?
12828Enable mail process debugging. This can help you figure out why
12829Dovecot isn't finding your mails.
12830Defaults to @samp{#f}.
12831@end deftypevr
12832
12833@deftypevr {@code{dovecot-configuration} parameter} boolean verbose-ssl?
12834Show protocol level SSL errors.
12835Defaults to @samp{#f}.
12836@end deftypevr
12837
12838@deftypevr {@code{dovecot-configuration} parameter} string log-timestamp
12839Prefix for each line written to log file. % codes are in
12840strftime(3) format.
12841Defaults to @samp{"\"%b %d %H:%M:%S \""}.
12842@end deftypevr
12843
12844@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-log-format-elements
12845List of elements we want to log. The elements which have a
12846non-empty variable value are joined together to form a comma-separated
12847string.
12848@end deftypevr
12849
12850@deftypevr {@code{dovecot-configuration} parameter} string login-log-format
12851Login log format. %s contains @samp{login-log-format-elements}
12852string, %$ contains the data we want to log.
12853Defaults to @samp{"%$: %s"}.
12854@end deftypevr
12855
12856@deftypevr {@code{dovecot-configuration} parameter} string mail-log-prefix
12857Log prefix for mail processes. See doc/wiki/Variables.txt for list
12858of possible variables you can use.
12859Defaults to @samp{"\"%s(%u): \""}.
12860@end deftypevr
12861
12862@deftypevr {@code{dovecot-configuration} parameter} string deliver-log-format
12863Format to use for logging mail deliveries. You can use variables:
12864@table @code
12865@item %$
12866Delivery status message (e.g. @samp{saved to INBOX})
12867@item %m
12868Message-ID
12869@item %s
12870Subject
12871@item %f
12872From address
12873@item %p
12874Physical size
12875@item %w
12876Virtual size.
12877@end table
12878Defaults to @samp{"msgid=%m: %$"}.
12879@end deftypevr
12880
12881@deftypevr {@code{dovecot-configuration} parameter} string mail-location
12882Location for users' mailboxes. The default is empty, which means
12883that Dovecot tries to find the mailboxes automatically. This won't work
12884if the user doesn't yet have any mail, so you should explicitly tell
12885Dovecot the full location.
12886
12887If you're using mbox, giving a path to the INBOX
12888file (e.g. /var/mail/%u) isn't enough. You'll also need to tell Dovecot
12889where the other mailboxes are kept. This is called the "root mail
12890directory", and it must be the first path given in the
12891@samp{mail-location} setting.
12892
12893There are a few special variables you can use, eg.:
12894
12895@table @samp
12896@item %u
12897username
12898@item %n
12899user part in user@@domain, same as %u if there's no domain
12900@item %d
12901domain part in user@@domain, empty if there's no domain
12902@item %h
12903home director
12904@end table
12905
12906See doc/wiki/Variables.txt for full list. Some examples:
12907@table @samp
12908@item maildir:~/Maildir
12909@item mbox:~/mail:INBOX=/var/mail/%u
12910@item mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%
12911@end table
12912Defaults to @samp{""}.
12913@end deftypevr
12914
12915@deftypevr {@code{dovecot-configuration} parameter} string mail-uid
12916System user and group used to access mails. If you use multiple,
12917userdb can override these by returning uid or gid fields. You can use
12918either numbers or names. <doc/wiki/UserIds.txt>.
12919Defaults to @samp{""}.
12920@end deftypevr
12921
12922@deftypevr {@code{dovecot-configuration} parameter} string mail-gid
12923
12924Defaults to @samp{""}.
12925@end deftypevr
12926
12927@deftypevr {@code{dovecot-configuration} parameter} string mail-privileged-group
12928Group to enable temporarily for privileged operations. Currently
12929this is used only with INBOX when either its initial creation or
12930dotlocking fails. Typically this is set to "mail" to give access to
12931/var/mail.
12932Defaults to @samp{""}.
12933@end deftypevr
12934
12935@deftypevr {@code{dovecot-configuration} parameter} string mail-access-groups
12936Grant access to these supplementary groups for mail processes.
12937Typically these are used to set up access to shared mailboxes. Note
12938that it may be dangerous to set these if users can create
12939symlinks (e.g. if "mail" group is set here, ln -s /var/mail ~/mail/var
12940could allow a user to delete others' mailboxes, or ln -s
12941/secret/shared/box ~/mail/mybox would allow reading it).
12942Defaults to @samp{""}.
12943@end deftypevr
12944
12945@deftypevr {@code{dovecot-configuration} parameter} boolean mail-full-filesystem-access?
8f65585b 12946Allow full file system access to clients. There's no access checks
d8c18af8
AW
12947other than what the operating system does for the active UID/GID. It
12948works with both maildir and mboxes, allowing you to prefix mailboxes
12949names with e.g. /path/ or ~user/.
12950Defaults to @samp{#f}.
12951@end deftypevr
12952
12953@deftypevr {@code{dovecot-configuration} parameter} boolean mmap-disable?
12954Don't use mmap() at all. This is required if you store indexes to
8f65585b 12955shared file systems (NFS or clustered file system).
d8c18af8
AW
12956Defaults to @samp{#f}.
12957@end deftypevr
12958
12959@deftypevr {@code{dovecot-configuration} parameter} boolean dotlock-use-excl?
12960Rely on @samp{O_EXCL} to work when creating dotlock files. NFS
12961supports @samp{O_EXCL} since version 3, so this should be safe to use
12962nowadays by default.
12963Defaults to @samp{#t}.
12964@end deftypevr
12965
12966@deftypevr {@code{dovecot-configuration} parameter} string mail-fsync
12967When to use fsync() or fdatasync() calls:
12968@table @code
12969@item optimized
12970Whenever necessary to avoid losing important data
12971@item always
12972Useful with e.g. NFS when write()s are delayed
12973@item never
12974Never use it (best performance, but crashes can lose data).
12975@end table
12976Defaults to @samp{"optimized"}.
12977@end deftypevr
12978
12979@deftypevr {@code{dovecot-configuration} parameter} boolean mail-nfs-storage?
12980Mail storage exists in NFS. Set this to yes to make Dovecot flush
12981NFS caches whenever needed. If you're using only a single mail server
12982this isn't needed.
12983Defaults to @samp{#f}.
12984@end deftypevr
12985
12986@deftypevr {@code{dovecot-configuration} parameter} boolean mail-nfs-index?
12987Mail index files also exist in NFS. Setting this to yes requires
12988@samp{mmap-disable? #t} and @samp{fsync-disable? #f}.
12989Defaults to @samp{#f}.
12990@end deftypevr
12991
12992@deftypevr {@code{dovecot-configuration} parameter} string lock-method
12993Locking method for index files. Alternatives are fcntl, flock and
12994dotlock. Dotlocking uses some tricks which may create more disk I/O
12995than other locking methods. NFS users: flock doesn't work, remember to
12996change @samp{mmap-disable}.
12997Defaults to @samp{"fcntl"}.
12998@end deftypevr
12999
13000@deftypevr {@code{dovecot-configuration} parameter} file-name mail-temp-dir
13001Directory in which LDA/LMTP temporarily stores incoming mails >128
13002kB.
13003Defaults to @samp{"/tmp"}.
13004@end deftypevr
13005
13006@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer first-valid-uid
13007Valid UID range for users. This is mostly to make sure that users can't
13008log in as daemons or other system users. Note that denying root logins is
13009hardcoded to dovecot binary and can't be done even if @samp{first-valid-uid}
13010is set to 0.
13011Defaults to @samp{500}.
13012@end deftypevr
13013
13014@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer last-valid-uid
13015
13016Defaults to @samp{0}.
13017@end deftypevr
13018
13019@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer first-valid-gid
13020Valid GID range for users. Users having non-valid GID as primary group ID
13021aren't allowed to log in. If user belongs to supplementary groups with
13022non-valid GIDs, those groups are not set.
13023Defaults to @samp{1}.
13024@end deftypevr
13025
13026@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer last-valid-gid
13027
13028Defaults to @samp{0}.
13029@end deftypevr
13030
13031@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-max-keyword-length
13032Maximum allowed length for mail keyword name. It's only forced when
13033trying to create new keywords.
13034Defaults to @samp{50}.
13035@end deftypevr
13036
13037@deftypevr {@code{dovecot-configuration} parameter} colon-separated-file-name-list valid-chroot-dirs
13038List of directories under which chrooting is allowed for mail
13039processes (i.e. /var/mail will allow chrooting to /var/mail/foo/bar
13040too). This setting doesn't affect @samp{login-chroot}
13041@samp{mail-chroot} or auth chroot settings. If this setting is empty,
13042"/./" in home dirs are ignored. WARNING: Never add directories here
13043which local users can modify, that may lead to root exploit. Usually
13044this should be done only if you don't allow shell access for users.
13045<doc/wiki/Chrooting.txt>.
13046Defaults to @samp{()}.
13047@end deftypevr
13048
13049@deftypevr {@code{dovecot-configuration} parameter} string mail-chroot
13050Default chroot directory for mail processes. This can be overridden
13051for specific users in user database by giving /./ in user's home
13052directory (e.g. /home/./user chroots into /home). Note that usually
13053there is no real need to do chrooting, Dovecot doesn't allow users to
13054access files outside their mail directory anyway. If your home
13055directories are prefixed with the chroot directory, append "/." to
13056@samp{mail-chroot}. <doc/wiki/Chrooting.txt>.
13057Defaults to @samp{""}.
13058@end deftypevr
13059
13060@deftypevr {@code{dovecot-configuration} parameter} file-name auth-socket-path
13061UNIX socket path to master authentication server to find users.
13062This is used by imap (for shared users) and lda.
13063Defaults to @samp{"/var/run/dovecot/auth-userdb"}.
13064@end deftypevr
13065
13066@deftypevr {@code{dovecot-configuration} parameter} file-name mail-plugin-dir
13067Directory where to look up mail plugins.
13068Defaults to @samp{"/usr/lib/dovecot"}.
13069@end deftypevr
13070
13071@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mail-plugins
13072List of plugins to load for all services. Plugins specific to IMAP,
13073LDA, etc. are added to this list in their own .conf files.
13074Defaults to @samp{()}.
13075@end deftypevr
13076
13077@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-cache-min-mail-count
13078The minimum number of mails in a mailbox before updates are done to
13079cache file. This allows optimizing Dovecot's behavior to do less disk
13080writes at the cost of more disk reads.
13081Defaults to @samp{0}.
13082@end deftypevr
13083
13084@deftypevr {@code{dovecot-configuration} parameter} string mailbox-idle-check-interval
13085When IDLE command is running, mailbox is checked once in a while to
13086see if there are any new mails or other changes. This setting defines
13087the minimum time to wait between those checks. Dovecot can also use
13088dnotify, inotify and kqueue to find out immediately when changes
13089occur.
13090Defaults to @samp{"30 secs"}.
13091@end deftypevr
13092
13093@deftypevr {@code{dovecot-configuration} parameter} boolean mail-save-crlf?
13094Save mails with CR+LF instead of plain LF. This makes sending those
13095mails take less CPU, especially with sendfile() syscall with Linux and
13096FreeBSD. But it also creates a bit more disk I/O which may just make it
13097slower. Also note that if other software reads the mboxes/maildirs,
13098they may handle the extra CRs wrong and cause problems.
13099Defaults to @samp{#f}.
13100@end deftypevr
13101
13102@deftypevr {@code{dovecot-configuration} parameter} boolean maildir-stat-dirs?
13103By default LIST command returns all entries in maildir beginning
13104with a dot. Enabling this option makes Dovecot return only entries
13105which are directories. This is done by stat()ing each entry, so it
13106causes more disk I/O.
13107 (For systems setting struct @samp{dirent->d_type} this check is free
13108and it's done always regardless of this setting).
13109Defaults to @samp{#f}.
13110@end deftypevr
13111
13112@deftypevr {@code{dovecot-configuration} parameter} boolean maildir-copy-with-hardlinks?
13113When copying a message, do it with hard links whenever possible.
13114This makes the performance much better, and it's unlikely to have any
13115side effects.
13116Defaults to @samp{#t}.
13117@end deftypevr
13118
13119@deftypevr {@code{dovecot-configuration} parameter} boolean maildir-very-dirty-syncs?
13120Assume Dovecot is the only MUA accessing Maildir: Scan cur/
13121directory only when its mtime changes unexpectedly or when we can't find
13122the mail otherwise.
13123Defaults to @samp{#f}.
13124@end deftypevr
13125
13126@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mbox-read-locks
13127Which locking methods to use for locking mbox. There are four
13128available:
13129
13130@table @code
13131@item dotlock
13132Create <mailbox>.lock file. This is the oldest and most NFS-safe
13133solution. If you want to use /var/mail/ like directory, the users will
13134need write access to that directory.
13135@item dotlock-try
13136Same as dotlock, but if it fails because of permissions or because there
13137isn't enough disk space, just skip it.
13138@item fcntl
13139Use this if possible. Works with NFS too if lockd is used.
13140@item flock
a01ad638 13141May not exist in all systems. Doesn't work with NFS.
d8c18af8
AW
13142@item lockf
13143May not exist in all systems. Doesn't work with NFS.
13144@end table
13145
13146You can use multiple locking methods; if you do the order they're declared
13147in is important to avoid deadlocks if other MTAs/MUAs are using multiple
13148locking methods as well. Some operating systems don't allow using some of
13149them simultaneously.
13150@end deftypevr
13151
13152@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mbox-write-locks
13153
13154@end deftypevr
13155
13156@deftypevr {@code{dovecot-configuration} parameter} string mbox-lock-timeout
13157Maximum time to wait for lock (all of them) before aborting.
13158Defaults to @samp{"5 mins"}.
13159@end deftypevr
13160
13161@deftypevr {@code{dovecot-configuration} parameter} string mbox-dotlock-change-timeout
13162If dotlock exists but the mailbox isn't modified in any way,
13163override the lock file after this much time.
13164Defaults to @samp{"2 mins"}.
13165@end deftypevr
13166
13167@deftypevr {@code{dovecot-configuration} parameter} boolean mbox-dirty-syncs?
13168When mbox changes unexpectedly we have to fully read it to find out
13169what changed. If the mbox is large this can take a long time. Since
13170the change is usually just a newly appended mail, it'd be faster to
13171simply read the new mails. If this setting is enabled, Dovecot does
13172this but still safely fallbacks to re-reading the whole mbox file
13173whenever something in mbox isn't how it's expected to be. The only real
13174downside to this setting is that if some other MUA changes message
13175flags, Dovecot doesn't notice it immediately. Note that a full sync is
13176done with SELECT, EXAMINE, EXPUNGE and CHECK commands.
13177Defaults to @samp{#t}.
13178@end deftypevr
13179
13180@deftypevr {@code{dovecot-configuration} parameter} boolean mbox-very-dirty-syncs?
13181Like @samp{mbox-dirty-syncs}, but don't do full syncs even with SELECT,
13182EXAMINE, EXPUNGE or CHECK commands. If this is set,
13183@samp{mbox-dirty-syncs} is ignored.
13184Defaults to @samp{#f}.
13185@end deftypevr
13186
13187@deftypevr {@code{dovecot-configuration} parameter} boolean mbox-lazy-writes?
13188Delay writing mbox headers until doing a full write sync (EXPUNGE
13189and CHECK commands and when closing the mailbox). This is especially
13190useful for POP3 where clients often delete all mails. The downside is
13191that our changes aren't immediately visible to other MUAs.
13192Defaults to @samp{#t}.
13193@end deftypevr
13194
13195@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mbox-min-index-size
13196If mbox size is smaller than this (e.g. 100k), don't write index
13197files. If an index file already exists it's still read, just not
13198updated.
13199Defaults to @samp{0}.
13200@end deftypevr
13201
13202@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mdbox-rotate-size
13203Maximum dbox file size until it's rotated.
13204Defaults to @samp{2000000}.
13205@end deftypevr
13206
13207@deftypevr {@code{dovecot-configuration} parameter} string mdbox-rotate-interval
13208Maximum dbox file age until it's rotated. Typically in days. Day
13209begins from midnight, so 1d = today, 2d = yesterday, etc. 0 = check
13210disabled.
13211Defaults to @samp{"1d"}.
13212@end deftypevr
13213
13214@deftypevr {@code{dovecot-configuration} parameter} boolean mdbox-preallocate-space?
13215When creating new mdbox files, immediately preallocate their size to
13216@samp{mdbox-rotate-size}. This setting currently works only in Linux
8f65585b 13217with some file systems (ext4, xfs).
d8c18af8
AW
13218Defaults to @samp{#f}.
13219@end deftypevr
13220
13221@deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-dir
13222sdbox and mdbox support saving mail attachments to external files,
13223which also allows single instance storage for them. Other backends
13224don't support this for now.
13225
13226WARNING: This feature hasn't been tested much yet. Use at your own risk.
13227
13228Directory root where to store mail attachments. Disabled, if empty.
13229Defaults to @samp{""}.
13230@end deftypevr
13231
13232@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-attachment-min-size
13233Attachments smaller than this aren't saved externally. It's also
13234possible to write a plugin to disable saving specific attachments
13235externally.
13236Defaults to @samp{128000}.
13237@end deftypevr
13238
13239@deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-fs
8f65585b 13240File system backend to use for saving attachments:
d8c18af8
AW
13241@table @code
13242@item posix
13243No SiS done by Dovecot (but this might help FS's own deduplication)
13244@item sis posix
13245SiS with immediate byte-by-byte comparison during saving
13246@item sis-queue posix
13247SiS with delayed comparison and deduplication.
13248@end table
13249Defaults to @samp{"sis posix"}.
13250@end deftypevr
13251
13252@deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-hash
13253Hash format to use in attachment filenames. You can add any text and
13254variables: @code{%@{md4@}}, @code{%@{md5@}}, @code{%@{sha1@}},
13255@code{%@{sha256@}}, @code{%@{sha512@}}, @code{%@{size@}}. Variables can be
13256truncated, e.g. @code{%@{sha256:80@}} returns only first 80 bits.
13257Defaults to @samp{"%@{sha1@}"}.
13258@end deftypevr
13259
13260@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-process-limit
13261
13262Defaults to @samp{100}.
13263@end deftypevr
13264
13265@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-client-limit
13266
13267Defaults to @samp{1000}.
13268@end deftypevr
13269
13270@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-vsz-limit
13271Default VSZ (virtual memory size) limit for service processes.
13272This is mainly intended to catch and kill processes that leak memory
13273before they eat up everything.
13274Defaults to @samp{256000000}.
13275@end deftypevr
13276
13277@deftypevr {@code{dovecot-configuration} parameter} string default-login-user
13278Login user is internally used by login processes. This is the most
13279untrusted user in Dovecot system. It shouldn't have access to anything
13280at all.
13281Defaults to @samp{"dovenull"}.
13282@end deftypevr
13283
13284@deftypevr {@code{dovecot-configuration} parameter} string default-internal-user
13285Internal user is used by unprivileged processes. It should be
13286separate from login user, so that login processes can't disturb other
13287processes.
13288Defaults to @samp{"dovecot"}.
13289@end deftypevr
13290
13291@deftypevr {@code{dovecot-configuration} parameter} string ssl?
13292SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>.
13293Defaults to @samp{"required"}.
13294@end deftypevr
13295
13296@deftypevr {@code{dovecot-configuration} parameter} string ssl-cert
13297PEM encoded X.509 SSL/TLS certificate (public key).
13298Defaults to @samp{"</etc/dovecot/default.pem"}.
13299@end deftypevr
13300
13301@deftypevr {@code{dovecot-configuration} parameter} string ssl-key
13302PEM encoded SSL/TLS private key. The key is opened before
13303dropping root privileges, so keep the key file unreadable by anyone but
13304root.
13305Defaults to @samp{"</etc/dovecot/private/default.pem"}.
13306@end deftypevr
13307
13308@deftypevr {@code{dovecot-configuration} parameter} string ssl-key-password
13309If key file is password protected, give the password here.
13310Alternatively give it when starting dovecot with -p parameter. Since
13311this file is often world-readable, you may want to place this setting
13312instead to a different.
13313Defaults to @samp{""}.
13314@end deftypevr
13315
13316@deftypevr {@code{dovecot-configuration} parameter} string ssl-ca
13317PEM encoded trusted certificate authority. Set this only if you
13318intend to use @samp{ssl-verify-client-cert? #t}. The file should
13319contain the CA certificate(s) followed by the matching
13320CRL(s). (e.g. @samp{ssl-ca </etc/ssl/certs/ca.pem}).
13321Defaults to @samp{""}.
13322@end deftypevr
13323
13324@deftypevr {@code{dovecot-configuration} parameter} boolean ssl-require-crl?
13325Require that CRL check succeeds for client certificates.
13326Defaults to @samp{#t}.
13327@end deftypevr
13328
13329@deftypevr {@code{dovecot-configuration} parameter} boolean ssl-verify-client-cert?
13330Request client to send a certificate. If you also want to require
13331it, set @samp{auth-ssl-require-client-cert? #t} in auth section.
13332Defaults to @samp{#f}.
13333@end deftypevr
13334
13335@deftypevr {@code{dovecot-configuration} parameter} string ssl-cert-username-field
13336Which field from certificate to use for username. commonName and
13337x500UniqueIdentifier are the usual choices. You'll also need to set
13338@samp{auth-ssl-username-from-cert? #t}.
13339Defaults to @samp{"commonName"}.
13340@end deftypevr
13341
13342@deftypevr {@code{dovecot-configuration} parameter} hours ssl-parameters-regenerate
13343How often to regenerate the SSL parameters file. Generation is
13344quite CPU intensive operation. The value is in hours, 0 disables
13345regeneration entirely.
13346Defaults to @samp{168}.
13347@end deftypevr
13348
13349@deftypevr {@code{dovecot-configuration} parameter} string ssl-protocols
13350SSL protocols to use.
13351Defaults to @samp{"!SSLv2"}.
13352@end deftypevr
13353
13354@deftypevr {@code{dovecot-configuration} parameter} string ssl-cipher-list
13355SSL ciphers to use.
13356Defaults to @samp{"ALL:!LOW:!SSLv2:!EXP:!aNULL"}.
13357@end deftypevr
13358
13359@deftypevr {@code{dovecot-configuration} parameter} string ssl-crypto-device
13360SSL crypto device to use, for valid values run "openssl engine".
13361Defaults to @samp{""}.
13362@end deftypevr
13363
13364@deftypevr {@code{dovecot-configuration} parameter} string postmaster-address
13365Address to use when sending rejection mails.
66329c23
AW
13366%d expands to recipient domain.
13367Defaults to @samp{"postmaster@@%d"}.
d8c18af8
AW
13368@end deftypevr
13369
13370@deftypevr {@code{dovecot-configuration} parameter} string hostname
13371Hostname to use in various parts of sent mails (e.g. in Message-Id)
13372and in LMTP replies. Default is the system's real hostname@@domain.
13373Defaults to @samp{""}.
13374@end deftypevr
13375
13376@deftypevr {@code{dovecot-configuration} parameter} boolean quota-full-tempfail?
13377If user is over quota, return with temporary failure instead of
13378bouncing the mail.
13379Defaults to @samp{#f}.
13380@end deftypevr
13381
13382@deftypevr {@code{dovecot-configuration} parameter} file-name sendmail-path
13383Binary to use for sending mails.
13384Defaults to @samp{"/usr/sbin/sendmail"}.
13385@end deftypevr
13386
13387@deftypevr {@code{dovecot-configuration} parameter} string submission-host
13388If non-empty, send mails via this SMTP host[:port] instead of
13389sendmail.
13390Defaults to @samp{""}.
13391@end deftypevr
13392
13393@deftypevr {@code{dovecot-configuration} parameter} string rejection-subject
13394Subject: header to use for rejection mails. You can use the same
13395variables as for @samp{rejection-reason} below.
13396Defaults to @samp{"Rejected: %s"}.
13397@end deftypevr
13398
13399@deftypevr {@code{dovecot-configuration} parameter} string rejection-reason
13400Human readable error message for rejection mails. You can use
13401variables:
13402
13403@table @code
13404@item %n
13405CRLF
13406@item %r
13407reason
13408@item %s
13409original subject
13410@item %t
13411recipient
13412@end table
13413Defaults to @samp{"Your message to <%t> was automatically rejected:%n%r"}.
13414@end deftypevr
13415
13416@deftypevr {@code{dovecot-configuration} parameter} string recipient-delimiter
13417Delimiter character between local-part and detail in email
13418address.
13419Defaults to @samp{"+"}.
13420@end deftypevr
13421
13422@deftypevr {@code{dovecot-configuration} parameter} string lda-original-recipient-header
13423Header where the original recipient address (SMTP's RCPT TO:
13424address) is taken from if not available elsewhere. With dovecot-lda -a
13425parameter overrides this. A commonly used header for this is
13426X-Original-To.
13427Defaults to @samp{""}.
13428@end deftypevr
13429
13430@deftypevr {@code{dovecot-configuration} parameter} boolean lda-mailbox-autocreate?
13431Should saving a mail to a nonexistent mailbox automatically create
13432it?.
13433Defaults to @samp{#f}.
13434@end deftypevr
13435
13436@deftypevr {@code{dovecot-configuration} parameter} boolean lda-mailbox-autosubscribe?
13437Should automatically created mailboxes be also automatically
13438subscribed?.
13439Defaults to @samp{#f}.
13440@end deftypevr
13441
13442@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer imap-max-line-length
13443Maximum IMAP command line length. Some clients generate very long
13444command lines with huge mailboxes, so you may need to raise this if you
13445get "Too long argument" or "IMAP command line too large" errors
13446often.
13447Defaults to @samp{64000}.
13448@end deftypevr
13449
13450@deftypevr {@code{dovecot-configuration} parameter} string imap-logout-format
13451IMAP logout format string:
13452@table @code
13453@item %i
13454total number of bytes read from client
13455@item %o
13456total number of bytes sent to client.
13457@end table
13458Defaults to @samp{"in=%i out=%o"}.
13459@end deftypevr
13460
13461@deftypevr {@code{dovecot-configuration} parameter} string imap-capability
13462Override the IMAP CAPABILITY response. If the value begins with '+',
13463add the given capabilities on top of the defaults (e.g. +XFOO XBAR).
13464Defaults to @samp{""}.
13465@end deftypevr
13466
13467@deftypevr {@code{dovecot-configuration} parameter} string imap-idle-notify-interval
13468How long to wait between "OK Still here" notifications when client
13469is IDLEing.
13470Defaults to @samp{"2 mins"}.
13471@end deftypevr
13472
13473@deftypevr {@code{dovecot-configuration} parameter} string imap-id-send
13474ID field names and values to send to clients. Using * as the value
13475makes Dovecot use the default value. The following fields have default
13476values currently: name, version, os, os-version, support-url,
13477support-email.
13478Defaults to @samp{""}.
13479@end deftypevr
13480
13481@deftypevr {@code{dovecot-configuration} parameter} string imap-id-log
13482ID fields sent by client to log. * means everything.
13483Defaults to @samp{""}.
13484@end deftypevr
13485
13486@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list imap-client-workarounds
13487Workarounds for various client bugs:
13488
13489@table @code
13490@item delay-newmail
13491Send EXISTS/RECENT new mail notifications only when replying to NOOP and
13492CHECK commands. Some clients ignore them otherwise, for example OSX
13493Mail (<v2.1). Outlook Express breaks more badly though, without this it
13494may show user "Message no longer in server" errors. Note that OE6
13495still breaks even with this workaround if synchronization is set to
13496"Headers Only".
13497
13498@item tb-extra-mailbox-sep
13499Thunderbird gets somehow confused with LAYOUT=fs (mbox and dbox) and
13500adds extra @samp{/} suffixes to mailbox names. This option causes Dovecot to
13501ignore the extra @samp{/} instead of treating it as invalid mailbox name.
13502
13503@item tb-lsub-flags
13504Show \Noselect flags for LSUB replies with LAYOUT=fs (e.g. mbox).
13505This makes Thunderbird realize they aren't selectable and show them
13506greyed out, instead of only later giving "not selectable" popup error.
13507@end table
13508Defaults to @samp{()}.
13509@end deftypevr
13510
13511@deftypevr {@code{dovecot-configuration} parameter} string imap-urlauth-host
13512Host allowed in URLAUTH URLs sent by client. "*" allows all.
13513Defaults to @samp{""}.
13514@end deftypevr
13515
13516
13517Whew! Lots of configuration options. The nice thing about it though is
13518that GuixSD has a complete interface to Dovecot's configuration
13519language. This allows not only a nice way to declare configurations,
13520but also offers reflective capabilities as well: users can write code to
13521inspect and transform configurations from within Scheme.
13522
13523However, it could be that you just want to get a @code{dovecot.conf} up
13524and running. In that case, you can pass an
7414de0a 13525@code{opaque-dovecot-configuration} as the @code{#:config} parameter to
d8c18af8
AW
13526@code{dovecot-service}. As its name indicates, an opaque configuration
13527does not have easy reflective capabilities.
13528
13529Available @code{opaque-dovecot-configuration} fields are:
13530
13531@deftypevr {@code{opaque-dovecot-configuration} parameter} package dovecot
13532The dovecot package.
13533@end deftypevr
13534
13535@deftypevr {@code{opaque-dovecot-configuration} parameter} string string
13536The contents of the @code{dovecot.conf}, as a string.
13537@end deftypevr
13538
13539For example, if your @code{dovecot.conf} is just the empty string, you
13540could instantiate a dovecot service like this:
13541
13542@example
13543(dovecot-service #:config
13544 (opaque-dovecot-configuration
13545 (string "")))
13546@end example
13547
f88371e8
SB
13548@subsubheading OpenSMTPD Service
13549
13550@deffn {Scheme Variable} opensmtpd-service-type
13551This is the type of the @uref{https://www.opensmtpd.org, OpenSMTPD}
13552service, whose value should be an @code{opensmtpd-configuration} object
13553as in this example:
13554
13555@example
13556(service opensmtpd-service-type
13557 (opensmtpd-configuration
13558 (config-file (local-file "./my-smtpd.conf"))))
13559@end example
13560@end deffn
13561
13562@deftp {Data Type} opensmtpd-configuration
9fc221b5 13563Data type representing the configuration of opensmtpd.
f88371e8
SB
13564
13565@table @asis
13566@item @code{package} (default: @var{opensmtpd})
13567Package object of the OpenSMTPD SMTP server.
13568
13569@item @code{config-file} (default: @var{%default-opensmtpd-file})
13570File-like object of the OpenSMTPD configuration file to use. By default
13571it listens on the loopback network interface, and allows for mail from
13572users and daemons on the local machine, as well as permitting email to
13573remote servers. Run @command{man smtpd.conf} for more information.
13574
13575@end table
13576@end deftp
859e367d 13577
82ccc499
CZ
13578@subsubheading Exim Service
13579
63422bbb
CZ
13580@cindex mail transfer agent (MTA)
13581@cindex MTA (mail transfer agent)
13582@cindex SMTP
13583
82ccc499 13584@deffn {Scheme Variable} exim-service-type
63422bbb
CZ
13585This is the type of the @uref{https://exim.org, Exim} mail transfer
13586agent (MTA), whose value should be an @code{exim-configuration} object
13587as in this example:
82ccc499
CZ
13588
13589@example
13590(service exim-service-type
13591 (exim-configuration
63422bbb 13592 (config-file (local-file "./my-exim.conf"))))
82ccc499
CZ
13593@end example
13594@end deffn
13595
63422bbb
CZ
13596In order to use an @code{exim-service-type} service you must also have a
13597@code{mail-aliases-service-type} service present in your
13598@code{operating-system} (even if it has no aliases).
13599
82ccc499
CZ
13600@deftp {Data Type} exim-configuration
13601Data type representing the configuration of exim.
13602
13603@table @asis
13604@item @code{package} (default: @var{exim})
13605Package object of the Exim server.
13606
13607@item @code{config-file} (default: @code{#f})
13608File-like object of the Exim configuration file to use. If its value is
13609@code{#f} then use the default configuration file from the package
13610provided in @code{package}. The resulting configuration file is loaded
13611after setting the @code{exim_user} and @code{exim_group} configuration
13612variables.
13613
82ccc499
CZ
13614@end table
13615@end deftp
13616
63422bbb
CZ
13617@subsubheading Mail Aliases Service
13618
13619@cindex email aliases
13620@cindex aliases, for email addresses
13621
13622@deffn {Scheme Variable} mail-aliases-service-type
13623This is the type of the service which provides @code{/etc/aliases},
13624specifying how to deliver mail to users on this system.
13625
13626@example
13627(service mail-aliases-service-type
13628 '(("postmaster" "bob")
13629 ("bob" "bob@@example.com" "bob@@example2.com")))
13630@end example
13631@end deffn
13632
13633The configuration for a @code{mail-aliases-service-type} service is an
13634association list denoting how to deliver mail that comes to this
13635system. Each entry is of the form @code{(alias addresses ...)}, with
13636@code{alias} specifying the local alias and @code{addresses} specifying
13637where to deliver this user's mail.
13638
13639The aliases aren't required to exist as users on the local system. In
13640the above example, there doesn't need to be a @code{postmaster} entry in
13641the @code{operating-system}'s @code{user-accounts} in order to deliver
13642the @code{postmaster} mail to @code{bob} (which subsequently would
13643deliver mail to @code{bob@@example.com} and @code{bob@@example2.com}).
13644
78cef99b
CL
13645@node Messaging Services
13646@subsubsection Messaging Services
13647
13648@cindex messaging
13649@cindex jabber
13650@cindex XMPP
13651The @code{(gnu services messaging)} module provides Guix service
13652definitions for messaging services: currently only Prosody is supported.
13653
13654@subsubheading Prosody Service
13655
13656@deffn {Scheme Variable} prosody-service-type
13657This is the type for the @uref{http://prosody.im, Prosody XMPP
13658communication server}. Its value must be a @code{prosody-configuration}
13659record as in this example:
13660
13661@example
13662(service prosody-service-type
13663 (prosody-configuration
13664 (modules-enabled (cons "groups" %default-modules-enabled))
13665 (int-components
13666 (list
13667 (int-component-configuration
13668 (hostname "conference.example.net")
13669 (plugin "muc")
13670 (mod-muc (mod-muc-configuration)))))
13671 (virtualhosts
13672 (list
13673 (virtualhost-configuration
13674 (domain "example.net"))))))
13675@end example
13676
13677See below for details about @code{prosody-configuration}.
13678
13679@end deffn
13680
13681By default, Prosody does not need much configuration. Only one
13682@code{virtualhosts} field is needed: it specifies the domain you wish
13683Prosody to serve.
13684
13685Prosodyctl will help you generate X.509 certificates and keys:
13686
13687@example
13688prosodyctl cert request example.net
13689@end example
13690
13691The available configuration parameters follow. Each parameter
13692definition is preceded by its type; for example, @samp{string-list foo}
13693indicates that the @code{foo} parameter should be specified as a list of
13694strings. Types starting with @code{maybe-} denote parameters that won't
13695show up in @code{prosody.cfg.lua} when their value is @code{'disabled}.
13696
13697There is also a way to specify the configuration as a string, if you
13698have an old @code{prosody.cfg.lua} file that you want to port over from
13699some other system; see the end for more details.
13700
13701@c The following documentation was initially generated by
13702@c (generate-documentation) in (gnu services messaging). Manually maintained
13703@c documentation is better, so we shouldn't hesitate to edit below as
13704@c needed. However if the change you want to make to this documentation
13705@c can be done in an automated way, it's probably easier to change
13706@c (generate-documentation) than to make it below and have to deal with
13707@c the churn as Prosody updates.
13708
13709Available @code{prosody-configuration} fields are:
13710
13711@deftypevr {@code{prosody-configuration} parameter} package prosody
13712The Prosody package.
13713@end deftypevr
13714
13715@deftypevr {@code{prosody-configuration} parameter} file-name data-path
13716Location of the Prosody data storage directory. See
13717@url{http://prosody.im/doc/configure}.
13718Defaults to @samp{"/var/lib/prosody"}.
13719@end deftypevr
13720
13721@deftypevr {@code{prosody-configuration} parameter} file-name-list plugin-paths
13722Additional plugin directories. They are searched in all the specified
13723paths in order. See @url{http://prosody.im/doc/plugins_directory}.
13724Defaults to @samp{()}.
13725@end deftypevr
13726
13727@deftypevr {@code{prosody-configuration} parameter} string-list admins
13728This is a list of accounts that are admins for the server. Note that you
13729must create the accounts separately. See @url{http://prosody.im/doc/admins} and
13730@url{http://prosody.im/doc/creating_accounts}.
13731Example: @code{(admins '("user1@@example.com" "user2@@example.net"))}
13732Defaults to @samp{()}.
13733@end deftypevr
13734
13735@deftypevr {@code{prosody-configuration} parameter} boolean use-libevent?
13736Enable use of libevent for better performance under high load. See
13737@url{http://prosody.im/doc/libevent}.
13738Defaults to @samp{#f}.
13739@end deftypevr
13740
13741@deftypevr {@code{prosody-configuration} parameter} module-list modules-enabled
13742This is the list of modules Prosody will load on startup. It looks for
13743@code{mod_modulename.lua} in the plugins folder, so make sure that exists too.
13744Documentation on modules can be found at: @url{http://prosody.im/doc/modules}.
13745Defaults to @samp{%default-modules-enabled}.
13746@end deftypevr
13747
13748@deftypevr {@code{prosody-configuration} parameter} string-list modules-disabled
13749@samp{"offline"}, @samp{"c2s"} and @samp{"s2s"} are auto-loaded, but
13750should you want to disable them then add them to this list.
13751Defaults to @samp{()}.
13752@end deftypevr
13753
13754@deftypevr {@code{prosody-configuration} parameter} file-name groups-file
13755Path to a text file where the shared groups are defined. If this path is
13756empty then @samp{mod_groups} does nothing. See
13757@url{http://prosody.im/doc/modules/mod_groups}.
13758Defaults to @samp{"/var/lib/prosody/sharedgroups.txt"}.
13759@end deftypevr
13760
13761@deftypevr {@code{prosody-configuration} parameter} boolean allow-registration?
13762Disable account creation by default, for security. See
13763@url{http://prosody.im/doc/creating_accounts}.
13764Defaults to @samp{#f}.
13765@end deftypevr
13766
13767@deftypevr {@code{prosody-configuration} parameter} maybe-ssl-configuration ssl
13768These are the SSL/TLS-related settings. Most of them are disabled so to
13769use Prosody's defaults. If you do not completely understand these options, do
13770not add them to your config, it is easy to lower the security of your server
13771using them. See @url{http://prosody.im/doc/advanced_ssl_config}.
13772
13773Available @code{ssl-configuration} fields are:
13774
13775@deftypevr {@code{ssl-configuration} parameter} maybe-string protocol
13776This determines what handshake to use.
13777@end deftypevr
13778
13779@deftypevr {@code{ssl-configuration} parameter} file-name key
13780Path to your private key file, relative to @code{/etc/prosody}.
13781Defaults to @samp{"/etc/prosody/certs/key.pem"}.
13782@end deftypevr
13783
13784@deftypevr {@code{ssl-configuration} parameter} file-name certificate
13785Path to your certificate file, relative to @code{/etc/prosody}.
13786Defaults to @samp{"/etc/prosody/certs/cert.pem"}.
13787@end deftypevr
13788
13789@deftypevr {@code{ssl-configuration} parameter} file-name capath
13790Path to directory containing root certificates that you wish Prosody to
13791trust when verifying the certificates of remote servers.
13792Defaults to @samp{"/etc/ssl/certs"}.
13793@end deftypevr
13794
13795@deftypevr {@code{ssl-configuration} parameter} maybe-file-name cafile
13796Path to a file containing root certificates that you wish Prosody to trust.
13797Similar to @code{capath} but with all certificates concatenated together.
13798@end deftypevr
13799
13800@deftypevr {@code{ssl-configuration} parameter} maybe-string-list verify
13801A list of verification options (these mostly map to OpenSSL's
13802@code{set_verify()} flags).
13803@end deftypevr
13804
13805@deftypevr {@code{ssl-configuration} parameter} maybe-string-list options
13806A list of general options relating to SSL/TLS. These map to OpenSSL's
13807@code{set_options()}. For a full list of options available in LuaSec, see the
13808LuaSec source.
13809@end deftypevr
13810
13811@deftypevr {@code{ssl-configuration} parameter} maybe-non-negative-integer depth
13812How long a chain of certificate authorities to check when looking for a
13813trusted root certificate.
13814@end deftypevr
13815
13816@deftypevr {@code{ssl-configuration} parameter} maybe-string ciphers
13817An OpenSSL cipher string. This selects what ciphers Prosody will offer to
13818clients, and in what order.
13819@end deftypevr
13820
13821@deftypevr {@code{ssl-configuration} parameter} maybe-file-name dhparam
13822A path to a file containing parameters for Diffie-Hellman key exchange. You
13823can create such a file with:
13824@code{openssl dhparam -out /etc/prosody/certs/dh-2048.pem 2048}
13825@end deftypevr
13826
13827@deftypevr {@code{ssl-configuration} parameter} maybe-string curve
13828Curve for Elliptic curve Diffie-Hellman. Prosody's default is
13829@samp{"secp384r1"}.
13830@end deftypevr
13831
13832@deftypevr {@code{ssl-configuration} parameter} maybe-string-list verifyext
13833A list of "extra" verification options.
13834@end deftypevr
13835
13836@deftypevr {@code{ssl-configuration} parameter} maybe-string password
13837Password for encrypted private keys.
13838@end deftypevr
13839
13840@end deftypevr
13841
13842@deftypevr {@code{prosody-configuration} parameter} boolean c2s-require-encryption?
13843Whether to force all client-to-server connections to be encrypted or not.
13844See @url{http://prosody.im/doc/modules/mod_tls}.
13845Defaults to @samp{#f}.
13846@end deftypevr
13847
13848@deftypevr {@code{prosody-configuration} parameter} boolean s2s-require-encryption?
13849Whether to force all server-to-server connections to be encrypted or not.
13850See @url{http://prosody.im/doc/modules/mod_tls}.
13851Defaults to @samp{#f}.
13852@end deftypevr
13853
13854@deftypevr {@code{prosody-configuration} parameter} boolean s2s-secure-auth?
13855Whether to require encryption and certificate authentication. This
13856provides ideal security, but requires servers you communicate with to support
13857encryption AND present valid, trusted certificates. See
13858@url{http://prosody.im/doc/s2s#security}.
13859Defaults to @samp{#f}.
13860@end deftypevr
13861
13862@deftypevr {@code{prosody-configuration} parameter} string-list s2s-insecure-domains
13863Many servers don't support encryption or have invalid or self-signed
13864certificates. You can list domains here that will not be required to
13865authenticate using certificates. They will be authenticated using DNS. See
13866@url{http://prosody.im/doc/s2s#security}.
13867Defaults to @samp{()}.
13868@end deftypevr
13869
13870@deftypevr {@code{prosody-configuration} parameter} string-list s2s-secure-domains
13871Even if you leave @code{s2s-secure-auth?} disabled, you can still require
13872valid certificates for some domains by specifying a list here. See
13873@url{http://prosody.im/doc/s2s#security}.
13874Defaults to @samp{()}.
13875@end deftypevr
13876
13877@deftypevr {@code{prosody-configuration} parameter} string authentication
13878Select the authentication backend to use. The default provider stores
13879passwords in plaintext and uses Prosody's configured data storage to store the
13880authentication data. If you do not trust your server please see
13881@url{http://prosody.im/doc/modules/mod_auth_internal_hashed} for information
13882about using the hashed backend. See also
13883@url{http://prosody.im/doc/authentication}
13884Defaults to @samp{"internal_plain"}.
13885@end deftypevr
13886
13887@deftypevr {@code{prosody-configuration} parameter} maybe-string log
13888Set logging options. Advanced logging configuration is not yet supported
13889by the GuixSD Prosody Service. See @url{http://prosody.im/doc/logging}.
13890Defaults to @samp{"*syslog"}.
13891@end deftypevr
13892
13893@deftypevr {@code{prosody-configuration} parameter} file-name pidfile
13894File to write pid in. See @url{http://prosody.im/doc/modules/mod_posix}.
13895Defaults to @samp{"/var/run/prosody/prosody.pid"}.
13896@end deftypevr
13897
13898@deftypevr {@code{prosody-configuration} parameter} virtualhost-configuration-list virtualhosts
13899A host in Prosody is a domain on which user accounts can be created. For
13900example if you want your users to have addresses like
13901@samp{"john.smith@@example.com"} then you need to add a host
13902@samp{"example.com"}. All options in this list will apply only to this host.
13903
13904Note: the name "virtual" host is used in configuration to avoid confusion with
13905the actual physical host that Prosody is installed on. A single Prosody
13906instance can serve many domains, each one defined as a VirtualHost entry in
13907Prosody's configuration. Conversely a server that hosts a single domain would
13908have just one VirtualHost entry.
13909
13910See @url{http://prosody.im/doc/configure#virtual_host_settings}.
13911
13912Available @code{virtualhost-configuration} fields are:
13913
13914all 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{s2s-require-encryption?}, @code{s2s-secure-auth?}, @code{s2s-insecure-domains}, @code{s2s-secure-domains}, @code{authentication}, @code{log}, plus:
13915@deftypevr {@code{virtualhost-configuration} parameter} string domain
13916Domain you wish Prosody to serve.
13917@end deftypevr
13918
13919@end deftypevr
13920
13921@deftypevr {@code{prosody-configuration} parameter} int-component-configuration-list int-components
13922Components are extra services on a server which are available to clients,
13923usually on a subdomain of the main server (such as
13924@samp{"mycomponent.example.com"}). Example components might be chatroom
13925servers, user directories, or gateways to other protocols.
13926
13927Internal components are implemented with Prosody-specific plugins. To add an
13928internal component, you simply fill the hostname field, and the plugin you wish
13929to use for the component.
13930
13931See @url{http://prosody.im/doc/components}.
13932Defaults to @samp{()}.
13933
13934Available @code{int-component-configuration} fields are:
13935
13936all 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{s2s-require-encryption?}, @code{s2s-secure-auth?}, @code{s2s-insecure-domains}, @code{s2s-secure-domains}, @code{authentication}, @code{log}, plus:
13937@deftypevr {@code{int-component-configuration} parameter} string hostname
13938Hostname of the component.
13939@end deftypevr
13940
13941@deftypevr {@code{int-component-configuration} parameter} string plugin
13942Plugin you wish to use for the component.
13943@end deftypevr
13944
13945@deftypevr {@code{int-component-configuration} parameter} maybe-mod-muc-configuration mod-muc
13946Multi-user chat (MUC) is Prosody's module for allowing you to create
13947hosted chatrooms/conferences for XMPP users.
13948
13949General information on setting up and using multi-user chatrooms can be found
13950in the "Chatrooms" documentation (@url{http://prosody.im/doc/chatrooms}),
13951which you should read if you are new to XMPP chatrooms.
13952
13953See also @url{http://prosody.im/doc/modules/mod_muc}.
13954
13955Available @code{mod-muc-configuration} fields are:
13956
13957@deftypevr {@code{mod-muc-configuration} parameter} string name
13958The name to return in service discovery responses.
13959Defaults to @samp{"Prosody Chatrooms"}.
13960@end deftypevr
13961
13962@deftypevr {@code{mod-muc-configuration} parameter} string-or-boolean restrict-room-creation
13963If @samp{#t}, this will only allow admins to create new chatrooms.
13964Otherwise anyone can create a room. The value @samp{"local"} restricts room
13965creation to users on the service's parent domain. E.g. @samp{user@@example.com}
13966can create rooms on @samp{rooms.example.com}. The value @samp{"admin"}
13967restricts to service administrators only.
13968Defaults to @samp{#f}.
13969@end deftypevr
13970
13971@deftypevr {@code{mod-muc-configuration} parameter} non-negative-integer max-history-messages
13972Maximum number of history messages that will be sent to the member that has
13973just joined the room.
13974Defaults to @samp{20}.
13975@end deftypevr
13976
13977@end deftypevr
13978
13979@end deftypevr
13980
13981@deftypevr {@code{prosody-configuration} parameter} ext-component-configuration-list ext-components
13982External components use XEP-0114, which most standalone components
13983support. To add an external component, you simply fill the hostname field. See
13984@url{http://prosody.im/doc/components}.
13985Defaults to @samp{()}.
13986
13987Available @code{ext-component-configuration} fields are:
13988
13989all 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{s2s-require-encryption?}, @code{s2s-secure-auth?}, @code{s2s-insecure-domains}, @code{s2s-secure-domains}, @code{authentication}, @code{log}, plus:
13990@deftypevr {@code{ext-component-configuration} parameter} string component-secret
13991Password which the component will use to log in.
13992@end deftypevr
13993
13994@deftypevr {@code{ext-component-configuration} parameter} string hostname
13995Hostname of the component.
13996@end deftypevr
13997
13998@end deftypevr
13999
14000@deftypevr {@code{prosody-configuration} parameter} non-negative-integer-list component-ports
14001Port(s) Prosody listens on for component connections.
14002@end deftypevr
14003
14004@deftypevr {@code{prosody-configuration} parameter} string component-interface
14005Interface Prosody listens on for component connections.
14006Defaults to @samp{"127.0.0.1"}.
14007@end deftypevr
14008
14009It could be that you just want to get a @code{prosody.cfg.lua}
14010up and running. In that case, you can pass an
14011@code{opaque-prosody-configuration} record as the value of
14012@code{prosody-service-type}. As its name indicates, an opaque configuration
14013does not have easy reflective capabilities.
14014Available @code{opaque-prosody-configuration} fields are:
14015
14016@deftypevr {@code{opaque-prosody-configuration} parameter} package prosody
14017The prosody package.
14018@end deftypevr
14019
14020@deftypevr {@code{opaque-prosody-configuration} parameter} string prosody.cfg.lua
14021The contents of the @code{prosody.cfg.lua} to use.
14022@end deftypevr
14023
14024For example, if your @code{prosody.cfg.lua} is just the empty
14025string, you could instantiate a prosody service like this:
14026
14027@example
14028(service prosody-service-type
14029 (opaque-prosody-configuration
14030 (prosody.cfg.lua "")))
14031@end example
14032
730ed6ec
CB
14033@node Monitoring Services
14034@subsubsection Monitoring Services
14035
14036@subsubheading Tailon Service
14037
14038@uref{https://tailon.readthedocs.io/, Tailon} is a web application for
14039viewing and searching log files.
14040
14041The following example will configure the service with default values.
14042By default, Tailon can be accessed on port 8080 (@code{http://localhost:8080}).
14043
14044@example
14045(service tailon-service-type)
14046@end example
14047
14048The following example customises more of the Tailon configuration,
14049adding @command{sed} to the list of allowed commands.
14050
14051@example
14052(service tailon-service-type
14053 (tailon-configuration
14054 (config-file
14055 (tailon-configuration-file
14056 (allowed-commands '("tail" "grep" "awk" "sed"))))))
14057@end example
14058
14059
14060@deftp {Data Type} tailon-configuration
14061Data type representing the configuration of Tailon.
14062This type has the following parameters:
14063
14064@table @asis
14065@item @code{config-file} (default: @code{(tailon-configuration-file)})
14066The configuration file to use for Tailon. This can be set to a
14067@dfn{tailon-configuration-file} record value, or any gexp
14068(@pxref{G-Expressions}).
14069
14070For example, to instead use a local file, the @code{local-file} function
14071can be used:
14072
14073@example
14074(service tailon-service-type
14075 (tailon-configuration
14076 (config-file (local-file "./my-tailon.conf"))))
14077@end example
14078
14079@item @code{package} (default: @code{tailon})
14080The tailon package to use.
14081
14082@end table
14083@end deftp
14084
14085@deftp {Data Type} tailon-configuration-file
14086Data type representing the configuration options for Tailon.
14087This type has the following parameters:
14088
14089@table @asis
14090@item @code{files} (default: @code{(list "/var/log")})
14091List of files to display. The list can include strings for a single file
14092or directory, or a list, where the first item is the name of a
14093subsection, and the remaining items are the files or directories in that
14094subsection.
14095
14096@item @code{bind} (default: @code{"localhost:8080"})
14097Address and port to which Tailon should bind on.
14098
14099@item @code{relative-root} (default: @code{#f})
14100URL path to use for Tailon, set to @code{#f} to not use a path.
14101
14102@item @code{allow-transfers?} (default: @code{#t})
14103Allow downloading the log files in the web interface.
14104
14105@item @code{follow-names?} (default: @code{#t})
14106Allow tailing of not-yet existent files.
14107
14108@item @code{tail-lines} (default: @code{200})
14109Number of lines to read initially from each file.
14110
14111@item @code{allowed-commands} (default: @code{(list "tail" "grep" "awk")})
14112Commands to allow running. By default, @code{sed} is disabled.
14113
14114@item @code{debug?} (default: @code{#f})
14115Set @code{debug?} to @code{#t} to show debug messages.
14116
f2d8e7f7
CB
14117@item @code{wrap-lines} (default: @code{#t})
14118Initial line wrapping state in the web interface. Set to @code{#t} to
14119initially wrap lines (the default), or to @code{#f} to initially not
14120wrap lines.
14121
91fdc8a5
CB
14122@item @code{http-auth} (default: @code{#f})
14123HTTP authentication type to use. Set to @code{#f} to disable
14124authentication (the default). Supported values are @code{"digest"} or
14125@code{"basic"}.
14126
14127@item @code{users} (default: @code{#f})
14128If HTTP authentication is enabled (see @code{http-auth}), access will be
14129restricted to the credentials provided here. To configure users, use a
14130list of pairs, where the first element of the pair is the username, and
14131the 2nd element of the pair is the password.
14132
14133@example
14134(tailon-configuration-file
14135 (http-auth "basic")
14136 (users '(("user1" . "password1")
14137 ("user2" . "password2"))))
14138@end example
14139
730ed6ec
CB
14140@end table
14141@end deftp
14142
14143
859e367d
JD
14144@node Kerberos Services
14145@subsubsection Kerberos Services
14146@cindex Kerberos
14147
df31e36a 14148The @code{(gnu services kerberos)} module provides services relating to
859e367d
JD
14149the authentication protocol @dfn{Kerberos}.
14150
8e3f813f
JD
14151@subsubheading Krb5 Service
14152
14153Programs using a Kerberos client library normally
14154expect a configuration file in @file{/etc/krb5.conf}.
14155This service generates such a file from a definition provided in the
14156operating system declaration.
14157It does not cause any daemon to be started.
14158
14159No ``keytab'' files are provided by this service---you must explicitly create them.
14160This service is known to work with the MIT client library, @code{mit-krb5}.
14161Other implementations have not been tested.
14162
14163@defvr {Scheme Variable} krb5-service-type
14164A service type for Kerberos 5 clients.
14165@end defvr
14166
14167@noindent
14168Here is an example of its use:
14169@lisp
14170(service krb5-service-type
14171 (krb5-configuration
14172 (default-realm "EXAMPLE.COM")
14173 (allow-weak-crypto? #t)
14174 (realms (list
14175 (krb5-realm
14176 (name "EXAMPLE.COM")
14177 (admin-server "groucho.example.com")
14178 (kdc "karl.example.com"))
14179 (krb5-realm
14180 (name "ARGRX.EDU")
14181 (admin-server "kerb-admin.argrx.edu")
14182 (kdc "keys.argrx.edu"))))))
14183@end lisp
14184
14185@noindent
14186This example provides a Kerberos@tie{}5 client configuration which:
14187@itemize
14188@item Recognizes two realms, @i{viz:} ``EXAMPLE.COM'' and ``ARGRX.EDU'', both
14189of which have distinct administration servers and key distribution centers;
14190@item Will default to the realm ``EXAMPLE.COM'' if the realm is not explicitly
14191specified by clients;
14192@item Accepts services which only support encryption types known to be weak.
14193@end itemize
14194
14195The @code{krb5-realm} and @code{krb5-configuration} types have many fields.
14196Only the most commonly used ones are described here.
14197For a full list, and more detailed explanation of each, see the MIT
14198@uref{http://web.mit.edu/kerberos/krb5-devel/doc/admin/conf_files/krb5_conf.html,,krb5.conf}
14199documentation.
14200
14201
14202@deftp {Data Type} krb5-realm
14203@cindex realm, kerberos
14204@table @asis
14205@item @code{name}
14206This field is a string identifying the name of the realm.
14207A common convention is to use the fully qualified DNS name of your organization,
14208converted to upper case.
14209
14210@item @code{admin-server}
14211This field is a string identifying the host where the administration server is
14212running.
14213
14214@item @code{kdc}
14215This field is a string identifying the key distribution center
14216for the realm.
14217@end table
14218@end deftp
14219
14220@deftp {Data Type} krb5-configuration
14221
14222@table @asis
14223@item @code{allow-weak-crypto?} (default: @code{#f})
14224If this flag is @code{#t} then services which only offer encryption algorithms
14225known to be weak will be accepted.
14226
14227@item @code{default-realm} (default: @code{#f})
14228This field should be a string identifying the default Kerberos
14229realm for the client.
14230You should set this field to the name of your Kerberos realm.
14231If this value is @code{#f}
14232then a realm must be specified with every Kerberos principal when invoking programs
14233such as @command{kinit}.
14234
14235@item @code{realms}
14236This should be a non-empty list of @code{krb5-realm} objects, which clients may
14237access.
14238Normally, one of them will have a @code{name} field matching the @code{default-realm}
14239field.
14240@end table
14241@end deftp
14242
14243
859e367d
JD
14244@subsubheading PAM krb5 Service
14245@cindex pam-krb5
14246
df31e36a 14247The @code{pam-krb5} service allows for login authentication and password
859e367d
JD
14248management via Kerberos.
14249You will need this service if you want PAM enabled applications to authenticate
14250users using Kerberos.
14251
14252@defvr {Scheme Variable} pam-krb5-service-type
14253A service type for the Kerberos 5 PAM module.
14254@end defvr
14255
14256@deftp {Data Type} pam-krb5-configuration
14257Data type representing the configuration of the Kerberos 5 PAM module
14258This type has the following parameters:
14259@table @asis
14260@item @code{pam-krb5} (default: @code{pam-krb5})
14261The pam-krb5 package to use.
14262
14263@item @code{minimum-uid} (default: @code{1000})
14264The smallest user ID for which Kerberos authentications should be attempted.
14265Local accounts with lower values will silently fail to authenticate.
14266@end table
14267@end deftp
14268
14269
58724c48
DT
14270@node Web Services
14271@subsubsection Web Services
14272
e32171ee
JD
14273@cindex web
14274@cindex www
14275@cindex HTTP
a5130d10
AW
14276The @code{(gnu services web)} module provides the nginx web server and
14277also a fastcgi wrapper daemon.
58724c48 14278
39fc3004
CB
14279@deffn {Scheme Variable} nginx-service-type
14280Service type for the @uref{https://nginx.org/,NGinx} web server. The
14281value for this service type is a @code{<nginx-configuration>} record.
5a10cd47 14282
39fc3004 14283A simple example configuration is given below.
58724c48 14284
39fc3004
CB
14285@example
14286(service nginx-service-type
14287 (nginx-configuration
fb1cba68 14288 (server-blocks
39fc3004
CB
14289 (list (nginx-server-configuration
14290 (server-name '("www.example.com"))
14291 (root "/srv/http/www.example.com")
14292 (https-port #f)
14293 (ssl-certificate #f)
14294 (ssl-certificate-key #f))))))
14295@end example
d338237d 14296
39fc3004
CB
14297In addition to adding server blocks to the service configuration
14298directly, this service can be extended by other services to add server
14299blocks, as in this example:
d338237d
JL
14300
14301@example
14302(simple-service 'my-extra-server nginx-service-type
14303 (list (nginx-server-configuration
14304 (https-port #f)
39fc3004
CB
14305 (ssl-certificate #f)
14306 (ssl-certificate-key #f)
4d14808a
OP
14307 (root "/srv/http/extra-website")
14308 (try-files (list "$uri" "$uri/index.html")))))
d338237d
JL
14309@end example
14310@end deffn
14311
39fc3004
CB
14312At startup, @command{nginx} has not yet read its configuration file, so
14313it uses a default file to log error messages. If it fails to load its
14314configuration file, that is where error messages are logged. After the
14315configuration file is loaded, the default error log file changes as per
14316configuration. In our case, startup error messages can be found in
14317@file{/var/run/nginx/logs/error.log}, and after configuration in
14318@file{/var/log/nginx/error.log}. The second location can be changed
14319with the @var{log-directory} configuration option.
14320
14321@deffn {Data Type} nginx-configuration
14322This data type represents the configuration for NGinx. Some
14323configuration can be done through this and the other provided record
14324types, or alternatively, a config file can be provided.
14325
14326@table @asis
14327@item @code{nginx} (default: @code{nginx})
14328The nginx package to use.
14329
14330@item @code{log-directory} (default: @code{"/var/log/nginx"})
14331The directory to which NGinx will write log files.
14332
14333@item @code{run-directory} (default: @code{"/var/run/nginx"})
14334The directory in which NGinx will create a pid file, and write temporary
14335files.
14336
fb1cba68 14337@item @code{server-blocks} (default: @code{'()})
39fc3004
CB
14338A list of @dfn{server blocks} to create in the generated configuration
14339file, the elements should be of type
14340@code{<nginx-server-configuration>}.
14341
14342The following example would setup NGinx to serve @code{www.example.com}
14343from the @code{/srv/http/www.example.com} directory, without using
14344HTTPS.
14345@example
14346(service nginx-service-type
14347 (nginx-configuration
fb1cba68 14348 (server-blocks
39fc3004
CB
14349 (list (nginx-server-configuration
14350 (server-name '("www.example.com"))
14351 (root "/srv/http/www.example.com")
14352 (https-port #f)
14353 (ssl-certificate #f)
14354 (ssl-certificate-key #f))))))
14355@end example
14356
c2a59a92 14357@item @code{upstream-blocks} (default: @code{'()})
39fc3004
CB
14358A list of @dfn{upstream blocks} to create in the generated configuration
14359file, the elements should be of type
14360@code{<nginx-upstream-configuration>}.
14361
c2a59a92 14362Configuring upstreams through the @code{upstream-blocks} can be useful
39fc3004
CB
14363when combined with @code{locations} in the
14364@code{<nginx-server-configuration>} records. The following example
14365creates a server configuration with one location configuration, that
14366will proxy requests to a upstream configuration, which will handle
14367requests with two servers.
14368
14369@example
14370(service
14371 nginx-service-type
14372 (nginx-configuration
fb1cba68 14373 (server-blocks
39fc3004
CB
14374 (list (nginx-server-configuration
14375 (server-name '("www.example.com"))
14376 (root "/srv/http/www.example.com")
14377 (https-port #f)
14378 (ssl-certificate #f)
14379 (ssl-certificate-key #f)
14380 (locations
14381 (list
14382 (nginx-location-configuration
14383 (uri "/path1")
14384 (body '("proxy_pass http://server-proxy;"))))))))
c2a59a92 14385 (upstream-blocks
39fc3004
CB
14386 (list (nginx-upstream-configuration
14387 (name "server-proxy")
14388 (servers (list "server1.example.com"
14389 "server2.example.com")))))))
14390@end example
14391
352a5b63
TGR
14392@item @code{file} (default: @code{#f})
14393If a configuration @var{file} is provided, this will be used, rather than
39fc3004 14394generating a configuration file from the provided @code{log-directory},
c2a59a92 14395@code{run-directory}, @code{server-blocks} and @code{upstream-blocks}. For
fb1cba68
OP
14396proper operation, these arguments should match what is in @var{file} to ensure
14397that the directories are created when the service is activated.
39fc3004
CB
14398
14399This can be useful if you have an existing configuration file, or it's
14400not possible to do what is required through the other parts of the
14401nginx-configuration record.
14402
14403@end table
14404@end deffn
14405
3b9b12ef
JL
14406@deftp {Data Type} nginx-server-configuration
14407Data type representing the configuration of an nginx server block.
8c00b838
JL
14408This type has the following parameters:
14409
14410@table @asis
14411@item @code{http-port} (default: @code{80})
14412Nginx will listen for HTTP connection on this port. Set it at @code{#f} if
14413nginx should not listen for HTTP (non secure) connection for this
3b9b12ef 14414@dfn{server block}.
8c00b838
JL
14415
14416@item @code{https-port} (default: @code{443})
14417Nginx will listen for HTTPS connection on this port. Set it at @code{#f} if
3b9b12ef 14418nginx should not listen for HTTPS (secure) connection for this @dfn{server block}.
8c00b838
JL
14419
14420Note that nginx can listen for HTTP and HTTPS connections in the same
3b9b12ef 14421@dfn{server block}.
8c00b838
JL
14422
14423@item @code{server-name} (default: @code{(list 'default)})
3b9b12ef
JL
14424A list of server names this server represents. @code{'default} represents the
14425default server for connections matching no other server.
8c00b838
JL
14426
14427@item @code{root} (default: @code{"/srv/http"})
14428Root of the website nginx will serve.
14429
9c557a69
CB
14430@item @code{locations} (default: @code{'()})
14431A list of @dfn{nginx-location-configuration} or
14432@dfn{nginx-named-location-configuration} records to use within this
14433server block.
14434
8c00b838
JL
14435@item @code{index} (default: @code{(list "index.html")})
14436Index files to look for when clients ask for a directory. If it cannot be found,
14437Nginx will send the list of files in the directory.
14438
4d14808a
OP
14439@item @code{try-files} (default: @code{'()})
14440A list of files whose existence is checked in the specified order.
14441@code{nginx} will use the first file it finds to process the request.
14442
8c00b838
JL
14443@item @code{ssl-certificate} (default: @code{"/etc/nginx/cert.pem"})
14444Where to find the certificate for secure connections. Set it to @code{#f} if
14445you don't have a certificate or you don't want to use HTTPS.
14446
14447@item @code{ssl-certificate-key} (default: @code{"/etc/nginx/key.pem"})
14448Where to find the private key for secure connections. Set it to @code{#f} if
14449you don't have a key or you don't want to use HTTPS.
14450
14451@item @code{server-tokens?} (default: @code{#f})
14452Whether the server should add its configuration to response.
14453
14454@end table
14455@end deftp
14456
a88d41d1
CB
14457@deftp {Data Type} nginx-upstream-configuration
14458Data type representing the configuration of an nginx @code{upstream}
14459block. This type has the following parameters:
14460
14461@table @asis
14462@item @code{name}
14463Name for this group of servers.
14464
14465@item @code{servers}
14466Specify the addresses of the servers in the group. The address can be
14467specified as a IP address (e.g. @samp{127.0.0.1}), domain name
14468(e.g. @samp{backend1.example.com}) or a path to a UNIX socket using the
14469prefix @samp{unix:}. For addresses using an IP address or domain name,
14470the default port is 80, and a different port can be specified
14471explicitly.
14472
14473@end table
14474@end deftp
14475
14476@deftp {Data Type} nginx-location-configuration
14477Data type representing the configuration of an nginx @code{location}
14478block. This type has the following parameters:
14479
14480@table @asis
14481@item @code{uri}
14482URI which this location block matches.
14483
14484@anchor{nginx-location-configuration body}
14485@item @code{body}
14486Body of the location block, specified as a string. This can contain many
14487configuration directives. For example, to pass requests to a upstream
14488server group defined using an @code{nginx-upstream-configuration} block,
14489the following directive would be specified in the body @samp{proxy_pass
14490http://upstream-name;}.
14491
14492@end table
14493@end deftp
14494
14495@deftp {Data Type} nginx-named-location-configuration
14496Data type representing the configuration of an nginx named location
14497block. Named location blocks are used for request redirection, and not
14498used for regular request processing. This type has the following
14499parameters:
14500
14501@table @asis
14502@item @code{name}
14503Name to identify this location block.
14504
14505@item @code{body}
14506@xref{nginx-location-configuration body}, as the body for named location
14507blocks can be used in a similar way to the
14508@code{nginx-location-configuration body}. One restriction is that the
14509body of a named location block cannot contain location blocks.
14510
14511@end table
14512@end deftp
14513
a5130d10
AW
14514@cindex fastcgi
14515@cindex fcgiwrap
14516FastCGI is an interface between the front-end and the back-end of a web
14517service. It is a somewhat legacy facility; new web services should
14518generally just talk HTTP between the front-end and the back-end.
14519However there are a number of back-end services such as PHP or the
14520optimized HTTP Git repository access that use FastCGI, so we have
14521support for it in Guix.
14522
14523To use FastCGI, you configure the front-end web server (e.g., nginx) to
14524dispatch some subset of its requests to the fastcgi backend, which
14525listens on a local TCP or UNIX socket. There is an intermediary
14526@code{fcgiwrap} program that sits between the actual backend process and
14527the web server. The front-end indicates which backend program to run,
14528passing that information to the @code{fcgiwrap} process.
14529
14530@defvr {Scheme Variable} fcgiwrap-service-type
14531A service type for the @code{fcgiwrap} FastCGI proxy.
14532@end defvr
14533
14534@deftp {Data Type} fcgiwrap-configuration
14535Data type representing the configuration of the @code{fcgiwrap} serice.
14536This type has the following parameters:
14537@table @asis
14538@item @code{package} (default: @code{fcgiwrap})
14539The fcgiwrap package to use.
14540
14541@item @code{socket} (default: @code{tcp:127.0.0.1:9000})
14542The socket on which the @code{fcgiwrap} process should listen, as a
14543string. Valid @var{socket} values include
14544@code{unix:@var{/path/to/unix/socket}},
14545@code{tcp:@var{dot.ted.qu.ad}:@var{port}} and
14546@code{tcp6:[@var{ipv6_addr}]:port}.
14547
14548@item @code{user} (default: @code{fcgiwrap})
14549@itemx @code{group} (default: @code{fcgiwrap})
14550The user and group names, as strings, under which to run the
14551@code{fcgiwrap} process. The @code{fastcgi} service will ensure that if
14552the user asks for the specific user or group names @code{fcgiwrap} that
14553the corresponding user and/or group is present on the system.
14554
14555It is possible to configure a FastCGI-backed web service to pass HTTP
14556authentication information from the front-end to the back-end, and to
14557allow @code{fcgiwrap} to run the back-end process as a corresponding
14558local user. To enable this capability on the back-end., run
14559@code{fcgiwrap} as the @code{root} user and group. Note that this
14560capability also has to be configured on the front-end as well.
14561@end table
14562@end deftp
14563
a88d41d1 14564
ba69e8f7
JL
14565@node DNS Services
14566@subsubsection DNS Services
14567@cindex DNS (domain name system)
14568@cindex domain name system (DNS)
14569
14570The @code{(gnu services dns)} module provides services related to the
14571@dfn{domain name system} (DNS). It provides a server service for hosting
14572an @emph{authoritative} DNS server for multiple zones, slave or master.
14573This service uses @uref{https://www.knot-dns.cz/, Knot DNS}.
14574
14575An example configuration of an authoritative server for two zones, one master
14576and one slave, is:
14577
14578@lisp
14579(define-zone-entries example.org.zone
14580;; Name TTL Class Type Data
14581 ("@@" "" "IN" "A" "127.0.0.1")
14582 ("@@" "" "IN" "NS" "ns")
14583 ("ns" "" "IN" "A" "127.0.0.1"))
14584
14585(define master-zone
14586 (knot-zone-configuration
14587 (domain "example.org")
14588 (zone (zone-file
14589 (origin "example.org")
14590 (entries example.org.zone)))))
14591
14592(define slave-zone
14593 (knot-zone-configuration
14594 (domain "plop.org")
14595 (dnssec-policy "default")
14596 (master (list "plop-master"))))
14597
14598(define plop-master
14599 (knot-remote-configuration
14600 (id "plop-master")
14601 (address (list "208.76.58.171"))))
14602
14603(operating-system
14604 ;; ...
14605 (services (cons* (service knot-service-type
14606 (knot-confifguration
14607 (remotes (list plop-master))
14608 (zones (list master-zone slave-zone))))
14609 ;; ...
14610 %base-services)))
14611@end lisp
14612
14613@deffn {Scheme Variable} knot-service-type
14614This is the type for the Knot DNS server.
14615
14616Knot DNS is an authoritative DNS server, meaning that it can serve multiple
14617zones, that is to say domain names you would buy from a registrar. This server
14618is not a resolver, meaning that it can only resolve names for which it is
14619authoritative. This server can be configured to serve zones as a master server
14620or a slave server as a per-zone basis. Slave zones will get their data from
14621masters, and will serve it as an authoritative server. From the point of view
14622of a resolver, there is no difference between master and slave.
14623
14624The following data types are used to configure the Knot DNS server:
14625@end deffn
14626
14627@deftp {Data Type} knot-key-configuration
14628Data type representing a key.
14629This type has the following parameters:
14630
14631@table @asis
14632@item @code{id} (default: @code{""})
14633An identifier for other configuration fields to refer to this key. IDs must
14634be unique and must not be empty.
14635
14636@item @code{algorithm} (default: @code{#f})
14637The algorithm to use. Choose between @code{#f}, @code{'hmac-md5},
14638@code{'hmac-sha1}, @code{'hmac-sha224}, @code{'hmac-sha256}, @code{'hmac-sha384}
14639and @code{'hmac-sha512}.
14640
14641@item @code{secret} (default: @code{""})
14642The secret key itself.
14643
14644@end table
14645@end deftp
14646
14647@deftp {Data Type} knot-acl-configuration
14648Data type representing an Access Control List (ACL) configuration.
14649This type has the following parameters:
14650
14651@table @asis
14652@item @code{id} (default: @code{""})
14653An identifier for ether configuration fields to refer to this key. IDs must be
14654unique and must not be empty.
14655
14656@item @code{address} (default: @code{'()})
14657An ordered list of IP addresses, network subnets, or network ranges represented
14658with strings. The query must match one of them. Empty value means that
14659address match is not required.
14660
14661@item @code{key} (default: @code{'()})
14662An ordered list of references to keys represented with strings. The string
14663must match a key ID defined in a @code{knot-key-configuration}. No key means
14664that a key is not require to match that ACL.
14665
14666@item @code{action} (default: @code{'()})
14667An ordered list of actions that are permitted or forbidden by this ACL. Possible
14668values are lists of zero or more elements from @code{'transfer}, @code{'notify}
14669and @code{'update}.
14670
14671@item @code{deny?} (default: @code{#f})
14672When true, the ACL defines restrictions. Listed actions are forbidden. When
14673false, listed actions are allowed.
14674
14675@end table
14676@end deftp
14677
14678@deftp {Data Type} zone-entry
14679Data type represnting a record entry in a zone file.
14680This type has the following parameters:
14681
14682@table @asis
14683@item @code{name} (default: @code{"@@"})
14684The name of the record. @code{"@@"} refers to the origin of the zone. Names
14685are relative to the origin of the zone. For example, in the @code{example.org}
14686zone, @code{"ns.example.org"} actually refers to @code{ns.example.org.example.org}.
14687Names ending with a dot are absolute, which means that @code{"ns.example.org."}
14688refers to @code{ns.example.org}.
14689
14690@item @code{ttl} (default: @code{""})
14691The Time-To-Live (TTL) of this record. If not set, the default TTL is used.
14692
14693@item @code{class} (default: @code{"IN"})
14694The class of the record. Knot currently supports only @code{"IN"} and
14695partially @code{"CH"}.
14696
14697@item @code{type} (default: @code{"A"})
14698The type of the record. Common types include A (IPv4 address), AAAA (IPv6
14699address), NS (Name Server) and MX (Mail eXchange). Many other types are
14700defined.
14701
14702@item @code{data} (default: @code{""})
14703The data contained in the record. For instance an IP address associated with
14704an A record, or a domain name associated with an NS record. Remember that
14705domain names are relative to the origin unless they end with a dot.
14706
14707@end table
14708@end deftp
14709
14710@deftp {Data Type} zone-file
14711Data type representing the content of a zone file.
14712This type has the following parameters:
14713
14714@table @asis
14715@item @code{entries} (default: @code{'()})
14716The list of entries. The SOA record is taken care of, so you don't need to
14717put it in the list of entries. This list should probably contain an entry
14718for your primary authoritative DNS server. Other than using a list of entries
14719directly, you can use @code{define-zone-entries} to define a object containing
14720the list of entries more easily, that you can later pass to the @code{entries}
14721field of the @code{zone-file}.
14722
14723@item @code{origin} (default: @code{""})
14724The name of your zone. This parameter cannot be empty.
14725
14726@item @code{ns} (default: @code{"ns"})
14727The domain of your primary authoritative DNS server. The name is relative to
14728the origin, unless it ends with a dot. It is mandatory that this primary
14729DNS server corresponds to an NS record in the zone and that it is associated
14730to an IP address in the list of entries.
14731
14732@item @code{mail} (default: @code{"hostmaster"})
14733An email address people can contact you at, as the owner of the zone. This
14734is translated as @code{<mail>@@<origin>}.
14735
14736@item @code{serial} (default: @code{1})
14737The serial number of the zone. As this is used to keep track of changes by
14738both slaves and resolvers, it is mandatory that it @emph{never} decreases.
14739Always increment it when you make a change in your zone.
14740
f3853a25
JL
14741@item @code{refresh} (default: @code{(* 2 24 3600)})
14742The frequency at which slaves will do a zone transfer. This value is a number
14743of seconds. It can be computed by multiplications or with
14744@code{(string->duration)}.
ba69e8f7 14745
f3853a25 14746@item @code{retry} (default: @code{(* 15 60)})
ba69e8f7
JL
14747The period after which a slave will retry to contact its master when it fails
14748to do so a first time.
14749
f3853a25 14750@item @code{expiry} (default: @code{(* 14 24 3600)})
ba69e8f7
JL
14751Default TTL of records. Existing records are considered correct for at most
14752this amount of time. After this period, resolvers will invalidate their cache
14753and check again that it still exists.
14754
f3853a25 14755@item @code{nx} (default: @code{3600})
ba69e8f7
JL
14756Default TTL of inexistant records. This delay is usually short because you want
14757your new domains to reach everyone quickly.
14758
14759@end table
14760@end deftp
14761
14762@deftp {Data Type} knot-remote-configuration
14763Data type representing a remote configuration.
14764This type has the following parameters:
14765
14766@table @asis
14767@item @code{id} (default: @code{""})
14768An identifier for other configuration fields to refer to this remote. IDs must
14769be unique and must not be empty.
14770
14771@item @code{address} (default: @code{'()})
14772An ordered list of destination IP addresses. Addresses are tried in sequence.
14773An optional port can be given with the @@ separator. For instance:
14774@code{(list "1.2.3.4" "2.3.4.5@@53")}. Default port is 53.
14775
14776@item @code{via} (default: @code{'()})
14777An ordered list of source IP addresses. An empty list will have Knot choose
14778an appropriate source IP. An optional port can be given with the @@ separator.
14779The default is to choose at random.
14780
14781@item @code{key} (default: @code{#f})
14782A reference to a key, that is a string containing the identifier of a key
14783defined in a @code{knot-key-configuration} field.
14784
14785@end table
14786@end deftp
14787
14788@deftp {Data Type} knot-keystore-configuration
14789Data type representing a keystore to hold dnssec keys.
14790This type has the following parameters:
14791
14792@table @asis
14793@item @code{id} (default: @code{""})
14794The id of the keystore. It must not be empty.
14795
14796@item @code{backend} (default: @code{'pem})
14797The backend to store the keys in. Can be @code{'pem} or @code{'pkcs11}.
14798
14799@item @code{config} (default: @code{"/var/lib/knot/keys/keys"})
14800The configuration string of the backend. An example for the PKCS#11 is:
14801@code{"pkcs11:token=knot;pin-value=1234 /gnu/store/.../lib/pkcs11/libsofthsm2.so"}.
14802For the pem backend, the string reprensents a path in the filesystem.
14803
14804@end table
14805@end deftp
14806
14807@deftp {Data Type} knot-policy-configuration
14808Data type representing a dnssec policy. Knot DNS is able to automatically
14809sign your zones. It can either generate and manage your keys automatically or
14810use keys that you generate.
14811
14812Dnssec is usually implemented using two keys: a Key Signing Key (KSK) that is
14813used to sign the second, and a Zone Signing Key (ZSK) that is used to sign the
14814zone. In order to be trusted, the KSK needs to be present in the parent zone
14815(usually a top-level domain). If your registrar supports dnssec, you will
14816have to send them your KSK's hash so they can add a DS record in their zone.
14817This is not automated and need to be done each time you change your KSK.
14818
14819The policy also defines the lifetime of keys. Usually, ZSK can be changed
14820easily and use weaker cryptographic functions (they use lower parameters) in
14821order to sign records quickly, so they are changed often. The KSK however
14822requires manual interaction with the registrar, so they are changed less often
14823and use stronger parameters because they sign only one record.
14824
14825This type has the following parameters:
14826
14827@table @asis
14828@item @code{id} (default: @code{""})
14829The id of the policy. It must not be empty.
14830
14831@item @code{keystore} (default: @code{"default"})
14832A reference to a keystore, that is a string containing the identifier of a
14833keystore defined in a @code{knot-keystore-configuration} field. The
14834@code{"default"} identifier means the default keystore (a kasp database that
14835was setup by this service).
14836
14837@item @code{manual?} (default: @code{#f})
14838Whether the key management is manual or automatic.
14839
14840@item @code{single-type-signing?} (default: @code{#f})
14841When @code{#t}, use the Single-Type Signing Scheme.
14842
14843@item @code{algorithm} (default: @code{"ecdsap256sha256"})
14844An algorithm of signing keys and issued signatures.
14845
14846@item @code{ksk-size} (default: @code{256})
14847The length of the KSK. Note that this value is correct for the default
14848algorithm, but would be unsecure for other algorithms.
14849
14850@item @code{zsk-size} (default: @code{256})
14851The length of the ZSK. Note that this value is correct for the default
14852algorithm, but would be unsecure for other algorithms.
14853
14854@item @code{dnskey-ttl} (default: @code{'default})
14855The TTL value for DNSKEY records added into zone apex. The special
14856@code{'default} value means same as the zone SOA TTL.
14857
f3853a25 14858@item @code{zsk-lifetime} (default: @code{(* 30 24 3600)})
ba69e8f7
JL
14859The period between ZSK publication and the next rollover initiation.
14860
f3853a25 14861@item @code{propagation-delay} (default: @code{(* 24 3600)})
ba69e8f7
JL
14862An extra delay added for each key rollover step. This value should be high
14863enough to cover propagation of data from the master server to all slaves.
14864
f3853a25 14865@item @code{rrsig-lifetime} (default: @code{(* 14 24 3600)})
ba69e8f7
JL
14866A validity period of newly issued signatures.
14867
f3853a25 14868@item @code{rrsig-refresh} (default: @code{(* 7 24 3600)})
ba69e8f7
JL
14869A period how long before a signature expiration the signature will be refreshed.
14870
14871@item @code{nsec3?} (default: @code{#f})
14872When @code{#t}, NSEC3 will be used instead of NSEC.
14873
14874@item @code{nsec3-iterations} (default: @code{5})
14875The number of additional times the hashing is performed.
14876
14877@item @code{nsec3-salt-length} (default: @code{8})
14878The length of a salt field in octets, which is appended to the original owner
14879name before hashing.
14880
f3853a25 14881@item @code{nsec3-salt-lifetime} (default: @code{(* 30 24 3600)})
ba69e8f7
JL
14882The validity period of newly issued salt field.
14883
14884@end table
14885@end deftp
14886
14887@deftp {Data Type} knot-zone-configuration
14888Data type representing a zone served by Knot.
14889This type has the following parameters:
14890
14891@table @asis
14892@item @code{domain} (default: @code{""})
14893The domain served by this configuration. It must not be empty.
14894
14895@item @code{file} (default: @code{""})
14896The file where this zone is saved. This parameter is ignored by master zones.
14897Empty means default location that depends on the domain name.
14898
14899@item @code{zone} (default: @code{(zone-file)})
14900The content of the zone file. This parameter is ignored by slave zones. It
14901must contain a zone-file record.
14902
14903@item @code{master} (default: @code{'()})
14904A list of master remotes. When empty, this zone is a master. When set, this
14905zone is a slave. This is a list of remotes identifiers.
14906
14907@item @code{ddns-master} (default: @code{#f})
14908The main master. When empty, it defaults to the first master in the list of
14909masters.
14910
14911@item @code{notify} (default: @code{'()})
14912A list of slave remote identifiers.
14913
14914@item @code{acl} (default: @code{'()})
14915A list of acl identifiers.
14916
14917@item @code{semantic-checks?} (default: @code{#f})
14918When set, this adds more semantic checks to the zone.
14919
14920@item @code{disable-any?} (default: @code{#f})
14921When set, this forbids queries of the ANY type.
14922
14923@item @code{zonefile-sync} (default: @code{0})
14924The delay between a modification in memory and on disk. 0 means immediate
14925synchronization.
14926
14927@item @code{serial-policy} (default: @code{'increment})
14928A policy between @code{'increment} and @code{'unixtime}.
14929
14930@end table
14931@end deftp
14932
14933@deftp {Data Type} knot-configuration
14934Data type representing the Knot configuration.
14935This type has the following parameters:
14936
14937@table @asis
14938@item @code{knot} (default: @code{knot})
14939The Knot package.
14940
14941@item @code{run-directory} (default: @code{"/var/run/knot"})
14942The run directory. This directory will be used for pid file and sockets.
14943
14944@item @code{listen-v4} (default: @code{"0.0.0.0"})
14945An ip address on which to listen.
14946
14947@item @code{listen-v6} (default: @code{"::"})
14948An ip address on which to listen.
14949
14950@item @code{listen-port} (default: @code{53})
14951A port on which to listen.
14952
14953@item @code{keys} (default: @code{'()})
14954The list of knot-key-configuration used by this configuration.
14955
14956@item @code{acls} (default: @code{'()})
14957The list of knot-acl-configuration used by this configuration.
14958
14959@item @code{remotes} (default: @code{'()})
14960The list of knot-remote-configuration used by this configuration.
14961
14962@item @code{zones} (default: @code{'()})
14963The list of knot-zone-configuration used by this configuration.
14964
14965@end table
14966@end deftp
14967
2be1b471
JL
14968@node VPN Services
14969@subsubsection VPN Services
14970@cindex VPN (virtual private network)
14971@cindex virtual private network (VPN)
14972
14973The @code{(gnu services vpn)} module provides services related to
14974@dfn{virtual private networks} (VPNs). It provides a @emph{client} service for
14975your machine to connect to a VPN, and a @emph{servire} service for your machine
14976to host a VPN. Both services use @uref{https://openvpn.net/, OpenVPN}.
14977
14978@deffn {Scheme Procedure} openvpn-client-service @
14979 [#:config (openvpn-client-configuration)]
14980
14981Return a service that runs @command{openvpn}, a VPN daemon, as a client.
14982@end deffn
14983
14984@deffn {Scheme Procedure} openvpn-server-service @
14985 [#:config (openvpn-server-configuration)]
14986
14987Return a service that runs @command{openvpn}, a VPN daemon, as a server.
14988
14989Both can be run simultaneously.
14990@end deffn
14991
14992@c %automatically generated documentation
14993
14994Available @code{openvpn-client-configuration} fields are:
14995
1c17a863 14996@deftypevr {@code{openvpn-client-configuration} parameter} package openvpn
2be1b471
JL
14997The OpenVPN package.
14998
14999@end deftypevr
15000
1c17a863 15001@deftypevr {@code{openvpn-client-configuration} parameter} string pid-file
2be1b471
JL
15002The OpenVPN pid file.
15003
15004Defaults to @samp{"/var/run/openvpn/openvpn.pid"}.
15005
15006@end deftypevr
15007
1c17a863 15008@deftypevr {@code{openvpn-client-configuration} parameter} proto proto
2be1b471
JL
15009The protocol (UDP or TCP) used to open a channel between clients and
15010servers.
15011
15012Defaults to @samp{udp}.
15013
15014@end deftypevr
15015
1c17a863 15016@deftypevr {@code{openvpn-client-configuration} parameter} dev dev
2be1b471
JL
15017The device type used to represent the VPN connection.
15018
15019Defaults to @samp{tun}.
15020
15021@end deftypevr
15022
1c17a863 15023@deftypevr {@code{openvpn-client-configuration} parameter} string ca
2be1b471
JL
15024The certificate authority to check connections against.
15025
15026Defaults to @samp{"/etc/openvpn/ca.crt"}.
15027
15028@end deftypevr
15029
1c17a863 15030@deftypevr {@code{openvpn-client-configuration} parameter} string cert
2be1b471
JL
15031The certificate of the machine the daemon is running on. It should be
15032signed by the authority given in @code{ca}.
15033
15034Defaults to @samp{"/etc/openvpn/client.crt"}.
15035
15036@end deftypevr
15037
1c17a863 15038@deftypevr {@code{openvpn-client-configuration} parameter} string key
2be1b471
JL
15039The key of the machine the daemon is running on. It must be the key whose
15040certificate is @code{cert}.
15041
15042Defaults to @samp{"/etc/openvpn/client.key"}.
15043
15044@end deftypevr
15045
1c17a863 15046@deftypevr {@code{openvpn-client-configuration} parameter} boolean comp-lzo?
2be1b471
JL
15047Whether to use the lzo compression algorithm.
15048
15049Defaults to @samp{#t}.
15050
15051@end deftypevr
15052
1c17a863 15053@deftypevr {@code{openvpn-client-configuration} parameter} boolean persist-key?
2be1b471
JL
15054Don't re-read key files across SIGUSR1 or --ping-restart.
15055
15056Defaults to @samp{#t}.
15057
15058@end deftypevr
15059
1c17a863 15060@deftypevr {@code{openvpn-client-configuration} parameter} boolean persist-tun?
2be1b471
JL
15061Don't close and reopen TUN/TAP device or run up/down scripts across
15062SIGUSR1 or --ping-restart restarts.
15063
15064Defaults to @samp{#t}.
15065
15066@end deftypevr
15067
1c17a863 15068@deftypevr {@code{openvpn-client-configuration} parameter} number verbosity
2be1b471
JL
15069Verbosity level.
15070
15071Defaults to @samp{3}.
15072
15073@end deftypevr
15074
1c17a863 15075@deftypevr {@code{openvpn-client-configuration} parameter} tls-auth-client tls-auth
2be1b471
JL
15076Add an additional layer of HMAC authentication on top of the TLS control
15077channel to protect against DoS attacks.
15078
15079Defaults to @samp{#f}.
15080
15081@end deftypevr
15082
1c17a863 15083@deftypevr {@code{openvpn-client-configuration} parameter} key-usage verify-key-usage?
2be1b471
JL
15084Whether to check the server certificate has server usage extension.
15085
15086Defaults to @samp{#t}.
15087
15088@end deftypevr
15089
1c17a863 15090@deftypevr {@code{openvpn-client-configuration} parameter} bind bind?
2be1b471
JL
15091Bind to a specific local port number.
15092
15093Defaults to @samp{#f}.
15094
15095@end deftypevr
15096
1c17a863 15097@deftypevr {@code{openvpn-client-configuration} parameter} resolv-retry resolv-retry?
2be1b471
JL
15098Retry resolving server address.
15099
15100Defaults to @samp{#t}.
15101
15102@end deftypevr
15103
1c17a863 15104@deftypevr {@code{openvpn-client-configuration} parameter} openvpn-remote-list remote
2be1b471
JL
15105A list of remote servers to connect to.
15106
15107Defaults to @samp{()}.
15108
15109Available @code{openvpn-remote-configuration} fields are:
15110
1c17a863 15111@deftypevr {@code{openvpn-remote-configuration} parameter} string name
2be1b471
JL
15112Server name.
15113
15114Defaults to @samp{"my-server"}.
15115
15116@end deftypevr
15117
1c17a863 15118@deftypevr {@code{openvpn-remote-configuration} parameter} number port
2be1b471
JL
15119Port number the server listens to.
15120
15121Defaults to @samp{1194}.
15122
15123@end deftypevr
15124
15125@end deftypevr
15126@c %end of automatic openvpn-client documentation
15127
15128@c %automatically generated documentation
15129
15130Available @code{openvpn-server-configuration} fields are:
15131
1c17a863 15132@deftypevr {@code{openvpn-server-configuration} parameter} package openvpn
2be1b471
JL
15133The OpenVPN package.
15134
15135@end deftypevr
15136
1c17a863 15137@deftypevr {@code{openvpn-server-configuration} parameter} string pid-file
2be1b471
JL
15138The OpenVPN pid file.
15139
15140Defaults to @samp{"/var/run/openvpn/openvpn.pid"}.
15141
15142@end deftypevr
15143
1c17a863 15144@deftypevr {@code{openvpn-server-configuration} parameter} proto proto
2be1b471
JL
15145The protocol (UDP or TCP) used to open a channel between clients and
15146servers.
15147
15148Defaults to @samp{udp}.
15149
15150@end deftypevr
15151
1c17a863 15152@deftypevr {@code{openvpn-server-configuration} parameter} dev dev
2be1b471
JL
15153The device type used to represent the VPN connection.
15154
15155Defaults to @samp{tun}.
15156
15157@end deftypevr
15158
1c17a863 15159@deftypevr {@code{openvpn-server-configuration} parameter} string ca
2be1b471
JL
15160The certificate authority to check connections against.
15161
15162Defaults to @samp{"/etc/openvpn/ca.crt"}.
15163
15164@end deftypevr
15165
1c17a863 15166@deftypevr {@code{openvpn-server-configuration} parameter} string cert
2be1b471
JL
15167The certificate of the machine the daemon is running on. It should be
15168signed by the authority given in @code{ca}.
15169
15170Defaults to @samp{"/etc/openvpn/client.crt"}.
15171
15172@end deftypevr
15173
1c17a863 15174@deftypevr {@code{openvpn-server-configuration} parameter} string key
2be1b471
JL
15175The key of the machine the daemon is running on. It must be the key whose
15176certificate is @code{cert}.
15177
15178Defaults to @samp{"/etc/openvpn/client.key"}.
15179
15180@end deftypevr
15181
1c17a863 15182@deftypevr {@code{openvpn-server-configuration} parameter} boolean comp-lzo?
2be1b471
JL
15183Whether to use the lzo compression algorithm.
15184
15185Defaults to @samp{#t}.
15186
15187@end deftypevr
15188
1c17a863 15189@deftypevr {@code{openvpn-server-configuration} parameter} boolean persist-key?
2be1b471
JL
15190Don't re-read key files across SIGUSR1 or --ping-restart.
15191
15192Defaults to @samp{#t}.
15193
15194@end deftypevr
15195
1c17a863 15196@deftypevr {@code{openvpn-server-configuration} parameter} boolean persist-tun?
2be1b471
JL
15197Don't close and reopen TUN/TAP device or run up/down scripts across
15198SIGUSR1 or --ping-restart restarts.
15199
15200Defaults to @samp{#t}.
15201
15202@end deftypevr
15203
1c17a863 15204@deftypevr {@code{openvpn-server-configuration} parameter} number verbosity
2be1b471
JL
15205Verbosity level.
15206
15207Defaults to @samp{3}.
15208
15209@end deftypevr
15210
1c17a863 15211@deftypevr {@code{openvpn-server-configuration} parameter} tls-auth-server tls-auth
2be1b471
JL
15212Add an additional layer of HMAC authentication on top of the TLS control
15213channel to protect against DoS attacks.
15214
15215Defaults to @samp{#f}.
15216
15217@end deftypevr
15218
1c17a863 15219@deftypevr {@code{openvpn-server-configuration} parameter} number port
2be1b471
JL
15220Specifies the port number on which the server listens.
15221
15222Defaults to @samp{1194}.
15223
15224@end deftypevr
15225
1c17a863 15226@deftypevr {@code{openvpn-server-configuration} parameter} ip-mask server
2be1b471
JL
15227An ip and mask specifying the subnet inside the virtual network.
15228
15229Defaults to @samp{"10.8.0.0 255.255.255.0"}.
15230
15231@end deftypevr
15232
1c17a863 15233@deftypevr {@code{openvpn-server-configuration} parameter} cidr6 server-ipv6
2be1b471
JL
15234A CIDR notation specifying the IPv6 subnet inside the virtual network.
15235
15236Defaults to @samp{#f}.
15237
15238@end deftypevr
15239
1c17a863 15240@deftypevr {@code{openvpn-server-configuration} parameter} string dh
2be1b471
JL
15241The Diffie-Hellman parameters file.
15242
15243Defaults to @samp{"/etc/openvpn/dh2048.pem"}.
15244
15245@end deftypevr
15246
1c17a863 15247@deftypevr {@code{openvpn-server-configuration} parameter} string ifconfig-pool-persist
2be1b471
JL
15248The file that records client IPs.
15249
15250Defaults to @samp{"/etc/openvpn/ipp.txt"}.
15251
15252@end deftypevr
15253
1c17a863 15254@deftypevr {@code{openvpn-server-configuration} parameter} gateway redirect-gateway?
2be1b471
JL
15255When true, the server will act as a gateway for its clients.
15256
15257Defaults to @samp{#f}.
15258
15259@end deftypevr
15260
1c17a863 15261@deftypevr {@code{openvpn-server-configuration} parameter} boolean client-to-client?
9fc221b5 15262When true, clients are allowed to talk to each other inside the VPN.
2be1b471
JL
15263
15264Defaults to @samp{#f}.
15265
15266@end deftypevr
15267
1c17a863 15268@deftypevr {@code{openvpn-server-configuration} parameter} keepalive keepalive
2be1b471
JL
15269Causes ping-like messages to be sent back and forth over the link so
15270that each side knows when the other side has gone down. @code{keepalive}
15271requires a pair. The first element is the period of the ping sending,
15272and the second element is the timeout before considering the other side
15273down.
15274
15275@end deftypevr
15276
1c17a863 15277@deftypevr {@code{openvpn-server-configuration} parameter} number max-clients
2be1b471
JL
15278The maximum number of clients.
15279
15280Defaults to @samp{100}.
15281
15282@end deftypevr
15283
1c17a863 15284@deftypevr {@code{openvpn-server-configuration} parameter} string status
2be1b471 15285The status file. This file shows a small report on current connection.
9fc221b5 15286It is truncated and rewritten every minute.
2be1b471
JL
15287
15288Defaults to @samp{"/var/run/openvpn/status"}.
15289
15290@end deftypevr
15291
1c17a863 15292@deftypevr {@code{openvpn-server-configuration} parameter} openvpn-ccd-list client-config-dir
2be1b471
JL
15293The list of configuration for some clients.
15294
15295Defaults to @samp{()}.
15296
15297Available @code{openvpn-ccd-configuration} fields are:
15298
1c17a863 15299@deftypevr {@code{openvpn-ccd-configuration} parameter} string name
2be1b471
JL
15300Client name.
15301
15302Defaults to @samp{"client"}.
15303
15304@end deftypevr
15305
1c17a863 15306@deftypevr {@code{openvpn-ccd-configuration} parameter} ip-mask iroute
2be1b471
JL
15307Client own network
15308
15309Defaults to @samp{#f}.
15310
15311@end deftypevr
15312
1c17a863 15313@deftypevr {@code{openvpn-ccd-configuration} parameter} ip-mask ifconfig-push
2be1b471
JL
15314Client VPN IP.
15315
15316Defaults to @samp{#f}.
15317
15318@end deftypevr
15319
15320@end deftypevr
15321
15322
15323@c %end of automatic openvpn-server documentation
15324
15325
eb419bc9
JD
15326@node Network File System
15327@subsubsection Network File System
15328@cindex NFS
fe1a39d3 15329
eb419bc9
JD
15330The @code{(gnu services nfs)} module provides the following services,
15331which are most commonly used in relation to mounting or exporting
15332directory trees as @dfn{network file systems} (NFS).
d6a07ee6
JD
15333
15334@subsubheading RPC Bind Service
15335@cindex rpcbind
15336
eb419bc9
JD
15337The RPC Bind service provides a facility to map program numbers into
15338universal addresses.
15339Many NFS related services use this facility. Hence it is automatically
15340started when a dependent service starts.
d6a07ee6
JD
15341
15342@defvr {Scheme Variable} rpcbind-service-type
15343A service type for the RPC portmapper daemon.
15344@end defvr
15345
15346
15347@deftp {Data Type} rpcbind-configuration
15348Data type representing the configuration of the RPC Bind Service.
15349This type has the following parameters:
15350@table @asis
15351@item @code{rpcbind} (default: @code{rpcbind})
15352The rpcbind package to use.
15353
15354@item @code{warm-start?} (default: @code{#t})
15355If this parameter is @code{#t}, then the daemon will read a
15356state file on startup thus reloading state information saved by a previous
15357instance.
15358@end table
15359@end deftp
15360
eb419bc9
JD
15361
15362@subsubheading Pipefs Pseudo File System
15363@cindex pipefs
15364@cindex rpc_pipefs
15365
15366The pipefs file system is used to transfer NFS related data
15367between the kernel and user space programs.
15368
15369@defvr {Scheme Variable} pipefs-service-type
15370A service type for the pipefs pseudo file system.
15371@end defvr
15372
15373@deftp {Data Type} pipefs-configuration
15374Data type representing the configuration of the pipefs pseudo file system service.
15375This type has the following parameters:
15376@table @asis
15377@item @code{mount-point} (default: @code{"/var/lib/nfs/rpc_pipefs"})
15378The directory to which the file system is to be attached.
15379@end table
15380@end deftp
15381
15382
15383@subsubheading GSS Daemon Service
15384@cindex GSSD
15385@cindex GSS
15386@cindex global security system
15387
15388The @dfn{global security system} (GSS) daemon provides strong security for RPC
15389based protocols.
15390Before exchanging RPC requests an RPC client must establish a security
15391context. Typically this is done using the Kerberos command @command{kinit}
859e367d 15392or automatically at login time using PAM services (@pxref{Kerberos Services}).
eb419bc9
JD
15393
15394@defvr {Scheme Variable} gss-service-type
15395A service type for the Global Security System (GSS) daemon.
15396@end defvr
15397
15398@deftp {Data Type} gss-configuration
15399Data type representing the configuration of the GSS daemon service.
15400This type has the following parameters:
15401@table @asis
15402@item @code{nfs-utils} (default: @code{nfs-utils})
15403The package in which the @command{rpc.gssd} command is to be found.
15404
15405@item @code{pipefs-directory} (default: @code{"/var/lib/nfs/rpc_pipefs"})
15406The directory where the pipefs file system is mounted.
15407
15408@end table
15409@end deftp
15410
15411
15412@subsubheading IDMAP Daemon Service
15413@cindex idmapd
15414@cindex name mapper
15415
15416The idmap daemon service provides mapping between user IDs and user names.
15417Typically it is required in order to access file systems mounted via NFSv4.
15418
15419@defvr {Scheme Variable} idmap-service-type
15420A service type for the Identity Mapper (IDMAP) daemon.
15421@end defvr
15422
15423@deftp {Data Type} idmap-configuration
15424Data type representing the configuration of the IDMAP daemon service.
15425This type has the following parameters:
15426@table @asis
15427@item @code{nfs-utils} (default: @code{nfs-utils})
15428The package in which the @command{rpc.idmapd} command is to be found.
15429
15430@item @code{pipefs-directory} (default: @code{"/var/lib/nfs/rpc_pipefs"})
15431The directory where the pipefs file system is mounted.
15432
15433@item @code{domain} (default: @code{#f})
15434The local NFSv4 domain name.
15435This must be a string or @code{#f}.
15436If it is @code{#f} then the daemon will use the host's fully qualified domain name.
15437
15438@end table
15439@end deftp
15440
a7cf4eb6
ML
15441@node Continuous Integration
15442@subsubsection Continuous Integration
15443
15444@cindex continuous integration
15445@uref{https://notabug.org/mthl/cuirass, Cuirass} is a continuous
15446integration tool for Guix. It can be used both for development and for
15447providing substitutes to others (@pxref{Substitutes}).
15448
15449The @code{(gnu services cuirass)} module provides the following service.
15450
231eddc8
LC
15451@defvr {Scheme Procedure} cuirass-service-type
15452The type of the Cuirass service. Its value must be a
15453@code{cuirass-configuration} object, as described below.
15454@end defvr
a7cf4eb6 15455
231eddc8
LC
15456To add build jobs, you have to set the @code{specifications} field of
15457the configuration. Here is an example of a service defining a build job
15458based on a specification that can be found in Cuirass source tree. This
15459service polls the Guix repository and builds a subset of the Guix
15460packages, as prescribed in the @file{gnu-system.scm} example spec:
a7cf4eb6
ML
15461
15462@example
8de938d5
LC
15463(let ((spec #~((#:name . "guix")
15464 (#:url . "git://git.savannah.gnu.org/guix.git")
15465 (#:load-path . ".")
66bc1d2a
JN
15466 (#:file . "build-aux/cuirass/gnu-system.scm")
15467 (#:proc . cuirass-jobs)
8de938d5
LC
15468 (#:arguments (subset . "hello"))
15469 (#:branch . "master"))))
231eddc8
LC
15470 (service cuirass-service-type
15471 (cuirass-configuration
9bb98bcf 15472 (specifications #~(list '#$spec)))))
a7cf4eb6
ML
15473@end example
15474
231eddc8 15475While information related to build jobs is located directly in the
a7cf4eb6
ML
15476specifications, global settings for the @command{cuirass} process are
15477accessible in other @code{cuirass-configuration} fields.
15478
15479@deftp {Data Type} cuirass-configuration
15480Data type representing the configuration of Cuirass.
15481
15482@table @asis
b17e326f
LC
15483@item @code{log-file} (default: @code{"/var/log/cuirass.log"})
15484Location of the log file.
15485
463995da 15486@item @code{cache-directory} (default: @code{"/var/cache/cuirass"})
a7cf4eb6
ML
15487Location of the repository cache.
15488
15489@item @code{user} (default: @code{"cuirass"})
15490Owner of the @code{cuirass} process.
15491
15492@item @code{group} (default: @code{"cuirass"})
15493Owner's group of the @code{cuirass} process.
15494
15495@item @code{interval} (default: @code{60})
15496Number of seconds between the poll of the repositories followed by the
15497Cuirass jobs.
15498
15499@item @code{database} (default: @code{"/var/run/cuirass/cuirass.db"})
15500Location of sqlite database which contains the build results and previously
15501added specifications.
15502
1c05aab4 15503@item @code{port} (default: @code{8081})
11b7717d
MO
15504Port number used by the HTTP server.
15505
326f6ef1
JN
15506@item --listen=@var{host}
15507Listen on the network interface for @var{host}. The default is to
15508accept connections from localhost.
15509
8de938d5
LC
15510@item @code{specifications} (default: @code{#~'()})
15511A gexp (@pxref{G-Expressions}) that evaluates to a list of specifications,
15512where a specification is an association list
a7cf4eb6
ML
15513(@pxref{Associations Lists,,, guile, GNU Guile Reference Manual}) whose
15514keys are keywords (@code{#:keyword-example}) as shown in the example
15515above.
15516
15517@item @code{use-substitutes?} (default: @code{#f})
15518This allows using substitutes to avoid building every dependencies of a job
15519from source.
15520
15521@item @code{one-shot?} (default: @code{#f})
15522Only evaluate specifications and build derivations once.
379b6ba5 15523
c800fd56
MO
15524@item @code{fallback?} (default: @code{#f})
15525When substituting a pre-built binary fails, fall back to building
15526packages locally.
15527
eb122280
MO
15528@item @code{load-path} (default: @code{'()})
15529This allows users to define their own packages and make them visible to
15530cuirass as in @command{guix build} command.
15531
379b6ba5
LC
15532@item @code{cuirass} (default: @code{cuirass})
15533The Cuirass package to use.
a7cf4eb6
ML
15534@end table
15535@end deftp
eb419bc9 15536
bfbf6e1e
MO
15537@node Power management Services
15538@subsubsection Power management Services
15539
15540@cindex power management with TLP
15541The @code{(gnu services pm)} module provides a Guix service definition
15542for the Linux power management tool TLP.
15543
15544TLP enables various powersaving modes in userspace and kernel.
15545Contrary to @code{upower-service}, it is not a passive,
15546monitoring tool, as it will apply custom settings each time a new power
15547source is detected. More information can be found at
15548@uref{http://linrunner.de/en/tlp/tlp.html, TLP home page}.
15549
15550@deffn {Scheme Variable} tlp-service-type
15551The service type for the TLP tool. Its value should be a valid
3d3c5650
LC
15552TLP configuration (see below). To use the default settings, simply
15553write:
bfbf6e1e 15554@example
3d3c5650 15555(service tlp-service-type)
bfbf6e1e
MO
15556@end example
15557@end deffn
15558
15559By default TLP does not need much configuration but most TLP parameters
15560can be tweaked using @code{tlp-configuration}.
15561
15562Each parameter definition is preceded by its type; for example,
15563@samp{boolean foo} indicates that the @code{foo} parameter
15564should be specified as a boolean. Types starting with
15565@code{maybe-} denote parameters that won't show up in TLP config file
15566when their value is @code{'disabled}.
15567
15568@c The following documentation was initially generated by
15569@c (generate-tlp-documentation) in (gnu services pm). Manually maintained
15570@c documentation is better, so we shouldn't hesitate to edit below as
15571@c needed. However if the change you want to make to this documentation
15572@c can be done in an automated way, it's probably easier to change
15573@c (generate-documentation) than to make it below and have to deal with
15574@c the churn as TLP updates.
15575
15576Available @code{tlp-configuration} fields are:
15577
15578@deftypevr {@code{tlp-configuration} parameter} package tlp
15579The TLP package.
15580
15581@end deftypevr
15582
15583@deftypevr {@code{tlp-configuration} parameter} boolean tlp-enable?
15584Set to true if you wish to enable TLP.
15585
15586Defaults to @samp{#t}.
15587
15588@end deftypevr
15589
15590@deftypevr {@code{tlp-configuration} parameter} string tlp-default-mode
15591Default mode when no power supply can be detected. Alternatives are AC
15592and BAT.
15593
15594Defaults to @samp{"AC"}.
15595
15596@end deftypevr
15597
15598@deftypevr {@code{tlp-configuration} parameter} non-negative-integer disk-idle-secs-on-ac
15599Number of seconds Linux kernel has to wait after the disk goes idle,
15600before syncing on AC.
15601
15602Defaults to @samp{0}.
15603
15604@end deftypevr
15605
15606@deftypevr {@code{tlp-configuration} parameter} non-negative-integer disk-idle-secs-on-bat
15607Same as @code{disk-idle-ac} but on BAT mode.
15608
15609Defaults to @samp{2}.
15610
15611@end deftypevr
15612
15613@deftypevr {@code{tlp-configuration} parameter} non-negative-integer max-lost-work-secs-on-ac
15614Dirty pages flushing periodicity, expressed in seconds.
15615
15616Defaults to @samp{15}.
15617
15618@end deftypevr
15619
15620@deftypevr {@code{tlp-configuration} parameter} non-negative-integer max-lost-work-secs-on-bat
15621Same as @code{max-lost-work-secs-on-ac} but on BAT mode.
15622
15623Defaults to @samp{60}.
15624
15625@end deftypevr
15626
15627@deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list cpu-scaling-governor-on-ac
15628CPU frequency scaling governor on AC mode. With intel_pstate driver,
15629alternatives are powersave and performance. With acpi-cpufreq driver,
15630alternatives are ondemand, powersave, performance and conservative.
15631
15632Defaults to @samp{disabled}.
15633
15634@end deftypevr
15635
15636@deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list cpu-scaling-governor-on-bat
15637Same as @code{cpu-scaling-governor-on-ac} but on BAT mode.
15638
15639Defaults to @samp{disabled}.
15640
15641@end deftypevr
15642
15643@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-min-freq-on-ac
15644Set the min available frequency for the scaling governor on AC.
15645
15646Defaults to @samp{disabled}.
15647
15648@end deftypevr
15649
15650@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-max-freq-on-ac
15651Set the max available frequency for the scaling governor on AC.
15652
15653Defaults to @samp{disabled}.
15654
15655@end deftypevr
15656
15657@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-min-freq-on-bat
15658Set the min available frequency for the scaling governor on BAT.
15659
15660Defaults to @samp{disabled}.
15661
15662@end deftypevr
15663
15664@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-max-freq-on-bat
15665Set the max available frequency for the scaling governor on BAT.
15666
15667Defaults to @samp{disabled}.
15668
15669@end deftypevr
15670
15671@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-min-perf-on-ac
15672Limit the min P-state to control the power dissipation of the CPU, in AC
15673mode. Values are stated as a percentage of the available performance.
15674
15675Defaults to @samp{disabled}.
15676
15677@end deftypevr
15678
15679@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-max-perf-on-ac
15680Limit the max P-state to control the power dissipation of the CPU, in AC
15681mode. Values are stated as a percentage of the available performance.
15682
15683Defaults to @samp{disabled}.
15684
15685@end deftypevr
15686
15687@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-min-perf-on-bat
15688Same as @code{cpu-min-perf-on-ac} on BAT mode.
15689
15690Defaults to @samp{disabled}.
15691
15692@end deftypevr
15693
15694@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-max-perf-on-bat
15695Same as @code{cpu-max-perf-on-ac} on BAT mode.
15696
15697Defaults to @samp{disabled}.
15698
15699@end deftypevr
15700
15701@deftypevr {@code{tlp-configuration} parameter} maybe-boolean cpu-boost-on-ac?
15702Enable CPU turbo boost feature on AC mode.
15703
15704Defaults to @samp{disabled}.
15705
15706@end deftypevr
15707
15708@deftypevr {@code{tlp-configuration} parameter} maybe-boolean cpu-boost-on-bat?
15709Same as @code{cpu-boost-on-ac?} on BAT mode.
15710
15711Defaults to @samp{disabled}.
15712
15713@end deftypevr
15714
15715@deftypevr {@code{tlp-configuration} parameter} boolean sched-powersave-on-ac?
15716Allow Linux kernel to minimize the number of CPU cores/hyper-threads
15717used under light load conditions.
15718
15719Defaults to @samp{#f}.
15720
15721@end deftypevr
15722
15723@deftypevr {@code{tlp-configuration} parameter} boolean sched-powersave-on-bat?
15724Same as @code{sched-powersave-on-ac?} but on BAT mode.
15725
15726Defaults to @samp{#t}.
15727
15728@end deftypevr
15729
15730@deftypevr {@code{tlp-configuration} parameter} boolean nmi-watchdog?
15731Enable Linux kernel NMI watchdog.
15732
15733Defaults to @samp{#f}.
15734
15735@end deftypevr
15736
15737@deftypevr {@code{tlp-configuration} parameter} maybe-string phc-controls
15738For Linux kernels with PHC patch applied, change CPU voltages. An
15739example value would be @samp{"F:V F:V F:V F:V"}.
15740
15741Defaults to @samp{disabled}.
15742
15743@end deftypevr
15744
15745@deftypevr {@code{tlp-configuration} parameter} string energy-perf-policy-on-ac
15746Set CPU performance versus energy saving policy on AC. Alternatives are
15747performance, normal, powersave.
15748
15749Defaults to @samp{"performance"}.
15750
15751@end deftypevr
15752
15753@deftypevr {@code{tlp-configuration} parameter} string energy-perf-policy-on-bat
15754Same as @code{energy-perf-policy-ac} but on BAT mode.
15755
15756Defaults to @samp{"powersave"}.
15757
15758@end deftypevr
15759
15760@deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disks-devices
15761Hard disk devices.
15762
15763@end deftypevr
15764
15765@deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disk-apm-level-on-ac
15766Hard disk advanced power management level.
15767
15768@end deftypevr
15769
15770@deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disk-apm-level-on-bat
15771Same as @code{disk-apm-bat} but on BAT mode.
15772
15773@end deftypevr
15774
15775@deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-spindown-timeout-on-ac
15776Hard disk spin down timeout. One value has to be specified for each
15777declared hard disk.
15778
15779Defaults to @samp{disabled}.
15780
15781@end deftypevr
15782
15783@deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-spindown-timeout-on-bat
15784Same as @code{disk-spindown-timeout-on-ac} but on BAT mode.
15785
15786Defaults to @samp{disabled}.
15787
15788@end deftypevr
15789
15790@deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-iosched
15791Select IO scheduler for disk devices. One value has to be specified for
15792each declared hard disk. Example alternatives are cfq, deadline and
15793noop.
15794
15795Defaults to @samp{disabled}.
15796
15797@end deftypevr
15798
15799@deftypevr {@code{tlp-configuration} parameter} string sata-linkpwr-on-ac
15800SATA aggressive link power management (ALPM) level. Alternatives are
15801min_power, medium_power, max_performance.
15802
15803Defaults to @samp{"max_performance"}.
15804
15805@end deftypevr
15806
15807@deftypevr {@code{tlp-configuration} parameter} string sata-linkpwr-on-bat
15808Same as @code{sata-linkpwr-ac} but on BAT mode.
15809
15810Defaults to @samp{"min_power"}.
15811
15812@end deftypevr
15813
15814@deftypevr {@code{tlp-configuration} parameter} maybe-string sata-linkpwr-blacklist
15815Exclude specified SATA host devices for link power management.
15816
15817Defaults to @samp{disabled}.
15818
15819@end deftypevr
15820
15821@deftypevr {@code{tlp-configuration} parameter} maybe-on-off-boolean ahci-runtime-pm-on-ac?
15822Enable Runtime Power Management for AHCI controller and disks on AC
15823mode.
15824
15825Defaults to @samp{disabled}.
15826
15827@end deftypevr
15828
15829@deftypevr {@code{tlp-configuration} parameter} maybe-on-off-boolean ahci-runtime-pm-on-bat?
15830Same as @code{ahci-runtime-pm-on-ac} on BAT mode.
15831
15832Defaults to @samp{disabled}.
15833
15834@end deftypevr
15835
15836@deftypevr {@code{tlp-configuration} parameter} non-negative-integer ahci-runtime-pm-timeout
15837Seconds of inactivity before disk is suspended.
15838
15839Defaults to @samp{15}.
15840
15841@end deftypevr
15842
15843@deftypevr {@code{tlp-configuration} parameter} string pcie-aspm-on-ac
15844PCI Express Active State Power Management level. Alternatives are
15845default, performance, powersave.
15846
15847Defaults to @samp{"performance"}.
15848
15849@end deftypevr
15850
15851@deftypevr {@code{tlp-configuration} parameter} string pcie-aspm-on-bat
15852Same as @code{pcie-aspm-ac} but on BAT mode.
15853
15854Defaults to @samp{"powersave"}.
15855
15856@end deftypevr
15857
15858@deftypevr {@code{tlp-configuration} parameter} string radeon-power-profile-on-ac
15859Radeon graphics clock speed level. Alternatives are low, mid, high,
15860auto, default.
15861
15862Defaults to @samp{"high"}.
15863
15864@end deftypevr
15865
15866@deftypevr {@code{tlp-configuration} parameter} string radeon-power-profile-on-bat
15867Same as @code{radeon-power-ac} but on BAT mode.
15868
15869Defaults to @samp{"low"}.
15870
15871@end deftypevr
15872
15873@deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-state-on-ac
15874Radeon dynamic power management method (DPM). Alternatives are battery,
15875performance.
15876
15877Defaults to @samp{"performance"}.
15878
15879@end deftypevr
15880
15881@deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-state-on-bat
15882Same as @code{radeon-dpm-state-ac} but on BAT mode.
15883
15884Defaults to @samp{"battery"}.
15885
15886@end deftypevr
15887
15888@deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-perf-level-on-ac
15889Radeon DPM performance level. Alternatives are auto, low, high.
15890
15891Defaults to @samp{"auto"}.
15892
15893@end deftypevr
15894
15895@deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-perf-level-on-bat
15896Same as @code{radeon-dpm-perf-ac} but on BAT mode.
15897
15898Defaults to @samp{"auto"}.
15899
15900@end deftypevr
15901
15902@deftypevr {@code{tlp-configuration} parameter} on-off-boolean wifi-pwr-on-ac?
15903Wifi power saving mode.
15904
15905Defaults to @samp{#f}.
15906
15907@end deftypevr
15908
15909@deftypevr {@code{tlp-configuration} parameter} on-off-boolean wifi-pwr-on-bat?
15910Same as @code{wifi-power-ac?} but on BAT mode.
15911
15912Defaults to @samp{#t}.
15913
15914@end deftypevr
15915
15916@deftypevr {@code{tlp-configuration} parameter} y-n-boolean wol-disable?
15917Disable wake on LAN.
15918
15919Defaults to @samp{#t}.
15920
15921@end deftypevr
15922
15923@deftypevr {@code{tlp-configuration} parameter} non-negative-integer sound-power-save-on-ac
15924Timeout duration in seconds before activating audio power saving on
15925Intel HDA and AC97 devices. A value of 0 disables power saving.
15926
15927Defaults to @samp{0}.
15928
15929@end deftypevr
15930
15931@deftypevr {@code{tlp-configuration} parameter} non-negative-integer sound-power-save-on-bat
15932Same as @code{sound-powersave-ac} but on BAT mode.
15933
15934Defaults to @samp{1}.
15935
15936@end deftypevr
15937
15938@deftypevr {@code{tlp-configuration} parameter} y-n-boolean sound-power-save-controller?
15939Disable controller in powersaving mode on Intel HDA devices.
15940
15941Defaults to @samp{#t}.
15942
15943@end deftypevr
15944
15945@deftypevr {@code{tlp-configuration} parameter} boolean bay-poweroff-on-bat?
15946Enable optical drive in UltraBay/MediaBay on BAT mode. Drive can be
15947powered on again by releasing (and reinserting) the eject lever or by
15948pressing the disc eject button on newer models.
15949
15950Defaults to @samp{#f}.
15951
15952@end deftypevr
15953
15954@deftypevr {@code{tlp-configuration} parameter} string bay-device
15955Name of the optical drive device to power off.
15956
15957Defaults to @samp{"sr0"}.
15958
15959@end deftypevr
15960
15961@deftypevr {@code{tlp-configuration} parameter} string runtime-pm-on-ac
15962Runtime Power Management for PCI(e) bus devices. Alternatives are on
15963and auto.
15964
15965Defaults to @samp{"on"}.
15966
15967@end deftypevr
15968
15969@deftypevr {@code{tlp-configuration} parameter} string runtime-pm-on-bat
15970Same as @code{runtime-pm-ac} but on BAT mode.
15971
15972Defaults to @samp{"auto"}.
15973
15974@end deftypevr
15975
15976@deftypevr {@code{tlp-configuration} parameter} boolean runtime-pm-all?
15977Runtime Power Management for all PCI(e) bus devices, except blacklisted
15978ones.
15979
15980Defaults to @samp{#t}.
15981
15982@end deftypevr
15983
15984@deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list runtime-pm-blacklist
9fc221b5 15985Exclude specified PCI(e) device addresses from Runtime Power Management.
bfbf6e1e
MO
15986
15987Defaults to @samp{disabled}.
15988
15989@end deftypevr
15990
15991@deftypevr {@code{tlp-configuration} parameter} space-separated-string-list runtime-pm-driver-blacklist
15992Exclude PCI(e) devices assigned to the specified drivers from Runtime
15993Power Management.
15994
15995@end deftypevr
15996
15997@deftypevr {@code{tlp-configuration} parameter} boolean usb-autosuspend?
15998Enable USB autosuspend feature.
15999
16000Defaults to @samp{#t}.
16001
16002@end deftypevr
16003
16004@deftypevr {@code{tlp-configuration} parameter} maybe-string usb-blacklist
16005Exclude specified devices from USB autosuspend.
16006
16007Defaults to @samp{disabled}.
16008
16009@end deftypevr
16010
16011@deftypevr {@code{tlp-configuration} parameter} boolean usb-blacklist-wwan?
16012Exclude WWAN devices from USB autosuspend.
16013
16014Defaults to @samp{#t}.
16015
16016@end deftypevr
16017
16018@deftypevr {@code{tlp-configuration} parameter} maybe-string usb-whitelist
16019Include specified devices into USB autosuspend, even if they are already
16020excluded by the driver or via @code{usb-blacklist-wwan?}.
16021
16022Defaults to @samp{disabled}.
16023
16024@end deftypevr
16025
16026@deftypevr {@code{tlp-configuration} parameter} maybe-boolean usb-autosuspend-disable-on-shutdown?
16027Enable USB autosuspend before shutdown.
16028
16029Defaults to @samp{disabled}.
16030
16031@end deftypevr
16032
16033@deftypevr {@code{tlp-configuration} parameter} boolean restore-device-state-on-startup?
16034Restore radio device state (bluetooth, wifi, wwan) from previous
16035shutdown on system startup.
16036
16037Defaults to @samp{#f}.
16038
16039@end deftypevr
16040
d7fa39cc
CAW
16041
16042The @code{(gnu services pm)} module provides an interface to
16043thermald, a CPU frequency scaling service which helps prevent overheating.
16044
16045@defvr {Scheme Variable} thermald-service-type
16046This is the service type for
16047@uref{https://01.org/linux-thermal-daemon/, thermald}, the Linux
16048Thermal Daemon, which is responsible for controlling the thermal state
16049of processors and preventing overheating.
16050@end defvr
16051
16052@deftp {Data Type} thermald-configuration
16053Data type representing the configuration of @code{thermald-service-type}.
16054
16055@table @asis
16056@item @code{ignore-cpuid-check?} (default: @code{#f})
16057Ignore cpuid check for supported CPU models.
16058
16059@item @code{thermald} (default: @var{thermald})
16060Package object of thermald.
16061
16062@end table
16063@end deftp
16064
06465d2b
PM
16065@node Audio Services
16066@subsubsection Audio Services
16067
16068The @code{(gnu services audio)} module provides a service to start MPD
16069(the Music Player Daemon).
16070
16071@cindex mpd
16072@subsubheading Music Player Daemon
16073
16074The Music Player Daemon (MPD) is a service that can play music while
16075being controlled from the local machine or over the network by a variety
16076of clients.
16077
16078The following example shows how one might run @code{mpd} as user
16079@code{"bob"} on port @code{6666}. It uses pulseaudio for output.
16080
16081@example
16082(service mpd-service-type
16083 (mpd-configuration
16084 (user "bob")
16085 (port "6666")))
16086@end example
16087
16088@defvr {Scheme Variable} mpd-service-type
16089The service type for @command{mpd}
16090@end defvr
16091
16092@deftp {Data Type} mpd-configuration
16093Data type representing the configuration of @command{mpd}.
16094
16095@table @asis
16096@item @code{user} (default: @code{"mpd"})
16097The user to run mpd as.
16098
16099@item @code{music-dir} (default: @code{"~/Music"})
16100The directory to scan for music files.
16101
16102@item @code{playlist-dir} (default: @code{"~/.mpd/playlists"})
16103The directory to store playlists.
16104
06465d2b
PM
16105@item @code{port} (default: @code{"6600"})
16106The port to run mpd on.
16107
16108@item @code{address} (default: @code{"any"})
16109The address that mpd will bind to. To use a Unix domain socket,
16110an absolute path can be specified here.
16111
16112@end table
16113@end deftp
d7fa39cc 16114
e6051057
RM
16115@node Virtualization Services
16116@subsubsection Virtualization services
16117The @code{(gnu services virtualization)} module provides services for
16118the libvirt and virtlog daemons.
16119
16120@subsubheading Libvirt daemon
16121@code{libvirtd} is the server side daemon component of the libvirt
16122virtualization management system. This daemon runs on host servers
16123and performs required management tasks for virtualized guests.
16124
16125@deffn {Scheme Variable} libvirt-service-type
16126This is the type of the @uref{https://libvirt.org, libvirt daemon}.
16127Its value must be a @code{libvirt-configuration}.
16128
16129@example
16130(service libvirt-service-type
16131 (libvirt-configuration
16132 (unix-sock-group "libvirt")
16133 (tls-port "16555")))
16134@end example
16135@end deffn
16136
16137@c Auto-generated with (generate-libvirt-documentation)
16138Available @code{libvirt-configuration} fields are:
16139
16140@deftypevr {@code{libvirt-configuration} parameter} package libvirt
16141Libvirt package.
16142
16143@end deftypevr
16144
16145@deftypevr {@code{libvirt-configuration} parameter} boolean listen-tls?
16146Flag listening for secure TLS connections on the public TCP/IP port.
16147must set @code{listen} for this to have any effect.
16148
16149It is necessary to setup a CA and issue server certificates before using
16150this capability.
16151
16152Defaults to @samp{#t}.
16153
16154@end deftypevr
16155
16156@deftypevr {@code{libvirt-configuration} parameter} boolean listen-tcp?
16157Listen for unencrypted TCP connections on the public TCP/IP port. must
16158set @code{listen} for this to have any effect.
16159
16160Using the TCP socket requires SASL authentication by default. Only SASL
16161mechanisms which support data encryption are allowed. This is
16162DIGEST_MD5 and GSSAPI (Kerberos5)
16163
16164Defaults to @samp{#f}.
16165
16166@end deftypevr
16167
16168@deftypevr {@code{libvirt-configuration} parameter} string tls-port
16169Port for accepting secure TLS connections This can be a port number, or
16170service name
16171
16172Defaults to @samp{"16514"}.
16173
16174@end deftypevr
16175
16176@deftypevr {@code{libvirt-configuration} parameter} string tcp-port
16177Port for accepting insecure TCP connections This can be a port number,
16178or service name
16179
16180Defaults to @samp{"16509"}.
16181
16182@end deftypevr
16183
16184@deftypevr {@code{libvirt-configuration} parameter} string listen-addr
16185IP address or hostname used for client connections.
16186
16187Defaults to @samp{"0.0.0.0"}.
16188
16189@end deftypevr
16190
16191@deftypevr {@code{libvirt-configuration} parameter} boolean mdns-adv?
16192Flag toggling mDNS advertisement of the libvirt service.
16193
16194Alternatively can disable for all services on a host by stopping the
16195Avahi daemon.
16196
16197Defaults to @samp{#f}.
16198
16199@end deftypevr
16200
16201@deftypevr {@code{libvirt-configuration} parameter} string mdns-name
16202Default mDNS advertisement name. This must be unique on the immediate
16203broadcast network.
16204
16205Defaults to @samp{"Virtualization Host <hostname>"}.
16206
16207@end deftypevr
16208
16209@deftypevr {@code{libvirt-configuration} parameter} string unix-sock-group
16210UNIX domain socket group ownership. This can be used to allow a
16211'trusted' set of users access to management capabilities without
16212becoming root.
16213
16214Defaults to @samp{"root"}.
16215
16216@end deftypevr
16217
16218@deftypevr {@code{libvirt-configuration} parameter} string unix-sock-ro-perms
16219UNIX socket permissions for the R/O socket. This is used for monitoring
16220VM status only.
16221
16222Defaults to @samp{"0777"}.
16223
16224@end deftypevr
16225
16226@deftypevr {@code{libvirt-configuration} parameter} string unix-sock-rw-perms
16227UNIX socket permissions for the R/W socket. Default allows only root.
16228If PolicyKit is enabled on the socket, the default will change to allow
16229everyone (eg, 0777)
16230
16231Defaults to @samp{"0770"}.
16232
16233@end deftypevr
16234
16235@deftypevr {@code{libvirt-configuration} parameter} string unix-sock-admin-perms
16236UNIX socket permissions for the admin socket. Default allows only owner
16237(root), do not change it unless you are sure to whom you are exposing
16238the access to.
16239
16240Defaults to @samp{"0777"}.
16241
16242@end deftypevr
16243
16244@deftypevr {@code{libvirt-configuration} parameter} string unix-sock-dir
16245The directory in which sockets will be found/created.
16246
16247Defaults to @samp{"/var/run/libvirt"}.
16248
16249@end deftypevr
16250
16251@deftypevr {@code{libvirt-configuration} parameter} string auth-unix-ro
16252Authentication scheme for UNIX read-only sockets. By default socket
16253permissions allow anyone to connect
16254
16255Defaults to @samp{"polkit"}.
16256
16257@end deftypevr
16258
16259@deftypevr {@code{libvirt-configuration} parameter} string auth-unix-rw
16260Authentication scheme for UNIX read-write sockets. By default socket
16261permissions only allow root. If PolicyKit support was compiled into
16262libvirt, the default will be to use 'polkit' auth.
16263
16264Defaults to @samp{"polkit"}.
16265
16266@end deftypevr
16267
16268@deftypevr {@code{libvirt-configuration} parameter} string auth-tcp
16269Authentication scheme for TCP sockets. If you don't enable SASL, then
16270all TCP traffic is cleartext. Don't do this outside of a dev/test
16271scenario.
16272
16273Defaults to @samp{"sasl"}.
16274
16275@end deftypevr
16276
16277@deftypevr {@code{libvirt-configuration} parameter} string auth-tls
16278Authentication scheme for TLS sockets. TLS sockets already have
16279encryption provided by the TLS layer, and limited authentication is done
16280by certificates.
16281
16282It is possible to make use of any SASL authentication mechanism as well,
16283by using 'sasl' for this option
16284
16285Defaults to @samp{"none"}.
16286
16287@end deftypevr
16288
16289@deftypevr {@code{libvirt-configuration} parameter} optional-list access-drivers
16290API access control scheme.
16291
16292By default an authenticated user is allowed access to all APIs. Access
16293drivers can place restrictions on this.
16294
16295Defaults to @samp{()}.
16296
16297@end deftypevr
16298
16299@deftypevr {@code{libvirt-configuration} parameter} string key-file
16300Server key file path. If set to an empty string, then no private key is
16301loaded.
16302
16303Defaults to @samp{""}.
16304
16305@end deftypevr
16306
16307@deftypevr {@code{libvirt-configuration} parameter} string cert-file
16308Server key file path. If set to an empty string, then no certificate is
16309loaded.
16310
16311Defaults to @samp{""}.
16312
16313@end deftypevr
16314
16315@deftypevr {@code{libvirt-configuration} parameter} string ca-file
16316Server key file path. If set to an empty string, then no CA certificate
16317is loaded.
16318
16319Defaults to @samp{""}.
16320
16321@end deftypevr
16322
16323@deftypevr {@code{libvirt-configuration} parameter} string crl-file
16324Certificate revocation list path. If set to an empty string, then no
16325CRL is loaded.
16326
16327Defaults to @samp{""}.
16328
16329@end deftypevr
16330
16331@deftypevr {@code{libvirt-configuration} parameter} boolean tls-no-sanity-cert
16332Disable verification of our own server certificates.
16333
16334When libvirtd starts it performs some sanity checks against its own
16335certificates.
16336
16337Defaults to @samp{#f}.
16338
16339@end deftypevr
16340
16341@deftypevr {@code{libvirt-configuration} parameter} boolean tls-no-verify-cert
16342Disable verification of client certificates.
16343
16344Client certificate verification is the primary authentication mechanism.
16345Any client which does not present a certificate signed by the CA will be
16346rejected.
16347
16348Defaults to @samp{#f}.
16349
16350@end deftypevr
16351
16352@deftypevr {@code{libvirt-configuration} parameter} optional-list tls-allowed-dn-list
16353Whitelist of allowed x509 Distinguished Name.
16354
16355Defaults to @samp{()}.
16356
16357@end deftypevr
16358
16359@deftypevr {@code{libvirt-configuration} parameter} optional-list sasl-allowed-usernames
16360Whitelist of allowed SASL usernames. The format for username depends on
16361the SASL authentication mechanism.
16362
16363Defaults to @samp{()}.
16364
16365@end deftypevr
16366
16367@deftypevr {@code{libvirt-configuration} parameter} string tls-priority
16368Override the compile time default TLS priority string. The default is
16369usually "NORMAL" unless overridden at build time. Only set this is it
16370is desired for libvirt to deviate from the global default settings.
16371
16372Defaults to @samp{"NORMAL"}.
16373
16374@end deftypevr
16375
16376@deftypevr {@code{libvirt-configuration} parameter} integer max-clients
16377Maximum number of concurrent client connections to allow over all
16378sockets combined.
16379
16380Defaults to @samp{5000}.
16381
16382@end deftypevr
16383
16384@deftypevr {@code{libvirt-configuration} parameter} integer max-queued-clients
16385Maximum length of queue of connections waiting to be accepted by the
16386daemon. Note, that some protocols supporting retransmission may obey
16387this so that a later reattempt at connection succeeds.
16388
16389Defaults to @samp{1000}.
16390
16391@end deftypevr
16392
16393@deftypevr {@code{libvirt-configuration} parameter} integer max-anonymous-clients
16394Maximum length of queue of accepted but not yet authenticated clients.
16395Set this to zero to turn this feature off
16396
16397Defaults to @samp{20}.
16398
16399@end deftypevr
16400
16401@deftypevr {@code{libvirt-configuration} parameter} integer min-workers
16402Number of workers to start up initially.
16403
16404Defaults to @samp{5}.
16405
16406@end deftypevr
16407
16408@deftypevr {@code{libvirt-configuration} parameter} integer max-workers
16409Maximum number of worker threads.
16410
16411If the number of active clients exceeds @code{min-workers}, then more
16412threads are spawned, up to max_workers limit. Typically you'd want
16413max_workers to equal maximum number of clients allowed.
16414
16415Defaults to @samp{20}.
16416
16417@end deftypevr
16418
16419@deftypevr {@code{libvirt-configuration} parameter} integer prio-workers
16420Number of priority workers. If all workers from above pool are stuck,
16421some calls marked as high priority (notably domainDestroy) can be
16422executed in this pool.
16423
16424Defaults to @samp{5}.
16425
16426@end deftypevr
16427
16428@deftypevr {@code{libvirt-configuration} parameter} integer max-requests
16429Total global limit on concurrent RPC calls.
16430
16431Defaults to @samp{20}.
16432
16433@end deftypevr
16434
16435@deftypevr {@code{libvirt-configuration} parameter} integer max-client-requests
16436Limit on concurrent requests from a single client connection. To avoid
16437one client monopolizing the server this should be a small fraction of
16438the global max_requests and max_workers parameter.
16439
16440Defaults to @samp{5}.
16441
16442@end deftypevr
16443
16444@deftypevr {@code{libvirt-configuration} parameter} integer admin-min-workers
16445Same as @code{min-workers} but for the admin interface.
16446
16447Defaults to @samp{1}.
16448
16449@end deftypevr
16450
16451@deftypevr {@code{libvirt-configuration} parameter} integer admin-max-workers
16452Same as @code{max-workers} but for the admin interface.
16453
16454Defaults to @samp{5}.
16455
16456@end deftypevr
16457
16458@deftypevr {@code{libvirt-configuration} parameter} integer admin-max-clients
16459Same as @code{max-clients} but for the admin interface.
16460
16461Defaults to @samp{5}.
16462
16463@end deftypevr
16464
16465@deftypevr {@code{libvirt-configuration} parameter} integer admin-max-queued-clients
16466Same as @code{max-queued-clients} but for the admin interface.
16467
16468Defaults to @samp{5}.
16469
16470@end deftypevr
16471
16472@deftypevr {@code{libvirt-configuration} parameter} integer admin-max-client-requests
16473Same as @code{max-client-requests} but for the admin interface.
16474
16475Defaults to @samp{5}.
16476
16477@end deftypevr
16478
16479@deftypevr {@code{libvirt-configuration} parameter} integer log-level
16480Logging level. 4 errors, 3 warnings, 2 information, 1 debug.
16481
16482Defaults to @samp{3}.
16483
16484@end deftypevr
16485
16486@deftypevr {@code{libvirt-configuration} parameter} string log-filters
16487Logging filters.
16488
16489A filter allows to select a different logging level for a given category
16490of logs The format for a filter is one of:
16491
16492@itemize @bullet
16493@item
16494x:name
16495
16496@item
16497x:+name
16498
16499@end itemize
16500
16501where @code{name} is a string which is matched against the category
16502given in the @code{VIR_LOG_INIT()} at the top of each libvirt source
16503file, e.g., "remote", "qemu", or "util.json" (the name in the filter can
16504be a substring of the full category name, in order to match multiple
16505similar categories), the optional "+" prefix tells libvirt to log stack
16506trace for each message matching name, and @code{x} is the minimal level
16507where matching messages should be logged:
16508
16509@itemize @bullet
16510@item
165111: DEBUG
16512
16513@item
165142: INFO
16515
16516@item
165173: WARNING
16518
16519@item
165204: ERROR
16521
16522@end itemize
16523
16524Multiple filters can be defined in a single filters statement, they just
16525need to be separated by spaces.
16526
16527Defaults to @samp{"3:remote 4:event"}.
16528
16529@end deftypevr
16530
16531@deftypevr {@code{libvirt-configuration} parameter} string log-outputs
16532Logging outputs.
16533
16534An output is one of the places to save logging information The format
16535for an output can be:
16536
16537@table @code
16538@item x:stderr
16539output goes to stderr
16540
16541@item x:syslog:name
16542use syslog for the output and use the given name as the ident
16543
16544@item x:file:file_path
16545output to a file, with the given filepath
16546
16547@item x:journald
16548output to journald logging system
16549
16550@end table
16551
16552In all case the x prefix is the minimal level, acting as a filter
16553
16554@itemize @bullet
16555@item
165561: DEBUG
16557
16558@item
165592: INFO
16560
16561@item
165623: WARNING
16563
16564@item
165654: ERROR
16566
16567@end itemize
16568
16569Multiple outputs can be defined, they just need to be separated by
16570spaces.
16571
16572Defaults to @samp{"3:stderr"}.
16573
16574@end deftypevr
16575
16576@deftypevr {@code{libvirt-configuration} parameter} integer audit-level
16577Allows usage of the auditing subsystem to be altered
16578
16579@itemize @bullet
16580@item
165810: disable all auditing
16582
16583@item
165841: enable auditing, only if enabled on host
16585
16586@item
165872: enable auditing, and exit if disabled on host.
16588
16589@end itemize
16590
16591Defaults to @samp{1}.
16592
16593@end deftypevr
16594
16595@deftypevr {@code{libvirt-configuration} parameter} boolean audit-logging
16596Send audit messages via libvirt logging infrastructure.
16597
16598Defaults to @samp{#f}.
16599
16600@end deftypevr
16601
16602@deftypevr {@code{libvirt-configuration} parameter} optional-string host-uuid
16603Host UUID. UUID must not have all digits be the same.
16604
16605Defaults to @samp{""}.
16606
16607@end deftypevr
16608
16609@deftypevr {@code{libvirt-configuration} parameter} string host-uuid-source
16610Source to read host UUID.
16611
16612@itemize @bullet
16613@item
16614@code{smbios}: fetch the UUID from @code{dmidecode -s system-uuid}
16615
16616@item
16617@code{machine-id}: fetch the UUID from @code{/etc/machine-id}
16618
16619@end itemize
16620
16621If @code{dmidecode} does not provide a valid UUID a temporary UUID will
16622be generated.
16623
16624Defaults to @samp{"smbios"}.
16625
16626@end deftypevr
16627
16628@deftypevr {@code{libvirt-configuration} parameter} integer keepalive-interval
16629A keepalive message is sent to a client after @code{keepalive_interval}
16630seconds of inactivity to check if the client is still responding. If
16631set to -1, libvirtd will never send keepalive requests; however clients
16632can still send them and the daemon will send responses.
16633
16634Defaults to @samp{5}.
16635
16636@end deftypevr
16637
16638@deftypevr {@code{libvirt-configuration} parameter} integer keepalive-count
16639Maximum number of keepalive messages that are allowed to be sent to the
16640client without getting any response before the connection is considered
16641broken.
16642
16643In other words, the connection is automatically closed approximately
16644after @code{keepalive_interval * (keepalive_count + 1)} seconds since
16645the last message received from the client. When @code{keepalive-count}
16646is set to 0, connections will be automatically closed after
16647@code{keepalive-interval} seconds of inactivity without sending any
16648keepalive messages.
16649
16650Defaults to @samp{5}.
16651
16652@end deftypevr
16653
16654@deftypevr {@code{libvirt-configuration} parameter} integer admin-keepalive-interval
16655Same as above but for admin interface.
16656
16657Defaults to @samp{5}.
16658
16659@end deftypevr
16660
16661@deftypevr {@code{libvirt-configuration} parameter} integer admin-keepalive-count
16662Same as above but for admin interface.
16663
16664Defaults to @samp{5}.
16665
16666@end deftypevr
16667
16668@deftypevr {@code{libvirt-configuration} parameter} integer ovs-timeout
16669Timeout for Open vSwitch calls.
16670
16671The @code{ovs-vsctl} utility is used for the configuration and its
16672timeout option is set by default to 5 seconds to avoid potential
16673infinite waits blocking libvirt.
16674
16675Defaults to @samp{5}.
16676
16677@end deftypevr
16678
16679@c %end of autogenerated docs
16680
16681@subsubheading Virtlog daemon
16682The virtlogd service is a server side daemon component of libvirt that is
16683used to manage logs from virtual machine consoles.
16684
16685This daemon is not used directly by libvirt client applications, rather it
16686is called on their behalf by @code{libvirtd}. By maintaining the logs in a
16687standalone daemon, the main @code{libvirtd} daemon can be restarted without
16688risk of losing logs. The @code{virtlogd} daemon has the ability to re-exec()
16689itself upon receiving @code{SIGUSR1}, to allow live upgrades without downtime.
16690
16691@deffn {Scheme Variable} virtlog-service-type
16692This is the type of the virtlog daemon.
16693Its value must be a @code{virtlog-configuration}.
16694
16695@example
16696(service virtlog-service-type
16697 (virtlog-configuration
16698 (max-clients 1000)))
16699@end example
16700@end deffn
16701
16702@deftypevr {@code{virtlog-configuration} parameter} integer log-level
16703Logging level. 4 errors, 3 warnings, 2 information, 1 debug.
16704
16705Defaults to @samp{3}.
16706
16707@end deftypevr
16708
16709@deftypevr {@code{virtlog-configuration} parameter} string log-filters
16710Logging filters.
16711
16712A filter allows to select a different logging level for a given category
16713of logs The format for a filter is one of:
16714
16715@itemize @bullet
16716@item
16717x:name
16718
16719@item
16720x:+name
16721
16722@end itemize
16723
16724where @code{name} is a string which is matched against the category
16725given in the @code{VIR_LOG_INIT()} at the top of each libvirt source
16726file, e.g., "remote", "qemu", or "util.json" (the name in the filter can
16727be a substring of the full category name, in order to match multiple
16728similar categories), the optional "+" prefix tells libvirt to log stack
16729trace for each message matching name, and @code{x} is the minimal level
16730where matching messages should be logged:
16731
16732@itemize @bullet
16733@item
167341: DEBUG
16735
16736@item
167372: INFO
16738
16739@item
167403: WARNING
16741
16742@item
167434: ERROR
16744
16745@end itemize
16746
16747Multiple filters can be defined in a single filters statement, they just
16748need to be separated by spaces.
16749
16750Defaults to @samp{"3:remote 4:event"}.
16751
16752@end deftypevr
16753
16754@deftypevr {@code{virtlog-configuration} parameter} string log-outputs
16755Logging outputs.
16756
16757An output is one of the places to save logging information The format
16758for an output can be:
16759
16760@table @code
16761@item x:stderr
16762output goes to stderr
16763
16764@item x:syslog:name
16765use syslog for the output and use the given name as the ident
16766
16767@item x:file:file_path
16768output to a file, with the given filepath
16769
16770@item x:journald
16771output to journald logging system
16772
16773@end table
16774
16775In all case the x prefix is the minimal level, acting as a filter
16776
16777@itemize @bullet
16778@item
167791: DEBUG
16780
16781@item
167822: INFO
16783
16784@item
167853: WARNING
16786
16787@item
167884: ERROR
16789
16790@end itemize
16791
16792Multiple outputs can be defined, they just need to be separated by
16793spaces.
16794
16795Defaults to @samp{"3:stderr"}.
16796
16797@end deftypevr
16798
16799@deftypevr {@code{virtlog-configuration} parameter} integer max-clients
16800Maximum number of concurrent client connections to allow over all
16801sockets combined.
16802
16803Defaults to @samp{1024}.
16804
16805@end deftypevr
16806
16807@deftypevr {@code{virtlog-configuration} parameter} integer max-size
16808Maximum file size before rolling over.
16809
16810Defaults to @samp{2MB}
16811
16812@end deftypevr
16813
16814@deftypevr {@code{virtlog-configuration} parameter} integer max-backups
16815Maximum number of backup files to keep.
16816
16817Defaults to @samp{3}
16818
16819@end deftypevr
16820
16821
eb419bc9
JD
16822@node Miscellaneous Services
16823@subsubsection Miscellaneous Services
16824
296bf4d5
SB
16825@cindex sysctl
16826@subsubheading System Control Service
16827
16828The @code{(gnu services sysctl)} provides a service to configure kernel
16829parameters at boot.
16830
16831@defvr {Scheme Variable} sysctl-service-type
16832The service type for @command{sysctl}, which modifies kernel parameters
16833under @file{/proc/sys/}. To enable IPv4 forwarding, it can be
16834instantiated as:
16835
16836@example
16837(service sysctl-service-type
16838 (sysctl-configuration
16839 (settings '(("net.ipv4.ip_forward" . "1")))))
16840@end example
16841@end defvr
16842
16843@deftp {Data Type} sysctl-configuration
16844The data type representing the configuration of @command{sysctl}.
16845
16846@table @asis
16847@item @code{sysctl} (default: @code{(file-append procps "/sbin/sysctl"})
16848The @command{sysctl} executable to use.
16849
16850@item @code{settings} (default: @code{'()})
16851An association list specifies kernel parameters and their values.
16852@end table
16853@end deftp
eb419bc9 16854
8ff4dcbe
DC
16855@cindex lirc
16856@subsubheading Lirc Service
16857
fe1a39d3
LC
16858The @code{(gnu services lirc)} module provides the following service.
16859
be1c2c54 16860@deffn {Scheme Procedure} lirc-service [#:lirc lirc] @
fe1a39d3
LC
16861 [#:device #f] [#:driver #f] [#:config-file #f] @
16862 [#:extra-options '()]
16863Return a service that runs @url{http://www.lirc.org,LIRC}, a daemon that
16864decodes infrared signals from remote controls.
16865
16866Optionally, @var{device}, @var{driver} and @var{config-file}
16867(configuration file name) may be specified. See @command{lircd} manual
16868for details.
16869
16870Finally, @var{extra-options} is a list of additional command-line options
16871passed to @command{lircd}.
16872@end deffn
16873
00f46905
DC
16874@cindex spice
16875@subsubheading Spice Service
16876
16877The @code{(gnu services spice)} module provides the following service.
16878
16879@deffn {Scheme Procedure} spice-vdagent-service [#:spice-vdagent]
16880Returns a service that runs @url{http://www.spice-space.org,VDAGENT}, a daemon
16881that enables sharing the clipboard with a vm and setting the guest display
16882resolution when the graphical console window resizes.
16883@end deffn
16884
c3d38b2b 16885@subsubsection Dictionary Services
e32171ee 16886@cindex dictionary
c3d38b2b
SB
16887The @code{(gnu services dict)} module provides the following service:
16888
16889@deffn {Scheme Procedure} dicod-service [#:config (dicod-configuration)]
16890Return a service that runs the @command{dicod} daemon, an implementation
16891of DICT server (@pxref{Dicod,,, dico, GNU Dico Manual}).
16892
16893The optional @var{config} argument specifies the configuration for
16894@command{dicod}, which should be a @code{<dicod-configuration>} object, by
16895default it serves the GNU Collaborative International Dictonary of English.
16896
16897You can add @command{open localhost} to your @file{~/.dico} file to make
16898@code{localhost} the default server for @command{dico} client
16899(@pxref{Initialization File,,, dico, GNU Dico Manual}).
16900@end deffn
16901
16902@deftp {Data Type} dicod-configuration
16903Data type representing the configuration of dicod.
16904
16905@table @asis
16906@item @code{dico} (default: @var{dico})
16907Package object of the GNU Dico dictionary server.
16908
a1b48465
LC
16909@item @code{interfaces} (default: @var{'("localhost")})
16910This is the list of IP addresses and ports and possibly socket file
16911names to listen to (@pxref{Server Settings, @code{listen} directive,,
16912dico, GNU Dico Manual}).
16913
9af7ecd9
HY
16914@item @code{handlers} (default: @var{'()})
16915List of @code{<dicod-handler>} objects denoting handlers (module instances).
16916
c3d38b2b
SB
16917@item @code{databases} (default: @var{(list %dicod-database:gcide)})
16918List of @code{<dicod-database>} objects denoting dictionaries to be served.
16919@end table
16920@end deftp
16921
9af7ecd9
HY
16922@deftp {Data Type} dicod-handler
16923Data type representing a dictionary handler (module instance).
c3d38b2b
SB
16924
16925@table @asis
16926@item @code{name}
9af7ecd9 16927Name of the handler (module instance).
c3d38b2b 16928
9af7ecd9
HY
16929@item @code{module} (default: @var{#f})
16930Name of the dicod module of the handler (instance). If it is @code{#f},
16931the module has the same name as the handler.
c3d38b2b
SB
16932(@pxref{Modules,,, dico, GNU Dico Manual}).
16933
16934@item @code{options}
16935List of strings or gexps representing the arguments for the module handler
9af7ecd9
HY
16936@end table
16937@end deftp
16938
16939@deftp {Data Type} dicod-database
16940Data type representing a dictionary database.
16941
16942@table @asis
16943@item @code{name}
16944Name of the database, will be used in DICT commands.
16945
16946@item @code{handler}
16947Name of the dicod handler (module instance) used by this database
c3d38b2b 16948(@pxref{Handlers,,, dico, GNU Dico Manual}).
9af7ecd9
HY
16949
16950@item @code{complex?} (default: @var{#f})
16951Whether the database configuration complex. The complex configuration
16952will need a corresponding @code{<dicod-handler>} object, otherwise not.
16953
16954@item @code{options}
16955List of strings or gexps representing the arguments for the database
16956(@pxref{Databases,,, dico, GNU Dico Manual}).
c3d38b2b
SB
16957@end table
16958@end deftp
16959
16960@defvr {Scheme Variable} %dicod-database:gcide
16961A @code{<dicod-database>} object serving the GNU Collaborative International
9fc221b5 16962Dictionary of English using the @code{gcide} package.
c3d38b2b 16963@end defvr
fe1a39d3 16964
9af7ecd9
HY
16965The following is an example @code{dicod-service} configuration.
16966
16967@example
16968(dicod-service #:config
16969 (dicod-configuration
16970 (handlers (list (dicod-handler
16971 (name "wordnet")
16972 (module "dictorg")
16973 (options
16974 (list #~(string-append "dbdir=" #$wordnet))))))
16975 (databases (list (dicod-database
16976 (name "wordnet")
16977 (complex? #t)
16978 (handler "wordnet")
16979 (options '("database=wn")))
16980 %dicod-database:gcide))))
16981@end example
16982
e01e2c6c 16983@subsubsection Version Control
16984
16985The @code{(gnu services version-control)} module provides the following services:
16986
16987@subsubheading Git daemon service
16988
16989@deffn {Scheme Procedure} git-daemon-service [#:config (git-daemon-configuration)]
16990
16991Return a service that runs @command{git daemon}, a simple TCP server to
9fc221b5 16992expose repositories over the Git protocol for anonymous access.
e01e2c6c 16993
16994The optional @var{config} argument should be a
16995@code{<git-daemon-configuration>} object, by default it allows read-only
16996access to exported@footnote{By creating the magic file
16997"git-daemon-export-ok" in the repository directory.} repositories under
16998@file{/srv/git}.
16999
17000@end deffn
17001
17002@deftp {Data Type} git-daemon-configuration
17003Data type representing the configuration for @code{git-daemon-service}.
17004
17005@table @asis
17006@item @code{package} (default: @var{git})
17007Package object of the Git distributed version control system.
17008
17009@item @code{export-all?} (default: @var{#f})
17010Whether to allow access for all Git repositories, even if they do not
17011have the @file{git-daemon-export-ok} file.
17012
17013@item @code{base-path} (default: @file{/srv/git})
17014Whether to remap all the path requests as relative to the given path.
17015If you run git daemon with @var{(base-path "/srv/git")} on example.com,
17016then if you later try to pull @code{git://example.com/hello.git}, git
17017daemon will interpret the path as @code{/srv/git/hello.git}.
17018
17019@item @code{user-path} (default: @var{#f})
17020Whether to allow @code{~user} notation to be used in requests. When
17021specified with empty string, requests to @code{git://host/~alice/foo} is
17022taken as a request to access @code{foo} repository in the home directory
17023of user @code{alice}. If @var{(user-path "path")} is specified, the
17024same request is taken as a request to access @code{path/foo} repository
17025in the home directory of user @code{alice}.
17026
17027@item @code{listen} (default: @var{'()})
17028Whether to listen on specific IP addresses or hostnames, defaults to
17029all.
17030
17031@item @code{port} (default: @var{#f})
17032Whether to listen on an alternative port, which defaults to 9418.
17033
17034@item @code{whitelist} (default: @var{'()})
17035If not empty, only allow access to this list of directories.
17036
17037@item @code{extra-options} (default: @var{'()})
17038Extra options will be passed to @code{git daemon}, please run
17039@command{man git-daemon} for more information.
17040
17041@end table
17042@end deftp
17043
032a2760
OP
17044@subsubheading Cgit Service
17045
17046@cindex Cgit service
17047@cindex Git, web interface
17048@uref{https://git.zx2c4.com/cgit/, Cgit} is a web frontend for Git
17049repositories written in C.
17050
17051The following example will configure the service with default values.
17052By default, Cgit can be accessed on port 80 (@code{http://localhost:80}).
17053
17054@example
17055(service nginx-service-type)
17056(service fcgiwrap-service-type)
17057(service cgit-service-type)
17058@end example
17059
17060@deftp {Data Type} cgit-configuration
17061Data type representing the configuration of Cgit.
17062This type has the following parameters:
17063
17064@table @asis
17065@item @code{config-file} (default: @code{(cgit-configuration-file)})
17066The configuration file to use for Cgit. This can be set to a
17067@dfn{cgit-configuration-file} record value, or any gexp
17068(@pxref{G-Expressions}).
17069
17070For example, to instead use a local file, the @code{local-file} function
17071can be used:
17072
17073@example
17074(service cgit-service-type
17075 (cgit-configuration
17076 (config-file (local-file "./my-cgitrc.conf"))))
17077@end example
17078
17079@item @code{package} (default: @code{cgit})
17080The Cgit package to use.
17081
17082@end table
17083@end deftp
17084
17085@deftp {Data Type} cgit-configuration-file
17086Data type representing the configuration options for Cgit.
17087This type has the following parameters:
17088
17089@table @asis
17090@item @code{css} (default: @code{"/share/cgit/cgit.css"})
17091URL which specifies the css document to include in all Cgit pages.
17092
17093@item @code{logo} (default: @code{"/share/cgit/cgit.png"})
17094URL which specifies the source of an image which will be used as a logo
17095on all Cgit pages.
17096
17097@item @code{virtual-root} (default: @code{"/"})
17098URL which, if specified, will be used as root for all Cgit links.
17099
17100@item @code{repository-directory} (default: @code{"/srv/git"})
17101Name of the directory to scan for repositories.
17102
17103@item @code{robots} (default: @code{(list "noindex" "nofollow")})
17104Text used as content for the ``robots'' meta-tag.
17105
17106@end table
17107@end deftp
17108
0ae8c15a
LC
17109@node Setuid Programs
17110@subsection Setuid Programs
17111
17112@cindex setuid programs
17113Some programs need to run with ``root'' privileges, even when they are
17114launched by unprivileged users. A notorious example is the
4d40227c
LC
17115@command{passwd} program, which users can run to change their
17116password, and which needs to access the @file{/etc/passwd} and
0ae8c15a
LC
17117@file{/etc/shadow} files---something normally restricted to root, for
17118obvious security reasons. To address that, these executables are
17119@dfn{setuid-root}, meaning that they always run with root privileges
17120(@pxref{How Change Persona,,, libc, The GNU C Library Reference Manual},
f7e4ae7f 17121for more info about the setuid mechanism.)
0ae8c15a
LC
17122
17123The store itself @emph{cannot} contain setuid programs: that would be a
17124security issue since any user on the system can write derivations that
17125populate the store (@pxref{The Store}). Thus, a different mechanism is
17126used: instead of changing the setuid bit directly on files that are in
17127the store, we let the system administrator @emph{declare} which programs
17128should be setuid root.
17129
17130The @code{setuid-programs} field of an @code{operating-system}
17131declaration contains a list of G-expressions denoting the names of
17132programs to be setuid-root (@pxref{Using the Configuration System}).
17133For instance, the @command{passwd} program, which is part of the Shadow
17134package, can be designated by this G-expression (@pxref{G-Expressions}):
17135
17136@example
17137#~(string-append #$shadow "/bin/passwd")
17138@end example
17139
17140A default set of setuid programs is defined by the
17141@code{%setuid-programs} variable of the @code{(gnu system)} module.
17142
17143@defvr {Scheme Variable} %setuid-programs
17144A list of G-expressions denoting common programs that are setuid-root.
17145
17146The list includes commands such as @command{passwd}, @command{ping},
17147@command{su}, and @command{sudo}.
17148@end defvr
17149
17150Under the hood, the actual setuid programs are created in the
17151@file{/run/setuid-programs} directory at system activation time. The
17152files in this directory refer to the ``real'' binaries, which are in the
17153store.
17154
efb5e833
LC
17155@node X.509 Certificates
17156@subsection X.509 Certificates
17157
17158@cindex HTTPS, certificates
17159@cindex X.509 certificates
17160@cindex TLS
17161Web servers available over HTTPS (that is, HTTP over the transport-layer
17162security mechanism, TLS) send client programs an @dfn{X.509 certificate}
17163that the client can then use to @emph{authenticate} the server. To do
17164that, clients verify that the server's certificate is signed by a
17165so-called @dfn{certificate authority} (CA). But to verify the CA's
17166signature, clients must have first acquired the CA's certificate.
17167
17168Web browsers such as GNU@tie{}IceCat include their own set of CA
17169certificates, such that they are able to verify CA signatures
17170out-of-the-box.
17171
17172However, most other programs that can talk HTTPS---@command{wget},
17173@command{git}, @command{w3m}, etc.---need to be told where CA
17174certificates can be found.
17175
17176@cindex @code{nss-certs}
17177In GuixSD, this is done by adding a package that provides certificates
17178to the @code{packages} field of the @code{operating-system} declaration
17179(@pxref{operating-system Reference}). GuixSD includes one such package,
17180@code{nss-certs}, which is a set of CA certificates provided as part of
17181Mozilla's Network Security Services.
17182
17183Note that it is @emph{not} part of @var{%base-packages}, so you need to
17184explicitly add it. The @file{/etc/ssl/certs} directory, which is where
17185most applications and libraries look for certificates by default, points
17186to the certificates installed globally.
17187
b3129f2b
LC
17188Unprivileged users, including users of Guix on a foreign distro,
17189can also install their own certificate package in
efb5e833
LC
17190their profile. A number of environment variables need to be defined so
17191that applications and libraries know where to find them. Namely, the
17192OpenSSL library honors the @code{SSL_CERT_DIR} and @code{SSL_CERT_FILE}
17193variables. Some applications add their own environment variables; for
17194instance, the Git version control system honors the certificate bundle
b3129f2b
LC
17195pointed to by the @code{GIT_SSL_CAINFO} environment variable. Thus, you
17196would typically run something like:
efb5e833 17197
b3129f2b
LC
17198@example
17199$ guix package -i nss-certs
17200$ export SSL_CERT_DIR="$HOME/.guix-profile/etc/ssl/certs"
17201$ export SSL_CERT_FILE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
17202$ export GIT_SSL_CAINFO="$SSL_CERT_FILE"
17203@end example
efb5e833 17204
63657335
RW
17205As another example, R requires the @code{CURL_CA_BUNDLE} environment
17206variable to point to a certificate bundle, so you would have to run
17207something like this:
17208
17209@example
17210$ guix package -i nss-certs
17211$ export CURL_CA_BUNDLE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
17212@end example
17213
17214For other applications you may want to look up the required environment
17215variable in the relevant documentation.
17216
17217
996ed739
LC
17218@node Name Service Switch
17219@subsection Name Service Switch
17220
17221@cindex name service switch
17222@cindex NSS
17223The @code{(gnu system nss)} module provides bindings to the
1068f26b 17224configuration file of the libc @dfn{name service switch} or @dfn{NSS}
996ed739
LC
17225(@pxref{NSS Configuration File,,, libc, The GNU C Library Reference
17226Manual}). In a nutshell, the NSS is a mechanism that allows libc to be
17227extended with new ``name'' lookup methods for system databases, which
17228includes host names, service names, user accounts, and more (@pxref{Name
17229Service Switch, System Databases and Name Service Switch,, libc, The GNU
17230C Library Reference Manual}).
17231
17232The NSS configuration specifies, for each system database, which lookup
17233method is to be used, and how the various methods are chained
17234together---for instance, under which circumstances NSS should try the
17235next method in the list. The NSS configuration is given in the
17236@code{name-service-switch} field of @code{operating-system} declarations
17237(@pxref{operating-system Reference, @code{name-service-switch}}).
17238
4c9050c6
LC
17239@cindex nss-mdns
17240@cindex .local, host name lookup
996ed739 17241As an example, the declaration below configures the NSS to use the
4c9050c6
LC
17242@uref{http://0pointer.de/lennart/projects/nss-mdns/, @code{nss-mdns}
17243back-end}, which supports host name lookups over multicast DNS (mDNS)
17244for host names ending in @code{.local}:
996ed739
LC
17245
17246@example
17247(name-service-switch
17248 (hosts (list %files ;first, check /etc/hosts
17249
17250 ;; If the above did not succeed, try
17251 ;; with 'mdns_minimal'.
17252 (name-service
17253 (name "mdns_minimal")
17254
17255 ;; 'mdns_minimal' is authoritative for
17256 ;; '.local'. When it returns "not found",
17257 ;; no need to try the next methods.
17258 (reaction (lookup-specification
17259 (not-found => return))))
17260
17261 ;; Then fall back to DNS.
17262 (name-service
17263 (name "dns"))
17264
17265 ;; Finally, try with the "full" 'mdns'.
17266 (name-service
17267 (name "mdns")))))
17268@end example
17269
1068f26b
AE
17270Do not worry: the @code{%mdns-host-lookup-nss} variable (see below)
17271contains this configuration, so you will not have to type it if all you
15137a29
LC
17272want is to have @code{.local} host lookup working.
17273
4c9050c6
LC
17274Note that, in this case, in addition to setting the
17275@code{name-service-switch} of the @code{operating-system} declaration,
cc9c1f39
LC
17276you also need to use @code{avahi-service} (@pxref{Networking Services,
17277@code{avahi-service}}), or @var{%desktop-services}, which includes it
17278(@pxref{Desktop Services}). Doing this makes @code{nss-mdns} accessible
17279to the name service cache daemon (@pxref{Base Services,
17280@code{nscd-service}}).
15137a29
LC
17281
17282For convenience, the following variables provide typical NSS
17283configurations.
17284
17285@defvr {Scheme Variable} %default-nss
17286This is the default name service switch configuration, a
17287@code{name-service-switch} object.
17288@end defvr
17289
17290@defvr {Scheme Variable} %mdns-host-lookup-nss
17291This is the name service switch configuration with support for host name
17292lookup over multicast DNS (mDNS) for host names ending in @code{.local}.
17293@end defvr
4c9050c6 17294
996ed739 17295The reference for name service switch configuration is given below. It
1068f26b 17296is a direct mapping of the configuration file format of the C library , so
996ed739
LC
17297please refer to the C library manual for more information (@pxref{NSS
17298Configuration File,,, libc, The GNU C Library Reference Manual}).
1068f26b 17299Compared to the configuration file format of libc NSS, it has the advantage
996ed739 17300not only of adding this warm parenthetic feel that we like, but also
1068f26b 17301static checks: you will know about syntax errors and typos as soon as you
996ed739
LC
17302run @command{guix system}.
17303
996ed739
LC
17304@deftp {Data Type} name-service-switch
17305
17306This is the data type representation the configuration of libc's name
17307service switch (NSS). Each field below represents one of the supported
17308system databases.
17309
17310@table @code
17311@item aliases
17312@itemx ethers
17313@itemx group
17314@itemx gshadow
17315@itemx hosts
17316@itemx initgroups
17317@itemx netgroup
17318@itemx networks
17319@itemx password
17320@itemx public-key
17321@itemx rpc
17322@itemx services
17323@itemx shadow
17324The system databases handled by the NSS. Each of these fields must be a
1068f26b 17325list of @code{<name-service>} objects (see below).
996ed739
LC
17326@end table
17327@end deftp
17328
17329@deftp {Data Type} name-service
17330
17331This is the data type representing an actual name service and the
17332associated lookup action.
17333
17334@table @code
17335@item name
17336A string denoting the name service (@pxref{Services in the NSS
17337configuration,,, libc, The GNU C Library Reference Manual}).
17338
4aee6e60
LC
17339Note that name services listed here must be visible to nscd. This is
17340achieved by passing the @code{#:name-services} argument to
17341@code{nscd-service} the list of packages providing the needed name
17342services (@pxref{Base Services, @code{nscd-service}}).
17343
996ed739
LC
17344@item reaction
17345An action specified using the @code{lookup-specification} macro
17346(@pxref{Actions in the NSS configuration,,, libc, The GNU C Library
17347Reference Manual}). For example:
17348
17349@example
17350(lookup-specification (unavailable => continue)
17351 (success => return))
17352@end example
17353@end table
17354@end deftp
0ae8c15a 17355
fd1b1fa2
LC
17356@node Initial RAM Disk
17357@subsection Initial RAM Disk
17358
e32171ee
JD
17359@cindex initrd
17360@cindex initial RAM disk
fd1b1fa2
LC
17361For bootstrapping purposes, the Linux-Libre kernel is passed an
17362@dfn{initial RAM disk}, or @dfn{initrd}. An initrd contains a temporary
1068f26b 17363root file system as well as an initialization script. The latter is
fd1b1fa2
LC
17364responsible for mounting the real root file system, and for loading any
17365kernel modules that may be needed to achieve that.
17366
17367The @code{initrd} field of an @code{operating-system} declaration allows
17368you to specify which initrd you would like to use. The @code{(gnu
47bdc5a1
MO
17369system linux-initrd)} module provides three ways to build an initrd: the
17370high-level @code{base-initrd} procedure and the low-level
17371@code{raw-initrd} and @code{expression->initrd} procedures.
fd1b1fa2
LC
17372
17373The @code{base-initrd} procedure is intended to cover most common uses.
17374For example, if you want to add a bunch of kernel modules to be loaded
17375at boot time, you can define the @code{initrd} field of the operating
17376system declaration like this:
17377
17378@example
52ac153e 17379(initrd (lambda (file-systems . rest)
027981d6
LC
17380 ;; Create a standard initrd that has modules "foo.ko"
17381 ;; and "bar.ko", as well as their dependencies, in
17382 ;; addition to the modules available by default.
52ac153e 17383 (apply base-initrd file-systems
027981d6 17384 #:extra-modules '("foo" "bar")
52ac153e 17385 rest)))
fd1b1fa2
LC
17386@end example
17387
52ac153e 17388The @code{base-initrd} procedure also handles common use cases that
1068f26b
AE
17389involves using the system as a QEMU guest, or as a ``live'' system with
17390volatile root file system.
fd1b1fa2 17391
47bdc5a1
MO
17392The @code{base-initrd} procedure is built from @code{raw-initrd} procedure.
17393Unlike @code{base-initrd}, @code{raw-initrd} doesn't do anything high-level,
17394such as trying to guess which kernel modules and packages should be included
17395to the initrd. An example use of @code{raw-initrd} is when a user has
17396a custom Linux kernel configuration and default kernel modules included by
17397@code{base-initrd} are not available.
17398
17399The initial RAM disk produced by @code{base-initrd} or @code{raw-initrd}
17400honors several options passed on the Linux kernel command line
17401(that is, arguments passed @i{via} the @code{linux} command of GRUB, or the
4af2fafd 17402@code{-append} option of QEMU), notably:
e90cf6c1
LC
17403
17404@table @code
17405@item --load=@var{boot}
17406Tell the initial RAM disk to load @var{boot}, a file containing a Scheme
17407program, once it has mounted the root file system.
17408
17409GuixSD uses this option to yield control to a boot program that runs the
dd17bc38 17410service activation programs and then spawns the GNU@tie{}Shepherd, the
e90cf6c1
LC
17411initialization system.
17412
17413@item --root=@var{root}
1068f26b 17414Mount @var{root} as the root file system. @var{root} can be a
e90cf6c1
LC
17415device name like @code{/dev/sda1}, a partition label, or a partition
17416UUID.
17417
17418@item --system=@var{system}
17419Have @file{/run/booted-system} and @file{/run/current-system} point to
17420@var{system}.
17421
17422@item modprobe.blacklist=@var{modules}@dots{}
17423@cindex module, black-listing
17424@cindex black list, of kernel modules
17425Instruct the initial RAM disk as well as the @command{modprobe} command
17426(from the kmod package) to refuse to load @var{modules}. @var{modules}
17427must be a comma-separated list of module names---e.g.,
17428@code{usbkbd,9pnet}.
17429
17430@item --repl
17431Start a read-eval-print loop (REPL) from the initial RAM disk before it
17432tries to load kernel modules and to mount the root file system. Our
17433marketing team calls it @dfn{boot-to-Guile}. The Schemer in you will
17434love it. @xref{Using Guile Interactively,,, guile, GNU Guile Reference
17435Manual}, for more information on Guile's REPL.
17436
17437@end table
17438
17439Now that you know all the features that initial RAM disks produced by
47bdc5a1
MO
17440@code{base-initrd} and @code{raw-initrd} provide,
17441here is how to use it and customize it further.
e90cf6c1 17442
e32171ee
JD
17443@cindex initrd
17444@cindex initial RAM disk
47bdc5a1
MO
17445@deffn {Monadic Procedure} raw-initrd @var{file-systems} @
17446 [#:linux-modules '()] [#:mapped-devices '()] @
17447 [#:helper-packages '()] [#:qemu-networking? #f] [#:volatile-root? #f]
17448Return a monadic derivation that builds a raw initrd. @var{file-systems} is
1068f26b 17449a list of file systems to be mounted by the initrd, possibly in addition to
fd1b1fa2 17450the root file system specified on the kernel command line via @code{--root}.
47bdc5a1 17451@var{linux-modules} is a list of kernel modules to be loaded at boot time.
52ac153e
LC
17452@var{mapped-devices} is a list of device mappings to realize before
17453@var{file-systems} are mounted (@pxref{Mapped Devices}).
47bdc5a1
MO
17454@var{helper-packages} is a list of packages to be copied in the initrd. It may
17455include @code{e2fsck/static} or other packages needed by the initrd to check
17456root partition.
fd1b1fa2
LC
17457
17458When @var{qemu-networking?} is true, set up networking with the standard QEMU
1068f26b
AE
17459parameters. When @var{virtio?} is true, load additional modules so that the
17460initrd can be used as a QEMU guest with para-virtualized I/O drivers.
fd1b1fa2
LC
17461
17462When @var{volatile-root?} is true, the root file system is writable but any changes
17463to it are lost.
47bdc5a1
MO
17464@end deffn
17465
17466@deffn {Monadic Procedure} base-initrd @var{file-systems} @
17467 [#:mapped-devices '()] [#:qemu-networking? #f] [#:volatile-root? #f]@
17468 [#:virtio? #t] [#:extra-modules '()]
17469Return a monadic derivation that builds a generic initrd. @var{file-systems} is
17470a list of file systems to be mounted by the initrd like for @code{raw-initrd}.
17471@var{mapped-devices}, @var{qemu-networking?} and @var{volatile-root?}
17472also behaves as in @code{raw-initrd}.
17473
17474When @var{virtio?} is true, load additional modules so that the
17475initrd can be used as a QEMU guest with para-virtualized I/O drivers.
fd1b1fa2
LC
17476
17477The initrd is automatically populated with all the kernel modules necessary
17478for @var{file-systems} and for the given options. However, additional kernel
17479modules can be listed in @var{extra-modules}. They will be added to the initrd, and
17480loaded at boot time in the order in which they appear.
17481@end deffn
17482
17483Needless to say, the initrds we produce and use embed a
17484statically-linked Guile, and the initialization program is a Guile
17485program. That gives a lot of flexibility. The
17486@code{expression->initrd} procedure builds such an initrd, given the
17487program to run in that initrd.
17488
17489@deffn {Monadic Procedure} expression->initrd @var{exp} @
4ee96a79 17490 [#:guile %guile-static-stripped] [#:name "guile-initrd"]
fd1b1fa2
LC
17491Return a derivation that builds a Linux initrd (a gzipped cpio archive)
17492containing @var{guile} and that evaluates @var{exp}, a G-expression,
df650fa8
LC
17493upon booting. All the derivations referenced by @var{exp} are
17494automatically copied to the initrd.
fd1b1fa2
LC
17495@end deffn
17496
74e64724
MO
17497@node Bootloader Configuration
17498@subsection Bootloader Configuration
88faf933 17499
74e64724 17500@cindex bootloader
88faf933
LC
17501@cindex boot loader
17502
74e64724
MO
17503The operating system supports multiple bootloaders. The bootloader is
17504configured using @code{bootloader-configuration} declaration. All the
17505fields of this structure are bootloader agnostic except for one field,
17506@code{bootloader} that indicates the bootloader to be configured and
17507installed.
88faf933 17508
74e64724
MO
17509Some of the bootloaders do not honor every field of
17510@code{bootloader-configuration}. For instance, the extlinux
17511bootloader does not support themes and thus ignores the @code{theme}
17512field.
17513
17514@deftp {Data Type} bootloader-configuration
17515The type of a bootloader configuration declaration.
88faf933
LC
17516
17517@table @asis
17518
74e64724
MO
17519@item @code{bootloader}
17520@cindex EFI, bootloader
17521@cindex UEFI, bootloader
17522@cindex BIOS, bootloader
17523The bootloader to use, as a @code{bootloader} object. For now
8d858010
DM
17524@code{grub-bootloader}, @code{grub-efi-bootloader},
17525@code{extlinux-bootloader} and @code{u-boot-bootloader} are supported.
17526@code{grub-efi-bootloader} allows to boot on modern systems using the
17527@dfn{Unified Extensible Firmware Interface} (UEFI).
74e64724
MO
17528
17529Available bootloaders are described in @code{(gnu bootloader @dots{})}
17530modules.
17531
045ebb3e
AW
17532@item @code{target}
17533This is a string denoting the target onto which to install the
17534bootloader. The exact interpretation depends on the bootloader in
17535question; for @code{grub-bootloader}, for example, it should be a device
17536name understood by the bootloader @command{installer} command, such as
17537@code{/dev/sda} or @code{(hd0)} (for GRUB, @pxref{Invoking
17538grub-install,,, grub, GNU GRUB Manual}). For
17539@code{grub-efi-bootloader}, it should be the path to a mounted EFI file
17540system.
88faf933
LC
17541
17542@item @code{menu-entries} (default: @code{()})
17543A possibly empty list of @code{menu-entry} objects (see below), denoting
74e64724 17544entries to appear in the bootloader menu, in addition to the current
88faf933 17545system entry and the entry pointing to previous system generations.
74e64724 17546generations.
88faf933
LC
17547
17548@item @code{default-entry} (default: @code{0})
1068f26b
AE
17549The index of the default boot menu entry. Index 0 is for the entry of the
17550current system.
88faf933
LC
17551
17552@item @code{timeout} (default: @code{5})
17553The number of seconds to wait for keyboard input before booting. Set to
175540 to boot immediately, and to -1 to wait indefinitely.
17555
74e64724
MO
17556@item @code{theme} (default: @var{#f})
17557The bootloader theme object describing the theme to use. If no theme
17558is provided, some bootloaders might use a default theme, that's true
17559for GRUB.
e0b2e930
LF
17560
17561@item @code{terminal-outputs} (default: @code{'gfxterm})
74e64724
MO
17562The output terminals used for the bootloader boot menu, as a list of
17563symbols. GRUB accepts the values: @code{console}, @code{serial},
17564@code{serial_@{0-3@}}, @code{gfxterm}, @code{vga_text},
17565@code{mda_text}, @code{morse}, and @code{pkmodem}. This field
17566corresponds to the GRUB variable GRUB_TERMINAL_OUTPUT (@pxref{Simple
17567configuration,,, grub,GNU GRUB manual}).
e0b2e930
LF
17568
17569@item @code{terminal-inputs} (default: @code{'()})
74e64724
MO
17570The input terminals used for the bootloader boot menu, as a list of
17571symbols. For GRUB, the default is the native platform terminal as
17572determined at run-time. GRUB accepts the values: @code{console},
17573@code{serial}, @code{serial_@{0-3@}}, @code{at_keyboard}, and
17574@code{usb_keyboard}. This field corresponds to the GRUB variable
17575GRUB_TERMINAL_INPUT (@pxref{Simple configuration,,, grub,GNU GRUB
17576manual}).
e0b2e930
LF
17577
17578@item @code{serial-unit} (default: @code{#f})
74e64724
MO
17579The serial unit used by the bootloader, as an integer from 0 to 3.
17580For GRUB it is choosen at run-time; currently GRUB chooses 0, which
e0b2e930
LF
17581corresponds to COM1 (@pxref{Serial terminal,,, grub,GNU GRUB manual}).
17582
17583@item @code{serial-speed} (default: @code{#f})
74e64724
MO
17584The speed of the serial interface, as an integer. For GRUB, the
17585default value is chosen at run-time; currently GRUB chooses
175869600@tie{}bps (@pxref{Serial terminal,,, grub,GNU GRUB manual}).
88faf933
LC
17587@end table
17588
17589@end deftp
17590
44d5f54e
LC
17591@cindex dual boot
17592@cindex boot menu
88faf933
LC
17593Should you want to list additional boot menu entries @i{via} the
17594@code{menu-entries} field above, you will need to create them with the
44d5f54e
LC
17595@code{menu-entry} form. For example, imagine you want to be able to
17596boot another distro (hard to imagine!), you can define a menu entry
17597along these lines:
17598
17599@example
17600(menu-entry
17601 (label "The Other Distro")
17602 (linux "/boot/old/vmlinux-2.6.32")
17603 (linux-arguments '("root=/dev/sda2"))
17604 (initrd "/boot/old/initrd"))
17605@end example
17606
17607Details below.
88faf933
LC
17608
17609@deftp {Data Type} menu-entry
74e64724 17610The type of an entry in the bootloader menu.
88faf933
LC
17611
17612@table @asis
17613
17614@item @code{label}
35ed9306 17615The label to show in the menu---e.g., @code{"GNU"}.
88faf933
LC
17616
17617@item @code{linux}
44d5f54e
LC
17618The Linux kernel image to boot, for example:
17619
17620@example
17621(file-append linux-libre "/bzImage")
17622@end example
88faf933 17623
74e64724
MO
17624For GRUB, it is also possible to specify a device explicitly in the
17625file path using GRUB's device naming convention (@pxref{Naming
17626convention,,, grub, GNU GRUB manual}), for example:
1ef8b72a
CM
17627
17628@example
17629"(hd0,msdos1)/boot/vmlinuz"
17630@end example
17631
17632If the device is specified explicitly as above, then the @code{device}
17633field is ignored entirely.
17634
88faf933
LC
17635@item @code{linux-arguments} (default: @code{()})
17636The list of extra Linux kernel command-line arguments---e.g.,
17637@code{("console=ttyS0")}.
17638
17639@item @code{initrd}
17640A G-Expression or string denoting the file name of the initial RAM disk
17641to use (@pxref{G-Expressions}).
1ef8b72a 17642@item @code{device} (default: @code{#f})
74e64724 17643The device where the kernel and initrd are to be found---i.e., for GRUB,
1ef8b72a
CM
17644@dfn{root} for this menu entry (@pxref{root,,, grub, GNU GRUB manual}).
17645
17646This may be a file system label (a string), a file system UUID (a
74e64724
MO
17647bytevector, @pxref{File Systems}), or @code{#f}, in which case
17648the bootloader will search the device containing the file specified by
17649the @code{linux} field (@pxref{search,,, grub, GNU GRUB manual}). It
17650must @emph{not} be an OS device name such as @file{/dev/sda1}.
1ef8b72a 17651
88faf933
LC
17652@end table
17653@end deftp
17654
17655@c FIXME: Write documentation once it's stable.
74e64724
MO
17656Fow now only GRUB has theme support. GRUB themes are created using
17657the @code{grub-theme} form, which is not documented yet.
88faf933
LC
17658
17659@defvr {Scheme Variable} %default-theme
74e64724
MO
17660This is the default GRUB theme used by the operating system if no
17661@code{theme} field is specified in @code{bootloader-configuration}
17662record.
17663
17664It comes with a fancy background image displaying the GNU and Guix
17665logos.
88faf933
LC
17666@end defvr
17667
17668
cf4a9129
LC
17669@node Invoking guix system
17670@subsection Invoking @code{guix system}
0918e64a 17671
1068f26b 17672Once you have written an operating system declaration as seen in the
cf4a9129
LC
17673previous section, it can be @dfn{instantiated} using the @command{guix
17674system} command. The synopsis is:
4af2447e 17675
cf4a9129
LC
17676@example
17677guix system @var{options}@dots{} @var{action} @var{file}
17678@end example
4af2447e 17679
cf4a9129
LC
17680@var{file} must be the name of a file containing an
17681@code{operating-system} declaration. @var{action} specifies how the
a40424bd 17682operating system is instantiated. Currently the following values are
cf4a9129 17683supported:
4af2447e 17684
cf4a9129 17685@table @code
0649321d
LC
17686@item search
17687Display available service type definitions that match the given regular
17688expressions, sorted by relevance:
17689
17690@example
17691$ guix system search console font
17692name: console-fonts
17693location: gnu/services/base.scm:729:2
17694extends: shepherd-root
17695description: Install the given fonts on the specified ttys (fonts are
17696+ per virtual console on GNU/Linux). The value of this service is a list
17697+ of tty/font pairs like:
17698+
17699+ '(("tty1" . "LatGrkCyr-8x16"))
17700relevance: 20
17701
17702name: mingetty
17703location: gnu/services/base.scm:1048:2
17704extends: shepherd-root
17705description: Provide console login using the `mingetty' program.
17706relevance: 2
17707
17708name: login
17709location: gnu/services/base.scm:775:2
17710extends: pam
17711description: Provide a console log-in service as specified by its
17712+ configuration value, a `login-configuration' object.
17713relevance: 2
17714
17715@dots{}
17716@end example
17717
17718As for @command{guix package --search}, the result is written in
17719@code{recutils} format, which makes it easy to filter the output
17720(@pxref{Top, GNU recutils databases,, recutils, GNU recutils manual}).
17721
cf4a9129
LC
17722@item reconfigure
17723Build the operating system described in @var{file}, activate it, and
8074b330
CM
17724switch to it@footnote{This action (and the related actions
17725@code{switch-generation} and @code{roll-back}) are usable only on
17726systems already running GuixSD.}.
4af2447e 17727
cf4a9129
LC
17728This effects all the configuration specified in @var{file}: user
17729accounts, system services, global package list, setuid programs, etc.
240b57f0
LC
17730The command starts system services specified in @var{file} that are not
17731currently running; if a service is currently running, it does not
1068f26b 17732attempt to upgrade it since this would not be possible without stopping it
240b57f0 17733first.
4af2447e 17734
067a2e2d
CM
17735This command creates a new generation whose number is one greater than
17736the current generation (as reported by @command{guix system
17737list-generations}). If that generation already exists, it will be
17738overwritten. This behavior mirrors that of @command{guix package}
17739(@pxref{Invoking guix package}).
17740
74e64724
MO
17741It also adds a bootloader menu entry for the new OS configuration,
17742---unless @option{--no-bootloader} is passed. For GRUB, it moves
17743entries for older configurations to a submenu, allowing you to choose
17744an older system generation at boot time should you need it.
4af2447e 17745
240b57f0 17746@quotation Note
bf2479c7
LC
17747@c The paragraph below refers to the problem discussed at
17748@c <http://lists.gnu.org/archive/html/guix-devel/2014-08/msg00057.html>.
17749It is highly recommended to run @command{guix pull} once before you run
17750@command{guix system reconfigure} for the first time (@pxref{Invoking
17751guix pull}). Failing to do that you would see an older version of Guix
17752once @command{reconfigure} has completed.
240b57f0 17753@end quotation
bf2479c7 17754
8074b330 17755@item switch-generation
e32171ee 17756@cindex generations
8074b330 17757Switch to an existing system generation. This action atomically
74e64724
MO
17758switches the system profile to the specified system generation. It
17759also rearranges the system's existing bootloader menu entries. It
17760makes the menu entry for the specified system generation the default,
17761and it moves the entries for the other generatiors to a submenu, if
17762supported by the bootloader being used. The next time the system
17763boots, it will use the specified system generation.
17764
17765The bootloader itself is not being reinstalled when using this
17766command. Thus, the installed bootloader is used with an updated
17767configuration file.
8074b330
CM
17768
17769The target generation can be specified explicitly by its generation
17770number. For example, the following invocation would switch to system
17771generation 7:
17772
17773@example
17774guix system switch-generation 7
17775@end example
17776
17777The target generation can also be specified relative to the current
17778generation with the form @code{+N} or @code{-N}, where @code{+3} means
17779``3 generations ahead of the current generation,'' and @code{-1} means
17780``1 generation prior to the current generation.'' When specifying a
17781negative value such as @code{-1}, you must precede it with @code{--} to
17782prevent it from being parsed as an option. For example:
17783
17784@example
17785guix system switch-generation -- -1
17786@end example
17787
17788Currently, the effect of invoking this action is @emph{only} to switch
74e64724
MO
17789the system profile to an existing generation and rearrange the
17790bootloader menu entries. To actually start using the target system
17791generation, you must reboot after running this action. In the future,
17792it will be updated to do the same things as @command{reconfigure},
17793like activating and deactivating services.
8074b330
CM
17794
17795This action will fail if the specified generation does not exist.
17796
17797@item roll-back
e32171ee 17798@cindex rolling back
8074b330
CM
17799Switch to the preceding system generation. The next time the system
17800boots, it will use the preceding system generation. This is the inverse
17801of @command{reconfigure}, and it is exactly the same as invoking
17802@command{switch-generation} with an argument of @code{-1}.
17803
17804Currently, as with @command{switch-generation}, you must reboot after
17805running this action to actually start using the preceding system
17806generation.
17807
cf4a9129 17808@item build
1068f26b 17809Build the derivation of the operating system, which includes all the
cf4a9129
LC
17810configuration files and programs needed to boot and run the system.
17811This action does not actually install anything.
113daf62 17812
cf4a9129
LC
17813@item init
17814Populate the given directory with all the files necessary to run the
17815operating system specified in @var{file}. This is useful for first-time
4705641f 17816installations of GuixSD. For instance:
113daf62
LC
17817
17818@example
cf4a9129 17819guix system init my-os-config.scm /mnt
113daf62
LC
17820@end example
17821
cf4a9129
LC
17822copies to @file{/mnt} all the store items required by the configuration
17823specified in @file{my-os-config.scm}. This includes configuration
17824files, packages, and so on. It also creates other essential files
17825needed for the system to operate correctly---e.g., the @file{/etc},
17826@file{/var}, and @file{/run} directories, and the @file{/bin/sh} file.
113daf62 17827
045ebb3e 17828This command also installs bootloader on the target specified in
74e64724
MO
17829@file{my-os-config}, unless the @option{--no-bootloader} option was
17830passed.
113daf62 17831
cf4a9129
LC
17832@item vm
17833@cindex virtual machine
0276f697 17834@cindex VM
f535dcbe 17835@anchor{guix system vm}
1068f26b 17836Build a virtual machine that contains the operating system declared in
cf4a9129 17837@var{file}, and return a script to run that virtual machine (VM).
03317cbf
LC
17838Arguments given to the script are passed to QEMU as in the example
17839below, which enables networking and requests 1@tie{}GiB of RAM for the
17840emulated machine:
17841
17842@example
17843$ /gnu/store/@dots{}-run-vm.sh -m 1024 -net user
17844@end example
113daf62 17845
cf4a9129 17846The VM shares its store with the host system.
113daf62 17847
0276f697
LC
17848Additional file systems can be shared between the host and the VM using
17849the @code{--share} and @code{--expose} command-line options: the former
17850specifies a directory to be shared with write access, while the latter
17851provides read-only access to the shared directory.
17852
17853The example below creates a VM in which the user's home directory is
17854accessible read-only, and where the @file{/exchange} directory is a
1068f26b 17855read-write mapping of @file{$HOME/tmp} on the host:
0276f697
LC
17856
17857@example
17858guix system vm my-config.scm \
17859 --expose=$HOME --share=$HOME/tmp=/exchange
17860@end example
17861
6aa260af
LC
17862On GNU/Linux, the default is to boot directly to the kernel; this has
17863the advantage of requiring only a very tiny root disk image since the
1068f26b 17864store of the host can then be mounted.
6aa260af
LC
17865
17866The @code{--full-boot} option forces a complete boot sequence, starting
17867with the bootloader. This requires more disk space since a root image
17868containing at least the kernel, initrd, and bootloader data files must
17869be created. The @code{--image-size} option can be used to specify the
1068f26b 17870size of the image.
ab11f0be 17871
cf4a9129
LC
17872@item vm-image
17873@itemx disk-image
17874Return a virtual machine or disk image of the operating system declared
a8ac4f08
LC
17875in @var{file} that stands alone. By default, @command{guix system}
17876estimates the size of the image needed to store the system, but you can
17877use the @option{--image-size} option to specify a value.
113daf62 17878
3f4d8a7f 17879You can specify the root file system type by using the
3b6e7d86 17880@option{--file-system-type} option. It defaults to @code{ext4}.
3f4d8a7f 17881
cf4a9129 17882When using @code{vm-image}, the returned image is in qcow2 format, which
97d76250
LF
17883the QEMU emulator can efficiently use. @xref{Running GuixSD in a VM},
17884for more information on how to run the image in a virtual machine.
113daf62 17885
cf4a9129
LC
17886When using @code{disk-image}, a raw disk image is produced; it can be
17887copied as is to a USB stick, for instance. Assuming @code{/dev/sdc} is
1068f26b 17888the device corresponding to a USB stick, one can copy the image to it
cf4a9129 17889using the following command:
113daf62 17890
cf4a9129
LC
17891@example
17892# dd if=$(guix system disk-image my-os.scm) of=/dev/sdc
17893@end example
113daf62 17894
1c8a81b1
DT
17895@item container
17896Return a script to run the operating system declared in @var{file}
17897within a container. Containers are a set of lightweight isolation
17898mechanisms provided by the kernel Linux-libre. Containers are
17899substantially less resource-demanding than full virtual machines since
17900the kernel, shared objects, and other resources can be shared with the
17901host system; this also means they provide thinner isolation.
17902
17903Currently, the script must be run as root in order to support more than
17904a single user and group. The container shares its store with the host
17905system.
17906
17907As with the @code{vm} action (@pxref{guix system vm}), additional file
17908systems to be shared between the host and container can be specified
17909using the @option{--share} and @option{--expose} options:
17910
17911@example
17912guix system container my-config.scm \
17913 --expose=$HOME --share=$HOME/tmp=/exchange
17914@end example
17915
0f252e26 17916@quotation Note
cfd35b4e 17917This option requires Linux-libre 3.19 or newer.
0f252e26
DT
17918@end quotation
17919
cf4a9129 17920@end table
113daf62 17921
ccd7158d
LC
17922@var{options} can contain any of the common build options (@pxref{Common
17923Build Options}). In addition, @var{options} can contain one of the
17924following:
113daf62 17925
cf4a9129
LC
17926@table @option
17927@item --system=@var{system}
17928@itemx -s @var{system}
1068f26b 17929Attempt to build for @var{system} instead of the host system type.
cf4a9129 17930This works as per @command{guix build} (@pxref{Invoking guix build}).
113daf62 17931
f3f427c2
LC
17932@item --derivation
17933@itemx -d
17934Return the derivation file name of the given operating system without
17935building anything.
17936
3f4d8a7f
DM
17937@item --file-system-type=@var{type}
17938@itemx -t @var{type}
17939For the @code{disk-image} action, create a file system of the given
17940@var{type} on the image.
17941
17942When this option is omitted, @command{guix system} uses @code{ext4}.
17943
17944@cindex ISO-9660 format
17945@cindex CD image format
17946@cindex DVD image format
17947@code{--file-system-type=iso9660} produces an ISO-9660 image, suitable
17948for burning on CDs and DVDs.
17949
cf4a9129
LC
17950@item --image-size=@var{size}
17951For the @code{vm-image} and @code{disk-image} actions, create an image
17952of the given @var{size}. @var{size} may be a number of bytes, or it may
4a44d7bb
LC
17953include a unit as a suffix (@pxref{Block size, size specifications,,
17954coreutils, GNU Coreutils}).
db030303 17955
a8ac4f08
LC
17956When this option is omitted, @command{guix system} computes an estimate
17957of the image size as a function of the size of the system declared in
17958@var{file}.
17959
5ea69d9a
CM
17960@item --root=@var{file}
17961@itemx -r @var{file}
17962Make @var{file} a symlink to the result, and register it as a garbage
17963collector root.
17964
db030303
LC
17965@item --on-error=@var{strategy}
17966Apply @var{strategy} when an error occurs when reading @var{file}.
17967@var{strategy} may be one of the following:
17968
17969@table @code
17970@item nothing-special
17971Report the error concisely and exit. This is the default strategy.
17972
17973@item backtrace
17974Likewise, but also display a backtrace.
17975
17976@item debug
17977Report the error and enter Guile's debugger. From there, you can run
17978commands such as @code{,bt} to get a backtrace, @code{,locals} to
1068f26b
AE
17979display local variable values, and more generally inspect the state of the
17980program. @xref{Debug Commands,,, guile, GNU Guile Reference Manual}, for
db030303
LC
17981a list of available debugging commands.
17982@end table
113daf62 17983@end table
113daf62 17984
eca69fc0
LC
17985@quotation Note
17986All the actions above, except @code{build} and @code{init},
17987can use KVM support in the Linux-libre kernel. Specifically, if the
17988machine has hardware virtualization support, the corresponding
cf4a9129 17989KVM kernel module should be loaded, and the @file{/dev/kvm} device node
1068f26b 17990must exist and be readable and writable by the user and by the
eca69fc0
LC
17991build users of the daemon (@pxref{Build Environment Setup}).
17992@end quotation
8451a568 17993
65797bff
LC
17994Once you have built, configured, re-configured, and re-re-configured
17995your GuixSD installation, you may find it useful to list the operating
17996system generations available on disk---and that you can choose from the
74e64724 17997bootloader boot menu:
65797bff
LC
17998
17999@table @code
18000
18001@item list-generations
18002List a summary of each generation of the operating system available on
18003disk, in a human-readable way. This is similar to the
18004@option{--list-generations} option of @command{guix package}
18005(@pxref{Invoking guix package}).
18006
18007Optionally, one can specify a pattern, with the same syntax that is used
18008in @command{guix package --list-generations}, to restrict the list of
18009generations displayed. For instance, the following command displays
1068f26b 18010generations that are up to 10 days old:
65797bff
LC
18011
18012@example
18013$ guix system list-generations 10d
18014@end example
18015
18016@end table
18017
d6c3267a
LC
18018The @command{guix system} command has even more to offer! The following
18019sub-commands allow you to visualize how your system services relate to
18020each other:
18021
18022@anchor{system-extension-graph}
18023@table @code
18024
18025@item extension-graph
18026Emit in Dot/Graphviz format to standard output the @dfn{service
18027extension graph} of the operating system defined in @var{file}
18028(@pxref{Service Composition}, for more information on service
18029extensions.)
18030
18031The command:
18032
18033@example
18034$ guix system extension-graph @var{file} | dot -Tpdf > services.pdf
18035@end example
18036
18037produces a PDF file showing the extension relations among services.
18038
710fa231
AK
18039@anchor{system-shepherd-graph}
18040@item shepherd-graph
6f305ea5 18041Emit in Dot/Graphviz format to standard output the @dfn{dependency
dd17bc38
AK
18042graph} of shepherd services of the operating system defined in
18043@var{file}. @xref{Shepherd Services}, for more information and for an
18044example graph.
6f305ea5 18045
d6c3267a
LC
18046@end table
18047
97d76250 18048@node Running GuixSD in a VM
70ac09a5 18049@subsection Running GuixSD in a Virtual Machine
97d76250 18050
e32171ee 18051@cindex virtual machine
4b236c88
LF
18052To run GuixSD in a virtual machine (VM), one can either use the
18053pre-built GuixSD VM image distributed at
18054@indicateurl{ftp://alpha.gnu.org/guix/guixsd-vm-image-@value{VERSION}.@var{system}.tar.xz}
18055, or build their own virtual machine image using @command{guix system
18056vm-image} (@pxref{Invoking guix system}). The returned image is in
18057qcow2 format, which the @uref{http://qemu.org/, QEMU emulator} can
18058efficiently use.
97d76250 18059
e32171ee 18060@cindex QEMU
4b236c88
LF
18061If you built your own image, you must copy it out of the store
18062(@pxref{The Store}) and give yourself permission to write to the copy
18063before you can use it. When invoking QEMU, you must choose a system
18064emulator that is suitable for your hardware platform. Here is a minimal
18065QEMU invocation that will boot the result of @command{guix system
18066vm-image} on x86_64 hardware:
97d76250
LF
18067
18068@example
18069$ qemu-system-x86_64 \
18070 -net user -net nic,model=virtio \
18071 -enable-kvm -m 256 /tmp/qemu-image
18072@end example
18073
18074Here is what each of these options means:
18075
18076@table @code
18077@item qemu-system-x86_64
18078This specifies the hardware platform to emulate. This should match the
18079host.
18080
18081@item -net user
18082Enable the unprivileged user-mode network stack. The guest OS can
18083access the host but not vice versa. This is the simplest way to get the
58806e6f 18084guest OS online.
97d76250
LF
18085
18086@item -net nic,model=virtio
1068f26b 18087You must create a network interface of a given model. If you do not
97d76250
LF
18088create a NIC, the boot will fail. Assuming your hardware platform is
18089x86_64, you can get a list of available NIC models by running
18090@command{qemu-system-x86_64 -net nic,model=help}.
18091
18092@item -enable-kvm
18093If your system has hardware virtualization extensions, enabling the
1068f26b 18094virtual machine support (KVM) of the Linux kernel will make things run
97d76250
LF
18095faster.
18096
18097@item -m 256
18098RAM available to the guest OS, in mebibytes. Defaults to 128@tie{}MiB,
7414de0a 18099which may be insufficient for some operations.
97d76250
LF
18100
18101@item /tmp/qemu-image
18102The file name of the qcow2 image.
18103@end table
d6c3267a 18104
9fc221b5 18105The default @command{run-vm.sh} script that is returned by an invocation of
3ddc50db
DC
18106@command{guix system vm} does not add a @command{-net user} flag by default.
18107To get network access from within the vm add the @code{(dhcp-client-service)}
18108to your system definition and start the VM using
18109@command{`guix system vm config.scm` -net user}. An important caveat of using
18110@command{-net user} for networking is that @command{ping} will not work, because
18111it uses the ICMP protocol. You'll have to use a different command to check for
4100698d 18112network connectivity, for example @command{guix download}.
3ddc50db
DC
18113
18114@subsubsection Connecting Through SSH
18115
e32171ee
JD
18116@cindex SSH
18117@cindex SSH server
3ddc50db
DC
18118To enable SSH inside a VM you need to add a SSH server like @code{(dropbear-service)}
18119or @code{(lsh-service)} to your VM. The @code{(lsh-service}) doesn't currently
18120boot unsupervised. It requires you to type some characters to initialize the
18121randomness generator. In addition you need to forward the SSH port, 22 by
18122default, to the host. You can do this with
18123
18124@example
18125`guix system vm config.scm` -net user,hostfwd=tcp::10022-:22
18126@end example
18127
18128To connect to the VM you can run
18129
18130@example
18131ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 10022
18132@end example
18133
18134The @command{-p} tells @command{ssh} the port you want to connect to.
18135@command{-o UserKnownHostsFile=/dev/null} prevents @command{ssh} from complaining
18136every time you modify your @command{config.scm} file and the
18137@command{-o StrictHostKeyChecking=no} prevents you from having to allow a
18138connection to an unknown host every time you connect.
18139
18140@subsubsection Using @command{virt-viewer} with Spice
18141
18142As an alternative to the default @command{qemu} graphical client you can
18143use the @command{remote-viewer} from the @command{virt-viewer} package. To
18144connect pass the @command{-spice port=5930,disable-ticketing} flag to
18145@command{qemu}. See previous section for further information on how to do this.
18146
18147Spice also allows you to do some nice stuff like share your clipboard with your
18148VM. To enable that you'll also have to pass the following flags to @command{qemu}:
18149
18150@example
18151-device virtio-serial-pci,id=virtio-serial0,max_ports=16,bus=pci.0,addr=0x5
18152-chardev spicevmc,name=vdagent,id=vdagent
18153-device virtserialport,nr=1,bus=virtio-serial0.0,chardev=vdagent,
18154name=com.redhat.spice.0
18155@end example
18156
18157You'll also need to add the @pxref{Miscellaneous Services, Spice service}.
18158
cf4a9129
LC
18159@node Defining Services
18160@subsection Defining Services
8451a568 18161
eb524192 18162The previous sections show the available services and how one can combine
0adfe95a
LC
18163them in an @code{operating-system} declaration. But how do we define
18164them in the first place? And what is a service anyway?
8451a568 18165
0adfe95a
LC
18166@menu
18167* Service Composition:: The model for composing services.
18168* Service Types and Services:: Types and services.
18169* Service Reference:: API reference.
dd17bc38 18170* Shepherd Services:: A particular type of service.
0adfe95a
LC
18171@end menu
18172
18173@node Service Composition
18174@subsubsection Service Composition
18175
18176@cindex services
18177@cindex daemons
18178Here we define a @dfn{service} as, broadly, something that extends the
1068f26b 18179functionality of the operating system. Often a service is a process---a
0adfe95a
LC
18180@dfn{daemon}---started when the system boots: a secure shell server, a
18181Web server, the Guix build daemon, etc. Sometimes a service is a daemon
18182whose execution can be triggered by another daemon---e.g., an FTP server
18183started by @command{inetd} or a D-Bus service activated by
18184@command{dbus-daemon}. Occasionally, a service does not map to a
18185daemon. For instance, the ``account'' service collects user accounts
18186and makes sure they exist when the system runs; the ``udev'' service
18187collects device management rules and makes them available to the eudev
1068f26b
AE
18188daemon; the @file{/etc} service populates the @file{/etc} directory
18189of the system.
0adfe95a 18190
d6c3267a 18191@cindex service extensions
0adfe95a 18192GuixSD services are connected by @dfn{extensions}. For instance, the
1068f26b 18193secure shell service @emph{extends} the Shepherd---the GuixSD
dd17bc38
AK
18194initialization system, running as PID@tie{}1---by giving it the command
18195lines to start and stop the secure shell daemon (@pxref{Networking
18196Services, @code{lsh-service}}); the UPower service extends the D-Bus
18197service by passing it its @file{.service} specification, and extends the
18198udev service by passing it device management rules (@pxref{Desktop
18199Services, @code{upower-service}}); the Guix daemon service extends the
18200Shepherd by passing it the command lines to start and stop the daemon,
18201and extends the account service by passing it a list of required build
18202user accounts (@pxref{Base Services}).
0adfe95a
LC
18203
18204All in all, services and their ``extends'' relations form a directed
18205acyclic graph (DAG). If we represent services as boxes and extensions
18206as arrows, a typical system might provide something like this:
18207
18208@image{images/service-graph,,5in,Typical service extension graph.}
18209
d62e201c
LC
18210@cindex system service
18211At the bottom, we see the @dfn{system service}, which produces the
18212directory containing everything to run and boot the system, as returned
18213by the @command{guix system build} command. @xref{Service Reference},
18214to learn about the other service types shown here.
d6c3267a
LC
18215@xref{system-extension-graph, the @command{guix system extension-graph}
18216command}, for information on how to generate this representation for a
18217particular operating system definition.
0adfe95a
LC
18218
18219@cindex service types
18220Technically, developers can define @dfn{service types} to express these
18221relations. There can be any number of services of a given type on the
18222system---for instance, a system running two instances of the GNU secure
18223shell server (lsh) has two instances of @var{lsh-service-type}, with
18224different parameters.
18225
18226The following section describes the programming interface for service
18227types and services.
18228
18229@node Service Types and Services
18230@subsubsection Service Types and Services
18231
18232A @dfn{service type} is a node in the DAG described above. Let us start
18233with a simple example, the service type for the Guix build daemon
18234(@pxref{Invoking guix-daemon}):
18235
18236@example
18237(define guix-service-type
18238 (service-type
18239 (name 'guix)
18240 (extensions
d4053c71 18241 (list (service-extension shepherd-root-service-type guix-shepherd-service)
0adfe95a 18242 (service-extension account-service-type guix-accounts)
1bb895ea
LC
18243 (service-extension activation-service-type guix-activation)))
18244 (default-value (guix-configuration))))
0adfe95a 18245@end example
8451a568 18246
cf4a9129 18247@noindent
1bb895ea 18248It defines three things:
0adfe95a
LC
18249
18250@enumerate
18251@item
18252A name, whose sole purpose is to make inspection and debugging easier.
18253
18254@item
18255A list of @dfn{service extensions}, where each extension designates the
1068f26b
AE
18256target service type and a procedure that, given the parameters of the
18257service, returns a list of objects to extend the service of that type.
0adfe95a
LC
18258
18259Every service type has at least one service extension. The only
18260exception is the @dfn{boot service type}, which is the ultimate service.
1bb895ea
LC
18261
18262@item
18263Optionally, a default value for instances of this type.
0adfe95a
LC
18264@end enumerate
18265
18266In this example, @var{guix-service-type} extends three services:
18267
18268@table @var
d4053c71
AK
18269@item shepherd-root-service-type
18270The @var{guix-shepherd-service} procedure defines how the Shepherd
18271service is extended. Namely, it returns a @code{<shepherd-service>}
18272object that defines how @command{guix-daemon} is started and stopped
18273(@pxref{Shepherd Services}).
0adfe95a
LC
18274
18275@item account-service-type
18276This extension for this service is computed by @var{guix-accounts},
18277which returns a list of @code{user-group} and @code{user-account}
18278objects representing the build user accounts (@pxref{Invoking
18279guix-daemon}).
18280
18281@item activation-service-type
18282Here @var{guix-activation} is a procedure that returns a gexp, which is
18283a code snippet to run at ``activation time''---e.g., when the service is
18284booted.
18285@end table
18286
18287A service of this type is instantiated like this:
18288
18289@example
18290(service guix-service-type
18291 (guix-configuration
18292 (build-accounts 5)
18293 (use-substitutes? #f)))
18294@end example
18295
18296The second argument to the @code{service} form is a value representing
18297the parameters of this specific service instance.
18298@xref{guix-configuration-type, @code{guix-configuration}}, for
1bb895ea
LC
18299information about the @code{guix-configuration} data type. When the
18300value is omitted, the default value specified by
18301@code{guix-service-type} is used:
18302
18303@example
18304(service guix-service-type)
18305@end example
0adfe95a
LC
18306
18307@var{guix-service-type} is quite simple because it extends other
18308services but is not extensible itself.
18309
18310@c @subsubsubsection Extensible Service Types
18311
18312The service type for an @emph{extensible} service looks like this:
18313
18314@example
18315(define udev-service-type
18316 (service-type (name 'udev)
18317 (extensions
d4053c71
AK
18318 (list (service-extension shepherd-root-service-type
18319 udev-shepherd-service)))
0adfe95a
LC
18320
18321 (compose concatenate) ;concatenate the list of rules
18322 (extend (lambda (config rules)
18323 (match config
18324 (($ <udev-configuration> udev initial-rules)
18325 (udev-configuration
18326 (udev udev) ;the udev package to use
18327 (rules (append initial-rules rules)))))))))
18328@end example
18329
18330This is the service type for the
18331@uref{https://wiki.gentoo.org/wiki/Project:Eudev, eudev device
18332management daemon}. Compared to the previous example, in addition to an
d4053c71 18333extension of @var{shepherd-root-service-type}, we see two new fields:
0adfe95a
LC
18334
18335@table @code
18336@item compose
18337This is the procedure to @dfn{compose} the list of extensions to
18338services of this type.
18339
18340Services can extend the udev service by passing it lists of rules; we
18341compose those extensions simply by concatenating them.
18342
18343@item extend
1068f26b 18344This procedure defines how the value of the service is @dfn{extended} with
0adfe95a
LC
18345the composition of the extensions.
18346
18347Udev extensions are composed into a list of rules, but the udev service
18348value is itself a @code{<udev-configuration>} record. So here, we
a40424bd 18349extend that record by appending the list of rules it contains to the
0adfe95a 18350list of contributed rules.
b714395a
LC
18351
18352@item description
18353This is a string giving an overview of the service type. The string can
0649321d
LC
18354contain Texinfo markup (@pxref{Overview,,, texinfo, GNU Texinfo}). The
18355@command{guix system search} command searches these strings and displays
18356them (@pxref{Invoking guix system}).
0adfe95a
LC
18357@end table
18358
18359There can be only one instance of an extensible service type such as
18360@var{udev-service-type}. If there were more, the
18361@code{service-extension} specifications would be ambiguous.
18362
18363Still here? The next section provides a reference of the programming
18364interface for services.
18365
18366@node Service Reference
18367@subsubsection Service Reference
18368
18369We have seen an overview of service types (@pxref{Service Types and
18370Services}). This section provides a reference on how to manipulate
18371services and service types. This interface is provided by the
18372@code{(gnu services)} module.
18373
1bb895ea 18374@deffn {Scheme Procedure} service @var{type} [@var{value}]
0adfe95a
LC
18375Return a new service of @var{type}, a @code{<service-type>} object (see
18376below.) @var{value} can be any object; it represents the parameters of
18377this particular service instance.
1bb895ea
LC
18378
18379When @var{value} is omitted, the default value specified by @var{type}
18380is used; if @var{type} does not specify a default value, an error is
18381raised.
18382
18383For instance, this:
18384
18385@example
18386(service openssh-service-type)
18387@end example
18388
18389@noindent
18390is equivalent to this:
18391
18392@example
18393(service openssh-service-type
18394 (openssh-configuration))
18395@end example
18396
18397In both cases the result is an instance of @code{openssh-service-type}
18398with the default configuration.
0adfe95a
LC
18399@end deffn
18400
18401@deffn {Scheme Procedure} service? @var{obj}
18402Return true if @var{obj} is a service.
18403@end deffn
8451a568 18404
0adfe95a
LC
18405@deffn {Scheme Procedure} service-kind @var{service}
18406Return the type of @var{service}---i.e., a @code{<service-type>} object.
18407@end deffn
18408
efe7d19a 18409@deffn {Scheme Procedure} service-value @var{service}
0adfe95a
LC
18410Return the value associated with @var{service}. It represents its
18411parameters.
18412@end deffn
18413
18414Here is an example of how a service is created and manipulated:
18415
18416@example
18417(define s
18418 (service nginx-service-type
18419 (nginx-configuration
18420 (nginx nginx)
18421 (log-directory log-directory)
18422 (run-directory run-directory)
18423 (file config-file))))
18424
18425(service? s)
18426@result{} #t
18427
18428(eq? (service-kind s) nginx-service-type)
18429@result{} #t
18430@end example
18431
cd6f6c22
LC
18432The @code{modify-services} form provides a handy way to change the
18433parameters of some of the services of a list such as
4d343a14 18434@var{%base-services} (@pxref{Base Services, @code{%base-services}}). It
7414de0a 18435evaluates to a list of services. Of course, you could always use
4d343a14
CM
18436standard list combinators such as @code{map} and @code{fold} to do that
18437(@pxref{SRFI-1, List Library,, guile, GNU Guile Reference Manual});
18438@code{modify-services} simply provides a more concise form for this
18439common pattern.
cd6f6c22
LC
18440
18441@deffn {Scheme Syntax} modify-services @var{services} @
18442 (@var{type} @var{variable} => @var{body}) @dots{}
18443
18444Modify the services listed in @var{services} according to the given
18445clauses. Each clause has the form:
18446
18447@example
18448(@var{type} @var{variable} => @var{body})
18449@end example
18450
4d343a14
CM
18451where @var{type} is a service type---e.g.,
18452@code{guix-service-type}---and @var{variable} is an identifier that is
18453bound within the @var{body} to the service parameters---e.g., a
18454@code{guix-configuration} instance---of the original service of that
18455@var{type}.
cd6f6c22 18456
4d343a14
CM
18457The @var{body} should evaluate to the new service parameters, which will
18458be used to configure the new service. This new service will replace the
18459original in the resulting list. Because a service's service parameters
7414de0a 18460are created using @code{define-record-type*}, you can write a succinct
4d343a14
CM
18461@var{body} that evaluates to the new service parameters by using the
18462@code{inherit} feature that @code{define-record-type*} provides.
18463
b53daad0 18464@xref{Using the Configuration System}, for example usage.
cd6f6c22 18465
cd6f6c22
LC
18466@end deffn
18467
18468Next comes the programming interface for service types. This is
18469something you want to know when writing new service definitions, but not
18470necessarily when simply looking for ways to customize your
18471@code{operating-system} declaration.
18472
0adfe95a
LC
18473@deftp {Data Type} service-type
18474@cindex service type
18475This is the representation of a @dfn{service type} (@pxref{Service Types
18476and Services}).
18477
18478@table @asis
18479@item @code{name}
18480This is a symbol, used only to simplify inspection and debugging.
18481
18482@item @code{extensions}
1068f26b 18483A non-empty list of @code{<service-extension>} objects (see below).
0adfe95a
LC
18484
18485@item @code{compose} (default: @code{#f})
18486If this is @code{#f}, then the service type denotes services that cannot
18487be extended---i.e., services that do not receive ``values'' from other
18488services.
18489
18490Otherwise, it must be a one-argument procedure. The procedure is called
18491by @code{fold-services} and is passed a list of values collected from
18492extensions. It must return a value that is a valid parameter value for
18493the service instance.
18494
18495@item @code{extend} (default: @code{#f})
18496If this is @code{#f}, services of this type cannot be extended.
18497
18498Otherwise, it must be a two-argument procedure: @code{fold-services}
1068f26b 18499calls it, passing it the initial value of the service as the first argument
0adfe95a
LC
18500and the result of applying @code{compose} to the extension values as the
18501second argument.
18502@end table
18503
18504@xref{Service Types and Services}, for examples.
18505@end deftp
18506
18507@deffn {Scheme Procedure} service-extension @var{target-type} @
18508 @var{compute}
18509Return a new extension for services of type @var{target-type}.
18510@var{compute} must be a one-argument procedure: @code{fold-services}
18511calls it, passing it the value associated with the service that provides
18512the extension; it must return a valid value for the target service.
18513@end deffn
18514
18515@deffn {Scheme Procedure} service-extension? @var{obj}
18516Return true if @var{obj} is a service extension.
18517@end deffn
18518
71654dfd
LC
18519Occasionally, you might want to simply extend an existing service. This
18520involves creating a new service type and specifying the extension of
18521interest, which can be verbose; the @code{simple-service} procedure
18522provides a shorthand for this.
18523
18524@deffn {Scheme Procedure} simple-service @var{name} @var{target} @var{value}
18525Return a service that extends @var{target} with @var{value}. This works
18526by creating a singleton service type @var{name}, of which the returned
18527service is an instance.
18528
18529For example, this extends mcron (@pxref{Scheduled Job Execution}) with
18530an additional job:
18531
18532@example
18533(simple-service 'my-mcron-job mcron-service-type
18534 #~(job '(next-hour (3)) "guix gc -F 2G"))
18535@end example
18536@end deffn
18537
0adfe95a
LC
18538At the core of the service abstraction lies the @code{fold-services}
18539procedure, which is responsible for ``compiling'' a list of services
d62e201c
LC
18540down to a single directory that contains everything needed to boot and
18541run the system---the directory shown by the @command{guix system build}
18542command (@pxref{Invoking guix system}). In essence, it propagates
18543service extensions down the service graph, updating each node parameters
18544on the way, until it reaches the root node.
0adfe95a
LC
18545
18546@deffn {Scheme Procedure} fold-services @var{services} @
d62e201c 18547 [#:target-type @var{system-service-type}]
0adfe95a
LC
18548Fold @var{services} by propagating their extensions down to the root of
18549type @var{target-type}; return the root service adjusted accordingly.
18550@end deffn
18551
18552Lastly, the @code{(gnu services)} module also defines several essential
18553service types, some of which are listed below.
18554
d62e201c
LC
18555@defvr {Scheme Variable} system-service-type
18556This is the root of the service graph. It produces the system directory
18557as returned by the @command{guix system build} command.
18558@end defvr
18559
0adfe95a 18560@defvr {Scheme Variable} boot-service-type
d62e201c
LC
18561The type of the ``boot service'', which produces the @dfn{boot script}.
18562The boot script is what the initial RAM disk runs when booting.
0adfe95a
LC
18563@end defvr
18564
18565@defvr {Scheme Variable} etc-service-type
18566The type of the @file{/etc} service. This service can be extended by
18567passing it name/file tuples such as:
18568
18569@example
18570(list `("issue" ,(plain-file "issue" "Welcome!\n")))
18571@end example
18572
18573In this example, the effect would be to add an @file{/etc/issue} file
18574pointing to the given file.
18575@end defvr
18576
18577@defvr {Scheme Variable} setuid-program-service-type
18578Type for the ``setuid-program service''. This service collects lists of
18579executable file names, passed as gexps, and adds them to the set of
18580setuid-root programs on the system (@pxref{Setuid Programs}).
18581@end defvr
18582
af4c3fd5
LC
18583@defvr {Scheme Variable} profile-service-type
18584Type of the service that populates the @dfn{system profile}---i.e., the
18585programs under @file{/run/current-system/profile}. Other services can
18586extend it by passing it lists of packages to add to the system profile.
18587@end defvr
18588
0adfe95a 18589
dd17bc38
AK
18590@node Shepherd Services
18591@subsubsection Shepherd Services
0adfe95a 18592
e32171ee 18593@cindex shepherd services
0adfe95a
LC
18594@cindex PID 1
18595@cindex init system
a40424bd
CM
18596The @code{(gnu services shepherd)} module provides a way to define
18597services managed by the GNU@tie{}Shepherd, which is the GuixSD
18598initialization system---the first process that is started when the
1068f26b
AE
18599system boots, also known as PID@tie{}1
18600(@pxref{Introduction,,, shepherd, The GNU Shepherd Manual}).
6f305ea5 18601
dd17bc38
AK
18602Services in the Shepherd can depend on each other. For instance, the
18603SSH daemon may need to be started after the syslog daemon has been
18604started, which in turn can only happen once all the file systems have
18605been mounted. The simple operating system defined earlier (@pxref{Using
18606the Configuration System}) results in a service graph like this:
6f305ea5 18607
710fa231 18608@image{images/shepherd-graph,,5in,Typical shepherd service graph.}
6f305ea5
LC
18609
18610You can actually generate such a graph for any operating system
710fa231
AK
18611definition using the @command{guix system shepherd-graph} command
18612(@pxref{system-shepherd-graph, @command{guix system shepherd-graph}}).
6f305ea5 18613
d4053c71
AK
18614The @var{%shepherd-root-service} is a service object representing
18615PID@tie{}1, of type @var{shepherd-root-service-type}; it can be extended
18616by passing it lists of @code{<shepherd-service>} objects.
0adfe95a 18617
d4053c71 18618@deftp {Data Type} shepherd-service
dd17bc38 18619The data type representing a service managed by the Shepherd.
0adfe95a
LC
18620
18621@table @asis
18622@item @code{provision}
18623This is a list of symbols denoting what the service provides.
18624
dd17bc38
AK
18625These are the names that may be passed to @command{herd start},
18626@command{herd status}, and similar commands (@pxref{Invoking herd,,,
18627shepherd, The GNU Shepherd Manual}). @xref{Slots of services, the
18628@code{provides} slot,, shepherd, The GNU Shepherd Manual}, for details.
0adfe95a
LC
18629
18630@item @code{requirements} (default: @code{'()})
dd17bc38 18631List of symbols denoting the Shepherd services this one depends on.
0adfe95a
LC
18632
18633@item @code{respawn?} (default: @code{#t})
18634Whether to restart the service when it stops, for instance when the
18635underlying process dies.
18636
18637@item @code{start}
18638@itemx @code{stop} (default: @code{#~(const #f)})
dd17bc38
AK
18639The @code{start} and @code{stop} fields refer to the Shepherd's
18640facilities to start and stop processes (@pxref{Service De- and
18641Constructors,,, shepherd, The GNU Shepherd Manual}). They are given as
18642G-expressions that get expanded in the Shepherd configuration file
18643(@pxref{G-Expressions}).
0adfe95a
LC
18644
18645@item @code{documentation}
18646A documentation string, as shown when running:
18647
18648@example
dd17bc38 18649herd doc @var{service-name}
0adfe95a
LC
18650@end example
18651
18652where @var{service-name} is one of the symbols in @var{provision}
dd17bc38 18653(@pxref{Invoking herd,,, shepherd, The GNU Shepherd Manual}).
fae685b9
LC
18654
18655@item @code{modules} (default: @var{%default-modules})
18656This is the list of modules that must be in scope when @code{start} and
18657@code{stop} are evaluated.
18658
0adfe95a
LC
18659@end table
18660@end deftp
18661
d4053c71 18662@defvr {Scheme Variable} shepherd-root-service-type
dd17bc38 18663The service type for the Shepherd ``root service''---i.e., PID@tie{}1.
0adfe95a
LC
18664
18665This is the service type that extensions target when they want to create
dd17bc38 18666shepherd services (@pxref{Service Types and Services}, for an example).
d4053c71 18667Each extension must pass a list of @code{<shepherd-service>}.
0adfe95a
LC
18668@end defvr
18669
d4053c71 18670@defvr {Scheme Variable} %shepherd-root-service
0adfe95a
LC
18671This service represents PID@tie{}1.
18672@end defvr
8451a568 18673
8451a568 18674
31f1f593
LC
18675@node Documentation
18676@section Documentation
18677
18678@cindex documentation, searching for
18679@cindex searching for documentation
18680@cindex Info, documentation format
18681@cindex man pages
18682@cindex manual pages
18683In most cases packages installed with Guix come with documentation.
18684There are two main documentation formats: ``Info'', a browseable
18685hypertext format used for GNU software, and ``manual pages'' (or ``man
18686pages''), the linear documentation format traditionally found on Unix.
18687Info manuals are accessed with the @command{info} command or with Emacs,
18688and man pages are accessed using @command{man}.
18689
18690You can look for documentation of software installed on your system by
18691keyword. For example, the following command searches for information
18692about ``TLS'' in Info manuals:
18693
18694@example
18695$ info -k TLS
18696"(emacs)Network Security" -- STARTTLS
18697"(emacs)Network Security" -- TLS
18698"(gnutls)Core TLS API" -- gnutls_certificate_set_verify_flags
18699"(gnutls)Core TLS API" -- gnutls_certificate_set_verify_function
18700@dots{}
18701@end example
18702
18703@noindent
18704The command below searches for the same keyword in man pages:
18705
18706@example
18707$ man -k TLS
18708SSL (7) - OpenSSL SSL/TLS library
18709certtool (1) - GnuTLS certificate tool
18710@dots {}
18711@end example
18712
18713These searches are purely local to your computer so you have the
18714guarantee that documentation you find corresponds to what you have
18715actually installed, you can access it off-line, and your privacy is
18716respected.
18717
18718Once you have these results, you can view the relevant documentation by
18719running, say:
18720
18721@example
18722$ info "(gnutls)Core TLS API"
18723@end example
18724
18725@noindent
18726or:
18727
18728@example
18729$ man certtool
18730@end example
18731
18732Info manuals contain sections and indices as well as hyperlinks like
18733those found in Web pages. The @command{info} reader (@pxref{Top, Info
18734reader,, info-stnd, Stand-alone GNU Info}) and its Emacs counterpart
18735(@pxref{Misc Help,,, emacs, The GNU Emacs Manual}) provide intuitive key
18736bindings to navigate manuals. @xref{Getting Started,,, info, Info: An
18737Introduction}, for an introduction to Info navigation.
18738
cf4a9129
LC
18739@node Installing Debugging Files
18740@section Installing Debugging Files
8451a568 18741
cf4a9129
LC
18742@cindex debugging files
18743Program binaries, as produced by the GCC compilers for instance, are
18744typically written in the ELF format, with a section containing
18745@dfn{debugging information}. Debugging information is what allows the
18746debugger, GDB, to map binary code to source code; it is required to
18747debug a compiled program in good conditions.
8451a568 18748
cf4a9129
LC
18749The problem with debugging information is that is takes up a fair amount
18750of disk space. For example, debugging information for the GNU C Library
18751weighs in at more than 60 MiB. Thus, as a user, keeping all the
18752debugging info of all the installed programs is usually not an option.
18753Yet, space savings should not come at the cost of an impediment to
18754debugging---especially in the GNU system, which should make it easier
18755for users to exert their computing freedom (@pxref{GNU Distribution}).
8451a568 18756
cf4a9129
LC
18757Thankfully, the GNU Binary Utilities (Binutils) and GDB provide a
18758mechanism that allows users to get the best of both worlds: debugging
18759information can be stripped from the binaries and stored in separate
18760files. GDB is then able to load debugging information from those files,
18761when they are available (@pxref{Separate Debug Files,,, gdb, Debugging
18762with GDB}).
8451a568 18763
cf4a9129
LC
18764The GNU distribution takes advantage of this by storing debugging
18765information in the @code{lib/debug} sub-directory of a separate package
18766output unimaginatively called @code{debug} (@pxref{Packages with
18767Multiple Outputs}). Users can choose to install the @code{debug} output
18768of a package when they need it. For instance, the following command
18769installs the debugging information for the GNU C Library and for GNU
18770Guile:
8451a568
LC
18771
18772@example
cf4a9129 18773guix package -i glibc:debug guile:debug
8451a568
LC
18774@end example
18775
cf4a9129
LC
18776GDB must then be told to look for debug files in the user's profile, by
18777setting the @code{debug-file-directory} variable (consider setting it
18778from the @file{~/.gdbinit} file, @pxref{Startup,,, gdb, Debugging with
18779GDB}):
8451a568 18780
cf4a9129
LC
18781@example
18782(gdb) set debug-file-directory ~/.guix-profile/lib/debug
18783@end example
8451a568 18784
cf4a9129
LC
18785From there on, GDB will pick up debugging information from the
18786@code{.debug} files under @file{~/.guix-profile/lib/debug}.
8451a568 18787
cf4a9129
LC
18788In addition, you will most likely want GDB to be able to show the source
18789code being debugged. To do that, you will have to unpack the source
18790code of the package of interest (obtained with @code{guix build
18791--source}, @pxref{Invoking guix build}), and to point GDB to that source
18792directory using the @code{directory} command (@pxref{Source Path,
18793@code{directory},, gdb, Debugging with GDB}).
8451a568 18794
cf4a9129
LC
18795@c XXX: keep me up-to-date
18796The @code{debug} output mechanism in Guix is implemented by the
18797@code{gnu-build-system} (@pxref{Build Systems}). Currently, it is
1068f26b
AE
18798opt-in---debugging information is available only for the packages
18799with definitions explicitly declaring a @code{debug} output. This may be
18800changed to opt-out in the future if our build farm servers can handle
cf4a9129
LC
18801the load. To check whether a package has a @code{debug} output, use
18802@command{guix package --list-available} (@pxref{Invoking guix package}).
8451a568 18803
8451a568 18804
05962f29
LC
18805@node Security Updates
18806@section Security Updates
18807
09866b39
LC
18808@cindex security updates
18809@cindex security vulnerabilities
18810Occasionally, important security vulnerabilities are discovered in software
18811packages and must be patched. Guix developers try hard to keep track of
18812known vulnerabilities and to apply fixes as soon as possible in the
18813@code{master} branch of Guix (we do not yet provide a ``stable'' branch
18814containing only security updates.) The @command{guix lint} tool helps
18815developers find out about vulnerable versions of software packages in the
18816distribution:
18817
18818@smallexample
18819$ guix lint -c cve
e30c2be1
LC
18820gnu/packages/base.scm:652:2: glibc@@2.21: probably vulnerable to CVE-2015-1781, CVE-2015-7547
18821gnu/packages/gcc.scm:334:2: gcc@@4.9.3: probably vulnerable to CVE-2015-5276
18822gnu/packages/image.scm:312:2: openjpeg@@2.1.0: probably vulnerable to CVE-2016-1923, CVE-2016-1924
09866b39
LC
18823@dots{}
18824@end smallexample
18825
18826@xref{Invoking guix lint}, for more information.
18827
843858b8 18828@quotation Note
09866b39
LC
18829As of version @value{VERSION}, the feature described below is considered
18830``beta''.
843858b8 18831@end quotation
05962f29 18832
09866b39 18833Guix follows a functional
05962f29
LC
18834package management discipline (@pxref{Introduction}), which implies
18835that, when a package is changed, @emph{every package that depends on it}
18836must be rebuilt. This can significantly slow down the deployment of
18837fixes in core packages such as libc or Bash, since basically the whole
18838distribution would need to be rebuilt. Using pre-built binaries helps
18839(@pxref{Substitutes}), but deployment may still take more time than
18840desired.
18841
18842@cindex grafts
1068f26b 18843To address this, Guix implements @dfn{grafts}, a mechanism that allows
05962f29
LC
18844for fast deployment of critical updates without the costs associated
18845with a whole-distribution rebuild. The idea is to rebuild only the
18846package that needs to be patched, and then to ``graft'' it onto packages
18847explicitly installed by the user and that were previously referring to
18848the original package. The cost of grafting is typically very low, and
18849order of magnitudes lower than a full rebuild of the dependency chain.
18850
18851@cindex replacements of packages, for grafts
18852For instance, suppose a security update needs to be applied to Bash.
18853Guix developers will provide a package definition for the ``fixed''
18854Bash, say @var{bash-fixed}, in the usual way (@pxref{Defining
18855Packages}). Then, the original package definition is augmented with a
18856@code{replacement} field pointing to the package containing the bug fix:
18857
18858@example
18859(define bash
18860 (package
18861 (name "bash")
18862 ;; @dots{}
18863 (replacement bash-fixed)))
18864@end example
18865
c22a1324
LC
18866From there on, any package depending directly or indirectly on Bash---as
18867reported by @command{guix gc --requisites} (@pxref{Invoking guix
18868gc})---that is installed is automatically ``rewritten'' to refer to
05962f29 18869@var{bash-fixed} instead of @var{bash}. This grafting process takes
1068f26b 18870time proportional to the size of the package, usually less than a
c22a1324
LC
18871minute for an ``average'' package on a recent machine. Grafting is
18872recursive: when an indirect dependency requires grafting, then grafting
18873``propagates'' up to the package that the user is installing.
05962f29 18874
57bdd79e
LC
18875Currently, the length of the name and version of the graft and that of
18876the package it replaces (@var{bash-fixed} and @var{bash} in the example
18877above) must be equal. This restriction mostly comes from the fact that
18878grafting works by patching files, including binary files, directly.
05962f29
LC
18879Other restrictions may apply: for instance, when adding a graft to a
18880package providing a shared library, the original shared library and its
18881replacement must have the same @code{SONAME} and be binary-compatible.
18882
59a4dd50
LC
18883The @option{--no-grafts} command-line option allows you to forcefully
18884avoid grafting (@pxref{Common Build Options, @option{--no-grafts}}).
18885Thus, the command:
18886
18887@example
18888guix build bash --no-grafts
18889@end example
18890
18891@noindent
18892returns the store file name of the original Bash, whereas:
18893
18894@example
18895guix build bash
18896@end example
18897
18898@noindent
18899returns the store file name of the ``fixed'', replacement Bash. This
18900allows you to distinguish between the two variants of Bash.
18901
18902To verify which Bash your whole profile refers to, you can run
18903(@pxref{Invoking guix gc}):
18904
18905@example
18906guix gc -R `readlink -f ~/.guix-profile` | grep bash
18907@end example
18908
18909@noindent
18910@dots{} and compare the store file names that you get with those above.
18911Likewise for a complete GuixSD system generation:
18912
18913@example
18914guix gc -R `guix system build my-config.scm` | grep bash
18915@end example
18916
18917Lastly, to check which Bash running processes are using, you can use the
18918@command{lsof} command:
18919
18920@example
18921lsof | grep /gnu/store/.*bash
18922@end example
18923
05962f29 18924
cf4a9129
LC
18925@node Package Modules
18926@section Package Modules
8451a568 18927
cf4a9129
LC
18928From a programming viewpoint, the package definitions of the
18929GNU distribution are provided by Guile modules in the @code{(gnu packages
18930@dots{})} name space@footnote{Note that packages under the @code{(gnu
18931packages @dots{})} module name space are not necessarily ``GNU
18932packages''. This module naming scheme follows the usual Guile module
18933naming convention: @code{gnu} means that these modules are distributed
18934as part of the GNU system, and @code{packages} identifies modules that
18935define packages.} (@pxref{Modules, Guile modules,, guile, GNU Guile
18936Reference Manual}). For instance, the @code{(gnu packages emacs)}
18937module exports a variable named @code{emacs}, which is bound to a
18938@code{<package>} object (@pxref{Defining Packages}).
113daf62 18939
300868ba 18940The @code{(gnu packages @dots{})} module name space is
cf4a9129
LC
18941automatically scanned for packages by the command-line tools. For
18942instance, when running @code{guix package -i emacs}, all the @code{(gnu
18943packages @dots{})} modules are scanned until one that exports a package
18944object whose name is @code{emacs} is found. This package search
18945facility is implemented in the @code{(gnu packages)} module.
113daf62 18946
300868ba 18947@cindex customization, of packages
8689901f 18948@cindex package module search path
cf4a9129 18949Users can store package definitions in modules with different
60142854 18950names---e.g., @code{(my-packages emacs)}@footnote{Note that the file
c95ded7e
LC
18951name and module name must match. For instance, the @code{(my-packages
18952emacs)} module must be stored in a @file{my-packages/emacs.scm} file
18953relative to the load path specified with @option{--load-path} or
18954@code{GUIX_PACKAGE_PATH}. @xref{Modules and the File System,,,
18955guile, GNU Guile Reference Manual}, for details.}. These package definitions
1068f26b
AE
18956will not be visible by default. Users can invoke commands such as
18957@command{guix package} and @command{guix build} with the
c95ded7e
LC
18958@code{-e} option so that they know where to find the package. Better
18959yet, they can use the
300868ba 18960@code{-L} option of these commands to make those modules visible
8689901f
LC
18961(@pxref{Invoking guix build, @code{--load-path}}), or define the
18962@code{GUIX_PACKAGE_PATH} environment variable. This environment
18963variable makes it easy to extend or customize the distribution and is
18964honored by all the user interfaces.
18965
18966@defvr {Environment Variable} GUIX_PACKAGE_PATH
1068f26b
AE
18967This is a colon-separated list of directories to search for additional
18968package modules. Directories listed in this variable take precedence
18969over the own modules of the distribution.
8689901f 18970@end defvr
ef5dd60a 18971
cf4a9129
LC
18972The distribution is fully @dfn{bootstrapped} and @dfn{self-contained}:
18973each package is built based solely on other packages in the
18974distribution. The root of this dependency graph is a small set of
18975@dfn{bootstrap binaries}, provided by the @code{(gnu packages
18976bootstrap)} module. For more information on bootstrapping,
081145cf 18977@pxref{Bootstrapping}.
ef5dd60a 18978
cf4a9129
LC
18979@node Packaging Guidelines
18980@section Packaging Guidelines
ef5dd60a 18981
e32171ee 18982@cindex packages, creating
cf4a9129
LC
18983The GNU distribution is nascent and may well lack some of your favorite
18984packages. This section describes how you can help make the distribution
18985grow. @xref{Contributing}, for additional information on how you can
18986help.
ef5dd60a 18987
cf4a9129
LC
18988Free software packages are usually distributed in the form of
18989@dfn{source code tarballs}---typically @file{tar.gz} files that contain
18990all the source files. Adding a package to the distribution means
18991essentially two things: adding a @dfn{recipe} that describes how to
18992build the package, including a list of other packages required to build
f97c9175 18993it, and adding @dfn{package metadata} along with that recipe, such as a
cf4a9129 18994description and licensing information.
ef5dd60a 18995
cf4a9129
LC
18996In Guix all this information is embodied in @dfn{package definitions}.
18997Package definitions provide a high-level view of the package. They are
18998written using the syntax of the Scheme programming language; in fact,
18999for each package we define a variable bound to the package definition,
19000and export that variable from a module (@pxref{Package Modules}).
19001However, in-depth Scheme knowledge is @emph{not} a prerequisite for
19002creating packages. For more information on package definitions,
081145cf 19003@pxref{Defining Packages}.
ef5dd60a 19004
cf4a9129
LC
19005Once a package definition is in place, stored in a file in the Guix
19006source tree, it can be tested using the @command{guix build} command
19007(@pxref{Invoking guix build}). For example, assuming the new package is
c71979f4
LC
19008called @code{gnew}, you may run this command from the Guix build tree
19009(@pxref{Running Guix Before It Is Installed}):
ef5dd60a
LC
19010
19011@example
cf4a9129 19012./pre-inst-env guix build gnew --keep-failed
ef5dd60a 19013@end example
ef5dd60a 19014
cf4a9129
LC
19015Using @code{--keep-failed} makes it easier to debug build failures since
19016it provides access to the failed build tree. Another useful
19017command-line option when debugging is @code{--log-file}, to access the
19018build log.
ef5dd60a 19019
cf4a9129
LC
19020If the package is unknown to the @command{guix} command, it may be that
19021the source file contains a syntax error, or lacks a @code{define-public}
19022clause to export the package variable. To figure it out, you may load
19023the module from Guile to get more information about the actual error:
ef5dd60a 19024
cf4a9129
LC
19025@example
19026./pre-inst-env guile -c '(use-modules (gnu packages gnew))'
19027@end example
ef5dd60a 19028
cf4a9129
LC
19029Once your package builds correctly, please send us a patch
19030(@pxref{Contributing}). Well, if you need help, we will be happy to
19031help you too. Once the patch is committed in the Guix repository, the
19032new package automatically gets built on the supported platforms by
2b1cee21 19033@url{http://hydra.gnu.org/jobset/gnu/master, our continuous integration
cf4a9129 19034system}.
ef5dd60a 19035
cf4a9129
LC
19036@cindex substituter
19037Users can obtain the new package definition simply by running
19038@command{guix pull} (@pxref{Invoking guix pull}). When
19039@code{hydra.gnu.org} is done building the package, installing the
19040package automatically downloads binaries from there
19041(@pxref{Substitutes}). The only place where human intervention is
19042needed is to review and apply the patch.
ef5dd60a 19043
ef5dd60a 19044
cf4a9129 19045@menu
ec0339cd
LC
19046* Software Freedom:: What may go into the distribution.
19047* Package Naming:: What's in a name?
19048* Version Numbers:: When the name is not enough.
cbd02397 19049* Synopses and Descriptions:: Helping users find the right package.
fb4d6f6c 19050* Python Modules:: A touch of British comedy.
ec0339cd 19051* Perl Modules:: Little pearls.
e1c963bf 19052* Java Packages:: Coffee break.
ec0339cd 19053* Fonts:: Fond of fonts.
cf4a9129 19054@end menu
ef5dd60a 19055
cf4a9129
LC
19056@node Software Freedom
19057@subsection Software Freedom
ef5dd60a 19058
cf4a9129 19059@c Adapted from http://www.gnu.org/philosophy/philosophy.html.
e32171ee 19060@cindex free software
cf4a9129
LC
19061The GNU operating system has been developed so that users can have
19062freedom in their computing. GNU is @dfn{free software}, meaning that
19063users have the @url{http://www.gnu.org/philosophy/free-sw.html,four
19064essential freedoms}: to run the program, to study and change the program
19065in source code form, to redistribute exact copies, and to distribute
19066modified versions. Packages found in the GNU distribution provide only
19067software that conveys these four freedoms.
c11a6eb1 19068
cf4a9129
LC
19069In addition, the GNU distribution follow the
19070@url{http://www.gnu.org/distros/free-system-distribution-guidelines.html,free
19071software distribution guidelines}. Among other things, these guidelines
19072reject non-free firmware, recommendations of non-free software, and
19073discuss ways to deal with trademarks and patents.
ef5dd60a 19074
1068f26b
AE
19075Some otherwise free upstream package sources contain a small and optional
19076subset that violates the above guidelines, for instance because this subset
19077is itself non-free code. When that happens, the offending items are removed
19078with appropriate patches or code snippets in the @code{origin} form of the
19079package (@pxref{Defining Packages}). This way, @code{guix
cf4a9129
LC
19080build --source} returns the ``freed'' source rather than the unmodified
19081upstream source.
ef5dd60a 19082
ef5dd60a 19083
cf4a9129
LC
19084@node Package Naming
19085@subsection Package Naming
ef5dd60a 19086
e32171ee 19087@cindex package name
cf4a9129
LC
19088A package has actually two names associated with it:
19089First, there is the name of the @emph{Scheme variable}, the one following
19090@code{define-public}. By this name, the package can be made known in the
19091Scheme code, for instance as input to another package. Second, there is
19092the string in the @code{name} field of a package definition. This name
19093is used by package management commands such as
19094@command{guix package} and @command{guix build}.
ef5dd60a 19095
cf4a9129
LC
19096Both are usually the same and correspond to the lowercase conversion of
19097the project name chosen upstream, with underscores replaced with
19098hyphens. For instance, GNUnet is available as @code{gnunet}, and
19099SDL_net as @code{sdl-net}.
927097ef 19100
cf4a9129 19101We do not add @code{lib} prefixes for library packages, unless these are
081145cf 19102already part of the official project name. But @pxref{Python
cf4a9129
LC
19103Modules} and @ref{Perl Modules} for special rules concerning modules for
19104the Python and Perl languages.
927097ef 19105
1b366ee4 19106Font package names are handled differently, @pxref{Fonts}.
7fec52b7 19107
ef5dd60a 19108
cf4a9129
LC
19109@node Version Numbers
19110@subsection Version Numbers
ef5dd60a 19111
e32171ee 19112@cindex package version
cf4a9129
LC
19113We usually package only the latest version of a given free software
19114project. But sometimes, for instance for incompatible library versions,
19115two (or more) versions of the same package are needed. These require
19116different Scheme variable names. We use the name as defined
19117in @ref{Package Naming}
19118for the most recent version; previous versions use the same name, suffixed
19119by @code{-} and the smallest prefix of the version number that may
19120distinguish the two versions.
ef5dd60a 19121
cf4a9129
LC
19122The name inside the package definition is the same for all versions of a
19123package and does not contain any version number.
ef5dd60a 19124
cf4a9129 19125For instance, the versions 2.24.20 and 3.9.12 of GTK+ may be packaged as follows:
ef5dd60a 19126
cf4a9129
LC
19127@example
19128(define-public gtk+
19129 (package
17d8e33f
ML
19130 (name "gtk+")
19131 (version "3.9.12")
19132 ...))
cf4a9129
LC
19133(define-public gtk+-2
19134 (package
17d8e33f
ML
19135 (name "gtk+")
19136 (version "2.24.20")
19137 ...))
cf4a9129
LC
19138@end example
19139If we also wanted GTK+ 3.8.2, this would be packaged as
19140@example
19141(define-public gtk+-3.8
19142 (package
17d8e33f
ML
19143 (name "gtk+")
19144 (version "3.8.2")
19145 ...))
cf4a9129 19146@end example
ef5dd60a 19147
880d647d
LC
19148@c See <https://lists.gnu.org/archive/html/guix-devel/2016-01/msg00425.html>,
19149@c for a discussion of what follows.
19150@cindex version number, for VCS snapshots
19151Occasionally, we package snapshots of upstream's version control system
19152(VCS) instead of formal releases. This should remain exceptional,
19153because it is up to upstream developers to clarify what the stable
19154release is. Yet, it is sometimes necessary. So, what should we put in
19155the @code{version} field?
19156
19157Clearly, we need to make the commit identifier of the VCS snapshot
19158visible in the version string, but we also need to make sure that the
19159version string is monotonically increasing so that @command{guix package
19160--upgrade} can determine which version is newer. Since commit
19161identifiers, notably with Git, are not monotonically increasing, we add
19162a revision number that we increase each time we upgrade to a newer
19163snapshot. The resulting version string looks like this:
19164
19165@example
191662.0.11-3.cabba9e
19167 ^ ^ ^
19168 | | `-- upstream commit ID
19169 | |
19170 | `--- Guix package revision
19171 |
19172latest upstream version
19173@end example
19174
19175It is a good idea to strip commit identifiers in the @code{version}
19176field to, say, 7 digits. It avoids an aesthetic annoyance (assuming
19177aesthetics have a role to play here) as well as problems related to OS
19178limits such as the maximum shebang length (127 bytes for the Linux
19179kernel.) It is best to use the full commit identifiers in
561360a5
LC
19180@code{origin}s, though, to avoid ambiguities. A typical package
19181definition may look like this:
19182
19183@example
19184(define my-package
6e42660b 19185 (let ((commit "c3f29bc928d5900971f65965feaae59e1272a3f7")
19186 (revision "1")) ;Guix package revision
561360a5 19187 (package
6e42660b 19188 (version (string-append "0.9-" revision "."
561360a5
LC
19189 (string-take commit 7)))
19190 (source (origin
19191 (method git-fetch)
19192 (uri (git-reference
19193 (url "git://example.org/my-package.git")
19194 (commit commit)))
19195 (sha256 (base32 "1mbikn@dots{}"))
19196 (file-name (string-append "my-package-" version
19197 "-checkout"))))
19198 ;; @dots{}
19199 )))
19200@end example
880d647d 19201
cbd02397
LC
19202@node Synopses and Descriptions
19203@subsection Synopses and Descriptions
19204
e32171ee
JD
19205@cindex package description
19206@cindex package synopsis
cbd02397
LC
19207As we have seen before, each package in GNU@tie{}Guix includes a
19208synopsis and a description (@pxref{Defining Packages}). Synopses and
19209descriptions are important: They are what @command{guix package
19210--search} searches, and a crucial piece of information to help users
19211determine whether a given package suits their needs. Consequently,
19212packagers should pay attention to what goes into them.
19213
19214Synopses must start with a capital letter and must not end with a
19215period. They must not start with ``a'' or ``the'', which usually does
19216not bring anything; for instance, prefer ``File-frobbing tool'' over ``A
19217tool that frobs files''. The synopsis should say what the package
19218is---e.g., ``Core GNU utilities (file, text, shell)''---or what it is
19219used for---e.g., the synopsis for GNU@tie{}grep is ``Print lines
19220matching a pattern''.
19221
19222Keep in mind that the synopsis must be meaningful for a very wide
19223audience. For example, ``Manipulate alignments in the SAM format''
19224might make sense for a seasoned bioinformatics researcher, but might be
19225fairly unhelpful or even misleading to a non-specialized audience. It
19226is a good idea to come up with a synopsis that gives an idea of the
19227application domain of the package. In this example, this might give
19228something like ``Manipulate nucleotide sequence alignments'', which
19229hopefully gives the user a better idea of whether this is what they are
19230looking for.
19231
cbd02397
LC
19232Descriptions should take between five and ten lines. Use full
19233sentences, and avoid using acronyms without first introducing them.
762e54b7
LC
19234Please avoid marketing phrases such as ``world-leading'',
19235``industrial-strength'', and ``next-generation'', and avoid superlatives
19236like ``the most advanced''---they are not helpful to users looking for a
19237package and may even sound suspicious. Instead, try to be factual,
19238mentioning use cases and features.
19239
19240@cindex Texinfo markup, in package descriptions
cbd02397
LC
19241Descriptions can include Texinfo markup, which is useful to introduce
19242ornaments such as @code{@@code} or @code{@@dfn}, bullet lists, or
ba7d6c76
ML
19243hyperlinks (@pxref{Overview,,, texinfo, GNU Texinfo}). However you
19244should be careful when using some characters for example @samp{@@} and
19245curly braces which are the basic special characters in Texinfo
19246(@pxref{Special Characters,,, texinfo, GNU Texinfo}). User interfaces
19247such as @command{guix package --show} take care of rendering it
19248appropriately.
cbd02397
LC
19249
19250Synopses and descriptions are translated by volunteers
19251@uref{http://translationproject.org/domain/guix-packages.html, at the
19252Translation Project} so that as many users as possible can read them in
19253their native language. User interfaces search them and display them in
19254the language specified by the current locale.
19255
e797e94b
LC
19256To allow @command{xgettext} to extract them as translatable strings,
19257synopses and descriptions @emph{must be literal strings}. This means
19258that you cannot use @code{string-append} or @code{format} to construct
19259these strings:
19260
19261@lisp
19262(package
19263 ;; @dots{}
19264 (synopsis "This is translatable")
19265 (description (string-append "This is " "*not*" " translatable.")))
19266@end lisp
19267
cbd02397
LC
19268Translation is a lot of work so, as a packager, please pay even more
19269attention to your synopses and descriptions as every change may entail
ba7d6c76 19270additional work for translators. In order to help them, it is possible
36743e71 19271to make recommendations or instructions visible to them by inserting
ba7d6c76
ML
19272special comments like this (@pxref{xgettext Invocation,,, gettext, GNU
19273Gettext}):
19274
19275@example
19276;; TRANSLATORS: "X11 resize-and-rotate" should not be translated.
19277(description "ARandR is designed to provide a simple visual front end
19278for the X11 resize-and-rotate (RandR) extension. @dots{}")
19279@end example
cbd02397 19280
ef5dd60a 19281
cf4a9129
LC
19282@node Python Modules
19283@subsection Python Modules
ef5dd60a 19284
e32171ee 19285@cindex python
cf4a9129
LC
19286We currently package Python 2 and Python 3, under the Scheme variable names
19287@code{python-2} and @code{python} as explained in @ref{Version Numbers}.
19288To avoid confusion and naming clashes with other programming languages, it
19289seems desirable that the name of a package for a Python module contains
19290the word @code{python}.
ef5dd60a 19291
cf4a9129
LC
19292Some modules are compatible with only one version of Python, others with both.
19293If the package Foo compiles only with Python 3, we name it
19294@code{python-foo}; if it compiles only with Python 2, we name it
19295@code{python2-foo}. If it is compatible with both versions, we create two
19296packages with the corresponding names.
ef5dd60a 19297
cf4a9129
LC
19298If a project already contains the word @code{python}, we drop this;
19299for instance, the module python-dateutil is packaged under the names
99c866a0
HG
19300@code{python-dateutil} and @code{python2-dateutil}. If the project name
19301starts with @code{py} (e.g. @code{pytz}), we keep it and prefix it as
19302described above.
113daf62 19303
e940a271
HG
19304@subsubsection Specifying Dependencies
19305@cindex inputs, for Python packages
19306
19307Dependency information for Python packages is usually available in the
19308package source tree, with varying degrees of accuracy: in the
19309@file{setup.py} file, in @file{requirements.txt}, or in @file{tox.ini}.
19310
19311Your mission, when writing a recipe for a Python package, is to map
19312these dependencies to the appropriate type of ``input'' (@pxref{package
19313Reference, inputs}). Although the @code{pypi} importer normally does a
19314good job (@pxref{Invoking guix import}), you may want to check the
19315following check list to determine which dependency goes where.
19316
19317@itemize
19318
aaf75c89
HG
19319@item
19320We currently package Python 2 with @code{setuptools} and @code{pip}
19321installed like Python 3.4 has per default. Thus you don't need to
891a843d
HG
19322specify either of these as an input. @command{guix lint} will warn you
19323if you do.
aaf75c89 19324
e940a271
HG
19325@item
19326Python dependencies required at run time go into
19327@code{propagated-inputs}. They are typically defined with the
19328@code{install_requires} keyword in @file{setup.py}, or in the
19329@file{requirements.txt} file.
19330
19331@item
19332Python packages required only at build time---e.g., those listed with
19333the @code{setup_requires} keyword in @file{setup.py}---or only for
19334testing---e.g., those in @code{tests_require}---go into
19335@code{native-inputs}. The rationale is that (1) they do not need to be
19336propagated because they are not needed at run time, and (2) in a
19337cross-compilation context, it's the ``native'' input that we'd want.
19338
aaf75c89 19339Examples are the @code{pytest}, @code{mock}, and @code{nose} test
e940a271
HG
19340frameworks. Of course if any of these packages is also required at
19341run-time, it needs to go to @code{propagated-inputs}.
19342
19343@item
19344Anything that does not fall in the previous categories goes to
19345@code{inputs}, for example programs or C libraries required for building
19346Python packages containing C extensions.
19347
19348@item
19349If a Python package has optional dependencies (@code{extras_require}),
19350it is up to you to decide whether to add them or not, based on their
19351usefulness/overhead ratio (@pxref{Submitting Patches, @command{guix
19352size}}).
19353
19354@end itemize
19355
19356
cf4a9129
LC
19357@node Perl Modules
19358@subsection Perl Modules
523e4896 19359
e32171ee 19360@cindex perl
cf4a9129
LC
19361Perl programs standing for themselves are named as any other package,
19362using the lowercase upstream name.
19363For Perl packages containing a single class, we use the lowercase class name,
19364replace all occurrences of @code{::} by dashes and prepend the prefix
19365@code{perl-}.
19366So the class @code{XML::Parser} becomes @code{perl-xml-parser}.
19367Modules containing several classes keep their lowercase upstream name and
19368are also prepended by @code{perl-}. Such modules tend to have the word
19369@code{perl} somewhere in their name, which gets dropped in favor of the
19370prefix. For instance, @code{libwww-perl} becomes @code{perl-libwww}.
523e4896 19371
523e4896 19372
e1c963bf
HG
19373@node Java Packages
19374@subsection Java Packages
19375
e32171ee 19376@cindex java
e1c963bf
HG
19377Java programs standing for themselves are named as any other package,
19378using the lowercase upstream name.
19379
19380To avoid confusion and naming clashes with other programming languages,
19381it is desirable that the name of a package for a Java package is
19382prefixed with @code{java-}. If a project already contains the word
19383@code{java}, we drop this; for instance, the package @code{ngsjava} is
19384packaged under the name @code{java-ngs}.
19385
19386For Java packages containing a single class or a small class hierarchy,
19387we use the lowercase class name, replace all occurrences of @code{.} by
19388dashes and prepend the prefix @code{java-}. So the class
19389@code{apache.commons.cli} becomes package
19390@code{java-apache-commons-cli}.
19391
19392
7fec52b7
AE
19393@node Fonts
19394@subsection Fonts
19395
e32171ee 19396@cindex fonts
7fec52b7
AE
19397For fonts that are in general not installed by a user for typesetting
19398purposes, or that are distributed as part of a larger software package,
19399we rely on the general packaging rules for software; for instance, this
19400applies to the fonts delivered as part of the X.Org system or fonts that
19401are part of TeX Live.
19402
19403To make it easier for a user to search for fonts, names for other packages
19404containing only fonts are constructed as follows, independently of the
19405upstream package name.
19406
19407The name of a package containing only one font family starts with
19408@code{font-}; it is followed by the foundry name and a dash @code{-}
19409if the foundry is known, and the font family name, in which spaces are
19410replaced by dashes (and as usual, all upper case letters are transformed
19411to lower case).
19412For example, the Gentium font family by SIL is packaged under the name
19413@code{font-sil-gentium}.
19414
19415For a package containing several font families, the name of the collection
19416is used in the place of the font family name.
19417For instance, the Liberation fonts consist of three families,
19418Liberation Sans, Liberation Serif and Liberation Mono.
19419These could be packaged separately under the names
19420@code{font-liberation-sans} and so on; but as they are distributed together
19421under a common name, we prefer to package them together as
19422@code{font-liberation}.
19423
19424In the case where several formats of the same font family or font collection
19425are packaged separately, a short form of the format, prepended by a dash,
19426is added to the package name. We use @code{-ttf} for TrueType fonts,
1b366ee4 19427@code{-otf} for OpenType fonts and @code{-type1} for PostScript Type 1
7fec52b7
AE
19428fonts.
19429
19430
b25937e3 19431
cf4a9129
LC
19432@node Bootstrapping
19433@section Bootstrapping
b25937e3 19434
cf4a9129 19435@c Adapted from the ELS 2013 paper.
b25937e3 19436
cf4a9129 19437@cindex bootstrapping
7889394e 19438
cf4a9129
LC
19439Bootstrapping in our context refers to how the distribution gets built
19440``from nothing''. Remember that the build environment of a derivation
19441contains nothing but its declared inputs (@pxref{Introduction}). So
19442there's an obvious chicken-and-egg problem: how does the first package
19443get built? How does the first compiler get compiled? Note that this is
19444a question of interest only to the curious hacker, not to the regular
19445user, so you can shamelessly skip this section if you consider yourself
19446a ``regular user''.
72b9d60d 19447
cf4a9129
LC
19448@cindex bootstrap binaries
19449The GNU system is primarily made of C code, with libc at its core. The
19450GNU build system itself assumes the availability of a Bourne shell and
19451command-line tools provided by GNU Coreutils, Awk, Findutils, `sed', and
19452`grep'. Furthermore, build programs---programs that run
19453@code{./configure}, @code{make}, etc.---are written in Guile Scheme
19454(@pxref{Derivations}). Consequently, to be able to build anything at
19455all, from scratch, Guix relies on pre-built binaries of Guile, GCC,
19456Binutils, libc, and the other packages mentioned above---the
19457@dfn{bootstrap binaries}.
72b9d60d 19458
cf4a9129
LC
19459These bootstrap binaries are ``taken for granted'', though we can also
19460re-create them if needed (more on that later).
72b9d60d 19461
cf4a9129 19462@unnumberedsubsec Preparing to Use the Bootstrap Binaries
c79d54fe 19463
cf4a9129
LC
19464@c As of Emacs 24.3, Info-mode displays the image, but since it's a
19465@c large image, it's hard to scroll. Oh well.
19466@image{images/bootstrap-graph,6in,,Dependency graph of the early bootstrap derivations}
523e4896 19467
cf4a9129
LC
19468The figure above shows the very beginning of the dependency graph of the
19469distribution, corresponding to the package definitions of the @code{(gnu
d33fa0c7
LC
19470packages bootstrap)} module. A similar figure can be generated with
19471@command{guix graph} (@pxref{Invoking guix graph}), along the lines of:
19472
19473@example
19474guix graph -t derivation \
19475 -e '(@@@@ (gnu packages bootstrap) %bootstrap-gcc)' \
19476 | dot -Tps > t.ps
19477@end example
19478
19479At this level of detail, things are
cf4a9129
LC
19480slightly complex. First, Guile itself consists of an ELF executable,
19481along with many source and compiled Scheme files that are dynamically
19482loaded when it runs. This gets stored in the @file{guile-2.0.7.tar.xz}
19483tarball shown in this graph. This tarball is part of Guix's ``source''
19484distribution, and gets inserted into the store with @code{add-to-store}
19485(@pxref{The Store}).
2e7b5cea 19486
cf4a9129
LC
19487But how do we write a derivation that unpacks this tarball and adds it
19488to the store? To solve this problem, the @code{guile-bootstrap-2.0.drv}
19489derivation---the first one that gets built---uses @code{bash} as its
19490builder, which runs @code{build-bootstrap-guile.sh}, which in turn calls
19491@code{tar} to unpack the tarball. Thus, @file{bash}, @file{tar},
19492@file{xz}, and @file{mkdir} are statically-linked binaries, also part of
19493the Guix source distribution, whose sole purpose is to allow the Guile
19494tarball to be unpacked.
fb729425 19495
cf4a9129
LC
19496Once @code{guile-bootstrap-2.0.drv} is built, we have a functioning
19497Guile that can be used to run subsequent build programs. Its first task
19498is to download tarballs containing the other pre-built binaries---this
19499is what the @code{.tar.xz.drv} derivations do. Guix modules such as
19500@code{ftp-client.scm} are used for this purpose. The
19501@code{module-import.drv} derivations import those modules in a directory
19502in the store, using the original layout. The
19503@code{module-import-compiled.drv} derivations compile those modules, and
19504write them in an output directory with the right layout. This
19505corresponds to the @code{#:modules} argument of
19506@code{build-expression->derivation} (@pxref{Derivations}).
fb729425 19507
cf4a9129
LC
19508Finally, the various tarballs are unpacked by the
19509derivations @code{gcc-bootstrap-0.drv}, @code{glibc-bootstrap-0.drv},
19510etc., at which point we have a working C tool chain.
fb729425 19511
fb729425 19512
cf4a9129 19513@unnumberedsubsec Building the Build Tools
523e4896 19514
cf4a9129
LC
19515Bootstrapping is complete when we have a full tool chain that does not
19516depend on the pre-built bootstrap tools discussed above. This
19517no-dependency requirement is verified by checking whether the files of
19518the final tool chain contain references to the @file{/gnu/store}
19519directories of the bootstrap inputs. The process that leads to this
19520``final'' tool chain is described by the package definitions found in
1f6f57df 19521the @code{(gnu packages commencement)} module.
df2ce343 19522
d33fa0c7
LC
19523The @command{guix graph} command allows us to ``zoom out'' compared to
19524the graph above, by looking at the level of package objects instead of
19525individual derivations---remember that a package may translate to
19526several derivations, typically one derivation to download its source,
19527one to build the Guile modules it needs, and one to actually build the
19528package from source. The command:
19529
19530@example
19531guix graph -t bag \
19532 -e '(@@@@ (gnu packages commencement)
19533 glibc-final-with-bootstrap-bash)' | dot -Tps > t.ps
19534@end example
19535
19536@noindent
19537produces the dependency graph leading to the ``final'' C
19538library@footnote{You may notice the @code{glibc-intermediate} label,
19539suggesting that it is not @emph{quite} final, but as a good
19540approximation, we will consider it final.}, depicted below.
19541
19542@image{images/bootstrap-packages,6in,,Dependency graph of the early packages}
19543
cf4a9129
LC
19544@c See <http://lists.gnu.org/archive/html/gnu-system-discuss/2012-10/msg00000.html>.
19545The first tool that gets built with the bootstrap binaries is
d33fa0c7
LC
19546GNU@tie{}Make---noted @code{make-boot0} above---which is a prerequisite
19547for all the following packages. From there Findutils and Diffutils get
19548built.
523e4896 19549
cf4a9129
LC
19550Then come the first-stage Binutils and GCC, built as pseudo cross
19551tools---i.e., with @code{--target} equal to @code{--host}. They are
19552used to build libc. Thanks to this cross-build trick, this libc is
19553guaranteed not to hold any reference to the initial tool chain.
4af2447e 19554
d33fa0c7
LC
19555From there the final Binutils and GCC (not shown above) are built.
19556GCC uses @code{ld}
cf4a9129
LC
19557from the final Binutils, and links programs against the just-built libc.
19558This tool chain is used to build the other packages used by Guix and by
19559the GNU Build System: Guile, Bash, Coreutils, etc.
4af2447e 19560
cf4a9129
LC
19561And voilà! At this point we have the complete set of build tools that
19562the GNU Build System expects. These are in the @code{%final-inputs}
dd164244
MW
19563variable of the @code{(gnu packages commencement)} module, and are
19564implicitly used by any package that uses @code{gnu-build-system}
1f6f57df 19565(@pxref{Build Systems, @code{gnu-build-system}}).
4af2447e 19566
4af2447e 19567
cf4a9129 19568@unnumberedsubsec Building the Bootstrap Binaries
4af2447e 19569
e32171ee 19570@cindex bootstrap binaries
cf4a9129
LC
19571Because the final tool chain does not depend on the bootstrap binaries,
19572those rarely need to be updated. Nevertheless, it is useful to have an
19573automated way to produce them, should an update occur, and this is what
19574the @code{(gnu packages make-bootstrap)} module provides.
4af2447e 19575
cf4a9129
LC
19576The following command builds the tarballs containing the bootstrap
19577binaries (Guile, Binutils, GCC, libc, and a tarball containing a mixture
19578of Coreutils and other basic command-line tools):
4b2615e1 19579
cf4a9129
LC
19580@example
19581guix build bootstrap-tarballs
19582@end example
19583
19584The generated tarballs are those that should be referred to in the
19585@code{(gnu packages bootstrap)} module mentioned at the beginning of
19586this section.
19587
19588Still here? Then perhaps by now you've started to wonder: when do we
19589reach a fixed point? That is an interesting question! The answer is
19590unknown, but if you would like to investigate further (and have
19591significant computational and storage resources to do so), then let us
19592know.
19593
19594@node Porting
19595@section Porting to a New Platform
19596
19597As discussed above, the GNU distribution is self-contained, and
19598self-containment is achieved by relying on pre-built ``bootstrap
19599binaries'' (@pxref{Bootstrapping}). These binaries are specific to an
19600operating system kernel, CPU architecture, and application binary
19601interface (ABI). Thus, to port the distribution to a platform that is
19602not yet supported, one must build those bootstrap binaries, and update
19603the @code{(gnu packages bootstrap)} module to use them on that platform.
19604
19605Fortunately, Guix can @emph{cross compile} those bootstrap binaries.
19606When everything goes well, and assuming the GNU tool chain supports the
19607target platform, this can be as simple as running a command like this
19608one:
19609
19610@example
19611guix build --target=armv5tel-linux-gnueabi bootstrap-tarballs
19612@end example
19613
1c0c417d
LC
19614For this to work, the @code{glibc-dynamic-linker} procedure in
19615@code{(gnu packages bootstrap)} must be augmented to return the right
19616file name for libc's dynamic linker on that platform; likewise,
19617@code{system->linux-architecture} in @code{(gnu packages linux)} must be
19618taught about the new platform.
19619
cf4a9129 19620Once these are built, the @code{(gnu packages bootstrap)} module needs
1c0c417d
LC
19621to be updated to refer to these binaries on the target platform. That
19622is, the hashes and URLs of the bootstrap tarballs for the new platform
19623must be added alongside those of the currently supported platforms. The
19624bootstrap Guile tarball is treated specially: it is expected to be
03d0e2d2 19625available locally, and @file{gnu/local.mk} has rules do download it for
1c0c417d
LC
19626the supported architectures; a rule for the new platform must be added
19627as well.
cf4a9129
LC
19628
19629In practice, there may be some complications. First, it may be that the
19630extended GNU triplet that specifies an ABI (like the @code{eabi} suffix
19631above) is not recognized by all the GNU tools. Typically, glibc
19632recognizes some of these, whereas GCC uses an extra @code{--with-abi}
19633configure flag (see @code{gcc.scm} for examples of how to handle this).
19634Second, some of the required packages could fail to build for that
19635platform. Lastly, the generated binaries could be broken for some
19636reason.
4af2447e 19637
9bf3c1a7 19638@c *********************************************************************
8c01b9d0 19639@include contributing.texi
c78bd12b 19640
568717fd
LC
19641@c *********************************************************************
19642@node Acknowledgments
19643@chapter Acknowledgments
19644
136787cb
LC
19645Guix is based on the @uref{http://nixos.org/nix/, Nix package manager},
19646which was designed and
4c7ac9aa
LC
19647implemented by Eelco Dolstra, with contributions from other people (see
19648the @file{nix/AUTHORS} file in Guix.) Nix pioneered functional package
568717fd
LC
19649management, and promoted unprecedented features, such as transactional
19650package upgrades and rollbacks, per-user profiles, and referentially
19651transparent build processes. Without this work, Guix would not exist.
19652
19653The Nix-based software distributions, Nixpkgs and NixOS, have also been
19654an inspiration for Guix.
19655
4c7ac9aa
LC
19656GNU@tie{}Guix itself is a collective work with contributions from a
19657number of people. See the @file{AUTHORS} file in Guix for more
19658information on these fine people. The @file{THANKS} file lists people
19659who have helped by reporting bugs, taking care of the infrastructure,
19660providing artwork and themes, making suggestions, and more---thank you!
19661
19662
568717fd
LC
19663@c *********************************************************************
19664@node GNU Free Documentation License
19665@appendix GNU Free Documentation License
e32171ee 19666@cindex license, GNU Free Documentation License
568717fd
LC
19667@include fdl-1.3.texi
19668
19669@c *********************************************************************
19670@node Concept Index
19671@unnumbered Concept Index
19672@printindex cp
19673
a85b83d2
LC
19674@node Programming Index
19675@unnumbered Programming Index
19676@syncodeindex tp fn
19677@syncodeindex vr fn
568717fd
LC
19678@printindex fn
19679
19680@bye
19681
19682@c Local Variables:
19683@c ispell-local-dictionary: "american";
19684@c End: