guix-install.sh: Explicitly set root's home directory.
[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
29a68668 16Copyright @copyright{} 2012, 2013, 2014, 2015, 2016, 2017, 2018 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@*
b617a9fe 24Copyright @copyright{} 2015, 2016, 2017, 2018 Ricardo Wurmus@*
4d343a14 25Copyright @copyright{} 2016 Ben Woodcroft@*
272c0709 26Copyright @copyright{} 2016, 2017, 2018 Chris Marusich@*
16718b67 27Copyright @copyright{} 2016, 2017, 2018 Efraim Flashner@*
d6a07ee6 28Copyright @copyright{} 2016 John Darrington@*
4a78fd46 29Copyright @copyright{} 2016, 2017 Nils Gillmann@*
9bb98bcf 30Copyright @copyright{} 2016, 2017 Jan Nieuwenhuizen@*
9747d189 31Copyright @copyright{} 2016 Julien Lepiller@*
78cef99b 32Copyright @copyright{} 2016 Alex ter Weele@*
7ab04c17 33Copyright @copyright{} 2017, 2018 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 42Copyright @copyright{} 2017 Maxim Cournoyer@*
782c94fe 43Copyright @copyright{} 2017, 2018 Tobias Geerinckx-Rice@*
1115f140 44Copyright @copyright{} 2017 George Clemmer@*
3d0aa7f7 45Copyright @copyright{} 2017 Andy Wingo@*
a76acfd3 46Copyright @copyright{} 2017, 2018 Arun Isaac@*
3853f86f 47Copyright @copyright{} 2017 nee@*
e1cf4fd2 48Copyright @copyright{} 2018 Rutger Helling@*
07ec3492
MG
49Copyright @copyright{} 2018 Oleg Pykhalov@*
50Copyright @copyright{} 2018 Mike Gerwitz
7df7a74e
NK
51
52Permission is granted to copy, distribute and/or modify this document
53under the terms of the GNU Free Documentation License, Version 1.3 or
54any later version published by the Free Software Foundation; with no
55Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
56copy of the license is included in the section entitled ``GNU Free
57Documentation License''.
58@end copying
568717fd 59
abd67856 60@dircategory System administration
568717fd 61@direntry
abd67856
LC
62* Guix: (guix). Manage installed software and system configuration.
63* guix package: (guix)Invoking guix package. Installing, removing, and upgrading packages.
abd67856
LC
64* guix gc: (guix)Invoking guix gc. Reclaiming unused disk space.
65* guix pull: (guix)Invoking guix pull. Update the list of available packages.
66* guix system: (guix)Invoking guix system. Manage the operating system configuration.
568717fd 67@end direntry
568717fd 68
372c4bbc
DT
69@dircategory Software development
70@direntry
abd67856 71* guix environment: (guix)Invoking guix environment. Building development environments with Guix.
ad172c4a
LC
72* guix build: (guix)Invoking guix build. Building packages.
73* guix pack: (guix)Invoking guix pack. Creating binary bundles.
372c4bbc
DT
74@end direntry
75
568717fd 76@titlepage
7730d112
LC
77@title GNU Guix Reference Manual
78@subtitle Using the GNU Guix Functional Package Manager
2cbed07e 79@author The GNU Guix Developers
568717fd
LC
80
81@page
82@vskip 0pt plus 1filll
83Edition @value{EDITION} @*
84@value{UPDATED} @*
85
7df7a74e 86@insertcopying
568717fd
LC
87@end titlepage
88
568717fd
LC
89@contents
90
91@c *********************************************************************
92@node Top
f8348b91 93@top GNU Guix
568717fd 94
f8348b91
LC
95This document describes GNU Guix version @value{VERSION}, a functional
96package management tool written for the GNU system.
568717fd
LC
97
98@menu
99* Introduction:: What is Guix about?
bd5e766b 100* Installation:: Installing Guix.
eeaf4427 101* Package Management:: Package installation, upgrade, etc.
568717fd
LC
102* Programming Interface:: Using Guix in Scheme.
103* Utilities:: Package management commands.
a1ba8475 104* GNU Distribution:: Software for your friendly GNU system.
9bf3c1a7 105* Contributing:: Your help needed!
568717fd
LC
106
107* Acknowledgments:: Thanks!
108* GNU Free Documentation License:: The license of this manual.
109* Concept Index:: Concepts.
a85b83d2 110* Programming Index:: Data types, functions, and variables.
aaa3eaa9
LC
111
112@detailmenu
113 --- The Detailed Node Listing ---
114
115Installation
116
1b2b8177 117* Binary Installation:: Getting Guix running in no time!
aaa3eaa9 118* Requirements:: Software needed to build and run Guix.
ec0339cd 119* Running the Test Suite:: Testing Guix.
aaa3eaa9
LC
120* Setting Up the Daemon:: Preparing the build daemon's environment.
121* Invoking guix-daemon:: Running the build daemon.
0e2d0213 122* Application Setup:: Application-specific setup.
aaa3eaa9
LC
123
124Setting Up the Daemon
125
126* Build Environment Setup:: Preparing the isolated build environment.
127* Daemon Offload Setup:: Offloading builds to remote machines.
b617a9fe 128* SELinux Support:: Using an SELinux policy for the daemon.
aaa3eaa9
LC
129
130Package Management
131
132* Features:: How Guix will make your life brighter.
133* Invoking guix package:: Package installation, removal, etc.
aaa3eaa9
LC
134* Substitutes:: Downloading pre-built binaries.
135* Packages with Multiple Outputs:: Single source package, multiple outputs.
136* Invoking guix gc:: Running the garbage collector.
137* Invoking guix pull:: Fetching the latest Guix and distribution.
239c2266 138* Invoking guix pack:: Creating software bundles.
aaa3eaa9
LC
139* Invoking guix archive:: Exporting and importing store files.
140
77f92158
CM
141Substitutes
142
143* Official Substitute Server:: One particular source of substitutes.
144* Substitute Server Authorization:: How to enable or disable substitutes.
145* Substitute Authentication:: How Guix verifies substitutes.
146* Proxy Settings:: How to get substitutes via proxy.
147* Substitution Failure:: What happens when substitution fails.
148* On Trusting Binaries:: How can you trust that binary blob?
149
aaa3eaa9
LC
150Programming Interface
151
152* Defining Packages:: Defining new packages.
153* Build Systems:: Specifying how packages are built.
154* The Store:: Manipulating the package store.
155* Derivations:: Low-level interface to package derivations.
156* The Store Monad:: Purely functional interface to the store.
157* G-Expressions:: Manipulating build expressions.
158
92492b23
LC
159Defining Packages
160
10f4353d 161* package Reference :: The package data type.
92492b23
LC
162* origin Reference:: The origin data type.
163
aaa3eaa9
LC
164Utilities
165
166* Invoking guix build:: Building packages from the command line.
fcc58db6 167* Invoking guix edit:: Editing package definitions.
aaa3eaa9
LC
168* Invoking guix download:: Downloading a file and printing its hash.
169* Invoking guix hash:: Computing the cryptographic hash of a file.
170* Invoking guix import:: Importing package definitions.
171* Invoking guix refresh:: Updating package definitions.
172* Invoking guix lint:: Finding errors in package definitions.
fcc58db6 173* Invoking guix size:: Profiling disk usage.
88856916 174* Invoking guix graph:: Visualizing the graph of packages.
aaa3eaa9 175* Invoking guix environment:: Setting up development environments.
aff8ce7c 176* Invoking guix publish:: Sharing substitutes.
d23c20f1 177* Invoking guix challenge:: Challenging substitute servers.
f11c444d 178* Invoking guix copy:: Copying to and from a remote store.
32efa254 179* Invoking guix container:: Process isolation.
585347d7 180* Invoking guix weather:: Assessing substitute availability.
aaa3eaa9 181
e3009f60
LC
182Invoking @command{guix build}
183
184* Common Build Options:: Build options for most commands.
f11c444d 185* Package Transformation Options:: Creating variants of packages.
e3009f60 186* Additional Build Options:: Options specific to 'guix build'.
10f4353d 187* Debugging Build Failures:: Real life packaging experience.
e3009f60 188
aaa3eaa9
LC
189GNU Distribution
190
191* System Installation:: Installing the whole operating system.
35ed9306 192* System Configuration:: Configuring the operating system.
31f1f593 193* Documentation:: Browsing software user manuals.
aaa3eaa9
LC
194* Installing Debugging Files:: Feeding the debugger.
195* Security Updates:: Deploying security fixes quickly.
196* Package Modules:: Packages from the programmer's viewpoint.
197* Packaging Guidelines:: Growing the distribution.
198* Bootstrapping:: GNU/Linux built from scratch.
199* Porting:: Targeting another platform or kernel.
200
e3009f60
LC
201System Installation
202
203* Limitations:: What you can expect.
204* Hardware Considerations:: Supported hardware.
2626062b 205* USB Stick and DVD Installation:: Preparing the installation medium.
e3009f60
LC
206* Preparing for Installation:: Networking, partitioning, etc.
207* Proceeding with the Installation:: The real thing.
c8b54374 208* Installing GuixSD in a VM:: GuixSD playground.
e3009f60
LC
209* Building the Installation Image:: How this comes to be.
210
aaa3eaa9
LC
211System Configuration
212
213* Using the Configuration System:: Customizing your GNU system.
214* operating-system Reference:: Detail of operating-system declarations.
215* File Systems:: Configuring file system mounts.
216* Mapped Devices:: Block device extra processing.
217* User Accounts:: Specifying user accounts.
598e19dc 218* Locales:: Language and cultural convention settings.
aaa3eaa9
LC
219* Services:: Specifying system services.
220* Setuid Programs:: Programs running with root privileges.
1b2b8177 221* X.509 Certificates:: Authenticating HTTPS servers.
996ed739 222* Name Service Switch:: Configuring libc's name service switch.
aaa3eaa9 223* Initial RAM Disk:: Linux-Libre bootstrapping.
74e64724 224* Bootloader Configuration:: Configuring the boot loader.
aaa3eaa9 225* Invoking guix system:: Instantiating a system configuration.
97d76250 226* Running GuixSD in a VM:: How to run GuixSD in a virtual machine.
aaa3eaa9
LC
227* Defining Services:: Adding new service definitions.
228
229Services
230
231* Base Services:: Essential system services.
c311089b 232* Scheduled Job Execution:: The mcron service.
92c03a87 233* Log Rotation:: The rottlog service.
aaa3eaa9
LC
234* Networking Services:: Network setup, SSH daemon, etc.
235* X Window:: Graphical display.
f11c444d 236* Printing Services:: Local and remote printer support.
1b2b8177 237* Desktop Services:: D-Bus and desktop services.
29059262 238* Database Services:: SQL databases, key-value stores, etc.
d8c18af8 239* Mail Services:: IMAP, POP3, SMTP, and all that.
78cef99b 240* Messaging Services:: Messaging services.
b6d2930d 241* Telephony Services:: Telephony services.
730ed6ec 242* Monitoring Services:: Monitoring services.
859e367d 243* Kerberos Services:: Kerberos services.
cbd02397 244* Web Services:: Web servers.
1115f140 245* Certificate Services:: TLS certificates via Let's Encrypt.
ba69e8f7 246* DNS Services:: DNS daemons.
2be1b471 247* VPN Services:: VPN daemons.
eb419bc9 248* Network File System:: NFS related services.
f11c444d 249* Continuous Integration:: The Cuirass service.
bfbf6e1e 250* Power management Services:: The TLP tool.
06465d2b 251* Audio Services:: The MPD.
e6051057 252* Virtualization Services:: Virtualization services.
05f1cb3c 253* Version Control Services:: Providing remote access to Git repositories.
a76acfd3 254* Game Services:: Game servers.
dbc6d370 255* Miscellaneous Services:: Other services.
aaa3eaa9 256
0adfe95a
LC
257Defining Services
258
259* Service Composition:: The model for composing services.
260* Service Types and Services:: Types and services.
261* Service Reference:: API reference.
dd17bc38 262* Shepherd Services:: A particular type of service.
0adfe95a 263
aaa3eaa9
LC
264Packaging Guidelines
265
ec0339cd
LC
266* Software Freedom:: What may go into the distribution.
267* Package Naming:: What's in a name?
268* Version Numbers:: When the name is not enough.
cbd02397 269* Synopses and Descriptions:: Helping users find the right package.
fb4d6f6c 270* Python Modules:: A touch of British comedy.
ec0339cd 271* Perl Modules:: Little pearls.
e1c963bf 272* Java Packages:: Coffee break.
ec0339cd 273* Fonts:: Fond of fonts.
aaa3eaa9 274
8c01b9d0
ML
275Contributing
276
277* Building from Git:: The latest and greatest.
278* Running Guix Before It Is Installed:: Hacker tricks.
279* The Perfect Setup:: The right tools.
280* Coding Style:: Hygiene of the contributor.
281* Submitting Patches:: Share your work.
282
283Coding Style
284
285* Programming Paradigm:: How to compose your elements.
286* Modules:: Where to store your code?
287* Data Types and Pattern Matching:: Implementing data structures.
288* Formatting Code:: Writing conventions.
289
aaa3eaa9 290@end detailmenu
568717fd
LC
291@end menu
292
293@c *********************************************************************
294@node Introduction
295@chapter Introduction
296
6f773606 297@cindex purpose
c80e7e55 298GNU Guix@footnote{``Guix'' is pronounced like ``geeks'', or ``ɡiːks''
6f773606
LC
299using the international phonetic alphabet (IPA).} is a package
300management tool for the GNU system. Guix makes it easy for unprivileged
301users to install, upgrade, or remove packages, to roll back to a
302previous package set, to build packages from source, and generally
303assists with the creation and maintenance of software environments.
304
305@cindex user interfaces
306Guix provides a command-line package management interface
307(@pxref{Invoking guix package}), a set of command-line utilities
deb6276d 308(@pxref{Utilities}), as well as Scheme programming interfaces
6f773606
LC
309(@pxref{Programming Interface}).
310@cindex build daemon
311Its @dfn{build daemon} is responsible for building packages on behalf of
312users (@pxref{Setting Up the Daemon}) and for downloading pre-built
313binaries from authorized sources (@pxref{Substitutes}).
314
315@cindex extensibility of the distribution
e32171ee 316@cindex customization, of packages
6f773606
LC
317Guix includes package definitions for many GNU and non-GNU packages, all
318of which @uref{https://www.gnu.org/philosophy/free-sw.html, respect the
319user's computing freedom}. It is @emph{extensible}: users can write
320their own package definitions (@pxref{Defining Packages}) and make them
321available as independent package modules (@pxref{Package Modules}). It
322is also @emph{customizable}: users can @emph{derive} specialized package
323definitions from existing ones, including from the command line
324(@pxref{Package Transformation Options}).
325
326@cindex Guix System Distribution
327@cindex GuixSD
328You can install GNU@tie{}Guix on top of an existing GNU/Linux system
329where it complements the available tools without interference
330(@pxref{Installation}), or you can use it as part of the standalone
331@dfn{Guix System Distribution} or GuixSD (@pxref{GNU Distribution}).
332With GNU@tie{}GuixSD, you @emph{declare} all aspects of the operating
333system configuration and Guix takes care of instantiating the
334configuration in a transactional, reproducible, and stateless fashion
335(@pxref{System Configuration}).
568717fd
LC
336
337@cindex functional package management
6f773606 338Under the hood, Guix implements the @dfn{functional package management}
136787cb
LC
339discipline pioneered by Nix (@pxref{Acknowledgments}).
340In Guix, the package build and installation process is seen
6f773606 341as a @emph{function}, in the mathematical sense. That function takes inputs,
4bfc4ea3
NK
342such as build scripts, a compiler, and libraries, and
343returns an installed package. As a pure function, its result depends
568717fd
LC
344solely on its inputs---for instance, it cannot refer to software or
345scripts that were not explicitly passed as inputs. A build function
4bfc4ea3 346always produces the same result when passed a given set of inputs. It
f97c9175 347cannot alter the environment of the running system in
568717fd
LC
348any way; for instance, it cannot create, modify, or delete files outside
349of its build and installation directories. This is achieved by running
e900c503 350build processes in isolated environments (or @dfn{containers}), where only their
4bfc4ea3 351explicit inputs are visible.
568717fd 352
e531ac2a 353@cindex store
568717fd 354The result of package build functions is @dfn{cached} in the file
e531ac2a 355system, in a special directory called @dfn{the store} (@pxref{The
f97c9175 356Store}). Each package is installed in a directory of its own in the
834129e0 357store---by default under @file{/gnu/store}. The directory name contains
568717fd
LC
358a hash of all the inputs used to build that package; thus, changing an
359input yields a different directory name.
360
f97c9175
AE
361This approach is the foundation for the salient features of Guix: support
362for transactional package upgrade and rollback, per-user installation, and
eeaf4427 363garbage collection of packages (@pxref{Features}).
568717fd 364
a1ba8475 365
bd5e766b
LC
366@c *********************************************************************
367@node Installation
368@chapter Installation
369
e32171ee 370@cindex installing Guix
48febeb8
LC
371GNU Guix is available for download from its website at
372@url{http://www.gnu.org/software/guix/}. This section describes the
373software requirements of Guix, as well as how to install it and get
374ready to use it.
bd5e766b 375
5af6de3e
LC
376Note that this section is concerned with the installation of the package
377manager, which can be done on top of a running GNU/Linux system. If,
378instead, you want to install the complete GNU operating system,
6621cdb6 379@pxref{System Installation}.
5af6de3e 380
d23ef788
LC
381@cindex foreign distro
382When installed on a running GNU/Linux system---thereafter called a
383@dfn{foreign distro}---GNU@tie{}Guix complements the available tools
384without interference. Its data lives exclusively in two directories,
385usually @file{/gnu/store} and @file{/var/guix}; other files on your
386system, such as @file{/etc}, are left untouched.
387
7fcf2a0b
LC
388Once installed, Guix can be updated by running @command{guix pull}
389(@pxref{Invoking guix pull}).
390
bd5e766b 391@menu
09722b11 392* Binary Installation:: Getting Guix running in no time!
bd5e766b 393* Requirements:: Software needed to build and run Guix.
ec0339cd 394* Running the Test Suite:: Testing Guix.
bd5e766b
LC
395* Setting Up the Daemon:: Preparing the build daemon's environment.
396* Invoking guix-daemon:: Running the build daemon.
0e2d0213 397* Application Setup:: Application-specific setup.
bd5e766b
LC
398@end menu
399
09722b11
LC
400@node Binary Installation
401@section Binary Installation
402
e32171ee 403@cindex installing Guix from binaries
09722b11
LC
404This section describes how to install Guix on an arbitrary system from a
405self-contained tarball providing binaries for Guix and for all its
406dependencies. This is often quicker than installing from source, which
407is described in the next sections. The only requirement is to have
408GNU@tie{}tar and Xz.
409
6f4e8693
RW
410We provide a
411@uref{https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh,
412shell installer script}, which automates the download, installation, and
413initial configuration of Guix. It should be run as the root user.
414
09722b11
LC
415Installing goes along these lines:
416
417@enumerate
418@item
e32171ee 419@cindex downloading Guix binary
09722b11 420Download the binary tarball from
daa8922a
LC
421@indicateurl{ftp://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{system}.tar.xz},
422where @var{system} is @code{x86_64-linux} for an @code{x86_64} machine
423already running the kernel Linux, and so on.
424
debc6360 425@c The following is somewhat duplicated in ``System Installation''.
daa8922a
LC
426Make sure to download the associated @file{.sig} file and to verify the
427authenticity of the tarball against it, along these lines:
428
429@example
430$ wget ftp://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{system}.tar.xz.sig
431$ gpg --verify guix-binary-@value{VERSION}.@var{system}.tar.xz.sig
432@end example
433
f97c9175 434If that command fails because you do not have the required public key,
daa8922a
LC
435then run this command to import it:
436
437@example
debc6360 438$ gpg --keyserver pgp.mit.edu --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
daa8922a
LC
439@end example
440
441@noindent
442and rerun the @code{gpg --verify} command.
debc6360 443@c end authentication part
09722b11
LC
444
445@item
1f3921e1
JL
446Now, you need to become the @code{root} user. Depending on your distribution,
447you may have to run @code{su -} or @code{sudo -i}. As @code{root}, run:
09722b11
LC
448
449@example
5dc42964 450# cd /tmp
254b1c2e
LC
451# tar --warning=no-timestamp -xf \
452 guix-binary-@value{VERSION}.@var{system}.tar.xz
5dc42964 453# mv var/guix /var/ && mv gnu /
09722b11
LC
454@end example
455
7acd3439
LC
456This creates @file{/gnu/store} (@pxref{The Store}) and @file{/var/guix}.
457The latter contains a ready-to-use profile for @code{root} (see next
458step.)
09722b11 459
5dc3ce5f
LC
460Do @emph{not} unpack the tarball on a working Guix system since that
461would overwrite its own essential files.
462
254b1c2e 463The @code{--warning=no-timestamp} option makes sure GNU@tie{}tar does
e9ba6357
LC
464not emit warnings about ``implausibly old time stamps'' (such
465warnings were triggered by GNU@tie{}tar 1.26 and older; recent
466versions are fine.)
467They stem from the fact that all the
254b1c2e
LC
468files in the archive have their modification time set to zero (which
469means January 1st, 1970.) This is done on purpose to make sure the
470archive content is independent of its creation time, thus making it
471reproducible.
472
7acd3439 473@item
3cd4447f 474Make @code{root}'s profile available under @file{~root/.guix-profile}:
7acd3439
LC
475
476@example
477# ln -sf /var/guix/profiles/per-user/root/guix-profile \
478 ~root/.guix-profile
479@end example
480
1165b08f
LC
481Source @file{etc/profile} to augment @code{PATH} and other relevant
482environment variables:
483
484@example
3cd4447f 485# GUIX_PROFILE="`echo ~root`/.guix-profile" ; \
1165b08f
LC
486 source $GUIX_PROFILE/etc/profile
487@end example
488
43c33047
LC
489@item
490Create the group and user accounts for build users as explained below
491(@pxref{Build Environment Setup}).
492
09722b11 493@item
bf98aea9 494Run the daemon, and set it to automatically start on boot.
c8e26887 495
bf98aea9
LC
496If your host distro uses the systemd init system, this can be achieved
497with these commands:
c8e26887 498
b812da70
LF
499@c Versions of systemd that supported symlinked service files are not
500@c yet widely deployed, so we should suggest that users copy the service
501@c files into place.
502@c
503@c See this thread for more information:
504@c http://lists.gnu.org/archive/html/guix-devel/2017-01/msg01199.html
505
c8e26887 506@example
b812da70 507# cp ~root/.guix-profile/lib/systemd/system/guix-daemon.service \
c8e26887
GC
508 /etc/systemd/system/
509# systemctl start guix-daemon && systemctl enable guix-daemon
510@end example
511
512If your host distro uses the Upstart init system:
09722b11
LC
513
514@example
4a780bdf 515# initctl reload-configuration
b812da70 516# cp ~root/.guix-profile/lib/upstart/system/guix-daemon.conf /etc/init/
bf98aea9 517# start guix-daemon
09722b11
LC
518@end example
519
c8e26887
GC
520Otherwise, you can still start the daemon manually with:
521
522@example
523# ~root/.guix-profile/bin/guix-daemon --build-users-group=guixbuild
524@end example
d2825c96 525
09722b11
LC
526@item
527Make the @command{guix} command available to other users on the machine,
528for instance with:
529
530@example
531# mkdir -p /usr/local/bin
532# cd /usr/local/bin
d72d05f9 533# ln -s /var/guix/profiles/per-user/root/guix-profile/bin/guix
09722b11 534@end example
39f8ed14 535
aca738f3
LC
536It is also a good idea to make the Info version of this manual available
537there:
538
539@example
540# mkdir -p /usr/local/share/info
541# cd /usr/local/share/info
542# for i in /var/guix/profiles/per-user/root/guix-profile/share/info/* ;
543 do ln -s $i ; done
544@end example
545
546That way, assuming @file{/usr/local/share/info} is in the search path,
547running @command{info guix} will open this manual (@pxref{Other Info
548Directories,,, texinfo, GNU Texinfo}, for more details on changing the
549Info search path.)
550
39f8ed14 551@item
e32171ee 552@cindex substitutes, authorization thereof
df061d07
LC
553To use substitutes from @code{hydra.gnu.org} or one of its mirrors
554(@pxref{Substitutes}), authorize them:
39f8ed14
LC
555
556@example
7acd3439 557# guix archive --authorize < ~root/.guix-profile/share/guix/hydra.gnu.org.pub
39f8ed14 558@end example
7f608a9b
LC
559
560@item
561Each user may need to perform a few additional steps to make their Guix
562environment ready for use, @pxref{Application Setup}.
09722b11
LC
563@end enumerate
564
7f608a9b 565Voilà, the installation is complete!
09722b11 566
c8e26887
GC
567You can confirm that Guix is working by installing a sample package into
568the root profile:
09722b11
LC
569
570@example
c8e26887 571# guix package -i hello
09722b11
LC
572@end example
573
c8e26887
GC
574The @code{guix} package must remain available in @code{root}'s profile,
575or it would become subject to garbage collection---in which case you
576would find yourself badly handicapped by the lack of the @command{guix}
bf98aea9
LC
577command. In other words, do not remove @code{guix} by running
578@code{guix package -r guix}.
579
580The binary installation tarball can be (re)produced and verified simply
581by running the following command in the Guix source tree:
582
583@example
584make guix-binary.@var{system}.tar.xz
585@end example
c8e26887 586
239c2266
LC
587@noindent
588... which, in turn, runs:
589
590@example
6b63c43e 591guix pack -s @var{system} --localstatedir guix
239c2266
LC
592@end example
593
594@xref{Invoking guix pack}, for more info on this handy tool.
09722b11 595
bd5e766b
LC
596@node Requirements
597@section Requirements
598
09722b11
LC
599This section lists requirements when building Guix from source. The
600build procedure for Guix is the same as for other GNU software, and is
601not covered here. Please see the files @file{README} and @file{INSTALL}
602in the Guix source tree for additional details.
603
bd5e766b
LC
604GNU Guix depends on the following packages:
605
606@itemize
1d84d7bf 607@item @url{http://gnu.org/software/guile/, GNU Guile}, version 2.0.13 or
608e42e7 608later, including 2.2.x;
288dca55 609@item @url{http://gnupg.org/, GNU libgcrypt};
1dbe3a8d
LC
610@item
611@uref{http://gnutls.org/, GnuTLS}, specifically its Guile bindings
612(@pxref{Guile Preparations, how to install the GnuTLS bindings for
613Guile,, gnutls-guile, GnuTLS-Guile});
7441f1db
LC
614@item
615@c FIXME: Specify a version number once a release has been made.
616@uref{https://gitlab.com/guile-git/guile-git, Guile-Git}, from August
6172017 or later;
06e3a518 618@item @url{http://zlib.net, zlib};
f0b98b84 619@item @url{http://www.gnu.org/software/make/, GNU Make}.
8a96bd4b
ID
620@end itemize
621
622The following dependencies are optional:
623
624@itemize
288dca55 625@item
8a96bd4b 626Installing
288dca55 627@url{http://savannah.nongnu.org/projects/guile-json/, Guile-JSON} will
2f7d2d91
LC
628allow you to use the @command{guix import pypi} command (@pxref{Invoking
629guix import}). It is of
288dca55 630interest primarily for developers and not for casual users.
4591c02e 631
21531add
LC
632@item
633@c Note: We need at least 0.10.2 for 'channel-send-eof'.
f11c444d
LC
634Support for build offloading (@pxref{Daemon Offload Setup}) and
635@command{guix copy} (@pxref{Invoking guix copy}) depends on
21531add
LC
636@uref{https://github.com/artyom-poptsov/guile-ssh, Guile-SSH},
637version 0.10.2 or later.
638
4591c02e 639@item
06e3a518
LC
640When @url{http://www.bzip.org, libbz2} is available,
641@command{guix-daemon} can use it to compress build logs.
bd5e766b
LC
642@end itemize
643
644Unless @code{--disable-daemon} was passed to @command{configure}, the
645following packages are also needed:
646
647@itemize
368d08f7 648@item @url{http://sqlite.org, SQLite 3};
368d08f7
LC
649@item @url{http://gcc.gnu.org, GCC's g++}, with support for the
650C++11 standard.
bd5e766b
LC
651@end itemize
652
e32171ee 653@cindex state directory
ef5f5c86
LC
654When configuring Guix on a system that already has a Guix installation,
655be sure to specify the same state directory as the existing installation
656using the @code{--localstatedir} option of the @command{configure}
657script (@pxref{Directory Variables, @code{localstatedir},, standards,
658GNU Coding Standards}). The @command{configure} script protects against
659unintended misconfiguration of @var{localstatedir} so you do not
660inadvertently corrupt your store (@pxref{The Store}).
661
e32171ee 662@cindex Nix, compatibility
4bfc4ea3
NK
663When a working installation of @url{http://nixos.org/nix/, the Nix package
664manager} is available, you
bd5e766b 665can instead configure Guix with @code{--disable-daemon}. In that case,
4bfc4ea3 666Nix replaces the three dependencies above.
bd5e766b 667
b22a12fd
LC
668Guix is compatible with Nix, so it is possible to share the same store
669between both. To do so, you must pass @command{configure} not only the
670same @code{--with-store-dir} value, but also the same
4bfc4ea3
NK
671@code{--localstatedir} value. The latter is essential because it
672specifies where the database that stores metadata about the store is
834129e0 673located, among other things. The default values for Nix are
b22a12fd 674@code{--with-store-dir=/nix/store} and @code{--localstatedir=/nix/var}.
4bfc4ea3
NK
675Note that @code{--disable-daemon} is not required if
676your goal is to share the store with Nix.
b22a12fd 677
ec0339cd
LC
678@node Running the Test Suite
679@section Running the Test Suite
680
e32171ee 681@cindex test suite
ec0339cd
LC
682After a successful @command{configure} and @code{make} run, it is a good
683idea to run the test suite. It can help catch issues with the setup or
684environment, or bugs in Guix itself---and really, reporting test
685failures is a good way to help improve the software. To run the test
686suite, type:
687
688@example
689make check
690@end example
691
692Test cases can run in parallel: you can use the @code{-j} option of
693GNU@tie{}make to speed things up. The first run may take a few minutes
694on a recent machine; subsequent runs will be faster because the store
695that is created for test purposes will already have various things in
696cache.
697
a887fd8d
LC
698It is also possible to run a subset of the tests by defining the
699@code{TESTS} makefile variable as in this example:
700
701@example
702make check TESTS="tests/store.scm tests/cpio.scm"
703@end example
704
a9edb211
ML
705By default, tests results are displayed at a file level. In order to
706see the details of every individual test cases, it is possible to define
707the @code{SCM_LOG_DRIVER_FLAGS} makefile variable as in this example:
708
709@example
710make check TESTS="tests/base64.scm" SCM_LOG_DRIVER_FLAGS="--brief=no"
711@end example
712
ec0339cd 713Upon failure, please email @email{bug-guix@@gnu.org} and attach the
a9edb211
ML
714@file{test-suite.log} file. Please specify the Guix version being used
715as well as version numbers of the dependencies (@pxref{Requirements}) in
716your message.
ec0339cd 717
0a2f2848
LC
718Guix also comes with a whole-system test suite that tests complete
719GuixSD operating system instances. It can only run on systems where
720Guix is already installed, using:
721
722@example
723make check-system
724@end example
725
726@noindent
727or, again, by defining @code{TESTS} to select a subset of tests to run:
728
729@example
730make check-system TESTS="basic mcron"
731@end example
732
733These system tests are defined in the @code{(gnu tests @dots{})}
734modules. They work by running the operating systems under test with
735lightweight instrumentation in a virtual machine (VM). They can be
736computationally intensive or rather cheap, depending on whether
737substitutes are available for their dependencies (@pxref{Substitutes}).
738Some of them require a lot of storage space to hold VM images.
739
740Again in case of test failures, please send @email{bug-guix@@gnu.org}
741all the details.
742
bd5e766b
LC
743@node Setting Up the Daemon
744@section Setting Up the Daemon
745
746@cindex daemon
747Operations such as building a package or running the garbage collector
49e6291a 748are all performed by a specialized process, the @dfn{build daemon}, on
bd5e766b
LC
749behalf of clients. Only the daemon may access the store and its
750associated database. Thus, any operation that manipulates the store
751goes through the daemon. For instance, command-line tools such as
e49951eb 752@command{guix package} and @command{guix build} communicate with the
bd5e766b
LC
753daemon (@i{via} remote procedure calls) to instruct it what to do.
754
49e6291a 755The following sections explain how to prepare the build daemon's
f97c9175 756environment. See also @ref{Substitutes}, for information on how to allow
225dafde 757the daemon to download pre-built binaries.
49e6291a
LC
758
759@menu
760* Build Environment Setup:: Preparing the isolated build environment.
761* Daemon Offload Setup:: Offloading builds to remote machines.
b617a9fe 762* SELinux Support:: Using an SELinux policy for the daemon.
49e6291a
LC
763@end menu
764
765@node Build Environment Setup
766@subsection Build Environment Setup
767
e32171ee 768@cindex build environment
bd5e766b
LC
769In a standard multi-user setup, Guix and its daemon---the
770@command{guix-daemon} program---are installed by the system
834129e0 771administrator; @file{/gnu/store} is owned by @code{root} and
bd5e766b
LC
772@command{guix-daemon} runs as @code{root}. Unprivileged users may use
773Guix tools to build packages or otherwise access the store, and the
774daemon will do it on their behalf, ensuring that the store is kept in a
775consistent state, and allowing built packages to be shared among users.
776
777@cindex build users
778When @command{guix-daemon} runs as @code{root}, you may not want package
779build processes themselves to run as @code{root} too, for obvious
780security reasons. To avoid that, a special pool of @dfn{build users}
781should be created for use by build processes started by the daemon.
782These build users need not have a shell and a home directory: they will
783just be used when the daemon drops @code{root} privileges in build
784processes. Having several such users allows the daemon to launch
785distinct build processes under separate UIDs, which guarantees that they
786do not interfere with each other---an essential feature since builds are
787regarded as pure functions (@pxref{Introduction}).
788
789On a GNU/Linux system, a build user pool may be created like this (using
790Bash syntax and the @code{shadow} commands):
791
091196b3
LC
792@c See http://lists.gnu.org/archive/html/bug-guix/2013-01/msg00239.html
793@c for why `-G' is needed.
bd5e766b 794@example
cfc149dc
LC
795# groupadd --system guixbuild
796# for i in `seq -w 1 10`;
bd5e766b 797 do
cfc149dc
LC
798 useradd -g guixbuild -G guixbuild \
799 -d /var/empty -s `which nologin` \
800 -c "Guix build user $i" --system \
801 guixbuilder$i;
bd5e766b
LC
802 done
803@end example
804
805@noindent
54eb03ab
LC
806The number of build users determines how many build jobs may run in
807parallel, as specified by the @option{--max-jobs} option
eca69fc0
LC
808(@pxref{Invoking guix-daemon, @option{--max-jobs}}). To use
809@command{guix system vm} and related commands, you may need to add the
810build users to the @code{kvm} group so they can access @file{/dev/kvm},
811using @code{-G guixbuild,kvm} instead of @code{-G guixbuild}
812(@pxref{Invoking guix system}).
813
814The @code{guix-daemon} program may then be run as @code{root} with the
d2825c96
LC
815following command@footnote{If your machine uses the systemd init system,
816dropping the @file{@var{prefix}/lib/systemd/system/guix-daemon.service}
817file in @file{/etc/systemd/system} will ensure that
ad227484
MDRS
818@command{guix-daemon} is automatically started. Similarly, if your
819machine uses the Upstart init system, drop the
820@file{@var{prefix}/lib/upstart/system/guix-daemon.conf}
821file in @file{/etc/init}.}:
bd5e766b
LC
822
823@example
cfc149dc 824# guix-daemon --build-users-group=guixbuild
bd5e766b
LC
825@end example
826
e900c503 827@cindex chroot
b095792f
LC
828@noindent
829This way, the daemon starts build processes in a chroot, under one of
cfc149dc 830the @code{guixbuilder} users. On GNU/Linux, by default, the chroot
6dc99317
LC
831environment contains nothing but:
832
833@c Keep this list in sync with libstore/build.cc! -----------------------
834@itemize
835@item
4743a4da
LC
836a minimal @code{/dev} directory, created mostly independently from the
837host @code{/dev}@footnote{``Mostly'', because while the set of files
838that appear in the chroot's @code{/dev} is fixed, most of these files
839can only be created if the host has them.};
840
841@item
f97c9175 842the @code{/proc} directory; it only shows the processes of the container
4743a4da 843since a separate PID name space is used;
6dc99317
LC
844
845@item
846@file{/etc/passwd} with an entry for the current user and an entry for
847user @file{nobody};
848
849@item
850@file{/etc/group} with an entry for the user's group;
851
852@item
853@file{/etc/hosts} with an entry that maps @code{localhost} to
854@code{127.0.0.1};
855
856@item
857a writable @file{/tmp} directory.
858@end itemize
b095792f 859
cb960102
ED
860You can influence the directory where the daemon stores build trees
861@i{via} the @code{TMPDIR} environment variable. However, the build tree
f97c9175 862within the chroot is always called @file{/tmp/guix-build-@var{name}.drv-0},
cb960102
ED
863where @var{name} is the derivation name---e.g., @code{coreutils-8.24}.
864This way, the value of @code{TMPDIR} does not leak inside build
865environments, which avoids discrepancies in cases where build processes
866capture the name of their build tree.
867
e0c941fe
LC
868@vindex http_proxy
869The daemon also honors the @code{http_proxy} environment variable for
870HTTP downloads it performs, be it for fixed-output derivations
871(@pxref{Derivations}) or for substitutes (@pxref{Substitutes}).
872
1e2644bb
LC
873If you are installing Guix as an unprivileged user, it is still possible
874to run @command{guix-daemon} provided you pass @code{--disable-chroot}.
875However, build processes will not be isolated from one another, and not
876from the rest of the system. Thus, build processes may interfere with
877each other, and may access programs, libraries, and other files
878available on the system---making it much harder to view them as
879@emph{pure} functions.
bd5e766b 880
49e6291a
LC
881
882@node Daemon Offload Setup
883@subsection Using the Offload Facility
884
885@cindex offloading
4ec2e92d 886@cindex build hook
21531add
LC
887When desired, the build daemon can @dfn{offload} derivation builds to
888other machines running Guix, using the @code{offload} @dfn{build
889hook}@footnote{This feature is available only when
890@uref{https://github.com/artyom-poptsov/guile-ssh, Guile-SSH} is
891present.}. When that
49e6291a 892feature is enabled, a list of user-specified build machines is read from
f97c9175 893@file{/etc/guix/machines.scm}; every time a build is requested, for
49e6291a 894instance via @code{guix build}, the daemon attempts to offload it to one
f97c9175 895of the machines that satisfy the constraints of the derivation, in
49e6291a
LC
896particular its system type---e.g., @file{x86_64-linux}. Missing
897prerequisites for the build are copied over SSH to the target machine,
898which then proceeds with the build; upon success the output(s) of the
899build are copied back to the initial machine.
900
4ec2e92d 901The @file{/etc/guix/machines.scm} file typically looks like this:
49e6291a
LC
902
903@example
904(list (build-machine
905 (name "eightysix.example.org")
906 (system "x86_64-linux")
21531add 907 (host-key "ssh-ed25519 AAAAC3Nza@dots{}")
49e6291a 908 (user "bob")
21531add 909 (speed 2.)) ;incredibly fast!
49e6291a
LC
910
911 (build-machine
912 (name "meeps.example.org")
913 (system "mips64el-linux")
21531add 914 (host-key "ssh-rsa AAAAB3Nza@dots{}")
49e6291a
LC
915 (user "alice")
916 (private-key
917 (string-append (getenv "HOME")
21531add 918 "/.ssh/identity-for-guix"))))
49e6291a
LC
919@end example
920
921@noindent
922In the example above we specify a list of two build machines, one for
923the @code{x86_64} architecture and one for the @code{mips64el}
4ec2e92d
LC
924architecture.
925
926In fact, this file is---not surprisingly!---a Scheme file that is
927evaluated when the @code{offload} hook is started. Its return value
928must be a list of @code{build-machine} objects. While this example
929shows a fixed list of build machines, one could imagine, say, using
930DNS-SD to return a list of potential build machines discovered in the
931local network (@pxref{Introduction, Guile-Avahi,, guile-avahi, Using
c678a4ee
LC
932Avahi in Guile Scheme Programs}). The @code{build-machine} data type is
933detailed below.
4ec2e92d 934
c678a4ee 935@deftp {Data Type} build-machine
f97c9175
AE
936This data type represents build machines to which the daemon may offload
937builds. The important fields are:
49e6291a
LC
938
939@table @code
940
941@item name
f97c9175 942The host name of the remote machine.
49e6291a
LC
943
944@item system
f97c9175 945The system type of the remote machine---e.g., @code{"x86_64-linux"}.
49e6291a
LC
946
947@item user
948The user account to use when connecting to the remote machine over SSH.
949Note that the SSH key pair must @emph{not} be passphrase-protected, to
950allow non-interactive logins.
951
21531add
LC
952@item host-key
953This must be the machine's SSH @dfn{public host key} in OpenSSH format.
954This is used to authenticate the machine when we connect to it. It is a
955long string that looks like this:
956
957@example
958ssh-ed25519 AAAAC3NzaC@dots{}mde+UhL hint@@example.org
959@end example
960
961If the machine is running the OpenSSH daemon, @command{sshd}, the host
962key can be found in a file such as
963@file{/etc/ssh/ssh_host_ed25519_key.pub}.
964
965If the machine is running the SSH daemon of GNU@tie{}lsh,
966@command{lshd}, the host key is in @file{/etc/lsh/host-key.pub} or a
967similar file. It can be converted to the OpenSSH format using
968@command{lsh-export-key} (@pxref{Converting keys,,, lsh, LSH Manual}):
969
970@example
971$ lsh-export-key --openssh < /etc/lsh/host-key.pub
972ssh-rsa AAAAB3NzaC1yc2EAAAAEOp8FoQAAAQEAs1eB46LV@dots{}
973@end example
974
49e6291a
LC
975@end table
976
4ec2e92d 977A number of optional fields may be specified:
49e6291a 978
21531add 979@table @asis
49e6291a 980
21531add
LC
981@item @code{port} (default: @code{22})
982Port number of SSH server on the machine.
cecd72d5 983
dde1e152 984@item @code{private-key} (default: @file{~root/.ssh/id_rsa})
21531add
LC
985The SSH private key file to use when connecting to the machine, in
986OpenSSH format.
49e6291a 987
dde1e152
OP
988Note that the default value is the private key @emph{of the root
989account}. Make sure it exists if you use the default.
990
1d48cf94
LC
991@item @code{compression} (default: @code{"zlib@@openssh.com,zlib"})
992@itemx @code{compression-level} (default: @code{3})
993The SSH-level compression methods and compression level requested.
994
995Note that offloading relies on SSH compression to reduce bandwidth usage
996when transferring files to and from build machines.
997
cf283dd9
LC
998@item @code{daemon-socket} (default: @code{"/var/guix/daemon-socket/socket"})
999File name of the Unix-domain socket @command{guix-daemon} is listening
1000to on that machine.
c4fdfd6f 1001
21531add
LC
1002@item @code{parallel-builds} (default: @code{1})
1003The number of builds that may run in parallel on the machine.
49e6291a 1004
21531add 1005@item @code{speed} (default: @code{1.0})
49e6291a
LC
1006A ``relative speed factor''. The offload scheduler will tend to prefer
1007machines with a higher speed factor.
1008
21531add 1009@item @code{features} (default: @code{'()})
49e6291a
LC
1010A list of strings denoting specific features supported by the machine.
1011An example is @code{"kvm"} for machines that have the KVM Linux modules
1012and corresponding hardware support. Derivations can request features by
1013name, and they will be scheduled on matching build machines.
1014
1015@end table
c678a4ee 1016@end deftp
49e6291a 1017
aebaee95
LC
1018The @code{guile} command must be in the search path on the build
1019machines. In addition, the Guix modules must be in
c4fdfd6f
LC
1020@code{$GUILE_LOAD_PATH} on the build machine---you can check whether
1021this is the case by running:
1022
1023@example
21531add 1024ssh build-machine guile -c "'(use-modules (guix config))'"
c4fdfd6f 1025@end example
49e6291a 1026
f97c9175 1027There is one last thing to do once @file{machines.scm} is in place. As
49e6291a 1028explained above, when offloading, files are transferred back and forth
c4fdfd6f
LC
1029between the machine stores. For this to work, you first need to
1030generate a key pair on each machine to allow the daemon to export signed
1031archives of files from the store (@pxref{Invoking guix archive}):
49e6291a
LC
1032
1033@example
1034# guix archive --generate-key
1035@end example
1036
1037@noindent
c4fdfd6f
LC
1038Each build machine must authorize the key of the master machine so that
1039it accepts store items it receives from the master:
1040
1041@example
1042# guix archive --authorize < master-public-key.txt
1043@end example
1044
1045@noindent
1046Likewise, the master machine must authorize the key of each build machine.
1047
1048All the fuss with keys is here to express pairwise mutual trust
1049relations between the master and the build machines. Concretely, when
1050the master receives files from a build machine (and @i{vice versa}), its
1051build daemon can make sure they are genuine, have not been tampered
1052with, and that they are signed by an authorized key.
49e6291a 1053
aebaee95
LC
1054@cindex offload test
1055To test whether your setup is operational, run this command on the
1056master node:
1057
1058@example
1059# guix offload test
1060@end example
1061
1062This will attempt to connect to each of the build machines specified in
1063@file{/etc/guix/machines.scm}, make sure Guile and the Guix modules are
1064available on each machine, attempt to export to the machine and import
1065from it, and report any error in the process.
1066
1067If you want to test a different machine file, just specify it on the
1068command line:
1069
1070@example
1071# guix offload test machines-qualif.scm
1072@end example
1073
27991c97
LC
1074Last, you can test the subset of the machines whose name matches a
1075regular expression like this:
1076
1077@example
1078# guix offload test machines.scm '\.gnu\.org$'
1079@end example
49e6291a 1080
dafc3daf
RW
1081@cindex offload status
1082To display the current load of all build hosts, run this command on the
1083main node:
1084
1085@example
1086# guix offload status
1087@end example
1088
1089
b617a9fe
RW
1090@node SELinux Support
1091@subsection SELinux Support
1092
1093@cindex SELinux, daemon policy
1094@cindex mandatory access control, SELinux
1095@cindex security, guix-daemon
1096Guix includes an SELinux policy file at @file{etc/guix-daemon.cil} that
1097can be installed on a system where SELinux is enabled, in order to label
1098Guix files and to specify the expected behavior of the daemon. Since
1099GuixSD does not provide an SELinux base policy, the daemon policy cannot
1100be used on GuixSD.
1101
1102@subsubsection Installing the SELinux policy
1103@cindex SELinux, policy installation
1104To install the policy run this command as root:
1105
1106@example
1107semodule -i etc/guix-daemon.cil
1108@end example
1109
1110Then relabel the file system with @code{restorecon} or by a different
1111mechanism provided by your system.
1112
1113Once the policy is installed, the file system has been relabeled, and
1114the daemon has been restarted, it should be running in the
1115@code{guix_daemon_t} context. You can confirm this with the following
1116command:
1117
1118@example
1119ps -Zax | grep guix-daemon
1120@end example
1121
1122Monitor the SELinux log files as you run a command like @code{guix build
1123hello} to convince yourself that SELinux permits all necessary
1124operations.
1125
1126@subsubsection Limitations
1127@cindex SELinux, limitations
1128
1129This policy is not perfect. Here is a list of limitations or quirks
1130that should be considered when deploying the provided SELinux policy for
1131the Guix daemon.
1132
1133@enumerate
1134@item
1135@code{guix_daemon_socket_t} isn’t actually used. None of the socket
1136operations involve contexts that have anything to do with
1137@code{guix_daemon_socket_t}. It doesn’t hurt to have this unused label,
1138but it would be preferrable to define socket rules for only this label.
1139
1140@item
1141@code{guix gc} cannot access arbitrary links to profiles. By design,
1142the file label of the destination of a symlink is independent of the
1143file label of the link itself. Although all profiles under
1144$localstatedir are labelled, the links to these profiles inherit the
1145label of the directory they are in. For links in the user’s home
1146directory this will be @code{user_home_t}. But for links from the root
1147user’s home directory, or @file{/tmp}, or the HTTP server’s working
1148directory, etc, this won’t work. @code{guix gc} would be prevented from
1149reading and following these links.
1150
1151@item
1152The daemon’s feature to listen for TCP connections might no longer work.
1153This might require extra rules, because SELinux treats network sockets
1154differently from files.
1155
1156@item
1157Currently all files with a name matching the regular expression
1158@code{/gnu/store/.+-(guix-.+|profile)/bin/guix-daemon} are assigned the
1159label @code{guix_daemon_exec_t}; this means that @emph{any} file with
1160that name in any profile would be permitted to run in the
1161@code{guix_daemon_t} domain. This is not ideal. An attacker could
1162build a package that provides this executable and convince a user to
1163install and run it, which lifts it into the @code{guix_daemon_t} domain.
1164At that point SELinux could not prevent it from accessing files that are
1165allowed for processes in that domain.
1166
1167We could generate a much more restrictive policy at installation time,
1168so that only the @emph{exact} file name of the currently installed
1169@code{guix-daemon} executable would be labelled with
1170@code{guix_daemon_exec_t}, instead of using a broad regular expression.
1171The downside is that root would have to install or upgrade the policy at
1172installation time whenever the Guix package that provides the
1173effectively running @code{guix-daemon} executable is upgraded.
1174@end enumerate
1175
bd5e766b
LC
1176@node Invoking guix-daemon
1177@section Invoking @command{guix-daemon}
1178
1179The @command{guix-daemon} program implements all the functionality to
1180access the store. This includes launching build processes, running the
1181garbage collector, querying the availability of a build result, etc. It
1182is normally run as @code{root} like this:
1183
1184@example
cfc149dc 1185# guix-daemon --build-users-group=guixbuild
bd5e766b
LC
1186@end example
1187
1188@noindent
081145cf 1189For details on how to set it up, @pxref{Setting Up the Daemon}.
bd5e766b 1190
e900c503
LC
1191@cindex chroot
1192@cindex container, build environment
1193@cindex build environment
1194@cindex reproducible builds
bd5e766b
LC
1195By default, @command{guix-daemon} launches build processes under
1196different UIDs, taken from the build group specified with
1197@code{--build-users-group}. In addition, each build process is run in a
1198chroot environment that only contains the subset of the store that the
1199build process depends on, as specified by its derivation
1200(@pxref{Programming Interface, derivation}), plus a set of specific
1201system directories. By default, the latter contains @file{/dev} and
e900c503
LC
1202@file{/dev/pts}. Furthermore, on GNU/Linux, the build environment is a
1203@dfn{container}: in addition to having its own file system tree, it has
1204a separate mount name space, its own PID name space, network name space,
1205etc. This helps achieve reproducible builds (@pxref{Features}).
bd5e766b 1206
cbc538fe
LC
1207When the daemon performs a build on behalf of the user, it creates a
1208build directory under @file{/tmp} or under the directory specified by
1209its @code{TMPDIR} environment variable; this directory is shared with
1210the container for the duration of the build. Be aware that using a
1211directory other than @file{/tmp} can affect build results---for example,
1212with a longer directory name, a build process that uses Unix-domain
1213sockets might hit the name length limitation for @code{sun_path}, which
1214it would otherwise not hit.
1215
1216The build directory is automatically deleted upon completion, unless the
1217build failed and the client specified @option{--keep-failed}
1218(@pxref{Invoking guix build, @option{--keep-failed}}).
1219
bd5e766b
LC
1220The following command-line options are supported:
1221
1222@table @code
1223@item --build-users-group=@var{group}
1224Take users from @var{group} to run build processes (@pxref{Setting Up
1225the Daemon, build users}).
1226
6858f9d1 1227@item --no-substitutes
b5385b52 1228@cindex substitutes
6858f9d1 1229Do not use substitutes for build products. That is, always build things
c4202d60
LC
1230locally instead of allowing downloads of pre-built binaries
1231(@pxref{Substitutes}).
6858f9d1 1232
b5385b52
LC
1233When the daemon runs with @code{--no-substitutes}, clients can still
1234explicitly enable substitution @i{via} the @code{set-build-options}
1235remote procedure call (@pxref{The Store}).
1236
9176607e 1237@item --substitute-urls=@var{urls}
f8a8e0fe 1238@anchor{daemon-substitute-urls}
9176607e 1239Consider @var{urls} the default whitespace-separated list of substitute
df061d07
LC
1240source URLs. When this option is omitted,
1241@indicateurl{https://mirror.hydra.gnu.org https://hydra.gnu.org} is used
1242(@code{mirror.hydra.gnu.org} is a mirror of @code{hydra.gnu.org}).
9176607e
LC
1243
1244This means that substitutes may be downloaded from @var{urls}, as long
1245as they are signed by a trusted signature (@pxref{Substitutes}).
1246
4ec2e92d
LC
1247@cindex build hook
1248@item --no-build-hook
1249Do not use the @dfn{build hook}.
1250
1251The build hook is a helper program that the daemon can start and to
1252which it submits build requests. This mechanism is used to offload
1253builds to other machines (@pxref{Daemon Offload Setup}).
1254
bd5e766b
LC
1255@item --cache-failures
1256Cache build failures. By default, only successful builds are cached.
1257
30d9aa54
LC
1258When this option is used, @command{guix gc --list-failures} can be used
1259to query the set of store items marked as failed; @command{guix gc
1260--clear-failures} removes store items from the set of cached failures.
1261@xref{Invoking guix gc}.
1262
bd5e766b
LC
1263@item --cores=@var{n}
1264@itemx -c @var{n}
1265Use @var{n} CPU cores to build each derivation; @code{0} means as many
1266as available.
1267
6efc160e 1268The default value is @code{0}, but it may be overridden by clients, such
e49951eb
MW
1269as the @code{--cores} option of @command{guix build} (@pxref{Invoking
1270guix build}).
bd5e766b
LC
1271
1272The effect is to define the @code{NIX_BUILD_CORES} environment variable
1273in the build process, which can then use it to exploit internal
1274parallelism---for instance, by running @code{make -j$NIX_BUILD_CORES}.
1275
1276@item --max-jobs=@var{n}
1277@itemx -M @var{n}
1278Allow at most @var{n} build jobs in parallel. The default value is
f6526eb3
LC
1279@code{1}. Setting it to @code{0} means that no builds will be performed
1280locally; instead, the daemon will offload builds (@pxref{Daemon Offload
1281Setup}), or simply fail.
bd5e766b 1282
2ca9f51e
LC
1283@item --max-silent-time=@var{seconds}
1284When the build or substitution process remains silent for more than
1285@var{seconds}, terminate it and report a build failure.
1286
1287The default value is @code{0}, which disables the timeout.
1288
1289The value specified here can be overridden by clients (@pxref{Common
1290Build Options, @code{--max-silent-time}}).
1291
1292@item --timeout=@var{seconds}
1293Likewise, when the build or substitution process lasts for more than
1294@var{seconds}, terminate it and report a build failure.
1295
1296The default value is @code{0}, which disables the timeout.
1297
1298The value specified here can be overridden by clients (@pxref{Common
1299Build Options, @code{--timeout}}).
1300
ecf84b7c
LC
1301@item --rounds=@var{N}
1302Build each derivation @var{n} times in a row, and raise an error if
1303consecutive build results are not bit-for-bit identical. Note that this
1304setting can be overridden by clients such as @command{guix build}
1305(@pxref{Invoking guix build}).
1306
b4528110
ED
1307When used in conjunction with @option{--keep-failed}, the differing
1308output is kept in the store, under @file{/gnu/store/@dots{}-check}.
1309This makes it easy to look for differences between the two results.
1310
bd5e766b
LC
1311@item --debug
1312Produce debugging output.
1313
1314This is useful to debug daemon start-up issues, but then it may be
1315overridden by clients, for example the @code{--verbosity} option of
e49951eb 1316@command{guix build} (@pxref{Invoking guix build}).
bd5e766b
LC
1317
1318@item --chroot-directory=@var{dir}
1319Add @var{dir} to the build chroot.
1320
1321Doing this may change the result of build processes---for instance if
1322they use optional dependencies found in @var{dir} when it is available,
1323and not otherwise. For that reason, it is not recommended to do so.
1324Instead, make sure that each derivation declares all the inputs that it
1325needs.
1326
1327@item --disable-chroot
1328Disable chroot builds.
1329
1330Using this option is not recommended since, again, it would allow build
1e2644bb
LC
1331processes to gain access to undeclared dependencies. It is necessary,
1332though, when @command{guix-daemon} is running under an unprivileged user
1333account.
bd5e766b 1334
29a68668
LC
1335@item --log-compression=@var{type}
1336Compress build logs according to @var{type}, one of @code{gzip},
1337@code{bzip2}, or @code{none}.
bd5e766b 1338
1da983b9
LC
1339Unless @code{--lose-logs} is used, all the build logs are kept in the
1340@var{localstatedir}. To save space, the daemon automatically compresses
29a68668 1341them with bzip2 by default.
1da983b9 1342
ab3893d7
LC
1343@item --disable-deduplication
1344@cindex deduplication
bd5e766b
LC
1345Disable automatic file ``deduplication'' in the store.
1346
1da983b9 1347By default, files added to the store are automatically ``deduplicated'':
ab3893d7
LC
1348if a newly added file is identical to another one found in the store,
1349the daemon makes the new file a hard link to the other file. This can
4988dd40 1350noticeably reduce disk usage, at the expense of slightly increased
ab3893d7
LC
1351input/output load at the end of a build process. This option disables
1352this optimization.
1da983b9 1353
6e37066e
LC
1354@item --gc-keep-outputs[=yes|no]
1355Tell whether the garbage collector (GC) must keep outputs of live
1356derivations.
1357
6a98b9f3
LC
1358@cindex GC roots
1359@cindex garbage collector roots
6e37066e
LC
1360When set to ``yes'', the GC will keep the outputs of any live derivation
1361available in the store---the @code{.drv} files. The default is ``no'',
1362meaning that derivation outputs are kept only if they are GC roots.
6a98b9f3 1363@xref{Invoking guix gc}, for more on GC roots.
6e37066e
LC
1364
1365@item --gc-keep-derivations[=yes|no]
1366Tell whether the garbage collector (GC) must keep derivations
1367corresponding to live outputs.
1368
1369When set to ``yes'', as is the case by default, the GC keeps
1370derivations---i.e., @code{.drv} files---as long as at least one of their
1371outputs is live. This allows users to keep track of the origins of
1372items in their store. Setting it to ``no'' saves a bit of disk space.
1373
1374Note that when both @code{--gc-keep-derivations} and
1375@code{--gc-keep-outputs} are used, the effect is to keep all the build
1376prerequisites (the sources, compiler, libraries, and other build-time
1377tools) of live objects in the store, regardless of whether these
1378prerequisites are live. This is convenient for developers since it
1379saves rebuilds or downloads.
1380
bd5e766b
LC
1381@item --impersonate-linux-2.6
1382On Linux-based systems, impersonate Linux 2.6. This means that the
1383kernel's @code{uname} system call will report 2.6 as the release number.
1384
1385This might be helpful to build programs that (usually wrongfully) depend
1386on the kernel version number.
1387
1388@item --lose-logs
1389Do not keep build logs. By default they are kept under
ce33631f 1390@code{@var{localstatedir}/guix/log}.
bd5e766b
LC
1391
1392@item --system=@var{system}
1393Assume @var{system} as the current system type. By default it is the
1394architecture/kernel pair found at configure time, such as
1395@code{x86_64-linux}.
b8d2aa26 1396
1071f781
LC
1397@item --listen=@var{endpoint}
1398Listen for connections on @var{endpoint}. @var{endpoint} is interpreted
1399as the file name of a Unix-domain socket if it starts with
1400@code{/} (slash sign). Otherwise, @var{endpoint} is interpreted as a
1401host name or host name and port to listen to. Here are a few examples:
1402
1403@table @code
1404@item --listen=/gnu/var/daemon
1405Listen for connections on the @file{/gnu/var/daemon} Unix-domain socket,
1406creating it if needed.
1407
1408@item --listen=localhost
1409@cindex daemon, remote access
1410@cindex remote access to the daemon
1411@cindex daemon, cluster setup
1412@cindex clusters, daemon setup
1413Listen for TCP connections on the network interface corresponding to
1414@code{localhost}, on port 44146.
1415
1416@item --listen=128.0.0.42:1234
1417Listen for TCP connections on the network interface corresponding to
1418@code{128.0.0.42}, on port 1234.
1419@end table
1420
1421This option can be repeated multiple times, in which case
1422@command{guix-daemon} accepts connections on all the specified
1423endpoints. Users can tell client commands what endpoint to connect to
1424by setting the @code{GUIX_DAEMON_SOCKET} environment variable
1425(@pxref{The Store, @code{GUIX_DAEMON_SOCKET}}).
1426
1427@quotation Note
1428The daemon protocol is @emph{unauthenticated and unencrypted}. Using
1429@code{--listen=@var{host}} is suitable on local networks, such as
1430clusters, where only trusted nodes may connect to the build daemon. In
1431other cases where remote access to the daemon is needed, we recommend
1432using Unix-domain sockets along with SSH.
1433@end quotation
1434
1435When @code{--listen} is omitted, @command{guix-daemon} listens for
1436connections on the Unix-domain socket located at
fae7973e 1437@file{@var{localstatedir}/guix/daemon-socket/socket}.
bd5e766b
LC
1438@end table
1439
1440
0e2d0213
LC
1441@node Application Setup
1442@section Application Setup
1443
d23ef788 1444@cindex foreign distro
85e57214
LC
1445When using Guix on top of GNU/Linux distribution other than GuixSD---a
1446so-called @dfn{foreign distro}---a few additional steps are needed to
1447get everything in place. Here are some of them.
0e2d0213
LC
1448
1449@subsection Locales
1450
5c3c1427 1451@anchor{locales-and-locpath}
0e2d0213 1452@cindex locales, when not on GuixSD
5c3c1427 1453@vindex LOCPATH
85e57214 1454@vindex GUIX_LOCPATH
f97c9175
AE
1455Packages installed @i{via} Guix will not use the locale data of the
1456host system. Instead, you must first install one of the locale packages
85e57214
LC
1457available with Guix and then define the @code{GUIX_LOCPATH} environment
1458variable:
0e2d0213
LC
1459
1460@example
1461$ guix package -i glibc-locales
85e57214 1462$ export GUIX_LOCPATH=$HOME/.guix-profile/lib/locale
0e2d0213
LC
1463@end example
1464
1465Note that the @code{glibc-locales} package contains data for all the
1466locales supported by the GNU@tie{}libc and weighs in at around
f97c9175 1467110@tie{}MiB. Alternatively, the @code{glibc-utf8-locales} is smaller but
0e2d0213
LC
1468limited to a few UTF-8 locales.
1469
85e57214
LC
1470The @code{GUIX_LOCPATH} variable plays a role similar to @code{LOCPATH}
1471(@pxref{Locale Names, @code{LOCPATH},, libc, The GNU C Library Reference
1472Manual}). There are two important differences though:
1473
1474@enumerate
1475@item
f97c9175 1476@code{GUIX_LOCPATH} is honored only by the libc in Guix, and not by the libc
85e57214 1477provided by foreign distros. Thus, using @code{GUIX_LOCPATH} allows you
f97c9175 1478to make sure the programs of the foreign distro will not end up loading
85e57214
LC
1479incompatible locale data.
1480
1481@item
1482libc suffixes each entry of @code{GUIX_LOCPATH} with @code{/X.Y}, where
1483@code{X.Y} is the libc version---e.g., @code{2.22}. This means that,
1484should your Guix profile contain a mixture of programs linked against
1485different libc version, each libc version will only try to load locale
1486data in the right format.
1487@end enumerate
1488
1489This is important because the locale data format used by different libc
1490versions may be incompatible.
1491
9a5187b6
LC
1492@subsection Name Service Switch
1493
1494@cindex name service switch, glibc
1495@cindex NSS (name service switch), glibc
1496@cindex nscd (name service caching daemon)
1497@cindex name service caching daemon (nscd)
1498When using Guix on a foreign distro, we @emph{strongly recommend} that
1499the system run the GNU C library's @dfn{name service cache daemon},
1500@command{nscd}, which should be listening on the
1501@file{/var/run/nscd/socket} socket. Failing to do that, applications
1502installed with Guix may fail to look up host names or user accounts, or
1503may even crash. The next paragraphs explain why.
1504
1505@cindex @file{nsswitch.conf}
1506The GNU C library implements a @dfn{name service switch} (NSS), which is
1507an extensible mechanism for ``name lookups'' in general: host name
1508resolution, user accounts, and more (@pxref{Name Service Switch,,, libc,
1509The GNU C Library Reference Manual}).
1510
1511@cindex Network information service (NIS)
1512@cindex NIS (Network information service)
1513Being extensible, the NSS supports @dfn{plugins}, which provide new name
1514lookup implementations: for example, the @code{nss-mdns} plugin allow
1515resolution of @code{.local} host names, the @code{nis} plugin allows
1516user account lookup using the Network information service (NIS), and so
1517on. These extra ``lookup services'' are configured system-wide in
1518@file{/etc/nsswitch.conf}, and all the programs running on the system
1519honor those settings (@pxref{NSS Configuration File,,, libc, The GNU C
1520Reference Manual}).
1521
1522When they perform a name lookup---for instance by calling the
1523@code{getaddrinfo} function in C---applications first try to connect to
1524the nscd; on success, nscd performs name lookups on their behalf. If
1525the nscd is not running, then they perform the name lookup by
1526themselves, by loading the name lookup services into their own address
1527space and running it. These name lookup services---the
1528@file{libnss_*.so} files---are @code{dlopen}'d, but they may come from
1529the host system's C library, rather than from the C library the
1530application is linked against (the C library coming from Guix).
1531
1532And this is where the problem is: if your application is linked against
1533Guix's C library (say, glibc 2.24) and tries to load NSS plugins from
1534another C library (say, @code{libnss_mdns.so} for glibc 2.22), it will
1535likely crash or have its name lookups fail unexpectedly.
1536
1537Running @command{nscd} on the system, among other advantages, eliminates
1538this binary incompatibility problem because those @code{libnss_*.so}
1539files are loaded in the @command{nscd} process, not in applications
1540themselves.
1541
0e2d0213
LC
1542@subsection X11 Fonts
1543
e32171ee 1544@cindex fonts
4988dd40 1545The majority of graphical applications use Fontconfig to locate and
f97c9175
AE
1546load fonts and perform X11-client-side rendering. The @code{fontconfig}
1547package in Guix looks for fonts in @file{$HOME/.guix-profile}
0e2d0213 1548by default. Thus, to allow graphical applications installed with Guix
f97c9175 1549to display fonts, you have to install fonts with Guix as well.
0e2d0213 1550Essential font packages include @code{gs-fonts}, @code{font-dejavu}, and
8fe5b1d1 1551@code{font-gnu-freefont-ttf}.
0e2d0213 1552
5c36edc8
LC
1553To display text written in Chinese languages, Japanese, or Korean in
1554graphical applications, consider installing
1555@code{font-adobe-source-han-sans} or @code{font-wqy-zenhei}. The former
1556has multiple outputs, one per language family (@pxref{Packages with
1557Multiple Outputs}). For instance, the following command installs fonts
1558for Chinese languages:
1559
1560@example
1561guix package -i font-adobe-source-han-sans:cn
1562@end example
1563
e32171ee 1564@cindex @code{xterm}
1a3e6b15
AK
1565Older programs such as @command{xterm} do not use Fontconfig and instead
1566rely on server-side font rendering. Such programs require to specify a
1567full name of a font using XLFD (X Logical Font Description), like this:
1568
1569@example
1570-*-dejavu sans-medium-r-normal-*-*-100-*-*-*-*-*-1
1571@end example
1572
1573To be able to use such full names for the TrueType fonts installed in
1574your Guix profile, you need to extend the font path of the X server:
1575
ca041ec1
LC
1576@c Note: 'xset' does not accept symlinks so the trick below arranges to
1577@c get at the real directory. See <https://bugs.gnu.org/30655>.
1a3e6b15 1578@example
ca041ec1 1579xset +fp $(dirname $(readlink -f ~/.guix-profile/share/fonts/truetype/fonts.dir))
1a3e6b15
AK
1580@end example
1581
e32171ee 1582@cindex @code{xlsfonts}
1a3e6b15
AK
1583After that, you can run @code{xlsfonts} (from @code{xlsfonts} package)
1584to make sure your TrueType fonts are listed there.
1585
e5942cbf
RW
1586@cindex @code{fc-cache}
1587@cindex font cache
1588After installing fonts you may have to refresh the font cache to use
1589them in applications. The same applies when applications installed via
1590Guix do not seem to find fonts. To force rebuilding of the font cache
1591run @code{fc-cache -f}. The @code{fc-cache} command is provided by the
1592@code{fontconfig} package.
1593
b3129f2b
LC
1594@subsection X.509 Certificates
1595
e32171ee 1596@cindex @code{nss-certs}
b3129f2b
LC
1597The @code{nss-certs} package provides X.509 certificates, which allow
1598programs to authenticate Web servers accessed over HTTPS.
1599
1600When using Guix on a foreign distro, you can install this package and
1601define the relevant environment variables so that packages know where to
80d944b7 1602look for certificates. @xref{X.509 Certificates}, for detailed
b3129f2b
LC
1603information.
1604
6d97319c
AK
1605@subsection Emacs Packages
1606
e32171ee 1607@cindex @code{emacs}
6d97319c
AK
1608When you install Emacs packages with Guix, the elisp files may be placed
1609either in @file{$HOME/.guix-profile/share/emacs/site-lisp/} or in
1610sub-directories of
1611@file{$HOME/.guix-profile/share/emacs/site-lisp/guix.d/}. The latter
1612directory exists because potentially there may exist thousands of Emacs
d2c3be99 1613packages and storing all their files in a single directory may not be
6d97319c
AK
1614reliable (because of name conflicts). So we think using a separate
1615directory for each package is a good idea. It is very similar to how
1616the Emacs package system organizes the file structure (@pxref{Package
1617Files,,, emacs, The GNU Emacs Manual}).
1618
1619By default, Emacs (installed with Guix) ``knows'' where these packages
f97c9175 1620are placed, so you do not need to perform any configuration. If, for
6d97319c 1621some reason, you want to avoid auto-loading Emacs packages installed
f97c9175 1622with Guix, you can do so by running Emacs with @code{--no-site-file}
6d97319c
AK
1623option (@pxref{Init File,,, emacs, The GNU Emacs Manual}).
1624
2f0c4b82
RW
1625@subsection The GCC toolchain
1626
1627@cindex GCC
1628@cindex ld-wrapper
1629
1630Guix offers individual compiler packages such as @code{gcc} but if you
1631are in need of a complete toolchain for compiling and linking source
1632code what you really want is the @code{gcc-toolchain} package. This
1633package provides a complete GCC toolchain for C/C++ development,
1634including GCC itself, the GNU C Library (headers and binaries, plus
1635debugging symbols in the @code{debug} output), Binutils, and a linker
1636wrapper.
1637
1638@cindex attempt to use impure library, error message
1639
1640The wrapper's purpose is to inspect the @code{-L} and @code{-l} switches
1641passed to the linker, add corresponding @code{-rpath} arguments, and
1642invoke the actual linker with this new set of arguments. By default,
1643the linker wrapper refuses to link to libraries outside the store to
1644ensure ``purity''. This can be annoying when using the toolchain to
1645link with local libraries. To allow references to libraries outside the
1646store you need to define the environment variable
1647@code{GUIX_LD_WRAPPER_ALLOW_IMPURITIES}.
1648
0e2d0213
LC
1649@c TODO What else?
1650
eeaf4427
LC
1651@c *********************************************************************
1652@node Package Management
1653@chapter Package Management
1654
e32171ee 1655@cindex packages
f8348b91 1656The purpose of GNU Guix is to allow users to easily install, upgrade, and
eeaf4427 1657remove software packages, without having to know about their build
f97c9175 1658procedures or dependencies. Guix also goes beyond this obvious set of
eeaf4427
LC
1659features.
1660
8ca0c88a
AK
1661This chapter describes the main features of Guix, as well as the
1662package management tools it provides. Along with the command-line
1663interface described below (@pxref{Invoking guix package, @code{guix
08c597d7 1664package}}), you may also use the Emacs-Guix interface (@pxref{Top,,,
8ca0c88a
AK
1665emacs-guix, The Emacs-Guix Reference Manual}), after installing
1666@code{emacs-guix} package (run @kbd{M-x guix-help} command to start
1667with it):
deb6276d
AK
1668
1669@example
1670guix package -i emacs-guix
1671@end example
eeaf4427
LC
1672
1673@menu
1674* Features:: How Guix will make your life brighter.
e49951eb 1675* Invoking guix package:: Package installation, removal, etc.
c4202d60 1676* Substitutes:: Downloading pre-built binaries.
760c60d6 1677* Packages with Multiple Outputs:: Single source package, multiple outputs.
e49951eb 1678* Invoking guix gc:: Running the garbage collector.
f651b477 1679* Invoking guix pull:: Fetching the latest Guix and distribution.
239c2266 1680* Invoking guix pack:: Creating software bundles.
760c60d6 1681* Invoking guix archive:: Exporting and importing store files.
eeaf4427
LC
1682@end menu
1683
1684@node Features
1685@section Features
1686
1687When using Guix, each package ends up in the @dfn{package store}, in its
1688own directory---something that resembles
deb6276d 1689@file{/gnu/store/xxx-package-1.2}, where @code{xxx} is a base32 string.
eeaf4427
LC
1690
1691Instead of referring to these directories, users have their own
1692@dfn{profile}, which points to the packages that they actually want to
821b0015
LC
1693use. These profiles are stored within each user's home directory, at
1694@code{$HOME/.guix-profile}.
eeaf4427 1695
821b0015 1696For example, @code{alice} installs GCC 4.7.2. As a result,
eeaf4427 1697@file{/home/alice/.guix-profile/bin/gcc} points to
834129e0 1698@file{/gnu/store/@dots{}-gcc-4.7.2/bin/gcc}. Now, on the same machine,
821b0015
LC
1699@code{bob} had already installed GCC 4.8.0. The profile of @code{bob}
1700simply continues to point to
834129e0 1701@file{/gnu/store/@dots{}-gcc-4.8.0/bin/gcc}---i.e., both versions of GCC
821b0015 1702coexist on the same system without any interference.
eeaf4427 1703
e49951eb 1704The @command{guix package} command is the central tool to manage
f97c9175 1705packages (@pxref{Invoking guix package}). It operates on the per-user
821b0015 1706profiles, and can be used @emph{with normal user privileges}.
eeaf4427 1707
e32171ee 1708@cindex transactions
eeaf4427
LC
1709The command provides the obvious install, remove, and upgrade
1710operations. Each invocation is actually a @emph{transaction}: either
ba55b1cb 1711the specified operation succeeds, or nothing happens. Thus, if the
e49951eb 1712@command{guix package} process is terminated during the transaction,
eeaf4427
LC
1713or if a power outage occurs during the transaction, then the user's
1714profile remains in its previous state, and remains usable.
1715
1716In addition, any package transaction may be @emph{rolled back}. So, if,
1717for example, an upgrade installs a new version of a package that turns
1718out to have a serious bug, users may roll back to the previous instance
4af2447e 1719of their profile, which was known to work well. Similarly, the global
6f773606
LC
1720system configuration on GuixSD is subject to
1721transactional upgrades and roll-back
4af2447e 1722(@pxref{Using the Configuration System}).
eeaf4427 1723
f97c9175
AE
1724All packages in the package store may be @emph{garbage-collected}.
1725Guix can determine which packages are still referenced by user
fe8ff028 1726profiles, and remove those that are provably no longer referenced
e49951eb 1727(@pxref{Invoking guix gc}). Users may also explicitly remove old
fe8ff028
LC
1728generations of their profile so that the packages they refer to can be
1729collected.
eeaf4427 1730
e900c503
LC
1731@cindex reproducibility
1732@cindex reproducible builds
eeaf4427
LC
1733Finally, Guix takes a @dfn{purely functional} approach to package
1734management, as described in the introduction (@pxref{Introduction}).
834129e0 1735Each @file{/gnu/store} package directory name contains a hash of all the
eeaf4427
LC
1736inputs that were used to build that package---compiler, libraries, build
1737scripts, etc. This direct correspondence allows users to make sure a
1738given package installation matches the current state of their
e900c503
LC
1739distribution. It also helps maximize @dfn{build reproducibility}:
1740thanks to the isolated build environments that are used, a given build
1741is likely to yield bit-identical files when performed on different
1742machines (@pxref{Invoking guix-daemon, container}).
eeaf4427 1743
c4202d60 1744@cindex substitutes
eeaf4427 1745This foundation allows Guix to support @dfn{transparent binary/source
c4202d60 1746deployment}. When a pre-built binary for a @file{/gnu/store} item is
18f2887b 1747available from an external source---a @dfn{substitute}, Guix just
c4202d60
LC
1748downloads it and unpacks it;
1749otherwise, it builds the package from source, locally
bf9eacd2
LC
1750(@pxref{Substitutes}). Because build results are usually bit-for-bit
1751reproducible, users do not have to trust servers that provide
1752substitutes: they can force a local build and @emph{challenge} providers
1753(@pxref{Invoking guix challenge}).
eeaf4427 1754
f5fd4fd2
LC
1755Control over the build environment is a feature that is also useful for
1756developers. The @command{guix environment} command allows developers of
1757a package to quickly set up the right development environment for their
f97c9175
AE
1758package, without having to manually install the dependencies of the
1759package into their profile (@pxref{Invoking guix environment}).
f5fd4fd2 1760
e49951eb
MW
1761@node Invoking guix package
1762@section Invoking @command{guix package}
eeaf4427 1763
e32171ee
JD
1764@cindex installing packages
1765@cindex removing packages
1766@cindex package installation
1767@cindex package removal
e49951eb 1768The @command{guix package} command is the tool that allows users to
eeaf4427
LC
1769install, upgrade, and remove packages, as well as rolling back to
1770previous configurations. It operates only on the user's own profile,
1771and works with normal user privileges (@pxref{Features}). Its syntax
1772is:
1773
1774@example
e49951eb 1775guix package @var{options}
eeaf4427 1776@end example
e32171ee 1777@cindex transactions
ba55b1cb 1778Primarily, @var{options} specifies the operations to be performed during
eeaf4427 1779the transaction. Upon completion, a new profile is created, but
99bd74d5 1780previous @dfn{generations} of the profile remain available, should the user
eeaf4427
LC
1781want to roll back.
1782
6447738c
MW
1783For example, to remove @code{lua} and install @code{guile} and
1784@code{guile-cairo} in a single transaction:
1785
1786@example
1787guix package -r lua -i guile guile-cairo
1788@end example
1789
99bd74d5
LC
1790@command{guix package} also supports a @dfn{declarative approach}
1791whereby the user specifies the exact set of packages to be available and
1792passes it @i{via} the @option{--manifest} option
1793(@pxref{profile-manifest, @option{--manifest}}).
1794
e32171ee 1795@cindex profile
b9e5c0a9 1796For each user, a symlink to the user's default profile is automatically
0ec1af59 1797created in @file{$HOME/.guix-profile}. This symlink always points to the
b9e5c0a9
LC
1798current generation of the user's default profile. Thus, users can add
1799@file{$HOME/.guix-profile/bin} to their @code{PATH} environment
1800variable, and so on.
d664f1b4
LC
1801@cindex search paths
1802If you are not using the Guix System Distribution, consider adding the
1803following lines to your @file{~/.bash_profile} (@pxref{Bash Startup
1804Files,,, bash, The GNU Bash Reference Manual}) so that newly-spawned
1805shells get all the right environment variable definitions:
1806
1807@example
bd7e136d 1808GUIX_PROFILE="$HOME/.guix-profile" ; \
d664f1b4
LC
1809source "$HOME/.guix-profile/etc/profile"
1810@end example
b9e5c0a9 1811
4379c35b
LC
1812In a multi-user setup, user profiles are stored in a place registered as
1813a @dfn{garbage-collector root}, which @file{$HOME/.guix-profile} points
1814to (@pxref{Invoking guix gc}). That directory is normally
fae7973e 1815@code{@var{localstatedir}/guix/profiles/per-user/@var{user}}, where
0ec1af59 1816@var{localstatedir} is the value passed to @code{configure} as
4379c35b
LC
1817@code{--localstatedir}, and @var{user} is the user name. The
1818@file{per-user} directory is created when @command{guix-daemon} is
1819started, and the @var{user} sub-directory is created by @command{guix
1820package}.
0ec1af59
LC
1821
1822The @var{options} can be among the following:
1823
eeaf4427
LC
1824@table @code
1825
6447738c
MW
1826@item --install=@var{package} @dots{}
1827@itemx -i @var{package} @dots{}
1828Install the specified @var{package}s.
eeaf4427 1829
6447738c 1830Each @var{package} may specify either a simple package name, such as
1b846da8
ML
1831@code{guile}, or a package name followed by an at-sign and version number,
1832such as @code{guile@@1.8.8} or simply @code{guile@@1.8} (in the latter
724311a2
LC
1833case, the newest version prefixed by @code{1.8} is selected.)
1834
1835If no version number is specified, the
dc5669cd
MW
1836newest available version will be selected. In addition, @var{package}
1837may contain a colon, followed by the name of one of the outputs of the
1b846da8 1838package, as in @code{gcc:doc} or @code{binutils@@2.22:lib}
e7f34eb0
LC
1839(@pxref{Packages with Multiple Outputs}). Packages with a corresponding
1840name (and optionally version) are searched for among the GNU
1841distribution modules (@pxref{Package Modules}).
eeaf4427 1842
461572cc
LC
1843@cindex propagated inputs
1844Sometimes packages have @dfn{propagated inputs}: these are dependencies
21461f27
LC
1845that automatically get installed along with the required package
1846(@pxref{package-propagated-inputs, @code{propagated-inputs} in
1847@code{package} objects}, for information about propagated inputs in
1848package definitions).
461572cc 1849
21461f27 1850@anchor{package-cmd-propagated-inputs}
461572cc
LC
1851An example is the GNU MPC library: its C header files refer to those of
1852the GNU MPFR library, which in turn refer to those of the GMP library.
1853Thus, when installing MPC, the MPFR and GMP libraries also get installed
1854in the profile; removing MPC also removes MPFR and GMP---unless they had
f97c9175 1855also been explicitly installed by the user.
461572cc 1856
ba7ea5ce 1857Besides, packages sometimes rely on the definition of environment
5924080d 1858variables for their search paths (see explanation of
ba7ea5ce 1859@code{--search-paths} below). Any missing or possibly incorrect
5924080d
LC
1860environment variable definitions are reported here.
1861
5d4b411f
LC
1862@item --install-from-expression=@var{exp}
1863@itemx -e @var{exp}
1864Install the package @var{exp} evaluates to.
1865
1866@var{exp} must be a Scheme expression that evaluates to a
1867@code{<package>} object. This option is notably useful to disambiguate
1868between same-named variants of a package, with expressions such as
1869@code{(@@ (gnu packages base) guile-final)}.
1870
1871Note that this option installs the first output of the specified
1872package, which may be insufficient when needing a specific output of a
1873multiple-output package.
1874
0d279400
DT
1875@item --install-from-file=@var{file}
1876@itemx -f @var{file}
1877Install the package that the code within @var{file} evaluates to.
1878
1879As an example, @var{file} might contain a definition like this
1880(@pxref{Defining Packages}):
1881
1882@example
1883@verbatiminclude package-hello.scm
1884@end example
1885
baacf042 1886Developers may find it useful to include such a @file{guix.scm} file
f97c9175 1887in the root of their project source tree that can be used to test
0d279400
DT
1888development snapshots and create reproducible development environments
1889(@pxref{Invoking guix environment}).
1890
6447738c
MW
1891@item --remove=@var{package} @dots{}
1892@itemx -r @var{package} @dots{}
1893Remove the specified @var{package}s.
eeaf4427 1894
6447738c 1895As for @code{--install}, each @var{package} may specify a version number
13ed095c
LC
1896and/or output name in addition to the package name. For instance,
1897@code{-r glibc:debug} would remove the @code{debug} output of
1898@code{glibc}.
1899
6447738c
MW
1900@item --upgrade[=@var{regexp} @dots{}]
1901@itemx -u [@var{regexp} @dots{}]
e32171ee 1902@cindex upgrading packages
6447738c
MW
1903Upgrade all the installed packages. If one or more @var{regexp}s are
1904specified, upgrade only installed packages whose name matches a
d5f01e48 1905@var{regexp}. Also see the @code{--do-not-upgrade} option below.
eeaf4427 1906
f651b477
LC
1907Note that this upgrades package to the latest version of packages found
1908in the distribution currently installed. To update your distribution,
1909you should regularly run @command{guix pull} (@pxref{Invoking guix
1910pull}).
1911
d5f01e48
MW
1912@item --do-not-upgrade[=@var{regexp} @dots{}]
1913When used together with the @code{--upgrade} option, do @emph{not}
1914upgrade any packages whose name matches a @var{regexp}. For example, to
1915upgrade all packages in the current profile except those containing the
1916substring ``emacs'':
1917
1918@example
1919$ guix package --upgrade . --do-not-upgrade emacs
1920@end example
1921
99bd74d5 1922@item @anchor{profile-manifest}--manifest=@var{file}
1b676447 1923@itemx -m @var{file}
99bd74d5
LC
1924@cindex profile declaration
1925@cindex profile manifest
1926Create a new generation of the profile from the manifest object
1b676447
DT
1927returned by the Scheme code in @var{file}.
1928
99bd74d5
LC
1929This allows you to @emph{declare} the profile's contents rather than
1930constructing it through a sequence of @code{--install} and similar
1931commands. The advantage is that @var{file} can be put under version
1932control, copied to different machines to reproduce the same profile, and
1933so on.
1934
1935@c FIXME: Add reference to (guix profile) documentation when available.
1936@var{file} must return a @dfn{manifest} object, which is roughly a list
1937of packages:
1b676447 1938
99bd74d5 1939@findex packages->manifest
1b676447 1940@example
99bd74d5 1941(use-package-modules guile emacs)
1b676447
DT
1942
1943(packages->manifest
99bd74d5
LC
1944 (list emacs
1945 guile-2.0
1b676447 1946 ;; Use a specific package output.
99bd74d5 1947 (list guile-2.0 "debug")))
1b676447
DT
1948@end example
1949
c08ea55e 1950@findex specifications->manifest
6cd10593
LC
1951In this example we have to know which modules define the @code{emacs}
1952and @code{guile-2.0} variables to provide the right
1953@code{use-package-modules} line, which can be cumbersome. We can
1954instead provide regular package specifications and let
c08ea55e 1955@code{specifications->manifest} look up the corresponding package
6cd10593
LC
1956objects, like this:
1957
1958@example
c08ea55e
LC
1959(specifications->manifest
1960 '("emacs" "guile@@2.2" "guile@@2.2:debug"))
6cd10593
LC
1961@end example
1962
24e262f0 1963@item --roll-back
e32171ee
JD
1964@cindex rolling back
1965@cindex undoing transactions
1966@cindex transactions, undoing
24e262f0
LC
1967Roll back to the previous @dfn{generation} of the profile---i.e., undo
1968the last transaction.
1969
1970When combined with options such as @code{--install}, roll back occurs
1971before any other actions.
1972
d9307267 1973When rolling back from the first generation that actually contains
4b2bc804 1974installed packages, the profile is made to point to the @dfn{zeroth
f97c9175 1975generation}, which contains no files apart from its own metadata.
d9307267 1976
f97c9175
AE
1977After having rolled back, installing, removing, or upgrading packages
1978overwrites previous future generations. Thus, the history of the
1979generations in a profile is always linear.
82fe08ed 1980
b3bb82f1
AK
1981@item --switch-generation=@var{pattern}
1982@itemx -S @var{pattern}
e32171ee 1983@cindex generations
b3bb82f1
AK
1984Switch to a particular generation defined by @var{pattern}.
1985
1986@var{pattern} may be either a generation number or a number prefixed
1987with ``+'' or ``-''. The latter means: move forward/backward by a
1988specified number of generations. For example, if you want to return to
1989the latest generation after @code{--roll-back}, use
1990@code{--switch-generation=+1}.
1991
1992The difference between @code{--roll-back} and
1993@code{--switch-generation=-1} is that @code{--switch-generation} will
1994not make a zeroth generation, so if a specified generation does not
1995exist, the current generation will not be changed.
1996
dbc31ab2 1997@item --search-paths[=@var{kind}]
5924080d
LC
1998@cindex search paths
1999Report environment variable definitions, in Bash syntax, that may be
2000needed in order to use the set of installed packages. These environment
2001variables are used to specify @dfn{search paths} for files used by some
2002of the installed packages.
2003
2004For example, GCC needs the @code{CPATH} and @code{LIBRARY_PATH}
2005environment variables to be defined so it can look for headers and
2006libraries in the user's profile (@pxref{Environment Variables,,, gcc,
2007Using the GNU Compiler Collection (GCC)}). If GCC and, say, the C
2008library are installed in the profile, then @code{--search-paths} will
2009suggest setting these variables to @code{@var{profile}/include} and
2010@code{@var{profile}/lib}, respectively.
2011
dbc31ab2
LC
2012The typical use case is to define these environment variables in the
2013shell:
2014
2015@example
2016$ eval `guix package --search-paths`
2017@end example
2018
2019@var{kind} may be one of @code{exact}, @code{prefix}, or @code{suffix},
2020meaning that the returned environment variable definitions will either
2021be exact settings, or prefixes or suffixes of the current value of these
2022variables. When omitted, @var{kind} defaults to @code{exact}.
2023
fc2d2339
LC
2024This option can also be used to compute the @emph{combined} search paths
2025of several profiles. Consider this example:
2026
2027@example
2028$ guix package -p foo -i guile
2029$ guix package -p bar -i guile-json
2030$ guix package -p foo -p bar --search-paths
2031@end example
2032
2033The last command above reports about the @code{GUILE_LOAD_PATH}
2034variable, even though, taken individually, neither @file{foo} nor
2035@file{bar} would lead to that recommendation.
2036
2037
eeaf4427
LC
2038@item --profile=@var{profile}
2039@itemx -p @var{profile}
2040Use @var{profile} instead of the user's default profile.
2041
70915c1a 2042@item --verbose
f97c9175
AE
2043Produce verbose output. In particular, emit the build log of the
2044environment on the standard error port.
70915c1a 2045
eeaf4427
LC
2046@item --bootstrap
2047Use the bootstrap Guile to build the profile. This option is only
2048useful to distribution developers.
2049
2050@end table
2051
f97c9175 2052In addition to these actions, @command{guix package} supports the
733b4130
LC
2053following options to query the current state of a profile, or the
2054availability of packages:
eeaf4427 2055
733b4130
LC
2056@table @option
2057
acc08466
NK
2058@item --search=@var{regexp}
2059@itemx -s @var{regexp}
b110869d 2060@cindex searching for packages
5763ad92 2061List the available packages whose name, synopsis, or description matches
4e863eb3 2062@var{regexp}, sorted by relevance. Print all the metadata of matching packages in
299112d3
LC
2063@code{recutils} format (@pxref{Top, GNU recutils databases,, recutils,
2064GNU recutils manual}).
acc08466 2065
299112d3
LC
2066This allows specific fields to be extracted using the @command{recsel}
2067command, for instance:
2068
2069@example
4e863eb3
LC
2070$ guix package -s malloc | recsel -p name,version,relevance
2071name: jemalloc
2072version: 4.5.0
2073relevance: 6
2074
299112d3 2075name: glibc
4e863eb3
LC
2076version: 2.25
2077relevance: 1
299112d3
LC
2078
2079name: libgc
4e863eb3
LC
2080version: 7.6.0
2081relevance: 1
299112d3 2082@end example
acc08466 2083
a12d92f5
LC
2084Similarly, to show the name of all the packages available under the
2085terms of the GNU@tie{}LGPL version 3:
2086
2087@example
2088$ guix package -s "" | recsel -p name -e 'license ~ "LGPL 3"'
2089name: elfutils
2090
2091name: gmp
2092@dots{}
2093@end example
2094
db5a9444
LC
2095It is also possible to refine search results using several @code{-s}
2096flags. For example, the following command returns a list of board
2097games:
2098
2099@example
2100$ guix package -s '\<board\>' -s game | recsel -p name
2101name: gnubg
2102@dots{}
2103@end example
2104
2105If we were to omit @code{-s game}, we would also get software packages
2106that deal with printed circuit boards; removing the angle brackets
2107around @code{board} would further add packages that have to do with
2108keyboards.
2109
b110869d
LC
2110And now for a more elaborate example. The following command searches
2111for cryptographic libraries, filters out Haskell, Perl, Python, and Ruby
2112libraries, and prints the name and synopsis of the matching packages:
2113
2114@example
2115$ guix package -s crypto -s library | \
2116 recsel -e '! (name ~ "^(ghc|perl|python|ruby)")' -p name,synopsis
2117@end example
2118
2119@noindent
2120@xref{Selection Expressions,,, recutils, GNU recutils manual}, for more
2121information on @dfn{selection expressions} for @code{recsel -e}.
2122
2aa6efb0
CR
2123@item --show=@var{package}
2124Show details about @var{package}, taken from the list of available packages, in
2125@code{recutils} format (@pxref{Top, GNU recutils databases,, recutils, GNU
2126recutils manual}).
2127
2128@example
2129$ guix package --show=python | recsel -p name,version
2130name: python
2131version: 2.7.6
2132
2133name: python
2134version: 3.3.5
2135@end example
2136
2137You may also specify the full name of a package to only get details about a
2138specific version of it:
2139@example
ea206df4 2140$ guix package --show=python@@3.4 | recsel -p name,version
2aa6efb0 2141name: python
ea206df4 2142version: 3.4.3
2aa6efb0
CR
2143@end example
2144
2145
2146
733b4130
LC
2147@item --list-installed[=@var{regexp}]
2148@itemx -I [@var{regexp}]
bd9bde1c
LC
2149List the currently installed packages in the specified profile, with the
2150most recently installed packages shown last. When @var{regexp} is
2151specified, list only installed packages whose name matches @var{regexp}.
733b4130
LC
2152
2153For each installed package, print the following items, separated by
2154tabs: the package name, its version string, the part of the package that
2155is installed (for instance, @code{out} for the default output,
2156@code{include} for its headers, etc.), and the path of this package in
2157the store.
2158
64fc89b6
LC
2159@item --list-available[=@var{regexp}]
2160@itemx -A [@var{regexp}]
5763ad92 2161List packages currently available in the distribution for this system
a1ba8475
LC
2162(@pxref{GNU Distribution}). When @var{regexp} is specified, list only
2163installed packages whose name matches @var{regexp}.
64fc89b6
LC
2164
2165For each package, print the following items separated by tabs: its name,
6e721c4d
LC
2166its version string, the parts of the package (@pxref{Packages with
2167Multiple Outputs}), and the source location of its definition.
64fc89b6 2168
f566d765
LC
2169@item --list-generations[=@var{pattern}]
2170@itemx -l [@var{pattern}]
e32171ee 2171@cindex generations
f566d765
LC
2172Return a list of generations along with their creation dates; for each
2173generation, show the installed packages, with the most recently
4b2bc804
NK
2174installed packages shown last. Note that the zeroth generation is never
2175shown.
f566d765
LC
2176
2177For each installed package, print the following items, separated by
2178tabs: the name of a package, its version string, the part of the package
2179that is installed (@pxref{Packages with Multiple Outputs}), and the
2180location of this package in the store.
2181
2182When @var{pattern} is used, the command returns only matching
2183generations. Valid patterns include:
2184
2185@itemize
2186@item @emph{Integers and comma-separated integers}. Both patterns denote
2187generation numbers. For instance, @code{--list-generations=1} returns
2188the first one.
2189
2190And @code{--list-generations=1,8,2} outputs three generations in the
2191specified order. Neither spaces nor trailing commas are allowed.
2192
2193@item @emph{Ranges}. @code{--list-generations=2..9} prints the
2194specified generations and everything in between. Note that the start of
f97c9175 2195a range must be smaller than its end.
f566d765
LC
2196
2197It is also possible to omit the endpoint. For example,
2198@code{--list-generations=2..}, returns all generations starting from the
2199second one.
2200
2201@item @emph{Durations}. You can also get the last @emph{N}@tie{}days, weeks,
2202or months by passing an integer along with the first letter of the
d7ddb257
LC
2203duration. For example, @code{--list-generations=20d} lists generations
2204that are up to 20 days old.
f566d765
LC
2205@end itemize
2206
b7884ca3
NK
2207@item --delete-generations[=@var{pattern}]
2208@itemx -d [@var{pattern}]
d7ddb257
LC
2209When @var{pattern} is omitted, delete all generations except the current
2210one.
b7884ca3
NK
2211
2212This command accepts the same patterns as @option{--list-generations}.
d7ddb257
LC
2213When @var{pattern} is specified, delete the matching generations. When
2214@var{pattern} specifies a duration, generations @emph{older} than the
2215specified duration match. For instance, @code{--delete-generations=1m}
2216deletes generations that are more than one month old.
2217
391bdd8f
LC
2218If the current generation matches, it is @emph{not} deleted. Also, the
2219zeroth generation is never deleted.
b7884ca3 2220
f97c9175 2221Note that deleting generations prevents rolling back to them.
1bb9900a
LC
2222Consequently, this command must be used with care.
2223
733b4130 2224@end table
eeaf4427 2225
70ee5642 2226Finally, since @command{guix package} may actually start build
ccd7158d 2227processes, it supports all the common build options (@pxref{Common Build
f97c9175 2228Options}). It also supports package transformation options, such as
b8638f03
LC
2229@option{--with-source} (@pxref{Package Transformation Options}).
2230However, note that package transformations are lost when upgrading; to
f97c9175 2231preserve transformations across upgrades, you should define your own
b8638f03
LC
2232package variant in a Guile module and add it to @code{GUIX_PACKAGE_PATH}
2233(@pxref{Defining Packages}).
2234
c4202d60
LC
2235@node Substitutes
2236@section Substitutes
2237
2238@cindex substitutes
2239@cindex pre-built binaries
2240Guix supports transparent source/binary deployment, which means that it
2241can either build things locally, or download pre-built items from a
77f92158
CM
2242server, or both. We call these pre-built items @dfn{substitutes}---they
2243are substitutes for local build results. In many cases, downloading a
c4202d60
LC
2244substitute is much faster than building things locally.
2245
2246Substitutes can be anything resulting from a derivation build
2247(@pxref{Derivations}). Of course, in the common case, they are
2248pre-built package binaries, but source tarballs, for instance, which
2249also result from derivation builds, can be available as substitutes.
2250
77f92158
CM
2251@menu
2252* Official Substitute Server:: One particular source of substitutes.
2253* Substitute Server Authorization:: How to enable or disable substitutes.
2254* Substitute Authentication:: How Guix verifies substitutes.
2255* Proxy Settings:: How to get substitutes via proxy.
2256* Substitution Failure:: What happens when substitution fails.
2257* On Trusting Binaries:: How can you trust that binary blob?
2258@end menu
2259
2260@node Official Substitute Server
2261@subsection Official Substitute Server
2262
2263@cindex hydra
2264@cindex build farm
39b27f4e
LC
2265The @code{mirror.hydra.gnu.org} server is a front-end to an official build farm
2266that builds packages from Guix continuously for some
deb6276d 2267architectures, and makes them available as substitutes. This is the
f8a8e0fe
LC
2268default source of substitutes; it can be overridden by passing the
2269@option{--substitute-urls} option either to @command{guix-daemon}
2270(@pxref{daemon-substitute-urls,, @code{guix-daemon --substitute-urls}})
2271or to client tools such as @command{guix package}
2272(@pxref{client-substitute-urls,, client @option{--substitute-urls}
2273option}).
c4202d60 2274
1dbe3a8d 2275Substitute URLs can be either HTTP or HTTPS.
9b7bd1b1
LC
2276HTTPS is recommended because communications are encrypted; conversely,
2277using HTTP makes all communications visible to an eavesdropper, who
2278could use the information gathered to determine, for instance, whether
2279your system has unpatched security vulnerabilities.
2280
77f92158
CM
2281Substitutes from the official build farm are enabled by default when
2282using the Guix System Distribution (@pxref{GNU Distribution}). However,
2283they are disabled by default when using Guix on a foreign distribution,
2284unless you have explicitly enabled them via one of the recommended
2285installation steps (@pxref{Installation}). The following paragraphs
2286describe how to enable or disable substitutes for the official build
2287farm; the same procedure can also be used to enable substitutes for any
2288other substitute server.
2289
2290@node Substitute Server Authorization
2291@subsection Substitute Server Authorization
2292
c4202d60 2293@cindex security
e32171ee 2294@cindex substitutes, authorization thereof
a9468b42
LC
2295@cindex access control list (ACL), for substitutes
2296@cindex ACL (access control list), for substitutes
df061d07
LC
2297To allow Guix to download substitutes from @code{hydra.gnu.org} or a
2298mirror thereof, you
c4202d60
LC
2299must add its public key to the access control list (ACL) of archive
2300imports, using the @command{guix archive} command (@pxref{Invoking guix
2301archive}). Doing so implies that you trust @code{hydra.gnu.org} to not
2302be compromised and to serve genuine substitutes.
2303
77f92158 2304The public key for @code{hydra.gnu.org} is installed along with Guix, in
c4202d60
LC
2305@code{@var{prefix}/share/guix/hydra.gnu.org.pub}, where @var{prefix} is
2306the installation prefix of Guix. If you installed Guix from source,
2307make sure you checked the GPG signature of
2308@file{guix-@value{VERSION}.tar.gz}, which contains this public key file.
2309Then, you can run something like this:
2310
2311@example
d65d7759 2312# guix archive --authorize < @var{prefix}/share/guix/hydra.gnu.org.pub
c4202d60
LC
2313@end example
2314
39b27f4e
LC
2315@quotation Note
2316Similarly, the @file{berlin.guixsd.org.pub} file contains the public key
2317for the project's new build farm, reachable at
2318@indicateurl{https://berlin.guixsd.org}.
2319
2320As of this writing @code{berlin.guixsd.org} is being upgraded so it can
2321better scale up, but you might want to give it a try. It is backed by
232220 x86_64/i686 build nodes and may be able to provide substitutes more
2323quickly than @code{mirror.hydra.gnu.org}.
2324@end quotation
2325
c4202d60
LC
2326Once this is in place, the output of a command like @code{guix build}
2327should change from something like:
2328
2329@example
2330$ guix build emacs --dry-run
2331The following derivations would be built:
2332 /gnu/store/yr7bnx8xwcayd6j95r2clmkdl1qh688w-emacs-24.3.drv
2333 /gnu/store/x8qsh1hlhgjx6cwsjyvybnfv2i37z23w-dbus-1.6.4.tar.gz.drv
2334 /gnu/store/1ixwp12fl950d15h2cj11c73733jay0z-alsa-lib-1.0.27.1.tar.bz2.drv
2335 /gnu/store/nlma1pw0p603fpfiqy7kn4zm105r5dmw-util-linux-2.21.drv
2336@dots{}
2337@end example
2338
2339@noindent
2340to something like:
2341
2342@example
2343$ guix build emacs --dry-run
39b27f4e 2344112.3 MB would be downloaded:
c4202d60
LC
2345 /gnu/store/pk3n22lbq6ydamyymqkkz7i69wiwjiwi-emacs-24.3
2346 /gnu/store/2ygn4ncnhrpr61rssa6z0d9x22si0va3-libjpeg-8d
2347 /gnu/store/71yz6lgx4dazma9dwn2mcjxaah9w77jq-cairo-1.12.16
2348 /gnu/store/7zdhgp0n1518lvfn8mb96sxqfmvqrl7v-libxrender-0.9.7
2349@dots{}
2350@end example
2351
2352@noindent
2353This indicates that substitutes from @code{hydra.gnu.org} are usable and
2354will be downloaded, when possible, for future builds.
2355
77f92158
CM
2356@cindex substitutes, how to disable
2357The substitute mechanism can be disabled globally by running
2358@code{guix-daemon} with @code{--no-substitutes} (@pxref{Invoking
2359guix-daemon}). It can also be disabled temporarily by passing the
2360@code{--no-substitutes} option to @command{guix package}, @command{guix
2361build}, and other command-line tools.
2362
2363@node Substitute Authentication
2364@subsection Substitute Authentication
2365
2366@cindex digital signatures
a9468b42
LC
2367Guix detects and raises an error when attempting to use a substitute
2368that has been tampered with. Likewise, it ignores substitutes that are
2369not signed, or that are not signed by one of the keys listed in the ACL.
2370
2371There is one exception though: if an unauthorized server provides
2372substitutes that are @emph{bit-for-bit identical} to those provided by
2373an authorized server, then the unauthorized server becomes eligible for
2374downloads. For example, assume we have chosen two substitute servers
2375with this option:
2376
2377@example
2378--substitute-urls="https://a.example.org https://b.example.org"
2379@end example
2380
2381@noindent
2382@cindex reproducible builds
2383If the ACL contains only the key for @code{b.example.org}, and if
2384@code{a.example.org} happens to serve the @emph{exact same} substitutes,
2385then Guix will download substitutes from @code{a.example.org} because it
2386comes first in the list and can be considered a mirror of
2387@code{b.example.org}. In practice, independent build machines usually
2388produce the same binaries, thanks to bit-reproducible builds (see
2389below).
c4202d60 2390
9b7bd1b1
LC
2391When using HTTPS, the server's X.509 certificate is @emph{not} validated
2392(in other words, the server is not authenticated), contrary to what
2393HTTPS clients such as Web browsers usually do. This is because Guix
2394authenticates substitute information itself, as explained above, which
2395is what we care about (whereas X.509 certificates are about
2396authenticating bindings between domain names and public keys.)
2397
77f92158
CM
2398@node Proxy Settings
2399@subsection Proxy Settings
c4202d60 2400
77f92158
CM
2401@vindex http_proxy
2402Substitutes are downloaded over HTTP or HTTPS.
2403The @code{http_proxy} environment
2404variable can be set in the environment of @command{guix-daemon} and is
2405honored for downloads of substitutes. Note that the value of
2406@code{http_proxy} in the environment where @command{guix build},
2407@command{guix package}, and other client commands are run has
2408@emph{absolutely no effect}.
9b7bd1b1 2409
77f92158
CM
2410@node Substitution Failure
2411@subsection Substitution Failure
2412
2413Even when a substitute for a derivation is available, sometimes the
2414substitution attempt will fail. This can happen for a variety of
2415reasons: the substitute server might be offline, the substitute may
2416recently have been deleted, the connection might have been interrupted,
2417etc.
2418
2419When substitutes are enabled and a substitute for a derivation is
2420available, but the substitution attempt fails, Guix will attempt to
2421build the derivation locally depending on whether or not
2422@code{--fallback} was given (@pxref{fallback-option,, common build
2423option @code{--fallback}}). Specifically, if @code{--fallback} was
2424omitted, then no local build will be performed, and the derivation is
2425considered to have failed. However, if @code{--fallback} was given,
2426then Guix will attempt to build the derivation locally, and the success
2427or failure of the derivation depends on the success or failure of the
2428local build. Note that when substitutes are disabled or no substitute
2429is available for the derivation in question, a local build will
2430@emph{always} be performed, regardless of whether or not
2431@code{--fallback} was given.
2432
2433To get an idea of how many substitutes are available right now, you can
2434try running the @command{guix weather} command (@pxref{Invoking guix
2435weather}). This command provides statistics on the substitutes provided
2436by a server.
2437
2438@node On Trusting Binaries
2439@subsection On Trusting Binaries
2440
2441@cindex trust, of pre-built binaries
c4202d60
LC
2442Today, each individual's control over their own computing is at the
2443mercy of institutions, corporations, and groups with enough power and
2444determination to subvert the computing infrastructure and exploit its
2445weaknesses. While using @code{hydra.gnu.org} substitutes can be
2446convenient, we encourage users to also build on their own, or even run
2447their own build farm, such that @code{hydra.gnu.org} is less of an
8ce229fc
LC
2448interesting target. One way to help is by publishing the software you
2449build using @command{guix publish} so that others have one more choice
2450of server to download substitutes from (@pxref{Invoking guix publish}).
c4202d60
LC
2451
2452Guix has the foundations to maximize build reproducibility
2453(@pxref{Features}). In most cases, independent builds of a given
2454package or derivation should yield bit-identical results. Thus, through
2455a diverse set of independent package builds, we can strengthen the
d23c20f1
LC
2456integrity of our systems. The @command{guix challenge} command aims to
2457help users assess substitute servers, and to assist developers in
2458finding out about non-deterministic package builds (@pxref{Invoking guix
a8d65643
LC
2459challenge}). Similarly, the @option{--check} option of @command{guix
2460build} allows users to check whether previously-installed substitutes
2461are genuine by rebuilding them locally (@pxref{build-check,
2462@command{guix build --check}}).
c4202d60
LC
2463
2464In the future, we want Guix to have support to publish and retrieve
2465binaries to/from other users, in a peer-to-peer fashion. If you would
2466like to discuss this project, join us on @email{guix-devel@@gnu.org}.
2467
6e721c4d
LC
2468@node Packages with Multiple Outputs
2469@section Packages with Multiple Outputs
2470
2471@cindex multiple-output packages
2472@cindex package outputs
e32171ee 2473@cindex outputs
6e721c4d
LC
2474
2475Often, packages defined in Guix have a single @dfn{output}---i.e., the
f97c9175 2476source package leads to exactly one directory in the store. When running
6e721c4d
LC
2477@command{guix package -i glibc}, one installs the default output of the
2478GNU libc package; the default output is called @code{out}, but its name
2479can be omitted as shown in this command. In this particular case, the
2480default output of @code{glibc} contains all the C header files, shared
2481libraries, static libraries, Info documentation, and other supporting
2482files.
2483
2484Sometimes it is more appropriate to separate the various types of files
2485produced from a single source package into separate outputs. For
2486instance, the GLib C library (used by GTK+ and related packages)
2487installs more than 20 MiB of reference documentation as HTML pages.
2488To save space for users who do not need it, the documentation goes to a
2489separate output, called @code{doc}. To install the main GLib output,
2490which contains everything but the documentation, one would run:
2491
2492@example
2493guix package -i glib
2494@end example
2495
e32171ee 2496@cindex documentation
6e721c4d
LC
2497The command to install its documentation is:
2498
2499@example
2500guix package -i glib:doc
2501@end example
2502
2503Some packages install programs with different ``dependency footprints''.
f97c9175 2504For instance, the WordNet package installs both command-line tools and
6e721c4d
LC
2505graphical user interfaces (GUIs). The former depend solely on the C
2506library, whereas the latter depend on Tcl/Tk and the underlying X
2507libraries. In this case, we leave the command-line tools in the default
2508output, whereas the GUIs are in a separate output. This allows users
fcc58db6
LC
2509who do not need the GUIs to save space. The @command{guix size} command
2510can help find out about such situations (@pxref{Invoking guix size}).
88856916 2511@command{guix graph} can also be helpful (@pxref{Invoking guix graph}).
6e721c4d
LC
2512
2513There are several such multiple-output packages in the GNU distribution.
91ef73d4
LC
2514Other conventional output names include @code{lib} for libraries and
2515possibly header files, @code{bin} for stand-alone programs, and
2516@code{debug} for debugging information (@pxref{Installing Debugging
2517Files}). The outputs of a packages are listed in the third column of
2518the output of @command{guix package --list-available} (@pxref{Invoking
2519guix package}).
6e721c4d 2520
eeaf4427 2521
e49951eb
MW
2522@node Invoking guix gc
2523@section Invoking @command{guix gc}
fe8ff028
LC
2524
2525@cindex garbage collector
e32171ee 2526@cindex disk space
f97c9175 2527Packages that are installed, but not used, may be @dfn{garbage-collected}.
e49951eb 2528The @command{guix gc} command allows users to explicitly run the garbage
c22eb992
LC
2529collector to reclaim space from the @file{/gnu/store} directory. It is
2530the @emph{only} way to remove files from @file{/gnu/store}---removing
2531files or directories manually may break it beyond repair!
fe8ff028 2532
6a98b9f3
LC
2533@cindex GC roots
2534@cindex garbage collector roots
fe8ff028 2535The garbage collector has a set of known @dfn{roots}: any file under
834129e0 2536@file{/gnu/store} reachable from a root is considered @dfn{live} and
fe8ff028 2537cannot be deleted; any other file is considered @dfn{dead} and may be
6a98b9f3
LC
2538deleted. The set of garbage collector roots (``GC roots'' for short)
2539includes default user profiles; by default, the symlinks under
2540@file{/var/guix/gcroots} represent these GC roots. New GC roots can be
2541added with @command{guix build --root}, for example (@pxref{Invoking
2542guix build}).
fe8ff028 2543
1bb9900a
LC
2544Prior to running @code{guix gc --collect-garbage} to make space, it is
2545often useful to remove old generations from user profiles; that way, old
2546package builds referenced by those generations can be reclaimed. This
2547is achieved by running @code{guix package --delete-generations}
2548(@pxref{Invoking guix package}).
2549
457103b9
LC
2550Our recommendation is to run a garbage collection periodically, or when
2551you are short on disk space. For instance, to guarantee that at least
25525@tie{}GB are available on your disk, simply run:
2553
2554@example
2555guix gc -F 5G
2556@end example
2557
2558It is perfectly safe to run as a non-interactive periodic job
2559(@pxref{Scheduled Job Execution}, for how to set up such a job on
2560GuixSD). Running @command{guix gc} with no arguments will collect as
2561much garbage as it can, but that is often inconvenient: you may find
2562yourself having to rebuild or re-download software that is ``dead'' from
2563the GC viewpoint but that is necessary to build other pieces of
2564software---e.g., the compiler tool chain.
2565
e49951eb 2566The @command{guix gc} command has three modes of operation: it can be
fe8ff028 2567used to garbage-collect any dead files (the default), to delete specific
7770aafc
LC
2568files (the @code{--delete} option), to print garbage-collector
2569information, or for more advanced queries. The garbage collection
2570options are as follows:
fe8ff028
LC
2571
2572@table @code
2573@item --collect-garbage[=@var{min}]
2574@itemx -C [@var{min}]
834129e0 2575Collect garbage---i.e., unreachable @file{/gnu/store} files and
fe8ff028
LC
2576sub-directories. This is the default operation when no option is
2577specified.
2578
2579When @var{min} is given, stop once @var{min} bytes have been collected.
2580@var{min} may be a number of bytes, or it may include a unit as a
4a44d7bb
LC
2581suffix, such as @code{MiB} for mebibytes and @code{GB} for gigabytes
2582(@pxref{Block size, size specifications,, coreutils, GNU Coreutils}).
fe8ff028
LC
2583
2584When @var{min} is omitted, collect all the garbage.
2585
0054e470
LC
2586@item --free-space=@var{free}
2587@itemx -F @var{free}
2588Collect garbage until @var{free} space is available under
2589@file{/gnu/store}, if possible; @var{free} denotes storage space, such
2590as @code{500MiB}, as described above.
2591
2592When @var{free} or more is already available in @file{/gnu/store}, do
2593nothing and exit immediately.
2594
fe8ff028
LC
2595@item --delete
2596@itemx -d
2597Attempt to delete all the store files and directories specified as
2598arguments. This fails if some of the files are not in the store, or if
2599they are still live.
2600
30d9aa54
LC
2601@item --list-failures
2602List store items corresponding to cached build failures.
2603
2604This prints nothing unless the daemon was started with
2605@option{--cache-failures} (@pxref{Invoking guix-daemon,
2606@option{--cache-failures}}).
2607
2608@item --clear-failures
2609Remove the specified store items from the failed-build cache.
2610
2611Again, this option only makes sense when the daemon is started with
2612@option{--cache-failures}. Otherwise, it does nothing.
2613
fe8ff028
LC
2614@item --list-dead
2615Show the list of dead files and directories still present in the
2616store---i.e., files and directories no longer reachable from any root.
2617
2618@item --list-live
2619Show the list of live store files and directories.
ba8b732d
LC
2620
2621@end table
2622
2623In addition, the references among existing store files can be queried:
2624
2625@table @code
2626
2627@item --references
2628@itemx --referrers
e32171ee 2629@cindex package dependencies
ba8b732d
LC
2630List the references (respectively, the referrers) of store files given
2631as arguments.
2632
8e59fdd5
LC
2633@item --requisites
2634@itemx -R
fcc58db6 2635@cindex closure
8e59fdd5
LC
2636List the requisites of the store files passed as arguments. Requisites
2637include the store files themselves, their references, and the references
2638of these, recursively. In other words, the returned list is the
2639@dfn{transitive closure} of the store files.
2640
f97c9175
AE
2641@xref{Invoking guix size}, for a tool to profile the size of the closure
2642of an element. @xref{Invoking guix graph}, for a tool to visualize
88856916 2643the graph of references.
fcc58db6 2644
8980eea5
LC
2645@item --derivers
2646@cindex derivation
2647Return the derivation(s) leading to the given store items
2648(@pxref{Derivations}).
2649
2650For example, this command:
2651
2652@example
2653guix gc --derivers `guix package -I ^emacs$ | cut -f4`
2654@end example
2655
2656@noindent
2657returns the @file{.drv} file(s) leading to the @code{emacs} package
2658installed in your profile.
2659
2660Note that there may be zero matching @file{.drv} files, for instance
2661because these files have been garbage-collected. There can also be more
2662than one matching @file{.drv} due to fixed-output derivations.
fe8ff028
LC
2663@end table
2664
7770aafc
LC
2665Lastly, the following options allow you to check the integrity of the
2666store and to control disk usage.
2667
2668@table @option
2669
2670@item --verify[=@var{options}]
2671@cindex integrity, of the store
2672@cindex integrity checking
2673Verify the integrity of the store.
2674
2675By default, make sure that all the store items marked as valid in the
f97c9175 2676database of the daemon actually exist in @file{/gnu/store}.
7770aafc 2677
f97c9175 2678When provided, @var{options} must be a comma-separated list containing one
7770aafc
LC
2679or more of @code{contents} and @code{repair}.
2680
7414de0a 2681When passing @option{--verify=contents}, the daemon computes the
f97c9175 2682content hash of each store item and compares it against its hash in the
7770aafc
LC
2683database. Hash mismatches are reported as data corruptions. Because it
2684traverses @emph{all the files in the store}, this command can take a
2685long time, especially on systems with a slow disk drive.
2686
2687@cindex repairing the store
6da5bb7b 2688@cindex corruption, recovering from
7770aafc
LC
2689Using @option{--verify=repair} or @option{--verify=contents,repair}
2690causes the daemon to try to repair corrupt store items by fetching
2691substitutes for them (@pxref{Substitutes}). Because repairing is not
2692atomic, and thus potentially dangerous, it is available only to the
6da5bb7b
LC
2693system administrator. A lightweight alternative, when you know exactly
2694which items in the store are corrupt, is @command{guix build --repair}
2695(@pxref{Invoking guix build}).
7770aafc
LC
2696
2697@item --optimize
2698@cindex deduplication
2699Optimize the store by hard-linking identical files---this is
2700@dfn{deduplication}.
2701
2702The daemon performs deduplication after each successful build or archive
2703import, unless it was started with @code{--disable-deduplication}
2704(@pxref{Invoking guix-daemon, @code{--disable-deduplication}}). Thus,
2705this option is primarily useful when the daemon was running with
2706@code{--disable-deduplication}.
2707
2708@end table
eeaf4427 2709
f651b477
LC
2710@node Invoking guix pull
2711@section Invoking @command{guix pull}
2712
e32171ee 2713@cindex upgrading Guix
7fcf2a0b 2714@cindex updating Guix
e32171ee
JD
2715@cindex @command{guix pull}
2716@cindex pull
f651b477
LC
2717Packages are installed or upgraded to the latest version available in
2718the distribution currently available on your local machine. To update
2719that distribution, along with the Guix tools, you must run @command{guix
2720pull}: the command downloads the latest Guix source code and package
59a16275
LC
2721descriptions, and deploys it. Source code is downloaded from a
2722@uref{https://git-scm.com, Git} repository.
f651b477
LC
2723
2724On completion, @command{guix package} will use packages and package
2725versions from this just-retrieved copy of Guix. Not only that, but all
2726the Guix commands and Scheme modules will also be taken from that latest
2727version. New @command{guix} sub-commands added by the update also
cb05108a
LC
2728become available.
2729
2730Any user can update their Guix copy using @command{guix pull}, and the
2731effect is limited to the user who run @command{guix pull}. For
2732instance, when user @code{root} runs @command{guix pull}, this has no
2733effect on the version of Guix that user @code{alice} sees, and vice
2734versa@footnote{Under the hood, @command{guix pull} updates the
2735@file{~/.config/guix/latest} symbolic link to point to the latest Guix,
5e2017ed
CM
2736and the @command{guix} command loads code from there. Currently, the
2737only way to roll back an invocation of @command{guix pull} is to
2738manually update this symlink to point to the previous Guix.}.
f651b477
LC
2739
2740The @command{guix pull} command is usually invoked with no arguments,
2741but it supports the following options:
2742
2743@table @code
2744@item --verbose
2745Produce verbose output, writing build logs to the standard error output.
2746
ab5d72ad 2747@item --url=@var{url}
59a16275 2748Download Guix from the Git repository at @var{url}.
ab5d72ad 2749
cca6941f 2750@vindex GUIX_PULL_URL
59a16275 2751By default, the source is taken from its canonical Git repository at
cca6941f
OP
2752@code{gnu.org}, for the stable branch of Guix. To use a different source,
2753set the @code{GUIX_PULL_URL} environment variable.
ab5d72ad 2754
59a16275
LC
2755@item --commit=@var{commit}
2756Deploy @var{commit}, a valid Git commit ID represented as a hexadecimal
2757string.
8a9cffb2 2758
59a16275
LC
2759@item --branch=@var{branch}
2760Deploy the tip of @var{branch}, the name of a Git branch available on
2761the repository at @var{url}.
8a9cffb2 2762
f651b477
LC
2763@item --bootstrap
2764Use the bootstrap Guile to build the latest Guix. This option is only
2765useful to Guix developers.
2766@end table
2767
4902d3c4
LC
2768In addition, @command{guix pull} supports all the common build options
2769(@pxref{Common Build Options}).
760c60d6 2770
239c2266
LC
2771@node Invoking guix pack
2772@section Invoking @command{guix pack}
2773
2774Occasionally you want to pass software to people who are not (yet!)
2775lucky enough to be using Guix. You'd tell them to run @command{guix
2776package -i @var{something}}, but that's not possible in this case. This
2777is where @command{guix pack} comes in.
2778
9d4399b8
LC
2779@quotation Note
2780If you are looking for ways to exchange binaries among machines that
2781already run Guix, @pxref{Invoking guix copy}, @ref{Invoking guix
2782publish}, and @ref{Invoking guix archive}.
2783@end quotation
2784
239c2266
LC
2785@cindex pack
2786@cindex bundle
2787@cindex application bundle
2788@cindex software bundle
2789The @command{guix pack} command creates a shrink-wrapped @dfn{pack} or
2790@dfn{software bundle}: it creates a tarball or some other archive
2791containing the binaries of the software you're interested in, and all
2792its dependencies. The resulting archive can be used on any machine that
2793does not have Guix, and people can run the exact same binaries as those
107b8da6
LC
2794you have with Guix. The pack itself is created in a bit-reproducible
2795fashion, so anyone can verify that it really contains the build results
2796that you pretend to be shipping.
239c2266
LC
2797
2798For example, to create a bundle containing Guile, Emacs, Geiser, and all
2799their dependencies, you can run:
2800
2801@example
2802$ guix pack guile emacs geiser
2803@dots{}
2804/gnu/store/@dots{}-pack.tar.gz
2805@end example
2806
2807The result here is a tarball containing a @file{/gnu/store} directory
2808with all the relevant packages. The resulting tarball contains a
2809@dfn{profile} with the three packages of interest; the profile is the
2810same as would be created by @command{guix package -i}. It is this
2811mechanism that is used to create Guix's own standalone binary tarball
2812(@pxref{Binary Installation}).
2813
5895ec8a
LC
2814Users of this pack would have to run
2815@file{/gnu/store/@dots{}-profile/bin/guile} to run Guile, which you may
2816find inconvenient. To work around it, you can create, say, a
2817@file{/opt/gnu/bin} symlink to the profile:
2818
2819@example
2820guix pack -S /opt/gnu/bin=bin guile emacs geiser
2821@end example
2822
2823@noindent
2824That way, users can happily type @file{/opt/gnu/bin/guile} and enjoy.
2825
708b54a9
LC
2826Alternatively, you can produce a pack in the Docker image format using
2827the following command:
b1edfbc3
LC
2828
2829@example
2830guix pack -f docker guile emacs geiser
2831@end example
2832
2833@noindent
2834The result is a tarball that can be passed to the @command{docker load}
2835command. See the
2836@uref{https://docs.docker.com/engine/reference/commandline/load/, Docker
2837documentation} for more information.
2838
239c2266
LC
2839Several command-line options allow you to customize your pack:
2840
2841@table @code
708b54a9
LC
2842@item --format=@var{format}
2843@itemx -f @var{format}
2844Produce a pack in the given @var{format}.
2845
2846The available formats are:
2847
2848@table @code
2849@item tarball
2850This is the default format. It produces a tarball containing all the
7b14c48b 2851specified binaries and symlinks.
708b54a9
LC
2852
2853@item docker
2854This produces a tarball that follows the
2855@uref{https://github.com/docker/docker/blob/master/image/spec/v1.2.md,
2856Docker Image Specification}.
2857@end table
2858
83cfa024
LC
2859@item --expression=@var{expr}
2860@itemx -e @var{expr}
2861Consider the package @var{expr} evaluates to.
2862
2863This has the same purpose as the same-named option in @command{guix
2864build} (@pxref{Additional Build Options, @code{--expression} in
2865@command{guix build}}).
2866
4a979afe
KH
2867@item --manifest=@var{file}
2868@itemx -m @var{file}
2869Use the packages contained in the manifest object returned by the Scheme
2870code in @var{file}.
2871
2872This has a similar purpose as the same-named option in @command{guix
2873package} (@pxref{profile-manifest, @option{--manifest}}) and uses the
2874same manifest files. It allows you to define a collection of packages
2875once and use it both for creating profiles and for creating archives
2876for use on machines that do not have Guix installed. Note that you can
2877specify @emph{either} a manifest file @emph{or} a list of packages,
2878but not both.
2879
239c2266
LC
2880@item --system=@var{system}
2881@itemx -s @var{system}
2882Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of
2883the system type of the build host.
2884
5461115e
LC
2885@item --target=@var{triplet}
2886@cindex cross-compilation
2887Cross-build for @var{triplet}, which must be a valid GNU triplet, such
2888as @code{"mips64el-linux-gnu"} (@pxref{Specifying target triplets, GNU
2889configuration triplets,, autoconf, Autoconf}).
2890
239c2266
LC
2891@item --compression=@var{tool}
2892@itemx -C @var{tool}
2893Compress the resulting tarball using @var{tool}---one of @code{gzip},
af735661 2894@code{bzip2}, @code{xz}, @code{lzip}, or @code{none} for no compression.
6b63c43e 2895
5895ec8a
LC
2896@item --symlink=@var{spec}
2897@itemx -S @var{spec}
2898Add the symlinks specified by @var{spec} to the pack. This option can
2899appear several times.
2900
2901@var{spec} has the form @code{@var{source}=@var{target}}, where
2902@var{source} is the symlink that will be created and @var{target} is the
2903symlink target.
2904
2905For instance, @code{-S /opt/gnu/bin=bin} creates a @file{/opt/gnu/bin}
2906symlink pointing to the @file{bin} sub-directory of the profile.
2907
6b63c43e
LC
2908@item --localstatedir
2909Include the ``local state directory'', @file{/var/guix}, in the
2910resulting pack.
2911
2912@file{/var/guix} contains the store database (@pxref{The Store}) as well
2913as garbage-collector roots (@pxref{Invoking guix gc}). Providing it in
2914the pack means that the store is ``complete'' and manageable by Guix;
2915not providing it pack means that the store is ``dead'': items cannot be
2916added to it or removed from it after extraction of the pack.
2917
2918One use case for this is the Guix self-contained binary tarball
2919(@pxref{Binary Installation}).
272c0709
CM
2920
2921@item --bootstrap
2922Use the bootstrap binaries to build the pack. This option is only
2923useful to Guix developers.
239c2266
LC
2924@end table
2925
2926In addition, @command{guix pack} supports all the common build options
2927(@pxref{Common Build Options}) and all the package transformation
2928options (@pxref{Package Transformation Options}).
2929
2930
760c60d6
LC
2931@node Invoking guix archive
2932@section Invoking @command{guix archive}
2933
e32171ee
JD
2934@cindex @command{guix archive}
2935@cindex archive
760c60d6 2936The @command{guix archive} command allows users to @dfn{export} files
9d4399b8
LC
2937from the store into a single archive, and to later @dfn{import} them on
2938a machine that runs Guix.
760c60d6 2939In particular, it allows store files to be transferred from one machine
4d4c4816
AE
2940to the store on another machine.
2941
9d4399b8 2942@quotation Note
6628921a 2943If you're looking for a way to produce archives in a format suitable for
9d4399b8
LC
2944tools other than Guix, @pxref{Invoking guix pack}.
2945@end quotation
2946
e32171ee 2947@cindex exporting store items
4d4c4816
AE
2948To export store files as an archive to standard output, run:
2949
2950@example
2951guix archive --export @var{options} @var{specifications}...
2952@end example
2953
2954@var{specifications} may be either store file names or package
2955specifications, as for @command{guix package} (@pxref{Invoking guix
2956package}). For instance, the following command creates an archive
2957containing the @code{gui} output of the @code{git} package and the main
2958output of @code{emacs}:
2959
2960@example
2961guix archive --export git:gui /gnu/store/...-emacs-24.3 > great.nar
2962@end example
2963
2964If the specified packages are not built yet, @command{guix archive}
2965automatically builds them. The build process may be controlled with the
2966common build options (@pxref{Common Build Options}).
2967
2968To transfer the @code{emacs} package to a machine connected over SSH,
2969one would run:
760c60d6
LC
2970
2971@example
56607088 2972guix archive --export -r emacs | ssh the-machine guix archive --import
760c60d6
LC
2973@end example
2974
87236aed 2975@noindent
56607088
LC
2976Similarly, a complete user profile may be transferred from one machine
2977to another like this:
2978
2979@example
2980guix archive --export -r $(readlink -f ~/.guix-profile) | \
2981 ssh the-machine guix-archive --import
2982@end example
2983
2984@noindent
2985However, note that, in both examples, all of @code{emacs} and the
2986profile as well as all of their dependencies are transferred (due to
f97c9175
AE
2987@code{-r}), regardless of what is already available in the store on the
2988target machine. The @code{--missing} option can help figure out which
f11c444d
LC
2989items are missing from the target store. The @command{guix copy}
2990command simplifies and optimizes this whole process, so this is probably
2991what you should use in this case (@pxref{Invoking guix copy}).
87236aed 2992
5597b3ae
LC
2993@cindex nar, archive format
2994@cindex normalized archive (nar)
b1edfbc3 2995Archives are stored in the ``normalized archive'' or ``nar'' format, which is
5597b3ae 2996comparable in spirit to `tar', but with differences
0dbd88db 2997that make it more appropriate for our purposes. First, rather than
5597b3ae 2998recording all Unix metadata for each file, the nar format only mentions
0dbd88db
LC
2999the file type (regular, directory, or symbolic link); Unix permissions
3000and owner/group are dismissed. Second, the order in which directory
3001entries are stored always follows the order of file names according to
3002the C locale collation order. This makes archive production fully
3003deterministic.
3004
3005When exporting, the daemon digitally signs the contents of the archive,
3006and that digital signature is appended. When importing, the daemon
3007verifies the signature and rejects the import in case of an invalid
3008signature or if the signing key is not authorized.
760c60d6
LC
3009@c FIXME: Add xref to daemon doc about signatures.
3010
3011The main options are:
3012
3013@table @code
3014@item --export
3015Export the specified store files or packages (see below.) Write the
3016resulting archive to the standard output.
3017
56607088
LC
3018Dependencies are @emph{not} included in the output, unless
3019@code{--recursive} is passed.
3020
3021@item -r
3022@itemx --recursive
3023When combined with @code{--export}, this instructs @command{guix
3024archive} to include dependencies of the given items in the archive.
3025Thus, the resulting archive is self-contained: it contains the closure
3026of the exported store items.
3027
760c60d6
LC
3028@item --import
3029Read an archive from the standard input, and import the files listed
3030therein into the store. Abort if the archive has an invalid digital
f82cc5fd
LC
3031signature, or if it is signed by a public key not among the authorized
3032keys (see @code{--authorize} below.)
554f26ec 3033
87236aed
LC
3034@item --missing
3035Read a list of store file names from the standard input, one per line,
3036and write on the standard output the subset of these files missing from
3037the store.
3038
554f26ec 3039@item --generate-key[=@var{parameters}]
f82cc5fd 3040@cindex signing, archives
f97c9175 3041Generate a new key pair for the daemon. This is a prerequisite before
554f26ec
LC
3042archives can be exported with @code{--export}. Note that this operation
3043usually takes time, because it needs to gather enough entropy to
3044generate the key pair.
3045
3046The generated key pair is typically stored under @file{/etc/guix}, in
3047@file{signing-key.pub} (public key) and @file{signing-key.sec} (private
867d8473
LC
3048key, which must be kept secret.) When @var{parameters} is omitted,
3049an ECDSA key using the Ed25519 curve is generated, or, for Libgcrypt
3050versions before 1.6.0, it is a 4096-bit RSA key.
f97c9175 3051Alternatively, @var{parameters} can specify
554f26ec
LC
3052@code{genkey} parameters suitable for Libgcrypt (@pxref{General
3053public-key related Functions, @code{gcry_pk_genkey},, gcrypt, The
3054Libgcrypt Reference Manual}).
f82cc5fd
LC
3055
3056@item --authorize
3057@cindex authorizing, archives
3058Authorize imports signed by the public key passed on standard input.
3059The public key must be in ``s-expression advanced format''---i.e., the
3060same format as the @file{signing-key.pub} file.
3061
3062The list of authorized keys is kept in the human-editable file
3063@file{/etc/guix/acl}. The file contains
3064@url{http://people.csail.mit.edu/rivest/Sexp.txt, ``advanced-format
3065s-expressions''} and is structured as an access-control list in the
3066@url{http://theworld.com/~cme/spki.txt, Simple Public-Key Infrastructure
3067(SPKI)}.
c6f8e9dd
LC
3068
3069@item --extract=@var{directory}
3070@itemx -x @var{directory}
3071Read a single-item archive as served by substitute servers
3072(@pxref{Substitutes}) and extract it to @var{directory}. This is a
3073low-level operation needed in only very narrow use cases; see below.
3074
3075For example, the following command extracts the substitute for Emacs
3076served by @code{hydra.gnu.org} to @file{/tmp/emacs}:
3077
3078@example
3079$ wget -O - \
df061d07 3080 https://hydra.gnu.org/nar/@dots{}-emacs-24.5 \
c6f8e9dd
LC
3081 | bunzip2 | guix archive -x /tmp/emacs
3082@end example
3083
3084Single-item archives are different from multiple-item archives produced
3085by @command{guix archive --export}; they contain a single store item,
3086and they do @emph{not} embed a signature. Thus this operation does
3087@emph{no} signature verification and its output should be considered
3088unsafe.
3089
3090The primary purpose of this operation is to facilitate inspection of
3091archive contents coming from possibly untrusted substitute servers.
3092
760c60d6
LC
3093@end table
3094
568717fd
LC
3095@c *********************************************************************
3096@node Programming Interface
3097@chapter Programming Interface
3098
3dc1970d
LC
3099GNU Guix provides several Scheme programming interfaces (APIs) to
3100define, build, and query packages. The first interface allows users to
3101write high-level package definitions. These definitions refer to
3102familiar packaging concepts, such as the name and version of a package,
3103its build system, and its dependencies. These definitions can then be
3104turned into concrete build actions.
3105
ba55b1cb 3106Build actions are performed by the Guix daemon, on behalf of users. In a
3dc1970d 3107standard setup, the daemon has write access to the store---the
834129e0 3108@file{/gnu/store} directory---whereas users do not. The recommended
3dc1970d
LC
3109setup also has the daemon perform builds in chroots, under a specific
3110build users, to minimize interference with the rest of the system.
3111
3112@cindex derivation
3113Lower-level APIs are available to interact with the daemon and the
3114store. To instruct the daemon to perform a build action, users actually
3115provide it with a @dfn{derivation}. A derivation is a low-level
3116representation of the build actions to be taken, and the environment in
3117which they should occur---derivations are to package definitions what
49ad317a
LC
3118assembly is to C programs. The term ``derivation'' comes from the fact
3119that build results @emph{derive} from them.
3dc1970d
LC
3120
3121This chapter describes all these APIs in turn, starting from high-level
3122package definitions.
3123
568717fd 3124@menu
b860f382 3125* Defining Packages:: Defining new packages.
7458bd0a 3126* Build Systems:: Specifying how packages are built.
b860f382
LC
3127* The Store:: Manipulating the package store.
3128* Derivations:: Low-level interface to package derivations.
3129* The Store Monad:: Purely functional interface to the store.
21b679f6 3130* G-Expressions:: Manipulating build expressions.
568717fd
LC
3131@end menu
3132
3133@node Defining Packages
3134@section Defining Packages
3135
3dc1970d
LC
3136The high-level interface to package definitions is implemented in the
3137@code{(guix packages)} and @code{(guix build-system)} modules. As an
3138example, the package definition, or @dfn{recipe}, for the GNU Hello
3139package looks like this:
3140
3141@example
e7f34eb0
LC
3142(define-module (gnu packages hello)
3143 #:use-module (guix packages)
3144 #:use-module (guix download)
3145 #:use-module (guix build-system gnu)
a6dcdcac
SB
3146 #:use-module (guix licenses)
3147 #:use-module (gnu packages gawk))
b22a12fd 3148
79f5dd59 3149(define-public hello
3dc1970d
LC
3150 (package
3151 (name "hello")
17d8e33f 3152 (version "2.10")
3dc1970d 3153 (source (origin
17d8e33f
ML
3154 (method url-fetch)
3155 (uri (string-append "mirror://gnu/hello/hello-" version
3156 ".tar.gz"))
3157 (sha256
3158 (base32
3159 "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
3dc1970d 3160 (build-system gnu-build-system)
654c0d97 3161 (arguments '(#:configure-flags '("--enable-silent-rules")))
3dc1970d 3162 (inputs `(("gawk" ,gawk)))
7458bd0a
LC
3163 (synopsis "Hello, GNU world: An example GNU package")
3164 (description "Guess what GNU Hello prints!")
3dc1970d 3165 (home-page "http://www.gnu.org/software/hello/")
b22a12fd 3166 (license gpl3+)))
3dc1970d
LC
3167@end example
3168
3169@noindent
3170Without being a Scheme expert, the reader may have guessed the meaning
f97c9175
AE
3171of the various fields here. This expression binds the variable
3172@code{hello} to a @code{<package>} object, which is essentially a record
3dc1970d
LC
3173(@pxref{SRFI-9, Scheme records,, guile, GNU Guile Reference Manual}).
3174This package object can be inspected using procedures found in the
3175@code{(guix packages)} module; for instance, @code{(package-name hello)}
3176returns---surprise!---@code{"hello"}.
3177
2f7d2d91
LC
3178With luck, you may be able to import part or all of the definition of
3179the package you are interested in from another repository, using the
3180@code{guix import} command (@pxref{Invoking guix import}).
3181
f97c9175 3182In the example above, @var{hello} is defined in a module of its own,
e7f34eb0
LC
3183@code{(gnu packages hello)}. Technically, this is not strictly
3184necessary, but it is convenient to do so: all the packages defined in
3185modules under @code{(gnu packages @dots{})} are automatically known to
3186the command-line tools (@pxref{Package Modules}).
3187
3dc1970d
LC
3188There are a few points worth noting in the above package definition:
3189
3190@itemize
3191@item
a2bf4907
LC
3192The @code{source} field of the package is an @code{<origin>} object
3193(@pxref{origin Reference}, for the complete reference).
3dc1970d
LC
3194Here, the @code{url-fetch} method from @code{(guix download)} is used,
3195meaning that the source is a file to be downloaded over FTP or HTTP.
3196
3197The @code{mirror://gnu} prefix instructs @code{url-fetch} to use one of
3198the GNU mirrors defined in @code{(guix download)}.
3199
3200The @code{sha256} field specifies the expected SHA256 hash of the file
3201being downloaded. It is mandatory, and allows Guix to check the
3202integrity of the file. The @code{(base32 @dots{})} form introduces the
6c365eca 3203base32 representation of the hash. You can obtain this information with
210cc920
LC
3204@code{guix download} (@pxref{Invoking guix download}) and @code{guix
3205hash} (@pxref{Invoking guix hash}).
3dc1970d 3206
f9cc8971
LC
3207@cindex patches
3208When needed, the @code{origin} form can also have a @code{patches} field
3209listing patches to be applied, and a @code{snippet} field giving a
3210Scheme expression to modify the source code.
3211
3dc1970d
LC
3212@item
3213@cindex GNU Build System
7458bd0a
LC
3214The @code{build-system} field specifies the procedure to build the
3215package (@pxref{Build Systems}). Here, @var{gnu-build-system}
3216represents the familiar GNU Build System, where packages may be
3217configured, built, and installed with the usual @code{./configure &&
3218make && make check && make install} command sequence.
3219
3220@item
3221The @code{arguments} field specifies options for the build system
3222(@pxref{Build Systems}). Here it is interpreted by
3223@var{gnu-build-system} as a request run @file{configure} with the
3224@code{--enable-silent-rules} flag.
3dc1970d 3225
654c0d97
LC
3226@cindex quote
3227@cindex quoting
3228@findex '
3229@findex quote
3230What about these quote (@code{'}) characters? They are Scheme syntax to
3231introduce a literal list; @code{'} is synonymous with @code{quote}.
3232@xref{Expression Syntax, quoting,, guile, GNU Guile Reference Manual},
3233for details. Here the value of the @code{arguments} field is a list of
3234arguments passed to the build system down the road, as with @code{apply}
3235(@pxref{Fly Evaluation, @code{apply},, guile, GNU Guile Reference
3236Manual}).
3237
3238The hash-colon (@code{#:}) sequence defines a Scheme @dfn{keyword}
3239(@pxref{Keywords,,, guile, GNU Guile Reference Manual}), and
3240@code{#:configure-flags} is a keyword used to pass a keyword argument
3241to the build system (@pxref{Coding With Keywords,,, guile, GNU Guile
3242Reference Manual}).
3243
3dc1970d
LC
3244@item
3245The @code{inputs} field specifies inputs to the build process---i.e.,
3246build-time or run-time dependencies of the package. Here, we define an
3247input called @code{"gawk"} whose value is that of the @var{gawk}
3248variable; @var{gawk} is itself bound to a @code{<package>} object.
3249
654c0d97
LC
3250@cindex backquote (quasiquote)
3251@findex `
3252@findex quasiquote
3253@cindex comma (unquote)
3254@findex ,
3255@findex unquote
3256@findex ,@@
3257@findex unquote-splicing
3258Again, @code{`} (a backquote, synonymous with @code{quasiquote}) allows
3259us to introduce a literal list in the @code{inputs} field, while
3260@code{,} (a comma, synonymous with @code{unquote}) allows us to insert a
3261value in that list (@pxref{Expression Syntax, unquote,, guile, GNU Guile
3262Reference Manual}).
3263
3dc1970d
LC
3264Note that GCC, Coreutils, Bash, and other essential tools do not need to
3265be specified as inputs here. Instead, @var{gnu-build-system} takes care
7458bd0a 3266of ensuring that they are present (@pxref{Build Systems}).
3dc1970d
LC
3267
3268However, any other dependencies need to be specified in the
3269@code{inputs} field. Any dependency not specified here will simply be
3270unavailable to the build process, possibly leading to a build failure.
3271@end itemize
3272
87eafdbd
TUBK
3273@xref{package Reference}, for a full description of possible fields.
3274
2f7d2d91 3275Once a package definition is in place, the
e49951eb 3276package may actually be built using the @code{guix build} command-line
fc06b15e
AP
3277tool (@pxref{Invoking guix build}), troubleshooting any build failures
3278you encounter (@pxref{Debugging Build Failures}). You can easily jump back to the
39bee8a2
LC
3279package definition using the @command{guix edit} command
3280(@pxref{Invoking guix edit}).
3281@xref{Packaging Guidelines}, for
b4f5e0e8
CR
3282more information on how to test package definitions, and
3283@ref{Invoking guix lint}, for information on how to check a definition
3284for style conformance.
b7ebcfe3
LC
3285@vindex GUIX_PACKAGE_PATH
3286Lastly, @pxref{Package Modules}, for information
3287on how to extend the distribution by adding your own package definitions
3288to @code{GUIX_PACKAGE_PATH}.
b4f5e0e8 3289
f97c9175 3290Finally, updating the package definition to a new upstream version
7458bd0a
LC
3291can be partly automated by the @command{guix refresh} command
3292(@pxref{Invoking guix refresh}).
3dc1970d
LC
3293
3294Behind the scenes, a derivation corresponding to the @code{<package>}
3295object is first computed by the @code{package-derivation} procedure.
834129e0 3296That derivation is stored in a @code{.drv} file under @file{/gnu/store}.
ba55b1cb 3297The build actions it prescribes may then be realized by using the
3dc1970d
LC
3298@code{build-derivations} procedure (@pxref{The Store}).
3299
3300@deffn {Scheme Procedure} package-derivation @var{store} @var{package} [@var{system}]
59688fc4
LC
3301Return the @code{<derivation>} object of @var{package} for @var{system}
3302(@pxref{Derivations}).
3dc1970d
LC
3303
3304@var{package} must be a valid @code{<package>} object, and @var{system}
3305must be a string denoting the target system type---e.g.,
3306@code{"x86_64-linux"} for an x86_64 Linux-based GNU system. @var{store}
3307must be a connection to the daemon, which operates on the store
3308(@pxref{The Store}).
3309@end deffn
568717fd 3310
9c1edabd
LC
3311@noindent
3312@cindex cross-compilation
3313Similarly, it is possible to compute a derivation that cross-builds a
3314package for some other system:
3315
3316@deffn {Scheme Procedure} package-cross-derivation @var{store} @
3317 @var{package} @var{target} [@var{system}]
59688fc4
LC
3318Return the @code{<derivation>} object of @var{package} cross-built from
3319@var{system} to @var{target}.
9c1edabd
LC
3320
3321@var{target} must be a valid GNU triplet denoting the target hardware
3322and operating system, such as @code{"mips64el-linux-gnu"}
3323(@pxref{Configuration Names, GNU configuration triplets,, configure, GNU
3324Configure and Build System}).
3325@end deffn
3326
2a75b0b6
LC
3327@cindex package transformations
3328@cindex input rewriting
3329@cindex dependency tree rewriting
3330Packages can be manipulated in arbitrary ways. An example of a useful
3331transformation is @dfn{input rewriting}, whereby the dependency tree of
3332a package is rewritten by replacing specific inputs by others:
3333
3334@deffn {Scheme Procedure} package-input-rewriting @var{replacements} @
3335 [@var{rewrite-name}]
3336Return a procedure that, when passed a package, replaces its direct and
3337indirect dependencies (but not its implicit inputs) according to
3338@var{replacements}. @var{replacements} is a list of package pairs; the
3339first element of each pair is the package to replace, and the second one
3340is the replacement.
3341
3342Optionally, @var{rewrite-name} is a one-argument procedure that takes
3343the name of a package and returns its new name after rewrite.
3344@end deffn
3345
3346@noindent
3347Consider this example:
3348
3349@example
3350(define libressl-instead-of-openssl
3351 ;; This is a procedure to replace OPENSSL by LIBRESSL,
3352 ;; recursively.
3353 (package-input-rewriting `((,openssl . ,libressl))))
3354
3355(define git-with-libressl
3356 (libressl-instead-of-openssl git))
3357@end example
3358
3359@noindent
3360Here we first define a rewriting procedure that replaces @var{openssl}
3361with @var{libressl}. Then we use it to define a @dfn{variant} of the
3362@var{git} package that uses @var{libressl} instead of @var{openssl}.
3363This is exactly what the @option{--with-input} command-line option does
3364(@pxref{Package Transformation Options, @option{--with-input}}).
3365
f37f2b83
LC
3366A more generic procedure to rewrite a package dependency graph is
3367@code{package-mapping}: it supports arbitrary changes to nodes in the
3368graph.
3369
3370@deffn {Scheme Procedure} package-mapping @var{proc} [@var{cut?}]
3371Return a procedure that, given a package, applies @var{proc} to all the packages
3372depended on and returns the resulting package. The procedure stops recursion
3373when @var{cut?} returns true for a given package.
3374@end deffn
3375
87eafdbd
TUBK
3376@menu
3377* package Reference :: The package data type.
3378* origin Reference:: The origin data type.
3379@end menu
3380
3381
3382@node package Reference
3383@subsection @code{package} Reference
3384
3385This section summarizes all the options available in @code{package}
3386declarations (@pxref{Defining Packages}).
3387
3388@deftp {Data Type} package
3389This is the data type representing a package recipe.
3390
3391@table @asis
3392@item @code{name}
3393The name of the package, as a string.
3394
3395@item @code{version}
3396The version of the package, as a string.
3397
3398@item @code{source}
da675305
LC
3399An object telling how the source code for the package should be
3400acquired. Most of the time, this is an @code{origin} object, which
3401denotes a file fetched from the Internet (@pxref{origin Reference}). It
3402can also be any other ``file-like'' object such as a @code{local-file},
3403which denotes a file from the local file system (@pxref{G-Expressions,
3404@code{local-file}}).
87eafdbd
TUBK
3405
3406@item @code{build-system}
3407The build system that should be used to build the package (@pxref{Build
3408Systems}).
3409
3410@item @code{arguments} (default: @code{'()})
3411The arguments that should be passed to the build system. This is a
3412list, typically containing sequential keyword-value pairs.
3413
3414@item @code{inputs} (default: @code{'()})
70650c68
LC
3415@itemx @code{native-inputs} (default: @code{'()})
3416@itemx @code{propagated-inputs} (default: @code{'()})
3417@cindex inputs, of packages
3418These fields list dependencies of the package. Each one is a list of
3419tuples, where each tuple has a label for the input (a string) as its
3420first element, a package, origin, or derivation as its second element,
3421and optionally the name of the output thereof that should be used, which
3422defaults to @code{"out"} (@pxref{Packages with Multiple Outputs}, for
f97c9175 3423more on package outputs). For example, the list below specifies three
70650c68 3424inputs:
87eafdbd 3425
70650c68
LC
3426@example
3427`(("libffi" ,libffi)
3428 ("libunistring" ,libunistring)
3429 ("glib:bin" ,glib "bin")) ;the "bin" output of Glib
3430@end example
3431
3432@cindex cross compilation, package dependencies
3433The distinction between @code{native-inputs} and @code{inputs} is
3434necessary when considering cross-compilation. When cross-compiling,
3435dependencies listed in @code{inputs} are built for the @emph{target}
3436architecture; conversely, dependencies listed in @code{native-inputs}
3437are built for the architecture of the @emph{build} machine.
3438
f97c9175
AE
3439@code{native-inputs} is typically used to list tools needed at
3440build time, but not at run time, such as Autoconf, Automake, pkg-config,
70650c68
LC
3441Gettext, or Bison. @command{guix lint} can report likely mistakes in
3442this area (@pxref{Invoking guix lint}).
3443
3444@anchor{package-propagated-inputs}
3445Lastly, @code{propagated-inputs} is similar to @code{inputs}, but the
f97c9175
AE
3446specified packages will be automatically installed alongside the package
3447they belong to (@pxref{package-cmd-propagated-inputs, @command{guix
70650c68
LC
3448package}}, for information on how @command{guix package} deals with
3449propagated inputs.)
21461f27 3450
e0508b6b
LC
3451For example this is necessary when a C/C++ library needs headers of
3452another library to compile, or when a pkg-config file refers to another
3453one @i{via} its @code{Requires} field.
3454
f97c9175
AE
3455Another example where @code{propagated-inputs} is useful is for languages
3456that lack a facility to record the run-time search path akin to the
c8ebb4c4 3457@code{RUNPATH} of ELF files; this includes Guile, Python, Perl, and
e0508b6b
LC
3458more. To ensure that libraries written in those languages can find
3459library code they depend on at run time, run-time dependencies must be
3460listed in @code{propagated-inputs} rather than @code{inputs}.
87eafdbd 3461
87eafdbd
TUBK
3462@item @code{self-native-input?} (default: @code{#f})
3463This is a Boolean field telling whether the package should use itself as
3464a native input when cross-compiling.
3465
3466@item @code{outputs} (default: @code{'("out")})
3467The list of output names of the package. @xref{Packages with Multiple
3468Outputs}, for typical uses of additional outputs.
3469
3470@item @code{native-search-paths} (default: @code{'()})
3471@itemx @code{search-paths} (default: @code{'()})
3472A list of @code{search-path-specification} objects describing
3473search-path environment variables honored by the package.
3474
3475@item @code{replacement} (default: @code{#f})
f97c9175 3476This must be either @code{#f} or a package object that will be used as a
87eafdbd
TUBK
3477@dfn{replacement} for this package. @xref{Security Updates, grafts},
3478for details.
3479
3480@item @code{synopsis}
3481A one-line description of the package.
3482
3483@item @code{description}
3484A more elaborate description of the package.
3485
3486@item @code{license}
e32171ee 3487@cindex license, of packages
f97c9175
AE
3488The license of the package; a value from @code{(guix licenses)},
3489or a list of such values.
87eafdbd
TUBK
3490
3491@item @code{home-page}
3492The URL to the home-page of the package, as a string.
3493
3494@item @code{supported-systems} (default: @var{%supported-systems})
3495The list of systems supported by the package, as strings of the form
3496@code{architecture-kernel}, for example @code{"x86_64-linux"}.
3497
3498@item @code{maintainers} (default: @code{'()})
3499The list of maintainers of the package, as @code{maintainer} objects.
3500
3501@item @code{location} (default: source location of the @code{package} form)
f97c9175 3502The source location of the package. It is useful to override this when
87eafdbd
TUBK
3503inheriting from another package, in which case this field is not
3504automatically corrected.
3505@end table
3506@end deftp
3507
3508
3509@node origin Reference
3510@subsection @code{origin} Reference
3511
3512This section summarizes all the options available in @code{origin}
3513declarations (@pxref{Defining Packages}).
3514
3515@deftp {Data Type} origin
3516This is the data type representing a source code origin.
3517
3518@table @asis
3519@item @code{uri}
3520An object containing the URI of the source. The object type depends on
3521the @code{method} (see below). For example, when using the
3522@var{url-fetch} method of @code{(guix download)}, the valid @code{uri}
3523values are: a URL represented as a string, or a list thereof.
3524
3525@item @code{method}
f97c9175 3526A procedure that handles the URI.
87eafdbd
TUBK
3527
3528Examples include:
3529
3530@table @asis
3531@item @var{url-fetch} from @code{(guix download)}
f97c9175 3532download a file from the HTTP, HTTPS, or FTP URL specified in the
87eafdbd
TUBK
3533@code{uri} field;
3534
db97a03a 3535@vindex git-fetch
87eafdbd
TUBK
3536@item @var{git-fetch} from @code{(guix git-download)}
3537clone the Git version control repository, and check out the revision
3538specified in the @code{uri} field as a @code{git-reference} object; a
3539@code{git-reference} looks like this:
3540
3541@example
3542(git-reference
3543 (url "git://git.debian.org/git/pkg-shadow/shadow")
3544 (commit "v4.1.5.1"))
3545@end example
3546@end table
3547
3548@item @code{sha256}
3549A bytevector containing the SHA-256 hash of the source. Typically the
3550@code{base32} form is used here to generate the bytevector from a
3551base-32 string.
3552
db97a03a
LC
3553You can obtain this information using @code{guix download}
3554(@pxref{Invoking guix download}) or @code{guix hash} (@pxref{Invoking
3555guix hash}).
3556
87eafdbd
TUBK
3557@item @code{file-name} (default: @code{#f})
3558The file name under which the source code should be saved. When this is
3559@code{#f}, a sensible default value will be used in most cases. In case
3560the source is fetched from a URL, the file name from the URL will be
f97c9175 3561used. For version control checkouts, it is recommended to provide the
87eafdbd
TUBK
3562file name explicitly because the default is not very descriptive.
3563
3564@item @code{patches} (default: @code{'()})
ec5495ba
LC
3565A list of file names, origins, or file-like objects (@pxref{G-Expressions,
3566file-like objects}) pointing to patches to be applied to the source.
87eafdbd 3567
0dfebdaa
LC
3568This list of patches must be unconditional. In particular, it cannot
3569depend on the value of @code{%current-system} or
3570@code{%current-target-system}.
3571
87eafdbd 3572@item @code{snippet} (default: @code{#f})
1929fdba
LC
3573A G-expression (@pxref{G-Expressions}) or S-expression that will be run
3574in the source directory. This is a convenient way to modify the source,
3575sometimes more convenient than a patch.
87eafdbd
TUBK
3576
3577@item @code{patch-flags} (default: @code{'("-p1")})
3578A list of command-line flags that should be passed to the @code{patch}
3579command.
3580
3581@item @code{patch-inputs} (default: @code{#f})
3582Input packages or derivations to the patching process. When this is
3583@code{#f}, the usual set of inputs necessary for patching are provided,
3584such as GNU@tie{}Patch.
3585
3586@item @code{modules} (default: @code{'()})
3587A list of Guile modules that should be loaded during the patching
3588process and while running the code in the @code{snippet} field.
3589
87eafdbd
TUBK
3590@item @code{patch-guile} (default: @code{#f})
3591The Guile package that should be used in the patching process. When
3592this is @code{#f}, a sensible default is used.
3593@end table
3594@end deftp
3595
9c1edabd 3596
7458bd0a
LC
3597@node Build Systems
3598@section Build Systems
3599
3600@cindex build system
3601Each package definition specifies a @dfn{build system} and arguments for
3602that build system (@pxref{Defining Packages}). This @code{build-system}
f97c9175 3603field represents the build procedure of the package, as well as implicit
7458bd0a
LC
3604dependencies of that build procedure.
3605
3606Build systems are @code{<build-system>} objects. The interface to
3607create and manipulate them is provided by the @code{(guix build-system)}
3608module, and actual build systems are exported by specific modules.
3609
f5fd4fd2 3610@cindex bag (low-level package representation)
0d5a559f
LC
3611Under the hood, build systems first compile package objects to
3612@dfn{bags}. A @dfn{bag} is like a package, but with less
3613ornamentation---in other words, a bag is a lower-level representation of
3614a package, which includes all the inputs of that package, including some
3615that were implicitly added by the build system. This intermediate
3616representation is then compiled to a derivation (@pxref{Derivations}).
3617
7458bd0a
LC
3618Build systems accept an optional list of @dfn{arguments}. In package
3619definitions, these are passed @i{via} the @code{arguments} field
3620(@pxref{Defining Packages}). They are typically keyword arguments
3621(@pxref{Optional Arguments, keyword arguments in Guile,, guile, GNU
3622Guile Reference Manual}). The value of these arguments is usually
3623evaluated in the @dfn{build stratum}---i.e., by a Guile process launched
3624by the daemon (@pxref{Derivations}).
3625
3626The main build system is @var{gnu-build-system}, which implements the
f97c9175 3627standard build procedure for GNU and many other packages. It
7458bd0a
LC
3628is provided by the @code{(guix build-system gnu)} module.
3629
3630@defvr {Scheme Variable} gnu-build-system
3631@var{gnu-build-system} represents the GNU Build System, and variants
3632thereof (@pxref{Configuration, configuration and makefile conventions,,
3633standards, GNU Coding Standards}).
3634
3635@cindex build phases
f97c9175 3636In a nutshell, packages using it are configured, built, and installed with
7458bd0a
LC
3637the usual @code{./configure && make && make check && make install}
3638command sequence. In practice, a few additional steps are often needed.
3639All these steps are split up in separate @dfn{phases},
3640notably@footnote{Please see the @code{(guix build gnu-build-system)}
3641modules for more details about the build phases.}:
3642
3643@table @code
3644@item unpack
3645Unpack the source tarball, and change the current directory to the
3646extracted source tree. If the source is actually a directory, copy it
3647to the build tree, and enter that directory.
3648
3649@item patch-source-shebangs
3650Patch shebangs encountered in source files so they refer to the right
3651store file names. For instance, this changes @code{#!/bin/sh} to
3652@code{#!/gnu/store/@dots{}-bash-4.3/bin/sh}.
3653
3654@item configure
3655Run the @file{configure} script with a number of default options, such
3656as @code{--prefix=/gnu/store/@dots{}}, as well as the options specified
3657by the @code{#:configure-flags} argument.
3658
3659@item build
3660Run @code{make} with the list of flags specified with
0917e80e 3661@code{#:make-flags}. If the @code{#:parallel-build?} argument is true
7458bd0a
LC
3662(the default), build with @code{make -j}.
3663
3664@item check
3665Run @code{make check}, or some other target specified with
3666@code{#:test-target}, unless @code{#:tests? #f} is passed. If the
3667@code{#:parallel-tests?} argument is true (the default), run @code{make
3668check -j}.
3669
3670@item install
3671Run @code{make install} with the flags listed in @code{#:make-flags}.
3672
3673@item patch-shebangs
3674Patch shebangs on the installed executable files.
3675
3676@item strip
3677Strip debugging symbols from ELF files (unless @code{#:strip-binaries?}
3678is false), copying them to the @code{debug} output when available
3679(@pxref{Installing Debugging Files}).
3680@end table
3681
3682@vindex %standard-phases
3683The build-side module @code{(guix build gnu-build-system)} defines
3684@var{%standard-phases} as the default list of build phases.
3685@var{%standard-phases} is a list of symbol/procedure pairs, where the
3686procedure implements the actual phase.
3687
3688The list of phases used for a particular package can be changed with the
3689@code{#:phases} parameter. For instance, passing:
3690
3691@example
c2c5dc79 3692#:phases (modify-phases %standard-phases (delete 'configure))
7458bd0a
LC
3693@end example
3694
9bf404e9 3695means that all the phases described above will be used, except the
7458bd0a
LC
3696@code{configure} phase.
3697
3698In addition, this build system ensures that the ``standard'' environment
3699for GNU packages is available. This includes tools such as GCC, libc,
3700Coreutils, Bash, Make, Diffutils, grep, and sed (see the @code{(guix
f97c9175
AE
3701build-system gnu)} module for a complete list). We call these the
3702@dfn{implicit inputs} of a package, because package definitions do not
7458bd0a
LC
3703have to mention them.
3704@end defvr
3705
3706Other @code{<build-system>} objects are defined to support other
3707conventions and tools used by free software packages. They inherit most
3708of @var{gnu-build-system}, and differ mainly in the set of inputs
3709implicitly added to the build process, and in the list of phases
3710executed. Some of these build systems are listed below.
3711
5f7a1a4d
RW
3712@defvr {Scheme Variable} ant-build-system
3713This variable is exported by @code{(guix build-system ant)}. It
3714implements the build procedure for Java packages that can be built with
3715@url{http://ant.apache.org/, Ant build tool}.
3716
3717It adds both @code{ant} and the @dfn{Java Development Kit} (JDK) as
3718provided by the @code{icedtea} package to the set of inputs. Different
3719packages can be specified with the @code{#:ant} and @code{#:jdk}
3720parameters, respectively.
3721
3722When the original package does not provide a suitable Ant build file,
3723the parameter @code{#:jar-name} can be used to generate a minimal Ant
3724build file @file{build.xml} with tasks to build the specified jar
8df64f73
HG
3725archive. In this case the parameter @code{#:source-dir} can be used to
3726specify the source sub-directory, defaulting to ``src''.
5f7a1a4d 3727
8df1faa0
JL
3728The @code{#:main-class} parameter can be used with the minimal ant
3729buildfile to specify the main class of the resulting jar. This makes the
f403d7ab
JL
3730jar file executable. The @code{#:test-include} parameter can be used to
3731specify the list of junit tests to run. It defaults to
3732@code{(list "**/*Test.java")}. The @code{#:test-exclude} can be used to
3733disable some tests. It defaults to @code{(list "**/Abstract*.java")},
3734because abstract classes cannot be run as tests.
8df1faa0 3735
5f7a1a4d
RW
3736The parameter @code{#:build-target} can be used to specify the Ant task
3737that should be run during the @code{build} phase. By default the
3738``jar'' task will be run.
3739
3740@end defvr
3741
a1b30f99
AP
3742@defvr {Scheme Variable} asdf-build-system/source
3743@defvrx {Scheme Variable} asdf-build-system/sbcl
3744@defvrx {Scheme Variable} asdf-build-system/ecl
3745
3746These variables, exported by @code{(guix build-system asdf)}, implement
3747build procedures for Common Lisp packages using
3748@url{https://common-lisp.net/project/asdf/, ``ASDF''}. ASDF is a system
3749definition facility for Common Lisp programs and libraries.
3750
3751The @code{asdf-build-system/source} system installs the packages in
3752source form, and can be loaded using any common lisp implementation, via
3753ASDF. The others, such as @code{asdf-build-system/sbcl}, install binary
3754systems in the format which a particular implementation understands.
3755These build systems can also be used to produce executable programs, or
3756lisp images which contain a set of packages pre-loaded.
3757
3758The build system uses naming conventions. For binary packages, the
8a3814cd
AP
3759package name should be prefixed with the lisp implementation, such as
3760@code{sbcl-} for @code{asdf-build-system/sbcl}.
a1b30f99
AP
3761
3762Additionally, the corresponding source package should be labeled using
3763the same convention as python packages (see @ref{Python Modules}), using
3764the @code{cl-} prefix.
3765
3766For binary packages, each system should be defined as a Guix package.
3767If one package @code{origin} contains several systems, package variants
3768can be created in order to build all the systems. Source packages,
3769which use @code{asdf-build-system/source}, may contain several systems.
3770
3771In order to create executable programs and images, the build-side
3772procedures @code{build-program} and @code{build-image} can be used.
3773They should be called in a build phase after the @code{create-symlinks}
3774phase, so that the system which was just built can be used within the
3775resulting image. @code{build-program} requires a list of Common Lisp
3776expressions to be passed as the @code{#:entry-program} argument.
3777
3778If the system is not defined within its own @code{.asd} file of the same
3779name, then the @code{#:asd-file} parameter should be used to specify
8a3814cd
AP
3780which file the system is defined in. Furthermore, if the package
3781defines a system for its tests in a separate file, it will be loaded
3782before the tests are run if it is specified by the
3783@code{#:test-asd-file} parameter. If it is not set, the files
3784@code{<system>-tests.asd}, @code{<system>-test.asd}, @code{tests.asd},
3785and @code{test.asd} will be tried if they exist.
3786
3787If for some reason the package must be named in a different way than the
3788naming conventions suggest, the @code{#:asd-system-name} parameter can
3789be used to specify the name of the system.
a1b30f99
AP
3790
3791@end defvr
3792
1ec34dd7
LC
3793@defvr {Scheme Variable} cargo-build-system
3794@cindex Rust programming language
3795@cindex Cargo (Rust build system)
3796This variable is exported by @code{(guix build-system cargo)}. It
3797supports builds of packages using Cargo, the build tool of the
3798@uref{https://www.rust-lang.org, Rust programming language}.
3799
3800In its @code{configure} phase, this build system replaces dependencies
3801specified in the @file{Carto.toml} file with inputs to the Guix package.
3802The @code{install} phase installs the binaries, and it also installs the
3803source code and @file{Cargo.toml} file.
3804@end defvr
3805
7458bd0a
LC
3806@defvr {Scheme Variable} cmake-build-system
3807This variable is exported by @code{(guix build-system cmake)}. It
3808implements the build procedure for packages using the
3809@url{http://www.cmake.org, CMake build tool}.
3810
3811It automatically adds the @code{cmake} package to the set of inputs.
3812Which package is used can be specified with the @code{#:cmake}
3813parameter.
9849cfc1
LC
3814
3815The @code{#:configure-flags} parameter is taken as a list of flags
3816passed to the @command{cmake} command. The @code{#:build-type}
3817parameter specifies in abstract terms the flags passed to the compiler;
3818it defaults to @code{"RelWithDebInfo"} (short for ``release mode with
3819debugging information''), which roughly means that code is compiled with
3820@code{-O2 -g}, as is the case for Autoconf-based packages by default.
7458bd0a
LC
3821@end defvr
3822
91525b48
LF
3823@defvr {Scheme Variable} go-build-system
3824This variable is exported by @code{(guix build-system go)}. It
3825implements a build procedure for Go packages using the standard
3826@url{https://golang.org/cmd/go/#hdr-Compile_packages_and_dependencies,
3827Go build mechanisms}.
3828
3829The user is expected to provide a value for the key @code{#:import-path}
3830and, in some cases, @code{#:unpack-path}. The
3831@url{https://golang.org/doc/code.html#ImportPaths, import path}
162a1374 3832corresponds to the file system path expected by the package's build
91525b48
LF
3833scripts and any referring packages, and provides a unique way to
3834refer to a Go package. It is typically based on a combination of the
162a1374 3835package source code's remote URI and file system hierarchy structure. In
91525b48
LF
3836some cases, you will need to unpack the package's source code to a
3837different directory structure than the one indicated by the import path,
3838and @code{#:unpack-path} should be used in such cases.
9c43f432
LF
3839
3840Packages that provide Go libraries should be installed along with their
3841source code. The key @code{#:install-source?}, which defaults to
3842@code{#t}, controls whether or not the source code is installed. It can
3843be set to @code{#f} for packages that only provide executable files.
91525b48
LF
3844@end defvr
3845
3afcf52b
FB
3846@defvr {Scheme Variable} glib-or-gtk-build-system
3847This variable is exported by @code{(guix build-system glib-or-gtk)}. It
3848is intended for use with packages making use of GLib or GTK+.
3849
3850This build system adds the following two phases to the ones defined by
3851@var{gnu-build-system}:
3852
3853@table @code
3854@item glib-or-gtk-wrap
f97c9175
AE
3855The phase @code{glib-or-gtk-wrap} ensures that programs in
3856@file{bin/} are able to find GLib ``schemas'' and
3afcf52b
FB
3857@uref{https://developer.gnome.org/gtk3/stable/gtk-running.html, GTK+
3858modules}. This is achieved by wrapping the programs in launch scripts
3859that appropriately set the @code{XDG_DATA_DIRS} and @code{GTK_PATH}
3860environment variables.
3861
73aa8ddb
LC
3862It is possible to exclude specific package outputs from that wrapping
3863process by listing their names in the
3864@code{#:glib-or-gtk-wrap-excluded-outputs} parameter. This is useful
3865when an output is known not to contain any GLib or GTK+ binaries, and
3866where wrapping would gratuitously add a dependency of that output on
3867GLib and GTK+.
3868
3afcf52b 3869@item glib-or-gtk-compile-schemas
f97c9175 3870The phase @code{glib-or-gtk-compile-schemas} makes sure that all
3afcf52b 3871@uref{https://developer.gnome.org/gio/stable/glib-compile-schemas.html,
f97c9175 3872GSettings schemas} of GLib are compiled. Compilation is performed by the
3afcf52b
FB
3873@command{glib-compile-schemas} program. It is provided by the package
3874@code{glib:bin} which is automatically imported by the build system.
3875The @code{glib} package providing @command{glib-compile-schemas} can be
3876specified with the @code{#:glib} parameter.
3877@end table
3878
3879Both phases are executed after the @code{install} phase.
3880@end defvr
3881
88c8f247
RW
3882@defvr {Scheme Variable} minify-build-system
3883This variable is exported by @code{(guix build-system minify)}. It
3884implements a minification procedure for simple JavaScript packages.
3885
3886It adds @code{uglify-js} to the set of inputs and uses it to compress
3887all JavaScript files in the @file{src} directory. A different minifier
3888package can be specified with the @code{#:uglify-js} parameter, but it
3889is expected that the package writes the minified code to the standard
3890output.
3891
3892When the input JavaScript files are not all located in the @file{src}
3893directory, the parameter @code{#:javascript-files} can be used to
3894specify a list of file names to feed to the minifier.
3895@end defvr
3896
3184f14a 3897@defvr {Scheme Variable} ocaml-build-system
9fc221b5 3898This variable is exported by @code{(guix build-system ocaml)}. It implements
3184f14a
JL
3899a build procedure for @uref{https://ocaml.org, OCaml} packages, which consists
3900of choosing the correct set of commands to run for each package. OCaml
3901packages can expect many different commands to be run. This build system will
3902try some of them.
3903
3904When the package has a @file{setup.ml} file present at the top-level, it will
3905run @code{ocaml setup.ml -configure}, @code{ocaml setup.ml -build} and
3906@code{ocaml setup.ml -install}. The build system will assume that this file
3907was generated by @uref{http://oasis.forge.ocamlcore.org/, OASIS} and will take
3908care of setting the prefix and enabling tests if they are not disabled. You
3909can pass configure and build flags with the @code{#:configure-flags} and
3910@code{#:build-flags}. The @code{#:test-flags} key can be passed to change the
3911set of flags used to enable tests. The @code{#:use-make?} key can be used to
3912bypass this system in the build and install phases.
3913
3914When the package has a @file{configure} file, it is assumed that it is a
3915hand-made configure script that requires a different argument format than
3916in the @code{gnu-build-system}. You can add more flags with the
3917@code{#:configure-flags} key.
3918
3919When the package has a @file{Makefile} file (or @code{#:use-make?} is
3920@code{#t}), it will be used and more flags can be passed to the build and
3921install phases with the @code{#:make-flags} key.
3922
3923Finally, some packages do not have these files and use a somewhat standard
3924location for its build system. In that case, the build system will run
3925@code{ocaml pkg/pkg.ml} or @code{ocaml pkg/build.ml} and take care of
3926providing the path to the required findlib module. Additional flags can
3927be passed via the @code{#:build-flags} key. Install is taken care of by
3928@command{opam-installer}. In this case, the @code{opam} package must
3929be added to the @code{native-inputs} field of the package definition.
3930
3931Note that most OCaml packages assume they will be installed in the same
88ba7852 3932directory as OCaml, which is not what we want in guix. In particular, they
3184f14a 3933will install @file{.so} files in their module's directory, which is usually
88ba7852 3934fine because it is in the OCaml compiler directory. In guix though, these
3184f14a
JL
3935libraries cannot be found and we use @code{CAML_LD_LIBRARY_PATH}. This
3936variable points to @file{lib/ocaml/site-lib/stubslibs} and this is where
3937@file{.so} libraries should be installed.
3938@end defvr
3939
7458bd0a
LC
3940@defvr {Scheme Variable} python-build-system
3941This variable is exported by @code{(guix build-system python)}. It
3942implements the more or less standard build procedure used by Python
3943packages, which consists in running @code{python setup.py build} and
3944then @code{python setup.py install --prefix=/gnu/store/@dots{}}.
3945
3946For packages that install stand-alone Python programs under @code{bin/},
f97c9175 3947it takes care of wrapping these programs so that their @code{PYTHONPATH}
7458bd0a
LC
3948environment variable points to all the Python libraries they depend on.
3949
8a46205b
CM
3950Which Python package is used to perform the build can be specified with
3951the @code{#:python} parameter. This is a useful way to force a package
3952to be built for a specific version of the Python interpreter, which
3953might be necessary if the package is only compatible with a single
3954interpreter version.
5f7565d1
HG
3955
3956By default guix calls @code{setup.py} under control of
3957@code{setuptools}, much like @command{pip} does. Some packages are not
3958compatible with setuptools (and pip), thus you can disable this by
3959setting the @code{#:use-setuptools} parameter to @code{#f}.
7458bd0a
LC
3960@end defvr
3961
3962@defvr {Scheme Variable} perl-build-system
3963This variable is exported by @code{(guix build-system perl)}. It
2d2a53fc
EB
3964implements the standard build procedure for Perl packages, which either
3965consists in running @code{perl Build.PL --prefix=/gnu/store/@dots{}},
3966followed by @code{Build} and @code{Build install}; or in running
3967@code{perl Makefile.PL PREFIX=/gnu/store/@dots{}}, followed by
f97c9175 3968@code{make} and @code{make install}, depending on which of
2d2a53fc
EB
3969@code{Build.PL} or @code{Makefile.PL} is present in the package
3970distribution. Preference is given to the former if both @code{Build.PL}
3971and @code{Makefile.PL} exist in the package distribution. This
3972preference can be reversed by specifying @code{#t} for the
3973@code{#:make-maker?} parameter.
3974
3975The initial @code{perl Makefile.PL} or @code{perl Build.PL} invocation
3976passes flags specified by the @code{#:make-maker-flags} or
3977@code{#:module-build-flags} parameter, respectively.
7458bd0a
LC
3978
3979Which Perl package is used can be specified with @code{#:perl}.
3980@end defvr
3981
f8f3bef6
RW
3982@defvr {Scheme Variable} r-build-system
3983This variable is exported by @code{(guix build-system r)}. It
3984implements the build procedure used by @uref{http://r-project.org, R}
3985packages, which essentially is little more than running @code{R CMD
3986INSTALL --library=/gnu/store/@dots{}} in an environment where
3987@code{R_LIBS_SITE} contains the paths to all R package inputs. Tests
3988are run after installation using the R function
3989@code{tools::testInstalledPackage}.
3990@end defvr
3991
205794c8
RW
3992@defvr {Scheme Variable} texlive-build-system
3993This variable is exported by @code{(guix build-system texlive)}. It is
3994used to build TeX packages in batch mode with a specified engine. The
3995build system sets the @code{TEXINPUTS} variable to find all TeX source
3996files in the inputs.
3997
3998By default it runs @code{luatex} on all files ending on @code{ins}. A
3999different engine and format can be specified with the
4000@code{#:tex-format} argument. Different build targets can be specified
4001with the @code{#:build-targets} argument, which expects a list of file
4002names. The build system adds only @code{texlive-bin} and
4003@code{texlive-latex-base} (both from @code{(gnu packages tex}) to the
4004inputs. Both can be overridden with the arguments @code{#:texlive-bin}
4005and @code{#:texlive-latex-base}, respectively.
4006
4007The @code{#:tex-directory} parameter tells the build system where to
4008install the built files under the texmf tree.
4009@end defvr
4010
c08f9818
DT
4011@defvr {Scheme Variable} ruby-build-system
4012This variable is exported by @code{(guix build-system ruby)}. It
4013implements the RubyGems build procedure used by Ruby packages, which
4014involves running @code{gem build} followed by @code{gem install}.
4015
5dc87623
DT
4016The @code{source} field of a package that uses this build system
4017typically references a gem archive, since this is the format that Ruby
4018developers use when releasing their software. The build system unpacks
4019the gem archive, potentially patches the source, runs the test suite,
4020repackages the gem, and installs it. Additionally, directories and
4021tarballs may be referenced to allow building unreleased gems from Git or
4022a traditional source release tarball.
e83c6d00 4023
c08f9818 4024Which Ruby package is used can be specified with the @code{#:ruby}
6e9f2913
PP
4025parameter. A list of additional flags to be passed to the @command{gem}
4026command can be specified with the @code{#:gem-flags} parameter.
c08f9818 4027@end defvr
7458bd0a 4028
a677c726
RW
4029@defvr {Scheme Variable} waf-build-system
4030This variable is exported by @code{(guix build-system waf)}. It
4031implements a build procedure around the @code{waf} script. The common
4032phases---@code{configure}, @code{build}, and @code{install}---are
4033implemented by passing their names as arguments to the @code{waf}
4034script.
4035
4036The @code{waf} script is executed by the Python interpreter. Which
4037Python package is used to run the script can be specified with the
4038@code{#:python} parameter.
4039@end defvr
4040
3d0aa7f7
AI
4041@defvr {Scheme Variable} scons-build-system
4042This variable is exported by @code{(guix build-system scons)}. It
4043implements the build procedure used by the SCons software construction
4044tool. This build system runs @code{scons} to build the package,
4045@code{scons test} to run tests, and then @code{scons install} to install
4046the package.
4047
4048Additional flags to be passed to @code{scons} can be specified with the
4049@code{#:scons-flags} parameter. The version of Python used to run SCons
4050can be specified by selecting the appropriate SCons package with the
4051@code{#:scons} parameter.
4052@end defvr
4053
14dfdf2e
FB
4054@defvr {Scheme Variable} haskell-build-system
4055This variable is exported by @code{(guix build-system haskell)}. It
4056implements the Cabal build procedure used by Haskell packages, which
4057involves running @code{runhaskell Setup.hs configure
4058--prefix=/gnu/store/@dots{}} and @code{runhaskell Setup.hs build}.
4059Instead of installing the package by running @code{runhaskell Setup.hs
4060install}, to avoid trying to register libraries in the read-only
4061compiler store directory, the build system uses @code{runhaskell
4062Setup.hs copy}, followed by @code{runhaskell Setup.hs register}. In
4063addition, the build system generates the package documentation by
4064running @code{runhaskell Setup.hs haddock}, unless @code{#:haddock? #f}
4065is passed. Optional Haddock parameters can be passed with the help of
4066the @code{#:haddock-flags} parameter. If the file @code{Setup.hs} is
4067not found, the build system looks for @code{Setup.lhs} instead.
4068
4069Which Haskell compiler is used can be specified with the @code{#:haskell}
a54bd6d7 4070parameter which defaults to @code{ghc}.
14dfdf2e
FB
4071@end defvr
4072
65e862d1
DM
4073@defvr {Scheme Variable} dub-build-system
4074This variable is exported by @code{(guix build-system dub)}. It
4075implements the Dub build procedure used by D packages, which
4076involves running @code{dub build} and @code{dub run}.
4077Installation is done by copying the files manually.
4078
4079Which D compiler is used can be specified with the @code{#:ldc}
4080parameter which defaults to @code{ldc}.
4081@end defvr
4082
e9137a53
FB
4083@defvr {Scheme Variable} emacs-build-system
4084This variable is exported by @code{(guix build-system emacs)}. It
f97c9175
AE
4085implements an installation procedure similar to the packaging system
4086of Emacs itself (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
e9137a53
FB
4087
4088It first creates the @code{@var{package}-autoloads.el} file, then it
4089byte compiles all Emacs Lisp files. Differently from the Emacs
4090packaging system, the Info documentation files are moved to the standard
4091documentation directory and the @file{dir} file is deleted. Each
4092package is installed in its own directory under
4093@file{share/emacs/site-lisp/guix.d}.
4094@end defvr
4095
3d90fa98
AI
4096@defvr {Scheme Variable} font-build-system
4097This variable is exported by @code{(guix build-system font)}. It
4098implements an installation procedure for font packages where upstream
4099provides pre-compiled TrueType, OpenType, etc. font files that merely
4100need to be copied into place. It copies font files to standard
4101locations in the output directory.
4102@end defvr
4103
07c101e2
PM
4104@defvr {Scheme Variable} meson-build-system
4105This variable is exported by @code{(guix build-system meson)}. It
4106implements the build procedure for packages that use
4107@url{http://mesonbuild.com, Meson} as their build system.
4108
4109It adds both Meson and @uref{https://ninja-build.org/, Ninja} to the set
4110of inputs, and they can be changed with the parameters @code{#:meson}
4111and @code{#:ninja} if needed. The default Meson is
4112@code{meson-for-build}, which is special because it doesn't clear the
4113@code{RUNPATH} of binaries and libraries when they are installed.
4114
4115This build system is an extension of @var{gnu-build-system}, but with the
4116following phases changed to some specific for Meson:
4117
4118@table @code
4119
4120@item configure
4121The phase runs @code{meson} with the flags specified in
4122@code{#:configure-flags}. The flag @code{--build-type} is always set to
4123@code{plain} unless something else is specified in @code{#:build-type}.
4124
4125@item build
4126The phase runs @code{ninja} to build the package in parallel by default, but
4127this can be changed with @code{#:parallel-build?}.
4128
4129@item check
4130The phase runs @code{ninja} with the target specified in @code{#:test-target},
4131which is @code{"test"} by default.
4132
4133@item install
4134The phase runs @code{ninja install} and can not be changed.
4135@end table
4136
4137Apart from that, the build system also adds the following phases:
4138
4139@table @code
4140
4141@item fix-runpath
782c94fe
TGR
4142This phase ensures that all binaries can find the libraries they need.
4143It searches for required libraries in subdirectories of the package being
4144built, and adds those to @code{RUNPATH} where needed. It also removes
4145references to libraries left over from the build phase by
4146@code{meson-for-build}, such as test dependencies, that aren't actually
4147required for the program to run.
07c101e2
PM
4148
4149@item glib-or-gtk-wrap
4150This phase is the phase provided by @code{glib-or-gtk-build-system}, and it
4151is not enabled by default. It can be enabled with @code{#:glib-or-gtk?}.
4152
4153@item glib-or-gtk-compile-schemas
4154This phase is the phase provided by @code{glib-or-gtk-build-system}, and it
4155is not enabled by default. It can be enabled with @code{#:glib-or-gtk?}.
4156@end table
4157@end defvr
4158
7458bd0a
LC
4159Lastly, for packages that do not need anything as sophisticated, a
4160``trivial'' build system is provided. It is trivial in the sense that
4161it provides basically no support: it does not pull any implicit inputs,
4162and does not have a notion of build phases.
4163
4164@defvr {Scheme Variable} trivial-build-system
4165This variable is exported by @code{(guix build-system trivial)}.
4166
4167This build system requires a @code{#:builder} argument. This argument
f97c9175 4168must be a Scheme expression that builds the package output(s)---as
7458bd0a
LC
4169with @code{build-expression->derivation} (@pxref{Derivations,
4170@code{build-expression->derivation}}).
4171@end defvr
4172
568717fd
LC
4173@node The Store
4174@section The Store
4175
e531ac2a 4176@cindex store
1ddee424 4177@cindex store items
e531ac2a
LC
4178@cindex store paths
4179
f97c9175
AE
4180Conceptually, the @dfn{store} is the place where derivations that have
4181been built successfully are stored---by default, @file{/gnu/store}.
1ddee424
LC
4182Sub-directories in the store are referred to as @dfn{store items} or
4183sometimes @dfn{store paths}. The store has an associated database that
4184contains information such as the store paths referred to by each store
4185path, and the list of @emph{valid} store items---results of successful
ef5f5c86
LC
4186builds. This database resides in @file{@var{localstatedir}/guix/db},
4187where @var{localstatedir} is the state directory specified @i{via}
4188@option{--localstatedir} at configure time, usually @file{/var}.
1ddee424
LC
4189
4190The store is @emph{always} accessed by the daemon on behalf of its clients
e531ac2a 4191(@pxref{Invoking guix-daemon}). To manipulate the store, clients
f97c9175
AE
4192connect to the daemon over a Unix-domain socket, send requests to it,
4193and read the result---these are remote procedure calls, or RPCs.
e531ac2a 4194
1ddee424
LC
4195@quotation Note
4196Users must @emph{never} modify files under @file{/gnu/store} directly.
4197This would lead to inconsistencies and break the immutability
4198assumptions of Guix's functional model (@pxref{Introduction}).
4199
4200@xref{Invoking guix gc, @command{guix gc --verify}}, for information on
4201how to check the integrity of the store and attempt recovery from
4202accidental modifications.
4203@end quotation
4204
e531ac2a 4205The @code{(guix store)} module provides procedures to connect to the
1397b422
LC
4206daemon, and to perform RPCs. These are described below. By default,
4207@code{open-connection}, and thus all the @command{guix} commands,
4208connect to the local daemon or to the URI specified by the
4209@code{GUIX_DAEMON_SOCKET} environment variable.
e531ac2a 4210
1397b422
LC
4211@defvr {Environment Variable} GUIX_DAEMON_SOCKET
4212When set, the value of this variable should be a file name or a URI
4213designating the daemon endpoint. When it is a file name, it denotes a
4214Unix-domain socket to connect to. In addition to file names, the
4215supported URI schemes are:
4216
4217@table @code
4218@item file
4219@itemx unix
4220These are for Unix-domain sockets.
4221@code{file:///var/guix/daemon-socket/socket} is equivalent to
4222@file{/var/guix/daemon-socket/socket}.
3dff90ce
LC
4223
4224@item guix
1071f781
LC
4225@cindex daemon, remote access
4226@cindex remote access to the daemon
4227@cindex daemon, cluster setup
4228@cindex clusters, daemon setup
3dff90ce 4229These URIs denote connections over TCP/IP, without encryption nor
5df1395a
LC
4230authentication of the remote host. The URI must specify the host name
4231and optionally a port number (by default port 44146 is used):
3dff90ce
LC
4232
4233@example
4234guix://master.guix.example.org:1234
4235@end example
4236
4237This setup is suitable on local networks, such as clusters, where only
4238trusted nodes may connect to the build daemon at
4239@code{master.guix.example.org}.
285f63e8 4240
1071f781
LC
4241The @code{--listen} option of @command{guix-daemon} can be used to
4242instruct it to listen for TCP connections (@pxref{Invoking guix-daemon,
4243@code{--listen}}).
4244
285f63e8
LC
4245@item ssh
4246@cindex SSH access to build daemons
4247These URIs allow you to connect to a remote daemon over
4248SSH@footnote{This feature requires Guile-SSH (@pxref{Requirements}).}.
4249A typical URL might look like this:
4250
4251@example
4252ssh://charlie@@guix.example.org:22
4253@end example
4254
4255As for @command{guix copy}, the usual OpenSSH client configuration files
4256are honored (@pxref{Invoking guix copy}).
1397b422
LC
4257@end table
4258
4259Additional URI schemes may be supported in the future.
285f63e8
LC
4260
4261@c XXX: Remove this note when the protocol incurs fewer round trips
4262@c and when (guix derivations) no longer relies on file system access.
4263@quotation Note
4264The ability to connect to remote build daemons is considered
4265experimental as of @value{VERSION}. Please get in touch with us to
4266share any problems or suggestions you may have (@pxref{Contributing}).
4267@end quotation
1397b422
LC
4268@end defvr
4269
4270@deffn {Scheme Procedure} open-connection [@var{uri}] [#:reserve-space? #t]
4271Connect to the daemon over the Unix-domain socket at @var{uri} (a string). When
e531ac2a
LC
4272@var{reserve-space?} is true, instruct it to reserve a little bit of
4273extra space on the file system so that the garbage collector can still
f97c9175 4274operate should the disk become full. Return a server object.
e531ac2a
LC
4275
4276@var{file} defaults to @var{%default-socket-path}, which is the normal
4277location given the options that were passed to @command{configure}.
4278@end deffn
4279
4280@deffn {Scheme Procedure} close-connection @var{server}
4281Close the connection to @var{server}.
4282@end deffn
4283
4284@defvr {Scheme Variable} current-build-output-port
4285This variable is bound to a SRFI-39 parameter, which refers to the port
4286where build and error logs sent by the daemon should be written.
4287@end defvr
4288
4289Procedures that make RPCs all take a server object as their first
4290argument.
4291
4292@deffn {Scheme Procedure} valid-path? @var{server} @var{path}
06b76acc
LC
4293@cindex invalid store items
4294Return @code{#t} when @var{path} designates a valid store item and
4295@code{#f} otherwise (an invalid item may exist on disk but still be
4296invalid, for instance because it is the result of an aborted or failed
4297build.)
4298
4299A @code{&nix-protocol-error} condition is raised if @var{path} is not
4300prefixed by the store directory (@file{/gnu/store}).
e531ac2a
LC
4301@end deffn
4302
cfbf9160 4303@deffn {Scheme Procedure} add-text-to-store @var{server} @var{name} @var{text} [@var{references}]
e531ac2a
LC
4304Add @var{text} under file @var{name} in the store, and return its store
4305path. @var{references} is the list of store paths referred to by the
4306resulting store path.
4307@end deffn
4308
874e6874 4309@deffn {Scheme Procedure} build-derivations @var{server} @var{derivations}
59688fc4
LC
4310Build @var{derivations} (a list of @code{<derivation>} objects or
4311derivation paths), and return when the worker is done building them.
4312Return @code{#t} on success.
874e6874
LC
4313@end deffn
4314
b860f382
LC
4315Note that the @code{(guix monads)} module provides a monad as well as
4316monadic versions of the above procedures, with the goal of making it
4317more convenient to work with code that accesses the store (@pxref{The
4318Store Monad}).
4319
e531ac2a
LC
4320@c FIXME
4321@i{This section is currently incomplete.}
568717fd
LC
4322
4323@node Derivations
4324@section Derivations
4325
874e6874
LC
4326@cindex derivations
4327Low-level build actions and the environment in which they are performed
70458ed5 4328are represented by @dfn{derivations}. A derivation contains the
874e6874
LC
4329following pieces of information:
4330
4331@itemize
4332@item
4333The outputs of the derivation---derivations produce at least one file or
4334directory in the store, but may produce more.
4335
4336@item
4337The inputs of the derivations, which may be other derivations or plain
4338files in the store (patches, build scripts, etc.)
4339
4340@item
4341The system type targeted by the derivation---e.g., @code{x86_64-linux}.
4342
4343@item
4344The file name of a build script in the store, along with the arguments
4345to be passed.
4346
4347@item
4348A list of environment variables to be defined.
4349
4350@end itemize
4351
4352@cindex derivation path
4353Derivations allow clients of the daemon to communicate build actions to
4354the store. They exist in two forms: as an in-memory representation,
4355both on the client- and daemon-side, and as files in the store whose
4356name end in @code{.drv}---these files are referred to as @dfn{derivation
4357paths}. Derivations paths can be passed to the @code{build-derivations}
4358procedure to perform the build actions they prescribe (@pxref{The
4359Store}).
4360
8785bd77
LC
4361@cindex fixed-output derivations
4362Operations such as file downloads and version-control checkouts for
4363which the expected content hash is known in advance are modeled as
4364@dfn{fixed-output derivations}. Unlike regular derivations, the outputs
4365of a fixed-output derivation are independent of its inputs---e.g., a
4366source code download produces the same result regardless of the download
4367method and tools being used.
4368
874e6874
LC
4369The @code{(guix derivations)} module provides a representation of
4370derivations as Scheme objects, along with procedures to create and
4371otherwise manipulate derivations. The lowest-level primitive to create
4372a derivation is the @code{derivation} procedure:
4373
1909431c
LC
4374@deffn {Scheme Procedure} derivation @var{store} @var{name} @var{builder} @
4375 @var{args} [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
2096ef47 4376 [#:recursive? #f] [#:inputs '()] [#:env-vars '()] @
1909431c 4377 [#:system (%current-system)] [#:references-graphs #f] @
35b5ca78
LC
4378 [#:allowed-references #f] [#:disallowed-references #f] @
4379 [#:leaked-env-vars #f] [#:local-build? #f] @
4a6aeb67 4380 [#:substitutable? #t]
59688fc4
LC
4381Build a derivation with the given arguments, and return the resulting
4382@code{<derivation>} object.
874e6874 4383
2096ef47 4384When @var{hash} and @var{hash-algo} are given, a
874e6874 4385@dfn{fixed-output derivation} is created---i.e., one whose result is
36bbbbd1
LC
4386known in advance, such as a file download. If, in addition,
4387@var{recursive?} is true, then that fixed output may be an executable
4388file or a directory and @var{hash} must be the hash of an archive
4389containing this output.
5b0c9d16 4390
858e9282 4391When @var{references-graphs} is true, it must be a list of file
5b0c9d16
LC
4392name/store path pairs. In that case, the reference graph of each store
4393path is exported in the build environment in the corresponding file, in
4394a simple text format.
1909431c 4395
b53be755 4396When @var{allowed-references} is true, it must be a list of store items
35b5ca78
LC
4397or outputs that the derivation's output may refer to. Likewise,
4398@var{disallowed-references}, if true, must be a list of things the
4399outputs may @emph{not} refer to.
b53be755 4400
c0468155
LC
4401When @var{leaked-env-vars} is true, it must be a list of strings
4402denoting environment variables that are allowed to ``leak'' from the
4403daemon's environment to the build environment. This is only applicable
4404to fixed-output derivations---i.e., when @var{hash} is true. The main
4405use is to allow variables such as @code{http_proxy} to be passed to
4406derivations that download files.
4407
1909431c
LC
4408When @var{local-build?} is true, declare that the derivation is not a
4409good candidate for offloading and should rather be built locally
4410(@pxref{Daemon Offload Setup}). This is the case for small derivations
4411where the costs of data transfers would outweigh the benefits.
4a6aeb67
LC
4412
4413When @var{substitutable?} is false, declare that substitutes of the
4414derivation's output should not be used (@pxref{Substitutes}). This is
4415useful, for instance, when building packages that capture details of the
4416host CPU instruction set.
874e6874
LC
4417@end deffn
4418
4419@noindent
4420Here's an example with a shell script as its builder, assuming
4421@var{store} is an open connection to the daemon, and @var{bash} points
4422to a Bash executable in the store:
4423
4424@lisp
4425(use-modules (guix utils)
4426 (guix store)
4427 (guix derivations))
4428
59688fc4
LC
4429(let ((builder ; add the Bash script to the store
4430 (add-text-to-store store "my-builder.sh"
4431 "echo hello world > $out\n" '())))
4432 (derivation store "foo"
4433 bash `("-e" ,builder)
21b679f6 4434 #:inputs `((,bash) (,builder))
59688fc4 4435 #:env-vars '(("HOME" . "/homeless"))))
834129e0 4436@result{} #<derivation /gnu/store/@dots{}-foo.drv => /gnu/store/@dots{}-foo>
874e6874
LC
4437@end lisp
4438
21b679f6
LC
4439As can be guessed, this primitive is cumbersome to use directly. A
4440better approach is to write build scripts in Scheme, of course! The
4441best course of action for that is to write the build code as a
4442``G-expression'', and to pass it to @code{gexp->derivation}. For more
6621cdb6 4443information, @pxref{G-Expressions}.
21b679f6 4444
f2fadbc1
AE
4445Once upon a time, @code{gexp->derivation} did not exist and constructing
4446derivations with build code written in Scheme was achieved with
4447@code{build-expression->derivation}, documented below. This procedure
4448is now deprecated in favor of the much nicer @code{gexp->derivation}.
4449
4450@deffn {Scheme Procedure} build-expression->derivation @var{store} @
4451 @var{name} @var{exp} @
4452 [#:system (%current-system)] [#:inputs '()] @
4453 [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
4454 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
4455 [#:references-graphs #f] [#:allowed-references #f] @
35b5ca78 4456 [#:disallowed-references #f] @
f2fadbc1
AE
4457 [#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
4458Return a derivation that executes Scheme expression @var{exp} as a
4459builder for derivation @var{name}. @var{inputs} must be a list of
4460@code{(name drv-path sub-drv)} tuples; when @var{sub-drv} is omitted,
4461@code{"out"} is assumed. @var{modules} is a list of names of Guile
4462modules from the current search path to be copied in the store,
4463compiled, and made available in the load path during the execution of
4464@var{exp}---e.g., @code{((guix build utils) (guix build
4465gnu-build-system))}.
4466
4467@var{exp} is evaluated in an environment where @code{%outputs} is bound
4468to a list of output/path pairs, and where @code{%build-inputs} is bound
4469to a list of string/output-path pairs made from @var{inputs}.
4470Optionally, @var{env-vars} is a list of string pairs specifying the name
4471and value of environment variables visible to the builder. The builder
4472terminates by passing the result of @var{exp} to @code{exit}; thus, when
4473@var{exp} returns @code{#f}, the build is considered to have failed.
4474
4475@var{exp} is built using @var{guile-for-build} (a derivation). When
4476@var{guile-for-build} is omitted or is @code{#f}, the value of the
4477@code{%guile-for-build} fluid is used instead.
4478
4479See the @code{derivation} procedure for the meaning of
35b5ca78
LC
4480@var{references-graphs}, @var{allowed-references},
4481@var{disallowed-references}, @var{local-build?}, and
4482@var{substitutable?}.
f2fadbc1
AE
4483@end deffn
4484
4485@noindent
4486Here's an example of a single-output derivation that creates a directory
4487containing one file:
4488
4489@lisp
4490(let ((builder '(let ((out (assoc-ref %outputs "out")))
4491 (mkdir out) ; create /gnu/store/@dots{}-goo
4492 (call-with-output-file (string-append out "/test")
4493 (lambda (p)
4494 (display '(hello guix) p))))))
4495 (build-expression->derivation store "goo" builder))
4496
4497@result{} #<derivation /gnu/store/@dots{}-goo.drv => @dots{}>
4498@end lisp
4499
568717fd 4500
b860f382
LC
4501@node The Store Monad
4502@section The Store Monad
4503
4504@cindex monad
4505
4506The procedures that operate on the store described in the previous
4507sections all take an open connection to the build daemon as their first
4508argument. Although the underlying model is functional, they either have
4509side effects or depend on the current state of the store.
4510
4511The former is inconvenient: the connection to the build daemon has to be
4512carried around in all those functions, making it impossible to compose
4513functions that do not take that parameter with functions that do. The
4514latter can be problematic: since store operations have side effects
4515and/or depend on external state, they have to be properly sequenced.
4516
4517@cindex monadic values
4518@cindex monadic functions
4519This is where the @code{(guix monads)} module comes in. This module
4520provides a framework for working with @dfn{monads}, and a particularly
4521useful monad for our uses, the @dfn{store monad}. Monads are a
4522construct that allows two things: associating ``context'' with values
4523(in our case, the context is the store), and building sequences of
4827b36d 4524computations (here computations include accesses to the store). Values
b860f382
LC
4525in a monad---values that carry this additional context---are called
4526@dfn{monadic values}; procedures that return such values are called
4527@dfn{monadic procedures}.
4528
4529Consider this ``normal'' procedure:
4530
4531@example
45adbd62
LC
4532(define (sh-symlink store)
4533 ;; Return a derivation that symlinks the 'bash' executable.
4534 (let* ((drv (package-derivation store bash))
4535 (out (derivation->output-path drv))
4536 (sh (string-append out "/bin/bash")))
4537 (build-expression->derivation store "sh"
4538 `(symlink ,sh %output))))
b860f382
LC
4539@end example
4540
c6f30b81
LC
4541Using @code{(guix monads)} and @code{(guix gexp)}, it may be rewritten
4542as a monadic function:
b860f382
LC
4543
4544@example
45adbd62 4545(define (sh-symlink)
b860f382 4546 ;; Same, but return a monadic value.
c6f30b81
LC
4547 (mlet %store-monad ((drv (package->derivation bash)))
4548 (gexp->derivation "sh"
4549 #~(symlink (string-append #$drv "/bin/bash")
4550 #$output))))
b860f382
LC
4551@end example
4552
4827b36d 4553There are several things to note in the second version: the @code{store}
c6f30b81
LC
4554parameter is now implicit and is ``threaded'' in the calls to the
4555@code{package->derivation} and @code{gexp->derivation} monadic
4556procedures, and the monadic value returned by @code{package->derivation}
4557is @dfn{bound} using @code{mlet} instead of plain @code{let}.
4558
4559As it turns out, the call to @code{package->derivation} can even be
4560omitted since it will take place implicitly, as we will see later
4561(@pxref{G-Expressions}):
4562
4563@example
4564(define (sh-symlink)
4565 (gexp->derivation "sh"
4566 #~(symlink (string-append #$bash "/bin/bash")
4567 #$output)))
4568@end example
b860f382 4569
7ce21611 4570@c See
a01ad638 4571@c <https://syntaxexclamation.wordpress.com/2014/06/26/escaping-continuations/>
7ce21611
LC
4572@c for the funny quote.
4573Calling the monadic @code{sh-symlink} has no effect. As someone once
4574said, ``you exit a monad like you exit a building on fire: by running''.
4575So, to exit the monad and get the desired effect, one must use
4576@code{run-with-store}:
b860f382
LC
4577
4578@example
8e9aa37f
CAW
4579(run-with-store (open-connection) (sh-symlink))
4580@result{} /gnu/store/...-sh-symlink
b860f382
LC
4581@end example
4582
f97c9175 4583Note that the @code{(guix monad-repl)} module extends the Guile REPL with
b9b86078 4584new ``meta-commands'' to make it easier to deal with monadic procedures:
f97c9175 4585@code{run-in-store}, and @code{enter-store-monad}. The former is used
b9b86078
LC
4586to ``run'' a single monadic value through the store:
4587
4588@example
4589scheme@@(guile-user)> ,run-in-store (package->derivation hello)
4590$1 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
4591@end example
4592
4593The latter enters a recursive REPL, where all the return values are
4594automatically run through the store:
4595
4596@example
4597scheme@@(guile-user)> ,enter-store-monad
4598store-monad@@(guile-user) [1]> (package->derivation hello)
4599$2 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
4600store-monad@@(guile-user) [1]> (text-file "foo" "Hello!")
4601$3 = "/gnu/store/@dots{}-foo"
4602store-monad@@(guile-user) [1]> ,q
4603scheme@@(guile-user)>
4604@end example
4605
4606@noindent
4607Note that non-monadic values cannot be returned in the
4608@code{store-monad} REPL.
4609
e87f0591
LC
4610The main syntactic forms to deal with monads in general are provided by
4611the @code{(guix monads)} module and are described below.
b860f382
LC
4612
4613@deffn {Scheme Syntax} with-monad @var{monad} @var{body} ...
4614Evaluate any @code{>>=} or @code{return} forms in @var{body} as being
4615in @var{monad}.
4616@end deffn
4617
4618@deffn {Scheme Syntax} return @var{val}
4619Return a monadic value that encapsulates @var{val}.
4620@end deffn
4621
751630c9 4622@deffn {Scheme Syntax} >>= @var{mval} @var{mproc} ...
b860f382 4623@dfn{Bind} monadic value @var{mval}, passing its ``contents'' to monadic
751630c9
LC
4624procedures @var{mproc}@dots{}@footnote{This operation is commonly
4625referred to as ``bind'', but that name denotes an unrelated procedure in
4626Guile. Thus we use this somewhat cryptic symbol inherited from the
4627Haskell language.}. There can be one @var{mproc} or several of them, as
4628in this example:
4629
4630@example
4631(run-with-state
4632 (with-monad %state-monad
4633 (>>= (return 1)
4634 (lambda (x) (return (+ 1 x)))
4635 (lambda (x) (return (* 2 x)))))
4636 'some-state)
4637
4638@result{} 4
4639@result{} some-state
4640@end example
b860f382
LC
4641@end deffn
4642
4643@deffn {Scheme Syntax} mlet @var{monad} ((@var{var} @var{mval}) ...) @
4644 @var{body} ...
4645@deffnx {Scheme Syntax} mlet* @var{monad} ((@var{var} @var{mval}) ...) @
4646 @var{body} ...
4647Bind the variables @var{var} to the monadic values @var{mval} in
8bc2183f
CM
4648@var{body}, which is a sequence of expressions. As with the bind
4649operator, this can be thought of as ``unpacking'' the raw, non-monadic
4650value ``contained'' in @var{mval} and making @var{var} refer to that
4651raw, non-monadic value within the scope of the @var{body}. The form
4652(@var{var} -> @var{val}) binds @var{var} to the ``normal'' value
4653@var{val}, as per @code{let}. The binding operations occur in sequence
4654from left to right. The last expression of @var{body} must be a monadic
4655expression, and its result will become the result of the @code{mlet} or
4656@code{mlet*} when run in the @var{monad}.
b860f382
LC
4657
4658@code{mlet*} is to @code{mlet} what @code{let*} is to @code{let}
4659(@pxref{Local Bindings,,, guile, GNU Guile Reference Manual}).
4660@end deffn
4661
405a9d4e
LC
4662@deffn {Scheme System} mbegin @var{monad} @var{mexp} ...
4663Bind @var{mexp} and the following monadic expressions in sequence,
8bc2183f
CM
4664returning the result of the last expression. Every expression in the
4665sequence must be a monadic expression.
405a9d4e
LC
4666
4667This is akin to @code{mlet}, except that the return values of the
4668monadic expressions are ignored. In that sense, it is analogous to
4669@code{begin}, but applied to monadic expressions.
4670@end deffn
4671
60a9fcb1
CM
4672@deffn {Scheme System} mwhen @var{condition} @var{mexp0} @var{mexp*} ...
4673When @var{condition} is true, evaluate the sequence of monadic
4674expressions @var{mexp0}..@var{mexp*} as in an @code{mbegin}. When
4675@var{condition} is false, return @code{*unspecified*} in the current
4676monad. Every expression in the sequence must be a monadic expression.
4677@end deffn
4678
4679@deffn {Scheme System} munless @var{condition} @var{mexp0} @var{mexp*} ...
4680When @var{condition} is false, evaluate the sequence of monadic
4681expressions @var{mexp0}..@var{mexp*} as in an @code{mbegin}. When
4682@var{condition} is true, return @code{*unspecified*} in the current
4683monad. Every expression in the sequence must be a monadic expression.
4684@end deffn
4685
561fb6c3
LC
4686@cindex state monad
4687The @code{(guix monads)} module provides the @dfn{state monad}, which
4688allows an additional value---the state---to be @emph{threaded} through
4689monadic procedure calls.
4690
4691@defvr {Scheme Variable} %state-monad
4692The state monad. Procedures in the state monad can access and change
4693the state that is threaded.
4694
4695Consider the example below. The @code{square} procedure returns a value
4696in the state monad. It returns the square of its argument, but also
4697increments the current state value:
4698
4699@example
4700(define (square x)
4701 (mlet %state-monad ((count (current-state)))
4702 (mbegin %state-monad
4703 (set-current-state (+ 1 count))
4704 (return (* x x)))))
4705
4706(run-with-state (sequence %state-monad (map square (iota 3))) 0)
4707@result{} (0 1 4)
4708@result{} 3
4709@end example
4710
4711When ``run'' through @var{%state-monad}, we obtain that additional state
4712value, which is the number of @code{square} calls.
4713@end defvr
4714
4715@deffn {Monadic Procedure} current-state
4716Return the current state as a monadic value.
4717@end deffn
4718
4719@deffn {Monadic Procedure} set-current-state @var{value}
4720Set the current state to @var{value} and return the previous state as a
4721monadic value.
4722@end deffn
4723
4724@deffn {Monadic Procedure} state-push @var{value}
4725Push @var{value} to the current state, which is assumed to be a list,
4726and return the previous state as a monadic value.
4727@end deffn
4728
4729@deffn {Monadic Procedure} state-pop
4730Pop a value from the current state and return it as a monadic value.
4731The state is assumed to be a list.
4732@end deffn
4733
4734@deffn {Scheme Procedure} run-with-state @var{mval} [@var{state}]
4735Run monadic value @var{mval} starting with @var{state} as the initial
4736state. Return two values: the resulting value, and the resulting state.
4737@end deffn
4738
e87f0591
LC
4739The main interface to the store monad, provided by the @code{(guix
4740store)} module, is as follows.
b860f382
LC
4741
4742@defvr {Scheme Variable} %store-monad
561fb6c3
LC
4743The store monad---an alias for @var{%state-monad}.
4744
4745Values in the store monad encapsulate accesses to the store. When its
4746effect is needed, a value of the store monad must be ``evaluated'' by
4747passing it to the @code{run-with-store} procedure (see below.)
b860f382
LC
4748@end defvr
4749
4750@deffn {Scheme Procedure} run-with-store @var{store} @var{mval} [#:guile-for-build] [#:system (%current-system)]
4751Run @var{mval}, a monadic value in the store monad, in @var{store}, an
4752open store connection.
4753@end deffn
4754
ad372953 4755@deffn {Monadic Procedure} text-file @var{name} @var{text} [@var{references}]
b860f382 4756Return as a monadic value the absolute file name in the store of the file
ad372953
LC
4757containing @var{text}, a string. @var{references} is a list of store items that the
4758resulting text file refers to; it defaults to the empty list.
45adbd62
LC
4759@end deffn
4760
0a90af15 4761@deffn {Monadic Procedure} interned-file @var{file} [@var{name}] @
1ec32f4a 4762 [#:recursive? #t] [#:select? (const #t)]
0a90af15
LC
4763Return the name of @var{file} once interned in the store. Use
4764@var{name} as its store name, or the basename of @var{file} if
4765@var{name} is omitted.
4766
4767When @var{recursive?} is true, the contents of @var{file} are added
4768recursively; if @var{file} designates a flat file and @var{recursive?}
4769is true, its contents are added, and its permission bits are kept.
4770
1ec32f4a
LC
4771When @var{recursive?} is true, call @code{(@var{select?} @var{file}
4772@var{stat})} for each directory entry, where @var{file} is the entry's
4773absolute file name and @var{stat} is the result of @code{lstat}; exclude
4774entries for which @var{select?} does not return true.
4775
0a90af15
LC
4776The example below adds a file to the store, under two different names:
4777
4778@example
4779(run-with-store (open-connection)
4780 (mlet %store-monad ((a (interned-file "README"))
4781 (b (interned-file "README" "LEGU-MIN")))
4782 (return (list a b))))
4783
4784@result{} ("/gnu/store/rwm@dots{}-README" "/gnu/store/44i@dots{}-LEGU-MIN")
4785@end example
4786
4787@end deffn
4788
e87f0591
LC
4789The @code{(guix packages)} module exports the following package-related
4790monadic procedures:
4791
b860f382 4792@deffn {Monadic Procedure} package-file @var{package} [@var{file}] @
4231f05b 4793 [#:system (%current-system)] [#:target #f] @
f97c9175
AE
4794 [#:output "out"]
4795Return as a monadic
b860f382
LC
4796value in the absolute file name of @var{file} within the @var{output}
4797directory of @var{package}. When @var{file} is omitted, return the name
4231f05b
LC
4798of the @var{output} directory of @var{package}. When @var{target} is
4799true, use it as a cross-compilation target triplet.
b860f382
LC
4800@end deffn
4801
b860f382 4802@deffn {Monadic Procedure} package->derivation @var{package} [@var{system}]
4231f05b
LC
4803@deffnx {Monadic Procedure} package->cross-derivation @var{package} @
4804 @var{target} [@var{system}]
4805Monadic version of @code{package-derivation} and
4806@code{package-cross-derivation} (@pxref{Defining Packages}).
b860f382
LC
4807@end deffn
4808
4809
21b679f6
LC
4810@node G-Expressions
4811@section G-Expressions
4812
4813@cindex G-expression
4814@cindex build code quoting
4815So we have ``derivations'', which represent a sequence of build actions
4816to be performed to produce an item in the store (@pxref{Derivations}).
f97c9175 4817These build actions are performed when asking the daemon to actually
21b679f6
LC
4818build the derivations; they are run by the daemon in a container
4819(@pxref{Invoking guix-daemon}).
4820
4821@cindex strata of code
f97c9175 4822It should come as no surprise that we like to write these build actions
21b679f6
LC
4823in Scheme. When we do that, we end up with two @dfn{strata} of Scheme
4824code@footnote{The term @dfn{stratum} in this context was coined by
ef4ab0a4
LC
4825Manuel Serrano et al.@: in the context of their work on Hop. Oleg
4826Kiselyov, who has written insightful
4827@url{http://okmij.org/ftp/meta-programming/#meta-scheme, essays and code
4828on this topic}, refers to this kind of code generation as
4829@dfn{staging}.}: the ``host code''---code that defines packages, talks
4830to the daemon, etc.---and the ``build code''---code that actually
4831performs build actions, such as making directories, invoking
4832@command{make}, etc.
21b679f6
LC
4833
4834To describe a derivation and its build actions, one typically needs to
4835embed build code inside host code. It boils down to manipulating build
f97c9175 4836code as data, and the homoiconicity of Scheme---code has a direct
21b679f6 4837representation as data---comes in handy for that. But we need more than
f97c9175 4838the normal @code{quasiquote} mechanism in Scheme to construct build
21b679f6
LC
4839expressions.
4840
4841The @code{(guix gexp)} module implements @dfn{G-expressions}, a form of
4842S-expressions adapted to build expressions. G-expressions, or
f97c9175 4843@dfn{gexps}, consist essentially of three syntactic forms: @code{gexp},
21b679f6 4844@code{ungexp}, and @code{ungexp-splicing} (or simply: @code{#~},
f97c9175
AE
4845@code{#$}, and @code{#$@@}), which are comparable to
4846@code{quasiquote}, @code{unquote}, and @code{unquote-splicing},
4827b36d 4847respectively (@pxref{Expression Syntax, @code{quasiquote},, guile,
f97c9175 4848GNU Guile Reference Manual}). However, there are major differences:
21b679f6
LC
4849
4850@itemize
4851@item
4852Gexps are meant to be written to a file and run or manipulated by other
4853processes.
4854
4855@item
b39fc6f7
LC
4856When a high-level object such as a package or derivation is unquoted
4857inside a gexp, the result is as if its output file name had been
4858introduced.
ff40e9b7 4859
21b679f6
LC
4860@item
4861Gexps carry information about the packages or derivations they refer to,
4862and these dependencies are automatically added as inputs to the build
4863processes that use them.
4864@end itemize
4865
c2b84676 4866@cindex lowering, of high-level objects in gexps
343eacbe
LC
4867This mechanism is not limited to package and derivation
4868objects: @dfn{compilers} able to ``lower'' other high-level objects to
c2b84676
LC
4869derivations or files in the store can be defined,
4870such that these objects can also be inserted
f97c9175 4871into gexps. For example, a useful type of high-level objects that can be
343eacbe 4872inserted in a gexp is ``file-like objects'', which make it easy to
f97c9175 4873add files to the store and to refer to them in
558e8b11
LC
4874derivations and such (see @code{local-file} and @code{plain-file}
4875below.)
b39fc6f7 4876
21b679f6
LC
4877To illustrate the idea, here is an example of a gexp:
4878
4879@example
4880(define build-exp
4881 #~(begin
4882 (mkdir #$output)
4883 (chdir #$output)
aff8ce7c 4884 (symlink (string-append #$coreutils "/bin/ls")
21b679f6
LC
4885 "list-files")))
4886@end example
4887
4888This gexp can be passed to @code{gexp->derivation}; we obtain a
4889derivation that builds a directory containing exactly one symlink to
4890@file{/gnu/store/@dots{}-coreutils-8.22/bin/ls}:
4891
4892@example
4893(gexp->derivation "the-thing" build-exp)
4894@end example
4895
e20fd1bf 4896As one would expect, the @code{"/gnu/store/@dots{}-coreutils-8.22"} string is
21b679f6
LC
4897substituted to the reference to the @var{coreutils} package in the
4898actual build code, and @var{coreutils} is automatically made an input to
4899the derivation. Likewise, @code{#$output} (equivalent to @code{(ungexp
f97c9175
AE
4900output)}) is replaced by a string containing the directory name of the
4901output of the derivation.
667b2508
LC
4902
4903@cindex cross compilation
4904In a cross-compilation context, it is useful to distinguish between
4905references to the @emph{native} build of a package---that can run on the
4906host---versus references to cross builds of a package. To that end, the
4907@code{#+} plays the same role as @code{#$}, but is a reference to a
4908native package build:
4909
4910@example
4911(gexp->derivation "vi"
4912 #~(begin
4913 (mkdir #$output)
4914 (system* (string-append #+coreutils "/bin/ln")
4915 "-s"
4916 (string-append #$emacs "/bin/emacs")
4917 (string-append #$output "/bin/vi")))
4a3b6aa5 4918 #:target "mips64el-linux-gnu")
667b2508
LC
4919@end example
4920
4921@noindent
4922In the example above, the native build of @var{coreutils} is used, so
4923that @command{ln} can actually run on the host; but then the
4924cross-compiled build of @var{emacs} is referenced.
4925
0bb9929e
LC
4926@cindex imported modules, for gexps
4927@findex with-imported-modules
4928Another gexp feature is @dfn{imported modules}: sometimes you want to be
4929able to use certain Guile modules from the ``host environment'' in the
4930gexp, so those modules should be imported in the ``build environment''.
4931The @code{with-imported-modules} form allows you to express that:
4932
4933@example
4934(let ((build (with-imported-modules '((guix build utils))
4935 #~(begin
4936 (use-modules (guix build utils))
4937 (mkdir-p (string-append #$output "/bin"))))))
4938 (gexp->derivation "empty-dir"
4939 #~(begin
4940 #$build
4941 (display "success!\n")
4942 #t)))
4943@end example
4944
4945@noindent
4946In this example, the @code{(guix build utils)} module is automatically
4947pulled into the isolated build environment of our gexp, such that
4948@code{(use-modules (guix build utils))} works as expected.
4949
7ca87354
LC
4950@cindex module closure
4951@findex source-module-closure
4952Usually you want the @emph{closure} of the module to be imported---i.e.,
4953the module itself and all the modules it depends on---rather than just
4954the module; failing to do that, attempts to use the module will fail
4955because of missing dependent modules. The @code{source-module-closure}
4956procedure computes the closure of a module by looking at its source file
4957headers, which comes in handy in this case:
4958
4959@example
4960(use-modules (guix modules)) ;for 'source-module-closure'
4961
4962(with-imported-modules (source-module-closure
4963 '((guix build utils)
4964 (gnu build vm)))
4965 (gexp->derivation "something-with-vms"
4966 #~(begin
4967 (use-modules (guix build utils)
4968 (gnu build vm))
4969 @dots{})))
4970@end example
4971
667b2508 4972The syntactic form to construct gexps is summarized below.
21b679f6
LC
4973
4974@deffn {Scheme Syntax} #~@var{exp}
4975@deffnx {Scheme Syntax} (gexp @var{exp})
4976Return a G-expression containing @var{exp}. @var{exp} may contain one
4977or more of the following forms:
4978
4979@table @code
4980@item #$@var{obj}
4981@itemx (ungexp @var{obj})
b39fc6f7
LC
4982Introduce a reference to @var{obj}. @var{obj} may have one of the
4983supported types, for example a package or a
21b679f6
LC
4984derivation, in which case the @code{ungexp} form is replaced by its
4985output file name---e.g., @code{"/gnu/store/@dots{}-coreutils-8.22}.
4986
b39fc6f7
LC
4987If @var{obj} is a list, it is traversed and references to supported
4988objects are substituted similarly.
21b679f6
LC
4989
4990If @var{obj} is another gexp, its contents are inserted and its
4991dependencies are added to those of the containing gexp.
4992
4993If @var{obj} is another kind of object, it is inserted as is.
4994
b39fc6f7
LC
4995@item #$@var{obj}:@var{output}
4996@itemx (ungexp @var{obj} @var{output})
21b679f6 4997This is like the form above, but referring explicitly to the
b39fc6f7
LC
4998@var{output} of @var{obj}---this is useful when @var{obj} produces
4999multiple outputs (@pxref{Packages with Multiple Outputs}).
21b679f6 5000
667b2508
LC
5001@item #+@var{obj}
5002@itemx #+@var{obj}:output
5003@itemx (ungexp-native @var{obj})
5004@itemx (ungexp-native @var{obj} @var{output})
5005Same as @code{ungexp}, but produces a reference to the @emph{native}
5006build of @var{obj} when used in a cross compilation context.
5007
21b679f6
LC
5008@item #$output[:@var{output}]
5009@itemx (ungexp output [@var{output}])
5010Insert a reference to derivation output @var{output}, or to the main
5011output when @var{output} is omitted.
5012
5013This only makes sense for gexps passed to @code{gexp->derivation}.
5014
5015@item #$@@@var{lst}
5016@itemx (ungexp-splicing @var{lst})
5017Like the above, but splices the contents of @var{lst} inside the
5018containing list.
5019
667b2508
LC
5020@item #+@@@var{lst}
5021@itemx (ungexp-native-splicing @var{lst})
5022Like the above, but refers to native builds of the objects listed in
5023@var{lst}.
5024
21b679f6
LC
5025@end table
5026
5027G-expressions created by @code{gexp} or @code{#~} are run-time objects
5028of the @code{gexp?} type (see below.)
5029@end deffn
5030
0bb9929e
LC
5031@deffn {Scheme Syntax} with-imported-modules @var{modules} @var{body}@dots{}
5032Mark the gexps defined in @var{body}@dots{} as requiring @var{modules}
d938a58b
LC
5033in their execution environment.
5034
5035Each item in @var{modules} can be the name of a module, such as
5036@code{(guix build utils)}, or it can be a module name, followed by an
5037arrow, followed by a file-like object:
5038
5039@example
5040`((guix build utils)
5041 (guix gcrypt)
5042 ((guix config) => ,(scheme-file "config.scm"
5043 #~(define-module @dots{}))))
5044@end example
5045
5046@noindent
5047In the example above, the first two modules are taken from the search
5048path, and the last one is created from the given file-like object.
0bb9929e
LC
5049
5050This form has @emph{lexical} scope: it has an effect on the gexps
5051directly defined in @var{body}@dots{}, but not on those defined, say, in
5052procedures called from @var{body}@dots{}.
5053@end deffn
5054
21b679f6
LC
5055@deffn {Scheme Procedure} gexp? @var{obj}
5056Return @code{#t} if @var{obj} is a G-expression.
5057@end deffn
5058
5059G-expressions are meant to be written to disk, either as code building
5060some derivation, or as plain files in the store. The monadic procedures
5061below allow you to do that (@pxref{The Store Monad}, for more
5062information about monads.)
5063
5064@deffn {Monadic Procedure} gexp->derivation @var{name} @var{exp} @
ce45eb4c 5065 [#:system (%current-system)] [#:target #f] [#:graft? #t] @
21b679f6
LC
5066 [#:hash #f] [#:hash-algo #f] @
5067 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
4684f301 5068 [#:module-path @var{%load-path}] @
c8351d9a 5069 [#:references-graphs #f] [#:allowed-references #f] @
3f4ecf32 5070 [#:disallowed-references #f] @
c0468155 5071 [#:leaked-env-vars #f] @
0309e1b0 5072 [#:script-name (string-append @var{name} "-builder")] @
a912c723 5073 [#:deprecation-warnings #f] @
4a6aeb67 5074 [#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
21b679f6 5075Return a derivation @var{name} that runs @var{exp} (a gexp) with
0309e1b0
LC
5076@var{guile-for-build} (a derivation) on @var{system}; @var{exp} is
5077stored in a file called @var{script-name}. When @var{target} is true,
5078it is used as the cross-compilation target triplet for packages referred
5079to by @var{exp}.
21b679f6 5080
0bb9929e
LC
5081@var{modules} is deprecated in favor of @code{with-imported-modules}.
5082Its meaning is to
5083make @var{modules} available in the evaluation context of @var{exp};
ce45eb4c
LC
5084@var{modules} is a list of names of Guile modules searched in
5085@var{module-path} to be copied in the store, compiled, and made available in
21b679f6
LC
5086the load path during the execution of @var{exp}---e.g., @code{((guix
5087build utils) (guix build gnu-build-system))}.
5088
ce45eb4c
LC
5089@var{graft?} determines whether packages referred to by @var{exp} should be grafted when
5090applicable.
5091
b53833b2
LC
5092When @var{references-graphs} is true, it must be a list of tuples of one of the
5093following forms:
5094
5095@example
5096(@var{file-name} @var{package})
5097(@var{file-name} @var{package} @var{output})
5098(@var{file-name} @var{derivation})
5099(@var{file-name} @var{derivation} @var{output})
5100(@var{file-name} @var{store-item})
5101@end example
5102
5103The right-hand-side of each element of @var{references-graphs} is automatically made
5104an input of the build process of @var{exp}. In the build environment, each
5105@var{file-name} contains the reference graph of the corresponding item, in a simple
5106text format.
5107
c8351d9a
LC
5108@var{allowed-references} must be either @code{#f} or a list of output names and packages.
5109In the latter case, the list denotes store items that the result is allowed to
5110refer to. Any reference to another store item will lead to a build error.
3f4ecf32
LC
5111Similarly for @var{disallowed-references}, which can list items that must not be
5112referenced by the outputs.
c8351d9a 5113
a912c723
LC
5114@var{deprecation-warnings} determines whether to show deprecation warnings while
5115compiling modules. It can be @code{#f}, @code{#t}, or @code{'detailed}.
5116
e20fd1bf 5117The other arguments are as for @code{derivation} (@pxref{Derivations}).
21b679f6
LC
5118@end deffn
5119
343eacbe 5120@cindex file-like objects
e1c153e0
LC
5121The @code{local-file}, @code{plain-file}, @code{computed-file},
5122@code{program-file}, and @code{scheme-file} procedures below return
5123@dfn{file-like objects}. That is, when unquoted in a G-expression,
5124these objects lead to a file in the store. Consider this G-expression:
343eacbe
LC
5125
5126@example
a9e5e92f 5127#~(system* #$(file-append glibc "/sbin/nscd") "-f"
343eacbe
LC
5128 #$(local-file "/tmp/my-nscd.conf"))
5129@end example
5130
5131The effect here is to ``intern'' @file{/tmp/my-nscd.conf} by copying it
5132to the store. Once expanded, for instance @i{via}
5133@code{gexp->derivation}, the G-expression refers to that copy under
5134@file{/gnu/store}; thus, modifying or removing the file in @file{/tmp}
5135does not have any effect on what the G-expression does.
5136@code{plain-file} can be used similarly; it differs in that the file
5137content is directly passed as a string.
5138
d9ae938f 5139@deffn {Scheme Procedure} local-file @var{file} [@var{name}] @
0687fc9c 5140 [#:recursive? #f] [#:select? (const #t)]
d9ae938f 5141Return an object representing local file @var{file} to add to the store; this
9d3994f7
LC
5142object can be used in a gexp. If @var{file} is a relative file name, it is looked
5143up relative to the source file where this form appears. @var{file} will be added to
5144the store under @var{name}--by default the base name of @var{file}.
d9ae938f
LC
5145
5146When @var{recursive?} is true, the contents of @var{file} are added recursively; if @var{file}
5147designates a flat file and @var{recursive?} is true, its contents are added, and its
5148permission bits are kept.
5149
0687fc9c
LC
5150When @var{recursive?} is true, call @code{(@var{select?} @var{file}
5151@var{stat})} for each directory entry, where @var{file} is the entry's
5152absolute file name and @var{stat} is the result of @code{lstat}; exclude
5153entries for which @var{select?} does not return true.
5154
d9ae938f
LC
5155This is the declarative counterpart of the @code{interned-file} monadic
5156procedure (@pxref{The Store Monad, @code{interned-file}}).
5157@end deffn
5158
558e8b11
LC
5159@deffn {Scheme Procedure} plain-file @var{name} @var{content}
5160Return an object representing a text file called @var{name} with the given
5161@var{content} (a string) to be added to the store.
5162
5163This is the declarative counterpart of @code{text-file}.
5164@end deffn
5165
91937029 5166@deffn {Scheme Procedure} computed-file @var{name} @var{gexp} @
a769bffb 5167 [#:options '(#:local-build? #t)]
91937029 5168Return an object representing the store item @var{name}, a file or
a769bffb 5169directory computed by @var{gexp}. @var{options}
91937029
LC
5170is a list of additional arguments to pass to @code{gexp->derivation}.
5171
5172This is the declarative counterpart of @code{gexp->derivation}.
5173@end deffn
5174
1ae16033
LC
5175@deffn {Monadic Procedure} gexp->script @var{name} @var{exp} @
5176 [#:guile (default-guile)] [#:module-path %load-path]
21b679f6 5177Return an executable script @var{name} that runs @var{exp} using
9c14a487 5178@var{guile}, with @var{exp}'s imported modules in its search path.
1ae16033 5179Look up @var{exp}'s modules in @var{module-path}.
21b679f6
LC
5180
5181The example below builds a script that simply invokes the @command{ls}
5182command:
5183
5184@example
5185(use-modules (guix gexp) (gnu packages base))
5186
5187(gexp->script "list-files"
a9e5e92f 5188 #~(execl #$(file-append coreutils "/bin/ls")
21b679f6
LC
5189 "ls"))
5190@end example
5191
5192When ``running'' it through the store (@pxref{The Store Monad,
e20fd1bf 5193@code{run-with-store}}), we obtain a derivation that produces an
21b679f6
LC
5194executable file @file{/gnu/store/@dots{}-list-files} along these lines:
5195
5196@example
5197#!/gnu/store/@dots{}-guile-2.0.11/bin/guile -ds
5198!#
a9e5e92f 5199(execl "/gnu/store/@dots{}-coreutils-8.22"/bin/ls" "ls")
21b679f6
LC
5200@end example
5201@end deffn
5202
15a01c72 5203@deffn {Scheme Procedure} program-file @var{name} @var{exp} @
427ec19e 5204 [#:guile #f] [#:module-path %load-path]
15a01c72
LC
5205Return an object representing the executable store item @var{name} that
5206runs @var{gexp}. @var{guile} is the Guile package used to execute that
427ec19e 5207script. Imported modules of @var{gexp} are looked up in @var{module-path}.
15a01c72
LC
5208
5209This is the declarative counterpart of @code{gexp->script}.
5210@end deffn
5211
2b418579 5212@deffn {Monadic Procedure} gexp->file @var{name} @var{exp} @
1ae16033
LC
5213 [#:set-load-path? #t] [#:module-path %load-path] @
5214 [#:guile (default-guile)]
21b679f6 5215Return a derivation that builds a file @var{name} containing @var{exp}.
2b418579
LC
5216When @var{set-load-path?} is true, emit code in the resulting file to
5217set @code{%load-path} and @code{%load-compiled-path} to honor
1ae16033
LC
5218@var{exp}'s imported modules. Look up @var{exp}'s modules in
5219@var{module-path}.
21b679f6
LC
5220
5221The resulting file holds references to all the dependencies of @var{exp}
5222or a subset thereof.
5223@end deffn
1ed19464 5224
e1c153e0
LC
5225@deffn {Scheme Procedure} scheme-file @var{name} @var{exp}
5226Return an object representing the Scheme file @var{name} that contains
5227@var{exp}.
5228
5229This is the declarative counterpart of @code{gexp->file}.
5230@end deffn
5231
1ed19464
LC
5232@deffn {Monadic Procedure} text-file* @var{name} @var{text} @dots{}
5233Return as a monadic value a derivation that builds a text file
5234containing all of @var{text}. @var{text} may list, in addition to
d9ae938f
LC
5235strings, objects of any type that can be used in a gexp: packages,
5236derivations, local file objects, etc. The resulting store file holds
5237references to all these.
1ed19464
LC
5238
5239This variant should be preferred over @code{text-file} anytime the file
5240to create will reference items from the store. This is typically the
5241case when building a configuration file that embeds store file names,
5242like this:
5243
5244@example
5245(define (profile.sh)
5246 ;; Return the name of a shell script in the store that
5247 ;; initializes the 'PATH' environment variable.
5248 (text-file* "profile.sh"
5249 "export PATH=" coreutils "/bin:"
5250 grep "/bin:" sed "/bin\n"))
5251@end example
5252
5253In this example, the resulting @file{/gnu/store/@dots{}-profile.sh} file
b7899749 5254will reference @var{coreutils}, @var{grep}, and @var{sed}, thereby
1ed19464
LC
5255preventing them from being garbage-collected during its lifetime.
5256@end deffn
21b679f6 5257
b751cde3
LC
5258@deffn {Scheme Procedure} mixed-text-file @var{name} @var{text} @dots{}
5259Return an object representing store file @var{name} containing
5260@var{text}. @var{text} is a sequence of strings and file-like objects,
5261as in:
5262
5263@example
5264(mixed-text-file "profile"
5265 "export PATH=" coreutils "/bin:" grep "/bin")
5266@end example
5267
5268This is the declarative counterpart of @code{text-file*}.
5269@end deffn
5270
dedb512f
LC
5271@deffn {Scheme Procedure} file-union @var{name} @var{files}
5272Return a @code{<computed-file>} that builds a directory containing all of @var{files}.
5273Each item in @var{files} must be a two-element list where the first element is the
5274file name to use in the new directory, and the second element is a gexp
5275denoting the target file. Here's an example:
5276
5277@example
5278(file-union "etc"
5279 `(("hosts" ,(plain-file "hosts"
5280 "127.0.0.1 localhost"))
5281 ("bashrc" ,(plain-file "bashrc"
5282 "alias ls='ls --color'"))))
5283@end example
5284
5285This yields an @code{etc} directory containing these two files.
5286@end deffn
5287
d298c815
LC
5288@deffn {Scheme Procedure} directory-union @var{name} @var{things}
5289Return a directory that is the union of @var{things}, where @var{things} is a list of
5290file-like objects denoting directories. For example:
5291
5292@example
5293(directory-union "guile+emacs" (list guile emacs))
5294@end example
5295
5296yields a directory that is the union of the @code{guile} and @code{emacs} packages.
5297@end deffn
5298
a9e5e92f
LC
5299@deffn {Scheme Procedure} file-append @var{obj} @var{suffix} @dots{}
5300Return a file-like object that expands to the concatenation of @var{obj}
5301and @var{suffix}, where @var{obj} is a lowerable object and each
5302@var{suffix} is a string.
5303
5304As an example, consider this gexp:
5305
5306@example
5307(gexp->script "run-uname"
5308 #~(system* #$(file-append coreutils
5309 "/bin/uname")))
5310@end example
5311
5312The same effect could be achieved with:
5313
5314@example
5315(gexp->script "run-uname"
5316 #~(system* (string-append #$coreutils
5317 "/bin/uname")))
5318@end example
5319
5320There is one difference though: in the @code{file-append} case, the
5321resulting script contains the absolute file name as a string, whereas in
5322the second case, the resulting script contains a @code{(string-append
5323@dots{})} expression to construct the file name @emph{at run time}.
5324@end deffn
5325
5326
21b679f6
LC
5327Of course, in addition to gexps embedded in ``host'' code, there are
5328also modules containing build tools. To make it clear that they are
5329meant to be used in the build stratum, these modules are kept in the
5330@code{(guix build @dots{})} name space.
5331
c2b84676
LC
5332@cindex lowering, of high-level objects in gexps
5333Internally, high-level objects are @dfn{lowered}, using their compiler,
5334to either derivations or store items. For instance, lowering a package
5335yields a derivation, and lowering a @code{plain-file} yields a store
5336item. This is achieved using the @code{lower-object} monadic procedure.
5337
5338@deffn {Monadic Procedure} lower-object @var{obj} [@var{system}] @
5339 [#:target #f]
5340Return as a value in @var{%store-monad} the derivation or store item
5341corresponding to @var{obj} for @var{system}, cross-compiling for
5342@var{target} if @var{target} is true. @var{obj} must be an object that
5343has an associated gexp compiler, such as a @code{<package>}.
5344@end deffn
5345
21b679f6 5346
568717fd
LC
5347@c *********************************************************************
5348@node Utilities
5349@chapter Utilities
5350
6f773606
LC
5351This section describes Guix command-line utilities. Some of them are
5352primarily targeted at developers and users who write new package
5353definitions, while others are more generally useful. They complement
5354the Scheme programming interface of Guix in a convenient way.
210cc920 5355
568717fd 5356@menu
37166310 5357* Invoking guix build:: Building packages from the command line.
39bee8a2 5358* Invoking guix edit:: Editing package definitions.
210cc920 5359* Invoking guix download:: Downloading a file and printing its hash.
37166310 5360* Invoking guix hash:: Computing the cryptographic hash of a file.
2f7d2d91 5361* Invoking guix import:: Importing package definitions.
37166310 5362* Invoking guix refresh:: Updating package definitions.
b4f5e0e8 5363* Invoking guix lint:: Finding errors in package definitions.
fcc58db6 5364* Invoking guix size:: Profiling disk usage.
88856916 5365* Invoking guix graph:: Visualizing the graph of packages.
372c4bbc 5366* Invoking guix environment:: Setting up development environments.
aff8ce7c 5367* Invoking guix publish:: Sharing substitutes.
d23c20f1 5368* Invoking guix challenge:: Challenging substitute servers.
f11c444d 5369* Invoking guix copy:: Copying to and from a remote store.
32efa254 5370* Invoking guix container:: Process isolation.
585347d7 5371* Invoking guix weather:: Assessing substitute availability.
568717fd
LC
5372@end menu
5373
e49951eb
MW
5374@node Invoking guix build
5375@section Invoking @command{guix build}
568717fd 5376
e32171ee
JD
5377@cindex package building
5378@cindex @command{guix build}
e49951eb 5379The @command{guix build} command builds packages or derivations and
6798a8e4
LC
5380their dependencies, and prints the resulting store paths. Note that it
5381does not modify the user's profile---this is the job of the
e49951eb 5382@command{guix package} command (@pxref{Invoking guix package}). Thus,
6798a8e4
LC
5383it is mainly useful for distribution developers.
5384
5385The general syntax is:
c78bd12b
LC
5386
5387@example
e49951eb 5388guix build @var{options} @var{package-or-derivation}@dots{}
c78bd12b
LC
5389@end example
5390
f97c9175 5391As an example, the following command builds the latest versions of Emacs
ccd7158d
LC
5392and of Guile, displays their build logs, and finally displays the
5393resulting directories:
5394
5395@example
5396guix build emacs guile
5397@end example
5398
5399Similarly, the following command builds all the available packages:
5400
5401@example
5284339d 5402guix build --quiet --keep-going \
ccd7158d
LC
5403 `guix package -A | cut -f1,2 --output-delimiter=@@`
5404@end example
5405
c78bd12b 5406@var{package-or-derivation} may be either the name of a package found in
5401dd75 5407the software distribution such as @code{coreutils} or
e1a65ae5 5408@code{coreutils@@8.20}, or a derivation such as
834129e0 5409@file{/gnu/store/@dots{}-coreutils-8.19.drv}. In the former case, a
e7f34eb0
LC
5410package with the corresponding name (and optionally version) is searched
5411for among the GNU distribution modules (@pxref{Package Modules}).
5412
5413Alternatively, the @code{--expression} option may be used to specify a
5414Scheme expression that evaluates to a package; this is useful when
b7899749 5415disambiguating among several same-named packages or package variants is
e7f34eb0 5416needed.
c78bd12b 5417
ccd7158d
LC
5418There may be zero or more @var{options}. The available options are
5419described in the subsections below.
5420
5421@menu
5422* Common Build Options:: Build options for most commands.
f11c444d 5423* Package Transformation Options:: Creating variants of packages.
ccd7158d 5424* Additional Build Options:: Options specific to 'guix build'.
10f4353d 5425* Debugging Build Failures:: Real life packaging experience.
ccd7158d
LC
5426@end menu
5427
5428@node Common Build Options
5429@subsection Common Build Options
5430
5431A number of options that control the build process are common to
5432@command{guix build} and other commands that can spawn builds, such as
5433@command{guix package} or @command{guix archive}. These are the
5434following:
5435
5436@table @code
5437
5438@item --load-path=@var{directory}
5439@itemx -L @var{directory}
5440Add @var{directory} to the front of the package module search path
5441(@pxref{Package Modules}).
5442
5443This allows users to define their own packages and make them visible to
5444the command-line tools.
5445
5446@item --keep-failed
5447@itemx -K
b7899749 5448Keep the build tree of failed builds. Thus, if a build fails, its build
ccd7158d
LC
5449tree is kept under @file{/tmp}, in a directory whose name is shown at
5450the end of the build log. This is useful when debugging build issues.
fc06b15e
AP
5451@xref{Debugging Build Failures}, for tips and tricks on how to debug
5452build issues.
ccd7158d
LC
5453
5454@item --keep-going
5455@itemx -k
5456Keep going when some of the derivations fail to build; return only once
5457all the builds have either completed or failed.
5458
5459The default behavior is to stop as soon as one of the specified
5460derivations has failed.
5461
5462@item --dry-run
5463@itemx -n
5464Do not build the derivations.
5465
77f92158 5466@anchor{fallback-option}
ccd7158d
LC
5467@item --fallback
5468When substituting a pre-built binary fails, fall back to building
77f92158 5469packages locally (@pxref{Substitution Failure}).
ccd7158d
LC
5470
5471@item --substitute-urls=@var{urls}
5472@anchor{client-substitute-urls}
5473Consider @var{urls} the whitespace-separated list of substitute source
5474URLs, overriding the default list of URLs of @command{guix-daemon}
5475(@pxref{daemon-substitute-urls,, @command{guix-daemon} URLs}).
5476
5477This means that substitutes may be downloaded from @var{urls}, provided
5478they are signed by a key authorized by the system administrator
5479(@pxref{Substitutes}).
5480
71e2065a
LC
5481When @var{urls} is the empty string, substitutes are effectively
5482disabled.
5483
ccd7158d
LC
5484@item --no-substitutes
5485Do not use substitutes for build products. That is, always build things
5486locally instead of allowing downloads of pre-built binaries
5487(@pxref{Substitutes}).
5488
7573d30f
LC
5489@item --no-grafts
5490Do not ``graft'' packages. In practice, this means that package updates
5491available as grafts are not applied. @xref{Security Updates}, for more
5492information on grafts.
5493
ccd7158d
LC
5494@item --rounds=@var{n}
5495Build each derivation @var{n} times in a row, and raise an error if
5496consecutive build results are not bit-for-bit identical.
5497
5498This is a useful way to detect non-deterministic builds processes.
5499Non-deterministic build processes are a problem because they make it
5500practically impossible for users to @emph{verify} whether third-party
5501binaries are genuine. @xref{Invoking guix challenge}, for more.
5502
5503Note that, currently, the differing build results are not kept around,
5504so you will have to manually investigate in case of an error---e.g., by
e66d1f59
ML
5505stashing one of the build results with @code{guix archive --export}
5506(@pxref{Invoking guix archive}), then rebuilding, and finally comparing
5507the two results.
ccd7158d
LC
5508
5509@item --no-build-hook
f97c9175 5510Do not attempt to offload builds @i{via} the ``build hook'' of the daemon
ccd7158d
LC
5511(@pxref{Daemon Offload Setup}). That is, always build things locally
5512instead of offloading builds to remote machines.
5513
5514@item --max-silent-time=@var{seconds}
5515When the build or substitution process remains silent for more than
5516@var{seconds}, terminate it and report a build failure.
5517
2ca9f51e
LC
5518By default, the daemon's setting is honored (@pxref{Invoking
5519guix-daemon, @code{--max-silent-time}}).
5520
ccd7158d
LC
5521@item --timeout=@var{seconds}
5522Likewise, when the build or substitution process lasts for more than
5523@var{seconds}, terminate it and report a build failure.
5524
2ca9f51e
LC
5525By default, the daemon's setting is honored (@pxref{Invoking
5526guix-daemon, @code{--timeout}}).
ccd7158d
LC
5527
5528@item --verbosity=@var{level}
5529Use the given verbosity level. @var{level} must be an integer between 0
5530and 5; higher means more verbose output. Setting a level of 4 or more
5531may be helpful when debugging setup issues with the build daemon.
5532
5533@item --cores=@var{n}
5534@itemx -c @var{n}
5535Allow the use of up to @var{n} CPU cores for the build. The special
5536value @code{0} means to use as many CPU cores as available.
5537
5538@item --max-jobs=@var{n}
5539@itemx -M @var{n}
5540Allow at most @var{n} build jobs in parallel. @xref{Invoking
5541guix-daemon, @code{--max-jobs}}, for details about this option and the
5542equivalent @command{guix-daemon} option.
5543
5544@end table
5545
5546Behind the scenes, @command{guix build} is essentially an interface to
5547the @code{package-derivation} procedure of the @code{(guix packages)}
5548module, and to the @code{build-derivations} procedure of the @code{(guix
5549derivations)} module.
5550
5551In addition to options explicitly passed on the command line,
5552@command{guix build} and other @command{guix} commands that support
5553building honor the @code{GUIX_BUILD_OPTIONS} environment variable.
5554
5555@defvr {Environment Variable} GUIX_BUILD_OPTIONS
5556Users can define this variable to a list of command line options that
5557will automatically be used by @command{guix build} and other
5558@command{guix} commands that can perform builds, as in the example
5559below:
5560
5561@example
5562$ export GUIX_BUILD_OPTIONS="--no-substitutes -c 2 -L /foo/bar"
5563@end example
5564
5565These options are parsed independently, and the result is appended to
5566the parsed command-line options.
5567@end defvr
5568
88ad6ded
LC
5569
5570@node Package Transformation Options
5571@subsection Package Transformation Options
5572
5573@cindex package variants
5574Another set of command-line options supported by @command{guix build}
b8638f03 5575and also @command{guix package} are @dfn{package transformation
f97c9175 5576options}. These are options that make it possible to define @dfn{package
b8638f03
LC
5577variants}---for instance, packages built from different source code.
5578This is a convenient way to create customized packages on the fly
5579without having to type in the definitions of package variants
5580(@pxref{Defining Packages}).
88ad6ded
LC
5581
5582@table @code
5583
5584@item --with-source=@var{source}
3e30cdf1
LC
5585@itemx --with-source=@var{package}=@var{source}
5586@itemx --with-source=@var{package}@@@var{version}=@var{source}
5587Use @var{source} as the source of @var{package}, and @var{version} as
5588its version number.
88ad6ded
LC
5589@var{source} must be a file name or a URL, as for @command{guix
5590download} (@pxref{Invoking guix download}).
5591
3e30cdf1
LC
5592When @var{package} is omitted,
5593it is taken to be the package name specified on the
5594command line that matches the base of @var{source}---e.g.,
f97c9175 5595if @var{source} is @code{/src/guile-2.0.10.tar.gz}, the corresponding
3e30cdf1
LC
5596package is @code{guile}.
5597
5598Likewise, when @var{version} is omitted, the version string is inferred from
f97c9175 5599@var{source}; in the previous example, it is @code{2.0.10}.
88ad6ded
LC
5600
5601This option allows users to try out versions of packages other than the
5602one provided by the distribution. The example below downloads
5603@file{ed-1.7.tar.gz} from a GNU mirror and uses that as the source for
5604the @code{ed} package:
5605
5606@example
5607guix build ed --with-source=mirror://gnu/ed/ed-1.7.tar.gz
5608@end example
5609
5610As a developer, @code{--with-source} makes it easy to test release
5611candidates:
5612
5613@example
5614guix build guile --with-source=../guile-2.0.9.219-e1bb7.tar.xz
5615@end example
5616
5617@dots{} or to build from a checkout in a pristine environment:
5618
5619@example
5620$ git clone git://git.sv.gnu.org/guix.git
3e30cdf1 5621$ guix build guix --with-source=guix@@1.0=./guix
88ad6ded
LC
5622@end example
5623
47c0f92c
LC
5624@item --with-input=@var{package}=@var{replacement}
5625Replace dependency on @var{package} by a dependency on
5626@var{replacement}. @var{package} must be a package name, and
5627@var{replacement} must be a package specification such as @code{guile}
5628or @code{guile@@1.8}.
5629
f97c9175 5630For instance, the following command builds Guix, but replaces its
47c0f92c 5631dependency on the current stable version of Guile with a dependency on
f6396d86 5632the legacy version of Guile, @code{guile@@2.0}:
47c0f92c
LC
5633
5634@example
f6396d86 5635guix build --with-input=guile=guile@@2.0 guix
47c0f92c
LC
5636@end example
5637
5638This is a recursive, deep replacement. So in this example, both
5639@code{guix} and its dependency @code{guile-json} (which also depends on
f6396d86 5640@code{guile}) get rebuilt against @code{guile@@2.0}.
47c0f92c 5641
2a75b0b6
LC
5642This is implemented using the @code{package-input-rewriting} Scheme
5643procedure (@pxref{Defining Packages, @code{package-input-rewriting}}).
645b9df8
LC
5644
5645@item --with-graft=@var{package}=@var{replacement}
5646This is similar to @code{--with-input} but with an important difference:
9b4ec573 5647instead of rebuilding the whole dependency chain, @var{replacement} is
645b9df8
LC
5648built and then @dfn{grafted} onto the binaries that were initially
5649referring to @var{package}. @xref{Security Updates}, for more
5650information on grafts.
5651
5652For example, the command below grafts version 3.5.4 of GnuTLS onto Wget
5653and all its dependencies, replacing references to the version of GnuTLS
5654they currently refer to:
5655
5656@example
5657guix build --with-graft=gnutls=gnutls@@3.5.4 wget
5658@end example
5659
5660This has the advantage of being much faster than rebuilding everything.
5661But there is a caveat: it works if and only if @var{package} and
5662@var{replacement} are strictly compatible---for example, if they provide
5663a library, the application binary interface (ABI) of those libraries
5664must be compatible. If @var{replacement} is somehow incompatible with
5665@var{package}, then the resulting package may be unusable. Use with
5666care!
5667
88ad6ded
LC
5668@end table
5669
ccd7158d
LC
5670@node Additional Build Options
5671@subsection Additional Build Options
5672
5673The command-line options presented below are specific to @command{guix
5674build}.
c78bd12b
LC
5675
5676@table @code
5677
5284339d
LC
5678@item --quiet
5679@itemx -q
5680Build quietly, without displaying the build log. Upon completion, the
5681build log is kept in @file{/var} (or similar) and can always be
5682retrieved using the @option{--log-file} option.
5683
34a1783f
DT
5684@item --file=@var{file}
5685@itemx -f @var{file}
5686
5687Build the package or derivation that the code within @var{file}
5688evaluates to.
5689
5690As an example, @var{file} might contain a package definition like this
5691(@pxref{Defining Packages}):
5692
5693@example
5694@verbatiminclude package-hello.scm
5695@end example
5696
c78bd12b
LC
5697@item --expression=@var{expr}
5698@itemx -e @var{expr}
ac5de156 5699Build the package or derivation @var{expr} evaluates to.
c78bd12b 5700
5401dd75 5701For example, @var{expr} may be @code{(@@ (gnu packages guile)
c78bd12b
LC
5702guile-1.8)}, which unambiguously designates this specific variant of
5703version 1.8 of Guile.
5704
f97c9175 5705Alternatively, @var{expr} may be a G-expression, in which case it is used
56b82106
LC
5706as a build program passed to @code{gexp->derivation}
5707(@pxref{G-Expressions}).
5708
5709Lastly, @var{expr} may refer to a zero-argument monadic procedure
ac5de156
LC
5710(@pxref{The Store Monad}). The procedure must return a derivation as a
5711monadic value, which is then passed through @code{run-with-store}.
5712
c78bd12b
LC
5713@item --source
5714@itemx -S
f97c9175 5715Build the source derivations of the packages, rather than the packages
c78bd12b
LC
5716themselves.
5717
e49951eb 5718For instance, @code{guix build -S gcc} returns something like
f97c9175
AE
5719@file{/gnu/store/@dots{}-gcc-4.7.2.tar.bz2}, which is the GCC
5720source tarball.
c78bd12b 5721
f9cc8971 5722The returned source tarball is the result of applying any patches and
f97c9175 5723code snippets specified in the package @code{origin} (@pxref{Defining
f9cc8971
LC
5724Packages}).
5725
2cdfe13d
EB
5726@item --sources
5727Fetch and return the source of @var{package-or-derivation} and all their
5728dependencies, recursively. This is a handy way to obtain a local copy
5729of all the source code needed to build @var{packages}, allowing you to
5730eventually build them even without network access. It is an extension
5731of the @code{--source} option and can accept one of the following
5732optional argument values:
5733
5734@table @code
5735@item package
5736This value causes the @code{--sources} option to behave in the same way
5737as the @code{--source} option.
5738
5739@item all
f97c9175
AE
5740Build the source derivations of all packages, including any source that
5741might be listed as @code{inputs}. This is the default value.
2cdfe13d
EB
5742
5743@example
5744$ guix build --sources tzdata
5745The following derivations will be built:
5746 /gnu/store/@dots{}-tzdata2015b.tar.gz.drv
5747 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
5748@end example
5749
5750@item transitive
f97c9175
AE
5751Build the source derivations of all packages, as well of all transitive
5752inputs to the packages. This can be used e.g. to
2cdfe13d
EB
5753prefetch package source for later offline building.
5754
5755@example
5756$ guix build --sources=transitive tzdata
5757The following derivations will be built:
5758 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
5759 /gnu/store/@dots{}-findutils-4.4.2.tar.xz.drv
5760 /gnu/store/@dots{}-grep-2.21.tar.xz.drv
5761 /gnu/store/@dots{}-coreutils-8.23.tar.xz.drv
5762 /gnu/store/@dots{}-make-4.1.tar.xz.drv
5763 /gnu/store/@dots{}-bash-4.3.tar.xz.drv
5764@dots{}
5765@end example
5766
5767@end table
5768
c78bd12b
LC
5769@item --system=@var{system}
5770@itemx -s @var{system}
5771Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of
f97c9175 5772the system type of the build host.
c78bd12b 5773
71b98b9d
LC
5774@quotation Note
5775The @code{--system} flag is for @emph{native} compilation and must not
5776be confused with cross-compilation. See @code{--target} below for
5777information on cross-compilation.
5778@end quotation
5779
c78bd12b
LC
5780An example use of this is on Linux-based systems, which can emulate
5781different personalities. For instance, passing
71b98b9d 5782@code{--system=i686-linux} on an @code{x86_64-linux} system allows you
c78bd12b
LC
5783to build packages in a complete 32-bit environment.
5784
71b98b9d
LC
5785Similarly, when transparent emulation with QEMU and @code{binfmt_misc}
5786is enabled (@pxref{Virtualization Services,
5787@code{qemu-binfmt-service-type}}), you can build for any system for
5788which a QEMU @code{binfmt_misc} handler is installed.
5789
5790Builds for a system other than that of the machine you are using can
5791also be offloaded to a remote machine of the right architecture.
5792@xref{Daemon Offload Setup}, for more information on offloading.
5793
e55ec43d
LC
5794@item --target=@var{triplet}
5795@cindex cross-compilation
5796Cross-build for @var{triplet}, which must be a valid GNU triplet, such
5461115e
LC
5797as @code{"mips64el-linux-gnu"} (@pxref{Specifying target triplets, GNU
5798configuration triplets,, autoconf, Autoconf}).
e55ec43d 5799
a8d65643
LC
5800@anchor{build-check}
5801@item --check
5802@cindex determinism, checking
5803@cindex reproducibility, checking
5804Rebuild @var{package-or-derivation}, which are already available in the
5805store, and raise an error if the build results are not bit-for-bit
5806identical.
5807
f97c9175
AE
5808This mechanism allows you to check whether previously installed
5809substitutes are genuine (@pxref{Substitutes}), or whether the build result
5810of a package is deterministic. @xref{Invoking guix challenge}, for more
a8d65643
LC
5811background information and tools.
5812
7f3b2510
ED
5813When used in conjunction with @option{--keep-failed}, the differing
5814output is kept in the store, under @file{/gnu/store/@dots{}-check}.
5815This makes it easy to look for differences between the two results.
5816
6da5bb7b
LC
5817@item --repair
5818@cindex repairing store items
5819@cindex corruption, recovering from
5820Attempt to repair the specified store items, if they are corrupt, by
5821re-downloading or rebuilding them.
5822
5823This operation is not atomic and thus restricted to @code{root}.
5824
c78bd12b
LC
5825@item --derivations
5826@itemx -d
5827Return the derivation paths, not the output paths, of the given
5828packages.
5829
70ee5642
LC
5830@item --root=@var{file}
5831@itemx -r @var{file}
6a98b9f3
LC
5832@cindex GC roots, adding
5833@cindex garbage collector roots, adding
70ee5642
LC
5834Make @var{file} a symlink to the result, and register it as a garbage
5835collector root.
5836
6a98b9f3
LC
5837Consequently, the results of this @command{guix build} invocation are
5838protected from garbage collection until @var{file} is removed. When
5839that option is omitted, build results are eligible for garbage
5840collection as soon as the build completes. @xref{Invoking guix gc}, for
5841more on GC roots.
5842
70ee5642 5843@item --log-file
c04ffadb 5844@cindex build logs, access
3f208ad7 5845Return the build log file names or URLs for the given
f97c9175 5846@var{package-or-derivation}, or raise an error if build logs are
70ee5642
LC
5847missing.
5848
5849This works regardless of how packages or derivations are specified. For
5850instance, the following invocations are equivalent:
5851
5852@example
5853guix build --log-file `guix build -d guile`
5854guix build --log-file `guix build guile`
5855guix build --log-file guile
5856guix build --log-file -e '(@@ (gnu packages guile) guile-2.0)'
5857@end example
5858
3f208ad7
LC
5859If a log is unavailable locally, and unless @code{--no-substitutes} is
5860passed, the command looks for a corresponding log on one of the
5861substitute servers (as specified with @code{--substitute-urls}.)
70ee5642 5862
f97c9175
AE
5863So for instance, imagine you want to see the build log of GDB on MIPS,
5864but you are actually on an @code{x86_64} machine:
3f208ad7
LC
5865
5866@example
a01ad638 5867$ guix build --log-file gdb -s mips64el-linux
df061d07 5868https://hydra.gnu.org/log/@dots{}-gdb-7.10
3f208ad7
LC
5869@end example
5870
5871You can freely access a huge library of build logs!
70ee5642
LC
5872@end table
5873
fc06b15e
AP
5874@node Debugging Build Failures
5875@subsection Debugging Build Failures
5876
5877@cindex build failures, debugging
5878When defining a new package (@pxref{Defining Packages}), you will
5879probably find yourself spending some time debugging and tweaking the
5880build until it succeeds. To do that, you need to operate the build
5881commands yourself in an environment as close as possible to the one the
5882build daemon uses.
5883
5884To that end, the first thing to do is to use the @option{--keep-failed}
5885or @option{-K} option of @command{guix build}, which will keep the
5886failed build tree in @file{/tmp} or whatever directory you specified as
5887@code{TMPDIR} (@pxref{Invoking guix build, @code{--keep-failed}}).
5888
5889From there on, you can @command{cd} to the failed build tree and source
5890the @file{environment-variables} file, which contains all the
5891environment variable definitions that were in place when the build
5892failed. So let's say you're debugging a build failure in package
5893@code{foo}; a typical session would look like this:
5894
5895@example
5896$ guix build foo -K
5897@dots{} @i{build fails}
5898$ cd /tmp/guix-build-foo.drv-0
5899$ source ./environment-variables
5900$ cd foo-1.2
5901@end example
5902
5903Now, you can invoke commands as if you were the daemon (almost) and
5904troubleshoot your build process.
5905
5906Sometimes it happens that, for example, a package's tests pass when you
5907run them manually but they fail when the daemon runs them. This can
5908happen because the daemon runs builds in containers where, unlike in our
5909environment above, network access is missing, @file{/bin/sh} does not
5910exist, etc. (@pxref{Build Environment Setup}).
5911
5912In such cases, you may need to run inspect the build process from within
5913a container similar to the one the build daemon creates:
5914
5915@example
5916$ guix build -K foo
5917@dots{}
5918$ cd /tmp/guix-build-foo.drv-0
fa511e29 5919$ guix environment --no-grafts -C foo --ad-hoc strace gdb
fc06b15e
AP
5920[env]# source ./environment-variables
5921[env]# cd foo-1.2
5922@end example
5923
5924Here, @command{guix environment -C} creates a container and spawns a new
5925shell in it (@pxref{Invoking guix environment}). The @command{--ad-hoc
5926strace gdb} part adds the @command{strace} and @command{gdb} commands to
fa511e29
LC
5927the container, which would may find handy while debugging. The
5928@option{--no-grafts} option makes sure we get the exact same
5929environment, with ungrafted packages (@pxref{Security Updates}, for more
5930info on grafts).
fc06b15e
AP
5931
5932To get closer to a container like that used by the build daemon, we can
5933remove @file{/bin/sh}:
5934
5935@example
5936[env]# rm /bin/sh
5937@end example
5938
5939(Don't worry, this is harmless: this is all happening in the throw-away
5940container created by @command{guix environment}.)
5941
5942The @command{strace} command is probably not in the search path, but we
5943can run:
5944
5945@example
5946[env]# $GUIX_ENVIRONMENT/bin/strace -f -o log make check
5947@end example
5948
5949In this way, not only you will have reproduced the environment variables
5950the daemon uses, you will also be running the build process in a container
5951similar to the one the daemon uses.
5952
16eb115e 5953
39bee8a2
LC
5954@node Invoking guix edit
5955@section Invoking @command{guix edit}
5956
e32171ee 5957@cindex @command{guix edit}
39bee8a2
LC
5958@cindex package definition, editing
5959So many packages, so many source files! The @command{guix edit} command
424a323e
GC
5960facilitates the life of users and packagers by pointing their editor at
5961the source file containing the definition of the specified packages.
5962For instance:
39bee8a2
LC
5963
5964@example
7b9a66e5 5965guix edit gcc@@4.9 vim
39bee8a2
LC
5966@end example
5967
5968@noindent
6237b9fa 5969launches the program specified in the @code{VISUAL} or in the
424a323e 5970@code{EDITOR} environment variable to view the recipe of GCC@tie{}4.9.3
6237b9fa 5971and that of Vim.
39bee8a2 5972
424a323e
GC
5973If you are using a Guix Git checkout (@pxref{Building from Git}), or
5974have created your own packages on @code{GUIX_PACKAGE_PATH}
5975(@pxref{Defining Packages}), you will be able to edit the package
5976recipes. Otherwise, you will be able to examine the read-only recipes
5977for packages currently in the store.
5978
39bee8a2 5979
210cc920
LC
5980@node Invoking guix download
5981@section Invoking @command{guix download}
5982
e32171ee
JD
5983@cindex @command{guix download}
5984@cindex downloading package sources
210cc920 5985When writing a package definition, developers typically need to download
f97c9175 5986a source tarball, compute its SHA256 hash, and write that
210cc920
LC
5987hash in the package definition (@pxref{Defining Packages}). The
5988@command{guix download} tool helps with this task: it downloads a file
5989from the given URI, adds it to the store, and prints both its file name
5990in the store and its SHA256 hash.
5991
5992The fact that the downloaded file is added to the store saves bandwidth:
5993when the developer eventually tries to build the newly defined package
5994with @command{guix build}, the source tarball will not have to be
5995downloaded again because it is already in the store. It is also a
5996convenient way to temporarily stash files, which may be deleted
5997eventually (@pxref{Invoking guix gc}).
5998
5999The @command{guix download} command supports the same URIs as used in
6000package definitions. In particular, it supports @code{mirror://} URIs.
6001@code{https} URIs (HTTP over TLS) are supported @emph{provided} the
6002Guile bindings for GnuTLS are available in the user's environment; when
537c8bb3
LC
6003they are not available, an error is raised. @xref{Guile Preparations,
6004how to install the GnuTLS bindings for Guile,, gnutls-guile,
6005GnuTLS-Guile}, for more information.
210cc920 6006
bc3c41ce
LC
6007@command{guix download} verifies HTTPS server certificates by loading
6008the certificates of X.509 authorities from the directory pointed to by
6009the @code{SSL_CERT_DIR} environment variable (@pxref{X.509
64b8695c 6010Certificates}), unless @option{--no-check-certificate} is used.
bc3c41ce 6011
64b8695c 6012The following options are available:
210cc920
LC
6013
6014@table @code
6015@item --format=@var{fmt}
6016@itemx -f @var{fmt}
6017Write the hash in the format specified by @var{fmt}. For more
081145cf 6018information on the valid values for @var{fmt}, @pxref{Invoking guix hash}.
64b8695c
LC
6019
6020@item --no-check-certificate
6021Do not validate the X.509 certificates of HTTPS servers.
6022
6023When using this option, you have @emph{absolutely no guarantee} that you
6024are communicating with the authentic server responsible for the given
6025URL, which makes you vulnerable to ``man-in-the-middle'' attacks.
6026
1bcc87bb
LC
6027@item --output=@var{file}
6028@itemx -o @var{file}
6029Save the downloaded file to @var{file} instead of adding it to the
6030store.
210cc920
LC
6031@end table
6032
6c365eca
NK
6033@node Invoking guix hash
6034@section Invoking @command{guix hash}
6035
e32171ee 6036@cindex @command{guix hash}
210cc920 6037The @command{guix hash} command computes the SHA256 hash of a file.
6c365eca
NK
6038It is primarily a convenience tool for anyone contributing to the
6039distribution: it computes the cryptographic hash of a file, which can be
6040used in the definition of a package (@pxref{Defining Packages}).
6041
6042The general syntax is:
6043
6044@example
6045guix hash @var{option} @var{file}
6046@end example
6047
343dc117
LC
6048When @var{file} is @code{-} (a hyphen), @command{guix hash} computes the
6049hash of data read from standard input. @command{guix hash} has the
6050following options:
6c365eca
NK
6051
6052@table @code
6053
6054@item --format=@var{fmt}
6055@itemx -f @var{fmt}
210cc920 6056Write the hash in the format specified by @var{fmt}.
6c365eca
NK
6057
6058Supported formats: @code{nix-base32}, @code{base32}, @code{base16}
6059(@code{hex} and @code{hexadecimal} can be used as well).
6060
6061If the @option{--format} option is not specified, @command{guix hash}
6062will output the hash in @code{nix-base32}. This representation is used
6063in the definitions of packages.
6064
3140f2df
LC
6065@item --recursive
6066@itemx -r
6067Compute the hash on @var{file} recursively.
6068
6069In this case, the hash is computed on an archive containing @var{file},
f97c9175
AE
6070including its children if it is a directory. Some of the metadata of
6071@var{file} is part of the archive; for instance, when @var{file} is a
3140f2df 6072regular file, the hash is different depending on whether @var{file} is
f97c9175 6073executable or not. Metadata such as time stamps has no impact on the
3140f2df
LC
6074hash (@pxref{Invoking guix archive}).
6075@c FIXME: Replace xref above with xref to an ``Archive'' section when
6076@c it exists.
6077
392a4e12
JN
6078@item --exclude-vcs
6079@itemx -x
6080When combined with @option{--recursive}, exclude version control system
6081directories (@file{.bzr}, @file{.git}, @file{.hg}, etc.)
6082
db97a03a
LC
6083@vindex git-fetch
6084As an example, here is how you would compute the hash of a Git checkout,
6085which is useful when using the @code{git-fetch} method (@pxref{origin
6086Reference}):
6087
6088@example
6089$ git clone http://example.org/foo.git
6090$ cd foo
392a4e12 6091$ guix hash -rx .
db97a03a 6092@end example
6c365eca
NK
6093@end table
6094
2f7d2d91
LC
6095@node Invoking guix import
6096@section Invoking @command{guix import}
6097
6098@cindex importing packages
6099@cindex package import
6100@cindex package conversion
e32171ee 6101@cindex Invoking @command{guix import}
f97c9175
AE
6102The @command{guix import} command is useful for people who would like to
6103add a package to the distribution with as little work as
6104possible---a legitimate demand. The command knows of a few
6105repositories from which it can ``import'' package metadata. The result
2f7d2d91
LC
6106is a package definition, or a template thereof, in the format we know
6107(@pxref{Defining Packages}).
6108
6109The general syntax is:
6110
6111@example
6112guix import @var{importer} @var{options}@dots{}
6113@end example
6114
6115@var{importer} specifies the source from which to import package
f97c9175 6116metadata, and @var{options} specifies a package identifier and other
2f7d2d91
LC
6117options specific to @var{importer}. Currently, the available
6118``importers'' are:
6119
6120@table @code
6121@item gnu
f97c9175 6122Import metadata for the given GNU package. This provides a template
2f7d2d91
LC
6123for the latest version of that GNU package, including the hash of its
6124source tarball, and its canonical synopsis and description.
6125
f97c9175 6126Additional information such as the package dependencies and its
2f7d2d91
LC
6127license needs to be figured out manually.
6128
6129For example, the following command returns a package definition for
6130GNU@tie{}Hello:
6131
6132@example
6133guix import gnu hello
6134@end example
6135
6136Specific command-line options are:
6137
6138@table @code
6139@item --key-download=@var{policy}
6140As for @code{guix refresh}, specify the policy to handle missing OpenPGP
f97c9175 6141keys when verifying the package signature. @xref{Invoking guix
2f7d2d91
LC
6142refresh, @code{--key-download}}.
6143@end table
6144
6145@item pypi
6146@cindex pypi
f97c9175 6147Import metadata from the @uref{https://pypi.python.org/, Python Package
2f7d2d91
LC
6148Index}@footnote{This functionality requires Guile-JSON to be installed.
6149@xref{Requirements}.}. Information is taken from the JSON-formatted
6150description available at @code{pypi.python.org} and usually includes all
266785d2
CR
6151the relevant information, including package dependencies. For maximum
6152efficiency, it is recommended to install the @command{unzip} utility, so
6153that the importer can unzip Python wheels and gather data from them.
2f7d2d91 6154
f97c9175 6155The command below imports metadata for the @code{itsdangerous} Python
2f7d2d91
LC
6156package:
6157
6158@example
6159guix import pypi itsdangerous
6160@end example
6161
3aae8145
DT
6162@item gem
6163@cindex gem
f97c9175 6164Import metadata from @uref{https://rubygems.org/,
3aae8145
DT
6165RubyGems}@footnote{This functionality requires Guile-JSON to be
6166installed. @xref{Requirements}.}. Information is taken from the
6167JSON-formatted description available at @code{rubygems.org} and includes
6168most relevant information, including runtime dependencies. There are
f97c9175 6169some caveats, however. The metadata doesn't distinguish between
3aae8145
DT
6170synopses and descriptions, so the same string is used for both fields.
6171Additionally, the details of non-Ruby dependencies required to build
6172native extensions is unavailable and left as an exercise to the
6173packager.
6174
f97c9175 6175The command below imports metadata for the @code{rails} Ruby package:
3aae8145
DT
6176
6177@example
6178guix import gem rails
6179@end example
6180
d45dc6da
EB
6181@item cpan
6182@cindex CPAN
3c192e4e
AE
6183Import metadata from @uref{https://www.metacpan.org/, MetaCPAN}@footnote{This
6184functionality requires Guile-JSON to be installed.
6185@xref{Requirements}.}.
f97c9175 6186Information is taken from the JSON-formatted metadata provided through
ecb28e64 6187@uref{https://fastapi.metacpan.org/, MetaCPAN's API} and includes most
66392e47
EB
6188relevant information, such as module dependencies. License information
6189should be checked closely. If Perl is available in the store, then the
6190@code{corelist} utility will be used to filter core modules out of the
6191list of dependencies.
d45dc6da 6192
f97c9175 6193The command command below imports metadata for the @code{Acme::Boolean}
d45dc6da
EB
6194Perl module:
6195
6196@example
6197guix import cpan Acme::Boolean
6198@end example
6199
e1248602
RW
6200@item cran
6201@cindex CRAN
d0bd632f 6202@cindex Bioconductor
e9960d8c 6203Import metadata from @uref{https://cran.r-project.org/, CRAN}, the
e1248602
RW
6204central repository for the @uref{http://r-project.org, GNU@tie{}R
6205statistical and graphical environment}.
6206
f97c9175 6207Information is extracted from the @code{DESCRIPTION} file of the package.
e1248602 6208
f97c9175 6209The command command below imports metadata for the @code{Cairo}
e1248602
RW
6210R package:
6211
6212@example
6213guix import cran Cairo
6214@end example
6215
64ce53eb
RW
6216When @code{--recursive} is added, the importer will traverse the
6217dependency graph of the given upstream package recursively and generate
6218package expressions for all those packages that are not yet in Guix.
6219
f97c9175 6220When @code{--archive=bioconductor} is added, metadata is imported from
5713bbf1 6221@uref{https://www.bioconductor.org/, Bioconductor}, a repository of R
d0bd632f
RW
6222packages for for the analysis and comprehension of high-throughput
6223genomic data in bioinformatics.
6224
f97c9175 6225Information is extracted from the @code{DESCRIPTION} file of a package
d0bd632f
RW
6226published on the web interface of the Bioconductor SVN repository.
6227
f97c9175 6228The command below imports metadata for the @code{GenomicRanges}
d0bd632f
RW
6229R package:
6230
6231@example
6232guix import cran --archive=bioconductor GenomicRanges
6233@end example
6234
afbc9419
RW
6235@item texlive
6236@cindex TeX Live
6237@cindex CTAN
6238Import metadata from @uref{http://www.ctan.org/, CTAN}, the
6239comprehensive TeX archive network for TeX packages that are part of the
6240@uref{https://www.tug.org/texlive/, TeX Live distribution}.
6241
6242Information about the package is obtained through the XML API provided
6243by CTAN, while the source code is downloaded from the SVN repository of
6244the Tex Live project. This is done because the CTAN does not keep
6245versioned archives.
6246
6247The command command below imports metadata for the @code{fontspec}
6248TeX package:
6249
6250@example
6251guix import texlive fontspec
6252@end example
6253
6254When @code{--archive=DIRECTORY} is added, the source code is downloaded
6255not from the @file{latex} sub-directory of the @file{texmf-dist/source}
6256tree in the TeX Live SVN repository, but from the specified sibling
6257directory under the same root.
6258
6259The command below imports metadata for the @code{ifxetex} package from
6260CTAN while fetching the sources from the directory
6261@file{texmf/source/generic}:
6262
6263@example
6264guix import texlive --archive=generic ifxetex
6265@end example
6266
fb1db385
RW
6267@item json
6268@cindex JSON, import
6269Import package metadata from a local JSON file@footnote{This
6270functionality requires Guile-JSON to be installed.
6271@xref{Requirements}.}. Consider the following example package
6272definition in JSON format:
6273
6274@example
6275@{
6276 "name": "hello",
6277 "version": "2.10",
6278 "source": "mirror://gnu/hello/hello-2.10.tar.gz",
6279 "build-system": "gnu",
6280 "home-page": "https://www.gnu.org/software/hello/",
6281 "synopsis": "Hello, GNU world: An example GNU package",
6282 "description": "GNU Hello prints a greeting.",
6283 "license": "GPL-3.0+",
6284 "native-inputs": ["gcc@@6"]
6285@}
6286@end example
6287
6288The field names are the same as for the @code{<package>} record
6289(@xref{Defining Packages}). References to other packages are provided
6290as JSON lists of quoted package specification strings such as
6291@code{guile} or @code{guile@@2.0}.
6292
6293The importer also supports a more explicit source definition using the
6294common fields for @code{<origin>} records:
6295
6296@example
6297@{
6298 @dots{}
6299 "source": @{
6300 "method": "url-fetch",
6301 "uri": "mirror://gnu/hello/hello-2.10.tar.gz",
6302 "sha256": @{
6303 "base32": "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"
6304 @}
6305 @}
6306 @dots{}
6307@}
6308@end example
6309
6310The command below reads metadata from the JSON file @code{hello.json}
6311and outputs a package expression:
6312
6313@example
6314guix import json hello.json
6315@end example
6316
2f7d2d91 6317@item nix
f97c9175 6318Import metadata from a local copy of the source of the
2f7d2d91
LC
6319@uref{http://nixos.org/nixpkgs/, Nixpkgs distribution}@footnote{This
6320relies on the @command{nix-instantiate} command of
6321@uref{http://nixos.org/nix/, Nix}.}. Package definitions in Nixpkgs are
6322typically written in a mixture of Nix-language and Bash code. This
6323command only imports the high-level package structure that is written in
6324the Nix language. It normally includes all the basic fields of a
6325package definition.
6326
6327When importing a GNU package, the synopsis and descriptions are replaced
6328by their canonical upstream variant.
6329
961d0d2d
LC
6330Usually, you will first need to do:
6331
6332@example
6333export NIX_REMOTE=daemon
6334@end example
6335
6336@noindent
6337so that @command{nix-instantiate} does not try to open the Nix database.
6338
2f7d2d91
LC
6339As an example, the command below imports the package definition of
6340LibreOffice (more precisely, it imports the definition of the package
6341bound to the @code{libreoffice} top-level attribute):
6342
6343@example
6344guix import nix ~/path/to/nixpkgs libreoffice
6345@end example
863af4e1
FB
6346
6347@item hackage
6348@cindex hackage
f97c9175 6349Import metadata from the Haskell community's central package archive
863af4e1
FB
6350@uref{https://hackage.haskell.org/, Hackage}. Information is taken from
6351Cabal files and includes all the relevant information, including package
6352dependencies.
6353
6354Specific command-line options are:
6355
6356@table @code
a4154748
FB
6357@item --stdin
6358@itemx -s
f97c9175 6359Read a Cabal file from standard input.
863af4e1
FB
6360@item --no-test-dependencies
6361@itemx -t
f97c9175 6362Do not include dependencies required only by the test suites.
a4154748
FB
6363@item --cabal-environment=@var{alist}
6364@itemx -e @var{alist}
6365@var{alist} is a Scheme alist defining the environment in which the
6366Cabal conditionals are evaluated. The accepted keys are: @code{os},
6367@code{arch}, @code{impl} and a string representing the name of a flag.
6368The value associated with a flag has to be either the symbol
6369@code{true} or @code{false}. The value associated with other keys
6370has to conform to the Cabal file format definition. The default value
6371associated with the keys @code{os}, @code{arch} and @code{impl} is
f97c9175 6372@samp{linux}, @samp{x86_64} and @samp{ghc}, respectively.
863af4e1
FB
6373@end table
6374
f97c9175 6375The command below imports metadata for the latest version of the
a4154748
FB
6376@code{HTTP} Haskell package without including test dependencies and
6377specifying the value of the flag @samp{network-uri} as @code{false}:
863af4e1
FB
6378
6379@example
a4154748 6380guix import hackage -t -e "'((\"network-uri\" . false))" HTTP
863af4e1
FB
6381@end example
6382
6383A specific package version may optionally be specified by following the
1b846da8 6384package name by an at-sign and a version number as in the following example:
863af4e1
FB
6385
6386@example
1b846da8 6387guix import hackage mtl@@2.1.3.1
863af4e1 6388@end example
7f74a931 6389
bc5844d1
FB
6390@item stackage
6391@cindex stackage
6392The @code{stackage} importer is a wrapper around the @code{hackage} one.
6393It takes a package name, looks up the package version included in a
6394long-term support (LTS) @uref{https://www.stackage.org, Stackage}
6395release and uses the @code{hackage} importer to retrieve its metadata.
6396Note that it is up to you to select an LTS release compatible with the
6397GHC compiler used by Guix.
6398
6399Specific command-line options are:
6400
6401@table @code
6402@item --no-test-dependencies
6403@itemx -t
6404Do not include dependencies required only by the test suites.
6405@item --lts-version=@var{version}
6406@itemx -r @var{version}
6407@var{version} is the desired LTS release version. If omitted the latest
6408release is used.
6409@end table
6410
6411The command below imports metadata for the @code{HTTP} Haskell package
6412included in the LTS Stackage release version 7.18:
6413
6414@example
6415guix import stackage --lts-version=7.18 HTTP
6416@end example
6417
7f74a931
FB
6418@item elpa
6419@cindex elpa
f97c9175 6420Import metadata from an Emacs Lisp Package Archive (ELPA) package
7f74a931
FB
6421repository (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
6422
6423Specific command-line options are:
6424
6425@table @code
6426@item --archive=@var{repo}
6427@itemx -a @var{repo}
6428@var{repo} identifies the archive repository from which to retrieve the
6429information. Currently the supported repositories and their identifiers
6430are:
6431@itemize -
6432@item
840bd1d3 6433@uref{http://elpa.gnu.org/packages, GNU}, selected by the @code{gnu}
7f74a931
FB
6434identifier. This is the default.
6435
624144e0
LC
6436Packages from @code{elpa.gnu.org} are signed with one of the keys
6437contained in the GnuPG keyring at
6438@file{share/emacs/25.1/etc/package-keyring.gpg} (or similar) in the
6439@code{emacs} package (@pxref{Package Installation, ELPA package
6440signatures,, emacs, The GNU Emacs Manual}).
6441
7f74a931 6442@item
840bd1d3 6443@uref{http://stable.melpa.org/packages, MELPA-Stable}, selected by the
7f74a931
FB
6444@code{melpa-stable} identifier.
6445
6446@item
840bd1d3 6447@uref{http://melpa.org/packages, MELPA}, selected by the @code{melpa}
7f74a931
FB
6448identifier.
6449@end itemize
6450@end table
3e0c0365
DC
6451
6452@item crate
6453@cindex crate
6454Import metadata from the crates.io Rust package repository
6455@uref{https://crates.io, crates.io}.
2f7d2d91
LC
6456@end table
6457
6458The structure of the @command{guix import} code is modular. It would be
6459useful to have more importers for other package formats, and your help
6460is welcome here (@pxref{Contributing}).
6461
37166310
LC
6462@node Invoking guix refresh
6463@section Invoking @command{guix refresh}
6464
e32171ee 6465@cindex @command {guix refresh}
37166310
LC
6466The primary audience of the @command{guix refresh} command is developers
6467of the GNU software distribution. By default, it reports any packages
6468provided by the distribution that are outdated compared to the latest
6469upstream version, like this:
6470
6471@example
6472$ guix refresh
6473gnu/packages/gettext.scm:29:13: gettext would be upgraded from 0.18.1.1 to 0.18.2.1
6474gnu/packages/glib.scm:77:12: glib would be upgraded from 2.34.3 to 2.37.0
6475@end example
6476
e9c72306
LC
6477Alternately, one can specify packages to consider, in which case a
6478warning is emitted for packages that lack an updater:
6479
6480@example
6481$ guix refresh coreutils guile guile-ssh
6482gnu/packages/ssh.scm:205:2: warning: no updater for guile-ssh
6483gnu/packages/guile.scm:136:12: guile would be upgraded from 2.0.12 to 2.0.13
6484@end example
6485
6486@command{guix refresh} browses the upstream repository of each package and determines
6487the highest version number of the releases therein. The command
bcb571cb 6488knows how to update specific types of packages: GNU packages, ELPA
e9c72306 6489packages, etc.---see the documentation for @option{--type} below. There
bcb571cb
LC
6490are many packages, though, for which it lacks a method to determine
6491whether a new upstream release is available. However, the mechanism is
6492extensible, so feel free to get in touch with us to add a new method!
37166310 6493
a5e03674
LC
6494Sometimes the upstream name differs from the package name used in Guix,
6495and @command{guix refresh} needs a little help. Most updaters honor the
6496@code{upstream-name} property in package definitions, which can be used
6497to that effect:
6498
6499@example
6500(define-public network-manager
6501 (package
6502 (name "network-manager")
6503 ;; @dots{}
6504 (properties '((upstream-name . "NetworkManager")))))
6505@end example
6506
37166310 6507When passed @code{--update}, it modifies distribution source files to
f97c9175 6508update the version numbers and source tarball hashes of those package
37166310
LC
6509recipes (@pxref{Defining Packages}). This is achieved by downloading
6510each package's latest source tarball and its associated OpenPGP
6511signature, authenticating the downloaded tarball against its signature
6512using @command{gpg}, and finally computing its hash. When the public
6513key used to sign the tarball is missing from the user's keyring, an
6514attempt is made to automatically retrieve it from a public key server;
f97c9175 6515when this is successful, the key is added to the user's keyring; otherwise,
37166310
LC
6516@command{guix refresh} reports an error.
6517
6518The following options are supported:
6519
6520@table @code
6521
2d7fc7da
LC
6522@item --expression=@var{expr}
6523@itemx -e @var{expr}
6524Consider the package @var{expr} evaluates to.
6525
6526This is useful to precisely refer to a package, as in this example:
6527
6528@example
6529guix refresh -l -e '(@@@@ (gnu packages commencement) glibc-final)'
6530@end example
6531
6532This command lists the dependents of the ``final'' libc (essentially all
6533the packages.)
6534
37166310
LC
6535@item --update
6536@itemx -u
38e16b49
LC
6537Update distribution source files (package recipes) in place. This is
6538usually run from a checkout of the Guix source tree (@pxref{Running
6539Guix Before It Is Installed}):
6540
6541@example
e9c72306 6542$ ./pre-inst-env guix refresh -s non-core -u
38e16b49
LC
6543@end example
6544
081145cf 6545@xref{Defining Packages}, for more information on package definitions.
37166310
LC
6546
6547@item --select=[@var{subset}]
6548@itemx -s @var{subset}
6549Select all the packages in @var{subset}, one of @code{core} or
6550@code{non-core}.
6551
6552The @code{core} subset refers to all the packages at the core of the
6553distribution---i.e., packages that are used to build ``everything
6554else''. This includes GCC, libc, Binutils, Bash, etc. Usually,
6555changing one of these packages in the distribution entails a rebuild of
6556all the others. Thus, such updates are an inconvenience to users in
6557terms of build time or bandwidth used to achieve the upgrade.
6558
6559The @code{non-core} subset refers to the remaining packages. It is
6560typically useful in cases where an update of the core packages would be
6561inconvenient.
6562
1335ac31
MO
6563@item --manifest=@var{file}
6564@itemx -m @var{file}
6565Select all the packages from the manifest in @var{file}. This is useful to
6566check if any packages of the user manifest can be updated.
6567
bcb571cb
LC
6568@item --type=@var{updater}
6569@itemx -t @var{updater}
7191adc5
AK
6570Select only packages handled by @var{updater} (may be a comma-separated
6571list of updaters). Currently, @var{updater} may be one of:
bcb571cb
LC
6572
6573@table @code
6574@item gnu
6575the updater for GNU packages;
e80c0f85
LC
6576@item gnome
6577the updater for GNOME packages;
9c97afe8
DC
6578@item kde
6579the updater for KDE packages;
62061d6b
AW
6580@item xorg
6581the updater for X.org packages;
2fd370e8
LC
6582@item kernel.org
6583the updater for packages hosted on kernel.org;
bcb571cb 6584@item elpa
d882c235
LC
6585the updater for @uref{http://elpa.gnu.org/, ELPA} packages;
6586@item cran
e9960d8c 6587the updater for @uref{https://cran.r-project.org/, CRAN} packages;
d0bd632f 6588@item bioconductor
5713bbf1 6589the updater for @uref{https://www.bioconductor.org/, Bioconductor} R packages;
200cdf81
EB
6590@item cpan
6591the updater for @uref{http://www.cpan.org/, CPAN} packages;
bab020d7 6592@item pypi
b9d044ef 6593the updater for @uref{https://pypi.python.org, PyPI} packages.
fbc5b815
BW
6594@item gem
6595the updater for @uref{https://rubygems.org, RubyGems} packages.
917a2a58
BW
6596@item github
6597the updater for @uref{https://github.com, GitHub} packages.
42efe27a
EB
6598@item hackage
6599the updater for @uref{https://hackage.haskell.org, Hackage} packages.
bc5844d1
FB
6600@item stackage
6601the updater for @uref{https://www.stackage.org, Stackage} packages.
8ac52987
DC
6602@item crate
6603the updater for @uref{https://crates.io, Crates} packages.
bcb571cb
LC
6604@end table
6605
f97c9175
AE
6606For instance, the following command only checks for updates of Emacs
6607packages hosted at @code{elpa.gnu.org} and for updates of CRAN packages:
bcb571cb
LC
6608
6609@example
7191adc5 6610$ guix refresh --type=elpa,cran
d882c235 6611gnu/packages/statistics.scm:819:13: r-testthat would be upgraded from 0.10.0 to 0.11.0
bcb571cb
LC
6612gnu/packages/emacs.scm:856:13: emacs-auctex would be upgraded from 11.88.6 to 11.88.9
6613@end example
6614
37166310
LC
6615@end table
6616
6617In addition, @command{guix refresh} can be passed one or more package
6618names, as in this example:
6619
6620@example
e9c72306 6621$ ./pre-inst-env guix refresh -u emacs idutils gcc@@4.8
37166310
LC
6622@end example
6623
6624@noindent
6625The command above specifically updates the @code{emacs} and
6626@code{idutils} packages. The @code{--select} option would have no
6627effect in this case.
6628
7d193ec3
EB
6629When considering whether to upgrade a package, it is sometimes
6630convenient to know which packages would be affected by the upgrade and
6631should be checked for compatibility. For this the following option may
6632be used when passing @command{guix refresh} one or more package names:
6633
6634@table @code
6635
6ffa706b
AK
6636@item --list-updaters
6637@itemx -L
6638List available updaters and exit (see @option{--type} above.)
6639
3676f892
LC
6640For each updater, display the fraction of packages it covers; at the
6641end, display the fraction of packages covered by all these updaters.
6642
7d193ec3
EB
6643@item --list-dependent
6644@itemx -l
6645List top-level dependent packages that would need to be rebuilt as a
6646result of upgrading one or more packages.
6647
b96a0640
LC
6648@xref{Invoking guix graph, the @code{reverse-package} type of
6649@command{guix graph}}, for information on how to visualize the list of
6650dependents of a package.
6651
7d193ec3
EB
6652@end table
6653
6654Be aware that the @code{--list-dependent} option only
6655@emph{approximates} the rebuilds that would be required as a result of
6656an upgrade. More rebuilds might be required under some circumstances.
6657
6658@example
7779ab61
LC
6659$ guix refresh --list-dependent flex
6660Building the following 120 packages would ensure 213 dependent packages are rebuilt:
6d1a5e5f 6661hop@@2.4.0 geiser@@0.4 notmuch@@0.18 mu@@0.9.9.5 cflow@@1.4 idutils@@4.6 @dots{}
7d193ec3
EB
6662@end example
6663
6664The command above lists a set of packages that could be built to check
6665for compatibility with an upgraded @code{flex} package.
6666
f9230085
LC
6667The following options can be used to customize GnuPG operation:
6668
6669@table @code
6670
f9230085
LC
6671@item --gpg=@var{command}
6672Use @var{command} as the GnuPG 2.x command. @var{command} is searched
6673for in @code{$PATH}.
6674
2bc53ba9
LC
6675@item --key-download=@var{policy}
6676Handle missing OpenPGP keys according to @var{policy}, which may be one
6677of:
6678
6679@table @code
6680@item always
6681Always download missing OpenPGP keys from the key server, and add them
6682to the user's GnuPG keyring.
6683
6684@item never
6685Never try to download missing OpenPGP keys. Instead just bail out.
6686
6687@item interactive
6688When a package signed with an unknown OpenPGP key is encountered, ask
6689the user whether to download it or not. This is the default behavior.
6690@end table
6691
6692@item --key-server=@var{host}
6693Use @var{host} as the OpenPGP key server when importing a public key.
6694
f9230085
LC
6695@end table
6696
917a2a58
BW
6697The @code{github} updater uses the
6698@uref{https://developer.github.com/v3/, GitHub API} to query for new
6699releases. When used repeatedly e.g. when refreshing all packages,
6700GitHub will eventually refuse to answer any further API requests. By
6701default 60 API requests per hour are allowed, and a full refresh on all
6702GitHub packages in Guix requires more than this. Authentication with
6703GitHub through the use of an API token alleviates these limits. To use
6704an API token, set the environment variable @code{GUIX_GITHUB_TOKEN} to a
6705token procured from @uref{https://github.com/settings/tokens} or
6706otherwise.
6707
6708
b4f5e0e8
CR
6709@node Invoking guix lint
6710@section Invoking @command{guix lint}
e32171ee
JD
6711
6712@cindex @command{guix lint}
6713@cindex package, checking for errors
f97c9175
AE
6714The @command{guix lint} command is meant to help package developers avoid
6715common errors and use a consistent style. It runs a number of checks on
6716a given set of packages in order to find common mistakes in their
873c4085
LC
6717definitions. Available @dfn{checkers} include (see
6718@code{--list-checkers} for a complete list):
6719
6720@table @code
6721@item synopsis
6722@itemx description
6723Validate certain typographical and stylistic rules about package
6724descriptions and synopses.
6725
6726@item inputs-should-be-native
6727Identify inputs that should most likely be native inputs.
6728
6729@item source
6730@itemx home-page
fac46e3f 6731@itemx mirror-url
50f5c46d 6732@itemx source-file-name
873c4085 6733Probe @code{home-page} and @code{source} URLs and report those that are
fac46e3f
LC
6734invalid. Suggest a @code{mirror://} URL when applicable. Check that
6735the source file name is meaningful, e.g. is not
f97c9175
AE
6736just a version number or ``git-checkout'', without a declared
6737@code{file-name} (@pxref{origin Reference}).
40a7d4e5 6738
5432734b 6739@item cve
09866b39
LC
6740@cindex security vulnerabilities
6741@cindex CVE, Common Vulnerabilities and Exposures
5432734b 6742Report known vulnerabilities found in the Common Vulnerabilities and
09866b39 6743Exposures (CVE) databases of the current and past year
5432734b
LC
6744@uref{https://nvd.nist.gov/download.cfm#CVE_FEED, published by the US
6745NIST}.
6746
09866b39
LC
6747To view information about a particular vulnerability, visit pages such as:
6748
6749@itemize
6750@item
6751@indicateurl{https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-YYYY-ABCD}
6752@item
6753@indicateurl{https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-YYYY-ABCD}
6754@end itemize
6755
6756@noindent
6757where @code{CVE-YYYY-ABCD} is the CVE identifier---e.g.,
6758@code{CVE-2015-7554}.
6759
99effc8f
LC
6760Package developers can specify in package recipes the
6761@uref{https://nvd.nist.gov/cpe.cfm,Common Platform Enumeration (CPE)}
6762name and version of the package when they differ from the name that Guix
6763uses, as in this example:
6764
6765@example
6766(package
6767 (name "grub")
6768 ;; @dots{}
6769 ;; CPE calls this package "grub2".
6770 (properties '((cpe-name . "grub2"))))
6771@end example
6772
40a7d4e5
LC
6773@item formatting
6774Warn about obvious source code formatting issues: trailing white space,
6775use of tabulations, etc.
873c4085 6776@end table
b4f5e0e8
CR
6777
6778The general syntax is:
6779
6780@example
6781guix lint @var{options} @var{package}@dots{}
6782@end example
6783
6784If no package is given on the command line, then all packages are checked.
6785The @var{options} may be zero or more of the following:
6786
6787@table @code
f97c9175
AE
6788@item --list-checkers
6789@itemx -l
6790List and describe all the available checkers that will be run on packages
6791and exit.
b4f5e0e8 6792
dd7c013d
CR
6793@item --checkers
6794@itemx -c
6795Only enable the checkers specified in a comma-separated list using the
6796names returned by @code{--list-checkers}.
6797
b4f5e0e8 6798@end table
37166310 6799
fcc58db6
LC
6800@node Invoking guix size
6801@section Invoking @command{guix size}
6802
e32171ee
JD
6803@cindex size
6804@cindex package size
6805@cindex closure
6806@cindex @command{guix size}
fcc58db6
LC
6807The @command{guix size} command helps package developers profile the
6808disk usage of packages. It is easy to overlook the impact of an
6809additional dependency added to a package, or the impact of using a
6810single output for a package that could easily be split (@pxref{Packages
f97c9175 6811with Multiple Outputs}). Such are the typical issues that
fcc58db6
LC
6812@command{guix size} can highlight.
6813
e1a65ae5 6814The command can be passed a package specification such as @code{gcc@@4.8}
fcc58db6
LC
6815or @code{guile:debug}, or a file name in the store. Consider this
6816example:
6817
6818@example
6819$ guix size coreutils
6820store item total self
6821/gnu/store/@dots{}-coreutils-8.23 70.0 13.9 19.8%
6822/gnu/store/@dots{}-gmp-6.0.0a 55.3 2.5 3.6%
6823/gnu/store/@dots{}-acl-2.2.52 53.7 0.5 0.7%
6824/gnu/store/@dots{}-attr-2.4.46 53.2 0.3 0.5%
6825/gnu/store/@dots{}-gcc-4.8.4-lib 52.9 15.7 22.4%
6826/gnu/store/@dots{}-glibc-2.21 37.2 37.2 53.1%
6827@end example
6828
6829@cindex closure
6830The store items listed here constitute the @dfn{transitive closure} of
6831Coreutils---i.e., Coreutils and all its dependencies, recursively---as
6832would be returned by:
6833
6834@example
6835$ guix gc -R /gnu/store/@dots{}-coreutils-8.23
6836@end example
6837
f97c9175 6838Here the output shows three columns next to store items. The first column,
fcc58db6
LC
6839labeled ``total'', shows the size in mebibytes (MiB) of the closure of
6840the store item---that is, its own size plus the size of all its
6841dependencies. The next column, labeled ``self'', shows the size of the
f97c9175
AE
6842item itself. The last column shows the ratio of the size of the item
6843itself to the space occupied by all the items listed here.
fcc58db6
LC
6844
6845In this example, we see that the closure of Coreutils weighs in at
684670@tie{}MiB, half of which is taken by libc. (That libc represents a
6847large fraction of the closure is not a problem @i{per se} because it is
6848always available on the system anyway.)
6849
6850When the package passed to @command{guix size} is available in the
6851store, @command{guix size} queries the daemon to determine its
6852dependencies, and measures its size in the store, similar to @command{du
6853-ms --apparent-size} (@pxref{du invocation,,, coreutils, GNU
6854Coreutils}).
6855
6856When the given package is @emph{not} in the store, @command{guix size}
f97c9175
AE
6857reports information based on the available substitutes
6858(@pxref{Substitutes}). This makes it possible it to profile disk usage of
6859store items that are not even on disk, only available remotely.
fcc58db6 6860
db761534
LC
6861You can also specify several package names:
6862
6863@example
6864$ guix size coreutils grep sed bash
6865store item total self
6866/gnu/store/@dots{}-coreutils-8.24 77.8 13.8 13.4%
6867/gnu/store/@dots{}-grep-2.22 73.1 0.8 0.8%
6868/gnu/store/@dots{}-bash-4.3.42 72.3 4.7 4.6%
6869/gnu/store/@dots{}-readline-6.3 67.6 1.2 1.2%
6870@dots{}
6871total: 102.3 MiB
6872@end example
6873
6874@noindent
6875In this example we see that the combination of the four packages takes
6876102.3@tie{}MiB in total, which is much less than the sum of each closure
6877since they have a lot of dependencies in common.
6878
a8f996c6 6879The available options are:
fcc58db6
LC
6880
6881@table @option
6882
d490d06e
LC
6883@item --substitute-urls=@var{urls}
6884Use substitute information from @var{urls}.
6885@xref{client-substitute-urls, the same option for @code{guix build}}.
6886
a6c1fe82
LC
6887@item --sort=@var{key}
6888Sort lines according to @var{key}, one of the following options:
6889
6890@table @code
a6c1fe82 6891@item self
fb255088
LC
6892the size of each item (the default);
6893@item closure
6894the total size of the item's closure.
a6c1fe82
LC
6895@end table
6896
a8f996c6 6897@item --map-file=@var{file}
f97c9175 6898Write a graphical map of disk usage in PNG format to @var{file}.
a8f996c6
LC
6899
6900For the example above, the map looks like this:
6901
6902@image{images/coreutils-size-map,5in,, map of Coreutils disk usage
6903produced by @command{guix size}}
6904
6905This option requires that
6906@uref{http://wingolog.org/software/guile-charting/, Guile-Charting} be
6907installed and visible in Guile's module search path. When that is not
6908the case, @command{guix size} fails as it tries to load it.
6909
fcc58db6
LC
6910@item --system=@var{system}
6911@itemx -s @var{system}
6912Consider packages for @var{system}---e.g., @code{x86_64-linux}.
6913
6914@end table
6915
88856916
LC
6916@node Invoking guix graph
6917@section Invoking @command{guix graph}
6918
6919@cindex DAG
e32171ee
JD
6920@cindex @command{guix graph}
6921@cindex package dependencies
88856916
LC
6922Packages and their dependencies form a @dfn{graph}, specifically a
6923directed acyclic graph (DAG). It can quickly become difficult to have a
f97c9175 6924mental model of the package DAG, so the @command{guix graph} command
9ea36197
LC
6925provides a visual representation of the DAG. By default,
6926@command{guix graph} emits a DAG representation in the input format of
88856916 6927@uref{http://www.graphviz.org/, Graphviz}, so its output can be passed
9ea36197
LC
6928directly to the @command{dot} command of Graphviz. It can also emit an
6929HTML page with embedded JavaScript code to display a ``chord diagram''
5899fafb
RJ
6930in a Web browser, using the @uref{https://d3js.org/, d3.js} library, or
6931emit Cypher queries to construct a graph in a graph database supporting
6932the @uref{http://www.opencypher.org/, openCypher} query language.
9ea36197 6933The general syntax is:
88856916
LC
6934
6935@example
6936guix graph @var{options} @var{package}@dots{}
6937@end example
6938
6939For example, the following command generates a PDF file representing the
6940package DAG for the GNU@tie{}Core Utilities, showing its build-time
6941dependencies:
6942
6943@example
6944guix graph coreutils | dot -Tpdf > dag.pdf
6945@end example
6946
6947The output looks like this:
6948
6949@image{images/coreutils-graph,2in,,Dependency graph of the GNU Coreutils}
6950
6951Nice little graph, no?
6952
f97c9175 6953But there is more than one graph! The one above is concise: it is the
88856916 6954graph of package objects, omitting implicit inputs such as GCC, libc,
f97c9175
AE
6955grep, etc. It is often useful to have such a concise graph, but
6956sometimes one may want to see more details. @command{guix graph} supports
6957several types of graphs, allowing you to choose the level of detail:
88856916
LC
6958
6959@table @code
6960@item package
f97c9175 6961This is the default type used in the example above. It shows the DAG of
88856916
LC
6962package objects, excluding implicit dependencies. It is concise, but
6963filters out many details.
6964
b96a0640
LC
6965@item reverse-package
6966This shows the @emph{reverse} DAG of packages. For example:
6967
6968@example
6969guix graph --type=reverse-package ocaml
6970@end example
6971
6972... yields the graph of packages that depend on OCaml.
6973
6974Note that for core packages this can yield huge graphs. If all you want
6975is to know the number of packages that depend on a given package, use
6976@command{guix refresh --list-dependent} (@pxref{Invoking guix refresh,
6977@option{--list-dependent}}).
6978
88856916
LC
6979@item bag-emerged
6980This is the package DAG, @emph{including} implicit inputs.
6981
6982For instance, the following command:
6983
6984@example
6985guix graph --type=bag-emerged coreutils | dot -Tpdf > dag.pdf
6986@end example
6987
6988... yields this bigger graph:
6989
6990@image{images/coreutils-bag-graph,,5in,Detailed dependency graph of the GNU Coreutils}
6991
6992At the bottom of the graph, we see all the implicit inputs of
6993@var{gnu-build-system} (@pxref{Build Systems, @code{gnu-build-system}}).
6994
f97c9175 6995Now, note that the dependencies of these implicit inputs---that is, the
88856916
LC
6996@dfn{bootstrap dependencies} (@pxref{Bootstrapping})---are not shown
6997here, for conciseness.
6998
6999@item bag
7000Similar to @code{bag-emerged}, but this time including all the bootstrap
7001dependencies.
7002
38b92daa
LC
7003@item bag-with-origins
7004Similar to @code{bag}, but also showing origins and their dependencies.
7005
fff236aa 7006@item derivation
88856916
LC
7007This is the most detailed representation: It shows the DAG of
7008derivations (@pxref{Derivations}) and plain store items. Compared to
7009the above representation, many additional nodes are visible, including
f97c9175 7010build scripts, patches, Guile modules, etc.
88856916 7011
a773c314
LC
7012For this type of graph, it is also possible to pass a @file{.drv} file
7013name instead of a package name, as in:
7014
7015@example
7016guix graph -t derivation `guix system build -d my-config.scm`
7017@end example
b06a70e0
LC
7018
7019@item module
7020This is the graph of @dfn{package modules} (@pxref{Package Modules}).
7021For example, the following command shows the graph for the package
7022module that defines the @code{guile} package:
7023
7024@example
7025guix graph -t module guile | dot -Tpdf > module-graph.pdf
7026@end example
88856916
LC
7027@end table
7028
f97c9175 7029All the types above correspond to @emph{build-time dependencies}. The
88856916
LC
7030following graph type represents the @emph{run-time dependencies}:
7031
7032@table @code
7033@item references
7034This is the graph of @dfn{references} of a package output, as returned
7035by @command{guix gc --references} (@pxref{Invoking guix gc}).
7036
7037If the given package output is not available in the store, @command{guix
7038graph} attempts to obtain dependency information from substitutes.
a773c314
LC
7039
7040Here you can also pass a store file name instead of a package name. For
7041example, the command below produces the reference graph of your profile
7042(which can be big!):
7043
7044@example
7045guix graph -t references `readlink -f ~/.guix-profile`
7046@end example
7f8fec0f
LC
7047
7048@item referrers
7049This is the graph of the @dfn{referrers} of a store item, as returned by
7050@command{guix gc --referrers} (@pxref{Invoking guix gc}).
7051
7052This relies exclusively on local information from your store. For
7053instance, let us suppose that the current Inkscape is available in 10
7054profiles on your machine; @command{guix graph -t referrers inkscape}
7055will show a graph rooted at Inkscape and with those 10 profiles linked
7056to it.
7057
7058It can help determine what is preventing a store item from being garbage
7059collected.
7060
88856916
LC
7061@end table
7062
7063The available options are the following:
7064
7065@table @option
7066@item --type=@var{type}
7067@itemx -t @var{type}
7068Produce a graph output of @var{type}, where @var{type} must be one of
7069the values listed above.
7070
7071@item --list-types
7072List the supported graph types.
4c8f997a 7073
642339dc
RW
7074@item --backend=@var{backend}
7075@itemx -b @var{backend}
7076Produce a graph using the selected @var{backend}.
7077
7078@item --list-backends
7079List the supported graph backends.
7080
9ea36197
LC
7081Currently, the available backends are Graphviz and d3.js.
7082
4c8f997a
LC
7083@item --expression=@var{expr}
7084@itemx -e @var{expr}
7085Consider the package @var{expr} evaluates to.
7086
7087This is useful to precisely refer to a package, as in this example:
7088
7089@example
7090guix graph -e '(@@@@ (gnu packages commencement) gnu-make-final)'
7091@end example
88856916
LC
7092@end table
7093
7094
372c4bbc
DT
7095@node Invoking guix environment
7096@section Invoking @command{guix environment}
7097
f5fd4fd2 7098@cindex reproducible build environments
fe36d84e 7099@cindex development environments
e32171ee
JD
7100@cindex @command{guix environment}
7101@cindex environment, package build environment
372c4bbc
DT
7102The purpose of @command{guix environment} is to assist hackers in
7103creating reproducible development environments without polluting their
7104package profile. The @command{guix environment} tool takes one or more
f97c9175 7105packages, builds all of their inputs, and creates a shell
372c4bbc
DT
7106environment to use them.
7107
7108The general syntax is:
7109
7110@example
7111guix environment @var{options} @var{package}@dots{}
7112@end example
7113
fe36d84e
LC
7114The following example spawns a new shell set up for the development of
7115GNU@tie{}Guile:
372c4bbc
DT
7116
7117@example
7118guix environment guile
7119@end example
7120
f97c9175
AE
7121If the needed dependencies are not built yet, @command{guix environment}
7122automatically builds them. The environment of the new shell is an augmented
372c4bbc
DT
7123version of the environment that @command{guix environment} was run in.
7124It contains the necessary search paths for building the given package
7125added to the existing environment variables. To create a ``pure''
f97c9175 7126environment, in which the original environment variables have been unset,
50500f7c
LC
7127use the @code{--pure} option@footnote{Users sometimes wrongfully augment
7128environment variables such as @code{PATH} in their @file{~/.bashrc}
7129file. As a consequence, when @code{guix environment} launches it, Bash
7130may read @file{~/.bashrc}, thereby introducing ``impurities'' in these
7131environment variables. It is an error to define such environment
7132variables in @file{.bashrc}; instead, they should be defined in
7133@file{.bash_profile}, which is sourced only by log-in shells.
7134@xref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}, for
7135details on Bash start-up files.}.
372c4bbc 7136
28de8d25
LC
7137@vindex GUIX_ENVIRONMENT
7138@command{guix environment} defines the @code{GUIX_ENVIRONMENT}
20185522
LC
7139variable in the shell it spawns; its value is the file name of the
7140profile of this environment. This allows users to, say, define a
28de8d25
LC
7141specific prompt for development environments in their @file{.bashrc}
7142(@pxref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}):
7143
7144@example
7145if [ -n "$GUIX_ENVIRONMENT" ]
7146then
7147 export PS1="\u@@\h \w [dev]\$ "
7148fi
7149@end example
7150
20185522
LC
7151@noindent
7152... or to browse the profile:
7153
7154@example
7155$ ls "$GUIX_ENVIRONMENT/bin"
7156@end example
7157
372c4bbc
DT
7158Additionally, more than one package may be specified, in which case the
7159union of the inputs for the given packages are used. For example, the
7160command below spawns a shell where all of the dependencies of both Guile
7161and Emacs are available:
7162
7163@example
7164guix environment guile emacs
7165@end example
7166
1de2fe95
DT
7167Sometimes an interactive shell session is not desired. An arbitrary
7168command may be invoked by placing the @code{--} token to separate the
7169command from the rest of the arguments:
372c4bbc
DT
7170
7171@example
1de2fe95 7172guix environment guile -- make -j4
372c4bbc
DT
7173@end example
7174
fe36d84e
LC
7175In other situations, it is more convenient to specify the list of
7176packages needed in the environment. For example, the following command
7177runs @command{python} from an environment containing Python@tie{}2.7 and
7178NumPy:
7179
7180@example
1de2fe95 7181guix environment --ad-hoc python2-numpy python-2.7 -- python
fe36d84e
LC
7182@end example
7183
cc90fbbf
DT
7184Furthermore, one might want the dependencies of a package and also some
7185additional packages that are not build-time or runtime dependencies, but
7186are useful when developing nonetheless. Because of this, the
7187@code{--ad-hoc} flag is positional. Packages appearing before
7188@code{--ad-hoc} are interpreted as packages whose dependencies will be
7189added to the environment. Packages appearing after are interpreted as
7190packages that will be added to the environment directly. For example,
7191the following command creates a Guix development environment that
7192additionally includes Git and strace:
7193
7194@example
7195guix environment guix --ad-hoc git strace
7196@end example
7197
f535dcbe
DT
7198Sometimes it is desirable to isolate the environment as much as
7199possible, for maximal purity and reproducibility. In particular, when
7200using Guix on a host distro that is not GuixSD, it is desirable to
7201prevent access to @file{/usr/bin} and other system-wide resources from
7202the development environment. For example, the following command spawns
7203a Guile REPL in a ``container'' where only the store and the current
7204working directory are mounted:
7205
7206@example
7207guix environment --ad-hoc --container guile -- guile
7208@end example
7209
0f252e26 7210@quotation Note
cfd35b4e 7211The @code{--container} option requires Linux-libre 3.19 or newer.
0f252e26
DT
7212@end quotation
7213
fe36d84e 7214The available options are summarized below.
372c4bbc
DT
7215
7216@table @code
f943c317
LC
7217@item --root=@var{file}
7218@itemx -r @var{file}
7219@cindex persistent environment
7220@cindex garbage collector root, for environments
7221Make @var{file} a symlink to the profile for this environment, and
7222register it as a garbage collector root.
7223
7224This is useful if you want to protect your environment from garbage
7225collection, to make it ``persistent''.
7226
7227When this option is omitted, the environment is protected from garbage
7228collection only for the duration of the @command{guix environment}
7229session. This means that next time you recreate the same environment,
6a98b9f3
LC
7230you could have to rebuild or re-download packages. @xref{Invoking guix
7231gc}, for more on GC roots.
f943c317 7232
372c4bbc
DT
7233@item --expression=@var{expr}
7234@itemx -e @var{expr}
c9c282ce
DT
7235Create an environment for the package or list of packages that
7236@var{expr} evaluates to.
372c4bbc 7237
fe36d84e
LC
7238For example, running:
7239
7240@example
7241guix environment -e '(@@ (gnu packages maths) petsc-openmpi)'
7242@end example
7243
7244starts a shell with the environment for this specific variant of the
7245PETSc package.
7246
c9c282ce
DT
7247Running:
7248
7249@example
5c2b2f00 7250guix environment --ad-hoc -e '(@@ (gnu) %base-packages)'
c9c282ce
DT
7251@end example
7252
7253starts a shell with all the GuixSD base packages available.
7254
fa445d64 7255The above commands only use the default output of the given packages.
779aa003
DT
7256To select other outputs, two element tuples can be specified:
7257
7258@example
158eadef 7259guix environment --ad-hoc -e '(list (@@ (gnu packages bash) bash) "include")'
779aa003
DT
7260@end example
7261
372c4bbc
DT
7262@item --load=@var{file}
7263@itemx -l @var{file}
c9c282ce
DT
7264Create an environment for the package or list of packages that the code
7265within @var{file} evaluates to.
372c4bbc 7266
fe36d84e
LC
7267As an example, @var{file} might contain a definition like this
7268(@pxref{Defining Packages}):
7269
7270@example
7271@verbatiminclude environment-gdb.scm
7272@end example
7273
267379f8
DT
7274@item --manifest=@var{file}
7275@itemx -m @var{file}
7276Create an environment for the packages contained in the manifest object
7277returned by the Scheme code in @var{file}.
7278
7279This is similar to the same-named option in @command{guix package}
7280(@pxref{profile-manifest, @option{--manifest}}) and uses the same
7281manifest files.
7282
a54bd6d7
DT
7283@item --ad-hoc
7284Include all specified packages in the resulting environment, as if an
7285@i{ad hoc} package were defined with them as inputs. This option is
7286useful for quickly creating an environment without having to write a
7287package expression to contain the desired inputs.
7288
7289For instance, the command:
7290
7291@example
1de2fe95 7292guix environment --ad-hoc guile guile-sdl -- guile
a54bd6d7
DT
7293@end example
7294
7295runs @command{guile} in an environment where Guile and Guile-SDL are
7296available.
7297
417c39f1 7298Note that this example implicitly asks for the default output of
f97c9175 7299@code{guile} and @code{guile-sdl}, but it is possible to ask for a
417c39f1
LC
7300specific output---e.g., @code{glib:bin} asks for the @code{bin} output
7301of @code{glib} (@pxref{Packages with Multiple Outputs}).
7302
cc90fbbf
DT
7303This option may be composed with the default behavior of @command{guix
7304environment}. Packages appearing before @code{--ad-hoc} are interpreted
7305as packages whose dependencies will be added to the environment, the
7306default behavior. Packages appearing after are interpreted as packages
7307that will be added to the environment directly.
7308
372c4bbc
DT
7309@item --pure
7310Unset existing environment variables when building the new environment.
7311This has the effect of creating an environment in which search paths
7312only contain package inputs.
7313
7314@item --search-paths
7315Display the environment variable definitions that make up the
7316environment.
ce367ef3
LC
7317
7318@item --system=@var{system}
7319@itemx -s @var{system}
7320Attempt to build for @var{system}---e.g., @code{i686-linux}.
f535dcbe
DT
7321
7322@item --container
7323@itemx -C
7324@cindex container
7325Run @var{command} within an isolated container. The current working
a01ad638 7326directory outside the container is mapped inside the container.
e37944d8
MG
7327Additionally, unless overridden with @code{--user}, a dummy home
7328directory is created that matches the current user's home directory, and
7329@file{/etc/passwd} is configured accordingly. The spawned process runs
7330as the current user outside the container, but has root privileges in
7331the context of the container.
f535dcbe
DT
7332
7333@item --network
7334@itemx -N
7335For containers, share the network namespace with the host system.
7336Containers created without this flag only have access to the loopback
7337device.
7338
07ec3492
MG
7339@item --link-profile
7340@itemx -P
7341For containers, link the environment profile to
7342@file{~/.guix-profile} within the container. This is equivalent to
7343running the command @command{ln -s $GUIX_ENVIRONMENT ~/.guix-profile}
7344within the container. Linking will fail and abort the environment if
7345the directory already exists, which will certainly be the case if
7346@command{guix environment} was invoked in the user's home directory.
7347
7348Certain packages are configured to look in
7349@code{~/.guix-profile} for configuration files and data;@footnote{For
7350example, the @code{fontconfig} package inspects
7351@file{~/.guix-profile/share/fonts} for additional fonts.}
7352@code{--link-profile} allows these programs to behave as expected within
7353the environment.
7354
e37944d8
MG
7355@item --user=@var{user}
7356@itemx -u @var{user}
7357For containers, use the username @var{user} in place of the current
7358user. The generated @file{/etc/passwd} entry within the container will
7359contain the name @var{user}; the home directory will be
7360@file{/home/USER}; and no user GECOS data will be copied. @var{user}
7361need not exist on the system.
7362
7363Additionally, any shared or exposed path (see @code{--share} and
7364@code{--expose} respectively) whose target is within the current user's
7365home directory will be remapped relative to @file{/home/USER}; this
7366includes the automatic mapping of the current working directory.
7367
7368@example
7369# will expose paths as /home/foo/wd, /home/foo/test, and /home/foo/target
7370cd $HOME/wd
7371guix environment --container --user=foo \
7372 --expose=$HOME/test \
7373 --expose=/tmp/target=$HOME/target
7374@end example
7375
7376While this will limit the leaking of user identity through home paths
7377and each of the user fields, this is only one useful component of a
7378broader privacy/anonymity solution---not one in and of itself.
7379
f535dcbe
DT
7380@item --expose=@var{source}[=@var{target}]
7381For containers, expose the file system @var{source} from the host system
7382as the read-only file system @var{target} within the container. If
7383@var{target} is not specified, @var{source} is used as the target mount
7384point in the container.
7385
7386The example below spawns a Guile REPL in a container in which the user's
7387home directory is accessible read-only via the @file{/exchange}
7388directory:
7389
7390@example
da31b9c7 7391guix environment --container --expose=$HOME=/exchange --ad-hoc guile -- guile
f535dcbe
DT
7392@end example
7393
5c2b2f00 7394@item --share=@var{source}[=@var{target}]
f535dcbe
DT
7395For containers, share the file system @var{source} from the host system
7396as the writable file system @var{target} within the container. If
7397@var{target} is not specified, @var{source} is used as the target mount
7398point in the container.
7399
7400The example below spawns a Guile REPL in a container in which the user's
7401home directory is accessible for both reading and writing via the
7402@file{/exchange} directory:
7403
7404@example
da31b9c7 7405guix environment --container --share=$HOME=/exchange --ad-hoc guile -- guile
f535dcbe 7406@end example
372c4bbc
DT
7407@end table
7408
fdcb04af
HG
7409@command{guix environment}
7410also supports all of the common build options that @command{guix
ccd7158d 7411build} supports (@pxref{Common Build Options}).
372c4bbc 7412
fdcb04af 7413
aff8ce7c
DT
7414@node Invoking guix publish
7415@section Invoking @command{guix publish}
7416
e32171ee 7417@cindex @command{guix publish}
aff8ce7c 7418The purpose of @command{guix publish} is to enable users to easily share
f97c9175 7419their store with others, who can then use it as a substitute server
8ce229fc
LC
7420(@pxref{Substitutes}).
7421
7422When @command{guix publish} runs, it spawns an HTTP server which allows
7423anyone with network access to obtain substitutes from it. This means
7424that any machine running Guix can also act as if it were a build farm,
7425since the HTTP interface is compatible with Hydra, the software behind
7426the @code{hydra.gnu.org} build farm.
aff8ce7c
DT
7427
7428For security, each substitute is signed, allowing recipients to check
7429their authenticity and integrity (@pxref{Substitutes}). Because
f97c9175 7430@command{guix publish} uses the signing key of the system, which is only
5463fe51
LC
7431readable by the system administrator, it must be started as root; the
7432@code{--user} option makes it drop root privileges early on.
aff8ce7c 7433
b18812b6
LC
7434The signing key pair must be generated before @command{guix publish} is
7435launched, using @command{guix archive --generate-key} (@pxref{Invoking
7436guix archive}).
7437
aff8ce7c
DT
7438The general syntax is:
7439
7440@example
7441guix publish @var{options}@dots{}
7442@end example
7443
7444Running @command{guix publish} without any additional arguments will
7445spawn an HTTP server on port 8080:
7446
7447@example
7448guix publish
7449@end example
7450
7451Once a publishing server has been authorized (@pxref{Invoking guix
7452archive}), the daemon may download substitutes from it:
7453
7454@example
7455guix-daemon --substitute-urls=http://example.org:8080
7456@end example
7457
00753f70
LC
7458By default, @command{guix publish} compresses archives on the fly as it
7459serves them. This ``on-the-fly'' mode is convenient in that it requires
7460no setup and is immediately available. However, when serving lots of
7461clients, we recommend using the @option{--cache} option, which enables
7462caching of the archives before they are sent to clients---see below for
585347d7
LC
7463details. The @command{guix weather} command provides a handy way to
7464check what a server provides (@pxref{Invoking guix weather}).
00753f70 7465
ff6638d1
LC
7466As a bonus, @command{guix publish} also serves as a content-addressed
7467mirror for source files referenced in @code{origin} records
7468(@pxref{origin Reference}). For instance, assuming @command{guix
7469publish} is running on @code{example.org}, the following URL returns the
7470raw @file{hello-2.10.tar.gz} file with the given SHA256 hash
7471(represented in @code{nix-base32} format, @pxref{Invoking guix hash}):
7472
7473@example
7474http://example.org/file/hello-2.10.tar.gz/sha256/0ssi1@dots{}ndq1i
7475@end example
7476
7477Obviously, these URLs only work for files that are in the store; in
7478other cases, they return 404 (``Not Found'').
7479
c04ffadb
LC
7480@cindex build logs, publication
7481Build logs are available from @code{/log} URLs like:
7482
7483@example
7484http://example.org/log/gwspk@dots{}-guile-2.2.3
7485@end example
7486
7487@noindent
7488When @command{guix-daemon} is configured to save compressed build logs,
7489as is the case by default (@pxref{Invoking guix-daemon}), @code{/log}
7490URLs return the compressed log as-is, with an appropriate
7491@code{Content-Type} and/or @code{Content-Encoding} header. We recommend
7492running @command{guix-daemon} with @code{--log-compression=gzip} since
7493Web browsers can automatically decompress it, which is not the case with
7494bzip2 compression.
7495
aff8ce7c
DT
7496The following options are available:
7497
7498@table @code
7499@item --port=@var{port}
7500@itemx -p @var{port}
7501Listen for HTTP requests on @var{port}.
7502
9e2292ef
LC
7503@item --listen=@var{host}
7504Listen on the network interface for @var{host}. The default is to
7505accept connections from any interface.
7506
5463fe51
LC
7507@item --user=@var{user}
7508@itemx -u @var{user}
7509Change privileges to @var{user} as soon as possible---i.e., once the
7510server socket is open and the signing key has been read.
7511
4a1fc562
LC
7512@item --compression[=@var{level}]
7513@itemx -C [@var{level}]
7514Compress data using the given @var{level}. When @var{level} is zero,
7515disable compression. The range 1 to 9 corresponds to different gzip
7516compression levels: 1 is the fastest, and 9 is the best (CPU-intensive).
7517The default is 3.
7518
00753f70
LC
7519Unless @option{--cache} is used, compression occurs on the fly and
7520the compressed streams are not
4a1fc562 7521cached. Thus, to reduce load on the machine that runs @command{guix
00753f70
LC
7522publish}, it may be a good idea to choose a low compression level, to
7523run @command{guix publish} behind a caching proxy, or to use
7524@option{--cache}. Using @option{--cache} has the advantage that it
7525allows @command{guix publish} to add @code{Content-Length} HTTP header
7526to its responses.
7527
7528@item --cache=@var{directory}
7529@itemx -c @var{directory}
7530Cache archives and meta-data (@code{.narinfo} URLs) to @var{directory}
7531and only serve archives that are in cache.
7532
7533When this option is omitted, archives and meta-data are created
7534on-the-fly. This can reduce the available bandwidth, especially when
7535compression is enabled, since this may become CPU-bound. Another
7536drawback of the default mode is that the length of archives is not known
7537in advance, so @command{guix publish} does not add a
7538@code{Content-Length} HTTP header to its responses, which in turn
7539prevents clients from knowing the amount of data being downloaded.
7540
7541Conversely, when @option{--cache} is used, the first request for a store
7542item (@i{via} a @code{.narinfo} URL) returns 404 and triggers a
7543background process to @dfn{bake} the archive---computing its
7544@code{.narinfo} and compressing the archive, if needed. Once the
7545archive is cached in @var{directory}, subsequent requests succeed and
7546are served directly from the cache, which guarantees that clients get
7547the best possible bandwidth.
7548
7549The ``baking'' process is performed by worker threads. By default, one
7550thread per CPU core is created, but this can be customized. See
7551@option{--workers} below.
7552
d72b4206
LC
7553When @option{--ttl} is used, cached entries are automatically deleted
7554when they have expired.
7555
00753f70
LC
7556@item --workers=@var{N}
7557When @option{--cache} is used, request the allocation of @var{N} worker
7558threads to ``bake'' archives.
4a1fc562 7559
e4c7a5f7
LC
7560@item --ttl=@var{ttl}
7561Produce @code{Cache-Control} HTTP headers that advertise a time-to-live
7562(TTL) of @var{ttl}. @var{ttl} must denote a duration: @code{5d} means 5
7563days, @code{1m} means 1 month, and so on.
7564
7565This allows the user's Guix to keep substitute information in cache for
7566@var{ttl}. However, note that @code{guix publish} does not itself
7567guarantee that the store items it provides will indeed remain available
7568for as long as @var{ttl}.
7569
d72b4206 7570Additionally, when @option{--cache} is used, cached entries that have
c95644f0
LC
7571not been accessed for @var{ttl} and that no longer have a corresponding
7572item in the store, may be deleted.
d72b4206 7573
4bb5e0ae
LC
7574@item --nar-path=@var{path}
7575Use @var{path} as the prefix for the URLs of ``nar'' files
7576(@pxref{Invoking guix archive, normalized archives}).
7577
7578By default, nars are served at a URL such as
7579@code{/nar/gzip/@dots{}-coreutils-8.25}. This option allows you to
7580change the @code{/nar} part to @var{path}.
7581
46f58390
LC
7582@item --public-key=@var{file}
7583@itemx --private-key=@var{file}
7584Use the specific @var{file}s as the public/private key pair used to sign
7585the store items being published.
7586
7587The files must correspond to the same key pair (the private key is used
7588for signing and the public key is merely advertised in the signature
7589metadata). They must contain keys in the canonical s-expression format
7590as produced by @command{guix archive --generate-key} (@pxref{Invoking
7591guix archive}). By default, @file{/etc/guix/signing-key.pub} and
7592@file{/etc/guix/signing-key.sec} are used.
7593
aff8ce7c
DT
7594@item --repl[=@var{port}]
7595@itemx -r [@var{port}]
7596Spawn a Guile REPL server (@pxref{REPL Servers,,, guile, GNU Guile
8ce229fc
LC
7597Reference Manual}) on @var{port} (37146 by default). This is used
7598primarily for debugging a running @command{guix publish} server.
aff8ce7c
DT
7599@end table
7600
1c52181f 7601Enabling @command{guix publish} on a GuixSD system is a one-liner: just
f1e900a3
LC
7602instantiate a @code{guix-publish-service-type} service in the @code{services} field
7603of the @code{operating-system} declaration (@pxref{guix-publish-service-type,
7604@code{guix-publish-service-type}}).
1c52181f 7605
332d7903
HG
7606If you are instead running Guix on a ``foreign distro'', follow these
7607instructions:”
7608
7609@itemize
7610@item
7611If your host distro uses the systemd init system:
7612
7613@example
7614# ln -s ~root/.guix-profile/lib/systemd/system/guix-publish.service \
7615 /etc/systemd/system/
7616# systemctl start guix-publish && systemctl enable guix-publish
7617@end example
7618
7619@item
7620If your host distro uses the Upstart init system:
7621
7622@example
7623# ln -s ~root/.guix-profile/lib/upstart/system/guix-publish.conf /etc/init/
7624# start guix-publish
7625@end example
7626
7627@item
7628Otherwise, proceed similarly with your distro's init system.
7629@end itemize
d23c20f1
LC
7630
7631@node Invoking guix challenge
7632@section Invoking @command{guix challenge}
7633
7634@cindex reproducible builds
7635@cindex verifiable builds
e32171ee
JD
7636@cindex @command{guix challenge}
7637@cindex challenge
d23c20f1 7638Do the binaries provided by this server really correspond to the source
f97c9175 7639code it claims to build? Is a package build process deterministic?
d23c20f1
LC
7640These are the questions the @command{guix challenge} command attempts to
7641answer.
7642
7643The former is obviously an important question: Before using a substitute
f97c9175 7644server (@pxref{Substitutes}), one had better @emph{verify} that it
d23c20f1
LC
7645provides the right binaries, and thus @emph{challenge} it. The latter
7646is what enables the former: If package builds are deterministic, then
7647independent builds of the package should yield the exact same result,
7648bit for bit; if a server provides a binary different from the one
7649obtained locally, it may be either corrupt or malicious.
7650
7651We know that the hash that shows up in @file{/gnu/store} file names is
7652the hash of all the inputs of the process that built the file or
7653directory---compilers, libraries, build scripts,
7654etc. (@pxref{Introduction}). Assuming deterministic build processes,
7655one store file name should map to exactly one build output.
7656@command{guix challenge} checks whether there is, indeed, a single
7657mapping by comparing the build outputs of several independent builds of
7658any given store item.
7659
f97c9175 7660The command output looks like this:
d23c20f1
LC
7661
7662@smallexample
ddbc7f7d
LC
7663$ guix challenge --substitute-urls="https://hydra.gnu.org https://guix.example.org"
7664updating list of substitutes from 'https://hydra.gnu.org'... 100.0%
7665updating list of substitutes from 'https://guix.example.org'... 100.0%
d23c20f1
LC
7666/gnu/store/@dots{}-openssl-1.0.2d contents differ:
7667 local hash: 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
ddbc7f7d
LC
7668 https://hydra.gnu.org/nar/@dots{}-openssl-1.0.2d: 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
7669 https://guix.example.org/nar/@dots{}-openssl-1.0.2d: 1zy4fmaaqcnjrzzajkdn3f5gmjk754b43qkq47llbyak9z0qjyim
d23c20f1
LC
7670/gnu/store/@dots{}-git-2.5.0 contents differ:
7671 local hash: 00p3bmryhjxrhpn2gxs2fy0a15lnip05l97205pgbk5ra395hyha
ddbc7f7d
LC
7672 https://hydra.gnu.org/nar/@dots{}-git-2.5.0: 069nb85bv4d4a6slrwjdy8v1cn4cwspm3kdbmyb81d6zckj3nq9f
7673 https://guix.example.org/nar/@dots{}-git-2.5.0: 0mdqa9w1p6cmli6976v4wi0sw9r4p5prkj7lzfd1877wk11c9c73
d23c20f1
LC
7674/gnu/store/@dots{}-pius-2.1.1 contents differ:
7675 local hash: 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
ddbc7f7d
LC
7676 https://hydra.gnu.org/nar/@dots{}-pius-2.1.1: 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
7677 https://guix.example.org/nar/@dots{}-pius-2.1.1: 1cy25x1a4fzq5rk0pmvc8xhwyffnqz95h2bpvqsz2mpvlbccy0gs
bf7dfb1f
LC
7678
7679@dots{}
7680
76816,406 store items were analyzed:
7682 - 4,749 (74.1%) were identical
7683 - 525 (8.2%) differed
7684 - 1,132 (17.7%) were inconclusive
d23c20f1
LC
7685@end smallexample
7686
7687@noindent
7688In this example, @command{guix challenge} first scans the store to
7689determine the set of locally-built derivations---as opposed to store
7690items that were downloaded from a substitute server---and then queries
7691all the substitute servers. It then reports those store items for which
7692the servers obtained a result different from the local build.
7693
7694@cindex non-determinism, in package builds
7695As an example, @code{guix.example.org} always gets a different answer.
7696Conversely, @code{hydra.gnu.org} agrees with local builds, except in the
7697case of Git. This might indicate that the build process of Git is
7698non-deterministic, meaning that its output varies as a function of
7699various things that Guix does not fully control, in spite of building
7700packages in isolated environments (@pxref{Features}). Most common
7701sources of non-determinism include the addition of timestamps in build
7702results, the inclusion of random numbers, and directory listings sorted
a70a5004 7703by inode number. See @uref{https://reproducible-builds.org/docs/}, for
d23c20f1
LC
7704more information.
7705
f97c9175 7706To find out what is wrong with this Git binary, we can do something along
d23c20f1
LC
7707these lines (@pxref{Invoking guix archive}):
7708
7709@example
ddbc7f7d 7710$ wget -q -O - https://hydra.gnu.org/nar/@dots{}-git-2.5.0 \
d23c20f1 7711 | guix archive -x /tmp/git
043f4698 7712$ diff -ur --no-dereference /gnu/store/@dots{}-git.2.5.0 /tmp/git
d23c20f1
LC
7713@end example
7714
7715This command shows the difference between the files resulting from the
7716local build, and the files resulting from the build on
7717@code{hydra.gnu.org} (@pxref{Overview, Comparing and Merging Files,,
7718diffutils, Comparing and Merging Files}). The @command{diff} command
7719works great for text files. When binary files differ, a better option
ddbc7f7d 7720is @uref{https://diffoscope.org/, Diffoscope}, a tool that helps
d23c20f1
LC
7721visualize differences for all kinds of files.
7722
f97c9175 7723Once you have done that work, you can tell whether the differences are due
d23c20f1
LC
7724to a non-deterministic build process or to a malicious server. We try
7725hard to remove sources of non-determinism in packages to make it easier
f97c9175
AE
7726to verify substitutes, but of course, this is a process that
7727involves not just Guix, but a large part of the free software community.
d23c20f1
LC
7728In the meantime, @command{guix challenge} is one tool to help address
7729the problem.
7730
7731If you are writing packages for Guix, you are encouraged to check
7732whether @code{hydra.gnu.org} and other substitute servers obtain the
7733same build result as you did with:
7734
7735@example
7736$ guix challenge @var{package}
7737@end example
7738
7739@noindent
f97c9175 7740where @var{package} is a package specification such as
7cffaeb6 7741@code{guile@@2.0} or @code{glibc:debug}.
d23c20f1
LC
7742
7743The general syntax is:
7744
7745@example
7746guix challenge @var{options} [@var{packages}@dots{}]
7747@end example
7748
7cffaeb6
LC
7749When a difference is found between the hash of a locally-built item and
7750that of a server-provided substitute, or among substitutes provided by
7751different servers, the command displays it as in the example above and
a17417a8
LC
7752its exit code is 2 (other non-zero exit codes denote other kinds of
7753errors.)
7cffaeb6 7754
d23c20f1
LC
7755The one option that matters is:
7756
7757@table @code
7758
7759@item --substitute-urls=@var{urls}
7760Consider @var{urls} the whitespace-separated list of substitute source
7761URLs to compare to.
7762
153b6295
LC
7763@item --verbose
7764@itemx -v
7765Show details about matches (identical contents) in addition to
7766information about mismatches.
7767
d23c20f1
LC
7768@end table
7769
f11c444d
LC
7770@node Invoking guix copy
7771@section Invoking @command{guix copy}
7772
7773@cindex copy, of store items, over SSH
7774@cindex SSH, copy of store items
7775@cindex sharing store items across machines
7776@cindex transferring store items across machines
7777The @command{guix copy} command copies items from the store of one
7778machine to that of another machine over a secure shell (SSH)
7779connection@footnote{This command is available only when Guile-SSH was
7780found. @xref{Requirements}, for details.}. For example, the following
7781command copies the @code{coreutils} package, the user's profile, and all
7782their dependencies over to @var{host}, logged in as @var{user}:
7783
7784@example
7785guix copy --to=@var{user}@@@var{host} \
7786 coreutils `readlink -f ~/.guix-profile`
7787@end example
7788
7789If some of the items to be copied are already present on @var{host},
7790they are not actually sent.
7791
7792The command below retrieves @code{libreoffice} and @code{gimp} from
7793@var{host}, assuming they are available there:
7794
7795@example
7796guix copy --from=@var{host} libreoffice gimp
7797@end example
7798
7799The SSH connection is established using the Guile-SSH client, which is
7800compatible with OpenSSH: it honors @file{~/.ssh/known_hosts} and
7801@file{~/.ssh/config}, and uses the SSH agent for authentication.
7802
7803The key used to sign items that are sent must be accepted by the remote
7804machine. Likewise, the key used by the remote machine to sign items you
7805are retrieving must be in @file{/etc/guix/acl} so it is accepted by your
7806own daemon. @xref{Invoking guix archive}, for more information about
7807store item authentication.
7808
7809The general syntax is:
7810
7811@example
7812guix copy [--to=@var{spec}|--from=@var{spec}] @var{items}@dots{}
7813@end example
7814
7815You must always specify one of the following options:
7816
7817@table @code
7818@item --to=@var{spec}
7819@itemx --from=@var{spec}
7820Specify the host to send to or receive from. @var{spec} must be an SSH
7821spec such as @code{example.org}, @code{charlie@@example.org}, or
7822@code{charlie@@example.org:2222}.
7823@end table
7824
7825The @var{items} can be either package names, such as @code{gimp}, or
7826store items, such as @file{/gnu/store/@dots{}-idutils-4.6}.
7827
7828When specifying the name of a package to send, it is first built if
7829needed, unless @option{--dry-run} was specified. Common build options
7830are supported (@pxref{Common Build Options}).
7831
d23c20f1 7832
32efa254
DT
7833@node Invoking guix container
7834@section Invoking @command{guix container}
7835@cindex container
e32171ee 7836@cindex @command{guix container}
32efa254
DT
7837@quotation Note
7838As of version @value{VERSION}, this tool is experimental. The interface
7839is subject to radical change in the future.
7840@end quotation
7841
7842The purpose of @command{guix container} is to manipulate processes
7843running within an isolated environment, commonly known as a
46c36586 7844``container'', typically created by the @command{guix environment}
32efa254
DT
7845(@pxref{Invoking guix environment}) and @command{guix system container}
7846(@pxref{Invoking guix system}) commands.
7847
7848The general syntax is:
7849
7850@example
7851guix container @var{action} @var{options}@dots{}
7852@end example
7853
7854@var{action} specifies the operation to perform with a container, and
7855@var{options} specifies the context-specific arguments for the action.
7856
7857The following actions are available:
7858
7859@table @code
7860@item exec
7861Execute a command within the context of a running container.
7862
7863The syntax is:
7864
7865@example
7866guix container exec @var{pid} @var{program} @var{arguments}@dots{}
7867@end example
7868
7869@var{pid} specifies the process ID of the running container.
f97c9175
AE
7870@var{program} specifies an executable file name within the root file
7871system of the container. @var{arguments} are the additional options that
7872will be passed to @var{program}.
32efa254
DT
7873
7874The following command launches an interactive login shell inside a
7875GuixSD container, started by @command{guix system container}, and whose
7876process ID is 9001:
7877
7878@example
7879guix container exec 9001 /run/current-system/profile/bin/bash --login
7880@end example
7881
7882Note that the @var{pid} cannot be the parent process of a container. It
f97c9175 7883must be PID 1 of the container or one of its child processes.
32efa254
DT
7884
7885@end table
7886
585347d7
LC
7887@node Invoking guix weather
7888@section Invoking @command{guix weather}
7889
7890Occasionally you're grumpy because substitutes are lacking and you end
7891up building packages by yourself (@pxref{Substitutes}). The
7892@command{guix weather} command reports on substitute availability on the
7893specified servers so you can have an idea of whether you'll be grumpy
7894today. It can sometimes be useful info as a user, but it is primarily
7895useful to people running @command{guix publish} (@pxref{Invoking guix
7896publish}).
7897
7898@cindex statistics, for substitutes
7899@cindex availability of substitutes
7900@cindex substitute availability
7901@cindex weather, substitute availability
7902Here's a sample run:
7903
7904@example
7905$ guix weather --substitute-urls=https://guix.example.org
7906computing 5,872 package derivations for x86_64-linux...
7907looking for 6,128 store items on https://guix.example.org..
7908updating list of substitutes from 'https://guix.example.org'... 100.0%
7909https://guix.example.org
7910 43.4% substitutes available (2,658 out of 6,128)
7911 7,032.5 MiB of nars (compressed)
7912 19,824.2 MiB on disk (uncompressed)
7913 0.030 seconds per request (182.9 seconds in total)
7914 33.5 requests per second
183445a6
LC
7915
7916 9.8% (342 out of 3,470) of the missing items are queued
7917 867 queued builds
7918 x86_64-linux: 518 (59.7%)
7919 i686-linux: 221 (25.5%)
7920 aarch64-linux: 128 (14.8%)
7921 build rate: 23.41 builds per hour
7922 x86_64-linux: 11.16 builds per hour
7923 i686-linux: 6.03 builds per hour
7924 aarch64-linux: 6.41 builds per hour
585347d7
LC
7925@end example
7926
183445a6 7927@cindex continuous integration, statistics
585347d7
LC
7928As you can see, it reports the fraction of all the packages for which
7929substitutes are available on the server---regardless of whether
7930substitutes are enabled, and regardless of whether this server's signing
7931key is authorized. It also reports the size of the compressed archives
7932(``nars'') provided by the server, the size the corresponding store
7933items occupy in the store (assuming deduplication is turned off), and
183445a6
LC
7934the server's throughput. The second part gives continuous integration
7935(CI) statistics, if the server supports it.
585347d7
LC
7936
7937To achieve that, @command{guix weather} queries over HTTP(S) meta-data
7938(@dfn{narinfos}) for all the relevant store items. Like @command{guix
7939challenge}, it ignores signatures on those substitutes, which is
7940innocuous since the command only gathers statistics and cannot install
7941those substitutes.
7942
7943Among other things, it is possible to query specific system types and
7944specific package sets. The available options are listed below.
7945
7946@table @code
7947@item --substitute-urls=@var{urls}
7948@var{urls} is the space-separated list of substitute server URLs to
7949query. When this option is omitted, the default set of substitute
7950servers is queried.
7951
7952@item --system=@var{system}
7953@itemx -s @var{system}
7954Query substitutes for @var{system}---e.g., @code{aarch64-linux}. This
7955option can be repeated, in which case @command{guix weather} will query
7956substitutes for several system types.
7957
7958@item --manifest=@var{file}
7959Instead of querying substitutes for all the packages, only ask for those
7960specified in @var{file}. @var{file} must contain a @dfn{manifest}, as
7961with the @code{-m} option of @command{guix package} (@pxref{Invoking
7962guix package}).
7963@end table
7964
7965
a1ba8475
LC
7966@c *********************************************************************
7967@node GNU Distribution
7968@chapter GNU Distribution
7969
3ca2731c 7970@cindex Guix System Distribution
4705641f 7971@cindex GuixSD
3ca2731c
LC
7972Guix comes with a distribution of the GNU system consisting entirely of
7973free software@footnote{The term ``free'' here refers to the
a1ba8475 7974@url{http://www.gnu.org/philosophy/free-sw.html,freedom provided to
3ca2731c 7975users of that software}.}. The
35ed9306
LC
7976distribution can be installed on its own (@pxref{System Installation}),
7977but it is also possible to install Guix as a package manager on top of
7978an installed GNU/Linux system (@pxref{Installation}). To distinguish
3ca2731c 7979between the two, we refer to the standalone distribution as the Guix
4705641f 7980System Distribution, or GuixSD.
35ed9306
LC
7981
7982The distribution provides core GNU packages such as GNU libc, GCC, and
7983Binutils, as well as many GNU and non-GNU applications. The complete
7984list of available packages can be browsed
093ae1be 7985@url{http://www.gnu.org/software/guix/packages,on-line} or by
d03bb653 7986running @command{guix package} (@pxref{Invoking guix package}):
a1ba8475
LC
7987
7988@example
e49951eb 7989guix package --list-available
a1ba8475
LC
7990@end example
7991
f97c9175 7992Our goal is to provide a practical 100% free software distribution of
401c53c4
LC
7993Linux-based and other variants of GNU, with a focus on the promotion and
7994tight integration of GNU components, and an emphasis on programs and
7995tools that help users exert that freedom.
7996
3ca2731c 7997Packages are currently available on the following platforms:
c320011d
LC
7998
7999@table @code
8000
8001@item x86_64-linux
8002Intel/AMD @code{x86_64} architecture, Linux-Libre kernel;
8003
8004@item i686-linux
8005Intel 32-bit architecture (IA32), Linux-Libre kernel;
8006
aa1e1947 8007@item armhf-linux
aa725117 8008ARMv7-A architecture with hard float, Thumb-2 and NEON,
f97c9175
AE
8009using the EABI hard-float application binary interface (ABI),
8010and Linux-Libre kernel.
aa1e1947 8011
3b88f376
EF
8012@item aarch64-linux
8013little-endian 64-bit ARMv8-A processors, Linux-Libre kernel. This is
be2ba697 8014currently in an experimental stage, with limited support.
3b88f376
EF
8015@xref{Contributing}, for how to help!
8016
c320011d
LC
8017@item mips64el-linux
8018little-endian 64-bit MIPS processors, specifically the Loongson series,
f97c9175 8019n32 ABI, and Linux-Libre kernel.
c320011d
LC
8020
8021@end table
8022
4705641f 8023GuixSD itself is currently only available on @code{i686} and @code{x86_64}.
3ca2731c 8024
c320011d
LC
8025@noindent
8026For information on porting to other architectures or kernels,
f97c9175 8027@pxref{Porting}.
c320011d 8028
401c53c4 8029@menu
5af6de3e 8030* System Installation:: Installing the whole operating system.
35ed9306 8031* System Configuration:: Configuring the operating system.
31f1f593 8032* Documentation:: Browsing software user manuals.
91ef73d4 8033* Installing Debugging Files:: Feeding the debugger.
05962f29 8034* Security Updates:: Deploying security fixes quickly.
401c53c4 8035* Package Modules:: Packages from the programmer's viewpoint.
da7cabd4 8036* Packaging Guidelines:: Growing the distribution.
401c53c4 8037* Bootstrapping:: GNU/Linux built from scratch.
8b315a6d 8038* Porting:: Targeting another platform or kernel.
401c53c4
LC
8039@end menu
8040
8041Building this distribution is a cooperative effort, and you are invited
081145cf 8042to join! @xref{Contributing}, for information about how you can help.
401c53c4 8043
5af6de3e
LC
8044@node System Installation
8045@section System Installation
8046
e32171ee 8047@cindex installing GuixSD
3ca2731c 8048@cindex Guix System Distribution
c8b54374 8049This section explains how to install the Guix System Distribution (GuixSD)
3ca2731c 8050on a machine. The Guix package manager can
35ed9306
LC
8051also be installed on top of a running GNU/Linux system,
8052@pxref{Installation}.
5af6de3e
LC
8053
8054@ifinfo
9c18cf9b 8055@quotation Note
5af6de3e
LC
8056@c This paragraph is for people reading this from tty2 of the
8057@c installation image.
1068f26b 8058You are reading this documentation with an Info reader. For details on
5af6de3e 8059how to use it, hit the @key{RET} key (``return'' or ``enter'') on the
de341e7c
LC
8060link that follows: @pxref{Top, Info reader,, info-stnd, Stand-alone GNU
8061Info}. Hit @kbd{l} afterwards to come back here.
9c18cf9b
LC
8062
8063Alternately, run @command{info info} in another tty to keep the manual
8064available.
8065@end quotation
5af6de3e
LC
8066@end ifinfo
8067
dedb8d5e 8068@menu
e3009f60
LC
8069* Limitations:: What you can expect.
8070* Hardware Considerations:: Supported hardware.
2626062b 8071* USB Stick and DVD Installation:: Preparing the installation medium.
e3009f60
LC
8072* Preparing for Installation:: Networking, partitioning, etc.
8073* Proceeding with the Installation:: The real thing.
c8b54374 8074* Installing GuixSD in a VM:: GuixSD playground.
e3009f60 8075* Building the Installation Image:: How this comes to be.
dedb8d5e
LC
8076@end menu
8077
8078@node Limitations
8aaaae38
LC
8079@subsection Limitations
8080
4705641f 8081As of version @value{VERSION}, the Guix System Distribution (GuixSD) is
3ca2731c 8082not production-ready. It may contain bugs and lack important
8aaaae38
LC
8083features. Thus, if you are looking for a stable production system that
8084respects your freedom as a computer user, a good solution at this point
8085is to consider @url{http://www.gnu.org/distros/free-distros.html, one of
f97c9175 8086the more established GNU/Linux distributions}. We hope you can soon switch
4705641f 8087to the GuixSD without fear, of course. In the meantime, you can
8aaaae38
LC
8088also keep using your distribution and try out the package manager on top
8089of it (@pxref{Installation}).
8090
8091Before you proceed with the installation, be aware of the following
8092noteworthy limitations applicable to version @value{VERSION}:
8093
8094@itemize
8095@item
8096The installation process does not include a graphical user interface and
8097requires familiarity with GNU/Linux (see the following subsections to
8098get a feel of what that means.)
8099
8aaaae38 8100@item
dbcb0ab1 8101Support for the Logical Volume Manager (LVM) is missing.
8aaaae38
LC
8102
8103@item
0be9b4a9
LC
8104More and more system services are provided (@pxref{Services}), but some
8105may be missing.
8aaaae38
LC
8106
8107@item
be10e4ae 8108More than 6,500 packages are available, but you might
8aaaae38 8109occasionally find that a useful package is missing.
5fe01c2d
LC
8110
8111@item
0be9b4a9 8112GNOME, Xfce, LXDE, and Enlightenment are available (@pxref{Desktop Services}),
5fe01c2d
LC
8113as well as a number of X11 window managers. However, some graphical
8114applications may be missing, as well as KDE.
8aaaae38
LC
8115@end itemize
8116
f97c9175
AE
8117You have been warned! But more than a disclaimer, this is an invitation
8118to report issues (and success stories!), and to join us in improving it.
8aaaae38 8119@xref{Contributing}, for more info.
5af6de3e 8120
e3009f60
LC
8121
8122@node Hardware Considerations
8123@subsection Hardware Considerations
8124
8125@cindex hardware support on GuixSD
8126GNU@tie{}GuixSD focuses on respecting the user's computing freedom. It
8127builds around the kernel Linux-libre, which means that only hardware for
e0b3f97e 8128which free software drivers and firmware exist is supported. Nowadays,
e3009f60
LC
8129a wide range of off-the-shelf hardware is supported on
8130GNU/Linux-libre---from keyboards to graphics cards to scanners and
8131Ethernet controllers. Unfortunately, there are still areas where
8132hardware vendors deny users control over their own computing, and such
8133hardware is not supported on GuixSD.
8134
8135@cindex WiFi, hardware support
e0b3f97e 8136One of the main areas where free drivers or firmware are lacking is WiFi
e3009f60
LC
8137devices. WiFi devices known to work include those using Atheros chips
8138(AR9271 and AR7010), which corresponds to the @code{ath9k} Linux-libre
52db41af
EB
8139driver, and those using Broadcom/AirForce chips (BCM43xx with
8140Wireless-Core Revision 5), which corresponds to the @code{b43-open}
8141Linux-libre driver. Free firmware exists for both and is available
e3009f60
LC
8142out-of-the-box on GuixSD, as part of @var{%base-firmware}
8143(@pxref{operating-system Reference, @code{firmware}}).
8144
8145@cindex RYF, Respects Your Freedom
8146The @uref{https://www.fsf.org/, Free Software Foundation} runs
e0b3f97e 8147@uref{https://www.fsf.org/ryf, @dfn{Respects Your Freedom}} (RYF), a
e3009f60
LC
8148certification program for hardware products that respect your freedom
8149and your privacy and ensure that you have control over your device. We
e0b3f97e 8150encourage you to check the list of RYF-certified devices.
e3009f60
LC
8151
8152Another useful resource is the @uref{https://www.h-node.org/, H-Node}
8153web site. It contains a catalog of hardware devices with information
8154about their support in GNU/Linux.
8155
8156
2626062b
LC
8157@node USB Stick and DVD Installation
8158@subsection USB Stick and DVD Installation
5af6de3e 8159
2626062b
LC
8160An ISO-9660 installation image that can be written to a USB stick or
8161burnt to a DVD can be downloaded from
3b6e7c70 8162@indicateurl{ftp://alpha.gnu.org/gnu/guix/guixsd-install-@value{VERSION}.@var{system}.iso.xz},
5af6de3e
LC
8163where @var{system} is one of:
8164
8165@table @code
8166@item x86_64-linux
8167for a GNU/Linux system on Intel/AMD-compatible 64-bit CPUs;
8168
8169@item i686-linux
8170for a 32-bit GNU/Linux system on Intel-compatible CPUs.
8171@end table
8172
debc6360
LC
8173@c start duplication of authentication part from ``Binary Installation''
8174Make sure to download the associated @file{.sig} file and to verify the
8175authenticity of the image against it, along these lines:
8176
8177@example
3b6e7c70
LC
8178$ wget ftp://alpha.gnu.org/gnu/guix/guixsd-install-@value{VERSION}.@var{system}.iso.xz.sig
8179$ gpg --verify guixsd-install-@value{VERSION}.@var{system}.iso.xz.sig
debc6360
LC
8180@end example
8181
8182If that command fails because you do not have the required public key,
8183then run this command to import it:
8184
8185@example
8186$ gpg --keyserver pgp.mit.edu --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
8187@end example
8188
8189@noindent
8190and rerun the @code{gpg --verify} command.
8191@c end duplication
8192
d79013f6
DM
8193This image contains the tools necessary for an installation.
8194It is meant to be copied @emph{as is} to a large-enough USB stick or DVD.
5af6de3e 8195
2626062b
LC
8196@unnumberedsubsubsec Copying to a USB Stick
8197
5af6de3e
LC
8198To copy the image to a USB stick, follow these steps:
8199
8200@enumerate
8201@item
8202Decompress the image using the @command{xz} command:
8203
8204@example
3b6e7c70 8205xz -d guixsd-install-@value{VERSION}.@var{system}.iso.xz
5af6de3e
LC
8206@end example
8207
8208@item
f97c9175
AE
8209Insert a USB stick of 1@tie{}GiB or more into your machine, and determine
8210its device name. Assuming that the USB stick is known as @file{/dev/sdX},
5af6de3e
LC
8211copy the image with:
8212
8213@example
3b6e7c70 8214dd if=guixsd-install-@value{VERSION}.x86_64-linux.iso of=/dev/sdX
0e2bfa3a 8215sync
5af6de3e
LC
8216@end example
8217
8218Access to @file{/dev/sdX} usually requires root privileges.
8219@end enumerate
8220
2626062b 8221@unnumberedsubsubsec Burning on a DVD
d79013f6
DM
8222
8223To copy the image to a DVD, follow these steps:
8224
8225@enumerate
8226@item
8227Decompress the image using the @command{xz} command:
8228
8229@example
3b6e7c70 8230xz -d guixsd-install-@value{VERSION}.@var{system}.iso.xz
d79013f6
DM
8231@end example
8232
8233@item
8234Insert a blank DVD into your machine, and determine
8235its device name. Assuming that the DVD drive is known as @file{/dev/srX},
8236copy the image with:
8237
8238@example
3b6e7c70 8239growisofs -dvd-compat -Z /dev/srX=guixsd-install-@value{VERSION}.x86_64.iso
d79013f6
DM
8240@end example
8241
8242Access to @file{/dev/srX} usually requires root privileges.
8243@end enumerate
8244
2626062b
LC
8245@unnumberedsubsubsec Booting
8246
d79013f6 8247Once this is done, you should be able to reboot the system and boot from
2626062b
LC
8248the USB stick or DVD. The latter usually requires you to get in the
8249BIOS or UEFI boot menu, where you can choose to boot from the USB stick.
d79013f6
DM
8250
8251@xref{Installing GuixSD in a VM}, if, instead, you would like to install
8252GuixSD in a virtual machine (VM).
8253
2626062b 8254
dedb8d5e 8255@node Preparing for Installation
5af6de3e
LC
8256@subsection Preparing for Installation
8257
d79013f6
DM
8258Once you have successfully booted your computer using the installation medium,
8259you should end up with a root prompt. Several console TTYs are configured
8260and can be used to run commands as root. TTY2 shows this documentation,
de341e7c
LC
8261browsable using the Info reader commands (@pxref{Top,,, info-stnd,
8262Stand-alone GNU Info}). The installation system runs the GPM mouse
8263daemon, which allows you to select text with the left mouse button and
8264to paste it with the middle button.
5af6de3e 8265
ff925d37
LC
8266@quotation Note
8267Installation requires access to the Internet so that any missing
8268dependencies of your system configuration can be downloaded. See the
8269``Networking'' section below.
8270@end quotation
8271
0e69cf67
LC
8272The installation system includes many common tools needed for this task.
8273But it is also a full-blown GuixSD system, which means that you can
8274install additional packages, should you need it, using @command{guix
8275package} (@pxref{Invoking guix package}).
8276
dedb8d5e 8277@subsubsection Keyboard Layout
5af6de3e 8278
dedb8d5e
LC
8279@cindex keyboard layout
8280The installation image uses the US qwerty keyboard layout. If you want
8281to change it, you can use the @command{loadkeys} command. For example,
8282the following command selects the Dvorak keyboard layout:
5af6de3e 8283
dedb8d5e
LC
8284@example
8285loadkeys dvorak
8286@end example
8287
8288See the files under @file{/run/current-system/profile/share/keymaps} for
8289a list of available keyboard layouts. Run @command{man loadkeys} for
8290more information.
8291
8292@subsubsection Networking
8293
8294Run the following command see what your network interfaces are called:
235cba85
LC
8295
8296@example
dedb8d5e 8297ifconfig -a
235cba85
LC
8298@end example
8299
1713c37f
LC
8300@noindent
8301@dots{} or, using the GNU/Linux-specific @command{ip} command:
8302
8303@example
8304ip a
8305@end example
8306
95c559c1 8307@c http://cgit.freedesktop.org/systemd/systemd/tree/src/udev/udev-builtin-net_id.c#n20
dedb8d5e
LC
8308Wired interfaces have a name starting with @samp{e}; for example, the
8309interface corresponding to the first on-board Ethernet controller is
8310called @samp{eno1}. Wireless interfaces have a name starting with
8311@samp{w}, like @samp{w1p2s0}.
8312
8313@table @asis
8314@item Wired connection
8315To configure a wired network run the following command, substituting
8316@var{interface} with the name of the wired interface you want to use.
8317
8318@example
8319ifconfig @var{interface} up
8320@end example
8321
8322@item Wireless connection
e32171ee
JD
8323@cindex wireless
8324@cindex WiFi
dedb8d5e
LC
8325To configure wireless networking, you can create a configuration file
8326for the @command{wpa_supplicant} configuration tool (its location is not
8327important) using one of the available text editors such as
8328@command{zile}:
8329
8330@example
8331zile wpa_supplicant.conf
8332@end example
8333
8334As an example, the following stanza can go to this file and will work
8335for many wireless networks, provided you give the actual SSID and
8336passphrase for the network you are connecting to:
8337
8338@example
8339network=@{
ae768308 8340 ssid="@var{my-ssid}"
dedb8d5e
LC
8341 key_mgmt=WPA-PSK
8342 psk="the network's secret passphrase"
8343@}
8344@end example
8345
8346Start the wireless service and run it in the background with the
8347following command (substitute @var{interface} with the name of the
8348network interface you want to use):
8349
8350@example
8351wpa_supplicant -c wpa_supplicant.conf -i @var{interface} -B
8352@end example
8353
641d0518 8354Run @command{man wpa_supplicant} for more information.
dedb8d5e
LC
8355@end table
8356
e32171ee 8357@cindex DHCP
dedb8d5e
LC
8358At this point, you need to acquire an IP address. On a network where IP
8359addresses are automatically assigned @i{via} DHCP, you can run:
8360
8361@example
15650ac2 8362dhclient -v @var{interface}
dedb8d5e 8363@end example
5af6de3e 8364
dedb8d5e
LC
8365Try to ping a server to see if networking is up and running:
8366
8367@example
8368ping -c 3 gnu.org
8369@end example
5af6de3e
LC
8370
8371Setting up network access is almost always a requirement because the
8372image does not contain all the software and tools that may be needed.
8373
c80cd4df
MB
8374@cindex installing over SSH
8375If you want to, you can continue the installation remotely by starting
8376an SSH server:
8377
8378@example
8379herd start ssh-daemon
8380@end example
8381
8382Make sure to either set a password with @command{passwd}, or configure
8383OpenSSH public key authentication before logging in.
8384
dedb8d5e
LC
8385@subsubsection Disk Partitioning
8386
8387Unless this has already been done, the next step is to partition, and
8388then format the target partition(s).
8389
8390The installation image includes several partitioning tools, including
8391Parted (@pxref{Overview,,, parted, GNU Parted User Manual}),
8392@command{fdisk}, and @command{cfdisk}. Run it and set up your disk with
8393the partition layout you want:
8394
8395@example
8396cfdisk
8397@end example
8398
d918d79f
SB
8399If your disk uses the GUID Partition Table (GPT) format and you plan to
8400install BIOS-based GRUB (which is the default), make sure a BIOS Boot
8401Partition is available (@pxref{BIOS installation,,, grub, GNU GRUB
8402manual}).
8403
8ea98ee1
MB
8404@cindex EFI, installation
8405@cindex UEFI, installation
8406@cindex ESP, EFI system partition
8407If you instead wish to use EFI-based GRUB, a FAT32 @dfn{EFI System Partition}
8408(ESP) is required. This partition should be mounted at @file{/boot/efi} and
8409must have the @code{esp} flag set. E.g., for @command{parted}:
8410
8411@example
8412parted /dev/sda set 1 esp on
8413@end example
8414
dedb8d5e
LC
8415Once you are done partitioning the target hard disk drive, you have to
8416create a file system on the relevant partition(s)@footnote{Currently
b1a505ba 8417GuixSD only supports ext4 and btrfs file systems. In particular, code
01bd3b5e 8418that reads file system UUIDs and labels only works for these file system
6ab63268
LC
8419types.}. For the ESP, if you have one and assuming it is
8420@file{/dev/sda2}, run:
8421
8422@example
8423mkfs.fat -F32 /dev/sda2
8424@end example
5af6de3e 8425
45eee2dd 8426Preferably, assign file systems a label so that you can easily and
7ab44369
LC
8427reliably refer to them in @code{file-system} declarations (@pxref{File
8428Systems}). This is typically done using the @code{-L} option of
dedb8d5e
LC
8429@command{mkfs.ext4} and related commands. So, assuming the target root
8430partition lives at @file{/dev/sda1}, a file system with the label
8431@code{my-root} can be created with:
7ab44369 8432
dedb8d5e
LC
8433@example
8434mkfs.ext4 -L my-root /dev/sda1
8435@end example
dd816355 8436
13fb1bd9
LC
8437@cindex encrypted disk
8438If you are instead planning to encrypt the root partition, you can use
8439the Cryptsetup/LUKS utilities to do that (see @inlinefmtifelse{html,
8440@uref{https://linux.die.net/man/8/cryptsetup, @code{man cryptsetup}},
8441@code{man cryptsetup}} for more information.) Assuming you want to
8442store the root partition on @file{/dev/sda1}, the command sequence would
8443be along these lines:
6d6e6281 8444
13fb1bd9
LC
8445@example
8446cryptsetup luksFormat /dev/sda1
8447cryptsetup open --type luks /dev/sda1 my-partition
8448mkfs.ext4 -L my-root /dev/mapper/my-partition
8449@end example
5af6de3e 8450
45eee2dd 8451Once that is done, mount the target file system under @file{/mnt}
13fb1bd9 8452with a command like (again, assuming @code{my-root} is the label of the
45eee2dd 8453root file system):
83a17b62 8454
dedb8d5e 8455@example
13fb1bd9 8456mount LABEL=my-root /mnt
dedb8d5e 8457@end example
83a17b62 8458
01bd3b5e 8459Also mount any other file systems you would like to use on the target
8ea98ee1
MB
8460system relative to this path. If you have @file{/boot} on a separate
8461partition for example, mount it at @file{/mnt/boot} now so it is found
8462by @code{guix system init} afterwards.
8463
31b6cdf8
LC
8464Finally, if you plan to use one or more swap partitions (@pxref{Memory
8465Concepts, swap space,, libc, The GNU C Library Reference Manual}), make
8466sure to initialize them with @command{mkswap}. Assuming you have one
8467swap partition on @file{/dev/sda2}, you would run:
8468
8469@example
8470mkswap /dev/sda2
b2ff76a0 8471swapon /dev/sda2
31b6cdf8
LC
8472@end example
8473
a4ca4362
CM
8474Alternatively, you may use a swap file. For example, assuming that in
8475the new system you want to use the file @file{/swapfile} as a swap file,
8476you would run@footnote{This example will work for many types of file
8477systems (e.g., ext4). However, for copy-on-write file systems (e.g.,
8478btrfs), the required steps may be different. For details, see the
8479manual pages for @command{mkswap} and @command{swapon}.}:
8480
8481@example
8482# This is 10 GiB of swap space. Adjust "count" to change the size.
8483dd if=/dev/zero of=/mnt/swapfile bs=1MiB count=10240
8484# For security, make the file readable and writable only by root.
8485chmod 600 /mnt/swapfile
8486mkswap /mnt/swapfile
8487swapon /mnt/swapfile
8488@end example
8489
8490Note that if you have encrypted the root partition and created a swap
8491file in its file system as described above, then the encryption also
8492protects the swap file, just like any other file in that file system.
8493
dedb8d5e
LC
8494@node Proceeding with the Installation
8495@subsection Proceeding with the Installation
83a17b62 8496
dedb8d5e
LC
8497With the target partitions ready and the target root mounted on
8498@file{/mnt}, we're ready to go. First, run:
5af6de3e 8499
dedb8d5e
LC
8500@example
8501herd start cow-store /mnt
8502@end example
5af6de3e 8503
b397c0d5
LC
8504This makes @file{/gnu/store} copy-on-write, such that packages added to it
8505during the installation phase are written to the target disk on @file{/mnt}
8506rather than kept in memory. This is necessary because the first phase of
8507the @command{guix system init} command (see below) entails downloads or
8508builds to @file{/gnu/store} which, initially, is an in-memory file system.
5af6de3e 8509
dedb8d5e 8510Next, you have to edit a file and
5af6de3e 8511provide the declaration of the operating system to be installed. To
a8cb87ab
LC
8512that end, the installation system comes with three text editors: GNU nano
8513(@pxref{Top,,, nano, GNU nano Manual}), GNU Zile (an Emacs clone), and
8514nvi (a clone of the original BSD @command{vi} editor).
efa77c6c
LC
8515We strongly recommend storing that file on the target root file system, say,
8516as @file{/mnt/etc/config.scm}. Failing to do that, you will have lost your
8517configuration file once you have rebooted into the newly-installed system.
5af6de3e 8518
dedb8d5e
LC
8519@xref{Using the Configuration System}, for an overview of the
8520configuration file. The example configurations discussed in that
8521section are available under @file{/etc/configuration} in the
8522installation image. Thus, to get started with a system configuration
8523providing a graphical display server (a ``desktop'' system), you can run
8524something along these lines:
8525
8526@example
8527# mkdir /mnt/etc
8528# cp /etc/configuration/desktop.scm /mnt/etc/config.scm
8529# zile /mnt/etc/config.scm
8530@end example
8531
8532You should pay attention to what your configuration file contains, and
8533in particular:
8534
8535@itemize
8536@item
fdfdecdb
TGR
8537Make sure the @code{bootloader-configuration} form refers to the target
8538you want to install GRUB on. It should mention @code{grub-bootloader} if
045ebb3e
AW
8539you are installing GRUB in the legacy way, or @code{grub-efi-bootloader}
8540for newer UEFI systems. For legacy systems, the @code{target} field
8541names a device, like @code{/dev/sda}; for UEFI systems it names a path
8542to a mounted EFI partition, like @code{/boot/efi}, and do make sure the
8543path is actually mounted.
dedb8d5e
LC
8544
8545@item
01bd3b5e 8546Be sure that your file system labels match the value of their respective
dedb8d5e
LC
8547@code{device} fields in your @code{file-system} configuration, assuming
8548your @code{file-system} configuration sets the value of @code{title} to
8549@code{'label}.
13fb1bd9
LC
8550
8551@item
8552If there are encrypted or RAID partitions, make sure to add a
8553@code{mapped-devices} field to describe them (@pxref{Mapped Devices}).
dedb8d5e 8554@end itemize
5af6de3e 8555
dd51caac
LC
8556Once you are done preparing the configuration file, the new system must
8557be initialized (remember that the target root file system is mounted
8558under @file{/mnt}):
5af6de3e
LC
8559
8560@example
8561guix system init /mnt/etc/config.scm /mnt
8562@end example
8563
8564@noindent
dedb8d5e 8565This copies all the necessary files and installs GRUB on
f8818360 8566@file{/dev/sdX}, unless you pass the @option{--no-bootloader} option. For
6621cdb6 8567more information, @pxref{Invoking guix system}. This command may trigger
5af6de3e
LC
8568downloads or builds of missing packages, which can take some time.
8569
1bd4e6db
LC
8570Once that command has completed---and hopefully succeeded!---you can run
8571@command{reboot} and boot into the new system. The @code{root} password
8572in the new system is initially empty; other users' passwords need to be
8573initialized by running the @command{passwd} command as @code{root},
8574unless your configuration specifies otherwise
8575(@pxref{user-account-password, user account passwords}).
8576
7fcf2a0b
LC
8577@cindex upgrading GuixSD
8578From then on, you can update GuixSD whenever you want by running
8579@command{guix pull} as @code{root} (@pxref{Invoking guix pull}), and
8580then running @command{guix system reconfigure} to build a new system
8581generation with the latest packages and services (@pxref{Invoking guix
8582system}). We recommend doing that regularly so that your system
8583includes the latest security updates (@pxref{Security Updates}).
8584
1bd4e6db 8585Join us on @code{#guix} on the Freenode IRC network or on
5af6de3e
LC
8586@file{guix-devel@@gnu.org} to share your experience---good or not so
8587good.
8588
c8b54374
VL
8589@node Installing GuixSD in a VM
8590@subsection Installing GuixSD in a Virtual Machine
8591
8592@cindex virtual machine, GuixSD installation
4b236c88
LF
8593@cindex virtual private server (VPS)
8594@cindex VPS (virtual private server)
8595If you'd like to install GuixSD in a virtual machine (VM) or on a
8596virtual private server (VPS) rather than on your beloved machine, this
8597section is for you.
c8b54374
VL
8598
8599To boot a @uref{http://qemu.org/,QEMU} VM for installing GuixSD in a
8600disk image, follow these steps:
8601
8602@enumerate
8603@item
a0885414 8604First, retrieve and decompress the GuixSD installation image as
2626062b 8605described previously (@pxref{USB Stick and DVD Installation}).
c8b54374
VL
8606
8607@item
8608Create a disk image that will hold the installed system. To make a
8609qcow2-formatted disk image, use the @command{qemu-img} command:
8610
8611@example
01049bb0 8612qemu-img create -f qcow2 guixsd.img 50G
c8b54374
VL
8613@end example
8614
01049bb0
LF
8615The resulting file will be much smaller than 50 GB (typically less than
86161 MB), but it will grow as the virtualized storage device is filled up.
c8b54374
VL
8617
8618@item
8619Boot the USB installation image in an VM:
8620
8621@example
8622qemu-system-x86_64 -m 1024 -smp 1 \
d36b8457 8623 -net user -net nic,model=virtio -boot menu=on \
3b6e7c70 8624 -drive file=guixsd-install-@value{VERSION}.@var{system}.iso \
1c25d6d0 8625 -drive file=guixsd.img
c8b54374
VL
8626@end example
8627
1c25d6d0
DM
8628The ordering of the drives matters.
8629
c8b54374
VL
8630In the VM console, quickly press the @kbd{F12} key to enter the boot
8631menu. Then press the @kbd{2} key and the @kbd{RET} key to validate your
8632selection.
8633
8634@item
8635You're now root in the VM, proceed with the installation process.
8636@xref{Preparing for Installation}, and follow the instructions.
8637@end enumerate
8638
8639Once installation is complete, you can boot the system that's on your
8640@file{guixsd.img} image. @xref{Running GuixSD in a VM}, for how to do
8641that.
8642
dedb8d5e 8643@node Building the Installation Image
5af6de3e
LC
8644@subsection Building the Installation Image
8645
e32171ee 8646@cindex installation image
5af6de3e
LC
8647The installation image described above was built using the @command{guix
8648system} command, specifically:
8649
8650@example
a8ac4f08 8651guix system disk-image gnu/system/install.scm
5af6de3e
LC
8652@end example
8653
6e6a0401
AE
8654Have a look at @file{gnu/system/install.scm} in the source tree,
8655and see also @ref{Invoking guix system} for more information
5af6de3e
LC
8656about the installation image.
8657
cf4a9129
LC
8658@node System Configuration
8659@section System Configuration
b208a005 8660
cf4a9129 8661@cindex system configuration
3ca2731c 8662The Guix System Distribution supports a consistent whole-system configuration
cf4a9129
LC
8663mechanism. By that we mean that all aspects of the global system
8664configuration---such as the available system services, timezone and
8665locale settings, user accounts---are declared in a single place. Such
8666a @dfn{system configuration} can be @dfn{instantiated}---i.e., effected.
91ef73d4 8667
cf4a9129
LC
8668One of the advantages of putting all the system configuration under the
8669control of Guix is that it supports transactional system upgrades, and
1068f26b 8670makes it possible to roll back to a previous system instantiation,
cf4a9129 8671should something go wrong with the new one (@pxref{Features}). Another
1068f26b 8672advantage is that it makes it easy to replicate the exact same configuration
cf4a9129
LC
8673across different machines, or at different points in time, without
8674having to resort to additional administration tools layered on top of
1068f26b 8675the own tools of the system.
cf4a9129 8676@c Yes, we're talking of Puppet, Chef, & co. here. ↑
91ef73d4 8677
cf4a9129
LC
8678This section describes this mechanism. First we focus on the system
8679administrator's viewpoint---explaining how the system is configured and
8680instantiated. Then we show how this mechanism can be extended, for
8681instance to support new system services.
91ef73d4 8682
cf4a9129
LC
8683@menu
8684* Using the Configuration System:: Customizing your GNU system.
7313a52e 8685* operating-system Reference:: Detail of operating-system declarations.
cf4a9129 8686* File Systems:: Configuring file system mounts.
510f9d86 8687* Mapped Devices:: Block device extra processing.
cf4a9129 8688* User Accounts:: Specifying user accounts.
598e19dc 8689* Locales:: Language and cultural convention settings.
cf4a9129 8690* Services:: Specifying system services.
0ae8c15a 8691* Setuid Programs:: Programs running with root privileges.
efb5e833 8692* X.509 Certificates:: Authenticating HTTPS servers.
996ed739 8693* Name Service Switch:: Configuring libc's name service switch.
fd1b1fa2 8694* Initial RAM Disk:: Linux-Libre bootstrapping.
74e64724 8695* Bootloader Configuration:: Configuring the boot loader.
cf4a9129 8696* Invoking guix system:: Instantiating a system configuration.
97d76250 8697* Running GuixSD in a VM:: How to run GuixSD in a virtual machine.
cf4a9129
LC
8698* Defining Services:: Adding new service definitions.
8699@end menu
91ef73d4 8700
cf4a9129
LC
8701@node Using the Configuration System
8702@subsection Using the Configuration System
64d76fa6 8703
cf4a9129
LC
8704The operating system is configured by providing an
8705@code{operating-system} declaration in a file that can then be passed to
8706the @command{guix system} command (@pxref{Invoking guix system}). A
8707simple setup, with the default system services, the default Linux-Libre
8708kernel, initial RAM disk, and boot loader looks like this:
91ef73d4 8709
cf4a9129
LC
8710@findex operating-system
8711@lisp
dd51caac 8712@include os-config-bare-bones.texi
cf4a9129 8713@end lisp
401c53c4 8714
cf4a9129
LC
8715This example should be self-describing. Some of the fields defined
8716above, such as @code{host-name} and @code{bootloader}, are mandatory.
8717Others, such as @code{packages} and @code{services}, can be omitted, in
8718which case they get a default value.
e7f34eb0 8719
5d94ac51
LC
8720Below we discuss the effect of some of the most important fields
8721(@pxref{operating-system Reference}, for details about all the available
8722fields), and how to @dfn{instantiate} the operating system using
8723@command{guix system}.
8724
8725@unnumberedsubsubsec Globally-Visible Packages
8726
cf4a9129 8727@vindex %base-packages
5d94ac51
LC
8728The @code{packages} field lists packages that will be globally visible
8729on the system, for all user accounts---i.e., in every user's @code{PATH}
8730environment variable---in addition to the per-user profiles
8731(@pxref{Invoking guix package}). The @var{%base-packages} variable
8732provides all the tools one would expect for basic user and administrator
8733tasks---including the GNU Core Utilities, the GNU Networking Utilities,
8734the GNU Zile lightweight text editor, @command{find}, @command{grep},
960c40de
LC
8735etc. The example above adds GNU@tie{}Screen and OpenSSH to those,
8736taken from the @code{(gnu packages screen)} and @code{(gnu packages ssh)}
8737modules (@pxref{Package Modules}). The
fe0915cf
JL
8738@code{(list package output)} syntax can be used to add a specific output
8739of a package:
8740
8741@lisp
8742(use-modules (gnu packages))
8743(use-modules (gnu packages dns))
8744
8745(operating-system
8746 ;; ...
8747 (packages (cons (list bind "utils")
8748 %base-packages)))
8749@end lisp
e7f34eb0 8750
f6c9fb1b 8751@findex specification->package
0c3deacc 8752Referring to packages by variable name, like @code{bind} above, has
f6c9fb1b
LC
8753the advantage of being unambiguous; it also allows typos and such to be
8754diagnosed right away as ``unbound variables''. The downside is that one
8755needs to know which module defines which package, and to augment the
8756@code{use-package-modules} line accordingly. To avoid that, one can use
8757the @code{specification->package} procedure of the @code{(gnu packages)}
8758module, which returns the best package for a given name or name and
8759version:
8760
8761@lisp
8762(use-modules (gnu packages))
8763
8764(operating-system
8765 ;; ...
8766 (packages (append (map specification->package
d5e59248 8767 '("tcpdump" "htop" "gnupg@@2.0"))
f6c9fb1b
LC
8768 %base-packages)))
8769@end lisp
8770
5d94ac51
LC
8771@unnumberedsubsubsec System Services
8772
e32171ee 8773@cindex services
cf4a9129
LC
8774@vindex %base-services
8775The @code{services} field lists @dfn{system services} to be made
8776available when the system starts (@pxref{Services}).
8777The @code{operating-system} declaration above specifies that, in
8778addition to the basic services, we want the @command{lshd} secure shell
cd6f6c22
LC
8779daemon listening on port 2222 (@pxref{Networking Services,
8780@code{lsh-service}}). Under the hood,
cf4a9129
LC
8781@code{lsh-service} arranges so that @code{lshd} is started with the
8782right command-line options, possibly with supporting configuration files
cd6f6c22
LC
8783generated as needed (@pxref{Defining Services}).
8784
8785@cindex customization, of services
8786@findex modify-services
8787Occasionally, instead of using the base services as is, you will want to
4d343a14
CM
8788customize them. To do this, use @code{modify-services} (@pxref{Service
8789Reference, @code{modify-services}}) to modify the list.
8790
8791For example, suppose you want to modify @code{guix-daemon} and Mingetty
8792(the console log-in) in the @var{%base-services} list (@pxref{Base
8793Services, @code{%base-services}}). To do that, you can write the
8794following in your operating system declaration:
cd6f6c22
LC
8795
8796@lisp
4d343a14
CM
8797(define %my-services
8798 ;; My very own list of services.
8799 (modify-services %base-services
8800 (guix-service-type config =>
8801 (guix-configuration
8802 (inherit config)
8803 (use-substitutes? #f)
8804 (extra-options '("--gc-keep-derivations"))))
8805 (mingetty-service-type config =>
8806 (mingetty-configuration
317d3b47 8807 (inherit config)))))
4d343a14
CM
8808
8809(operating-system
8810 ;; @dots{}
8811 (services %my-services))
cd6f6c22
LC
8812@end lisp
8813
4d343a14
CM
8814This changes the configuration---i.e., the service parameters---of the
8815@code{guix-service-type} instance, and that of all the
8816@code{mingetty-service-type} instances in the @var{%base-services} list.
8817Observe how this is accomplished: first, we arrange for the original
8818configuration to be bound to the identifier @code{config} in the
8819@var{body}, and then we write the @var{body} so that it evaluates to the
8820desired configuration. In particular, notice how we use @code{inherit}
8821to create a new configuration which has the same values as the old
8822configuration, but with a few modifications.
a1ba8475 8823
13fb1bd9
LC
8824@cindex encrypted disk
8825The configuration for a typical ``desktop'' usage, with an encrypted
8826root partition, the X11 display
d038b674
LC
8827server, GNOME and Xfce (users can choose which of these desktop
8828environments to use at the log-in screen by pressing @kbd{F1}), network
8829management, power management, and more, would look like this:
dd51caac
LC
8830
8831@lisp
8832@include os-config-desktop.texi
8833@end lisp
8834
50fcf37c 8835@cindex UEFI
8ea98ee1 8836A graphical UEFI system with a choice of lightweight window managers
d038b674
LC
8837instead of full-blown desktop environments would look like this:
8838
8839@lisp
8840@include os-config-lightweight-desktop.texi
8841@end lisp
8842
01bd3b5e 8843This example refers to the @file{/boot/efi} file system by its UUID,
50fcf37c
LC
8844@code{1234-ABCD}. Replace this UUID with the right UUID on your system,
8845as returned by the @command{blkid} command.
8846
dd51caac 8847@xref{Desktop Services}, for the exact list of services provided by
efb5e833
LC
8848@var{%desktop-services}. @xref{X.509 Certificates}, for background
8849information about the @code{nss-certs} package that is used here.
dd51caac 8850
5d94ac51
LC
8851Again, @var{%desktop-services} is just a list of service objects. If
8852you want to remove services from there, you can do so using the
8853procedures for list filtering (@pxref{SRFI-1 Filtering and
8854Partitioning,,, guile, GNU Guile Reference Manual}). For instance, the
8855following expression returns a list that contains all the services in
8856@var{%desktop-services} minus the Avahi service:
8857
8858@example
8859(remove (lambda (service)
8860 (eq? (service-kind service) avahi-service-type))
8861 %desktop-services)
8862@end example
8863
8864@unnumberedsubsubsec Instantiating the System
8865
8866Assuming the @code{operating-system} declaration
8867is stored in the @file{my-system-config.scm}
cf4a9129
LC
8868file, the @command{guix system reconfigure my-system-config.scm} command
8869instantiates that configuration, and makes it the default GRUB boot
65797bff
LC
8870entry (@pxref{Invoking guix system}).
8871
1068f26b 8872The normal way to change the system configuration is by updating this
65797bff 8873file and re-running @command{guix system reconfigure}. One should never
8b499030 8874have to touch files in @file{/etc} or to run commands that modify the
65797bff
LC
8875system state such as @command{useradd} or @command{grub-install}. In
8876fact, you must avoid that since that would not only void your warranty
8877but also prevent you from rolling back to previous versions of your
8878system, should you ever need to.
8879
8880@cindex roll-back, of the operating system
8881Speaking of roll-back, each time you run @command{guix system
8882reconfigure}, a new @dfn{generation} of the system is created---without
8883modifying or deleting previous generations. Old system generations get
74e64724 8884an entry in the bootloader boot menu, allowing you to boot them in case
65797bff
LC
8885something went wrong with the latest generation. Reassuring, no? The
8886@command{guix system list-generations} command lists the system
067a2e2d
CM
8887generations available on disk. It is also possible to roll back the
8888system via the commands @command{guix system roll-back} and
8889@command{guix system switch-generation}.
8890
8891Although the command @command{guix system reconfigure} will not modify
8892previous generations, must take care when the current generation is not
8893the latest (e.g., after invoking @command{guix system roll-back}), since
8894the operation might overwrite a later generation (@pxref{Invoking guix
8895system}).
b81e1947 8896
5d94ac51
LC
8897@unnumberedsubsubsec The Programming Interface
8898
cf4a9129
LC
8899At the Scheme level, the bulk of an @code{operating-system} declaration
8900is instantiated with the following monadic procedure (@pxref{The Store
8901Monad}):
b81e1947 8902
cf4a9129
LC
8903@deffn {Monadic Procedure} operating-system-derivation os
8904Return a derivation that builds @var{os}, an @code{operating-system}
8905object (@pxref{Derivations}).
b81e1947 8906
cf4a9129
LC
8907The output of the derivation is a single directory that refers to all
8908the packages, configuration files, and other supporting files needed to
8909instantiate @var{os}.
8910@end deffn
b81e1947 8911
5d94ac51
LC
8912This procedure is provided by the @code{(gnu system)} module. Along
8913with @code{(gnu services)} (@pxref{Services}), this module contains the
8914guts of GuixSD. Make sure to visit it!
8915
8916
7313a52e
LC
8917@node operating-system Reference
8918@subsection @code{operating-system} Reference
8919
8920This section summarizes all the options available in
8921@code{operating-system} declarations (@pxref{Using the Configuration
8922System}).
8923
8924@deftp {Data Type} operating-system
8925This is the data type representing an operating system configuration.
8926By that, we mean all the global system configuration, not per-user
8927configuration (@pxref{Using the Configuration System}).
8928
8929@table @asis
8930@item @code{kernel} (default: @var{linux-libre})
fbb25e56 8931The package object of the operating system kernel to use@footnote{Currently
7313a52e
LC
8932only the Linux-libre kernel is supported. In the future, it will be
8933possible to use the GNU@tie{}Hurd.}.
8934
ee2a6304
LC
8935@item @code{kernel-arguments} (default: @code{'()})
8936List of strings or gexps representing additional arguments to pass on
1068f26b 8937the command-line of the kernel---e.g., @code{("console=ttyS0")}.
ee2a6304 8938
7313a52e 8939@item @code{bootloader}
74e64724 8940The system bootloader configuration object. @xref{Bootloader Configuration}.
7313a52e 8941
bc499b11 8942@item @code{initrd-modules} (default: @code{%base-initrd-modules})
e32171ee
JD
8943@cindex initrd
8944@cindex initial RAM disk
bc499b11
LC
8945The list of Linux kernel modules that need to be available in the
8946initial RAM disk. @xref{Initial RAM Disk}.
8947
8948@item @code{initrd} (default: @code{base-initrd})
8949A monadic procedure that returns an initial RAM disk for the Linux
8950kernel. This field is provided to support low-level customization and
8951should rarely be needed for casual use. @xref{Initial RAM Disk}.
7313a52e 8952
f34c56be
LC
8953@item @code{firmware} (default: @var{%base-firmware})
8954@cindex firmware
8955List of firmware packages loadable by the operating system kernel.
8956
52db41af
EB
8957The default includes firmware needed for Atheros- and Broadcom-based
8958WiFi devices (Linux-libre modules @code{ath9k} and @code{b43-open},
8959respectively). @xref{Hardware Considerations}, for more info on
8960supported hardware.
f34c56be 8961
7313a52e
LC
8962@item @code{host-name}
8963The host name.
8964
8965@item @code{hosts-file}
8966@cindex hosts file
24e02c28 8967A file-like object (@pxref{G-Expressions, file-like objects}) for use as
7313a52e 8968@file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C Library
24e02c28 8969Reference Manual}). The default is a file with entries for
7313a52e
LC
8970@code{localhost} and @var{host-name}.
8971
8972@item @code{mapped-devices} (default: @code{'()})
8973A list of mapped devices. @xref{Mapped Devices}.
8974
8975@item @code{file-systems}
8976A list of file systems. @xref{File Systems}.
8977
8978@item @code{swap-devices} (default: @code{'()})
8979@cindex swap devices
a4ca4362
CM
8980A list of strings identifying devices or files to be used for ``swap
8981space'' (@pxref{Memory Concepts,,, libc, The GNU C Library Reference
8982Manual}). For example, @code{'("/dev/sda3")} or @code{'("/swapfile")}.
8983It is possible to specify a swap file in a file system on a mapped
8984device, provided that the necessary device mapping and file system are
8985also specified. @xref{Mapped Devices} and @ref{File Systems}.
7313a52e 8986
bf87f38a 8987@item @code{users} (default: @code{%base-user-accounts})
7313a52e
LC
8988@itemx @code{groups} (default: @var{%base-groups})
8989List of user accounts and groups. @xref{User Accounts}.
8990
45f62117
LC
8991If the @code{users} list lacks a user account with UID@tie{}0, a
8992``root'' account with UID@tie{}0 is automatically added.
8993
7313a52e 8994@item @code{skeletons} (default: @code{(default-skeletons)})
e9dffec1
LC
8995A list target file name/file-like object tuples (@pxref{G-Expressions,
8996file-like objects}). These are the skeleton files that will be added to
8997the home directory of newly-created user accounts.
7313a52e
LC
8998
8999For instance, a valid value may look like this:
9000
9001@example
e9dffec1
LC
9002`((".bashrc" ,(plain-file "bashrc" "echo Hello\n"))
9003 (".guile" ,(plain-file "guile"
9004 "(use-modules (ice-9 readline))
9005 (activate-readline)")))
7313a52e
LC
9006@end example
9007
9008@item @code{issue} (default: @var{%default-issue})
9009A string denoting the contents of the @file{/etc/issue} file, which is
1068f26b 9010displayed when users log in on a text console.
7313a52e
LC
9011
9012@item @code{packages} (default: @var{%base-packages})
9013The set of packages installed in the global profile, which is accessible
9014at @file{/run/current-system/profile}.
9015
1068f26b 9016The default set includes core utilities and it is good practice to
7313a52e
LC
9017install non-core utilities in user profiles (@pxref{Invoking guix
9018package}).
9019
9020@item @code{timezone}
9021A timezone identifying string---e.g., @code{"Europe/Paris"}.
9022
17c20385
LC
9023You can run the @command{tzselect} command to find out which timezone
9024string corresponds to your region. Choosing an invalid timezone name
9025causes @command{guix system} to fail.
9026
598e19dc
LC
9027@item @code{locale} (default: @code{"en_US.utf8"})
9028The name of the default locale (@pxref{Locale Names,,, libc, The GNU C
9029Library Reference Manual}). @xref{Locales}, for more information.
9030
9031@item @code{locale-definitions} (default: @var{%default-locale-definitions})
9032The list of locale definitions to be compiled and that may be used at
9033run time. @xref{Locales}.
7313a52e 9034
34760ae7
LC
9035@item @code{locale-libcs} (default: @code{(list @var{glibc})})
9036The list of GNU@tie{}libc packages whose locale data and tools are used
9037to build the locale definitions. @xref{Locales}, for compatibility
9038considerations that justify this option.
9039
996ed739 9040@item @code{name-service-switch} (default: @var{%default-nss})
1068f26b 9041Configuration of the libc name service switch (NSS)---a
996ed739
LC
9042@code{<name-service-switch>} object. @xref{Name Service Switch}, for
9043details.
9044
7313a52e 9045@item @code{services} (default: @var{%base-services})
28d939af 9046A list of service objects denoting system services. @xref{Services}.
7313a52e
LC
9047
9048@item @code{pam-services} (default: @code{(base-pam-services)})
9049@cindex PAM
9050@cindex pluggable authentication modules
9051Linux @dfn{pluggable authentication module} (PAM) services.
9052@c FIXME: Add xref to PAM services section.
9053
9054@item @code{setuid-programs} (default: @var{%setuid-programs})
9055List of string-valued G-expressions denoting setuid programs.
9056@xref{Setuid Programs}.
9057
f5a9ffa0
AK
9058@item @code{sudoers-file} (default: @var{%sudoers-specification})
9059@cindex sudoers file
84765839
LC
9060The contents of the @file{/etc/sudoers} file as a file-like object
9061(@pxref{G-Expressions, @code{local-file} and @code{plain-file}}).
7313a52e
LC
9062
9063This file specifies which users can use the @command{sudo} command, what
9064they are allowed to do, and what privileges they may gain. The default
9065is that only @code{root} and members of the @code{wheel} group may use
9066@code{sudo}.
9067
9068@end table
9069@end deftp
9070
cf4a9129
LC
9071@node File Systems
9072@subsection File Systems
b81e1947 9073
cf4a9129 9074The list of file systems to be mounted is specified in the
1068f26b 9075@code{file-systems} field of the operating system declaration
cf4a9129
LC
9076(@pxref{Using the Configuration System}). Each file system is declared
9077using the @code{file-system} form, like this:
b81e1947
LC
9078
9079@example
cf4a9129
LC
9080(file-system
9081 (mount-point "/home")
9082 (device "/dev/sda3")
9083 (type "ext4"))
b81e1947
LC
9084@end example
9085
cf4a9129
LC
9086As usual, some of the fields are mandatory---those shown in the example
9087above---while others can be omitted. These are described below.
b81e1947 9088
cf4a9129
LC
9089@deftp {Data Type} file-system
9090Objects of this type represent file systems to be mounted. They
9091contain the following members:
5ff3c4b8 9092
cf4a9129
LC
9093@table @asis
9094@item @code{type}
9095This is a string specifying the type of the file system---e.g.,
9096@code{"ext4"}.
5ff3c4b8 9097
cf4a9129
LC
9098@item @code{mount-point}
9099This designates the place where the file system is to be mounted.
b81e1947 9100
cf4a9129
LC
9101@item @code{device}
9102This names the ``source'' of the file system. By default it is the name
9103of a node under @file{/dev}, but its meaning depends on the @code{title}
9104field described below.
401c53c4 9105
cf4a9129
LC
9106@item @code{title} (default: @code{'device})
9107This is a symbol that specifies how the @code{device} field is to be
9108interpreted.
401c53c4 9109
cf4a9129
LC
9110When it is the symbol @code{device}, then the @code{device} field is
9111interpreted as a file name; when it is @code{label}, then @code{device}
01bd3b5e
TGR
9112is interpreted as a file system label name; when it is @code{uuid},
9113@code{device} is interpreted as a file system unique identifier (UUID).
da7cabd4 9114
661a1d79 9115UUIDs may be converted from their string representation (as shown by the
0767f6a6
LC
9116@command{tune2fs -l} command) using the @code{uuid} form@footnote{The
9117@code{uuid} form expects 16-byte UUIDs as defined in
9118@uref{https://tools.ietf.org/html/rfc4122, RFC@tie{}4122}. This is the
9119form of UUID used by the ext2 family of file systems and others, but it
9120is different from ``UUIDs'' found in FAT file systems, for instance.},
9121like this:
661a1d79
LC
9122
9123@example
9124(file-system
9125 (mount-point "/home")
9126 (type "ext4")
9127 (title 'uuid)
9128 (device (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")))
9129@end example
9130
01bd3b5e
TGR
9131The @code{label} and @code{uuid} options offer a way to refer to file
9132systems without having to hard-code their actual device
661a1d79
LC
9133name@footnote{Note that, while it is tempting to use
9134@file{/dev/disk/by-uuid} and similar device names to achieve the same
9135result, this is not recommended: These special device nodes are created
9136by the udev daemon and may be unavailable at the time the device is
9137mounted.}.
da7cabd4 9138
1068f26b 9139However, when the source of a file system is a mapped device (@pxref{Mapped
5f86a66e
LC
9140Devices}), its @code{device} field @emph{must} refer to the mapped
9141device name---e.g., @file{/dev/mapper/root-partition}---and consequently
9142@code{title} must be set to @code{'device}. This is required so that
9143the system knows that mounting the file system depends on having the
9144corresponding device mapping established.
9145
cf4a9129
LC
9146@item @code{flags} (default: @code{'()})
9147This is a list of symbols denoting mount flags. Recognized flags
2c071ce9
LC
9148include @code{read-only}, @code{bind-mount}, @code{no-dev} (disallow
9149access to special files), @code{no-suid} (ignore setuid and setgid
9150bits), and @code{no-exec} (disallow program execution.)
da7cabd4 9151
cf4a9129
LC
9152@item @code{options} (default: @code{#f})
9153This is either @code{#f}, or a string denoting mount options.
da7cabd4 9154
be21979d
LC
9155@item @code{mount?} (default: @code{#t})
9156This value indicates whether to automatically mount the file system when
9157the system is brought up. When set to @code{#f}, the file system gets
9158an entry in @file{/etc/fstab} (read by the @command{mount} command) but
9159is not automatically mounted.
9160
cf4a9129
LC
9161@item @code{needed-for-boot?} (default: @code{#f})
9162This Boolean value indicates whether the file system is needed when
9163booting. If that is true, then the file system is mounted when the
9164initial RAM disk (initrd) is loaded. This is always the case, for
9165instance, for the root file system.
da7cabd4 9166
cf4a9129
LC
9167@item @code{check?} (default: @code{#t})
9168This Boolean indicates whether the file system needs to be checked for
9169errors before being mounted.
f9cc8971 9170
4e469051
LC
9171@item @code{create-mount-point?} (default: @code{#f})
9172When true, the mount point is created if it does not exist yet.
9173
e51710d1 9174@item @code{dependencies} (default: @code{'()})
13fb1bd9
LC
9175This is a list of @code{<file-system>} or @code{<mapped-device>} objects
9176representing file systems that must be mounted or mapped devices that
9177must be opened before (and unmounted or closed after) this one.
e51710d1
LC
9178
9179As an example, consider a hierarchy of mounts: @file{/sys/fs/cgroup} is
9180a dependency of @file{/sys/fs/cgroup/cpu} and
9181@file{/sys/fs/cgroup/memory}.
9182
13fb1bd9
LC
9183Another example is a file system that depends on a mapped device, for
9184example for an encrypted partition (@pxref{Mapped Devices}).
cf4a9129
LC
9185@end table
9186@end deftp
da7cabd4 9187
a69576ea
LC
9188The @code{(gnu system file-systems)} exports the following useful
9189variables.
9190
9191@defvr {Scheme Variable} %base-file-systems
9192These are essential file systems that are required on normal systems,
cc0e575a 9193such as @var{%pseudo-terminal-file-system} and @var{%immutable-store} (see
3392ce5d
LC
9194below.) Operating system declarations should always contain at least
9195these.
a69576ea
LC
9196@end defvr
9197
7f239fd3
LC
9198@defvr {Scheme Variable} %pseudo-terminal-file-system
9199This is the file system to be mounted as @file{/dev/pts}. It supports
9200@dfn{pseudo-terminals} created @i{via} @code{openpty} and similar
9201functions (@pxref{Pseudo-Terminals,,, libc, The GNU C Library Reference
9202Manual}). Pseudo-terminals are used by terminal emulators such as
9203@command{xterm}.
9204@end defvr
9205
db17ae5c
LC
9206@defvr {Scheme Variable} %shared-memory-file-system
9207This file system is mounted as @file{/dev/shm} and is used to support
9208memory sharing across processes (@pxref{Memory-mapped I/O,
9209@code{shm_open},, libc, The GNU C Library Reference Manual}).
9210@end defvr
9211
3392ce5d
LC
9212@defvr {Scheme Variable} %immutable-store
9213This file system performs a read-only ``bind mount'' of
9214@file{/gnu/store}, making it read-only for all the users including
9215@code{root}. This prevents against accidental modification by software
9216running as @code{root} or by system administrators.
9217
9218The daemon itself is still able to write to the store: it remounts it
9219read-write in its own ``name space.''
9220@end defvr
9221
a69576ea
LC
9222@defvr {Scheme Variable} %binary-format-file-system
9223The @code{binfmt_misc} file system, which allows handling of arbitrary
9224executable file types to be delegated to user space. This requires the
9225@code{binfmt.ko} kernel module to be loaded.
9226@end defvr
9227
9228@defvr {Scheme Variable} %fuse-control-file-system
9229The @code{fusectl} file system, which allows unprivileged users to mount
9230and unmount user-space FUSE file systems. This requires the
9231@code{fuse.ko} kernel module to be loaded.
9232@end defvr
9233
510f9d86
LC
9234@node Mapped Devices
9235@subsection Mapped Devices
9236
9237@cindex device mapping
9238@cindex mapped devices
9239The Linux kernel has a notion of @dfn{device mapping}: a block device,
9240such as a hard disk partition, can be @dfn{mapped} into another device,
97c8aef1 9241usually in @code{/dev/mapper/},
510f9d86
LC
9242with additional processing over the data that flows through
9243it@footnote{Note that the GNU@tie{}Hurd makes no difference between the
9244concept of a ``mapped device'' and that of a file system: both boil down
9245to @emph{translating} input/output operations made on a file to
9246operations on its backing store. Thus, the Hurd implements mapped
9247devices, like file systems, using the generic @dfn{translator} mechanism
9248(@pxref{Translators,,, hurd, The GNU Hurd Reference Manual}).}. A
9249typical example is encryption device mapping: all writes to the mapped
9250device are encrypted, and all reads are deciphered, transparently.
97c8aef1
AE
9251Guix extends this notion by considering any device or set of devices that
9252are @dfn{transformed} in some way to create a new device; for instance,
9253RAID devices are obtained by @dfn{assembling} several other devices, such
9254as hard disks or partitions, into a new one that behaves as one partition.
9255Other examples, not yet implemented, are LVM logical volumes.
510f9d86 9256
97c8aef1
AE
9257Mapped devices are declared using the @code{mapped-device} form,
9258defined as follows; for examples, see below.
510f9d86
LC
9259
9260@deftp {Data Type} mapped-device
9261Objects of this type represent device mappings that will be made when
9262the system boots up.
9263
9cb426b8
LC
9264@table @code
9265@item source
97c8aef1
AE
9266This is either a string specifying the name of the block device to be mapped,
9267such as @code{"/dev/sda3"}, or a list of such strings when several devices
9268need to be assembled for creating a new one.
510f9d86 9269
9cb426b8 9270@item target
97c8aef1
AE
9271This string specifies the name of the resulting mapped device. For
9272kernel mappers such as encrypted devices of type @code{luks-device-mapping},
9273specifying @code{"my-partition"} leads to the creation of
510f9d86 9274the @code{"/dev/mapper/my-partition"} device.
97c8aef1
AE
9275For RAID devices of type @code{raid-device-mapping}, the full device name
9276such as @code{"/dev/md0"} needs to be given.
510f9d86 9277
9cb426b8 9278@item type
510f9d86
LC
9279This must be a @code{mapped-device-kind} object, which specifies how
9280@var{source} is mapped to @var{target}.
9281@end table
9282@end deftp
9283
9284@defvr {Scheme Variable} luks-device-mapping
9285This defines LUKS block device encryption using the @command{cryptsetup}
1068f26b 9286command from the package with the same name. It relies on the
510f9d86
LC
9287@code{dm-crypt} Linux kernel module.
9288@end defvr
9289
97c8aef1
AE
9290@defvr {Scheme Variable} raid-device-mapping
9291This defines a RAID device, which is assembled using the @code{mdadm}
9292command from the package with the same name. It requires a Linux kernel
9293module for the appropriate RAID level to be loaded, such as @code{raid456}
9294for RAID-4, RAID-5 or RAID-6, or @code{raid10} for RAID-10.
9295@end defvr
9296
9297@cindex disk encryption
9298@cindex LUKS
9299The following example specifies a mapping from @file{/dev/sda3} to
9300@file{/dev/mapper/home} using LUKS---the
ddf1cd51 9301@url{https://gitlab.com/cryptsetup/cryptsetup,Linux Unified Key Setup}, a
97c8aef1
AE
9302standard mechanism for disk encryption.
9303The @file{/dev/mapper/home}
9304device can then be used as the @code{device} of a @code{file-system}
9305declaration (@pxref{File Systems}).
9306
9307@example
9308(mapped-device
9309 (source "/dev/sda3")
9310 (target "home")
9311 (type luks-device-mapping))
9312@end example
9313
9314Alternatively, to become independent of device numbering, one may obtain
9315the LUKS UUID (@dfn{unique identifier}) of the source device by a
9316command like:
9317
9318@example
9319cryptsetup luksUUID /dev/sda3
9320@end example
9321
9322and use it as follows:
9323
9324@example
9325(mapped-device
9326 (source (uuid "cb67fc72-0d54-4c88-9d4b-b225f30b0f44"))
9327 (target "home")
9328 (type luks-device-mapping))
9329@end example
9330
a4ca4362
CM
9331@cindex swap encryption
9332It is also desirable to encrypt swap space, since swap space may contain
9333sensitive data. One way to accomplish that is to use a swap file in a
9334file system on a device mapped via LUKS encryption. In this way, the
9335swap file is encrypted because the entire device is encrypted.
9336@xref{Preparing for Installation,,Disk Partitioning}, for an example.
9337
97c8aef1
AE
9338A RAID device formed of the partitions @file{/dev/sda1} and @file{/dev/sdb1}
9339may be declared as follows:
9340
9341@example
9342(mapped-device
9343 (source (list "/dev/sda1" "/dev/sdb1"))
9344 (target "/dev/md0")
9345 (type raid-device-mapping))
9346@end example
9347
9348The @file{/dev/md0} device can then be used as the @code{device} of a
9349@code{file-system} declaration (@pxref{File Systems}).
9350Note that the RAID level need not be given; it is chosen during the
9351initial creation and formatting of the RAID device and is determined
9352automatically later.
9353
9354
cf4a9129
LC
9355@node User Accounts
9356@subsection User Accounts
ee85f3db 9357
e32171ee
JD
9358@cindex users
9359@cindex accounts
9360@cindex user accounts
9bea87a5
LC
9361User accounts and groups are entirely managed through the
9362@code{operating-system} declaration. They are specified with the
9363@code{user-account} and @code{user-group} forms:
ee85f3db 9364
cf4a9129
LC
9365@example
9366(user-account
9367 (name "alice")
9368 (group "users")
24e752c0
LC
9369 (supplementary-groups '("wheel" ;allow use of sudo, etc.
9370 "audio" ;sound card
9371 "video" ;video devices such as webcams
9372 "cdrom")) ;the good ol' CD-ROM
cf4a9129
LC
9373 (comment "Bob's sister")
9374 (home-directory "/home/alice"))
9375@end example
25083588 9376
9bea87a5
LC
9377When booting or upon completion of @command{guix system reconfigure},
9378the system ensures that only the user accounts and groups specified in
9379the @code{operating-system} declaration exist, and with the specified
9380properties. Thus, account or group creations or modifications made by
9381directly invoking commands such as @command{useradd} are lost upon
9382reconfiguration or reboot. This ensures that the system remains exactly
9383as declared.
9384
cf4a9129
LC
9385@deftp {Data Type} user-account
9386Objects of this type represent user accounts. The following members may
9387be specified:
ee85f3db 9388
cf4a9129
LC
9389@table @asis
9390@item @code{name}
9391The name of the user account.
ee85f3db 9392
cf4a9129 9393@item @code{group}
e32171ee 9394@cindex groups
cf4a9129
LC
9395This is the name (a string) or identifier (a number) of the user group
9396this account belongs to.
ee85f3db 9397
cf4a9129
LC
9398@item @code{supplementary-groups} (default: @code{'()})
9399Optionally, this can be defined as a list of group names that this
9400account belongs to.
ee85f3db 9401
cf4a9129
LC
9402@item @code{uid} (default: @code{#f})
9403This is the user ID for this account (a number), or @code{#f}. In the
9404latter case, a number is automatically chosen by the system when the
9405account is created.
ee85f3db 9406
cf4a9129 9407@item @code{comment} (default: @code{""})
1068f26b 9408A comment about the account, such as the account owner's full name.
c8c871d1 9409
cf4a9129
LC
9410@item @code{home-directory}
9411This is the name of the home directory for the account.
ee85f3db 9412
eb56ee02
LC
9413@item @code{create-home-directory?} (default: @code{#t})
9414Indicates whether the home directory of this account should be created
9415if it does not exist yet.
9416
cf4a9129
LC
9417@item @code{shell} (default: Bash)
9418This is a G-expression denoting the file name of a program to be used as
9419the shell (@pxref{G-Expressions}).
ee85f3db 9420
cf4a9129
LC
9421@item @code{system?} (default: @code{#f})
9422This Boolean value indicates whether the account is a ``system''
9423account. System accounts are sometimes treated specially; for instance,
9424graphical login managers do not list them.
ee85f3db 9425
1bd4e6db 9426@anchor{user-account-password}
cf4a9129 9427@item @code{password} (default: @code{#f})
eb59595c
LC
9428You would normally leave this field to @code{#f}, initialize user
9429passwords as @code{root} with the @command{passwd} command, and then let
9bea87a5
LC
9430users change it with @command{passwd}. Passwords set with
9431@command{passwd} are of course preserved across reboot and
9432reconfiguration.
eb59595c
LC
9433
9434If you @emph{do} want to have a preset password for an account, then
9435this field must contain the encrypted password, as a string.
5d1f1177
LC
9436@xref{crypt,,, libc, The GNU C Library Reference Manual}, for more information
9437on password encryption, and @ref{Encryption,,, guile, GNU Guile Reference
eb59595c 9438Manual}, for information on Guile's @code{crypt} procedure.
c8c871d1 9439
cf4a9129
LC
9440@end table
9441@end deftp
ee85f3db 9442
e32171ee 9443@cindex groups
cf4a9129 9444User group declarations are even simpler:
ee85f3db 9445
cf4a9129
LC
9446@example
9447(user-group (name "students"))
9448@end example
ee85f3db 9449
cf4a9129
LC
9450@deftp {Data Type} user-group
9451This type is for, well, user groups. There are just a few fields:
af8a56b8 9452
cf4a9129
LC
9453@table @asis
9454@item @code{name}
1068f26b 9455The name of the group.
ee85f3db 9456
cf4a9129
LC
9457@item @code{id} (default: @code{#f})
9458The group identifier (a number). If @code{#f}, a new number is
9459automatically allocated when the group is created.
ee85f3db 9460
c8fa3426
LC
9461@item @code{system?} (default: @code{#f})
9462This Boolean value indicates whether the group is a ``system'' group.
9463System groups have low numerical IDs.
9464
cf4a9129
LC
9465@item @code{password} (default: @code{#f})
9466What, user groups can have a password? Well, apparently yes. Unless
1068f26b 9467@code{#f}, this field specifies the password of the group.
ee85f3db 9468
cf4a9129
LC
9469@end table
9470@end deftp
401c53c4 9471
cf4a9129
LC
9472For convenience, a variable lists all the basic user groups one may
9473expect:
401c53c4 9474
cf4a9129
LC
9475@defvr {Scheme Variable} %base-groups
9476This is the list of basic user groups that users and/or packages expect
9477to be present on the system. This includes groups such as ``root'',
9478``wheel'', and ``users'', as well as groups used to control access to
9479specific devices such as ``audio'', ``disk'', and ``cdrom''.
9480@end defvr
401c53c4 9481
bf87f38a
LC
9482@defvr {Scheme Variable} %base-user-accounts
9483This is the list of basic system accounts that programs may expect to
9484find on a GNU/Linux system, such as the ``nobody'' account.
9485
9486Note that the ``root'' account is not included here. It is a
9487special-case and is automatically added whether or not it is specified.
9488@end defvr
9489
598e19dc
LC
9490@node Locales
9491@subsection Locales
9492
9493@cindex locale
9494A @dfn{locale} defines cultural conventions for a particular language
9495and region of the world (@pxref{Locales,,, libc, The GNU C Library
9496Reference Manual}). Each locale has a name that typically has the form
b2636518 9497@code{@var{language}_@var{territory}.@var{codeset}}---e.g.,
598e19dc
LC
9498@code{fr_LU.utf8} designates the locale for the French language, with
9499cultural conventions from Luxembourg, and using the UTF-8 encoding.
9500
9501@cindex locale definition
9502Usually, you will want to specify the default locale for the machine
9503using the @code{locale} field of the @code{operating-system} declaration
9504(@pxref{operating-system Reference, @code{locale}}).
9505
f5582b2c
LC
9506The selected locale is automatically added to the @dfn{locale
9507definitions} known to the system if needed, with its codeset inferred
9508from its name---e.g., @code{bo_CN.utf8} will be assumed to use the
9509@code{UTF-8} codeset. Additional locale definitions can be specified in
9510the @code{locale-definitions} slot of @code{operating-system}---this is
9511useful, for instance, if the codeset could not be inferred from the
9512locale name. The default set of locale definitions includes some widely
9513used locales, but not all the available locales, in order to save space.
9514
9515For instance, to add the North Frisian locale for Germany, the value of
9516that field may be:
598e19dc
LC
9517
9518@example
9519(cons (locale-definition
9520 (name "fy_DE.utf8") (source "fy_DE"))
9521 %default-locale-definitions)
9522@end example
9523
9524Likewise, to save space, one might want @code{locale-definitions} to
9525list only the locales that are actually used, as in:
9526
9527@example
9528(list (locale-definition
9529 (name "ja_JP.eucjp") (source "ja_JP")
9530 (charset "EUC-JP")))
9531@end example
9532
5c3c1427
LC
9533@vindex LOCPATH
9534The compiled locale definitions are available at
46bd6edd
LC
9535@file{/run/current-system/locale/X.Y}, where @code{X.Y} is the libc
9536version, which is the default location where the GNU@tie{}libc provided
9537by Guix looks for locale data. This can be overridden using the
9538@code{LOCPATH} environment variable (@pxref{locales-and-locpath,
5c3c1427
LC
9539@code{LOCPATH} and locale packages}).
9540
598e19dc
LC
9541The @code{locale-definition} form is provided by the @code{(gnu system
9542locale)} module. Details are given below.
9543
9544@deftp {Data Type} locale-definition
9545This is the data type of a locale definition.
9546
9547@table @asis
9548
9549@item @code{name}
9550The name of the locale. @xref{Locale Names,,, libc, The GNU C Library
9551Reference Manual}, for more information on locale names.
9552
9553@item @code{source}
9554The name of the source for that locale. This is typically the
9555@code{@var{language}_@var{territory}} part of the locale name.
9556
9557@item @code{charset} (default: @code{"UTF-8"})
9558The ``character set'' or ``code set'' for that locale,
9559@uref{http://www.iana.org/assignments/character-sets, as defined by
9560IANA}.
9561
9562@end table
9563@end deftp
9564
9565@defvr {Scheme Variable} %default-locale-definitions
1068f26b 9566A list of commonly used UTF-8 locales, used as the default
b2636518 9567value of the @code{locale-definitions} field of @code{operating-system}
598e19dc 9568declarations.
b2636518
LC
9569
9570@cindex locale name
9571@cindex normalized codeset in locale names
9572These locale definitions use the @dfn{normalized codeset} for the part
9573that follows the dot in the name (@pxref{Using gettextized software,
9574normalized codeset,, libc, The GNU C Library Reference Manual}). So for
9575instance it has @code{uk_UA.utf8} but @emph{not}, say,
9576@code{uk_UA.UTF-8}.
598e19dc 9577@end defvr
401c53c4 9578
34760ae7
LC
9579@subsubsection Locale Data Compatibility Considerations
9580
9581@cindex incompatibility, of locale data
9582@code{operating-system} declarations provide a @code{locale-libcs} field
9583to specify the GNU@tie{}libc packages that are used to compile locale
9584declarations (@pxref{operating-system Reference}). ``Why would I
9585care?'', you may ask. Well, it turns out that the binary format of
9586locale data is occasionally incompatible from one libc version to
9587another.
9588
9589@c See <https://sourceware.org/ml/libc-alpha/2015-09/msg00575.html>
9590@c and <https://lists.gnu.org/archive/html/guix-devel/2015-08/msg00737.html>.
9591For instance, a program linked against libc version 2.21 is unable to
9592read locale data produced with libc 2.22; worse, that program
9593@emph{aborts} instead of simply ignoring the incompatible locale
9594data@footnote{Versions 2.23 and later of GNU@tie{}libc will simply skip
9595the incompatible locale data, which is already an improvement.}.
9596Similarly, a program linked against libc 2.22 can read most, but not
201fff9e 9597all, of the locale data from libc 2.21 (specifically, @code{LC_COLLATE}
34760ae7
LC
9598data is incompatible); thus calls to @code{setlocale} may fail, but
9599programs will not abort.
9600
9601The ``problem'' in GuixSD is that users have a lot of freedom: They can
9602choose whether and when to upgrade software in their profiles, and might
9603be using a libc version different from the one the system administrator
9604used to build the system-wide locale data.
9605
9606Fortunately, unprivileged users can also install their own locale data
9607and define @var{GUIX_LOCPATH} accordingly (@pxref{locales-and-locpath,
9608@code{GUIX_LOCPATH} and locale packages}).
9609
9610Still, it is best if the system-wide locale data at
9611@file{/run/current-system/locale} is built for all the libc versions
9612actually in use on the system, so that all the programs can access
9613it---this is especially crucial on a multi-user system. To do that, the
9614administrator can specify several libc packages in the
9615@code{locale-libcs} field of @code{operating-system}:
9616
9617@example
9618(use-package-modules base)
9619
9620(operating-system
9621 ;; @dots{}
9622 (locale-libcs (list glibc-2.21 (canonical-package glibc))))
9623@end example
9624
9625This example would lead to a system containing locale definitions for
9626both libc 2.21 and the current version of libc in
9627@file{/run/current-system/locale}.
9628
9629
cf4a9129
LC
9630@node Services
9631@subsection Services
401c53c4 9632
cf4a9129
LC
9633@cindex system services
9634An important part of preparing an @code{operating-system} declaration is
9635listing @dfn{system services} and their configuration (@pxref{Using the
9636Configuration System}). System services are typically daemons launched
9637when the system boots, or other actions needed at that time---e.g.,
d8b94dbd
LC
9638configuring network access.
9639
e8b652d4
LC
9640GuixSD has a broad definition of ``service'' (@pxref{Service
9641Composition}), but many services are managed by the GNU@tie{}Shepherd
9642(@pxref{Shepherd Services}). On a running system, the @command{herd}
9643command allows you to list the available services, show their status,
9644start and stop them, or do other specific operations (@pxref{Jump
9645Start,,, shepherd, The GNU Shepherd Manual}). For example:
d8b94dbd
LC
9646
9647@example
dd17bc38 9648# herd status
d8b94dbd
LC
9649@end example
9650
9651The above command, run as @code{root}, lists the currently defined
dd17bc38 9652services. The @command{herd doc} command shows a synopsis of the given
d8b94dbd
LC
9653service:
9654
9655@example
dd17bc38 9656# herd doc nscd
d8b94dbd
LC
9657Run libc's name service cache daemon (nscd).
9658@end example
9659
9660The @command{start}, @command{stop}, and @command{restart} sub-commands
9661have the effect you would expect. For instance, the commands below stop
9662the nscd service and restart the Xorg display server:
9663
9664@example
dd17bc38 9665# herd stop nscd
d8b94dbd 9666Service nscd has been stopped.
dd17bc38 9667# herd restart xorg-server
d8b94dbd
LC
9668Service xorg-server has been stopped.
9669Service xorg-server has been started.
9670@end example
401c53c4 9671
cf4a9129 9672The following sections document the available services, starting with
d8b94dbd
LC
9673the core services, that may be used in an @code{operating-system}
9674declaration.
401c53c4 9675
cf4a9129
LC
9676@menu
9677* Base Services:: Essential system services.
c311089b 9678* Scheduled Job Execution:: The mcron service.
92c03a87 9679* Log Rotation:: The rottlog service.
cf4a9129
LC
9680* Networking Services:: Network setup, SSH daemon, etc.
9681* X Window:: Graphical display.
f2ec23d1 9682* Printing Services:: Local and remote printer support.
fe1a39d3 9683* Desktop Services:: D-Bus and desktop services.
065225a4 9684* Database Services:: SQL databases, key-value stores, etc.
d8c18af8 9685* Mail Services:: IMAP, POP3, SMTP, and all that.
78cef99b 9686* Messaging Services:: Messaging services.
b6d2930d 9687* Telephony Services:: Telephony services.
730ed6ec 9688* Monitoring Services:: Monitoring services.
859e367d 9689* Kerberos Services:: Kerberos services.
58724c48 9690* Web Services:: Web servers.
1115f140 9691* Certificate Services:: TLS certificates via Let's Encrypt.
ba69e8f7 9692* DNS Services:: DNS daemons.
2be1b471 9693* VPN Services:: VPN daemons.
eb419bc9 9694* Network File System:: NFS related services.
a7cf4eb6 9695* Continuous Integration:: The Cuirass service.
bfbf6e1e 9696* Power management Services:: The TLP tool.
06465d2b 9697* Audio Services:: The MPD.
e6051057 9698* Virtualization Services:: Virtualization services.
05f1cb3c 9699* Version Control Services:: Providing remote access to Git repositories.
a76acfd3 9700* Game Services:: Game servers.
dbc6d370 9701* Miscellaneous Services:: Other services.
cf4a9129 9702@end menu
401c53c4 9703
cf4a9129
LC
9704@node Base Services
9705@subsubsection Base Services
a1ba8475 9706
cf4a9129
LC
9707The @code{(gnu services base)} module provides definitions for the basic
9708services that one expects from the system. The services exported by
9709this module are listed below.
401c53c4 9710
cf4a9129 9711@defvr {Scheme Variable} %base-services
31771497
LC
9712This variable contains a list of basic services (@pxref{Service Types
9713and Services}, for more information on service objects) one would
cf4a9129 9714expect from the system: a login service (mingetty) on each tty, syslogd,
1068f26b 9715the libc name service cache daemon (nscd), the udev device manager, and
cf4a9129 9716more.
401c53c4 9717
cf4a9129
LC
9718This is the default value of the @code{services} field of
9719@code{operating-system} declarations. Usually, when customizing a
9720system, you will want to append services to @var{%base-services}, like
9721this:
401c53c4 9722
cf4a9129 9723@example
fa1e31b8 9724(cons* (avahi-service) (lsh-service) %base-services)
cf4a9129
LC
9725@end example
9726@end defvr
401c53c4 9727
387e1754
LC
9728@defvr {Scheme Variable} special-files-service-type
9729This is the service that sets up ``special files'' such as
9730@file{/bin/sh}; an instance of it is part of @code{%base-services}.
9731
9732The value associated with @code{special-files-service-type} services
9733must be a list of tuples where the first element is the ``special file''
9734and the second element is its target. By default it is:
9735
9736@cindex @file{/bin/sh}
9737@cindex @file{sh}, in @file{/bin}
9738@example
9739`(("/bin/sh" ,(file-append @var{bash} "/bin/sh")))
9740@end example
9741
9742@cindex @file{/usr/bin/env}
9743@cindex @file{env}, in @file{/usr/bin}
9744If you want to add, say, @code{/usr/bin/env} to your system, you can
9745change it to:
9746
9747@example
9748`(("/bin/sh" ,(file-append @var{bash} "/bin/sh"))
9749 ("/usr/bin/env" ,(file-append @var{coreutils} "/bin/env")))
9750@end example
9751
9752Since this is part of @code{%base-services}, you can use
9753@code{modify-services} to customize the set of special files
9754(@pxref{Service Reference, @code{modify-services}}). But the simple way
9755to add a special file is @i{via} the @code{extra-special-file} procedure
9756(see below.)
9757@end defvr
9758
9759@deffn {Scheme Procedure} extra-special-file @var{file} @var{target}
9760Use @var{target} as the ``special file'' @var{file}.
9761
9762For example, adding the following lines to the @code{services} field of
9763your operating system declaration leads to a @file{/usr/bin/env}
9764symlink:
9765
9766@example
9767(extra-special-file "/usr/bin/env"
9768 (file-append coreutils "/bin/env"))
9769@end example
9770@end deffn
9771
be1c2c54 9772@deffn {Scheme Procedure} host-name-service @var{name}
cf4a9129
LC
9773Return a service that sets the host name to @var{name}.
9774@end deffn
401c53c4 9775
317d3b47
DC
9776@deffn {Scheme Procedure} login-service @var{config}
9777Return a service to run login according to @var{config}, a
9778@code{<login-configuration>} object, which specifies the message of the day,
9779among other things.
9780@end deffn
9781
9782@deftp {Data Type} login-configuration
9783This is the data type representing the configuration of login.
9784
9785@table @asis
9786
9787@item @code{motd}
e32171ee 9788@cindex message of the day
317d3b47
DC
9789A file-like object containing the ``message of the day''.
9790
9791@item @code{allow-empty-passwords?} (default: @code{#t})
9792Allow empty passwords by default so that first-time users can log in when
9793the 'root' account has just been created.
9794
9795@end table
9796@end deftp
9797
66e4f01c
LC
9798@deffn {Scheme Procedure} mingetty-service @var{config}
9799Return a service to run mingetty according to @var{config}, a
9800@code{<mingetty-configuration>} object, which specifies the tty to run, among
9801other things.
cf4a9129 9802@end deffn
401c53c4 9803
66e4f01c
LC
9804@deftp {Data Type} mingetty-configuration
9805This is the data type representing the configuration of Mingetty, which
9ee4c9ab 9806provides the default implementation of virtual console log-in.
66e4f01c
LC
9807
9808@table @asis
9809
9810@item @code{tty}
9811The name of the console this Mingetty runs on---e.g., @code{"tty1"}.
9812
66e4f01c
LC
9813@item @code{auto-login} (default: @code{#f})
9814When true, this field must be a string denoting the user name under
f9b9a033 9815which the system automatically logs in. When it is @code{#f}, a
66e4f01c
LC
9816user name and password must be entered to log in.
9817
9818@item @code{login-program} (default: @code{#f})
9819This must be either @code{#f}, in which case the default log-in program
9820is used (@command{login} from the Shadow tool suite), or a gexp denoting
9821the name of the log-in program.
9822
9823@item @code{login-pause?} (default: @code{#f})
9824When set to @code{#t} in conjunction with @var{auto-login}, the user
9825will have to press a key before the log-in shell is launched.
9826
9827@item @code{mingetty} (default: @var{mingetty})
9828The Mingetty package to use.
9829
9830@end table
9831@end deftp
9832
9ee4c9ab
LF
9833@deffn {Scheme Procedure} agetty-service @var{config}
9834Return a service to run agetty according to @var{config}, an
9835@code{<agetty-configuration>} object, which specifies the tty to run,
9836among other things.
9837@end deffn
9838
9839@deftp {Data Type} agetty-configuration
9840This is the data type representing the configuration of agetty, which
9841implements virtual and serial console log-in. See the @code{agetty(8)}
9842man page for more information.
9843
9844@table @asis
9845
9846@item @code{tty}
9847The name of the console this agetty runs on, as a string---e.g.,
5a9902c8
DM
9848@code{"ttyS0"}. This argument is optional, it will default to
9849a reasonable default serial port used by the kernel Linux.
9850
9851For this, if there is a value for an option @code{agetty.tty} in the kernel
9852command line, agetty will extract the device name of the serial port
9853from it and use that.
9854
9855If not and if there is a value for an option @code{console} with a tty in
9856the Linux command line, agetty will extract the device name of the
9857serial port from it and use that.
9858
9859In both cases, agetty will leave the other serial device settings
9860(baud rate etc.) alone---in the hope that Linux pinned them to the
9861correct values.
9ee4c9ab
LF
9862
9863@item @code{baud-rate} (default: @code{#f})
9864A string containing a comma-separated list of one or more baud rates, in
9865descending order.
9866
9867@item @code{term} (default: @code{#f})
9868A string containing the value used for the @code{TERM} environment
9869variable.
9870
9871@item @code{eight-bits?} (default: @code{#f})
9872When @code{#t}, the tty is assumed to be 8-bit clean, and parity detection is
9873disabled.
9874
9875@item @code{auto-login} (default: @code{#f})
9876When passed a login name, as a string, the specified user will be logged
9877in automatically without prompting for their login name or password.
9878
9879@item @code{no-reset?} (default: @code{#f})
9880When @code{#t}, don't reset terminal cflags (control modes).
9881
9882@item @code{host} (default: @code{#f})
9883This accepts a string containing the "login_host", which will be written
9884into the @file{/var/run/utmpx} file.
9885
9886@item @code{remote?} (default: @code{#f})
9887When set to @code{#t} in conjunction with @var{host}, this will add an
9888@code{-r} fakehost option to the command line of the login program
9889specified in @var{login-program}.
9890
9891@item @code{flow-control?} (default: @code{#f})
9892When set to @code{#t}, enable hardware (RTS/CTS) flow control.
9893
9894@item @code{no-issue?} (default: @code{#f})
9895When set to @code{#t}, the contents of the @file{/etc/issue} file will
9896not be displayed before presenting the login prompt.
9897
9898@item @code{init-string} (default: @code{#f})
9899This accepts a string that will be sent to the tty or modem before
9900sending anything else. It can be used to initialize a modem.
9901
9902@item @code{no-clear?} (default: @code{#f})
9903When set to @code{#t}, agetty will not clear the screen before showing
9904the login prompt.
9905
9906@item @code{login-program} (default: (file-append shadow "/bin/login"))
9907This must be either a gexp denoting the name of a log-in program, or
9908unset, in which case the default value is the @command{login} from the
9909Shadow tool suite.
9910
9911@item @code{local-line} (default: @code{#f})
9912Control the CLOCAL line flag. This accepts one of three symbols as
9913arguments, @code{'auto}, @code{'always}, or @code{'never}. If @code{#f},
9914the default value chosen by agetty is @code{'auto}.
9915
9916@item @code{extract-baud?} (default: @code{#f})
9917When set to @code{#t}, instruct agetty to try to extract the baud rate
9918from the status messages produced by certain types of modems.
9919
9920@item @code{skip-login?} (default: @code{#f})
9921When set to @code{#t}, do not prompt the user for a login name. This
9922can be used with @var{login-program} field to use non-standard login
9923systems.
9924
9925@item @code{no-newline?} (default: @code{#f})
9926When set to @code{#t}, do not print a newline before printing the
9927@file{/etc/issue} file.
9928
9929@c Is this dangerous only when used with login-program, or always?
9930@item @code{login-options} (default: @code{#f})
9931This option accepts a string containing options that are passed to the
9932login program. When used with the @var{login-program}, be aware that a
9933malicious user could try to enter a login name containing embedded
9934options that could be parsed by the login program.
9935
9936@item @code{login-pause} (default: @code{#f})
9937When set to @code{#t}, wait for any key before showing the login prompt.
9938This can be used in conjunction with @var{auto-login} to save memory by
9939lazily spawning shells.
9940
9941@item @code{chroot} (default: @code{#f})
9942Change root to the specified directory. This option accepts a directory
9943path as a string.
9944
9945@item @code{hangup?} (default: @code{#f})
9946Use the Linux system call @code{vhangup} to do a virtual hangup of the
9947specified terminal.
9948
9949@item @code{keep-baud?} (default: @code{#f})
9950When set to @code{#t}, try to keep the existing baud rate. The baud
9951rates from @var{baud-rate} are used when agetty receives a @key{BREAK}
9952character.
9953
9954@item @code{timeout} (default: @code{#f})
9955When set to an integer value, terminate if no user name could be read
9956within @var{timeout} seconds.
9957
9958@item @code{detect-case?} (default: @code{#f})
9959When set to @code{#t}, turn on support for detecting an uppercase-only
9960terminal. This setting will detect a login name containing only
9961uppercase letters as indicating an uppercase-only terminal and turn on
9962some upper-to-lower case conversions. Note that this will not support
9963Unicode characters.
9964
9965@item @code{wait-cr?} (default: @code{#f})
9966When set to @code{#t}, wait for the user or modem to send a
9967carriage-return or linefeed character before displaying
9968@file{/etc/issue} or login prompt. This is typically used with the
9969@var{init-string} option.
9970
9971@item @code{no-hints?} (default: @code{#f})
9972When set to @code{#t}, do not print hints about Num, Caps, and Scroll
9973locks.
9974
9975@item @code{no-hostname?} (default: @code{#f})
9976By default, the hostname is printed. When this option is set to
9977@code{#t}, no hostname will be shown at all.
9978
9979@item @code{long-hostname?} (default: @code{#f})
9980By default, the hostname is only printed until the first dot. When this
9981option is set to @code{#t}, the fully qualified hostname by
9982@code{gethostname} or @code{getaddrinfo} is shown.
9983
9984@item @code{erase-characters} (default: @code{#f})
9985This option accepts a string of additional characters that should be
9986interpreted as backspace when the user types their login name.
9987
9988@item @code{kill-characters} (default: @code{#f})
9989This option accepts a string that should be interpreted to mean "ignore
9990all previous characters" (also called a "kill" character) when the types
9991their login name.
9992
9993@item @code{chdir} (default: @code{#f})
9994This option accepts, as a string, a directory path that will be changed
9995to before login.
9996
9997@item @code{delay} (default: @code{#f})
9998This options accepts, as an integer, the number of seconds to sleep
9999before opening the tty and displaying the login prompt.
10000
10001@item @code{nice} (default: @code{#f})
10002This option accepts, as an integer, the nice value with which to run the
10003@command{login} program.
10004
10005@item @code{extra-options} (default: @code{'()})
10006This option provides an "escape hatch" for the user to provide arbitrary
10007command-line arguments to @command{agetty} as a list of strings.
10008
10009@end table
10010@end deftp
10011
46ec2707
DC
10012@deffn {Scheme Procedure} kmscon-service-type @var{config}
10013Return a service to run @uref{https://www.freedesktop.org/wiki/Software/kmscon,kmscon}
10014according to @var{config}, a @code{<kmscon-configuration>} object, which
10015specifies the tty to run, among other things.
10016@end deffn
10017
10018@deftp {Data Type} kmscon-configuration
10019This is the data type representing the configuration of Kmscon, which
9ee4c9ab 10020implements virtual console log-in.
46ec2707
DC
10021
10022@table @asis
10023
10024@item @code{virtual-terminal}
10025The name of the console this Kmscon runs on---e.g., @code{"tty1"}.
10026
10027@item @code{login-program} (default: @code{#~(string-append #$shadow "/bin/login")})
10028A gexp denoting the name of the log-in program. The default log-in program is
10029@command{login} from the Shadow tool suite.
10030
10031@item @code{login-arguments} (default: @code{'("-p")})
10032A list of arguments to pass to @command{login}.
10033
10034@item @code{hardware-acceleration?} (default: #f)
10035Whether to use hardware acceleration.
10036
10037@item @code{kmscon} (default: @var{kmscon})
10038The Kmscon package to use.
10039
10040@end table
10041@end deftp
10042
6454b333
LC
10043@cindex name service cache daemon
10044@cindex nscd
be1c2c54 10045@deffn {Scheme Procedure} nscd-service [@var{config}] [#:glibc glibc] @
4aee6e60 10046 [#:name-services '()]
1068f26b 10047Return a service that runs the libc name service cache daemon (nscd) with the
b893f1ae
LC
10048given @var{config}---an @code{<nscd-configuration>} object. @xref{Name
10049Service Switch}, for an example.
cf4a9129 10050@end deffn
401c53c4 10051
6454b333
LC
10052@defvr {Scheme Variable} %nscd-default-configuration
10053This is the default @code{<nscd-configuration>} value (see below) used
1068f26b 10054by @code{nscd-service}. It uses the caches defined by
6454b333
LC
10055@var{%nscd-default-caches}; see below.
10056@end defvr
10057
10058@deftp {Data Type} nscd-configuration
1068f26b 10059This is the data type representing the name service cache daemon (nscd)
6454b333
LC
10060configuration.
10061
10062@table @asis
10063
b893f1ae
LC
10064@item @code{name-services} (default: @code{'()})
10065List of packages denoting @dfn{name services} that must be visible to
10066the nscd---e.g., @code{(list @var{nss-mdns})}.
10067
10068@item @code{glibc} (default: @var{glibc})
10069Package object denoting the GNU C Library providing the @command{nscd}
10070command.
10071
6454b333 10072@item @code{log-file} (default: @code{"/var/log/nscd.log"})
1068f26b 10073Name of the nscd log file. This is where debugging output goes when
6454b333
LC
10074@code{debug-level} is strictly positive.
10075
10076@item @code{debug-level} (default: @code{0})
1068f26b 10077Integer denoting the debugging levels. Higher numbers mean that more
6454b333
LC
10078debugging output is logged.
10079
10080@item @code{caches} (default: @var{%nscd-default-caches})
10081List of @code{<nscd-cache>} objects denoting things to be cached; see
10082below.
10083
10084@end table
10085@end deftp
10086
10087@deftp {Data Type} nscd-cache
10088Data type representing a cache database of nscd and its parameters.
10089
10090@table @asis
10091
10092@item @code{database}
10093This is a symbol representing the name of the database to be cached.
10094Valid values are @code{passwd}, @code{group}, @code{hosts}, and
10095@code{services}, which designate the corresponding NSS database
10096(@pxref{NSS Basics,,, libc, The GNU C Library Reference Manual}).
10097
10098@item @code{positive-time-to-live}
10099@itemx @code{negative-time-to-live} (default: @code{20})
10100A number representing the number of seconds during which a positive or
10101negative lookup result remains in cache.
10102
10103@item @code{check-files?} (default: @code{#t})
10104Whether to check for updates of the files corresponding to
10105@var{database}.
10106
10107For instance, when @var{database} is @code{hosts}, setting this flag
10108instructs nscd to check for updates in @file{/etc/hosts} and to take
10109them into account.
10110
10111@item @code{persistent?} (default: @code{#t})
10112Whether the cache should be stored persistently on disk.
10113
10114@item @code{shared?} (default: @code{#t})
10115Whether the cache should be shared among users.
10116
10117@item @code{max-database-size} (default: 32@tie{}MiB)
10118Maximum size in bytes of the database cache.
10119
10120@c XXX: 'suggested-size' and 'auto-propagate?' seem to be expert
10121@c settings, so leave them out.
10122
10123@end table
10124@end deftp
10125
10126@defvr {Scheme Variable} %nscd-default-caches
10127List of @code{<nscd-cache>} objects used by default by
1068f26b 10128@code{nscd-configuration} (see above).
6454b333
LC
10129
10130It enables persistent and aggressive caching of service and host name
10131lookups. The latter provides better host name lookup performance,
10132resilience in the face of unreliable name servers, and also better
10133privacy---often the result of host name lookups is in local cache, so
10134external name servers do not even need to be queried.
10135@end defvr
10136
ec2e2f6c 10137@anchor{syslog-configuration-type}
e32171ee
JD
10138@cindex syslog
10139@cindex logging
ec2e2f6c
DC
10140@deftp {Data Type} syslog-configuration
10141This data type represents the configuration of the syslog daemon.
6454b333 10142
ec2e2f6c
DC
10143@table @asis
10144@item @code{syslogd} (default: @code{#~(string-append #$inetutils "/libexec/syslogd")})
10145The syslog daemon to use.
10146
10147@item @code{config-file} (default: @code{%default-syslog.conf})
10148The syslog configuration file to use.
10149
10150@end table
10151@end deftp
10152
10153@anchor{syslog-service}
e32171ee 10154@cindex syslog
ec2e2f6c
DC
10155@deffn {Scheme Procedure} syslog-service @var{config}
10156Return a service that runs a syslog daemon according to @var{config}.
44abcb28
LC
10157
10158@xref{syslogd invocation,,, inetutils, GNU Inetutils}, for more
10159information on the configuration file syntax.
cf4a9129 10160@end deffn
401c53c4 10161
0adfe95a
LC
10162@anchor{guix-configuration-type}
10163@deftp {Data Type} guix-configuration
10164This data type represents the configuration of the Guix build daemon.
10165@xref{Invoking guix-daemon}, for more information.
10166
10167@table @asis
10168@item @code{guix} (default: @var{guix})
10169The Guix package to use.
401c53c4 10170
0adfe95a
LC
10171@item @code{build-group} (default: @code{"guixbuild"})
10172Name of the group for build user accounts.
401c53c4 10173
0adfe95a
LC
10174@item @code{build-accounts} (default: @code{10})
10175Number of build user accounts to create.
401c53c4 10176
0adfe95a 10177@item @code{authorize-key?} (default: @code{#t})
e32171ee 10178@cindex substitutes, authorization thereof
5b58c28b
LC
10179Whether to authorize the substitute keys listed in
10180@code{authorized-keys}---by default that of @code{hydra.gnu.org}
0adfe95a
LC
10181(@pxref{Substitutes}).
10182
5b58c28b
LC
10183@vindex %default-authorized-guix-keys
10184@item @code{authorized-keys} (default: @var{%default-authorized-guix-keys})
10185The list of authorized key files for archive imports, as a list of
10186string-valued gexps (@pxref{Invoking guix archive}). By default, it
10187contains that of @code{hydra.gnu.org} (@pxref{Substitutes}).
10188
0adfe95a
LC
10189@item @code{use-substitutes?} (default: @code{#t})
10190Whether to use substitutes.
10191
b0b9f6e0
LC
10192@item @code{substitute-urls} (default: @var{%default-substitute-urls})
10193The list of URLs where to look for substitutes by default.
10194
3bee4b61
LC
10195@item @code{max-silent-time} (default: @code{0})
10196@itemx @code{timeout} (default: @code{0})
10197The number of seconds of silence and the number of seconds of activity,
10198respectively, after which a build process times out. A value of zero
10199disables the timeout.
10200
f4596f76
LC
10201@item @code{log-compression} (default: @code{'bzip2})
10202The type of compression used for build logs---one of @code{gzip},
10203@code{bzip2}, or @code{none}.
10204
0adfe95a
LC
10205@item @code{extra-options} (default: @code{'()})
10206List of extra command-line options for @command{guix-daemon}.
10207
dc0ef095
LC
10208@item @code{log-file} (default: @code{"/var/log/guix-daemon.log"})
10209File where @command{guix-daemon}'s standard output and standard error
10210are written.
10211
93d32da9
LF
10212@item @code{http-proxy} (default: @code{#f})
10213The HTTP proxy used for downloading fixed-output derivations and
10214substitutes.
10215
b191f0a6
LF
10216@item @code{tmpdir} (default: @code{#f})
10217A directory path where the @command{guix-daemon} will perform builds.
10218
0adfe95a
LC
10219@end table
10220@end deftp
10221
10222@deffn {Scheme Procedure} guix-service @var{config}
10223Return a service that runs the Guix build daemon according to
10224@var{config}.
cf4a9129 10225@end deffn
a1ba8475 10226
6e644cfd 10227@deffn {Scheme Procedure} udev-service [#:udev @var{eudev} #:rules @code{'()}]
cf4a9129 10228Run @var{udev}, which populates the @file{/dev} directory dynamically.
6e644cfd
MC
10229udev rules can be provided as a list of files through the @var{rules}
10230variable. The procedures @var{udev-rule} and @var{file->udev-rule} from
10231@code{(gnu services base)} simplify the creation of such rule files.
10232
10233@deffn {Scheme Procedure} udev-rule [@var{file-name} @var{contents}]
10234Return a udev-rule file named @var{file-name} containing the rules
10235defined by the @var{contents} literal.
e0c1d080
RW
10236
10237In the following example, a rule for a USB device is defined to be
6e644cfd
MC
10238stored in the file @file{90-usb-thing.rules}. The rule runs a script
10239upon detecting a USB device with a given product identifier.
e0c1d080
RW
10240
10241@example
10242(define %example-udev-rule
6e644cfd
MC
10243 (udev-rule
10244 "90-usb-thing.rules"
10245 (string-append "ACTION==\"add\", SUBSYSTEM==\"usb\", "
10246 "ATTR@{product@}==\"Example\", "
10247 "RUN+=\"/path/to/script\"")))
10248@end example
10249@end deffn
10250
10251Here we show how the default @var{udev-service} can be extended with it.
10252
10253@example
10254(operating-system
10255 ;; @dots{}
10256 (services
10257 (modify-services %desktop-services
10258 (udev-service-type config =>
10259 (udev-configuration (inherit config)
10260 (rules (append (udev-configuration-rules config)
10261 (list %example-udev-rule))))))))
10262@end example
10263
10264@deffn {Scheme Procedure} file->udev-rule [@var{file-name} @var{file}]
10265Return a udev file named @var{file-name} containing the rules defined
10266within @var{file}, a file-like object.
10267
10268The following example showcases how we can use an existing rule file.
10269
10270@example
10271(use-modules (guix download) ;for url-fetch
10272 (guix packages) ;for origin
10273 ;; @dots{})
10274
10275(define %android-udev-rules
10276 (file->udev-rule
10277 "51-android-udev.rules"
10278 (let ((version "20170910"))
10279 (origin
10280 (method url-fetch)
10281 (uri (string-append "https://raw.githubusercontent.com/M0Rf30/"
10282 "android-udev-rules/" version "/51-android.rules"))
10283 (sha256
10284 (base32 "0lmmagpyb6xsq6zcr2w1cyx9qmjqmajkvrdbhjx32gqf1d9is003"))))))
10285@end example
10286@end deffn
10287
10288Additionally, Guix package definitions can be included in @var{rules} in
10289order to extend the udev rules with the definitions found under their
10290@file{lib/udev/rules.d} sub-directory. In lieu of the previous
10291@var{file->udev-rule} example, we could have used the
10292@var{android-udev-rules} package which exists in Guix in the @code{(gnu
10293packages android)} module.
10294
10295The following example shows how to use the @var{android-udev-rules}
10296package so that the Android tool @command{adb} can detect devices
10297without root privileges. It also details how to create the
10298@code{adbusers} group, which is required for the proper functioning of
10299the rules defined within the @var{android-udev-rules} package. To
10300create such a group, we must define it both as part of the
10301@var{supplementary-groups} of our @var{user-account} declaration, as
10302well as in the @var{groups} field of the @var{operating-system} record.
10303
10304@example
10305(use-modules (gnu packages android) ;for android-udev-rules
10306 (gnu system shadow) ;for user-group
10307 ;; @dots{})
e0c1d080
RW
10308
10309(operating-system
10310 ;; @dots{}
6e644cfd
MC
10311 (users (cons (user-acount
10312 ;; @dots{}
10313 (supplementary-groups
10314 '("adbusers" ;for adb
10315 "wheel" "netdev" "audio" "video"))
10316 ;; @dots{})))
10317
10318 (groups (cons (user-group (system? #t) (name "adbusers"))
10319 %base-groups))
10320
10321 ;; @dots{}
10322
10323 (services
10324 (modify-services %desktop-services
10325 (udev-service-type config =>
10326 (udev-configuration (inherit config)
10327 (rules (cons* android-udev-rules
10328 (udev-configuration-rules config))))))))
e0c1d080 10329@end example
cf4a9129 10330@end deffn
401c53c4 10331
8faaf8d7 10332@defvr {Scheme Variable} urandom-seed-service-type
a535e122 10333Save some entropy in @var{%random-seed-file} to seed @file{/dev/urandom}
9a56cf2b
LF
10334when rebooting. It also tries to seed @file{/dev/urandom} from
10335@file{/dev/hwrng} while booting, if @file{/dev/hwrng} exists and is
10336readable.
8faaf8d7 10337@end defvr
a535e122
LF
10338
10339@defvr {Scheme Variable} %random-seed-file
10340This is the name of the file where some random bytes are saved by
10341@var{urandom-seed-service} to seed @file{/dev/urandom} when rebooting.
10342It defaults to @file{/var/lib/random-seed}.
10343@end defvr
10344
e32171ee
JD
10345@cindex keymap
10346@cindex keyboard
b3d05f48 10347@deffn {Scheme Procedure} console-keymap-service @var{files} ...
dedb8d5e 10348@cindex keyboard layout
b3d05f48
AK
10349Return a service to load console keymaps from @var{files} using
10350@command{loadkeys} command. Most likely, you want to load some default
10351keymap, which can be done like this:
10352
10353@example
10354(console-keymap-service "dvorak")
10355@end example
10356
10357Or, for example, for a Swedish keyboard, you may need to combine
10358the following keymaps:
10359@example
10360(console-keymap-service "se-lat6" "se-fi-lat6")
10361@end example
10362
10363Also you can specify a full file name (or file names) of your keymap(s).
10364See @code{man loadkeys} for details.
10365
5eca9459
AK
10366@end deffn
10367
e32171ee
JD
10368@cindex mouse
10369@cindex gpm
1aaf116d 10370@deffn {Scheme Procedure} gpm-service [#:gpm @var{gpm}] @
8664cc88
LC
10371 [#:options]
10372Run @var{gpm}, the general-purpose mouse daemon, with the given
10373command-line @var{options}. GPM allows users to use the mouse in the console,
10374notably to select, copy, and paste text. The default value of @var{options}
10375uses the @code{ps2} protocol, which works for both USB and PS/2 mice.
10376
10377This service is not part of @var{%base-services}.
10378@end deffn
10379
f1e900a3 10380@anchor{guix-publish-service-type}
3d3c5650 10381@deffn {Scheme Variable} guix-publish-service-type
f1e900a3 10382This is the service type for @command{guix publish} (@pxref{Invoking
3d3c5650 10383guix publish}). Its value must be a @code{guix-configuration}
f1e900a3 10384object, as described below.
1c52181f
LC
10385
10386This assumes that @file{/etc/guix} already contains a signing key pair as
10387created by @command{guix archive --generate-key} (@pxref{Invoking guix
10388archive}). If that is not the case, the service will fail to start.
10389@end deffn
10390
f1e900a3
LC
10391@deftp {Data Type} guix-publish-configuration
10392Data type representing the configuration of the @code{guix publish}
10393service.
10394
10395@table @asis
10396@item @code{guix} (default: @code{guix})
10397The Guix package to use.
10398
10399@item @code{port} (default: @code{80})
10400The TCP port to listen for connections.
10401
10402@item @code{host} (default: @code{"localhost"})
10403The host (and thus, network interface) to listen to. Use
10404@code{"0.0.0.0"} to listen on all the network interfaces.
697ddb88
LC
10405
10406@item @code{compression-level} (default: @code{3})
10407The gzip compression level at which substitutes are compressed. Use
10408@code{0} to disable compression altogether, and @code{9} to get the best
10409compression ratio at the expense of increased CPU usage.
10410
10411@item @code{nar-path} (default: @code{"nar"})
10412The URL path at which ``nars'' can be fetched. @xref{Invoking guix
10413publish, @code{--nar-path}}, for details.
a35136cb
LC
10414
10415@item @code{cache} (default: @code{#f})
10416When it is @code{#f}, disable caching and instead generate archives on
10417demand. Otherwise, this should be the name of a directory---e.g.,
10418@code{"/var/cache/guix/publish"}---where @command{guix publish} caches
10419archives and meta-data ready to be sent. @xref{Invoking guix publish,
10420@option{--cache}}, for more information on the tradeoffs involved.
10421
10422@item @code{workers} (default: @code{#f})
10423When it is an integer, this is the number of worker threads used for
10424caching; when @code{#f}, the number of processors is used.
10425@xref{Invoking guix publish, @option{--workers}}, for more information.
10426
10427@item @code{ttl} (default: @code{#f})
d16948bf
TGR
10428When it is an integer, this denotes the @dfn{time-to-live} in seconds
10429of the published archives. @xref{Invoking guix publish, @option{--ttl}},
10430for more information.
f1e900a3
LC
10431@end table
10432@end deftp
10433
b58cbf9a
DC
10434@anchor{rngd-service}
10435@deffn {Scheme Procedure} rngd-service [#:rng-tools @var{rng-tools}] @
10436 [#:device "/dev/hwrng"]
10437Return a service that runs the @command{rngd} program from @var{rng-tools}
10438to add @var{device} to the kernel's entropy pool. The service will fail if
10439@var{device} does not exist.
10440@end deffn
a69576ea 10441
909147e4
RW
10442@anchor{pam-limits-service}
10443@cindex session limits
10444@cindex ulimit
10445@cindex priority
b75e1df6
MC
10446@cindex realtime
10447@cindex jackd
6e644cfd 10448@deffn {Scheme Procedure} pam-limits-service [#:limits @code{'()}]
909147e4
RW
10449
10450Return a service that installs a configuration file for the
10451@uref{http://linux-pam.org/Linux-PAM-html/sag-pam_limits.html,
10452@code{pam_limits} module}. The procedure optionally takes a list of
10453@code{pam-limits-entry} values, which can be used to specify
10454@code{ulimit} limits and nice priority limits to user sessions.
10455
10456The following limits definition sets two hard and soft limits for all
10457login sessions of users in the @code{realtime} group:
10458
10459@example
10460(pam-limits-service
10461 (list
10462 (pam-limits-entry "@@realtime" 'both 'rtprio 99)
10463 (pam-limits-entry "@@realtime" 'both 'memlock 'unlimited)))
10464@end example
10465
10466The first entry increases the maximum realtime priority for
10467non-privileged processes; the second entry lifts any restriction of the
10468maximum address space that can be locked in memory. These settings are
10469commonly used for real-time audio systems.
10470@end deffn
10471
c311089b
LC
10472@node Scheduled Job Execution
10473@subsubsection Scheduled Job Execution
10474
10475@cindex cron
e32171ee 10476@cindex mcron
c311089b
LC
10477@cindex scheduling jobs
10478The @code{(gnu services mcron)} module provides an interface to
10479GNU@tie{}mcron, a daemon to run jobs at scheduled times (@pxref{Top,,,
10480mcron, GNU@tie{}mcron}). GNU@tie{}mcron is similar to the traditional
10481Unix @command{cron} daemon; the main difference is that it is
10482implemented in Guile Scheme, which provides a lot of flexibility when
10483specifying the scheduling of jobs and their actions.
10484
8ac6282c 10485The example below defines an operating system that runs the
c311089b 10486@command{updatedb} (@pxref{Invoking updatedb,,, find, Finding Files})
8ac6282c
LC
10487and the @command{guix gc} commands (@pxref{Invoking guix gc}) daily, as
10488well as the @command{mkid} command on behalf of an unprivileged user
10489(@pxref{mkid invocation,,, idutils, ID Database Utilities}). It uses
10490gexps to introduce job definitions that are passed to mcron
10491(@pxref{G-Expressions}).
c311089b
LC
10492
10493@lisp
10494(use-modules (guix) (gnu) (gnu services mcron))
8ac6282c 10495(use-package-modules base idutils)
c311089b
LC
10496
10497(define updatedb-job
8ac6282c
LC
10498 ;; Run 'updatedb' at 3AM every day. Here we write the
10499 ;; job's action as a Scheme procedure.
c311089b 10500 #~(job '(next-hour '(3))
8ac6282c
LC
10501 (lambda ()
10502 (execl (string-append #$findutils "/bin/updatedb")
10503 "updatedb"
10504 "--prunepaths=/tmp /var/tmp /gnu/store"))))
c311089b
LC
10505
10506(define garbage-collector-job
10507 ;; Collect garbage 5 minutes after midnight every day.
8ac6282c 10508 ;; The job's action is a shell command.
c311089b
LC
10509 #~(job "5 0 * * *" ;Vixie cron syntax
10510 "guix gc -F 1G"))
10511
80d944b7 10512(define idutils-job
8ac6282c
LC
10513 ;; Update the index database as user "charlie" at 12:15PM
10514 ;; and 19:15PM. This runs from the user's home directory.
10515 #~(job '(next-minute-from (next-hour '(12 19)) '(15))
10516 (string-append #$idutils "/bin/mkid src")
10517 #:user "charlie"))
10518
c311089b
LC
10519(operating-system
10520 ;; @dots{}
10521 (services (cons (mcron-service (list garbage-collector-job
8ac6282c
LC
10522 updatedb-job
10523 idutils-job))
c311089b
LC
10524 %base-services)))
10525@end lisp
10526
10527@xref{Guile Syntax, mcron job specifications,, mcron, GNU@tie{}mcron},
10528for more information on mcron job specifications. Below is the
10529reference of the mcron service.
10530
cfbf6de1 10531@deffn {Scheme Procedure} mcron-service @var{jobs} [#:mcron @var{mcron}]
c311089b
LC
10532Return an mcron service running @var{mcron} that schedules @var{jobs}, a
10533list of gexps denoting mcron job specifications.
10534
10535This is a shorthand for:
10536@example
80d944b7
LC
10537(service mcron-service-type
10538 (mcron-configuration (mcron mcron) (jobs jobs)))
c311089b
LC
10539@end example
10540@end deffn
10541
10542@defvr {Scheme Variable} mcron-service-type
10543This is the type of the @code{mcron} service, whose value is an
10544@code{mcron-configuration} object.
10545
10546This service type can be the target of a service extension that provides
10547it additional job specifications (@pxref{Service Composition}). In
80d944b7 10548other words, it is possible to define services that provide additional
c311089b
LC
10549mcron jobs to run.
10550@end defvr
10551
10552@deftp {Data Type} mcron-configuration
10553Data type representing the configuration of mcron.
10554
10555@table @asis
cfbf6de1 10556@item @code{mcron} (default: @var{mcron})
c311089b
LC
10557The mcron package to use.
10558
10559@item @code{jobs}
10560This is a list of gexps (@pxref{G-Expressions}), where each gexp
10561corresponds to an mcron job specification (@pxref{Syntax, mcron job
10562specifications,, mcron, GNU@tie{}mcron}).
10563@end table
10564@end deftp
10565
10566
92c03a87
JN
10567@node Log Rotation
10568@subsubsection Log Rotation
10569
10570@cindex rottlog
10571@cindex log rotation
e32171ee 10572@cindex logging
92c03a87
JN
10573Log files such as those found in @file{/var/log} tend to grow endlessly,
10574so it's a good idea to @dfn{rotate} them once in a while---i.e., archive
10575their contents in separate files, possibly compressed. The @code{(gnu
10576services admin)} module provides an interface to GNU@tie{}Rot[t]log, a
10577log rotation tool (@pxref{Top,,, rottlog, GNU Rot[t]log Manual}).
10578
10579The example below defines an operating system that provides log rotation
81fa2229 10580with the default settings, for commonly encountered log files.
92c03a87
JN
10581
10582@lisp
10583(use-modules (guix) (gnu))
10584(use-service-modules admin mcron)
10585(use-package-modules base idutils)
10586
10587(operating-system
10588 ;; @dots{}
d466b1fc
LC
10589 (services (cons (service rottlog-service-type)
10590 %base-services)))
92c03a87
JN
10591@end lisp
10592
10593@defvr {Scheme Variable} rottlog-service-type
10594This is the type of the Rottlog service, whose value is a
10595@code{rottlog-configuration} object.
10596
254ea3f9
LC
10597Other services can extend this one with new @code{log-rotation} objects
10598(see below), thereby augmenting the set of files to be rotated.
10599
92c03a87
JN
10600This service type can define mcron jobs (@pxref{Scheduled Job
10601Execution}) to run the rottlog service.
10602@end defvr
10603
10604@deftp {Data Type} rottlog-configuration
10605Data type representing the configuration of rottlog.
10606
10607@table @asis
10608@item @code{rottlog} (default: @code{rottlog})
10609The Rottlog package to use.
10610
10611@item @code{rc-file} (default: @code{(file-append rottlog "/etc/rc")})
10612The Rottlog configuration file to use (@pxref{Mandatory RC Variables,,,
10613rottlog, GNU Rot[t]log Manual}).
10614
81fa2229
LC
10615@item @code{rotations} (default: @code{%default-rotations})
10616A list of @code{log-rotation} objects as defined below.
92c03a87 10617
81fa2229
LC
10618@item @code{jobs}
10619This is a list of gexps where each gexp corresponds to an mcron job
10620specification (@pxref{Scheduled Job Execution}).
10621@end table
10622@end deftp
10623
10624@deftp {Data Type} log-rotation
10625Data type representing the rotation of a group of log files.
10626
10627Taking an example from the Rottlog manual (@pxref{Period Related File
10628Examples,,, rottlog, GNU Rot[t]log Manual}), a log rotation might be
10629defined like this:
92c03a87
JN
10630
10631@example
81fa2229
LC
10632(log-rotation
10633 (frequency 'daily)
10634 (files '("/var/log/apache/*"))
10635 (options '("storedir apache-archives"
10636 "rotate 6"
10637 "notifempty"
10638 "nocompress")))
92c03a87
JN
10639@end example
10640
81fa2229
LC
10641The list of fields is as follows:
10642
10643@table @asis
10644@item @code{frequency} (default: @code{'weekly})
10645The log rotation frequency, a symbol.
10646
10647@item @code{files}
10648The list of files or file glob patterns to rotate.
10649
10650@item @code{options} (default: @code{'()})
10651The list of rottlog options for this rotation (@pxref{Configuration
10652parameters,,, rottlog, GNU Rot[t]lg Manual}).
10653
10654@item @code{post-rotate} (default: @code{#f})
10655Either @code{#f} or a gexp to execute once the rotation has completed.
92c03a87
JN
10656@end table
10657@end deftp
10658
10659@defvr {Scheme Variable} %default-rotations
10660Specifies weekly rotation of @var{%rotated-files} and
81fa2229 10661a couple of other files.
92c03a87
JN
10662@end defvr
10663
10664@defvr {Scheme Variable} %rotated-files
10665The list of syslog-controlled files to be rotated. By default it is:
10666@code{'("/var/log/messages" "/var/log/secure")}.
10667@end defvr
10668
cf4a9129
LC
10669@node Networking Services
10670@subsubsection Networking Services
401c53c4 10671
fa1e31b8 10672The @code{(gnu services networking)} module provides services to configure
cf4a9129 10673the network interface.
a1ba8475 10674
a023cca8 10675@cindex DHCP, networking service
be1c2c54 10676@deffn {Scheme Procedure} dhcp-client-service [#:dhcp @var{isc-dhcp}]
a023cca8
LC
10677Return a service that runs @var{dhcp}, a Dynamic Host Configuration
10678Protocol (DHCP) client, on all the non-loopback network interfaces.
10679@end deffn
10680
8de3e4b3
LC
10681@defvr {Scheme Variable} static-networking-service-type
10682This is the type for statically-configured network interfaces.
10683@c TODO Document <static-networking> data structures.
10684@end defvr
10685
be1c2c54 10686@deffn {Scheme Procedure} static-networking-service @var{interface} @var{ip} @
1f9803c2 10687 [#:netmask #f] [#:gateway #f] [#:name-servers @code{'()}]
db8ed7ce 10688 [#:requirement @code{'(udev)}]
cf4a9129 10689Return a service that starts @var{interface} with address @var{ip}. If
1f9803c2 10690@var{netmask} is true, use it as the network mask. If @var{gateway} is true,
db8ed7ce
MB
10691it must be a string specifying the default network gateway. @var{requirement}
10692can be used to declare a dependency on another service before configuring the
10693interface.
8de3e4b3
LC
10694
10695This procedure can be called several times, one for each network
10696interface of interest. Behind the scenes what it does is extend
10697@code{static-networking-service-type} with additional network interfaces
10698to handle.
cf4a9129 10699@end deffn
8b315a6d 10700
b7d0c494 10701@cindex wicd
e32171ee
JD
10702@cindex wireless
10703@cindex WiFi
87f40011 10704@cindex network management
be1c2c54 10705@deffn {Scheme Procedure} wicd-service [#:wicd @var{wicd}]
87f40011
LC
10706Return a service that runs @url{https://launchpad.net/wicd,Wicd}, a network
10707management daemon that aims to simplify wired and wireless networking.
10708
10709This service adds the @var{wicd} package to the global profile, providing
10710several commands to interact with the daemon and configure networking:
10711@command{wicd-client}, a graphical user interface, and the @command{wicd-cli}
10712and @command{wicd-curses} user interfaces.
b7d0c494
MW
10713@end deffn
10714
c0a9589d 10715@cindex NetworkManager
b726096b
CB
10716
10717@defvr {Scheme Variable} network-manager-service-type
10718This is the service type for the
10719@uref{https://wiki.gnome.org/Projects/NetworkManager, NetworkManager}
10720service. The value for this service type is a
10721@code{network-manager-configuration} record.
4110fbc6
LC
10722
10723This service is part of @code{%desktop-services} (@pxref{Desktop
10724Services}).
b726096b
CB
10725@end defvr
10726
10727@deftp {Data Type} network-manager-configuration
10728Data type representing the configuration of NetworkManager.
10729
10730@table @asis
10731@item @code{network-manager} (default: @code{network-manager})
10732The NetworkManager package to use.
10733
10734@item @code{dns} (default: @code{"default"})
10735Processing mode for DNS, which affects how NetworkManager uses the
10736@code{resolv.conf} configuration file.
10737
10738@table @samp
10739@item default
10740NetworkManager will update @code{resolv.conf} to reflect the nameservers
10741provided by currently active connections.
10742
10743@item dnsmasq
10744NetworkManager will run @code{dnsmasq} as a local caching nameserver,
10745using a "split DNS" configuration if you are connected to a VPN, and
10746then update @code{resolv.conf} to point to the local nameserver.
10747
10748@item none
10749NetworkManager will not modify @code{resolv.conf}.
10750@end table
10751
94d2a250
LC
10752@item @code{vpn-plugins} (default: @code{'()})
10753This is the list of available plugins for virtual private networks
10754(VPNs). An example of this is the @code{network-manager-openvpn}
10755package, which allows NetworkManager to manage VPNs @i{via} OpenVPN.
10756
b726096b
CB
10757@end table
10758@end deftp
c0a9589d 10759
76192896 10760@cindex Connman
34d60c49
MO
10761@deffn {Scheme Variable} connman-service-type
10762This is the service type to run @url{https://01.org/connman,Connman},
10763a network connection manager.
10764
10765Its value must be an
10766@code{connman-configuration} record as in this example:
10767
10768@example
10769(service connman-service-type
10770 (connman-configuration
10771 (disable-vpn? #t)))
10772@end example
10773
10774See below for details about @code{connman-configuration}.
76192896
EF
10775@end deffn
10776
34d60c49
MO
10777@deftp {Data Type} connman-configuration
10778Data Type representing the configuration of connman.
10779
10780@table @asis
10781@item @code{connman} (default: @var{connman})
10782The connman package to use.
10783
10784@item @code{disable-vpn?} (default: @code{#f})
10785When true, enable connman's vpn plugin.
10786@end table
10787@end deftp
10788
2cccbc2a 10789@cindex WPA Supplicant
cbf1024e
LC
10790@defvr {Scheme Variable} wpa-supplicant-service-type
10791This is the service type to run @url{https://w1.fi/wpa_supplicant/,WPA
2cccbc2a 10792supplicant}, an authentication daemon required to authenticate against
cbf1024e 10793encrypted WiFi or ethernet networks. It is configured to listen for
2cccbc2a 10794requests on D-Bus.
cbf1024e
LC
10795
10796The value of this service is the @code{wpa-supplicant} package to use.
10797Thus, it can be instantiated like this:
10798
10799@lisp
3d3c5650 10800(use-modules (gnu services networking))
cbf1024e 10801
3d3c5650 10802(service wpa-supplicant-service-type)
cbf1024e
LC
10803@end lisp
10804@end defvr
2cccbc2a 10805
e32171ee
JD
10806@cindex NTP
10807@cindex real time clock
be1c2c54 10808@deffn {Scheme Procedure} ntp-service [#:ntp @var{ntp}] @
dc0322b5
LC
10809 [#:servers @var{%ntp-servers}] @
10810 [#:allow-large-adjustment? #f]
63854bcb
LC
10811Return a service that runs the daemon from @var{ntp}, the
10812@uref{http://www.ntp.org, Network Time Protocol package}. The daemon will
10813keep the system clock synchronized with that of @var{servers}.
dc0322b5
LC
10814@var{allow-large-adjustment?} determines whether @command{ntpd} is allowed to
10815make an initial adjustment of more than 1,000 seconds.
63854bcb
LC
10816@end deffn
10817
10818@defvr {Scheme Variable} %ntp-servers
10819List of host names used as the default NTP servers.
10820@end defvr
10821
16718b67
EF
10822@cindex OpenNTPD
10823@deffn {Scheme Procedure} openntpd-service-type
10824Run the @command{ntpd}, the Network Time Protocol (NTP) daemon, as implemented
10825by @uref{http://www.openntpd.org, OpenNTPD}. The daemon will keep the system
10826clock synchronized with that of the given servers.
10827
10828@example
10829(service
10830 openntpd-service-type
10831 (openntpd-configuration
10832 (listen-on '("127.0.0.1" "::1"))
10833 (sensor '("udcf0 correction 70000"))
10834 (constraint-from '("www.gnu.org"))
10835 (constraints-from '("https://www.google.com/"))
10836 (allow-large-adjustment? #t)))
10837
10838@end example
10839@end deffn
10840
10841@deftp {Data Type} openntpd-configuration
10842@table @asis
10843@item @code{openntpd} (default: @code{(file-append openntpd "/sbin/ntpd")})
10844The openntpd executable to use.
10845@item @code{listen-on} (default: @code{'("127.0.0.1" "::1")})
10846A list of local IP addresses or hostnames the ntpd daemon should listen on.
10847@item @code{query-from} (default: @code{'()})
10848A list of local IP address the ntpd daemon should use for outgoing queries.
10849@item @code{sensor} (default: @code{'()})
10850Specify a list of timedelta sensor devices ntpd should use. @code{ntpd}
10851will listen to each sensor that acutally exists and ignore non-existant ones.
10852See @uref{https://man.openbsd.org/ntpd.conf, upstream documentation} for more
10853information.
10854@item @code{server} (default: @var{%ntp-servers})
10855Specify a list of IP addresses or hostnames of NTP servers to synchronize to.
10856@item @code{servers} (default: @code{'()})
10857Specify a list of IP addresses or hostnames of NTP pools to synchronize to.
10858@item @code{constraint-from} (default: @code{'()})
10859@code{ntpd} can be configured to query the ‘Date’ from trusted HTTPS servers via TLS.
10860This time information is not used for precision but acts as an authenticated
10861constraint, thereby reducing the impact of unauthenticated NTP
10862man-in-the-middle attacks.
10863Specify a list of URLs, IP addresses or hostnames of HTTPS servers to provide
10864a constraint.
10865@item @code{constraints-from} (default: @code{'()})
10866As with constraint from, specify a list of URLs, IP addresses or hostnames of
10867HTTPS servers to provide a constraint. Should the hostname resolve to multiple
10868IP addresses, @code{ntpd} will calculate a median constraint from all of them.
10869@item @code{allow-large-adjustment?} (default: @code{#f})
10870Determines if @code{ntpd} is allowed to make an initial adjustment of more
10871than 180 seconds.
10872@end table
10873@end deftp
10874
9260b9d1
TD
10875@cindex inetd
10876@deffn {Scheme variable} inetd-service-type
10877This service runs the @command{inetd} (@pxref{inetd invocation,,,
10878inetutils, GNU Inetutils}) daemon. @command{inetd} listens for
10879connections on internet sockets, and lazily starts the specified server
10880program when a connection is made on one of these sockets.
10881
10882The value of this service is an @code{inetd-configuration} object. The
10883following example configures the @command{inetd} daemon to provide the
10884built-in @command{echo} service, as well as an smtp service which
10885forwards smtp traffic over ssh to a server @code{smtp-server} behind a
10886gateway @code{hostname}:
10887
10888@example
10889(service
10890 inetd-service-type
10891 (inetd-configuration
10892 (entries (list
10893 (inetd-entry
10894 (name "echo")
10895 (socket-type 'stream)
10896 (protocol "tcp")
10897 (wait? #f)
10898 (user "root"))
10899 (inetd-entry
10900 (node "127.0.0.1")
10901 (name "smtp")
10902 (socket-type 'stream)
10903 (protocol "tcp")
10904 (wait? #f)
10905 (user "root")
10906 (program (file-append openssh "/bin/ssh"))
10907 (arguments
10908 '("ssh" "-qT" "-i" "/path/to/ssh_key"
10909 "-W" "smtp-server:25" "user@@hostname")))))
10910@end example
10911
10912See below for more details about @code{inetd-configuration}.
10913@end deffn
10914
10915@deftp {Data Type} inetd-configuration
10916Data type representing the configuration of @command{inetd}.
10917
10918@table @asis
10919@item @code{program} (default: @code{(file-append inetutils "/libexec/inetd")})
10920The @command{inetd} executable to use.
10921
10922@item @code{entries} (default: @code{'()})
10923A list of @command{inetd} service entries. Each entry should be created
10924by the @code{inetd-entry} constructor.
10925@end table
10926@end deftp
10927
10928@deftp {Data Type} inetd-entry
10929Data type representing an entry in the @command{inetd} configuration.
10930Each entry corresponds to a socket where @command{inetd} will listen for
10931requests.
10932
10933@table @asis
10934@item @code{node} (default: @code{#f})
10935Optional string, a comma-separated list of local addresses
10936@command{inetd} should use when listening for this service.
10937@xref{Configuration file,,, inetutils, GNU Inetutils} for a complete
10938description of all options.
10939@item @code{name}
10940A string, the name must correspond to an entry in @code{/etc/services}.
10941@item @code{socket-type}
10942One of @code{'stream}, @code{'dgram}, @code{'raw}, @code{'rdm} or
10943@code{'seqpacket}.
10944@item @code{protocol}
10945A string, must correspond to an entry in @code{/etc/protocols}.
10946@item @code{wait?} (default: @code{#t})
10947Whether @command{inetd} should wait for the server to exit before
10948listening to new service requests.
10949@item @code{user}
10950A string containing the user (and, optionally, group) name of the user
10951as whom the server should run. The group name can be specified in a
10952suffix, separated by a colon or period, i.e. @code{"user"},
10953@code{"user:group"} or @code{"user.group"}.
10954@item @code{program} (default: @code{"internal"})
10955The server program which will serve the requests, or @code{"internal"}
10956if @command{inetd} should use a built-in service.
10957@item @code{arguments} (default: @code{'()})
10958A list strings or file-like objects, which are the server program's
10959arguments, starting with the zeroth argument, i.e. the name of the
10960program itself. For @command{inetd}'s internal services, this entry
10961must be @code{'()} or @code{'("internal")}.
10962@end table
10963
10964@xref{Configuration file,,, inetutils, GNU Inetutils} for a more
10965detailed discussion of each configuration field.
10966@end deftp
10967
e32171ee 10968@cindex Tor
375c6108
LC
10969@deffn {Scheme Procedure} tor-service [@var{config-file}] [#:tor @var{tor}]
10970Return a service to run the @uref{https://torproject.org, Tor} anonymous
10971networking daemon.
8b315a6d 10972
375c6108 10973The daemon runs as the @code{tor} unprivileged user. It is passed
6331bde7
LC
10974@var{config-file}, a file-like object, with an additional @code{User tor} line
10975and lines for hidden services added via @code{tor-hidden-service}. Run
10976@command{man tor} for information about the configuration file.
10977@end deffn
10978
24a8ef3b 10979@cindex hidden service
6331bde7
LC
10980@deffn {Scheme Procedure} tor-hidden-service @var{name} @var{mapping}
10981Define a new Tor @dfn{hidden service} called @var{name} and implementing
10982@var{mapping}. @var{mapping} is a list of port/host tuples, such as:
10983
10984@example
24a8ef3b
LC
10985 '((22 "127.0.0.1:22")
10986 (80 "127.0.0.1:8080"))
6331bde7
LC
10987@end example
10988
10989In this example, port 22 of the hidden service is mapped to local port 22, and
10990port 80 is mapped to local port 8080.
10991
6629099a
LC
10992This creates a @file{/var/lib/tor/hidden-services/@var{name}} directory, where
10993the @file{hostname} file contains the @code{.onion} host name for the hidden
6331bde7
LC
10994service.
10995
10996See @uref{https://www.torproject.org/docs/tor-hidden-service.html.en, the Tor
10997project's documentation} for more information.
cf4a9129 10998@end deffn
8b315a6d 10999
9db7e9be
OP
11000The @code{(gnu services rsync)} module provides the following services:
11001
11002You might want an rsync daemon if you have files that you want available
11003so anyone (or just yourself) can download existing files or upload new
11004files.
11005
11006@deffn {Scheme Variable} rsync-service-type
11007This is the type for the @uref{https://rsync.samba.org, rsync} rsync daemon,
11008@command{rsync-configuration} record as in this example:
11009
11010@example
11011(service rsync-service-type)
11012@end example
11013
11014See below for details about @code{rsync-configuration}.
11015@end deffn
11016
11017@deftp {Data Type} rsync-configuration
11018Data type representing the configuration for @code{rsync-service}.
11019
11020@table @asis
11021@item @code{package} (default: @var{rsync})
11022@code{rsync} package to use.
11023
11024@item @code{port-number} (default: @code{873})
11025TCP port on which @command{rsync} listens for incoming connections. If port
11026is less than @code{1024} @command{rsync} needs to be started as the
11027@code{root} user and group.
11028
11029@item @code{pid-file} (default: @code{"/var/run/rsyncd/rsyncd.pid"})
11030Name of the file where @command{rsync} writes its PID.
11031
11032@item @code{lock-file} (default: @code{"/var/run/rsyncd/rsyncd.lock"})
11033Name of the file where @command{rsync} writes its lock file.
11034
11035@item @code{log-file} (default: @code{"/var/log/rsyncd.log"})
11036Name of the file where @command{rsync} writes its log file.
11037
11038@item @code{use-chroot?} (default: @var{#t})
11039Whether to use chroot for @command{rsync} shared directory.
11040
11041@item @code{share-path} (default: @file{/srv/rsync})
11042Location of the @command{rsync} shared directory.
11043
11044@item @code{share-comment} (default: @code{"Rsync share"})
11045Comment of the @command{rsync} shared directory.
11046
11047@item @code{read-only?} (default: @var{#f})
11048Read-write permissions to shared directory.
11049
11050@item @code{timeout} (default: @code{300})
11051I/O timeout in seconds.
11052
11053@item @code{user} (default: @var{"root"})
11054Owner of the @code{rsync} process.
11055
11056@item @code{group} (default: @var{"root"})
11057Group of the @code{rsync} process.
11058
11059@item @code{uid} (default: @var{"rsyncd"})
11060User name or user ID that file transfers to and from that module should take
11061place as when the daemon was run as @code{root}.
11062
11063@item @code{gid} (default: @var{"rsyncd"})
11064Group name or group ID that will be used when accessing the module.
11065
11066@end table
11067@end deftp
11068
71b0601a 11069Furthermore, @code{(gnu services ssh)} provides the following services.
e32171ee
JD
11070@cindex SSH
11071@cindex SSH server
8b315a6d 11072
be1c2c54 11073@deffn {Scheme Procedure} lsh-service [#:host-key "/etc/lsh/host-key"] @
5833bf33 11074 [#:daemonic? #t] [#:interfaces '()] [#:port-number 22] @
cf4a9129
LC
11075 [#:allow-empty-passwords? #f] [#:root-login? #f] @
11076 [#:syslog-output? #t] [#:x11-forwarding? #t] @
11077 [#:tcp/ip-forwarding? #t] [#:password-authentication? #t] @
21cc905a 11078 [#:public-key-authentication? #t] [#:initialize? #t]
cf4a9129
LC
11079Run the @command{lshd} program from @var{lsh} to listen on port @var{port-number}.
11080@var{host-key} must designate a file containing the host key, and readable
11081only by root.
72e25e35 11082
5833bf33
DP
11083When @var{daemonic?} is true, @command{lshd} will detach from the
11084controlling terminal and log its output to syslogd, unless one sets
11085@var{syslog-output?} to false. Obviously, it also makes lsh-service
11086depend on existence of syslogd service. When @var{pid-file?} is true,
11087@command{lshd} writes its PID to the file called @var{pid-file}.
11088
cf4a9129
LC
11089When @var{initialize?} is true, automatically create the seed and host key
11090upon service activation if they do not exist yet. This may take long and
11091require interaction.
8b315a6d 11092
20dd519c
LC
11093When @var{initialize?} is false, it is up to the user to initialize the
11094randomness generator (@pxref{lsh-make-seed,,, lsh, LSH Manual}), and to create
11095a key pair with the private key stored in file @var{host-key} (@pxref{lshd
11096basics,,, lsh, LSH Manual}).
11097
cf4a9129
LC
11098When @var{interfaces} is empty, lshd listens for connections on all the
11099network interfaces; otherwise, @var{interfaces} must be a list of host names
11100or addresses.
9bf3c1a7 11101
20dd519c
LC
11102@var{allow-empty-passwords?} specifies whether to accept log-ins with empty
11103passwords, and @var{root-login?} specifies whether to accept log-ins as
cf4a9129 11104root.
4af2447e 11105
cf4a9129
LC
11106The other options should be self-descriptive.
11107@end deffn
4af2447e 11108
e32171ee
JD
11109@cindex SSH
11110@cindex SSH server
d8f31281
LC
11111@deffn {Scheme Variable} openssh-service-type
11112This is the type for the @uref{http://www.openssh.org, OpenSSH} secure
11113shell daemon, @command{sshd}. Its value must be an
11114@code{openssh-configuration} record as in this example:
11115
11116@example
11117(service openssh-service-type
11118 (openssh-configuration
11119 (x11-forwarding? #t)
4892eb7c
LC
11120 (permit-root-login 'without-password)
11121 (authorized-keys
11122 `(("alice" ,(local-file "alice.pub"))
11123 ("bob" ,(local-file "bob.pub"))))))
d8f31281
LC
11124@end example
11125
11126See below for details about @code{openssh-configuration}.
1398a438
LC
11127
11128This service can be extended with extra authorized keys, as in this
11129example:
11130
11131@example
11132(service-extension openssh-service-type
11133 (const `(("charlie"
11134 ,(local-file "charlie.pub")))))
11135@end example
86d8f6d3
JL
11136@end deffn
11137
d8f31281
LC
11138@deftp {Data Type} openssh-configuration
11139This is the configuration record for OpenSSH's @command{sshd}.
11140
11141@table @asis
11142@item @code{pid-file} (default: @code{"/var/run/sshd.pid"})
11143Name of the file where @command{sshd} writes its PID.
11144
11145@item @code{port-number} (default: @code{22})
11146TCP port on which @command{sshd} listens for incoming connections.
11147
11148@item @code{permit-root-login} (default: @code{#f})
11149This field determines whether and when to allow logins as root. If
11150@code{#f}, root logins are disallowed; if @code{#t}, they are allowed.
11151If it's the symbol @code{'without-password}, then root logins are
11152permitted but not with password-based authentication.
11153
11154@item @code{allow-empty-passwords?} (default: @code{#f})
11155When true, users with empty passwords may log in. When false, they may
11156not.
11157
11158@item @code{password-authentication?} (default: @code{#t})
11159When true, users may log in with their password. When false, they have
11160other authentication methods.
11161
11162@item @code{public-key-authentication?} (default: @code{#t})
11163When true, users may log in using public key authentication. When
11164false, users have to use other authentication method.
11165
11166Authorized public keys are stored in @file{~/.ssh/authorized_keys}.
11167This is used only by protocol version 2.
11168
d8f31281
LC
11169@item @code{x11-forwarding?} (default: @code{#f})
11170When true, forwarding of X11 graphical client connections is
11171enabled---in other words, @command{ssh} options @option{-X} and
11172@option{-Y} will work.
11173
563c5d42
CL
11174@item @code{challenge-response-authentication?} (default: @code{#f})
11175Specifies whether challenge response authentication is allowed (e.g. via
11176PAM).
11177
11178@item @code{use-pam?} (default: @code{#t})
11179Enables the Pluggable Authentication Module interface. If set to
11180@code{#t}, this will enable PAM authentication using
11181@code{challenge-response-authentication?} and
11182@code{password-authentication?}, in addition to PAM account and session
11183module processing for all authentication types.
11184
11185Because PAM challenge response authentication usually serves an
11186equivalent role to password authentication, you should disable either
11187@code{challenge-response-authentication?} or
11188@code{password-authentication?}.
f895dce4
CL
11189
11190@item @code{print-last-log?} (default: @code{#t})
11191Specifies whether @command{sshd} should print the date and time of the
11192last user login when a user logs in interactively.
12723370
CL
11193
11194@item @code{subsystems} (default: @code{'(("sftp" "internal-sftp"))})
11195Configures external subsystems (e.g. file transfer daemon).
11196
11197This is a list of two-element lists, each of which containing the
11198subsystem name and a command (with optional arguments) to execute upon
11199subsystem request.
11200
11201The command @command{internal-sftp} implements an in-process SFTP
11202server. Alternately, one can specify the @command{sftp-server} command:
11203@example
11204(service openssh-service-type
11205 (openssh-configuration
11206 (subsystems
4892eb7c 11207 `(("sftp" ,(file-append openssh "/libexec/sftp-server"))))))
12723370 11208@end example
4892eb7c 11209
985934cb
MC
11210@item @code{accepted-environment} (default: @code{'()})
11211List of strings describing which environment variables may be exported.
11212
11213Each string gets on its own line. See the @code{AcceptEnv} option in
11214@code{man sshd_config}.
11215
11216This example allows ssh-clients to export the @code{COLORTERM} variable.
11217It is set by terminal emulators, which support colors. You can use it in
11218your shell's ressource file to enable colors for the prompt and commands
11219if this variable is set.
11220
11221@example
11222(service openssh-service-type
11223 (openssh-configuration
11224 (accepted-environment '("COLORTERM"))))
11225@end example
11226
4892eb7c
LC
11227@item @code{authorized-keys} (default: @code{'()})
11228@cindex authorized keys, SSH
11229@cindex SSH authorized keys
11230This is the list of authorized keys. Each element of the list is a user
11231name followed by one or more file-like objects that represent SSH public
11232keys. For example:
11233
11234@example
11235(openssh-configuration
11236 (authorized-keys
11237 `(("rekado" ,(local-file "rekado.pub"))
11238 ("chris" ,(local-file "chris.pub"))
11239 ("root" ,(local-file "rekado.pub") ,(local-file "chris.pub")))))
11240@end example
11241
11242@noindent
11243registers the specified public keys for user accounts @code{rekado},
11244@code{chris}, and @code{root}.
11245
1398a438
LC
11246Additional authorized keys can be specified @i{via}
11247@code{service-extension}.
11248
4892eb7c
LC
11249Note that this does @emph{not} interfere with the use of
11250@file{~/.ssh/authorized_keys}.
d8f31281
LC
11251@end table
11252@end deftp
11253
71b0601a
DC
11254@deffn {Scheme Procedure} dropbear-service [@var{config}]
11255Run the @uref{https://matt.ucc.asn.au/dropbear/dropbear.html,Dropbear SSH
11256daemon} with the given @var{config}, a @code{<dropbear-configuration>}
11257object.
11258
11259For example, to specify a Dropbear service listening on port 1234, add
11260this call to the operating system's @code{services} field:
11261
11262@example
11263(dropbear-service (dropbear-configuration
11264 (port-number 1234)))
11265@end example
11266@end deffn
11267
11268@deftp {Data Type} dropbear-configuration
11269This data type represents the configuration of a Dropbear SSH daemon.
11270
11271@table @asis
11272@item @code{dropbear} (default: @var{dropbear})
11273The Dropbear package to use.
11274
11275@item @code{port-number} (default: 22)
11276The TCP port where the daemon waits for incoming connections.
11277
11278@item @code{syslog-output?} (default: @code{#t})
11279Whether to enable syslog output.
11280
11281@item @code{pid-file} (default: @code{"/var/run/dropbear.pid"})
11282File name of the daemon's PID file.
11283
11284@item @code{root-login?} (default: @code{#f})
11285Whether to allow @code{root} logins.
11286
11287@item @code{allow-empty-passwords?} (default: @code{#f})
11288Whether to allow empty passwords.
11289
11290@item @code{password-authentication?} (default: @code{#t})
11291Whether to enable password-based authentication.
11292@end table
11293@end deftp
11294
fa0c1d61
LC
11295@defvr {Scheme Variable} %facebook-host-aliases
11296This variable contains a string for use in @file{/etc/hosts}
11297(@pxref{Host Names,,, libc, The GNU C Library Reference Manual}). Each
11298line contains a entry that maps a known server name of the Facebook
11299on-line service---e.g., @code{www.facebook.com}---to the local
11300host---@code{127.0.0.1} or its IPv6 equivalent, @code{::1}.
11301
11302This variable is typically used in the @code{hosts-file} field of an
7313a52e
LC
11303@code{operating-system} declaration (@pxref{operating-system Reference,
11304@file{/etc/hosts}}):
fa0c1d61
LC
11305
11306@example
11307(use-modules (gnu) (guix))
11308
11309(operating-system
11310 (host-name "mymachine")
11311 ;; ...
11312 (hosts-file
11313 ;; Create a /etc/hosts file with aliases for "localhost"
11314 ;; and "mymachine", as well as for Facebook servers.
24e02c28
LC
11315 (plain-file "hosts"
11316 (string-append (local-host-aliases host-name)
11317 %facebook-host-aliases))))
fa0c1d61
LC
11318@end example
11319
11320This mechanism can prevent programs running locally, such as Web
11321browsers, from accessing Facebook.
11322@end defvr
11323
965a7332
LC
11324The @code{(gnu services avahi)} provides the following definition.
11325
be1c2c54 11326@deffn {Scheme Procedure} avahi-service [#:avahi @var{avahi}] @
965a7332
LC
11327 [#:host-name #f] [#:publish? #t] [#:ipv4? #t] @
11328 [#:ipv6? #t] [#:wide-area? #f] @
c8695f32 11329 [#:domains-to-browse '()] [#:debug? #f]
965a7332
LC
11330Return a service that runs @command{avahi-daemon}, a system-wide
11331mDNS/DNS-SD responder that allows for service discovery and
cc9c1f39
LC
11332"zero-configuration" host name lookups (see @uref{http://avahi.org/}), and
11333extends the name service cache daemon (nscd) so that it can resolve
11334@code{.local} host names using
1065bed9
LC
11335@uref{http://0pointer.de/lennart/projects/nss-mdns/, nss-mdns}. Additionally,
11336add the @var{avahi} package to the system profile so that commands such as
11337@command{avahi-browse} are directly usable.
965a7332
LC
11338
11339If @var{host-name} is different from @code{#f}, use that as the host name to
11340publish for this machine; otherwise, use the machine's actual host name.
11341
11342When @var{publish?} is true, publishing of host names and services is allowed;
11343in particular, avahi-daemon will publish the machine's host name and IP
11344address via mDNS on the local network.
11345
11346When @var{wide-area?} is true, DNS-SD over unicast DNS is enabled.
11347
11348Boolean values @var{ipv4?} and @var{ipv6?} determine whether to use IPv4/IPv6
11349sockets.
11350@end deffn
11351
c32d02fe
SB
11352@deffn {Scheme Variable} openvswitch-service-type
11353This is the type of the @uref{http://www.openvswitch.org, Open vSwitch}
11354service, whose value should be an @code{openvswitch-configuration}
11355object.
11356@end deffn
11357
11358@deftp {Data Type} openvswitch-configuration
11359Data type representing the configuration of Open vSwitch, a multilayer
11360virtual switch which is designed to enable massive network automation
11361through programmatic extension.
11362
11363@table @asis
11364@item @code{package} (default: @var{openvswitch})
11365Package object of the Open vSwitch.
11366
11367@end table
11368@end deftp
965a7332 11369
cf4a9129
LC
11370@node X Window
11371@subsubsection X Window
68ad877c 11372
e32171ee
JD
11373@cindex X11
11374@cindex X Window System
65c0f436 11375@cindex login manager
cf4a9129
LC
11376Support for the X Window graphical display system---specifically
11377Xorg---is provided by the @code{(gnu services xorg)} module. Note that
11378there is no @code{xorg-service} procedure. Instead, the X server is
65c0f436
LC
11379started by the @dfn{login manager}, by default SLiM.
11380
11381@cindex window manager
11382To use X11, you must install at least one @dfn{window manager}---for
11383example the @code{windowmaker} or @code{openbox} packages---preferably
11384by adding it to the @code{packages} field of your operating system
11385definition (@pxref{operating-system Reference, system-wide packages}).
4af2447e 11386
b37f86d7
LC
11387@defvr {Scheme Variable} slim-service-type
11388This is the type for the SLiM graphical login manager for X11.
11389
11390@cindex session types (X11)
11391@cindex X11 session types
11392SLiM looks for @dfn{session types} described by the @file{.desktop} files in
11393@file{/run/current-system/profile/share/xsessions} and allows users to
11394choose a session from the log-in screen using @kbd{F1}. Packages such
11395as @code{xfce}, @code{sawfish}, and @code{ratpoison} provide
11396@file{.desktop} files; adding them to the system-wide set of packages
11397automatically makes them available at the log-in screen.
11398
11399In addition, @file{~/.xsession} files are honored. When available,
11400@file{~/.xsession} must be an executable that starts a window manager
11401and/or other X clients.
11402@end defvr
11403
11404@deftp {Data Type} slim-configuration
11405Data type representing the configuration of @code{slim-service-type}.
11406
11407@table @asis
11408@item @code{allow-empty-passwords?} (default: @code{#t})
11409Whether to allow logins with empty passwords.
11410
11411@item @code{auto-login?} (default: @code{#f})
11412@itemx @code{default-user} (default: @code{""})
11413When @code{auto-login?} is false, SLiM presents a log-in screen.
11414
11415When @code{auto-login?} is true, SLiM logs in directly as
11416@code{default-user}.
11417
11418@item @code{theme} (default: @code{%default-slim-theme})
11419@itemx @code{theme-name} (default: @code{%default-slim-theme-name})
11420The graphical theme to use and its name.
11421
65c0f436
LC
11422@item @code{auto-login-session} (default: @code{#f})
11423If true, this must be the name of the executable to start as the default
11424session---e.g., @code{(file-append windowmaker "/bin/windowmaker")}.
11425
11426If false, a session described by one of the available @file{.desktop}
11427files in @code{/run/current-system/profile} and @code{~/.guix-profile}
11428will be used.
11429
11430@quotation Note
11431You must install at least one window manager in the system profile or in
11432your user profile. Failing to do that, if @code{auto-login-session} is
11433false, you will be unable to log in.
11434@end quotation
b37f86d7
LC
11435
11436@item @code{startx} (default: @code{(xorg-start-command)})
11437The command used to start the X11 graphical server.
11438
11439@item @code{xauth} (default: @code{xauth})
11440The XAuth package to use.
11441
11442@item @code{shepherd} (default: @code{shepherd})
11443The Shepherd package used when invoking @command{halt} and
11444@command{reboot}.
11445
736e45a2
DM
11446@item @code{sessreg} (default: @code{sessreg})
11447The sessreg package used in order to register the session.
11448
b37f86d7
LC
11449@item @code{slim} (default: @code{slim})
11450The SLiM package to use.
11451@end table
11452@end deftp
11453
11454@defvr {Scheme Variable} %default-theme
11455@defvrx {Scheme Variable} %default-theme-name
11456The default SLiM theme and its name.
11457@end defvr
11458
11459
935644c0
DC
11460@deftp {Data Type} sddm-configuration
11461This is the data type representing the sddm service configuration.
11462
11463@table @asis
11464@item @code{display-server} (default: "x11")
11465Select display server to use for the greeter. Valid values are "x11"
11466or "wayland".
11467
11468@item @code{numlock} (default: "on")
11469Valid values are "on", "off" or "none".
11470
11471@item @code{halt-command} (default @code{#~(string-apppend #$shepherd "/sbin/halt")})
11472Command to run when halting.
11473
11474@item @code{reboot-command} (default @code{#~(string-append #$shepherd "/sbin/reboot")})
11475Command to run when rebooting.
11476
11477@item @code{theme} (default "maldives")
11478Theme to use. Default themes provided by SDDM are "elarun" or "maldives".
11479
11480@item @code{themes-directory} (default "/run/current-system/profile/share/sddm/themes")
11481Directory to look for themes.
11482
11483@item @code{faces-directory} (default "/run/current-system/profile/share/sddm/faces")
11484Directory to look for faces.
11485
11486@item @code{default-path} (default "/run/current-system/profile/bin")
11487Default PATH to use.
11488
11489@item @code{minimum-uid} (default 1000)
11490Minimum UID to display in SDDM.
11491
11492@item @code{maximum-uid} (default 2000)
11493Maximum UID to display in SDDM
11494
11495@item @code{remember-last-user?} (default #t)
11496Remember last user.
11497
11498@item @code{remember-last-session?} (default #t)
11499Remember last session.
11500
11501@item @code{hide-users} (default "")
11502Usernames to hide from SDDM greeter.
11503
11504@item @code{hide-shells} (default @code{#~(string-append #$shadow "/sbin/nologin")})
11505Users with shells listed will be hidden from the SDDM greeter.
11506
11507@item @code{session-command} (default @code{#~(string-append #$sddm "/share/sddm/scripts/wayland-session")})
11508Script to run before starting a wayland session.
11509
11510@item @code{sessions-directory} (default "/run/current-system/profile/share/wayland-sessions")
11511Directory to look for desktop files starting wayland sessions.
11512
11513@item @code{xorg-server-path} (default @code{xorg-start-command})
11514Path to xorg-server.
11515
11516@item @code{xauth-path} (default @code{#~(string-append #$xauth "/bin/xauth")})
11517Path to xauth.
11518
11519@item @code{xephyr-path} (default @code{#~(string-append #$xorg-server "/bin/Xephyr")})
11520Path to Xephyr.
11521
11522@item @code{xdisplay-start} (default @code{#~(string-append #$sddm "/share/sddm/scripts/Xsetup")})
11523Script to run after starting xorg-server.
11524
11525@item @code{xdisplay-stop} (default @code{#~(string-append #$sddm "/share/sddm/scripts/Xstop")})
11526Script to run before stopping xorg-server.
11527
11528@item @code{xsession-command} (default: @code{xinitr })
11529Script to run before starting a X session.
11530
11531@item @code{xsessions-directory} (default: "/run/current-system/profile/share/xsessions")
11532Directory to look for desktop files starting X sessions.
11533
11534@item @code{minimum-vt} (default: 7)
11535Minimum VT to use.
11536
11537@item @code{xserver-arguments} (default "-nolisten tcp")
11538Arguments to pass to xorg-server.
11539
11540@item @code{auto-login-user} (default "")
11541User to use for auto-login.
11542
11543@item @code{auto-login-session} (default "")
11544Desktop file to use for auto-login.
11545
11546@item @code{relogin?} (default #f)
11547Relogin after logout.
11548
11549@end table
11550@end deftp
11551
e32171ee 11552@cindex login manager
b37f86d7 11553@cindex X11 login
935644c0
DC
11554@deffn {Scheme Procedure} sddm-service config
11555Return a service that spawns the SDDM graphical login manager for config of
11556type @code{<sddm-configuration>}.
11557
11558@example
11559 (sddm-service (sddm-configuration
11560 (auto-login-user "Alice")
11561 (auto-login-session "xfce.desktop")))
11562@end example
11563@end deffn
11564
be1c2c54 11565@deffn {Scheme Procedure} xorg-start-command [#:guile] @
d344f5a5
LC
11566 [#:modules %default-xorg-modules] @
11567 [#:fonts %default-xorg-fonts] @
11568 [#:configuration-file (xorg-configuration-file @dots{})] @
11569 [#:xorg-server @var{xorg-server}]
11570Return a @code{startx} script in which @var{modules}, a list of X module
11571packages, and @var{fonts}, a list of X font directories, are available. See
11572@code{xorg-wrapper} for more details on the arguments. The result should be
11573used in place of @code{startx}.
d1cdd7ba
LC
11574
11575Usually the X server is started by a login manager.
11576@end deffn
11577
be1c2c54 11578@deffn {Scheme Procedure} xorg-configuration-file @
d344f5a5
LC
11579 [#:modules %default-xorg-modules] @
11580 [#:fonts %default-xorg-fonts] @
12422c9d 11581 [#:drivers '()] [#:resolutions '()] [#:extra-config '()]
d1cdd7ba
LC
11582Return a configuration file for the Xorg server containing search paths for
11583all the common drivers.
f703413e 11584
d344f5a5
LC
11585@var{modules} must be a list of @dfn{module packages} loaded by the Xorg
11586server---e.g., @code{xf86-video-vesa}, @code{xf86-input-keyboard}, and so on.
11587@var{fonts} must be a list of font directories to add to the server's
11588@dfn{font path}.
11589
f703413e
LC
11590@var{drivers} must be either the empty list, in which case Xorg chooses a
11591graphics driver automatically, or a list of driver names that will be tried in
d344f5a5 11592this order---e.g., @code{("modesetting" "vesa")}.
d2e59637
LC
11593
11594Likewise, when @var{resolutions} is the empty list, Xorg chooses an
11595appropriate screen resolution; otherwise, it must be a list of
11596resolutions---e.g., @code{((1024 768) (640 480))}.
12422c9d
LC
11597
11598Last, @var{extra-config} is a list of strings or objects appended to the
d344f5a5
LC
11599configuration file. It is used to pass extra text to be
11600added verbatim to the configuration file.
f703413e 11601@end deffn
4af2447e 11602
5481887d 11603@deffn {Scheme Procedure} screen-locker-service @var{package} [@var{program}]
d64e1746 11604Add @var{package}, a package for a screen locker or screen saver whose
6726282b
LC
11605command is @var{program}, to the set of setuid programs and add a PAM entry
11606for it. For example:
11607
11608@lisp
11609(screen-locker-service xlockmore "xlock")
11610@end lisp
11611
11612makes the good ol' XlockMore usable.
11613@end deffn
11614
11615
f2ec23d1
AW
11616@node Printing Services
11617@subsubsection Printing Services
11618
de322a5d 11619@cindex printer support with CUPS
f2ec23d1
AW
11620The @code{(gnu services cups)} module provides a Guix service definition
11621for the CUPS printing service. To add printer support to a GuixSD
11622system, add a @code{cups-service} to the operating system definition:
11623
11624@deffn {Scheme Variable} cups-service-type
11625The service type for the CUPS print server. Its value should be a valid
3d3c5650
LC
11626CUPS configuration (see below). To use the default settings, simply
11627write:
f2ec23d1 11628@example
3d3c5650 11629(service cups-service-type)
f2ec23d1
AW
11630@end example
11631@end deffn
11632
11633The CUPS configuration controls the basic things about your CUPS
11634installation: what interfaces it listens on, what to do if a print job
11635fails, how much logging to do, and so on. To actually add a printer,
11636you have to visit the @url{http://localhost:631} URL, or use a tool such
11637as GNOME's printer configuration services. By default, configuring a
11638CUPS service will generate a self-signed certificate if needed, for
11639secure connections to the print server.
11640
de322a5d 11641Suppose you want to enable the Web interface of CUPS and also add
d2a7170d
DNB
11642support for Epson printers @i{via} the @code{escpr} package and for HP
11643printers @i{via} the @code{hplip} package. You can do that directly,
11644like this (you need to use the @code{(gnu packages cups)} module):
f2ec23d1
AW
11645
11646@example
11647(service cups-service-type
11648 (cups-configuration
de322a5d
LC
11649 (web-interface? #t)
11650 (extensions
d2a7170d 11651 (list cups-filters escpr hplip))))
f2ec23d1
AW
11652@end example
11653
11654The available configuration parameters follow. Each parameter
11655definition is preceded by its type; for example, @samp{string-list foo}
11656indicates that the @code{foo} parameter should be specified as a list of
11657strings. There is also a way to specify the configuration as a string,
11658if you have an old @code{cupsd.conf} file that you want to port over
11659from some other system; see the end for more details.
11660
11661@c The following documentation was initially generated by
11662@c (generate-documentation) in (gnu services cups). Manually maintained
11663@c documentation is better, so we shouldn't hesitate to edit below as
11664@c needed. However if the change you want to make to this documentation
11665@c can be done in an automated way, it's probably easier to change
11666@c (generate-documentation) than to make it below and have to deal with
11667@c the churn as CUPS updates.
11668
11669
11670Available @code{cups-configuration} fields are:
11671
11672@deftypevr {@code{cups-configuration} parameter} package cups
11673The CUPS package.
11674@end deftypevr
11675
11676@deftypevr {@code{cups-configuration} parameter} package-list extensions
11677Drivers and other extensions to the CUPS package.
11678@end deftypevr
11679
11680@deftypevr {@code{cups-configuration} parameter} files-configuration files-configuration
11681Configuration of where to write logs, what directories to use for print
11682spools, and related privileged configuration parameters.
11683
11684Available @code{files-configuration} fields are:
11685
11686@deftypevr {@code{files-configuration} parameter} log-location access-log
11687Defines the access log filename. Specifying a blank filename disables
11688access log generation. The value @code{stderr} causes log entries to be
11689sent to the standard error file when the scheduler is running in the
11690foreground, or to the system log daemon when run in the background. The
11691value @code{syslog} causes log entries to be sent to the system log
11692daemon. The server name may be included in filenames using the string
11693@code{%s}, as in @code{/var/log/cups/%s-access_log}.
11694
11695Defaults to @samp{"/var/log/cups/access_log"}.
11696@end deftypevr
11697
11698@deftypevr {@code{files-configuration} parameter} file-name cache-dir
11699Where CUPS should cache data.
11700
11701Defaults to @samp{"/var/cache/cups"}.
11702@end deftypevr
11703
11704@deftypevr {@code{files-configuration} parameter} string config-file-perm
11705Specifies the permissions for all configuration files that the scheduler
11706writes.
11707
11708Note that the permissions for the printers.conf file are currently
11709masked to only allow access from the scheduler user (typically root).
11710This is done because printer device URIs sometimes contain sensitive
11711authentication information that should not be generally known on the
11712system. There is no way to disable this security feature.
11713
11714Defaults to @samp{"0640"}.
11715@end deftypevr
11716
11717@deftypevr {@code{files-configuration} parameter} log-location error-log
11718Defines the error log filename. Specifying a blank filename disables
11719access log generation. The value @code{stderr} causes log entries to be
11720sent to the standard error file when the scheduler is running in the
11721foreground, or to the system log daemon when run in the background. The
11722value @code{syslog} causes log entries to be sent to the system log
11723daemon. The server name may be included in filenames using the string
11724@code{%s}, as in @code{/var/log/cups/%s-error_log}.
11725
11726Defaults to @samp{"/var/log/cups/error_log"}.
11727@end deftypevr
11728
11729@deftypevr {@code{files-configuration} parameter} string fatal-errors
11730Specifies which errors are fatal, causing the scheduler to exit. The
11731kind strings are:
11732
11733@table @code
11734@item none
11735No errors are fatal.
11736
11737@item all
11738All of the errors below are fatal.
11739
11740@item browse
11741Browsing initialization errors are fatal, for example failed connections
11742to the DNS-SD daemon.
11743
11744@item config
11745Configuration file syntax errors are fatal.
11746
11747@item listen
11748Listen or Port errors are fatal, except for IPv6 failures on the
11749loopback or @code{any} addresses.
11750
11751@item log
11752Log file creation or write errors are fatal.
11753
11754@item permissions
11755Bad startup file permissions are fatal, for example shared TLS
11756certificate and key files with world-read permissions.
11757@end table
11758
11759Defaults to @samp{"all -browse"}.
11760@end deftypevr
11761
11762@deftypevr {@code{files-configuration} parameter} boolean file-device?
11763Specifies whether the file pseudo-device can be used for new printer
11764queues. The URI @uref{file:///dev/null} is always allowed.
11765
11766Defaults to @samp{#f}.
11767@end deftypevr
11768
11769@deftypevr {@code{files-configuration} parameter} string group
11770Specifies the group name or ID that will be used when executing external
11771programs.
11772
11773Defaults to @samp{"lp"}.
11774@end deftypevr
11775
11776@deftypevr {@code{files-configuration} parameter} string log-file-perm
11777Specifies the permissions for all log files that the scheduler writes.
11778
11779Defaults to @samp{"0644"}.
11780@end deftypevr
11781
11782@deftypevr {@code{files-configuration} parameter} log-location page-log
11783Defines the page log filename. Specifying a blank filename disables
11784access log generation. The value @code{stderr} causes log entries to be
11785sent to the standard error file when the scheduler is running in the
11786foreground, or to the system log daemon when run in the background. The
11787value @code{syslog} causes log entries to be sent to the system log
11788daemon. The server name may be included in filenames using the string
11789@code{%s}, as in @code{/var/log/cups/%s-page_log}.
11790
11791Defaults to @samp{"/var/log/cups/page_log"}.
11792@end deftypevr
11793
11794@deftypevr {@code{files-configuration} parameter} string remote-root
11795Specifies the username that is associated with unauthenticated accesses
11796by clients claiming to be the root user. The default is @code{remroot}.
11797
11798Defaults to @samp{"remroot"}.
11799@end deftypevr
11800
11801@deftypevr {@code{files-configuration} parameter} file-name request-root
11802Specifies the directory that contains print jobs and other HTTP request
11803data.
11804
11805Defaults to @samp{"/var/spool/cups"}.
11806@end deftypevr
11807
11808@deftypevr {@code{files-configuration} parameter} sandboxing sandboxing
11809Specifies the level of security sandboxing that is applied to print
11810filters, backends, and other child processes of the scheduler; either
11811@code{relaxed} or @code{strict}. This directive is currently only
11812used/supported on macOS.
11813
11814Defaults to @samp{strict}.
11815@end deftypevr
11816
11817@deftypevr {@code{files-configuration} parameter} file-name server-keychain
11818Specifies the location of TLS certificates and private keys. CUPS will
11819look for public and private keys in this directory: a @code{.crt} files
11820for PEM-encoded certificates and corresponding @code{.key} files for
11821PEM-encoded private keys.
11822
11823Defaults to @samp{"/etc/cups/ssl"}.
11824@end deftypevr
11825
11826@deftypevr {@code{files-configuration} parameter} file-name server-root
11827Specifies the directory containing the server configuration files.
11828
11829Defaults to @samp{"/etc/cups"}.
11830@end deftypevr
11831
11832@deftypevr {@code{files-configuration} parameter} boolean sync-on-close?
11833Specifies whether the scheduler calls fsync(2) after writing
11834configuration or state files.
11835
11836Defaults to @samp{#f}.
11837@end deftypevr
11838
11839@deftypevr {@code{files-configuration} parameter} space-separated-string-list system-group
11840Specifies the group(s) to use for @code{@@SYSTEM} group authentication.
11841@end deftypevr
11842
11843@deftypevr {@code{files-configuration} parameter} file-name temp-dir
11844Specifies the directory where temporary files are stored.
11845
11846Defaults to @samp{"/var/spool/cups/tmp"}.
11847@end deftypevr
11848
11849@deftypevr {@code{files-configuration} parameter} string user
11850Specifies the user name or ID that is used when running external
11851programs.
11852
11853Defaults to @samp{"lp"}.
11854@end deftypevr
11855@end deftypevr
11856
11857@deftypevr {@code{cups-configuration} parameter} access-log-level access-log-level
11858Specifies the logging level for the AccessLog file. The @code{config}
11859level logs when printers and classes are added, deleted, or modified and
11860when configuration files are accessed or updated. The @code{actions}
11861level logs when print jobs are submitted, held, released, modified, or
11862canceled, and any of the conditions for @code{config}. The @code{all}
11863level logs all requests.
11864
11865Defaults to @samp{actions}.
11866@end deftypevr
11867
11868@deftypevr {@code{cups-configuration} parameter} boolean auto-purge-jobs?
11869Specifies whether to purge job history data automatically when it is no
11870longer required for quotas.
11871
11872Defaults to @samp{#f}.
11873@end deftypevr
11874
11875@deftypevr {@code{cups-configuration} parameter} browse-local-protocols browse-local-protocols
11876Specifies which protocols to use for local printer sharing.
11877
11878Defaults to @samp{dnssd}.
11879@end deftypevr
11880
11881@deftypevr {@code{cups-configuration} parameter} boolean browse-web-if?
11882Specifies whether the CUPS web interface is advertised.
11883
11884Defaults to @samp{#f}.
11885@end deftypevr
11886
11887@deftypevr {@code{cups-configuration} parameter} boolean browsing?
11888Specifies whether shared printers are advertised.
11889
11890Defaults to @samp{#f}.
11891@end deftypevr
11892
11893@deftypevr {@code{cups-configuration} parameter} string classification
11894Specifies the security classification of the server. Any valid banner
11895name can be used, including "classified", "confidential", "secret",
11896"topsecret", and "unclassified", or the banner can be omitted to disable
11897secure printing functions.
11898
11899Defaults to @samp{""}.
11900@end deftypevr
11901
11902@deftypevr {@code{cups-configuration} parameter} boolean classify-override?
11903Specifies whether users may override the classification (cover page) of
11904individual print jobs using the @code{job-sheets} option.
11905
11906Defaults to @samp{#f}.
11907@end deftypevr
11908
11909@deftypevr {@code{cups-configuration} parameter} default-auth-type default-auth-type
11910Specifies the default type of authentication to use.
11911
11912Defaults to @samp{Basic}.
11913@end deftypevr
11914
11915@deftypevr {@code{cups-configuration} parameter} default-encryption default-encryption
11916Specifies whether encryption will be used for authenticated requests.
11917
11918Defaults to @samp{Required}.
11919@end deftypevr
11920
11921@deftypevr {@code{cups-configuration} parameter} string default-language
11922Specifies the default language to use for text and web content.
11923
11924Defaults to @samp{"en"}.
11925@end deftypevr
11926
11927@deftypevr {@code{cups-configuration} parameter} string default-paper-size
11928Specifies the default paper size for new print queues. @samp{"Auto"}
11929uses a locale-specific default, while @samp{"None"} specifies there is
11930no default paper size. Specific size names are typically
11931@samp{"Letter"} or @samp{"A4"}.
11932
11933Defaults to @samp{"Auto"}.
11934@end deftypevr
11935
11936@deftypevr {@code{cups-configuration} parameter} string default-policy
11937Specifies the default access policy to use.
11938
11939Defaults to @samp{"default"}.
11940@end deftypevr
11941
11942@deftypevr {@code{cups-configuration} parameter} boolean default-shared?
11943Specifies whether local printers are shared by default.
11944
11945Defaults to @samp{#t}.
11946@end deftypevr
11947
11948@deftypevr {@code{cups-configuration} parameter} non-negative-integer dirty-clean-interval
11949Specifies the delay for updating of configuration and state files, in
11950seconds. A value of 0 causes the update to happen as soon as possible,
11951typically within a few milliseconds.
11952
11953Defaults to @samp{30}.
11954@end deftypevr
11955
11956@deftypevr {@code{cups-configuration} parameter} error-policy error-policy
11957Specifies what to do when an error occurs. Possible values are
11958@code{abort-job}, which will discard the failed print job;
11959@code{retry-job}, which will retry the job at a later time;
11960@code{retry-this-job}, which retries the failed job immediately; and
11961@code{stop-printer}, which stops the printer.
11962
11963Defaults to @samp{stop-printer}.
11964@end deftypevr
11965
11966@deftypevr {@code{cups-configuration} parameter} non-negative-integer filter-limit
11967Specifies the maximum cost of filters that are run concurrently, which
11968can be used to minimize disk, memory, and CPU resource problems. A
11969limit of 0 disables filter limiting. An average print to a
11970non-PostScript printer needs a filter limit of about 200. A PostScript
11971printer needs about half that (100). Setting the limit below these
11972thresholds will effectively limit the scheduler to printing a single job
11973at any time.
11974
11975Defaults to @samp{0}.
11976@end deftypevr
11977
11978@deftypevr {@code{cups-configuration} parameter} non-negative-integer filter-nice
11979Specifies the scheduling priority of filters that are run to print a
11980job. The nice value ranges from 0, the highest priority, to 19, the
11981lowest priority.
11982
11983Defaults to @samp{0}.
11984@end deftypevr
11985
11986@deftypevr {@code{cups-configuration} parameter} host-name-lookups host-name-lookups
11987Specifies whether to do reverse lookups on connecting clients. The
11988@code{double} setting causes @code{cupsd} to verify that the hostname
11989resolved from the address matches one of the addresses returned for that
11990hostname. Double lookups also prevent clients with unregistered
11991addresses from connecting to your server. Only set this option to
11992@code{#t} or @code{double} if absolutely required.
11993
11994Defaults to @samp{#f}.
11995@end deftypevr
11996
11997@deftypevr {@code{cups-configuration} parameter} non-negative-integer job-kill-delay
11998Specifies the number of seconds to wait before killing the filters and
11999backend associated with a canceled or held job.
12000
12001Defaults to @samp{30}.
12002@end deftypevr
12003
12004@deftypevr {@code{cups-configuration} parameter} non-negative-integer job-retry-interval
12005Specifies the interval between retries of jobs in seconds. This is
12006typically used for fax queues but can also be used with normal print
12007queues whose error policy is @code{retry-job} or
12008@code{retry-current-job}.
12009
12010Defaults to @samp{30}.
12011@end deftypevr
12012
12013@deftypevr {@code{cups-configuration} parameter} non-negative-integer job-retry-limit
12014Specifies the number of retries that are done for jobs. This is
12015typically used for fax queues but can also be used with normal print
12016queues whose error policy is @code{retry-job} or
12017@code{retry-current-job}.
12018
12019Defaults to @samp{5}.
12020@end deftypevr
12021
12022@deftypevr {@code{cups-configuration} parameter} boolean keep-alive?
12023Specifies whether to support HTTP keep-alive connections.
12024
12025Defaults to @samp{#t}.
12026@end deftypevr
12027
12028@deftypevr {@code{cups-configuration} parameter} non-negative-integer keep-alive-timeout
12029Specifies how long an idle client connection remains open, in seconds.
12030
12031Defaults to @samp{30}.
12032@end deftypevr
12033
12034@deftypevr {@code{cups-configuration} parameter} non-negative-integer limit-request-body
12035Specifies the maximum size of print files, IPP requests, and HTML form
12036data. A limit of 0 disables the limit check.
12037
12038Defaults to @samp{0}.
12039@end deftypevr
12040
12041@deftypevr {@code{cups-configuration} parameter} multiline-string-list listen
12042Listens on the specified interfaces for connections. Valid values are
12043of the form @var{address}:@var{port}, where @var{address} is either an
12044IPv6 address enclosed in brackets, an IPv4 address, or @code{*} to
12045indicate all addresses. Values can also be file names of local UNIX
12046domain sockets. The Listen directive is similar to the Port directive
12047but allows you to restrict access to specific interfaces or networks.
12048@end deftypevr
12049
12050@deftypevr {@code{cups-configuration} parameter} non-negative-integer listen-back-log
12051Specifies the number of pending connections that will be allowed. This
12052normally only affects very busy servers that have reached the MaxClients
12053limit, but can also be triggered by large numbers of simultaneous
12054connections. When the limit is reached, the operating system will
12055refuse additional connections until the scheduler can accept the pending
12056ones.
12057
12058Defaults to @samp{128}.
12059@end deftypevr
12060
12061@deftypevr {@code{cups-configuration} parameter} location-access-control-list location-access-controls
12062Specifies a set of additional access controls.
12063
12064Available @code{location-access-controls} fields are:
12065
12066@deftypevr {@code{location-access-controls} parameter} file-name path
12067Specifies the URI path to which the access control applies.
12068@end deftypevr
12069
12070@deftypevr {@code{location-access-controls} parameter} access-control-list access-controls
12071Access controls for all access to this path, in the same format as the
12072@code{access-controls} of @code{operation-access-control}.
12073
12074Defaults to @samp{()}.
12075@end deftypevr
12076
12077@deftypevr {@code{location-access-controls} parameter} method-access-control-list method-access-controls
12078Access controls for method-specific access to this path.
12079
12080Defaults to @samp{()}.
12081
12082Available @code{method-access-controls} fields are:
12083
12084@deftypevr {@code{method-access-controls} parameter} boolean reverse?
12085If @code{#t}, apply access controls to all methods except the listed
12086methods. Otherwise apply to only the listed methods.
12087
12088Defaults to @samp{#f}.
12089@end deftypevr
12090
12091@deftypevr {@code{method-access-controls} parameter} method-list methods
12092Methods to which this access control applies.
12093
12094Defaults to @samp{()}.
12095@end deftypevr
12096
12097@deftypevr {@code{method-access-controls} parameter} access-control-list access-controls
12098Access control directives, as a list of strings. Each string should be
12099one directive, such as "Order allow,deny".
12100
12101Defaults to @samp{()}.
12102@end deftypevr
12103@end deftypevr
12104@end deftypevr
12105
12106@deftypevr {@code{cups-configuration} parameter} non-negative-integer log-debug-history
12107Specifies the number of debugging messages that are retained for logging
12108if an error occurs in a print job. Debug messages are logged regardless
12109of the LogLevel setting.
12110
12111Defaults to @samp{100}.
12112@end deftypevr
12113
12114@deftypevr {@code{cups-configuration} parameter} log-level log-level
12115Specifies the level of logging for the ErrorLog file. The value
12116@code{none} stops all logging while @code{debug2} logs everything.
12117
12118Defaults to @samp{info}.
12119@end deftypevr
12120
12121@deftypevr {@code{cups-configuration} parameter} log-time-format log-time-format
12122Specifies the format of the date and time in the log files. The value
12123@code{standard} logs whole seconds while @code{usecs} logs microseconds.
12124
12125Defaults to @samp{standard}.
12126@end deftypevr
12127
12128@deftypevr {@code{cups-configuration} parameter} non-negative-integer max-clients
12129Specifies the maximum number of simultaneous clients that are allowed by
12130the scheduler.
12131
12132Defaults to @samp{100}.
12133@end deftypevr
12134
12135@deftypevr {@code{cups-configuration} parameter} non-negative-integer max-clients-per-host
12136Specifies the maximum number of simultaneous clients that are allowed
12137from a single address.
12138
12139Defaults to @samp{100}.
12140@end deftypevr
12141
12142@deftypevr {@code{cups-configuration} parameter} non-negative-integer max-copies
12143Specifies the maximum number of copies that a user can print of each
12144job.
12145
12146Defaults to @samp{9999}.
12147@end deftypevr
12148
12149@deftypevr {@code{cups-configuration} parameter} non-negative-integer max-hold-time
12150Specifies the maximum time a job may remain in the @code{indefinite}
12151hold state before it is canceled. A value of 0 disables cancellation of
12152held jobs.
12153
12154Defaults to @samp{0}.
12155@end deftypevr
12156
12157@deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs
12158Specifies the maximum number of simultaneous jobs that are allowed. Set
12159to 0 to allow an unlimited number of jobs.
12160
12161Defaults to @samp{500}.
12162@end deftypevr
12163
12164@deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs-per-printer
12165Specifies the maximum number of simultaneous jobs that are allowed per
12166printer. A value of 0 allows up to MaxJobs jobs per printer.
12167
12168Defaults to @samp{0}.
12169@end deftypevr
12170
12171@deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs-per-user
12172Specifies the maximum number of simultaneous jobs that are allowed per
12173user. A value of 0 allows up to MaxJobs jobs per user.
12174
12175Defaults to @samp{0}.
12176@end deftypevr
12177
12178@deftypevr {@code{cups-configuration} parameter} non-negative-integer max-job-time
12179Specifies the maximum time a job may take to print before it is
12180canceled, in seconds. Set to 0 to disable cancellation of "stuck" jobs.
12181
12182Defaults to @samp{10800}.
12183@end deftypevr
12184
12185@deftypevr {@code{cups-configuration} parameter} non-negative-integer max-log-size
12186Specifies the maximum size of the log files before they are rotated, in
12187bytes. The value 0 disables log rotation.
12188
12189Defaults to @samp{1048576}.
12190@end deftypevr
12191
12192@deftypevr {@code{cups-configuration} parameter} non-negative-integer multiple-operation-timeout
12193Specifies the maximum amount of time to allow between files in a
12194multiple file print job, in seconds.
12195
12196Defaults to @samp{300}.
12197@end deftypevr
12198
12199@deftypevr {@code{cups-configuration} parameter} string page-log-format
12200Specifies the format of PageLog lines. Sequences beginning with percent
12201(@samp{%}) characters are replaced with the corresponding information,
12202while all other characters are copied literally. The following percent
12203sequences are recognized:
12204
12205@table @samp
12206@item %%
12207insert a single percent character
12208
12209@item %@{name@}
12210insert the value of the specified IPP attribute
12211
12212@item %C
12213insert the number of copies for the current page
12214
12215@item %P
12216insert the current page number
12217
12218@item %T
12219insert the current date and time in common log format
12220
12221@item %j
12222insert the job ID
12223
12224@item %p
12225insert the printer name
12226
12227@item %u
12228insert the username
12229@end table
12230
12231A value of the empty string disables page logging. The string @code{%p
12232%u %j %T %P %C %@{job-billing@} %@{job-originating-host-name@}
12233%@{job-name@} %@{media@} %@{sides@}} creates a page log with the
12234standard items.
12235
12236Defaults to @samp{""}.
12237@end deftypevr
12238
12239@deftypevr {@code{cups-configuration} parameter} environment-variables environment-variables
12240Passes the specified environment variable(s) to child processes; a list
12241of strings.
12242
12243Defaults to @samp{()}.
12244@end deftypevr
12245
12246@deftypevr {@code{cups-configuration} parameter} policy-configuration-list policies
12247Specifies named access control policies.
12248
12249Available @code{policy-configuration} fields are:
12250
12251@deftypevr {@code{policy-configuration} parameter} string name
12252Name of the policy.
12253@end deftypevr
12254
12255@deftypevr {@code{policy-configuration} parameter} string job-private-access
12256Specifies an access list for a job's private values. @code{@@ACL} maps
12257to the printer's requesting-user-name-allowed or
12258requesting-user-name-denied values. @code{@@OWNER} maps to the job's
12259owner. @code{@@SYSTEM} maps to the groups listed for the
12260@code{system-group} field of the @code{files-config} configuration,
12261which is reified into the @code{cups-files.conf(5)} file. Other
12262possible elements of the access list include specific user names, and
12263@code{@@@var{group}} to indicate members of a specific group. The
12264access list may also be simply @code{all} or @code{default}.
12265
12266Defaults to @samp{"@@OWNER @@SYSTEM"}.
12267@end deftypevr
12268
12269@deftypevr {@code{policy-configuration} parameter} string job-private-values
12270Specifies the list of job values to make private, or @code{all},
12271@code{default}, or @code{none}.
12272
12273Defaults to @samp{"job-name job-originating-host-name
12274job-originating-user-name phone"}.
12275@end deftypevr
12276
12277@deftypevr {@code{policy-configuration} parameter} string subscription-private-access
12278Specifies an access list for a subscription's private values.
12279@code{@@ACL} maps to the printer's requesting-user-name-allowed or
12280requesting-user-name-denied values. @code{@@OWNER} maps to the job's
12281owner. @code{@@SYSTEM} maps to the groups listed for the
12282@code{system-group} field of the @code{files-config} configuration,
12283which is reified into the @code{cups-files.conf(5)} file. Other
12284possible elements of the access list include specific user names, and
12285@code{@@@var{group}} to indicate members of a specific group. The
12286access list may also be simply @code{all} or @code{default}.
12287
12288Defaults to @samp{"@@OWNER @@SYSTEM"}.
12289@end deftypevr
12290
12291@deftypevr {@code{policy-configuration} parameter} string subscription-private-values
12292Specifies the list of job values to make private, or @code{all},
12293@code{default}, or @code{none}.
12294
12295Defaults to @samp{"notify-events notify-pull-method notify-recipient-uri
12296notify-subscriber-user-name notify-user-data"}.
12297@end deftypevr
12298
12299@deftypevr {@code{policy-configuration} parameter} operation-access-control-list access-controls
12300Access control by IPP operation.
12301
12302Defaults to @samp{()}.
12303@end deftypevr
12304@end deftypevr
12305
12306@deftypevr {@code{cups-configuration} parameter} boolean-or-non-negative-integer preserve-job-files
12307Specifies whether job files (documents) are preserved after a job is
12308printed. If a numeric value is specified, job files are preserved for
12309the indicated number of seconds after printing. Otherwise a boolean
12310value applies indefinitely.
12311
12312Defaults to @samp{86400}.
12313@end deftypevr
12314
12315@deftypevr {@code{cups-configuration} parameter} boolean-or-non-negative-integer preserve-job-history
12316Specifies whether the job history is preserved after a job is printed.
12317If a numeric value is specified, the job history is preserved for the
12318indicated number of seconds after printing. If @code{#t}, the job
12319history is preserved until the MaxJobs limit is reached.
12320
12321Defaults to @samp{#t}.
12322@end deftypevr
12323
12324@deftypevr {@code{cups-configuration} parameter} non-negative-integer reload-timeout
12325Specifies the amount of time to wait for job completion before
12326restarting the scheduler.
12327
12328Defaults to @samp{30}.
12329@end deftypevr
12330
12331@deftypevr {@code{cups-configuration} parameter} string rip-cache
12332Specifies the maximum amount of memory to use when converting documents
12333into bitmaps for a printer.
12334
12335Defaults to @samp{"128m"}.
12336@end deftypevr
12337
12338@deftypevr {@code{cups-configuration} parameter} string server-admin
12339Specifies the email address of the server administrator.
12340
12341Defaults to @samp{"root@@localhost.localdomain"}.
12342@end deftypevr
12343
12344@deftypevr {@code{cups-configuration} parameter} host-name-list-or-* server-alias
12345The ServerAlias directive is used for HTTP Host header validation when
12346clients connect to the scheduler from external interfaces. Using the
12347special name @code{*} can expose your system to known browser-based DNS
12348rebinding attacks, even when accessing sites through a firewall. If the
12349auto-discovery of alternate names does not work, we recommend listing
12350each alternate name with a ServerAlias directive instead of using
12351@code{*}.
12352
12353Defaults to @samp{*}.
12354@end deftypevr
12355
12356@deftypevr {@code{cups-configuration} parameter} string server-name
12357Specifies the fully-qualified host name of the server.
12358
12359Defaults to @samp{"localhost"}.
12360@end deftypevr
12361
12362@deftypevr {@code{cups-configuration} parameter} server-tokens server-tokens
12363Specifies what information is included in the Server header of HTTP
12364responses. @code{None} disables the Server header. @code{ProductOnly}
12365reports @code{CUPS}. @code{Major} reports @code{CUPS 2}. @code{Minor}
12366reports @code{CUPS 2.0}. @code{Minimal} reports @code{CUPS 2.0.0}.
12367@code{OS} reports @code{CUPS 2.0.0 (@var{uname})} where @var{uname} is
12368the output of the @code{uname} command. @code{Full} reports @code{CUPS
123692.0.0 (@var{uname}) IPP/2.0}.
12370
12371Defaults to @samp{Minimal}.
12372@end deftypevr
12373
12374@deftypevr {@code{cups-configuration} parameter} string set-env
12375Set the specified environment variable to be passed to child processes.
12376
12377Defaults to @samp{"variable value"}.
12378@end deftypevr
12379
12380@deftypevr {@code{cups-configuration} parameter} multiline-string-list ssl-listen
12381Listens on the specified interfaces for encrypted connections. Valid
12382values are of the form @var{address}:@var{port}, where @var{address} is
12383either an IPv6 address enclosed in brackets, an IPv4 address, or
12384@code{*} to indicate all addresses.
12385
12386Defaults to @samp{()}.
12387@end deftypevr
12388
12389@deftypevr {@code{cups-configuration} parameter} ssl-options ssl-options
12390Sets encryption options. By default, CUPS only supports encryption
12391using TLS v1.0 or higher using known secure cipher suites. The
12392@code{AllowRC4} option enables the 128-bit RC4 cipher suites, which are
12393required for some older clients that do not implement newer ones. The
12394@code{AllowSSL3} option enables SSL v3.0, which is required for some
12395older clients that do not support TLS v1.0.
12396
12397Defaults to @samp{()}.
12398@end deftypevr
12399
12400@deftypevr {@code{cups-configuration} parameter} boolean strict-conformance?
12401Specifies whether the scheduler requires clients to strictly adhere to
12402the IPP specifications.
12403
12404Defaults to @samp{#f}.
12405@end deftypevr
12406
12407@deftypevr {@code{cups-configuration} parameter} non-negative-integer timeout
12408Specifies the HTTP request timeout, in seconds.
12409
12410Defaults to @samp{300}.
12411
12412@end deftypevr
12413
12414@deftypevr {@code{cups-configuration} parameter} boolean web-interface?
12415Specifies whether the web interface is enabled.
12416
12417Defaults to @samp{#f}.
12418@end deftypevr
12419
12420At this point you're probably thinking ``oh dear, Guix manual, I like
12421you but you can stop already with the configuration options''. Indeed.
12422However, one more point: it could be that you have an existing
12423@code{cupsd.conf} that you want to use. In that case, you can pass an
12424@code{opaque-cups-configuration} as the configuration of a
12425@code{cups-service-type}.
12426
12427Available @code{opaque-cups-configuration} fields are:
12428
12429@deftypevr {@code{opaque-cups-configuration} parameter} package cups
12430The CUPS package.
12431@end deftypevr
12432
12433@deftypevr {@code{opaque-cups-configuration} parameter} string cupsd.conf
12434The contents of the @code{cupsd.conf}, as a string.
12435@end deftypevr
12436
12437@deftypevr {@code{opaque-cups-configuration} parameter} string cups-files.conf
12438The contents of the @code{cups-files.conf} file, as a string.
12439@end deftypevr
12440
12441For example, if your @code{cupsd.conf} and @code{cups-files.conf} are in
12442strings of the same name, you could instantiate a CUPS service like
12443this:
12444
12445@example
12446(service cups-service-type
12447 (opaque-cups-configuration
12448 (cupsd.conf cupsd.conf)
12449 (cups-files.conf cups-files.conf)))
12450@end example
12451
12452
fe1a39d3
LC
12453@node Desktop Services
12454@subsubsection Desktop Services
aa4ed923 12455
fe1a39d3
LC
12456The @code{(gnu services desktop)} module provides services that are
12457usually useful in the context of a ``desktop'' setup---that is, on a
12458machine running a graphical display server, possibly with graphical user
7a2413e4 12459interfaces, etc. It also defines services that provide specific desktop
431703ff 12460environments like GNOME, XFCE or MATE.
aa4ed923 12461
4467be21
LC
12462To simplify things, the module defines a variable containing the set of
12463services that users typically expect on a machine with a graphical
12464environment and networking:
12465
12466@defvr {Scheme Variable} %desktop-services
12467This is a list of services that builds upon @var{%base-services} and
1068f26b 12468adds or adjusts services for a typical ``desktop'' setup.
4467be21
LC
12469
12470In particular, it adds a graphical login manager (@pxref{X Window,
063c6082 12471@code{slim-service}}), screen lockers, a network management tool
4110fbc6 12472(@pxref{Networking Services, @code{network-manager-service-type}}), energy and color
063c6082
AW
12473management services, the @code{elogind} login and seat manager, the
12474Polkit privilege service, the GeoClue location service, the
12475AccountsService daemon that allows authorized users change system
12476passwords, an NTP client (@pxref{Networking Services}), the Avahi
12477daemon, and has the name service switch service configured to be able to
12478use @code{nss-mdns} (@pxref{Name Service Switch, mDNS}).
4467be21
LC
12479@end defvr
12480
12481The @var{%desktop-services} variable can be used as the @code{services}
12482field of an @code{operating-system} declaration (@pxref{operating-system
12483Reference, @code{services}}).
12484
431703ff 12485Additionally, the @code{gnome-desktop-service},
12486@code{xfce-desktop-service} and @code{mate-desktop-service}
12487procedures can add GNOME, XFCE and/or MATE to a system.
12488To ``add GNOME'' means that system-level services like the
7a2413e4
AW
12489backlight adjustment helpers and the power management utilities are
12490added to the system, extending @code{polkit} and @code{dbus}
12491appropriately, allowing GNOME to operate with elevated privileges on a
12492limited number of special-purpose system interfaces. Additionally,
12493adding a service made by @code{gnome-desktop-service} adds the GNOME
12494metapackage to the system profile. Likewise, adding the XFCE service
12495not only adds the @code{xfce} metapackage to the system profile, but it
12496also gives the Thunar file manager the ability to open a ``root-mode''
12497file management window, if the user authenticates using the
12498administrator's password via the standard polkit graphical interface.
431703ff 12499To ``add MATE'' means that @code{polkit} and @code{dbus} are extended
12500appropriately, allowing MATE to operate with elevated privileges on a
12501limited number of special-purpose system interfaces. Additionally,
12502adding a service made by @code{mate-desktop-service} adds the MATE
12503metapackage to the system profile.
7a2413e4 12504
3853f86f
RH
12505The desktop environments in Guix use the Xorg display server by
12506default. If you'd like to use the newer display server protocol
12507called Wayland, you need to use the @code{sddm-service} instead of the
12508@code{slim-service} for the graphical login manager. You should then
75538328
RH
12509select the ``GNOME (Wayland)'' session in SDDM. Alternatively you can
12510also try starting GNOME on Wayland manually from a TTY with the
12511command ``XDG_SESSION_TYPE=wayland exec dbus-run-session
12512gnome-session``. Currently only GNOME has support for Wayland.
3853f86f 12513
7a2413e4
AW
12514@deffn {Scheme Procedure} gnome-desktop-service
12515Return a service that adds the @code{gnome} package to the system
12516profile, and extends polkit with the actions from
12517@code{gnome-settings-daemon}.
12518@end deffn
12519
12520@deffn {Scheme Procedure} xfce-desktop-service
12521Return a service that adds the @code{xfce} package to the system profile,
5741e3e5 12522and extends polkit with the ability for @code{thunar} to manipulate the
7a2413e4
AW
12523file system as root from within a user session, after the user has
12524authenticated with the administrator's password.
12525@end deffn
12526
431703ff 12527@deffn {Scheme Procedure} mate-desktop-service
12528Return a service that adds the @code{mate} package to the system
12529profile, and extends polkit with the actions from
12530@code{mate-settings-daemon}.
12531@end deffn
12532
12533Because the GNOME, XFCE and MATE desktop services pull in so many packages,
7a2413e4 12534the default @code{%desktop-services} variable doesn't include either of
1c27f72f 12535them by default. To add GNOME, XFCE or MATE, just @code{cons} them onto
7a2413e4
AW
12536@code{%desktop-services} in the @code{services} field of your
12537@code{operating-system}:
12538
12539@example
12540(use-modules (gnu))
12541(use-service-modules desktop)
12542(operating-system
12543 ...
12544 ;; cons* adds items to the list given as its last argument.
12545 (services (cons* (gnome-desktop-service)
12546 (xfce-desktop-service)
12547 %desktop-services))
12548 ...)
12549@end example
12550
12551These desktop environments will then be available as options in the
12552graphical login window.
12553
12554The actual service definitions included in @code{%desktop-services} and
12555provided by @code{(gnu services dbus)} and @code{(gnu services desktop)}
12556are described below.
4467be21 12557
0adfe95a 12558@deffn {Scheme Procedure} dbus-service [#:dbus @var{dbus}] [#:services '()]
fe1a39d3
LC
12559Return a service that runs the ``system bus'', using @var{dbus}, with
12560support for @var{services}.
aa4ed923 12561
fe1a39d3
LC
12562@uref{http://dbus.freedesktop.org/, D-Bus} is an inter-process communication
12563facility. Its system bus is used to allow system services to communicate
1068f26b 12564and to be notified of system-wide events.
aa4ed923 12565
fe1a39d3
LC
12566@var{services} must be a list of packages that provide an
12567@file{etc/dbus-1/system.d} directory containing additional D-Bus configuration
12568and policy files. For example, to allow avahi-daemon to use the system bus,
12569@var{services} must be equal to @code{(list avahi)}.
aa4ed923
AK
12570@end deffn
12571
0adfe95a 12572@deffn {Scheme Procedure} elogind-service [#:config @var{config}]
4650a77e 12573Return a service that runs the @code{elogind} login and
acc2ab65 12574seat management daemon. @uref{https://github.com/elogind/elogind,
4650a77e
AW
12575Elogind} exposes a D-Bus interface that can be used to know which users
12576are logged in, know what kind of sessions they have open, suspend the
12577system, inhibit system suspend, reboot the system, and other tasks.
12578
12579Elogind handles most system-level power events for a computer, for
12580example suspending the system when a lid is closed, or shutting it down
12581when the power button is pressed.
12582
12583The @var{config} keyword argument specifies the configuration for
1068f26b 12584elogind, and should be the result of an @code{(elogind-configuration
4650a77e
AW
12585(@var{parameter} @var{value})...)} invocation. Available parameters and
12586their default values are:
12587
12588@table @code
12589@item kill-user-processes?
12590@code{#f}
12591@item kill-only-users
12592@code{()}
12593@item kill-exclude-users
12594@code{("root")}
12595@item inhibit-delay-max-seconds
12596@code{5}
12597@item handle-power-key
12598@code{poweroff}
12599@item handle-suspend-key
12600@code{suspend}
12601@item handle-hibernate-key
12602@code{hibernate}
12603@item handle-lid-switch
12604@code{suspend}
12605@item handle-lid-switch-docked
12606@code{ignore}
12607@item power-key-ignore-inhibited?
12608@code{#f}
12609@item suspend-key-ignore-inhibited?
12610@code{#f}
12611@item hibernate-key-ignore-inhibited?
12612@code{#f}
12613@item lid-switch-ignore-inhibited?
12614@code{#t}
12615@item holdoff-timeout-seconds
12616@code{30}
12617@item idle-action
12618@code{ignore}
12619@item idle-action-seconds
12620@code{(* 30 60)}
12621@item runtime-directory-size-percent
12622@code{10}
12623@item runtime-directory-size
12624@code{#f}
12625@item remove-ipc?
12626@code{#t}
12627@item suspend-state
12628@code{("mem" "standby" "freeze")}
12629@item suspend-mode
12630@code{()}
12631@item hibernate-state
12632@code{("disk")}
12633@item hibernate-mode
12634@code{("platform" "shutdown")}
12635@item hybrid-sleep-state
12636@code{("disk")}
12637@item hybrid-sleep-mode
12638@code{("suspend" "platform" "shutdown")}
12639@end table
12640@end deffn
12641
063c6082
AW
12642@deffn {Scheme Procedure} accountsservice-service @
12643 [#:accountsservice @var{accountsservice}]
12644Return a service that runs AccountsService, a system service that can
12645list available accounts, change their passwords, and so on.
12646AccountsService integrates with PolicyKit to enable unprivileged users
12647to acquire the capability to modify their system configuration.
12648@uref{https://www.freedesktop.org/wiki/Software/AccountsService/, the
12649accountsservice web site} for more information.
12650
12651The @var{accountsservice} keyword argument is the @code{accountsservice}
12652package to expose as a service.
12653@end deffn
12654
be1c2c54 12655@deffn {Scheme Procedure} polkit-service @
4650a77e 12656 [#:polkit @var{polkit}]
222e3319
LC
12657Return a service that runs the
12658@uref{http://www.freedesktop.org/wiki/Software/polkit/, Polkit privilege
12659management service}, which allows system administrators to grant access to
12660privileged operations in a structured way. By querying the Polkit service, a
12661privileged system component can know when it should grant additional
12662capabilities to ordinary users. For example, an ordinary user can be granted
12663the capability to suspend the system if the user is logged in locally.
4650a77e
AW
12664@end deffn
12665
be1c2c54 12666@deffn {Scheme Procedure} upower-service [#:upower @var{upower}] @
be234128
AW
12667 [#:watts-up-pro? #f] @
12668 [#:poll-batteries? #t] @
12669 [#:ignore-lid? #f] @
12670 [#:use-percentage-for-policy? #f] @
12671 [#:percentage-low 10] @
12672 [#:percentage-critical 3] @
12673 [#:percentage-action 2] @
12674 [#:time-low 1200] @
12675 [#:time-critical 300] @
12676 [#:time-action 120] @
12677 [#:critical-power-action 'hybrid-sleep]
12678Return a service that runs @uref{http://upower.freedesktop.org/,
12679@command{upowerd}}, a system-wide monitor for power consumption and battery
12680levels, with the given configuration settings. It implements the
12681@code{org.freedesktop.UPower} D-Bus interface, and is notably used by
12682GNOME.
12683@end deffn
12684
2b9e0a94
LC
12685@deffn {Scheme Procedure} udisks-service [#:udisks @var{udisks}]
12686Return a service for @uref{http://udisks.freedesktop.org/docs/latest/,
12687UDisks}, a @dfn{disk management} daemon that provides user interfaces with
12688notifications and ways to mount/unmount disks. Programs that talk to UDisks
12689include the @command{udisksctl} command, part of UDisks, and GNOME Disks.
12690@end deffn
12691
be1c2c54 12692@deffn {Scheme Procedure} colord-service [#:colord @var{colord}]
7ce597ff
AW
12693Return a service that runs @command{colord}, a system service with a D-Bus
12694interface to manage the color profiles of input and output devices such as
12695screens and scanners. It is notably used by the GNOME Color Manager graphical
12696tool. See @uref{http://www.freedesktop.org/software/colord/, the colord web
12697site} for more information.
12698@end deffn
12699
cee32ee4 12700@deffn {Scheme Procedure} geoclue-application name [#:allowed? #t] [#:system? #f] [#:users '()]
1068f26b 12701Return a configuration allowing an application to access GeoClue
cee32ee4
AW
12702location data. @var{name} is the Desktop ID of the application, without
12703the @code{.desktop} part. If @var{allowed?} is true, the application
12704will have access to location information by default. The boolean
1068f26b 12705@var{system?} value indicates whether an application is a system component
cee32ee4
AW
12706or not. Finally @var{users} is a list of UIDs of all users for which
12707this application is allowed location info access. An empty users list
12708means that all users are allowed.
12709@end deffn
12710
12711@defvr {Scheme Variable} %standard-geoclue-applications
12712The standard list of well-known GeoClue application configurations,
1068f26b
AE
12713granting authority to the GNOME date-and-time utility to ask for the
12714current location in order to set the time zone, and allowing the
12715IceCat and Epiphany web browsers to request location information.
12716IceCat and Epiphany both query the user before allowing a web page to
cee32ee4
AW
12717know the user's location.
12718@end defvr
12719
be1c2c54 12720@deffn {Scheme Procedure} geoclue-service [#:colord @var{colord}] @
cee32ee4
AW
12721 [#:whitelist '()] @
12722 [#:wifi-geolocation-url "https://location.services.mozilla.com/v1/geolocate?key=geoclue"] @
12723 [#:submit-data? #f]
12724 [#:wifi-submission-url "https://location.services.mozilla.com/v1/submit?key=geoclue"] @
12725 [#:submission-nick "geoclue"] @
12726 [#:applications %standard-geoclue-applications]
12727Return a service that runs the GeoClue location service. This service
12728provides a D-Bus interface to allow applications to request access to a
12729user's physical location, and optionally to add information to online
12730location databases. See
12731@uref{https://wiki.freedesktop.org/www/Software/GeoClue/, the GeoClue
12732web site} for more information.
12733@end deffn
12734
b9f67d6d
MC
12735@deffn {Scheme Procedure} bluetooth-service [#:bluez @var{bluez}] @
12736 [@w{#:auto-enable? #f}]
12737Return a service that runs the @command{bluetoothd} daemon, which
12738manages all the Bluetooth devices and provides a number of D-Bus
12739interfaces. When AUTO-ENABLE? is true, the bluetooth controller is
12740powered automatically at boot, which can be useful when using a
12741bluetooth keyboard or mouse.
922e21f4
SB
12742
12743Users need to be in the @code{lp} group to access the D-Bus service.
12744@end deffn
12745
105369a4
DT
12746@node Database Services
12747@subsubsection Database Services
12748
e32171ee
JD
12749@cindex database
12750@cindex SQL
6575183b 12751The @code{(gnu services databases)} module provides the following services.
105369a4 12752
be1c2c54 12753@deffn {Scheme Procedure} postgresql-service [#:postgresql postgresql] @
2d3d5cc5 12754 [#:config-file] [#:data-directory ``/var/lib/postgresql/data''] @
e05b780a 12755 [#:port 5432] [#:locale ``en_US.utf8'']
105369a4
DT
12756Return a service that runs @var{postgresql}, the PostgreSQL database
12757server.
12758
e05b780a
CB
12759The PostgreSQL daemon loads its runtime configuration from @var{config-file},
12760creates a database cluster with @var{locale} as the default
12761locale, stored in @var{data-directory}. It then listens on @var{port}.
105369a4 12762@end deffn
fe1a39d3 12763
6575183b
SB
12764@deffn {Scheme Procedure} mysql-service [#:config (mysql-configuration)]
12765Return a service that runs @command{mysqld}, the MySQL or MariaDB
12766database server.
12767
12768The optional @var{config} argument specifies the configuration for
c940b8e6 12769@command{mysqld}, which should be a @code{<mysql-configuration>} object.
6575183b
SB
12770@end deffn
12771
12772@deftp {Data Type} mysql-configuration
12773Data type representing the configuration of @var{mysql-service}.
12774
12775@table @asis
12776@item @code{mysql} (default: @var{mariadb})
12777Package object of the MySQL database server, can be either @var{mariadb}
12778or @var{mysql}.
12779
7414de0a 12780For MySQL, a temporary root password will be displayed at activation time.
6575183b 12781For MariaDB, the root password is empty.
4b41febf
CB
12782
12783@item @code{port} (default: @code{3306})
12784TCP port on which the database server listens for incoming connections.
6575183b
SB
12785@end table
12786@end deftp
12787
119fdd0d
CB
12788@defvr {Scheme Variable} memcached-service-type
12789This is the service type for the @uref{https://memcached.org/,
12790Memcached} service, which provides a distributed in memory cache. The
12791value for the service type is a @code{memcached-configuration} object.
12792@end defvr
12793
12794@example
12795(service memcached-service-type)
12796@end example
12797
12798@deftp {Data Type} memcached-configuration
12799Data type representing the configuration of memcached.
12800
12801@table @asis
12802@item @code{memcached} (default: @code{memcached})
12803The Memcached package to use.
12804
12805@item @code{interfaces} (default: @code{'("0.0.0.0")})
12806Network interfaces on which to listen.
12807
12808@item @code{tcp-port} (default: @code{11211})
12809Port on which to accept connections on,
12810
12811@item @code{udp-port} (default: @code{11211})
12812Port on which to accept UDP connections on, a value of 0 will disable
12813listening on a UDP socket.
12814
12815@item @code{additional-options} (default: @code{'()})
12816Additional command line options to pass to @code{memcached}.
12817@end table
12818@end deftp
12819
5266ff71
CB
12820@defvr {Scheme Variable} mongodb-service-type
12821This is the service type for @uref{https://www.mongodb.com/, MongoDB}.
12822The value for the service type is a @code{mongodb-configuration} object.
12823@end defvr
12824
12825@example
12826(service mongodb-service-type)
12827@end example
12828
12829@deftp {Data Type} mongodb-configuration
12830Data type representing the configuration of mongodb.
12831
12832@table @asis
12833@item @code{mongodb} (default: @code{mongodb})
12834The MongoDB package to use.
12835
12836@item @code{config-file} (default: @code{%default-mongodb-configuration-file})
12837The configuration file for MongoDB.
12838
12839@item @code{data-directory} (default: @code{"/var/lib/mongodb"})
12840This value is used to create the directory, so that it exists and is
12841owned by the mongodb user. It should match the data-directory which
12842MongoDB is configured to use through the configuration file.
12843@end table
12844@end deftp
12845
67cadaca
CB
12846@defvr {Scheme Variable} redis-service-type
12847This is the service type for the @uref{https://redis.io/, Redis}
12848key/value store, whose value is a @code{redis-configuration} object.
12849@end defvr
12850
12851@deftp {Data Type} redis-configuration
12852Data type representing the configuration of redis.
12853
12854@table @asis
12855@item @code{redis} (default: @code{redis})
12856The Redis package to use.
12857
12858@item @code{bind} (default: @code{"127.0.0.1"})
12859Network interface on which to listen.
12860
12861@item @code{port} (default: @code{6379})
12862Port on which to accept connections on, a value of 0 will disable
9fc221b5 12863listening on a TCP socket.
67cadaca
CB
12864
12865@item @code{working-directory} (default: @code{"/var/lib/redis"})
12866Directory in which to store the database and related files.
12867@end table
12868@end deftp
12869
d8c18af8
AW
12870@node Mail Services
12871@subsubsection Mail Services
12872
e32171ee
JD
12873@cindex mail
12874@cindex email
d8c18af8 12875The @code{(gnu services mail)} module provides Guix service definitions
f88371e8
SB
12876for email services: IMAP, POP3, and LMTP servers, as well as mail
12877transport agents (MTAs). Lots of acronyms! These services are detailed
12878in the subsections below.
d8c18af8 12879
f88371e8 12880@subsubheading Dovecot Service
d8c18af8
AW
12881
12882@deffn {Scheme Procedure} dovecot-service [#:config (dovecot-configuration)]
12883Return a service that runs the Dovecot IMAP/POP3/LMTP mail server.
12884@end deffn
12885
1068f26b 12886By default, Dovecot does not need much configuration; the default
d8c18af8
AW
12887configuration object created by @code{(dovecot-configuration)} will
12888suffice if your mail is delivered to @code{~/Maildir}. A self-signed
12889certificate will be generated for TLS-protected connections, though
12890Dovecot will also listen on cleartext ports by default. There are a
1068f26b 12891number of options, though, which mail administrators might need to change,
d8c18af8
AW
12892and as is the case with other services, Guix allows the system
12893administrator to specify these parameters via a uniform Scheme interface.
12894
12895For example, to specify that mail is located at @code{maildir~/.mail},
12896one would instantiate the Dovecot service like this:
12897
12898@example
12899(dovecot-service #:config
12900 (dovecot-configuration
12901 (mail-location "maildir:~/.mail")))
12902@end example
12903
12904The available configuration parameters follow. Each parameter
12905definition is preceded by its type; for example, @samp{string-list foo}
12906indicates that the @code{foo} parameter should be specified as a list of
12907strings. There is also a way to specify the configuration as a string,
12908if you have an old @code{dovecot.conf} file that you want to port over
12909from some other system; see the end for more details.
12910
12911@c The following documentation was initially generated by
12912@c (generate-documentation) in (gnu services mail). Manually maintained
12913@c documentation is better, so we shouldn't hesitate to edit below as
12914@c needed. However if the change you want to make to this documentation
12915@c can be done in an automated way, it's probably easier to change
12916@c (generate-documentation) than to make it below and have to deal with
12917@c the churn as dovecot updates.
12918
12919Available @code{dovecot-configuration} fields are:
12920
12921@deftypevr {@code{dovecot-configuration} parameter} package dovecot
12922The dovecot package.
12923@end deftypevr
12924
12925@deftypevr {@code{dovecot-configuration} parameter} comma-separated-string-list listen
1068f26b
AE
12926A list of IPs or hosts where to listen for connections. @samp{*}
12927listens on all IPv4 interfaces, @samp{::} listens on all IPv6
d8c18af8
AW
12928interfaces. If you want to specify non-default ports or anything more
12929complex, customize the address and port fields of the
12930@samp{inet-listener} of the specific services you are interested in.
12931@end deftypevr
12932
12933@deftypevr {@code{dovecot-configuration} parameter} protocol-configuration-list protocols
12934List of protocols we want to serve. Available protocols include
12935@samp{imap}, @samp{pop3}, and @samp{lmtp}.
12936
12937Available @code{protocol-configuration} fields are:
12938
12939@deftypevr {@code{protocol-configuration} parameter} string name
12940The name of the protocol.
12941@end deftypevr
12942
12943@deftypevr {@code{protocol-configuration} parameter} string auth-socket-path
1068f26b 12944UNIX socket path to the master authentication server to find users.
d8c18af8 12945This is used by imap (for shared users) and lda.
1068f26b 12946It defaults to @samp{"/var/run/dovecot/auth-userdb"}.
d8c18af8
AW
12947@end deftypevr
12948
12949@deftypevr {@code{protocol-configuration} parameter} space-separated-string-list mail-plugins
12950Space separated list of plugins to load.
12951@end deftypevr
12952
12953@deftypevr {@code{protocol-configuration} parameter} non-negative-integer mail-max-userip-connections
12954Maximum number of IMAP connections allowed for a user from each IP
12955address. NOTE: The username is compared case-sensitively.
12956Defaults to @samp{10}.
12957@end deftypevr
12958
12959@end deftypevr
12960
12961@deftypevr {@code{dovecot-configuration} parameter} service-configuration-list services
12962List of services to enable. Available services include @samp{imap},
12963@samp{imap-login}, @samp{pop3}, @samp{pop3-login}, @samp{auth}, and
12964@samp{lmtp}.
12965
12966Available @code{service-configuration} fields are:
12967
12968@deftypevr {@code{service-configuration} parameter} string kind
12969The service kind. Valid values include @code{director},
12970@code{imap-login}, @code{pop3-login}, @code{lmtp}, @code{imap},
12971@code{pop3}, @code{auth}, @code{auth-worker}, @code{dict},
12972@code{tcpwrap}, @code{quota-warning}, or anything else.
12973@end deftypevr
12974
12975@deftypevr {@code{service-configuration} parameter} listener-configuration-list listeners
1068f26b 12976Listeners for the service. A listener is either a
d8c18af8
AW
12977@code{unix-listener-configuration}, a @code{fifo-listener-configuration}, or
12978an @code{inet-listener-configuration}.
12979Defaults to @samp{()}.
12980
12981Available @code{unix-listener-configuration} fields are:
12982
eba56076
CL
12983@deftypevr {@code{unix-listener-configuration} parameter} string path
12984Path to the file, relative to @code{base-dir} field. This is also used as
12985the section name.
d8c18af8
AW
12986@end deftypevr
12987
12988@deftypevr {@code{unix-listener-configuration} parameter} string mode
12989The access mode for the socket.
12990Defaults to @samp{"0600"}.
12991@end deftypevr
12992
12993@deftypevr {@code{unix-listener-configuration} parameter} string user
f9b9a033 12994The user to own the socket.
d8c18af8
AW
12995Defaults to @samp{""}.
12996@end deftypevr
12997
12998@deftypevr {@code{unix-listener-configuration} parameter} string group
12999The group to own the socket.
13000Defaults to @samp{""}.
13001@end deftypevr
13002
13003
13004Available @code{fifo-listener-configuration} fields are:
13005
eba56076
CL
13006@deftypevr {@code{fifo-listener-configuration} parameter} string path
13007Path to the file, relative to @code{base-dir} field. This is also used as
13008the section name.
d8c18af8
AW
13009@end deftypevr
13010
13011@deftypevr {@code{fifo-listener-configuration} parameter} string mode
13012The access mode for the socket.
13013Defaults to @samp{"0600"}.
13014@end deftypevr
13015
13016@deftypevr {@code{fifo-listener-configuration} parameter} string user
f9b9a033 13017The user to own the socket.
d8c18af8
AW
13018Defaults to @samp{""}.
13019@end deftypevr
13020
13021@deftypevr {@code{fifo-listener-configuration} parameter} string group
13022The group to own the socket.
13023Defaults to @samp{""}.
13024@end deftypevr
13025
13026
13027Available @code{inet-listener-configuration} fields are:
13028
13029@deftypevr {@code{inet-listener-configuration} parameter} string protocol
13030The protocol to listen for.
13031@end deftypevr
13032
13033@deftypevr {@code{inet-listener-configuration} parameter} string address
13034The address on which to listen, or empty for all addresses.
13035Defaults to @samp{""}.
13036@end deftypevr
13037
13038@deftypevr {@code{inet-listener-configuration} parameter} non-negative-integer port
13039The port on which to listen.
13040@end deftypevr
13041
13042@deftypevr {@code{inet-listener-configuration} parameter} boolean ssl?
13043Whether to use SSL for this service; @samp{yes}, @samp{no}, or
13044@samp{required}.
13045Defaults to @samp{#t}.
13046@end deftypevr
13047
13048@end deftypevr
13049
13050@deftypevr {@code{service-configuration} parameter} non-negative-integer service-count
13051Number of connections to handle before starting a new process.
13052Typically the only useful values are 0 (unlimited) or 1. 1 is more
13053secure, but 0 is faster. <doc/wiki/LoginProcess.txt>.
13054Defaults to @samp{1}.
13055@end deftypevr
13056
13057@deftypevr {@code{service-configuration} parameter} non-negative-integer process-min-avail
13058Number of processes to always keep waiting for more connections.
13059Defaults to @samp{0}.
13060@end deftypevr
13061
13062@deftypevr {@code{service-configuration} parameter} non-negative-integer vsz-limit
13063If you set @samp{service-count 0}, you probably need to grow
13064this.
13065Defaults to @samp{256000000}.
13066@end deftypevr
13067
13068@end deftypevr
13069
13070@deftypevr {@code{dovecot-configuration} parameter} dict-configuration dict
13071Dict configuration, as created by the @code{dict-configuration}
13072constructor.
13073
13074Available @code{dict-configuration} fields are:
13075
13076@deftypevr {@code{dict-configuration} parameter} free-form-fields entries
13077A list of key-value pairs that this dict should hold.
13078Defaults to @samp{()}.
13079@end deftypevr
13080
13081@end deftypevr
13082
13083@deftypevr {@code{dovecot-configuration} parameter} passdb-configuration-list passdbs
1068f26b 13084A list of passdb configurations, each one created by the
d8c18af8
AW
13085@code{passdb-configuration} constructor.
13086
13087Available @code{passdb-configuration} fields are:
13088
13089@deftypevr {@code{passdb-configuration} parameter} string driver
13090The driver that the passdb should use. Valid values include
13091@samp{pam}, @samp{passwd}, @samp{shadow}, @samp{bsdauth}, and
13092@samp{static}.
13093Defaults to @samp{"pam"}.
13094@end deftypevr
13095
deb36188
CL
13096@deftypevr {@code{passdb-configuration} parameter} space-separated-string-list args
13097Space separated list of arguments to the passdb driver.
13098Defaults to @samp{""}.
d8c18af8
AW
13099@end deftypevr
13100
13101@end deftypevr
13102
13103@deftypevr {@code{dovecot-configuration} parameter} userdb-configuration-list userdbs
13104List of userdb configurations, each one created by the
13105@code{userdb-configuration} constructor.
13106
13107Available @code{userdb-configuration} fields are:
13108
13109@deftypevr {@code{userdb-configuration} parameter} string driver
13110The driver that the userdb should use. Valid values include
13111@samp{passwd} and @samp{static}.
13112Defaults to @samp{"passwd"}.
13113@end deftypevr
13114
deb36188
CL
13115@deftypevr {@code{userdb-configuration} parameter} space-separated-string-list args
13116Space separated list of arguments to the userdb driver.
13117Defaults to @samp{""}.
d8c18af8
AW
13118@end deftypevr
13119
13120@deftypevr {@code{userdb-configuration} parameter} free-form-args override-fields
13121Override fields from passwd.
13122Defaults to @samp{()}.
13123@end deftypevr
13124
13125@end deftypevr
13126
13127@deftypevr {@code{dovecot-configuration} parameter} plugin-configuration plugin-configuration
13128Plug-in configuration, created by the @code{plugin-configuration}
13129constructor.
13130@end deftypevr
13131
13132@deftypevr {@code{dovecot-configuration} parameter} list-of-namespace-configuration namespaces
13133List of namespaces. Each item in the list is created by the
13134@code{namespace-configuration} constructor.
13135
13136Available @code{namespace-configuration} fields are:
13137
13138@deftypevr {@code{namespace-configuration} parameter} string name
13139Name for this namespace.
13140@end deftypevr
13141
13142@deftypevr {@code{namespace-configuration} parameter} string type
13143Namespace type: @samp{private}, @samp{shared} or @samp{public}.
13144Defaults to @samp{"private"}.
13145@end deftypevr
13146
13147@deftypevr {@code{namespace-configuration} parameter} string separator
13148Hierarchy separator to use. You should use the same separator for
13149all namespaces or some clients get confused. @samp{/} is usually a good
13150one. The default however depends on the underlying mail storage
13151format.
13152Defaults to @samp{""}.
13153@end deftypevr
13154
13155@deftypevr {@code{namespace-configuration} parameter} string prefix
13156Prefix required to access this namespace. This needs to be
13157different for all namespaces. For example @samp{Public/}.
13158Defaults to @samp{""}.
13159@end deftypevr
13160
13161@deftypevr {@code{namespace-configuration} parameter} string location
1068f26b 13162Physical location of the mailbox. This is in the same format as
d8c18af8
AW
13163mail_location, which is also the default for it.
13164Defaults to @samp{""}.
13165@end deftypevr
13166
13167@deftypevr {@code{namespace-configuration} parameter} boolean inbox?
13168There can be only one INBOX, and this setting defines which
13169namespace has it.
13170Defaults to @samp{#f}.
13171@end deftypevr
13172
13173@deftypevr {@code{namespace-configuration} parameter} boolean hidden?
13174If namespace is hidden, it's not advertised to clients via NAMESPACE
13175extension. You'll most likely also want to set @samp{list? #f}. This is mostly
13176useful when converting from another server with different namespaces
13177which you want to deprecate but still keep working. For example you can
13178create hidden namespaces with prefixes @samp{~/mail/}, @samp{~%u/mail/}
13179and @samp{mail/}.
13180Defaults to @samp{#f}.
13181@end deftypevr
13182
13183@deftypevr {@code{namespace-configuration} parameter} boolean list?
1068f26b
AE
13184Show the mailboxes under this namespace with the LIST command. This
13185makes the namespace visible for clients that do not support the NAMESPACE
d8c18af8
AW
13186extension. The special @code{children} value lists child mailboxes, but
13187hides the namespace prefix.
13188Defaults to @samp{#t}.
13189@end deftypevr
13190
13191@deftypevr {@code{namespace-configuration} parameter} boolean subscriptions?
13192Namespace handles its own subscriptions. If set to @code{#f}, the
13193parent namespace handles them. The empty prefix should always have this
1068f26b 13194as @code{#t}).
d8c18af8
AW
13195Defaults to @samp{#t}.
13196@end deftypevr
13197
13198@deftypevr {@code{namespace-configuration} parameter} mailbox-configuration-list mailboxes
13199List of predefined mailboxes in this namespace.
13200Defaults to @samp{()}.
13201
13202Available @code{mailbox-configuration} fields are:
13203
13204@deftypevr {@code{mailbox-configuration} parameter} string name
13205Name for this mailbox.
13206@end deftypevr
13207
13208@deftypevr {@code{mailbox-configuration} parameter} string auto
13209@samp{create} will automatically create this mailbox.
13210@samp{subscribe} will both create and subscribe to the mailbox.
13211Defaults to @samp{"no"}.
13212@end deftypevr
13213
13214@deftypevr {@code{mailbox-configuration} parameter} space-separated-string-list special-use
13215List of IMAP @code{SPECIAL-USE} attributes as specified by RFC 6154.
13216Valid values are @code{\All}, @code{\Archive}, @code{\Drafts},
13217@code{\Flagged}, @code{\Junk}, @code{\Sent}, and @code{\Trash}.
13218Defaults to @samp{()}.
13219@end deftypevr
13220
13221@end deftypevr
13222
13223@end deftypevr
13224
13225@deftypevr {@code{dovecot-configuration} parameter} file-name base-dir
13226Base directory where to store runtime data.
13227Defaults to @samp{"/var/run/dovecot/"}.
13228@end deftypevr
13229
13230@deftypevr {@code{dovecot-configuration} parameter} string login-greeting
13231Greeting message for clients.
13232Defaults to @samp{"Dovecot ready."}.
13233@end deftypevr
13234
13235@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-trusted-networks
13236List of trusted network ranges. Connections from these IPs are
13237allowed to override their IP addresses and ports (for logging and for
13238authentication checks). @samp{disable-plaintext-auth} is also ignored
1068f26b 13239for these networks. Typically you would specify your IMAP proxy servers
d8c18af8
AW
13240here.
13241Defaults to @samp{()}.
13242@end deftypevr
13243
13244@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-access-sockets
13245List of login access check sockets (e.g. tcpwrap).
13246Defaults to @samp{()}.
13247@end deftypevr
13248
13249@deftypevr {@code{dovecot-configuration} parameter} boolean verbose-proctitle?
13250Show more verbose process titles (in ps). Currently shows user name
1068f26b
AE
13251and IP address. Useful for seeing who is actually using the IMAP
13252processes (e.g. shared mailboxes or if the same uid is used for multiple
d8c18af8
AW
13253accounts).
13254Defaults to @samp{#f}.
13255@end deftypevr
13256
13257@deftypevr {@code{dovecot-configuration} parameter} boolean shutdown-clients?
13258Should all processes be killed when Dovecot master process shuts down.
13259Setting this to @code{#f} means that Dovecot can be upgraded without
13260forcing existing client connections to close (although that could also
1068f26b 13261be a problem if the upgrade is e.g. due to a security fix).
d8c18af8
AW
13262Defaults to @samp{#t}.
13263@end deftypevr
13264
13265@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer doveadm-worker-count
13266If non-zero, run mail commands via this many connections to doveadm
13267server, instead of running them directly in the same process.
13268Defaults to @samp{0}.
13269@end deftypevr
13270
13271@deftypevr {@code{dovecot-configuration} parameter} string doveadm-socket-path
13272UNIX socket or host:port used for connecting to doveadm server.
13273Defaults to @samp{"doveadm-server"}.
13274@end deftypevr
13275
13276@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list import-environment
13277List of environment variables that are preserved on Dovecot startup
13278and passed down to all of its child processes. You can also give
13279key=value pairs to always set specific settings.
13280@end deftypevr
13281
13282@deftypevr {@code{dovecot-configuration} parameter} boolean disable-plaintext-auth?
13283Disable LOGIN command and all other plaintext authentications unless
13284SSL/TLS is used (LOGINDISABLED capability). Note that if the remote IP
13285matches the local IP (i.e. you're connecting from the same computer),
13286the connection is considered secure and plaintext authentication is
13287allowed. See also ssl=required setting.
13288Defaults to @samp{#t}.
13289@end deftypevr
13290
13291@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer auth-cache-size
13292Authentication cache size (e.g. @samp{#e10e6}). 0 means it's disabled.
13293Note that bsdauth, PAM and vpopmail require @samp{cache-key} to be set
13294for caching to be used.
13295Defaults to @samp{0}.
13296@end deftypevr
13297
13298@deftypevr {@code{dovecot-configuration} parameter} string auth-cache-ttl
13299Time to live for cached data. After TTL expires the cached record
13300is no longer used, *except* if the main database lookup returns internal
13301failure. We also try to handle password changes automatically: If
13302user's previous authentication was successful, but this one wasn't, the
13303cache isn't used. For now this works only with plaintext
13304authentication.
13305Defaults to @samp{"1 hour"}.
13306@end deftypevr
13307
13308@deftypevr {@code{dovecot-configuration} parameter} string auth-cache-negative-ttl
13309TTL for negative hits (user not found, password mismatch).
133100 disables caching them completely.
13311Defaults to @samp{"1 hour"}.
13312@end deftypevr
13313
13314@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list auth-realms
13315List of realms for SASL authentication mechanisms that need them.
13316You can leave it empty if you don't want to support multiple realms.
13317Many clients simply use the first one listed here, so keep the default
13318realm first.
13319Defaults to @samp{()}.
13320@end deftypevr
13321
13322@deftypevr {@code{dovecot-configuration} parameter} string auth-default-realm
13323Default realm/domain to use if none was specified. This is used for
13324both SASL realms and appending @@domain to username in plaintext
13325logins.
13326Defaults to @samp{""}.
13327@end deftypevr
13328
13329@deftypevr {@code{dovecot-configuration} parameter} string auth-username-chars
13330List of allowed characters in username. If the user-given username
13331contains a character not listed in here, the login automatically fails.
13332This is just an extra check to make sure user can't exploit any
13333potential quote escaping vulnerabilities with SQL/LDAP databases. If
13334you want to allow all characters, set this value to empty.
13335Defaults to @samp{"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@@"}.
13336@end deftypevr
13337
13338@deftypevr {@code{dovecot-configuration} parameter} string auth-username-translation
13339Username character translations before it's looked up from
13340databases. The value contains series of from -> to characters. For
13341example @samp{#@@/@@} means that @samp{#} and @samp{/} characters are
13342translated to @samp{@@}.
13343Defaults to @samp{""}.
13344@end deftypevr
13345
13346@deftypevr {@code{dovecot-configuration} parameter} string auth-username-format
13347Username formatting before it's looked up from databases. You can
13348use the standard variables here, e.g. %Lu would lowercase the username,
13349%n would drop away the domain if it was given, or @samp{%n-AT-%d} would
13350change the @samp{@@} into @samp{-AT-}. This translation is done after
13351@samp{auth-username-translation} changes.
13352Defaults to @samp{"%Lu"}.
13353@end deftypevr
13354
13355@deftypevr {@code{dovecot-configuration} parameter} string auth-master-user-separator
13356If you want to allow master users to log in by specifying the master
13357username within the normal username string (i.e. not using SASL
13358mechanism's support for it), you can specify the separator character
13359here. The format is then <username><separator><master username>.
13360UW-IMAP uses @samp{*} as the separator, so that could be a good
13361choice.
13362Defaults to @samp{""}.
13363@end deftypevr
13364
13365@deftypevr {@code{dovecot-configuration} parameter} string auth-anonymous-username
13366Username to use for users logging in with ANONYMOUS SASL
13367mechanism.
13368Defaults to @samp{"anonymous"}.
13369@end deftypevr
13370
13371@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer auth-worker-max-count
13372Maximum number of dovecot-auth worker processes. They're used to
13373execute blocking passdb and userdb queries (e.g. MySQL and PAM).
13374They're automatically created and destroyed as needed.
13375Defaults to @samp{30}.
13376@end deftypevr
13377
13378@deftypevr {@code{dovecot-configuration} parameter} string auth-gssapi-hostname
13379Host name to use in GSSAPI principal names. The default is to use
13380the name returned by gethostname(). Use @samp{$ALL} (with quotes) to
13381allow all keytab entries.
13382Defaults to @samp{""}.
13383@end deftypevr
13384
13385@deftypevr {@code{dovecot-configuration} parameter} string auth-krb5-keytab
13386Kerberos keytab to use for the GSSAPI mechanism. Will use the
8b499030 13387system default (usually @file{/etc/krb5.keytab}) if not specified. You may
d8c18af8
AW
13388need to change the auth service to run as root to be able to read this
13389file.
13390Defaults to @samp{""}.
13391@end deftypevr
13392
13393@deftypevr {@code{dovecot-configuration} parameter} boolean auth-use-winbind?
13394Do NTLM and GSS-SPNEGO authentication using Samba's winbind daemon
13395and @samp{ntlm-auth} helper.
13396<doc/wiki/Authentication/Mechanisms/Winbind.txt>.
13397Defaults to @samp{#f}.
13398@end deftypevr
13399
13400@deftypevr {@code{dovecot-configuration} parameter} file-name auth-winbind-helper-path
13401Path for Samba's @samp{ntlm-auth} helper binary.
13402Defaults to @samp{"/usr/bin/ntlm_auth"}.
13403@end deftypevr
13404
13405@deftypevr {@code{dovecot-configuration} parameter} string auth-failure-delay
13406Time to delay before replying to failed authentications.
13407Defaults to @samp{"2 secs"}.
13408@end deftypevr
13409
13410@deftypevr {@code{dovecot-configuration} parameter} boolean auth-ssl-require-client-cert?
13411Require a valid SSL client certificate or the authentication
13412fails.
13413Defaults to @samp{#f}.
13414@end deftypevr
13415
13416@deftypevr {@code{dovecot-configuration} parameter} boolean auth-ssl-username-from-cert?
13417Take the username from client's SSL certificate, using
13418@code{X509_NAME_get_text_by_NID()} which returns the subject's DN's
13419CommonName.
13420Defaults to @samp{#f}.
13421@end deftypevr
13422
13423@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list auth-mechanisms
13424List of wanted authentication mechanisms. Supported mechanisms are:
13425@samp{plain}, @samp{login}, @samp{digest-md5}, @samp{cram-md5},
13426@samp{ntlm}, @samp{rpa}, @samp{apop}, @samp{anonymous}, @samp{gssapi},
13427@samp{otp}, @samp{skey}, and @samp{gss-spnego}. NOTE: See also
13428@samp{disable-plaintext-auth} setting.
13429@end deftypevr
13430
13431@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list director-servers
13432List of IPs or hostnames to all director servers, including ourself.
13433Ports can be specified as ip:port. The default port is the same as what
13434director service's @samp{inet-listener} is using.
13435Defaults to @samp{()}.
13436@end deftypevr
13437
13438@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list director-mail-servers
13439List of IPs or hostnames to all backend mail servers. Ranges are
13440allowed too, like 10.0.0.10-10.0.0.30.
13441Defaults to @samp{()}.
13442@end deftypevr
13443
13444@deftypevr {@code{dovecot-configuration} parameter} string director-user-expire
13445How long to redirect users to a specific server after it no longer
13446has any connections.
13447Defaults to @samp{"15 min"}.
13448@end deftypevr
13449
d8c18af8
AW
13450@deftypevr {@code{dovecot-configuration} parameter} string director-username-hash
13451How the username is translated before being hashed. Useful values
13452include %Ln if user can log in with or without @@domain, %Ld if mailboxes
13453are shared within domain.
13454Defaults to @samp{"%Lu"}.
13455@end deftypevr
13456
13457@deftypevr {@code{dovecot-configuration} parameter} string log-path
13458Log file to use for error messages. @samp{syslog} logs to syslog,
13459@samp{/dev/stderr} logs to stderr.
13460Defaults to @samp{"syslog"}.
13461@end deftypevr
13462
13463@deftypevr {@code{dovecot-configuration} parameter} string info-log-path
13464Log file to use for informational messages. Defaults to
13465@samp{log-path}.
13466Defaults to @samp{""}.
13467@end deftypevr
13468
13469@deftypevr {@code{dovecot-configuration} parameter} string debug-log-path
13470Log file to use for debug messages. Defaults to
13471@samp{info-log-path}.
13472Defaults to @samp{""}.
13473@end deftypevr
13474
13475@deftypevr {@code{dovecot-configuration} parameter} string syslog-facility
13476Syslog facility to use if you're logging to syslog. Usually if you
13477don't want to use @samp{mail}, you'll use local0..local7. Also other
13478standard facilities are supported.
13479Defaults to @samp{"mail"}.
13480@end deftypevr
13481
13482@deftypevr {@code{dovecot-configuration} parameter} boolean auth-verbose?
13483Log unsuccessful authentication attempts and the reasons why they
13484failed.
13485Defaults to @samp{#f}.
13486@end deftypevr
13487
13488@deftypevr {@code{dovecot-configuration} parameter} boolean auth-verbose-passwords?
13489In case of password mismatches, log the attempted password. Valid
13490values are no, plain and sha1. sha1 can be useful for detecting brute
13491force password attempts vs. user simply trying the same password over
13492and over again. You can also truncate the value to n chars by appending
13493":n" (e.g. sha1:6).
13494Defaults to @samp{#f}.
13495@end deftypevr
13496
13497@deftypevr {@code{dovecot-configuration} parameter} boolean auth-debug?
13498Even more verbose logging for debugging purposes. Shows for example
13499SQL queries.
13500Defaults to @samp{#f}.
13501@end deftypevr
13502
13503@deftypevr {@code{dovecot-configuration} parameter} boolean auth-debug-passwords?
13504In case of password mismatches, log the passwords and used scheme so
13505the problem can be debugged. Enabling this also enables
13506@samp{auth-debug}.
13507Defaults to @samp{#f}.
13508@end deftypevr
13509
13510@deftypevr {@code{dovecot-configuration} parameter} boolean mail-debug?
13511Enable mail process debugging. This can help you figure out why
13512Dovecot isn't finding your mails.
13513Defaults to @samp{#f}.
13514@end deftypevr
13515
13516@deftypevr {@code{dovecot-configuration} parameter} boolean verbose-ssl?
13517Show protocol level SSL errors.
13518Defaults to @samp{#f}.
13519@end deftypevr
13520
13521@deftypevr {@code{dovecot-configuration} parameter} string log-timestamp
13522Prefix for each line written to log file. % codes are in
13523strftime(3) format.
13524Defaults to @samp{"\"%b %d %H:%M:%S \""}.
13525@end deftypevr
13526
13527@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-log-format-elements
13528List of elements we want to log. The elements which have a
13529non-empty variable value are joined together to form a comma-separated
13530string.
13531@end deftypevr
13532
13533@deftypevr {@code{dovecot-configuration} parameter} string login-log-format
13534Login log format. %s contains @samp{login-log-format-elements}
13535string, %$ contains the data we want to log.
13536Defaults to @samp{"%$: %s"}.
13537@end deftypevr
13538
13539@deftypevr {@code{dovecot-configuration} parameter} string mail-log-prefix
13540Log prefix for mail processes. See doc/wiki/Variables.txt for list
13541of possible variables you can use.
90d8923b 13542Defaults to @samp{"\"%s(%u)<%@{pid@}><%@{session@}>: \""}.
d8c18af8
AW
13543@end deftypevr
13544
13545@deftypevr {@code{dovecot-configuration} parameter} string deliver-log-format
13546Format to use for logging mail deliveries. You can use variables:
13547@table @code
13548@item %$
13549Delivery status message (e.g. @samp{saved to INBOX})
13550@item %m
13551Message-ID
13552@item %s
13553Subject
13554@item %f
13555From address
13556@item %p
13557Physical size
13558@item %w
13559Virtual size.
13560@end table
13561Defaults to @samp{"msgid=%m: %$"}.
13562@end deftypevr
13563
13564@deftypevr {@code{dovecot-configuration} parameter} string mail-location
13565Location for users' mailboxes. The default is empty, which means
13566that Dovecot tries to find the mailboxes automatically. This won't work
13567if the user doesn't yet have any mail, so you should explicitly tell
13568Dovecot the full location.
13569
13570If you're using mbox, giving a path to the INBOX
13571file (e.g. /var/mail/%u) isn't enough. You'll also need to tell Dovecot
13572where the other mailboxes are kept. This is called the "root mail
13573directory", and it must be the first path given in the
13574@samp{mail-location} setting.
13575
13576There are a few special variables you can use, eg.:
13577
13578@table @samp
13579@item %u
13580username
13581@item %n
13582user part in user@@domain, same as %u if there's no domain
13583@item %d
13584domain part in user@@domain, empty if there's no domain
13585@item %h
13586home director
13587@end table
13588
13589See doc/wiki/Variables.txt for full list. Some examples:
13590@table @samp
13591@item maildir:~/Maildir
13592@item mbox:~/mail:INBOX=/var/mail/%u
13593@item mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%
13594@end table
13595Defaults to @samp{""}.
13596@end deftypevr
13597
13598@deftypevr {@code{dovecot-configuration} parameter} string mail-uid
13599System user and group used to access mails. If you use multiple,
13600userdb can override these by returning uid or gid fields. You can use
13601either numbers or names. <doc/wiki/UserIds.txt>.
13602Defaults to @samp{""}.
13603@end deftypevr
13604
13605@deftypevr {@code{dovecot-configuration} parameter} string mail-gid
13606
13607Defaults to @samp{""}.
13608@end deftypevr
13609
13610@deftypevr {@code{dovecot-configuration} parameter} string mail-privileged-group
13611Group to enable temporarily for privileged operations. Currently
13612this is used only with INBOX when either its initial creation or
13613dotlocking fails. Typically this is set to "mail" to give access to
13614/var/mail.
13615Defaults to @samp{""}.
13616@end deftypevr
13617
13618@deftypevr {@code{dovecot-configuration} parameter} string mail-access-groups
13619Grant access to these supplementary groups for mail processes.
13620Typically these are used to set up access to shared mailboxes. Note
13621that it may be dangerous to set these if users can create
13622symlinks (e.g. if "mail" group is set here, ln -s /var/mail ~/mail/var
13623could allow a user to delete others' mailboxes, or ln -s
13624/secret/shared/box ~/mail/mybox would allow reading it).
13625Defaults to @samp{""}.
13626@end deftypevr
13627
13628@deftypevr {@code{dovecot-configuration} parameter} boolean mail-full-filesystem-access?
8f65585b 13629Allow full file system access to clients. There's no access checks
d8c18af8
AW
13630other than what the operating system does for the active UID/GID. It
13631works with both maildir and mboxes, allowing you to prefix mailboxes
13632names with e.g. /path/ or ~user/.
13633Defaults to @samp{#f}.
13634@end deftypevr
13635
13636@deftypevr {@code{dovecot-configuration} parameter} boolean mmap-disable?
13637Don't use mmap() at all. This is required if you store indexes to
8f65585b 13638shared file systems (NFS or clustered file system).
d8c18af8
AW
13639Defaults to @samp{#f}.
13640@end deftypevr
13641
13642@deftypevr {@code{dovecot-configuration} parameter} boolean dotlock-use-excl?
13643Rely on @samp{O_EXCL} to work when creating dotlock files. NFS
13644supports @samp{O_EXCL} since version 3, so this should be safe to use
13645nowadays by default.
13646Defaults to @samp{#t}.
13647@end deftypevr
13648
13649@deftypevr {@code{dovecot-configuration} parameter} string mail-fsync
13650When to use fsync() or fdatasync() calls:
13651@table @code
13652@item optimized
13653Whenever necessary to avoid losing important data
13654@item always
13655Useful with e.g. NFS when write()s are delayed
13656@item never
13657Never use it (best performance, but crashes can lose data).
13658@end table
13659Defaults to @samp{"optimized"}.
13660@end deftypevr
13661
13662@deftypevr {@code{dovecot-configuration} parameter} boolean mail-nfs-storage?
13663Mail storage exists in NFS. Set this to yes to make Dovecot flush
13664NFS caches whenever needed. If you're using only a single mail server
13665this isn't needed.
13666Defaults to @samp{#f}.
13667@end deftypevr
13668
13669@deftypevr {@code{dovecot-configuration} parameter} boolean mail-nfs-index?
13670Mail index files also exist in NFS. Setting this to yes requires
13671@samp{mmap-disable? #t} and @samp{fsync-disable? #f}.
13672Defaults to @samp{#f}.
13673@end deftypevr
13674
13675@deftypevr {@code{dovecot-configuration} parameter} string lock-method
13676Locking method for index files. Alternatives are fcntl, flock and
13677dotlock. Dotlocking uses some tricks which may create more disk I/O
13678than other locking methods. NFS users: flock doesn't work, remember to
13679change @samp{mmap-disable}.
13680Defaults to @samp{"fcntl"}.
13681@end deftypevr
13682
13683@deftypevr {@code{dovecot-configuration} parameter} file-name mail-temp-dir
13684Directory in which LDA/LMTP temporarily stores incoming mails >128
13685kB.
13686Defaults to @samp{"/tmp"}.
13687@end deftypevr
13688
13689@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer first-valid-uid
13690Valid UID range for users. This is mostly to make sure that users can't
13691log in as daemons or other system users. Note that denying root logins is
13692hardcoded to dovecot binary and can't be done even if @samp{first-valid-uid}
13693is set to 0.
13694Defaults to @samp{500}.
13695@end deftypevr
13696
13697@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer last-valid-uid
13698
13699Defaults to @samp{0}.
13700@end deftypevr
13701
13702@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer first-valid-gid
13703Valid GID range for users. Users having non-valid GID as primary group ID
13704aren't allowed to log in. If user belongs to supplementary groups with
13705non-valid GIDs, those groups are not set.
13706Defaults to @samp{1}.
13707@end deftypevr
13708
13709@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer last-valid-gid
13710
13711Defaults to @samp{0}.
13712@end deftypevr
13713
13714@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-max-keyword-length
13715Maximum allowed length for mail keyword name. It's only forced when
13716trying to create new keywords.
13717Defaults to @samp{50}.
13718@end deftypevr
13719
13720@deftypevr {@code{dovecot-configuration} parameter} colon-separated-file-name-list valid-chroot-dirs
13721List of directories under which chrooting is allowed for mail
13722processes (i.e. /var/mail will allow chrooting to /var/mail/foo/bar
13723too). This setting doesn't affect @samp{login-chroot}
13724@samp{mail-chroot} or auth chroot settings. If this setting is empty,
13725"/./" in home dirs are ignored. WARNING: Never add directories here
13726which local users can modify, that may lead to root exploit. Usually
13727this should be done only if you don't allow shell access for users.
13728<doc/wiki/Chrooting.txt>.
13729Defaults to @samp{()}.
13730@end deftypevr
13731
13732@deftypevr {@code{dovecot-configuration} parameter} string mail-chroot
13733Default chroot directory for mail processes. This can be overridden
13734for specific users in user database by giving /./ in user's home
13735directory (e.g. /home/./user chroots into /home). Note that usually
13736there is no real need to do chrooting, Dovecot doesn't allow users to
13737access files outside their mail directory anyway. If your home
13738directories are prefixed with the chroot directory, append "/." to
13739@samp{mail-chroot}. <doc/wiki/Chrooting.txt>.
13740Defaults to @samp{""}.
13741@end deftypevr
13742
13743@deftypevr {@code{dovecot-configuration} parameter} file-name auth-socket-path
13744UNIX socket path to master authentication server to find users.
13745This is used by imap (for shared users) and lda.
13746Defaults to @samp{"/var/run/dovecot/auth-userdb"}.
13747@end deftypevr
13748
13749@deftypevr {@code{dovecot-configuration} parameter} file-name mail-plugin-dir
13750Directory where to look up mail plugins.
13751Defaults to @samp{"/usr/lib/dovecot"}.
13752@end deftypevr
13753
13754@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mail-plugins
13755List of plugins to load for all services. Plugins specific to IMAP,
13756LDA, etc. are added to this list in their own .conf files.
13757Defaults to @samp{()}.
13758@end deftypevr
13759
13760@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-cache-min-mail-count
13761The minimum number of mails in a mailbox before updates are done to
13762cache file. This allows optimizing Dovecot's behavior to do less disk
13763writes at the cost of more disk reads.
13764Defaults to @samp{0}.
13765@end deftypevr
13766
13767@deftypevr {@code{dovecot-configuration} parameter} string mailbox-idle-check-interval
13768When IDLE command is running, mailbox is checked once in a while to
13769see if there are any new mails or other changes. This setting defines
13770the minimum time to wait between those checks. Dovecot can also use
13771dnotify, inotify and kqueue to find out immediately when changes
13772occur.
13773Defaults to @samp{"30 secs"}.
13774@end deftypevr
13775
13776@deftypevr {@code{dovecot-configuration} parameter} boolean mail-save-crlf?
13777Save mails with CR+LF instead of plain LF. This makes sending those
13778mails take less CPU, especially with sendfile() syscall with Linux and
13779FreeBSD. But it also creates a bit more disk I/O which may just make it
13780slower. Also note that if other software reads the mboxes/maildirs,
13781they may handle the extra CRs wrong and cause problems.
13782Defaults to @samp{#f}.
13783@end deftypevr
13784
13785@deftypevr {@code{dovecot-configuration} parameter} boolean maildir-stat-dirs?
13786By default LIST command returns all entries in maildir beginning
13787with a dot. Enabling this option makes Dovecot return only entries
13788which are directories. This is done by stat()ing each entry, so it
13789causes more disk I/O.
13790 (For systems setting struct @samp{dirent->d_type} this check is free
13791and it's done always regardless of this setting).
13792Defaults to @samp{#f}.
13793@end deftypevr
13794
13795@deftypevr {@code{dovecot-configuration} parameter} boolean maildir-copy-with-hardlinks?
13796When copying a message, do it with hard links whenever possible.
13797This makes the performance much better, and it's unlikely to have any
13798side effects.
13799Defaults to @samp{#t}.
13800@end deftypevr
13801
13802@deftypevr {@code{dovecot-configuration} parameter} boolean maildir-very-dirty-syncs?
13803Assume Dovecot is the only MUA accessing Maildir: Scan cur/
13804directory only when its mtime changes unexpectedly or when we can't find
13805the mail otherwise.
13806Defaults to @samp{#f}.
13807@end deftypevr
13808
13809@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mbox-read-locks
13810Which locking methods to use for locking mbox. There are four
13811available:
13812
13813@table @code
13814@item dotlock
13815Create <mailbox>.lock file. This is the oldest and most NFS-safe
13816solution. If you want to use /var/mail/ like directory, the users will
13817need write access to that directory.
13818@item dotlock-try
13819Same as dotlock, but if it fails because of permissions or because there
13820isn't enough disk space, just skip it.
13821@item fcntl
13822Use this if possible. Works with NFS too if lockd is used.
13823@item flock
a01ad638 13824May not exist in all systems. Doesn't work with NFS.
d8c18af8
AW
13825@item lockf
13826May not exist in all systems. Doesn't work with NFS.
13827@end table
13828
13829You can use multiple locking methods; if you do the order they're declared
13830in is important to avoid deadlocks if other MTAs/MUAs are using multiple
13831locking methods as well. Some operating systems don't allow using some of
13832them simultaneously.
13833@end deftypevr
13834
13835@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mbox-write-locks
13836
13837@end deftypevr
13838
13839@deftypevr {@code{dovecot-configuration} parameter} string mbox-lock-timeout
13840Maximum time to wait for lock (all of them) before aborting.
13841Defaults to @samp{"5 mins"}.
13842@end deftypevr
13843
13844@deftypevr {@code{dovecot-configuration} parameter} string mbox-dotlock-change-timeout
13845If dotlock exists but the mailbox isn't modified in any way,
13846override the lock file after this much time.
13847Defaults to @samp{"2 mins"}.
13848@end deftypevr
13849
13850@deftypevr {@code{dovecot-configuration} parameter} boolean mbox-dirty-syncs?
13851When mbox changes unexpectedly we have to fully read it to find out
13852what changed. If the mbox is large this can take a long time. Since
13853the change is usually just a newly appended mail, it'd be faster to
13854simply read the new mails. If this setting is enabled, Dovecot does
13855this but still safely fallbacks to re-reading the whole mbox file
13856whenever something in mbox isn't how it's expected to be. The only real
13857downside to this setting is that if some other MUA changes message
13858flags, Dovecot doesn't notice it immediately. Note that a full sync is
13859done with SELECT, EXAMINE, EXPUNGE and CHECK commands.
13860Defaults to @samp{#t}.
13861@end deftypevr
13862
13863@deftypevr {@code{dovecot-configuration} parameter} boolean mbox-very-dirty-syncs?
13864Like @samp{mbox-dirty-syncs}, but don't do full syncs even with SELECT,
13865EXAMINE, EXPUNGE or CHECK commands. If this is set,
13866@samp{mbox-dirty-syncs} is ignored.
13867Defaults to @samp{#f}.
13868@end deftypevr
13869
13870@deftypevr {@code{dovecot-configuration} parameter} boolean mbox-lazy-writes?
13871Delay writing mbox headers until doing a full write sync (EXPUNGE
13872and CHECK commands and when closing the mailbox). This is especially
13873useful for POP3 where clients often delete all mails. The downside is
13874that our changes aren't immediately visible to other MUAs.
13875Defaults to @samp{#t}.
13876@end deftypevr
13877
13878@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mbox-min-index-size
13879If mbox size is smaller than this (e.g. 100k), don't write index
13880files. If an index file already exists it's still read, just not
13881updated.
13882Defaults to @samp{0}.
13883@end deftypevr
13884
13885@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mdbox-rotate-size
13886Maximum dbox file size until it's rotated.
28c03b45 13887Defaults to @samp{10000000}.
d8c18af8
AW
13888@end deftypevr
13889
13890@deftypevr {@code{dovecot-configuration} parameter} string mdbox-rotate-interval
13891Maximum dbox file age until it's rotated. Typically in days. Day
13892begins from midnight, so 1d = today, 2d = yesterday, etc. 0 = check
13893disabled.
13894Defaults to @samp{"1d"}.
13895@end deftypevr
13896
13897@deftypevr {@code{dovecot-configuration} parameter} boolean mdbox-preallocate-space?
13898When creating new mdbox files, immediately preallocate their size to
13899@samp{mdbox-rotate-size}. This setting currently works only in Linux
8f65585b 13900with some file systems (ext4, xfs).
d8c18af8
AW
13901Defaults to @samp{#f}.
13902@end deftypevr
13903
13904@deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-dir
13905sdbox and mdbox support saving mail attachments to external files,
13906which also allows single instance storage for them. Other backends
13907don't support this for now.
13908
13909WARNING: This feature hasn't been tested much yet. Use at your own risk.
13910
13911Directory root where to store mail attachments. Disabled, if empty.
13912Defaults to @samp{""}.
13913@end deftypevr
13914
13915@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-attachment-min-size
13916Attachments smaller than this aren't saved externally. It's also
13917possible to write a plugin to disable saving specific attachments
13918externally.
13919Defaults to @samp{128000}.
13920@end deftypevr
13921
13922@deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-fs
8f65585b 13923File system backend to use for saving attachments:
d8c18af8
AW
13924@table @code
13925@item posix
13926No SiS done by Dovecot (but this might help FS's own deduplication)
13927@item sis posix
13928SiS with immediate byte-by-byte comparison during saving
13929@item sis-queue posix
13930SiS with delayed comparison and deduplication.
13931@end table
13932Defaults to @samp{"sis posix"}.
13933@end deftypevr
13934
13935@deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-hash
13936Hash format to use in attachment filenames. You can add any text and
13937variables: @code{%@{md4@}}, @code{%@{md5@}}, @code{%@{sha1@}},
13938@code{%@{sha256@}}, @code{%@{sha512@}}, @code{%@{size@}}. Variables can be
13939truncated, e.g. @code{%@{sha256:80@}} returns only first 80 bits.
13940Defaults to @samp{"%@{sha1@}"}.
13941@end deftypevr
13942
13943@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-process-limit
13944
13945Defaults to @samp{100}.
13946@end deftypevr
13947
13948@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-client-limit
13949
13950Defaults to @samp{1000}.
13951@end deftypevr
13952
13953@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-vsz-limit
13954Default VSZ (virtual memory size) limit for service processes.
13955This is mainly intended to catch and kill processes that leak memory
13956before they eat up everything.
13957Defaults to @samp{256000000}.
13958@end deftypevr
13959
13960@deftypevr {@code{dovecot-configuration} parameter} string default-login-user
13961Login user is internally used by login processes. This is the most
13962untrusted user in Dovecot system. It shouldn't have access to anything
13963at all.
13964Defaults to @samp{"dovenull"}.
13965@end deftypevr
13966
13967@deftypevr {@code{dovecot-configuration} parameter} string default-internal-user
13968Internal user is used by unprivileged processes. It should be
13969separate from login user, so that login processes can't disturb other
13970processes.
13971Defaults to @samp{"dovecot"}.
13972@end deftypevr
13973
13974@deftypevr {@code{dovecot-configuration} parameter} string ssl?
13975SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>.
13976Defaults to @samp{"required"}.
13977@end deftypevr
13978
13979@deftypevr {@code{dovecot-configuration} parameter} string ssl-cert
13980PEM encoded X.509 SSL/TLS certificate (public key).
13981Defaults to @samp{"</etc/dovecot/default.pem"}.
13982@end deftypevr
13983
13984@deftypevr {@code{dovecot-configuration} parameter} string ssl-key
13985PEM encoded SSL/TLS private key. The key is opened before
13986dropping root privileges, so keep the key file unreadable by anyone but
13987root.
13988Defaults to @samp{"</etc/dovecot/private/default.pem"}.
13989@end deftypevr
13990
13991@deftypevr {@code{dovecot-configuration} parameter} string ssl-key-password
13992If key file is password protected, give the password here.
13993Alternatively give it when starting dovecot with -p parameter. Since
13994this file is often world-readable, you may want to place this setting
13995instead to a different.
13996Defaults to @samp{""}.
13997@end deftypevr
13998
13999@deftypevr {@code{dovecot-configuration} parameter} string ssl-ca
14000PEM encoded trusted certificate authority. Set this only if you
14001intend to use @samp{ssl-verify-client-cert? #t}. The file should
14002contain the CA certificate(s) followed by the matching
14003CRL(s). (e.g. @samp{ssl-ca </etc/ssl/certs/ca.pem}).
14004Defaults to @samp{""}.
14005@end deftypevr
14006
14007@deftypevr {@code{dovecot-configuration} parameter} boolean ssl-require-crl?
14008Require that CRL check succeeds for client certificates.
14009Defaults to @samp{#t}.
14010@end deftypevr
14011
14012@deftypevr {@code{dovecot-configuration} parameter} boolean ssl-verify-client-cert?
14013Request client to send a certificate. If you also want to require
14014it, set @samp{auth-ssl-require-client-cert? #t} in auth section.
14015Defaults to @samp{#f}.
14016@end deftypevr
14017
14018@deftypevr {@code{dovecot-configuration} parameter} string ssl-cert-username-field
14019Which field from certificate to use for username. commonName and
14020x500UniqueIdentifier are the usual choices. You'll also need to set
14021@samp{auth-ssl-username-from-cert? #t}.
14022Defaults to @samp{"commonName"}.
14023@end deftypevr
14024
28c03b45
TGR
14025@deftypevr {@code{dovecot-configuration} parameter} string ssl-min-protocol
14026Minimum SSL protocol version to accept.
14027Defaults to @samp{"TLSv1"}.
d8c18af8
AW
14028@end deftypevr
14029
14030@deftypevr {@code{dovecot-configuration} parameter} string ssl-cipher-list
14031SSL ciphers to use.
28c03b45 14032Defaults to @samp{"ALL:!kRSA:!SRP:!kDHd:!DSS:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!RC4:!ADH:!LOW@@STRENGTH"}.
d8c18af8
AW
14033@end deftypevr
14034
14035@deftypevr {@code{dovecot-configuration} parameter} string ssl-crypto-device
14036SSL crypto device to use, for valid values run "openssl engine".
14037Defaults to @samp{""}.
14038@end deftypevr
14039
14040@deftypevr {@code{dovecot-configuration} parameter} string postmaster-address
14041Address to use when sending rejection mails.
66329c23
AW
14042%d expands to recipient domain.
14043Defaults to @samp{"postmaster@@%d"}.
d8c18af8
AW
14044@end deftypevr
14045
14046@deftypevr {@code{dovecot-configuration} parameter} string hostname
14047Hostname to use in various parts of sent mails (e.g. in Message-Id)
14048and in LMTP replies. Default is the system's real hostname@@domain.
14049Defaults to @samp{""}.
14050@end deftypevr
14051
14052@deftypevr {@code{dovecot-configuration} parameter} boolean quota-full-tempfail?
14053If user is over quota, return with temporary failure instead of
14054bouncing the mail.
14055Defaults to @samp{#f}.
14056@end deftypevr
14057
14058@deftypevr {@code{dovecot-configuration} parameter} file-name sendmail-path
14059Binary to use for sending mails.
14060Defaults to @samp{"/usr/sbin/sendmail"}.
14061@end deftypevr
14062
14063@deftypevr {@code{dovecot-configuration} parameter} string submission-host
14064If non-empty, send mails via this SMTP host[:port] instead of
14065sendmail.
14066Defaults to @samp{""}.
14067@end deftypevr
14068
14069@deftypevr {@code{dovecot-configuration} parameter} string rejection-subject
14070Subject: header to use for rejection mails. You can use the same
14071variables as for @samp{rejection-reason} below.
14072Defaults to @samp{"Rejected: %s"}.
14073@end deftypevr
14074
14075@deftypevr {@code{dovecot-configuration} parameter} string rejection-reason
14076Human readable error message for rejection mails. You can use
14077variables:
14078
14079@table @code
14080@item %n
14081CRLF
14082@item %r
14083reason
14084@item %s
14085original subject
14086@item %t
14087recipient
14088@end table
14089Defaults to @samp{"Your message to <%t> was automatically rejected:%n%r"}.
14090@end deftypevr
14091
14092@deftypevr {@code{dovecot-configuration} parameter} string recipient-delimiter
14093Delimiter character between local-part and detail in email
14094address.
14095Defaults to @samp{"+"}.
14096@end deftypevr
14097
14098@deftypevr {@code{dovecot-configuration} parameter} string lda-original-recipient-header
14099Header where the original recipient address (SMTP's RCPT TO:
14100address) is taken from if not available elsewhere. With dovecot-lda -a
14101parameter overrides this. A commonly used header for this is
14102X-Original-To.
14103Defaults to @samp{""}.
14104@end deftypevr
14105
14106@deftypevr {@code{dovecot-configuration} parameter} boolean lda-mailbox-autocreate?
14107Should saving a mail to a nonexistent mailbox automatically create
14108it?.
14109Defaults to @samp{#f}.
14110@end deftypevr
14111
14112@deftypevr {@code{dovecot-configuration} parameter} boolean lda-mailbox-autosubscribe?
14113Should automatically created mailboxes be also automatically
14114subscribed?.
14115Defaults to @samp{#f}.
14116@end deftypevr
14117
14118@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer imap-max-line-length
14119Maximum IMAP command line length. Some clients generate very long
14120command lines with huge mailboxes, so you may need to raise this if you
14121get "Too long argument" or "IMAP command line too large" errors
14122often.
14123Defaults to @samp{64000}.
14124@end deftypevr
14125
14126@deftypevr {@code{dovecot-configuration} parameter} string imap-logout-format
14127IMAP logout format string:
14128@table @code
14129@item %i
14130total number of bytes read from client
14131@item %o
14132total number of bytes sent to client.
14133@end table
28c03b45 14134See @file{doc/wiki/Variables.txt} for a list of all the variables you can use.
90d8923b 14135Defaults to @samp{"in=%i out=%o deleted=%@{deleted@} expunged=%@{expunged@} trashed=%@{trashed@} hdr_count=%@{fetch_hdr_count@} hdr_bytes=%@{fetch_hdr_bytes@} body_count=%@{fetch_body_count@} body_bytes=%@{fetch_body_bytes@}"}.
d8c18af8
AW
14136@end deftypevr
14137
14138@deftypevr {@code{dovecot-configuration} parameter} string imap-capability
14139Override the IMAP CAPABILITY response. If the value begins with '+',
14140add the given capabilities on top of the defaults (e.g. +XFOO XBAR).
14141Defaults to @samp{""}.
14142@end deftypevr
14143
14144@deftypevr {@code{dovecot-configuration} parameter} string imap-idle-notify-interval
14145How long to wait between "OK Still here" notifications when client
14146is IDLEing.
14147Defaults to @samp{"2 mins"}.
14148@end deftypevr
14149
14150@deftypevr {@code{dovecot-configuration} parameter} string imap-id-send
14151ID field names and values to send to clients. Using * as the value
14152makes Dovecot use the default value. The following fields have default
14153values currently: name, version, os, os-version, support-url,
14154support-email.
14155Defaults to @samp{""}.
14156@end deftypevr
14157
14158@deftypevr {@code{dovecot-configuration} parameter} string imap-id-log
14159ID fields sent by client to log. * means everything.
14160Defaults to @samp{""}.
14161@end deftypevr
14162
14163@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list imap-client-workarounds
14164Workarounds for various client bugs:
14165
14166@table @code
14167@item delay-newmail
14168Send EXISTS/RECENT new mail notifications only when replying to NOOP and
14169CHECK commands. Some clients ignore them otherwise, for example OSX
14170Mail (<v2.1). Outlook Express breaks more badly though, without this it
14171may show user "Message no longer in server" errors. Note that OE6
14172still breaks even with this workaround if synchronization is set to
14173"Headers Only".
14174
14175@item tb-extra-mailbox-sep
14176Thunderbird gets somehow confused with LAYOUT=fs (mbox and dbox) and
14177adds extra @samp{/} suffixes to mailbox names. This option causes Dovecot to
14178ignore the extra @samp{/} instead of treating it as invalid mailbox name.
14179
14180@item tb-lsub-flags
14181Show \Noselect flags for LSUB replies with LAYOUT=fs (e.g. mbox).
14182This makes Thunderbird realize they aren't selectable and show them
14183greyed out, instead of only later giving "not selectable" popup error.
14184@end table
14185Defaults to @samp{()}.
14186@end deftypevr
14187
14188@deftypevr {@code{dovecot-configuration} parameter} string imap-urlauth-host
14189Host allowed in URLAUTH URLs sent by client. "*" allows all.
14190Defaults to @samp{""}.
14191@end deftypevr
14192
14193
14194Whew! Lots of configuration options. The nice thing about it though is
14195that GuixSD has a complete interface to Dovecot's configuration
14196language. This allows not only a nice way to declare configurations,
14197but also offers reflective capabilities as well: users can write code to
14198inspect and transform configurations from within Scheme.
14199
14200However, it could be that you just want to get a @code{dovecot.conf} up
14201and running. In that case, you can pass an
7414de0a 14202@code{opaque-dovecot-configuration} as the @code{#:config} parameter to
d8c18af8
AW
14203@code{dovecot-service}. As its name indicates, an opaque configuration
14204does not have easy reflective capabilities.
14205
14206Available @code{opaque-dovecot-configuration} fields are:
14207
14208@deftypevr {@code{opaque-dovecot-configuration} parameter} package dovecot
14209The dovecot package.
14210@end deftypevr
14211
14212@deftypevr {@code{opaque-dovecot-configuration} parameter} string string
14213The contents of the @code{dovecot.conf}, as a string.
14214@end deftypevr
14215
14216For example, if your @code{dovecot.conf} is just the empty string, you
14217could instantiate a dovecot service like this:
14218
14219@example
14220(dovecot-service #:config
14221 (opaque-dovecot-configuration
14222 (string "")))
14223@end example
14224
f88371e8
SB
14225@subsubheading OpenSMTPD Service
14226
14227@deffn {Scheme Variable} opensmtpd-service-type
14228This is the type of the @uref{https://www.opensmtpd.org, OpenSMTPD}
14229service, whose value should be an @code{opensmtpd-configuration} object
14230as in this example:
14231
14232@example
14233(service opensmtpd-service-type
14234 (opensmtpd-configuration
14235 (config-file (local-file "./my-smtpd.conf"))))
14236@end example
14237@end deffn
14238
14239@deftp {Data Type} opensmtpd-configuration
9fc221b5 14240Data type representing the configuration of opensmtpd.
f88371e8
SB
14241
14242@table @asis
14243@item @code{package} (default: @var{opensmtpd})
14244Package object of the OpenSMTPD SMTP server.
14245
14246@item @code{config-file} (default: @var{%default-opensmtpd-file})
14247File-like object of the OpenSMTPD configuration file to use. By default
14248it listens on the loopback network interface, and allows for mail from
14249users and daemons on the local machine, as well as permitting email to
14250remote servers. Run @command{man smtpd.conf} for more information.
14251
14252@end table
14253@end deftp
859e367d 14254
82ccc499
CZ
14255@subsubheading Exim Service
14256
63422bbb
CZ
14257@cindex mail transfer agent (MTA)
14258@cindex MTA (mail transfer agent)
14259@cindex SMTP
14260
82ccc499 14261@deffn {Scheme Variable} exim-service-type
63422bbb
CZ
14262This is the type of the @uref{https://exim.org, Exim} mail transfer
14263agent (MTA), whose value should be an @code{exim-configuration} object
14264as in this example:
82ccc499
CZ
14265
14266@example
14267(service exim-service-type
14268 (exim-configuration
63422bbb 14269 (config-file (local-file "./my-exim.conf"))))
82ccc499
CZ
14270@end example
14271@end deffn
14272
63422bbb
CZ
14273In order to use an @code{exim-service-type} service you must also have a
14274@code{mail-aliases-service-type} service present in your
14275@code{operating-system} (even if it has no aliases).
14276
82ccc499
CZ
14277@deftp {Data Type} exim-configuration
14278Data type representing the configuration of exim.
14279
14280@table @asis
14281@item @code{package} (default: @var{exim})
14282Package object of the Exim server.
14283
14284@item @code{config-file} (default: @code{#f})
14285File-like object of the Exim configuration file to use. If its value is
14286@code{#f} then use the default configuration file from the package
14287provided in @code{package}. The resulting configuration file is loaded
14288after setting the @code{exim_user} and @code{exim_group} configuration
14289variables.
14290
82ccc499
CZ
14291@end table
14292@end deftp
14293
63422bbb
CZ
14294@subsubheading Mail Aliases Service
14295
14296@cindex email aliases
14297@cindex aliases, for email addresses
14298
14299@deffn {Scheme Variable} mail-aliases-service-type
14300This is the type of the service which provides @code{/etc/aliases},
14301specifying how to deliver mail to users on this system.
14302
14303@example
14304(service mail-aliases-service-type
14305 '(("postmaster" "bob")
14306 ("bob" "bob@@example.com" "bob@@example2.com")))
14307@end example
14308@end deffn
14309
14310The configuration for a @code{mail-aliases-service-type} service is an
14311association list denoting how to deliver mail that comes to this
14312system. Each entry is of the form @code{(alias addresses ...)}, with
14313@code{alias} specifying the local alias and @code{addresses} specifying
14314where to deliver this user's mail.
14315
14316The aliases aren't required to exist as users on the local system. In
14317the above example, there doesn't need to be a @code{postmaster} entry in
14318the @code{operating-system}'s @code{user-accounts} in order to deliver
14319the @code{postmaster} mail to @code{bob} (which subsequently would
14320deliver mail to @code{bob@@example.com} and @code{bob@@example2.com}).
14321
78cef99b
CL
14322@node Messaging Services
14323@subsubsection Messaging Services
14324
14325@cindex messaging
14326@cindex jabber
14327@cindex XMPP
14328The @code{(gnu services messaging)} module provides Guix service
14329definitions for messaging services: currently only Prosody is supported.
14330
14331@subsubheading Prosody Service
14332
14333@deffn {Scheme Variable} prosody-service-type
7459cb93 14334This is the type for the @uref{https://prosody.im, Prosody XMPP
78cef99b
CL
14335communication server}. Its value must be a @code{prosody-configuration}
14336record as in this example:
14337
14338@example
14339(service prosody-service-type
14340 (prosody-configuration
5cc6dcd7 14341 (modules-enabled (cons "groups" "mam" %default-modules-enabled))
78cef99b
CL
14342 (int-components
14343 (list
14344 (int-component-configuration
14345 (hostname "conference.example.net")
14346 (plugin "muc")
14347 (mod-muc (mod-muc-configuration)))))
14348 (virtualhosts
14349 (list
14350 (virtualhost-configuration
14351 (domain "example.net"))))))
14352@end example
14353
14354See below for details about @code{prosody-configuration}.
14355
14356@end deffn
14357
14358By default, Prosody does not need much configuration. Only one
14359@code{virtualhosts} field is needed: it specifies the domain you wish
14360Prosody to serve.
14361
5cc6dcd7
CL
14362You can perform various sanity checks on the generated configuration
14363with the @code{prosodyctl check} command.
14364
14365Prosodyctl will also help you to import certificates from the
14366@code{letsencrypt} directory so that the @code{prosody} user can access
14367them. See @url{https://prosody.im/doc/letsencrypt}.
78cef99b
CL
14368
14369@example
5cc6dcd7 14370prosodyctl --root cert import /etc/letsencrypt/live
78cef99b
CL
14371@end example
14372
14373The available configuration parameters follow. Each parameter
14374definition is preceded by its type; for example, @samp{string-list foo}
14375indicates that the @code{foo} parameter should be specified as a list of
14376strings. Types starting with @code{maybe-} denote parameters that won't
14377show up in @code{prosody.cfg.lua} when their value is @code{'disabled}.
14378
14379There is also a way to specify the configuration as a string, if you
14380have an old @code{prosody.cfg.lua} file that you want to port over from
14381some other system; see the end for more details.
14382
bdcf0e6f
CL
14383The @code{file-object} type designates either a file-like object
14384(@pxref{G-Expressions, file-like objects}) or a file name.
14385
78cef99b
CL
14386@c The following documentation was initially generated by
14387@c (generate-documentation) in (gnu services messaging). Manually maintained
14388@c documentation is better, so we shouldn't hesitate to edit below as
14389@c needed. However if the change you want to make to this documentation
14390@c can be done in an automated way, it's probably easier to change
14391@c (generate-documentation) than to make it below and have to deal with
14392@c the churn as Prosody updates.
14393
14394Available @code{prosody-configuration} fields are:
14395
14396@deftypevr {@code{prosody-configuration} parameter} package prosody
14397The Prosody package.
14398@end deftypevr
14399
14400@deftypevr {@code{prosody-configuration} parameter} file-name data-path
14401Location of the Prosody data storage directory. See
7459cb93 14402@url{https://prosody.im/doc/configure}.
78cef99b
CL
14403Defaults to @samp{"/var/lib/prosody"}.
14404@end deftypevr
14405
bdcf0e6f 14406@deftypevr {@code{prosody-configuration} parameter} file-object-list plugin-paths
78cef99b 14407Additional plugin directories. They are searched in all the specified
7459cb93 14408paths in order. See @url{https://prosody.im/doc/plugins_directory}.
78cef99b
CL
14409Defaults to @samp{()}.
14410@end deftypevr
14411
5cc6dcd7
CL
14412@deftypevr {@code{prosody-configuration} parameter} file-name certificates
14413Every virtual host and component needs a certificate so that clients and
14414servers can securely verify its identity. Prosody will automatically load
14415certificates/keys from the directory specified here.
14416Defaults to @samp{"/etc/prosody/certs"}.
14417@end deftypevr
14418
78cef99b
CL
14419@deftypevr {@code{prosody-configuration} parameter} string-list admins
14420This is a list of accounts that are admins for the server. Note that you
7459cb93
TGR
14421must create the accounts separately. See @url{https://prosody.im/doc/admins} and
14422@url{https://prosody.im/doc/creating_accounts}.
78cef99b
CL
14423Example: @code{(admins '("user1@@example.com" "user2@@example.net"))}
14424Defaults to @samp{()}.
14425@end deftypevr
14426
14427@deftypevr {@code{prosody-configuration} parameter} boolean use-libevent?
14428Enable use of libevent for better performance under high load. See
7459cb93 14429@url{https://prosody.im/doc/libevent}.
78cef99b
CL
14430Defaults to @samp{#f}.
14431@end deftypevr
14432
14433@deftypevr {@code{prosody-configuration} parameter} module-list modules-enabled
14434This is the list of modules Prosody will load on startup. It looks for
14435@code{mod_modulename.lua} in the plugins folder, so make sure that exists too.
19ff1f26 14436Documentation on modules can be found at:
7459cb93 14437@url{https://prosody.im/doc/modules}.
19ff1f26 14438Defaults to @samp{("roster" "saslauth" "tls" "dialback" "disco" "carbons" "private" "blocklist" "vcard" "version" "uptime" "time" "ping" "pep" "register" "admin_adhoc")}.
78cef99b
CL
14439@end deftypevr
14440
14441@deftypevr {@code{prosody-configuration} parameter} string-list modules-disabled
14442@samp{"offline"}, @samp{"c2s"} and @samp{"s2s"} are auto-loaded, but
14443should you want to disable them then add them to this list.
14444Defaults to @samp{()}.
14445@end deftypevr
14446
bdcf0e6f 14447@deftypevr {@code{prosody-configuration} parameter} file-object groups-file
78cef99b
CL
14448Path to a text file where the shared groups are defined. If this path is
14449empty then @samp{mod_groups} does nothing. See
7459cb93 14450@url{https://prosody.im/doc/modules/mod_groups}.
78cef99b
CL
14451Defaults to @samp{"/var/lib/prosody/sharedgroups.txt"}.
14452@end deftypevr
14453
14454@deftypevr {@code{prosody-configuration} parameter} boolean allow-registration?
14455Disable account creation by default, for security. See
7459cb93 14456@url{https://prosody.im/doc/creating_accounts}.
78cef99b
CL
14457Defaults to @samp{#f}.
14458@end deftypevr
14459
14460@deftypevr {@code{prosody-configuration} parameter} maybe-ssl-configuration ssl
14461These are the SSL/TLS-related settings. Most of them are disabled so to
14462use Prosody's defaults. If you do not completely understand these options, do
14463not add them to your config, it is easy to lower the security of your server
7459cb93 14464using them. See @url{https://prosody.im/doc/advanced_ssl_config}.
78cef99b
CL
14465
14466Available @code{ssl-configuration} fields are:
14467
14468@deftypevr {@code{ssl-configuration} parameter} maybe-string protocol
14469This determines what handshake to use.
14470@end deftypevr
14471
5cc6dcd7
CL
14472@deftypevr {@code{ssl-configuration} parameter} maybe-file-name key
14473Path to your private key file.
78cef99b
CL
14474@end deftypevr
14475
5cc6dcd7
CL
14476@deftypevr {@code{ssl-configuration} parameter} maybe-file-name certificate
14477Path to your certificate file.
78cef99b
CL
14478@end deftypevr
14479
bdcf0e6f 14480@deftypevr {@code{ssl-configuration} parameter} file-object capath
78cef99b
CL
14481Path to directory containing root certificates that you wish Prosody to
14482trust when verifying the certificates of remote servers.
14483Defaults to @samp{"/etc/ssl/certs"}.
14484@end deftypevr
14485
bdcf0e6f 14486@deftypevr {@code{ssl-configuration} parameter} maybe-file-object cafile
78cef99b
CL
14487Path to a file containing root certificates that you wish Prosody to trust.
14488Similar to @code{capath} but with all certificates concatenated together.
14489@end deftypevr
14490
14491@deftypevr {@code{ssl-configuration} parameter} maybe-string-list verify
14492A list of verification options (these mostly map to OpenSSL's
14493@code{set_verify()} flags).
14494@end deftypevr
14495
14496@deftypevr {@code{ssl-configuration} parameter} maybe-string-list options
14497A list of general options relating to SSL/TLS. These map to OpenSSL's
14498@code{set_options()}. For a full list of options available in LuaSec, see the
14499LuaSec source.
14500@end deftypevr
14501
14502@deftypevr {@code{ssl-configuration} parameter} maybe-non-negative-integer depth
14503How long a chain of certificate authorities to check when looking for a
14504trusted root certificate.
14505@end deftypevr
14506
14507@deftypevr {@code{ssl-configuration} parameter} maybe-string ciphers
14508An OpenSSL cipher string. This selects what ciphers Prosody will offer to
14509clients, and in what order.
14510@end deftypevr
14511
14512@deftypevr {@code{ssl-configuration} parameter} maybe-file-name dhparam
14513A path to a file containing parameters for Diffie-Hellman key exchange. You
14514can create such a file with:
14515@code{openssl dhparam -out /etc/prosody/certs/dh-2048.pem 2048}
14516@end deftypevr
14517
14518@deftypevr {@code{ssl-configuration} parameter} maybe-string curve
14519Curve for Elliptic curve Diffie-Hellman. Prosody's default is
14520@samp{"secp384r1"}.
14521@end deftypevr
14522
14523@deftypevr {@code{ssl-configuration} parameter} maybe-string-list verifyext
14524A list of "extra" verification options.
14525@end deftypevr
14526
14527@deftypevr {@code{ssl-configuration} parameter} maybe-string password
14528Password for encrypted private keys.
14529@end deftypevr
14530
14531@end deftypevr
14532
14533@deftypevr {@code{prosody-configuration} parameter} boolean c2s-require-encryption?
14534Whether to force all client-to-server connections to be encrypted or not.
7459cb93 14535See @url{https://prosody.im/doc/modules/mod_tls}.
78cef99b
CL
14536Defaults to @samp{#f}.
14537@end deftypevr
14538
e30038da
CL
14539@deftypevr {@code{prosody-configuration} parameter} string-list disable-sasl-mechanisms
14540Set of mechanisms that will never be offered. See
14541@url{https://prosody.im/doc/modules/mod_saslauth}.
19ff1f26 14542Defaults to @samp{("DIGEST-MD5")}.
e30038da
CL
14543@end deftypevr
14544
78cef99b
CL
14545@deftypevr {@code{prosody-configuration} parameter} boolean s2s-require-encryption?
14546Whether to force all server-to-server connections to be encrypted or not.
7459cb93 14547See @url{https://prosody.im/doc/modules/mod_tls}.
78cef99b
CL
14548Defaults to @samp{#f}.
14549@end deftypevr
14550
14551@deftypevr {@code{prosody-configuration} parameter} boolean s2s-secure-auth?
14552Whether to require encryption and certificate authentication. This
14553provides ideal security, but requires servers you communicate with to support
14554encryption AND present valid, trusted certificates. See
7459cb93 14555@url{https://prosody.im/doc/s2s#security}.
78cef99b
CL
14556Defaults to @samp{#f}.
14557@end deftypevr
14558
14559@deftypevr {@code{prosody-configuration} parameter} string-list s2s-insecure-domains
14560Many servers don't support encryption or have invalid or self-signed
14561certificates. You can list domains here that will not be required to
14562authenticate using certificates. They will be authenticated using DNS. See
7459cb93 14563@url{https://prosody.im/doc/s2s#security}.
78cef99b
CL
14564Defaults to @samp{()}.
14565@end deftypevr
14566
14567@deftypevr {@code{prosody-configuration} parameter} string-list s2s-secure-domains
14568Even if you leave @code{s2s-secure-auth?} disabled, you can still require
14569valid certificates for some domains by specifying a list here. See
7459cb93 14570@url{https://prosody.im/doc/s2s#security}.
78cef99b
CL
14571Defaults to @samp{()}.
14572@end deftypevr
14573
14574@deftypevr {@code{prosody-configuration} parameter} string authentication
14575Select the authentication backend to use. The default provider stores
14576passwords in plaintext and uses Prosody's configured data storage to store the
14577authentication data. If you do not trust your server please see
7459cb93 14578@url{https://prosody.im/doc/modules/mod_auth_internal_hashed} for information
78cef99b 14579about using the hashed backend. See also
7459cb93 14580@url{https://prosody.im/doc/authentication}
78cef99b
CL
14581Defaults to @samp{"internal_plain"}.
14582@end deftypevr
14583
14584@deftypevr {@code{prosody-configuration} parameter} maybe-string log
14585Set logging options. Advanced logging configuration is not yet supported
7459cb93 14586by the GuixSD Prosody Service. See @url{https://prosody.im/doc/logging}.
78cef99b
CL
14587Defaults to @samp{"*syslog"}.
14588@end deftypevr
14589
14590@deftypevr {@code{prosody-configuration} parameter} file-name pidfile
7459cb93 14591File to write pid in. See @url{https://prosody.im/doc/modules/mod_posix}.
78cef99b
CL
14592Defaults to @samp{"/var/run/prosody/prosody.pid"}.
14593@end deftypevr
14594
1f6f1a07
CL
14595@deftypevr {@code{prosody-configuration} parameter} maybe-non-negative-integer http-max-content-size
14596Maximum allowed size of the HTTP body (in bytes).
14597@end deftypevr
14598
f59de6be
CL
14599@deftypevr {@code{prosody-configuration} parameter} maybe-string http-external-url
14600Some modules expose their own URL in various ways. This URL is built
14601from the protocol, host and port used. If Prosody sits behind a proxy, the
14602public URL will be @code{http-external-url} instead. See
14603@url{https://prosody.im/doc/http#external_url}.
14604@end deftypevr
14605
78cef99b
CL
14606@deftypevr {@code{prosody-configuration} parameter} virtualhost-configuration-list virtualhosts
14607A host in Prosody is a domain on which user accounts can be created. For
14608example if you want your users to have addresses like
14609@samp{"john.smith@@example.com"} then you need to add a host
14610@samp{"example.com"}. All options in this list will apply only to this host.
14611
14612Note: the name "virtual" host is used in configuration to avoid confusion with
14613the actual physical host that Prosody is installed on. A single Prosody
14614instance can serve many domains, each one defined as a VirtualHost entry in
14615Prosody's configuration. Conversely a server that hosts a single domain would
14616have just one VirtualHost entry.
14617
7459cb93 14618See @url{https://prosody.im/doc/configure#virtual_host_settings}.
78cef99b
CL
14619
14620Available @code{virtualhost-configuration} fields are:
14621
e30038da 14622all these @code{prosody-configuration} fields: @code{admins}, @code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled}, @code{groups-file}, @code{allow-registration?}, @code{ssl}, @code{c2s-require-encryption?}, @code{disable-sasl-mechanisms}, @code{s2s-require-encryption?}, @code{s2s-secure-auth?}, @code{s2s-insecure-domains}, @code{s2s-secure-domains}, @code{authentication}, @code{log}, @code{http-max-content-size}, @code{http-external-url}, @code{raw-content}, plus:
78cef99b
CL
14623@deftypevr {@code{virtualhost-configuration} parameter} string domain
14624Domain you wish Prosody to serve.
14625@end deftypevr
14626
14627@end deftypevr
14628
14629@deftypevr {@code{prosody-configuration} parameter} int-component-configuration-list int-components
14630Components are extra services on a server which are available to clients,
14631usually on a subdomain of the main server (such as
14632@samp{"mycomponent.example.com"}). Example components might be chatroom
14633servers, user directories, or gateways to other protocols.
14634
14635Internal components are implemented with Prosody-specific plugins. To add an
14636internal component, you simply fill the hostname field, and the plugin you wish
14637to use for the component.
14638
7459cb93 14639See @url{https://prosody.im/doc/components}.
78cef99b
CL
14640Defaults to @samp{()}.
14641
14642Available @code{int-component-configuration} fields are:
14643
e30038da 14644all these @code{prosody-configuration} fields: @code{admins}, @code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled}, @code{groups-file}, @code{allow-registration?}, @code{ssl}, @code{c2s-require-encryption?}, @code{disable-sasl-mechanisms}, @code{s2s-require-encryption?}, @code{s2s-secure-auth?}, @code{s2s-insecure-domains}, @code{s2s-secure-domains}, @code{authentication}, @code{log}, @code{http-max-content-size}, @code{http-external-url}, @code{raw-content}, plus:
78cef99b
CL
14645@deftypevr {@code{int-component-configuration} parameter} string hostname
14646Hostname of the component.
14647@end deftypevr
14648
14649@deftypevr {@code{int-component-configuration} parameter} string plugin
14650Plugin you wish to use for the component.
14651@end deftypevr
14652
14653@deftypevr {@code{int-component-configuration} parameter} maybe-mod-muc-configuration mod-muc
14654Multi-user chat (MUC) is Prosody's module for allowing you to create
14655hosted chatrooms/conferences for XMPP users.
14656
14657General information on setting up and using multi-user chatrooms can be found
7459cb93 14658in the "Chatrooms" documentation (@url{https://prosody.im/doc/chatrooms}),
78cef99b
CL
14659which you should read if you are new to XMPP chatrooms.
14660
7459cb93 14661See also @url{https://prosody.im/doc/modules/mod_muc}.
78cef99b
CL
14662
14663Available @code{mod-muc-configuration} fields are:
14664
14665@deftypevr {@code{mod-muc-configuration} parameter} string name
14666The name to return in service discovery responses.
14667Defaults to @samp{"Prosody Chatrooms"}.
14668@end deftypevr
14669
14670@deftypevr {@code{mod-muc-configuration} parameter} string-or-boolean restrict-room-creation
14671If @samp{#t}, this will only allow admins to create new chatrooms.
14672Otherwise anyone can create a room. The value @samp{"local"} restricts room
14673creation to users on the service's parent domain. E.g. @samp{user@@example.com}
14674can create rooms on @samp{rooms.example.com}. The value @samp{"admin"}
14675restricts to service administrators only.
14676Defaults to @samp{#f}.
14677@end deftypevr
14678
14679@deftypevr {@code{mod-muc-configuration} parameter} non-negative-integer max-history-messages
14680Maximum number of history messages that will be sent to the member that has
14681just joined the room.
14682Defaults to @samp{20}.
14683@end deftypevr
14684
14685@end deftypevr
14686
14687@end deftypevr
14688
14689@deftypevr {@code{prosody-configuration} parameter} ext-component-configuration-list ext-components
14690External components use XEP-0114, which most standalone components
14691support. To add an external component, you simply fill the hostname field. See
7459cb93 14692@url{https://prosody.im/doc/components}.
78cef99b
CL
14693Defaults to @samp{()}.
14694
14695Available @code{ext-component-configuration} fields are:
14696
e30038da 14697all these @code{prosody-configuration} fields: @code{admins}, @code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled}, @code{groups-file}, @code{allow-registration?}, @code{ssl}, @code{c2s-require-encryption?}, @code{disable-sasl-mechanisms}, @code{s2s-require-encryption?}, @code{s2s-secure-auth?}, @code{s2s-insecure-domains}, @code{s2s-secure-domains}, @code{authentication}, @code{log}, @code{http-max-content-size}, @code{http-external-url}, @code{raw-content}, plus:
78cef99b
CL
14698@deftypevr {@code{ext-component-configuration} parameter} string component-secret
14699Password which the component will use to log in.
14700@end deftypevr
14701
14702@deftypevr {@code{ext-component-configuration} parameter} string hostname
14703Hostname of the component.
14704@end deftypevr
14705
14706@end deftypevr
14707
14708@deftypevr {@code{prosody-configuration} parameter} non-negative-integer-list component-ports
14709Port(s) Prosody listens on for component connections.
19ff1f26 14710Defaults to @samp{(5347)}.
78cef99b
CL
14711@end deftypevr
14712
14713@deftypevr {@code{prosody-configuration} parameter} string component-interface
14714Interface Prosody listens on for component connections.
14715Defaults to @samp{"127.0.0.1"}.
14716@end deftypevr
14717
274b9500
CL
14718@deftypevr {@code{prosody-configuration} parameter} maybe-raw-content raw-content
14719Raw content that will be added to the configuration file.
14720@end deftypevr
14721
78cef99b
CL
14722It could be that you just want to get a @code{prosody.cfg.lua}
14723up and running. In that case, you can pass an
14724@code{opaque-prosody-configuration} record as the value of
14725@code{prosody-service-type}. As its name indicates, an opaque configuration
14726does not have easy reflective capabilities.
14727Available @code{opaque-prosody-configuration} fields are:
14728
14729@deftypevr {@code{opaque-prosody-configuration} parameter} package prosody
14730The prosody package.
14731@end deftypevr
14732
14733@deftypevr {@code{opaque-prosody-configuration} parameter} string prosody.cfg.lua
14734The contents of the @code{prosody.cfg.lua} to use.
14735@end deftypevr
14736
14737For example, if your @code{prosody.cfg.lua} is just the empty
14738string, you could instantiate a prosody service like this:
14739
14740@example
14741(service prosody-service-type
14742 (opaque-prosody-configuration
14743 (prosody.cfg.lua "")))
14744@end example
14745
bdcf0e6f
CL
14746@c end of Prosody auto-generated documentation
14747
f2bee421
LC
14748@subsubheading BitlBee Service
14749
37af37dc
LC
14750@cindex IRC (Internet Relay Chat)
14751@cindex IRC gateway
f2bee421
LC
14752@url{http://bitlbee.org,BitlBee} is a gateway that provides an IRC
14753interface to a variety of messaging protocols such as XMPP.
14754
37af37dc
LC
14755@defvr {Scheme Variable} bitlbee-service-type
14756This is the service type for the @url{http://bitlbee.org,BitlBee} IRC
14757gateway daemon. Its value is a @code{bitlbee-configuration} (see
14758below).
f2bee421 14759
37af37dc
LC
14760To have BitlBee listen on port 6667 on localhost, add this line to your
14761services:
14762
14763@example
14764(service bitlbee-service-type)
14765@end example
14766@end defvr
14767
14768@deftp {Data Type} bitlbee-configuration
14769This is the configuration for BitlBee, with the following fields:
14770
14771@table @asis
14772@item @code{interface} (default: @code{"127.0.0.1"})
14773@itemx @code{port} (default: @code{6667})
14774Listen on the network interface corresponding to the IP address
14775specified in @var{interface}, on @var{port}.
14776
14777When @var{interface} is @code{127.0.0.1}, only local clients can
14778connect; when it is @code{0.0.0.0}, connections can come from any
14779networking interface.
14780
14781@item @code{package} (default: @code{bitlbee})
14782The BitlBee package to use.
14783
14784@item @code{extra-settings} (default: @code{""})
14785Configuration snippet added as-is to the BitlBee configuration file.
14786@end table
14787@end deftp
f2bee421 14788
b6d2930d 14789
14790@node Telephony Services
14791@subsubsection Telephony Services
14792
14793@cindex Murmur (VoIP server)
14794@cindex VoIP server
14795This section describes how to set up and run a Murmur server. Murmur is
14796the server of the @uref{https://mumble.info, Mumble} voice-over-IP
14797(VoIP) suite.
14798
14799@deftp {Data Type} murmur-configuration
14800The service type for the Murmur server. An example configuration can
14801look like this:
14802
14803@example
14804(service murmur-service-type
14805 (murmur-configuration
14806 (welcome-text
14807 "Welcome to this Mumble server running on GuixSD!")
14808 (cert-required? #t) ;disallow text password logins
14809 (ssl-cert "/etc/letsencrypt/live/mumble.example.com/fullchain.pem")
14810 (ssl-key "/etc/letsencrypt/live/mumble.example.com/privkey.pem")))
14811@end example
14812
14813After reconfiguring your system, you can manually set the murmur @code{SuperUser}
14814password with the command that is printed during the activation phase.
14815
14816It is recommended to register a normal Mumble user account
14817and grant it admin or moderator rights.
14818You can use the @code{mumble} client to
14819login as new normal user, register yourself, and log out.
14820For the next step login with the name @code{SuperUser} use
14821the @code{SuperUser} password that you set previously,
14822and grant your newly registered mumble user administrator or moderator
14823rights and create some channels.
14824
14825Available @code{murmur-configuration} fields are:
14826
14827@table @asis
14828@item @code{package} (default: @code{mumble})
14829Package that contains @code{bin/murmurd}.
14830
14831@item @code{user} (default: @code{"murmur"})
14832User who will run the Murmur server.
14833
14834@item @code{group} (default: @code{"murmur"})
14835Group of the user who will run the murmur server.
14836
14837@item @code{port} (default: @code{64738})
14838Port on which the server will listen.
14839
14840@item @code{welcome-text} (default: @code{""})
14841Welcome text sent to clients when they connect.
14842
14843@item @code{server-password} (default: @code{""})
14844Password the clients have to enter in order to connect.
14845
14846@item @code{max-users} (default: @code{100})
14847Maximum of users that can be connected to the server at once.
14848
14849@item @code{max-user-bandwidth} (default: @code{#f})
14850Maximum voice traffic a user can send per second.
14851
14852@item @code{database-file} (default: @code{"/var/lib/murmur/db.sqlite"})
14853File name of the sqlite database.
14854The service's user will become the owner of the directory.
14855
14856@item @code{log-file} (default: @code{"/var/log/murmur/murmur.log"})
14857File name of the log file.
14858The service's user will become the owner of the directory.
14859
14860@item @code{autoban-attempts} (default: @code{10})
14861Maximum number of logins a user can make in @code{autoban-timeframe}
14862without getting auto banned for @code{autoban-time}.
14863
14864@item @code{autoban-timeframe} (default: @code{120})
14865Timeframe for autoban in seconds.
14866
14867@item @code{autoban-time} (default: @code{300})
14868Amount of time in seconds for which a client gets banned
14869when violating the autoban limits.
14870
14871@item @code{opus-threshold} (default: @code{100})
14872Percentage of clients that need to support opus
14873before switching over to opus audio codec.
14874
14875@item @code{channel-nesting-limit} (default: @code{10})
14876How deep channels can be nested at maximum.
14877
14878@item @code{channelname-regex} (default: @code{#f})
14879A string in from of a Qt regular expression that channel names must conform to.
14880
14881@item @code{username-regex} (default: @code{#f})
14882A string in from of a Qt regular expression that user names must conform to.
14883
14884@item @code{text-message-length} (default: @code{5000})
14885Maximum size in bytes that a user can send in one text chat message.
14886
14887@item @code{image-message-length} (default: @code{(* 128 1024)})
14888Maximum size in bytes that a user can send in one image message.
14889
14890@item @code{cert-required?} (default: @code{#f})
14891If it is set to @code{#t} clients that use weak password authentification
14892will not be accepted. Users must have completed the certificate wizard to join.
14893
14894@item @code{remember-channel?} (defualt @code{#f})
14895Should murmur remember the last channel each user was in when they disconnected
14896and put them into the remembered channel when they rejoin.
14897
14898@item @code{allow-html?} (default: @code{#f})
14899Should html be allowed in text messages, user comments, and channel descriptions.
14900
14901@item @code{allow-ping?} (default: @code{#f})
14902Setting to true exposes the current user count, the maximum user count, and
14903the server's maximum bandwidth per client to unauthenticated users. In the
14904Mumble client, this information is shown in the Connect dialog.
14905
14906Disabling this setting will prevent public listing of the server.
14907
14908@item @code{bonjour?} (default: @code{#f})
14909Should the server advertise itself in the local network through the bonjour protocol.
14910
14911@item @code{send-version?} (default: @code{#f})
14912Should the murmur server version be exposed in ping requests.
14913
14914@item @code{log-days} (default: @code{31})
14915Murmur also stores logs in the database, which are accessible via RPC.
14916The default is 31 days of months, but you can set this setting to 0 to keep logs forever,
14917or -1 to disable logging to the database.
14918
14919@item @code{obfuscate-ips?} (default @code{#t})
14920Should logged ips be obfuscated to protect the privacy of users.
14921
14922@item @code{ssl-cert} (default: @code{#f})
14923File name of the SSL/TLS certificate used for encrypted connections.
14924
14925@example
14926(ssl-cert "/etc/letsencrypt/live/example.com/fullchain.pem")
14927@end example
14928@item @code{ssl-key} (default: @code{#f})
14929Filepath to the ssl private key used for encrypted connections.
14930@example
14931(ssl-key "/etc/letsencrypt/live/example.com/privkey.pem")
14932@end example
14933
14934@item @code{ssl-dh-params} (default: @code{#f})
14935File name of a PEM-encoded file with Diffie-Hellman parameters
14936for the SSL/TLS encryption. Alternatively you set it to
14937@code{"@@ffdhe2048"}, @code{"@@ffdhe3072"}, @code{"@@ffdhe4096"}, @code{"@@ffdhe6144"}
14938or @code{"@@ffdhe8192"} to use bundled parameters from RFC 7919.
14939
14940@item @code{ssl-ciphers} (default: @code{#f})
14941The @code{ssl-ciphers} option chooses the cipher suites to make available for use
14942in SSL/TLS.
14943
14944This option is specified using
14945@uref{https://www.openssl.org/docs/apps/ciphers.html#CIPHER-LIST-FORMAT,
14946OpenSSL cipher list notation}.
14947
14948It is recommended that you try your cipher string using 'openssl ciphers <string>'
14949before setting it here, to get a feel for which cipher suites you will get.
14950After setting this option, it is recommend that you inspect your Murmur log
14951to ensure that Murmur is using the cipher suites that you expected it to.
14952
14953Note: Changing this option may impact the backwards compatibility of your
14954Murmur server, and can remove the ability for older Mumble clients to be able
14955to connect to it.
14956
14957@item @code{public-registration} (default: @code{#f})
14958Must be a @code{<murmur-public-registration-configuration>} record or @code{#f}.
14959
14960You can optionally register your server in the public server list that the
14961@code{mumble} client shows on startup.
14962You cannot register your server if you have set a @code{server-password},
14963or set @code{allow-ping} to @code{#f}.
14964
14965It might take a few hours until it shows up in the public list.
14966
14967@item @code{file} (default: @code{#f})
14968Optional alternative override for this configuration.
14969@end table
14970@end deftp
14971
14972@deftp {Data Type} murmur-public-registration-configuration
14973Configuration for public registration of a murmur service.
14974
14975@table @asis
14976@item @code{name}
14977This is a display name for your server. Not to be confused with the hostname.
14978
14979@item @code{password}
14980A password to identify your registration.
14981Subsequent updates will need the same password. Don't lose your password.
14982
14983@item @code{url}
14984This should be a @code{http://} or @code{https://} link to your web
14985site.
14986
14987@item @code{hostname} (default: @code{#f})
14988By default your server will be listed by its IP address.
14989If it is set your server will be linked by this host name instead.
14990@end table
14991@end deftp
14992
14993
14994
730ed6ec
CB
14995@node Monitoring Services
14996@subsubsection Monitoring Services
14997
14998@subsubheading Tailon Service
14999
15000@uref{https://tailon.readthedocs.io/, Tailon} is a web application for
15001viewing and searching log files.
15002
15003The following example will configure the service with default values.
15004By default, Tailon can be accessed on port 8080 (@code{http://localhost:8080}).
15005
15006@example
15007(service tailon-service-type)
15008@end example
15009
15010The following example customises more of the Tailon configuration,
15011adding @command{sed} to the list of allowed commands.
15012
15013@example
15014(service tailon-service-type
15015 (tailon-configuration
15016 (config-file
15017 (tailon-configuration-file
15018 (allowed-commands '("tail" "grep" "awk" "sed"))))))
15019@end example
15020
15021
15022@deftp {Data Type} tailon-configuration
15023Data type representing the configuration of Tailon.
15024This type has the following parameters:
15025
15026@table @asis
15027@item @code{config-file} (default: @code{(tailon-configuration-file)})
15028The configuration file to use for Tailon. This can be set to a
15029@dfn{tailon-configuration-file} record value, or any gexp
15030(@pxref{G-Expressions}).
15031
15032For example, to instead use a local file, the @code{local-file} function
15033can be used:
15034
15035@example
15036(service tailon-service-type
15037 (tailon-configuration
15038 (config-file (local-file "./my-tailon.conf"))))
15039@end example
15040
15041@item @code{package} (default: @code{tailon})
15042The tailon package to use.
15043
15044@end table
15045@end deftp
15046
15047@deftp {Data Type} tailon-configuration-file
15048Data type representing the configuration options for Tailon.
15049This type has the following parameters:
15050
15051@table @asis
15052@item @code{files} (default: @code{(list "/var/log")})
15053List of files to display. The list can include strings for a single file
15054or directory, or a list, where the first item is the name of a
15055subsection, and the remaining items are the files or directories in that
15056subsection.
15057
15058@item @code{bind} (default: @code{"localhost:8080"})
15059Address and port to which Tailon should bind on.
15060
15061@item @code{relative-root} (default: @code{#f})
15062URL path to use for Tailon, set to @code{#f} to not use a path.
15063
15064@item @code{allow-transfers?} (default: @code{#t})
15065Allow downloading the log files in the web interface.
15066
15067@item @code{follow-names?} (default: @code{#t})
15068Allow tailing of not-yet existent files.
15069
15070@item @code{tail-lines} (default: @code{200})
15071Number of lines to read initially from each file.
15072
15073@item @code{allowed-commands} (default: @code{(list "tail" "grep" "awk")})
15074Commands to allow running. By default, @code{sed} is disabled.
15075
15076@item @code{debug?} (default: @code{#f})
15077Set @code{debug?} to @code{#t} to show debug messages.
15078
f2d8e7f7
CB
15079@item @code{wrap-lines} (default: @code{#t})
15080Initial line wrapping state in the web interface. Set to @code{#t} to
15081initially wrap lines (the default), or to @code{#f} to initially not
15082wrap lines.
15083
91fdc8a5
CB
15084@item @code{http-auth} (default: @code{#f})
15085HTTP authentication type to use. Set to @code{#f} to disable
15086authentication (the default). Supported values are @code{"digest"} or
15087@code{"basic"}.
15088
15089@item @code{users} (default: @code{#f})
15090If HTTP authentication is enabled (see @code{http-auth}), access will be
15091restricted to the credentials provided here. To configure users, use a
15092list of pairs, where the first element of the pair is the username, and
15093the 2nd element of the pair is the password.
15094
15095@example
15096(tailon-configuration-file
15097 (http-auth "basic")
15098 (users '(("user1" . "password1")
15099 ("user2" . "password2"))))
15100@end example
15101
730ed6ec
CB
15102@end table
15103@end deftp
15104
15105
693b52df
SB
15106@subsubheading Darkstat Service
15107@cindex darkstat
15108Darkstat is a packet sniffer that captures network traffic, calculates
15109statistics about usage, and serves reports over HTTP.
15110
15111@defvar {Scheme Variable} darkstat-service-type
15112This is the service type for the
15113@uref{https://unix4lyfe.org/darkstat/, darkstat}
15114service, its value must be a @code{darkstat-configuration} record as in
15115this example:
15116
15117@example
15118(service darkstat-service-type
15119 (darkstat-configuration
15120 (interface "eno1")))
15121@end example
15122@end defvar
15123
15124@deftp {Data Type} darkstat-configuration
15125Data type representing the configuration of @command{darkstat}.
15126
15127@table @asis
15128@item @code{package} (default: @code{darkstat})
15129The darkstat package to use.
15130
15131@item @code{interface}
15132Capture traffic on the specified network interface.
15133
15134@item @code{port} (default: @code{"667"})
15135Bind the web interface to the specified port.
15136
15137@item @code{bind-address} (default: @code{"127.0.0.1"})
15138Bind the web interface to the specified address.
15139
15140@item @code{base} (default: @code{"/"})
15141Specify the path of the base URL. This can be useful if
15142@command{darkstat} is accessed via a reverse proxy.
15143
15144@end table
15145@end deftp
15146
15147
859e367d
JD
15148@node Kerberos Services
15149@subsubsection Kerberos Services
15150@cindex Kerberos
15151
df31e36a 15152The @code{(gnu services kerberos)} module provides services relating to
859e367d
JD
15153the authentication protocol @dfn{Kerberos}.
15154
8e3f813f
JD
15155@subsubheading Krb5 Service
15156
15157Programs using a Kerberos client library normally
15158expect a configuration file in @file{/etc/krb5.conf}.
15159This service generates such a file from a definition provided in the
15160operating system declaration.
15161It does not cause any daemon to be started.
15162
15163No ``keytab'' files are provided by this service---you must explicitly create them.
15164This service is known to work with the MIT client library, @code{mit-krb5}.
15165Other implementations have not been tested.
15166
15167@defvr {Scheme Variable} krb5-service-type
15168A service type for Kerberos 5 clients.
15169@end defvr
15170
15171@noindent
15172Here is an example of its use:
15173@lisp
15174(service krb5-service-type
15175 (krb5-configuration
15176 (default-realm "EXAMPLE.COM")
15177 (allow-weak-crypto? #t)
15178 (realms (list
15179 (krb5-realm
15180 (name "EXAMPLE.COM")
15181 (admin-server "groucho.example.com")
15182 (kdc "karl.example.com"))
15183 (krb5-realm
15184 (name "ARGRX.EDU")
15185 (admin-server "kerb-admin.argrx.edu")
15186 (kdc "keys.argrx.edu"))))))
15187@end lisp
15188
15189@noindent
15190This example provides a Kerberos@tie{}5 client configuration which:
15191@itemize
15192@item Recognizes two realms, @i{viz:} ``EXAMPLE.COM'' and ``ARGRX.EDU'', both
15193of which have distinct administration servers and key distribution centers;
15194@item Will default to the realm ``EXAMPLE.COM'' if the realm is not explicitly
15195specified by clients;
15196@item Accepts services which only support encryption types known to be weak.
15197@end itemize
15198
15199The @code{krb5-realm} and @code{krb5-configuration} types have many fields.
15200Only the most commonly used ones are described here.
15201For a full list, and more detailed explanation of each, see the MIT
15202@uref{http://web.mit.edu/kerberos/krb5-devel/doc/admin/conf_files/krb5_conf.html,,krb5.conf}
15203documentation.
15204
15205
15206@deftp {Data Type} krb5-realm
15207@cindex realm, kerberos
15208@table @asis
15209@item @code{name}
15210This field is a string identifying the name of the realm.
15211A common convention is to use the fully qualified DNS name of your organization,
15212converted to upper case.
15213
15214@item @code{admin-server}
15215This field is a string identifying the host where the administration server is
15216running.
15217
15218@item @code{kdc}
15219This field is a string identifying the key distribution center
15220for the realm.
15221@end table
15222@end deftp
15223
15224@deftp {Data Type} krb5-configuration
15225
15226@table @asis
15227@item @code{allow-weak-crypto?} (default: @code{#f})
15228If this flag is @code{#t} then services which only offer encryption algorithms
15229known to be weak will be accepted.
15230
15231@item @code{default-realm} (default: @code{#f})
15232This field should be a string identifying the default Kerberos
15233realm for the client.
15234You should set this field to the name of your Kerberos realm.
15235If this value is @code{#f}
15236then a realm must be specified with every Kerberos principal when invoking programs
15237such as @command{kinit}.
15238
15239@item @code{realms}
15240This should be a non-empty list of @code{krb5-realm} objects, which clients may
15241access.
15242Normally, one of them will have a @code{name} field matching the @code{default-realm}
15243field.
15244@end table
15245@end deftp
15246
15247
859e367d
JD
15248@subsubheading PAM krb5 Service
15249@cindex pam-krb5
15250
df31e36a 15251The @code{pam-krb5} service allows for login authentication and password
859e367d
JD
15252management via Kerberos.
15253You will need this service if you want PAM enabled applications to authenticate
15254users using Kerberos.
15255
15256@defvr {Scheme Variable} pam-krb5-service-type
15257A service type for the Kerberos 5 PAM module.
15258@end defvr
15259
15260@deftp {Data Type} pam-krb5-configuration
15261Data type representing the configuration of the Kerberos 5 PAM module
15262This type has the following parameters:
15263@table @asis
15264@item @code{pam-krb5} (default: @code{pam-krb5})
15265The pam-krb5 package to use.
15266
15267@item @code{minimum-uid} (default: @code{1000})
15268The smallest user ID for which Kerberos authentications should be attempted.
15269Local accounts with lower values will silently fail to authenticate.
15270@end table
15271@end deftp
15272
15273
58724c48
DT
15274@node Web Services
15275@subsubsection Web Services
15276
e32171ee
JD
15277@cindex web
15278@cindex www
15279@cindex HTTP
d067e4ba
CB
15280The @code{(gnu services web)} module provides the Apache HTTP Server,
15281the nginx web server, and also a fastcgi wrapper daemon.
15282
15283@subsubheading Apache HTTP Server
15284
15285@deffn {Scheme Variable} httpd-service-type
15286Service type for the @uref{https://httpd.apache.org/,Apache HTTP} server
15287(@dfn{httpd}). The value for this service type is a
15288@code{https-configuration} record.
15289
15290A simple example configuration is given below.
15291
15292@example
15293(service httpd-service-type
15294 (httpd-configuration
15295 (config
15296 (httpd-config-file
15297 (server-name "www.example.com")
15298 (document-root "/srv/http/www.example.com")))))
15299@end example
15300
15301Other services can also extend the @code{httpd-service-type} to add to
15302the configuration.
15303
15304@example
15305(simple-service 'my-extra-server httpd-service-type
15306 (list
15307 (httpd-virtualhost
15308 "*:80"
15309 (list (string-append
15310 "ServerName "www.example.com
15311 DocumentRoot \"/srv/http/www.example.com\"")))))
15312@end example
15313@end deffn
15314
15315The details for the @code{httpd-configuration}, @code{httpd-module},
15316@code{httpd-config-file} and @code{httpd-virtualhost} record types are
15317given below.
15318
15319@deffn {Data Type} httpd-configuration
15320This data type represents the configuration for the httpd service.
15321
15322@table @asis
15323@item @code{package} (default: @code{httpd})
15324The httpd package to use.
15325
15326@item @code{pid-file} (default: @code{"/var/run/httpd"})
15327The pid file used by the shepherd-service.
15328
15329@item @code{config} (default: @code{(httpd-config-file)})
15330The configuration file to use with the httpd service. The default value
15331is a @code{httpd-config-file} record, but this can also be a different
15332G-expression that generates a file, for example a @code{plain-file}. A
15333file outside of the store can also be specified through a string.
15334
15335@end table
15336@end deffn
15337
15338@deffn {Data Type} httpd-module
15339This data type represents a module for the httpd service.
15340
15341@table @asis
15342@item @code{name}
15343The name of the module.
15344
15345@item @code{file}
15346The file for the module. This can be relative to the httpd package being
15347used, the absolute location of a file, or a G-expression for a file
15348within the store, for example @code{(file-append mod-wsgi
15349"/modules/mod_wsgi.so")}.
15350
15351@end table
15352@end deffn
15353
15354@deffn {Data Type} httpd-config-file
15355This data type represents a configuration file for the httpd service.
15356
15357@table @asis
15358@item @code{modules} (default: @code{%default-httpd-modules})
15359The modules to load. Additional modules can be added here, or loaded by
15360additional configuration.
15361
15362@item @code{server-root} (default: @code{httpd})
15363The @code{ServerRoot} in the configuration file, defaults to the httpd
15364package. Directives including @code{Include} and @code{LoadModule} are
15365taken as relative to the server root.
15366
15367@item @code{server-name} (default: @code{#f})
15368The @code{ServerName} in the configuration file, used to specify the
15369request scheme, hostname and port that the server uses to identify
15370itself.
15371
15372This doesn't need to be set in the server config, and can be specifyed
15373in virtual hosts. The default is @code{#f} to not specify a
15374@code{ServerName}.
15375
15376@item @code{document-root} (default: @code{"/srv/http"})
15377The @code{DocumentRoot} from which files will be served.
15378
15379@item @code{listen} (default: @code{'("80")})
15380The list of values for the @code{Listen} directives in the config
15381file. The value should be a list of strings, when each string can
15382specify the port number to listen on, and optionally the IP address and
15383protocol to use.
15384
15385@item @code{pid-file} (default: @code{"/var/run/httpd"})
15386The @code{PidFile} to use. This should match the @code{pid-file} set in
15387the @code{httpd-configuration} so that the Shepherd service is
15388configured correctly.
15389
15390@item @code{error-log} (default: @code{"/var/log/httpd/error_log"})
15391The @code{ErrorLog} to which the server will log errors.
15392
15393@item @code{user} (default: @code{"httpd"})
15394The @code{User} which the server will answer requests as.
15395
15396@item @code{group} (default: @code{"httpd"})
15397The @code{Group} which the server will answer requests as.
15398
15399@item @code{extra-config} (default: @code{(list "TypesConfig etc/httpd/mime.types")})
15400A flat list of strings and G-expressions which will be added to the end
15401of the configuration file.
15402
15403Any values which the service is extended with will be appended to this
15404list.
15405
15406@end table
15407@end deffn
15408
15409@deffn {Data Type} httpd-virtualhost
15410This data type represents a virtualhost configuration block for the httpd service.
15411
15412These should be added to the extra-config for the httpd-service.
15413
15414@example
15415(simple-service 'my-extra-server httpd-service-type
15416 (list
15417 (httpd-virtualhost
15418 "*:80"
15419 (list (string-append
15420 "ServerName "www.example.com
15421 DocumentRoot \"/srv/http/www.example.com\"")))))
15422@end example
15423
15424@table @asis
15425@item @code{addresses-and-ports}
15426The addresses and ports for the @code{VirtualHost} directive.
15427
15428@item @code{contents}
15429The contents of the @code{VirtualHost} directive, this should be a list
15430of strings and G-expressions.
15431
15432@end table
15433@end deffn
15434
15435@subsubheading NGINX
58724c48 15436
39fc3004
CB
15437@deffn {Scheme Variable} nginx-service-type
15438Service type for the @uref{https://nginx.org/,NGinx} web server. The
15439value for this service type is a @code{<nginx-configuration>} record.
5a10cd47 15440
39fc3004 15441A simple example configuration is given below.
58724c48 15442
39fc3004
CB
15443@example
15444(service nginx-service-type
15445 (nginx-configuration
fb1cba68 15446 (server-blocks
39fc3004
CB
15447 (list (nginx-server-configuration
15448 (server-name '("www.example.com"))
c48aa70a 15449 (root "/srv/http/www.example.com"))))))
39fc3004 15450@end example
d338237d 15451
39fc3004
CB
15452In addition to adding server blocks to the service configuration
15453directly, this service can be extended by other services to add server
15454blocks, as in this example:
d338237d
JL
15455
15456@example
15457(simple-service 'my-extra-server nginx-service-type
15458 (list (nginx-server-configuration
4d14808a
OP
15459 (root "/srv/http/extra-website")
15460 (try-files (list "$uri" "$uri/index.html")))))
d338237d
JL
15461@end example
15462@end deffn
15463
39fc3004
CB
15464At startup, @command{nginx} has not yet read its configuration file, so
15465it uses a default file to log error messages. If it fails to load its
15466configuration file, that is where error messages are logged. After the
15467configuration file is loaded, the default error log file changes as per
15468configuration. In our case, startup error messages can be found in
15469@file{/var/run/nginx/logs/error.log}, and after configuration in
15470@file{/var/log/nginx/error.log}. The second location can be changed
15471with the @var{log-directory} configuration option.
15472
15473@deffn {Data Type} nginx-configuration
15474This data type represents the configuration for NGinx. Some
15475configuration can be done through this and the other provided record
15476types, or alternatively, a config file can be provided.
15477
15478@table @asis
15479@item @code{nginx} (default: @code{nginx})
15480The nginx package to use.
15481
15482@item @code{log-directory} (default: @code{"/var/log/nginx"})
15483The directory to which NGinx will write log files.
15484
15485@item @code{run-directory} (default: @code{"/var/run/nginx"})
15486The directory in which NGinx will create a pid file, and write temporary
15487files.
15488
fb1cba68 15489@item @code{server-blocks} (default: @code{'()})
39fc3004
CB
15490A list of @dfn{server blocks} to create in the generated configuration
15491file, the elements should be of type
15492@code{<nginx-server-configuration>}.
15493
15494The following example would setup NGinx to serve @code{www.example.com}
15495from the @code{/srv/http/www.example.com} directory, without using
15496HTTPS.
15497@example
15498(service nginx-service-type
15499 (nginx-configuration
fb1cba68 15500 (server-blocks
39fc3004
CB
15501 (list (nginx-server-configuration
15502 (server-name '("www.example.com"))
c48aa70a 15503 (root "/srv/http/www.example.com"))))))
39fc3004
CB
15504@end example
15505
c2a59a92 15506@item @code{upstream-blocks} (default: @code{'()})
39fc3004
CB
15507A list of @dfn{upstream blocks} to create in the generated configuration
15508file, the elements should be of type
15509@code{<nginx-upstream-configuration>}.
15510
c2a59a92 15511Configuring upstreams through the @code{upstream-blocks} can be useful
39fc3004
CB
15512when combined with @code{locations} in the
15513@code{<nginx-server-configuration>} records. The following example
15514creates a server configuration with one location configuration, that
15515will proxy requests to a upstream configuration, which will handle
15516requests with two servers.
15517
15518@example
15519(service
15520 nginx-service-type
15521 (nginx-configuration
fb1cba68 15522 (server-blocks
39fc3004
CB
15523 (list (nginx-server-configuration
15524 (server-name '("www.example.com"))
15525 (root "/srv/http/www.example.com")
39fc3004
CB
15526 (locations
15527 (list
15528 (nginx-location-configuration
15529 (uri "/path1")
15530 (body '("proxy_pass http://server-proxy;"))))))))
c2a59a92 15531 (upstream-blocks
39fc3004
CB
15532 (list (nginx-upstream-configuration
15533 (name "server-proxy")
15534 (servers (list "server1.example.com"
15535 "server2.example.com")))))))
15536@end example
15537
352a5b63
TGR
15538@item @code{file} (default: @code{#f})
15539If a configuration @var{file} is provided, this will be used, rather than
39fc3004 15540generating a configuration file from the provided @code{log-directory},
c2a59a92 15541@code{run-directory}, @code{server-blocks} and @code{upstream-blocks}. For
fb1cba68
OP
15542proper operation, these arguments should match what is in @var{file} to ensure
15543that the directories are created when the service is activated.
39fc3004
CB
15544
15545This can be useful if you have an existing configuration file, or it's
15546not possible to do what is required through the other parts of the
15547nginx-configuration record.
15548
2881f852
CB
15549@item @code{server-names-hash-bucket-size} (default: @code{#f})
15550Bucket size for the server names hash tables, defaults to @code{#f} to
15551use the size of the processors cache line.
15552
15553@item @code{server-names-hash-bucket-max-size} (default: @code{#f})
15554Maximum bucket size for the server names hash tables.
15555
39fc3004
CB
15556@end table
15557@end deffn
15558
3b9b12ef
JL
15559@deftp {Data Type} nginx-server-configuration
15560Data type representing the configuration of an nginx server block.
8c00b838
JL
15561This type has the following parameters:
15562
15563@table @asis
8b223cea
CL
15564@item @code{listen} (default: @code{'("80" "443 ssl")})
15565Each @code{listen} directive sets the address and port for IP, or the
15566path for a UNIX-domain socket on which the server will accept requests.
15567Both address and port, or only address or only port can be specified.
15568An address may also be a hostname, for example:
8c00b838 15569
8b223cea
CL
15570@example
15571'("127.0.0.1:8000" "127.0.0.1" "8000" "*:8000" "localhost:8000")
15572@end example
8c00b838
JL
15573
15574@item @code{server-name} (default: @code{(list 'default)})
3b9b12ef
JL
15575A list of server names this server represents. @code{'default} represents the
15576default server for connections matching no other server.
8c00b838
JL
15577
15578@item @code{root} (default: @code{"/srv/http"})
15579Root of the website nginx will serve.
15580
9c557a69
CB
15581@item @code{locations} (default: @code{'()})
15582A list of @dfn{nginx-location-configuration} or
15583@dfn{nginx-named-location-configuration} records to use within this
15584server block.
15585
8c00b838
JL
15586@item @code{index} (default: @code{(list "index.html")})
15587Index files to look for when clients ask for a directory. If it cannot be found,
15588Nginx will send the list of files in the directory.
15589
4d14808a
OP
15590@item @code{try-files} (default: @code{'()})
15591A list of files whose existence is checked in the specified order.
15592@code{nginx} will use the first file it finds to process the request.
15593
c48aa70a 15594@item @code{ssl-certificate} (default: @code{#f})
8c00b838
JL
15595Where to find the certificate for secure connections. Set it to @code{#f} if
15596you don't have a certificate or you don't want to use HTTPS.
15597
c48aa70a 15598@item @code{ssl-certificate-key} (default: @code{#f})
8c00b838
JL
15599Where to find the private key for secure connections. Set it to @code{#f} if
15600you don't have a key or you don't want to use HTTPS.
15601
15602@item @code{server-tokens?} (default: @code{#f})
15603Whether the server should add its configuration to response.
15604
b05e8ee1
CL
15605@item @code{raw-content} (default: @code{'()})
15606A list of raw lines added to the server block.
15607
8c00b838
JL
15608@end table
15609@end deftp
15610
a88d41d1
CB
15611@deftp {Data Type} nginx-upstream-configuration
15612Data type representing the configuration of an nginx @code{upstream}
15613block. This type has the following parameters:
15614
15615@table @asis
15616@item @code{name}
15617Name for this group of servers.
15618
15619@item @code{servers}
15620Specify the addresses of the servers in the group. The address can be
15621specified as a IP address (e.g. @samp{127.0.0.1}), domain name
15622(e.g. @samp{backend1.example.com}) or a path to a UNIX socket using the
15623prefix @samp{unix:}. For addresses using an IP address or domain name,
15624the default port is 80, and a different port can be specified
15625explicitly.
15626
15627@end table
15628@end deftp
15629
15630@deftp {Data Type} nginx-location-configuration
15631Data type representing the configuration of an nginx @code{location}
15632block. This type has the following parameters:
15633
15634@table @asis
15635@item @code{uri}
15636URI which this location block matches.
15637
15638@anchor{nginx-location-configuration body}
15639@item @code{body}
7baf6615
AE
15640Body of the location block, specified as a list of strings. This can contain
15641many
a88d41d1
CB
15642configuration directives. For example, to pass requests to a upstream
15643server group defined using an @code{nginx-upstream-configuration} block,
7baf6615
AE
15644the following directive would be specified in the body @samp{(list "proxy_pass
15645http://upstream-name;")}.
a88d41d1
CB
15646
15647@end table
15648@end deftp
15649
15650@deftp {Data Type} nginx-named-location-configuration
15651Data type representing the configuration of an nginx named location
15652block. Named location blocks are used for request redirection, and not
15653used for regular request processing. This type has the following
15654parameters:
15655
15656@table @asis
15657@item @code{name}
15658Name to identify this location block.
15659
15660@item @code{body}
15661@xref{nginx-location-configuration body}, as the body for named location
15662blocks can be used in a similar way to the
15663@code{nginx-location-configuration body}. One restriction is that the
15664body of a named location block cannot contain location blocks.
15665
15666@end table
15667@end deftp
15668
a5130d10
AW
15669@cindex fastcgi
15670@cindex fcgiwrap
15671FastCGI is an interface between the front-end and the back-end of a web
15672service. It is a somewhat legacy facility; new web services should
15673generally just talk HTTP between the front-end and the back-end.
15674However there are a number of back-end services such as PHP or the
15675optimized HTTP Git repository access that use FastCGI, so we have
15676support for it in Guix.
15677
15678To use FastCGI, you configure the front-end web server (e.g., nginx) to
15679dispatch some subset of its requests to the fastcgi backend, which
15680listens on a local TCP or UNIX socket. There is an intermediary
15681@code{fcgiwrap} program that sits between the actual backend process and
15682the web server. The front-end indicates which backend program to run,
15683passing that information to the @code{fcgiwrap} process.
15684
15685@defvr {Scheme Variable} fcgiwrap-service-type
15686A service type for the @code{fcgiwrap} FastCGI proxy.
15687@end defvr
15688
15689@deftp {Data Type} fcgiwrap-configuration
15690Data type representing the configuration of the @code{fcgiwrap} serice.
15691This type has the following parameters:
15692@table @asis
15693@item @code{package} (default: @code{fcgiwrap})
15694The fcgiwrap package to use.
15695
15696@item @code{socket} (default: @code{tcp:127.0.0.1:9000})
15697The socket on which the @code{fcgiwrap} process should listen, as a
15698string. Valid @var{socket} values include
15699@code{unix:@var{/path/to/unix/socket}},
15700@code{tcp:@var{dot.ted.qu.ad}:@var{port}} and
15701@code{tcp6:[@var{ipv6_addr}]:port}.
15702
15703@item @code{user} (default: @code{fcgiwrap})
15704@itemx @code{group} (default: @code{fcgiwrap})
15705The user and group names, as strings, under which to run the
15706@code{fcgiwrap} process. The @code{fastcgi} service will ensure that if
15707the user asks for the specific user or group names @code{fcgiwrap} that
15708the corresponding user and/or group is present on the system.
15709
15710It is possible to configure a FastCGI-backed web service to pass HTTP
15711authentication information from the front-end to the back-end, and to
15712allow @code{fcgiwrap} to run the back-end process as a corresponding
15713local user. To enable this capability on the back-end., run
15714@code{fcgiwrap} as the @code{root} user and group. Note that this
15715capability also has to be configured on the front-end as well.
15716@end table
15717@end deftp
15718
64bae723 15719@cindex php-fpm
15720PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI implementation
15721with some additional features useful for sites of any size.
15722
15723These features include:
15724@itemize @bullet
15725@item Adaptive process spawning
15726@item Basic statistics (similar to Apache's mod_status)
15727@item Advanced process management with graceful stop/start
15728@item Ability to start workers with different uid/gid/chroot/environment
15729and different php.ini (replaces safe_mode)
15730@item Stdout & stderr logging
15731@item Emergency restart in case of accidental opcode cache destruction
15732@item Accelerated upload support
15733@item Support for a "slowlog"
15734@item Enhancements to FastCGI, such as fastcgi_finish_request() -
15735a special function to finish request & flush all data while continuing to do
15736something time-consuming (video converting, stats processing, etc.)
15737@end itemize
15738... and much more.
15739
15740@defvr {Scheme Variable} php-fpm-service-type
15741A Service type for @code{php-fpm}.
15742@end defvr
15743
15744@deftp {Data Type} php-fpm-configuration
15745Data Type for php-fpm service configuration.
15746@table @asis
15747@item @code{php} (default: @code{php})
15748The php package to use.
15749@item @code{socket} (default: @code{(string-append "/var/run/php" (version-major (package-version php)) "-fpm.sock")})
15750The address on which to accept FastCGI requests. Valid syntaxes are:
15751@table @asis
15752@item @code{"ip.add.re.ss:port"}
15753Listen on a TCP socket to a specific address on a specific port.
15754@item @code{"port"}
15755Listen on a TCP socket to all addresses on a specific port.
15756@item @code{"/path/to/unix/socket"}
15757Listen on a unix socket.
15758@end table
15759
15760@item @code{user} (default: @code{php-fpm})
15761User who will own the php worker processes.
15762@item @code{group} (default: @code{php-fpm})
15763Group of the worker processes.
15764@item @code{socket-user} (default: @code{php-fpm})
15765User who can speak to the php-fpm socket.
15766@item @code{socket-group} (default: @code{php-fpm})
15767Group that can speak to the php-fpm socket.
15768@item @code{pid-file} (default: @code{(string-append "/var/run/php" (version-major (package-version php)) "-fpm.pid")})
15769The process id of the php-fpm process is written to this file
15770once the service has started.
15771@item @code{log-file} (default: @code{(string-append "/var/log/php" (version-major (package-version php)) "-fpm.log")})
15772Log for the php-fpm master process.
15773@item @code{process-manager} (default: @code{(php-fpm-dynamic-process-manager-configuration)})
15774Detailed settings for the php-fpm process manager.
15775Must be either:
15776@table @asis
15777@item @code{<php-fpm-dynamic-process-manager-configuration>}
15778@item @code{<php-fpm-static-process-manager-configuration>}
15779@item @code{<php-fpm-on-demand-process-manager-configuration>}
15780@end table
15781@item @code{display-errors} (default @code{#f})
11e01891 15782Determines whether php errors and warning should be sent to clients
64bae723 15783and displayed in their browsers.
15784This is useful for local php development, but a security risk for public sites,
15785as error messages can reveal passwords and personal data.
15786@item @code{workers-logfile} (default @code{(string-append "/var/log/php" (version-major (package-version php)) "-fpm.www.log")})
15787This file will log the @code{stderr} outputs of php worker processes.
15788Can be set to @code{#f} to disable logging.
15789@item @code{file} (default @code{#f})
15790An optional override of the whole configuration.
15791You can use the @code{mixed-text-file} function or an absolute filepath for it.
15792@end table
15793@end deftp
15794
15795@deftp {Data type} php-fpm-dynamic-process-manager-configuration
15796Data Type for the @code{dynamic} php-fpm process manager. With the
15797@code{dynamic} process manager, spare worker processes are kept around
15798based on it's configured limits.
15799@table @asis
15800@item @code{max-children} (default: @code{5})
15801Maximum of worker processes.
15802@item @code{start-servers} (default: @code{2})
15803How many worker processes should be started on start-up.
15804@item @code{min-spare-servers} (default: @code{1})
15805How many spare worker processes should be kept around at minimum.
15806@item @code{max-spare-servers} (default: @code{3})
15807How many spare worker processes should be kept around at maximum.
15808@end table
15809@end deftp
15810
15811@deftp {Data type} php-fpm-static-process-manager-configuration
15812Data Type for the @code{static} php-fpm process manager. With the
15813@code{static} process manager, an unchanging number of worker processes
15814are created.
15815@table @asis
15816@item @code{max-children} (default: @code{5})
15817Maximum of worker processes.
15818@end table
15819@end deftp
15820
15821@deftp {Data type} php-fpm-on-demand-process-manager-configuration
15822Data Type for the @code{on-demand} php-fpm process manager. With the
15823@code{on-demand} process manager, worker processes are only created as
15824requests arrive.
15825@table @asis
15826@item @code{max-children} (default: @code{5})
15827Maximum of worker processes.
15828@item @code{process-idle-timeout} (default: @code{10})
15829The time in seconds after which a process with no requests is killed.
15830@end table
15831@end deftp
15832
15833
15834@deffn {Scheme Procedure} nginx-php-fpm-location @
15835 [#:nginx-package nginx] @
15836 [socket (string-append "/var/run/php" @
15837 (version-major (package-version php)) @
15838 "-fpm.sock")]
15839A helper function to quickly add php to an @code{nginx-server-configuration}.
15840@end deffn
15841
15842A simple services setup for nginx with php can look like this:
15843@example
15844(services (cons* (dhcp-client-service)
15845 (service php-fpm-service-type)
15846 (service nginx-service-type
15847 (nginx-server-configuration
15848 (server-name '("example.com"))
15849 (root "/srv/http/")
15850 (locations
15851 (list (nginx-php-location)))
15852 (https-port #f)
15853 (ssl-certificate #f)
15854 (ssl-certificate-key #f)))
15855 %base-services))
15856@end example
15857
08da664d
JL
15858@cindex cat-avatar-generator
15859The cat avatar generator is a simple service to demonstrate the use of php-fpm
15860in @code{Nginx}. It is used to generate cat avatar from a seed, for instance
15861the hash of a user's email address.
15862
15863@deffn {Scheme Procedure} cat-avatar-generator-serice @
15864 [#:cache-dir "/var/cache/cat-avatar-generator"] @
15865 [#:package cat-avatar-generator] @
15866 [#:configuration (nginx-server-configuration)]
15867Returns an nginx-server-configuration that inherits @code{configuration}. It
15868extends the nginx configuration to add a server block that serves @code{package},
15869a version of cat-avatar-generator. During execution, cat-avatar-generator will
15870be able to use @code{cache-dir} as its cache directory.
15871@end deffn
15872
15873A simple setup for cat-avatar-generator can look like this:
15874@example
15875(services (cons* (cat-avatar-generator-service
15876 #:configuration
15877 (nginx-server-configuration
15878 (server-name '("example.com"))))
15879 ...
15880 %base-services))
15881@end example
15882
1115f140
AW
15883@node Certificate Services
15884@subsubsection Certificate Services
15885
15886@cindex Web
15887@cindex HTTP, HTTPS
15888@cindex Let's Encrypt
15889@cindex TLS certificates
15890The @code{(gnu services certbot)} module provides a service to
15891automatically obtain a valid TLS certificate from the Let's Encrypt
15892certificate authority. These certificates can then be used to serve
15893content securely over HTTPS or other TLS-based protocols, with the
15894knowledge that the client will be able to verify the server's
15895authenticity.
15896
15897@url{https://letsencrypt.org/, Let's Encrypt} provides the
15898@code{certbot} tool to automate the certification process. This tool
15899first securely generates a key on the server. It then makes a request
15900to the Let's Encrypt certificate authority (CA) to sign the key. The CA
15901checks that the request originates from the host in question by using a
15902challenge-response protocol, requiring the server to provide its
15903response over HTTP. If that protocol completes successfully, the CA
15904signs the key, resulting in a certificate. That certificate is valid
15905for a limited period of time, and therefore to continue to provide TLS
15906services, the server needs to periodically ask the CA to renew its
15907signature.
15908
15909The certbot service automates this process: the initial key
15910generation, the initial certification request to the Let's Encrypt
15911service, the web server challenge/response integration, writing the
fece75fe
CL
15912certificate to disk, the automated periodic renewals, and the deployment
15913tasks associated with the renewal (e.g. reloading services, copying keys
15914with different permissions).
1115f140 15915
7ab04c17
CL
15916Certbot is run twice a day, at a random minute within the hour. It
15917won't do anything until your certificates are due for renewal or
15918revoked, but running it regularly would give your service a chance of
15919staying online in case a Let's Encrypt-initiated revocation happened for
15920some reason.
15921
65fc1d89
CL
15922By using this service, you agree to the ACME Subscriber Agreement, which
15923can be found there:
15924@url{https://acme-v01.api.letsencrypt.org/directory}.
15925
1115f140 15926@defvr {Scheme Variable} certbot-service-type
c3215d2f
CL
15927A service type for the @code{certbot} Let's Encrypt client. Its value
15928must be a @code{certbot-configuration} record as in this example:
15929
15930@example
fece75fe
CL
15931(define %nginx-deploy-hook
15932 (program-file
15933 "nginx-deploy-hook"
15934 #~(let ((pid (call-with-input-file "/var/run/nginx/pid" read)))
15935 (kill pid SIGHUP))))
15936
c3215d2f
CL
15937(service certbot-service-type
15938 (certbot-configuration
15939 (email "foo@@example.net")
15940 (certificates
15941 (list
15942 (certificate-configuration
fece75fe
CL
15943 (domains '("example.net" "www.example.net"))
15944 (deploy-hook %nginx-deploy-hook))
c3215d2f
CL
15945 (certificate-configuration
15946 (domains '("bar.example.net")))))))
15947@end example
15948
15949See below for details about @code{certbot-configuration}.
1115f140
AW
15950@end defvr
15951
15952@deftp {Data Type} certbot-configuration
0420a293 15953Data type representing the configuration of the @code{certbot} service.
1115f140
AW
15954This type has the following parameters:
15955
15956@table @asis
15957@item @code{package} (default: @code{certbot})
15958The certbot package to use.
15959
15960@item @code{webroot} (default: @code{/var/www})
15961The directory from which to serve the Let's Encrypt challenge/response
15962files.
15963
c3215d2f
CL
15964@item @code{certificates} (default: @code{()})
15965A list of @code{certificates-configuration}s for which to generate
15966certificates and request signatures. Each certificate has a @code{name}
15967and several @code{domains}.
1115f140 15968
65fc1d89
CL
15969@item @code{email}
15970Mandatory email used for registration, recovery contact, and important
15971account notifications.
15972
a2cb2bbc
CL
15973@item @code{rsa-key-size} (default: @code{2048})
15974Size of the RSA key.
15975
1115f140
AW
15976@item @code{default-location} (default: @i{see below})
15977The default @code{nginx-location-configuration}. Because @code{certbot}
15978needs to be able to serve challenges and responses, it needs to be able
15979to run a web server. It does so by extending the @code{nginx} web
15980service with an @code{nginx-server-configuration} listening on the
966fd7b7 15981@var{domains} on port 80, and which has a
1115f140
AW
15982@code{nginx-location-configuration} for the @code{/.well-known/} URI
15983path subspace used by Let's Encrypt. @xref{Web Services}, for more on
15984these nginx configuration data types.
15985
15986Requests to other URL paths will be matched by the
15987@code{default-location}, which if present is added to all
15988@code{nginx-server-configuration}s.
15989
15990By default, the @code{default-location} will issue a redirect from
966fd7b7 15991@code{http://@var{domain}/...} to @code{https://@var{domain}/...}, leaving
1115f140
AW
15992you to define what to serve on your site via @code{https}.
15993
15994Pass @code{#f} to not issue a default location.
15995@end table
15996@end deftp
15997
c3215d2f
CL
15998@deftp {Data Type} certificate-configuration
15999Data type representing the configuration of a certificate.
16000This type has the following parameters:
16001
16002@table @asis
16003@item @code{name} (default: @i{see below})
16004This name is used by Certbot for housekeeping and in file paths; it
16005doesn't affect the content of the certificate itself. To see
16006certificate names, run @code{certbot certificates}.
16007
16008Its default is the first provided domain.
1115f140 16009
c3215d2f
CL
16010@item @code{domains} (default: @code{()})
16011The first domain provided will be the subject CN of the certificate, and
16012all domains will be Subject Alternative Names on the certificate.
16013
fece75fe
CL
16014@item @code{deploy-hook} (default: @code{#f})
16015Command to be run in a shell once for each successfully issued
16016certificate. For this command, the shell variable
16017@code{$RENEWED_LINEAGE} will point to the config live subdirectory (for
16018example, @samp{"/etc/letsencrypt/live/example.com"}) containing the new
16019certificates and keys; the shell variable @code{$RENEWED_DOMAINS} will
16020contain a space-delimited list of renewed certificate domains (for
16021example, @samp{"example.com www.example.com"}.
16022
c3215d2f
CL
16023@end table
16024@end deftp
a88d41d1 16025
c3215d2f
CL
16026For each @code{certificate-configuration}, the certificate is saved to
16027@code{/etc/letsencrypt/live/@var{name}/fullchain.pem} and the key is
16028saved to @code{/etc/letsencrypt/live/@var{name}/privkey.pem}.
ba69e8f7
JL
16029@node DNS Services
16030@subsubsection DNS Services
16031@cindex DNS (domain name system)
16032@cindex domain name system (DNS)
16033
16034The @code{(gnu services dns)} module provides services related to the
16035@dfn{domain name system} (DNS). It provides a server service for hosting
16036an @emph{authoritative} DNS server for multiple zones, slave or master.
16037This service uses @uref{https://www.knot-dns.cz/, Knot DNS}.
16038
16039An example configuration of an authoritative server for two zones, one master
16040and one slave, is:
16041
16042@lisp
16043(define-zone-entries example.org.zone
16044;; Name TTL Class Type Data
16045 ("@@" "" "IN" "A" "127.0.0.1")
16046 ("@@" "" "IN" "NS" "ns")
16047 ("ns" "" "IN" "A" "127.0.0.1"))
16048
16049(define master-zone
16050 (knot-zone-configuration
16051 (domain "example.org")
16052 (zone (zone-file
16053 (origin "example.org")
16054 (entries example.org.zone)))))
16055
16056(define slave-zone
16057 (knot-zone-configuration
16058 (domain "plop.org")
16059 (dnssec-policy "default")
16060 (master (list "plop-master"))))
16061
16062(define plop-master
16063 (knot-remote-configuration
16064 (id "plop-master")
16065 (address (list "208.76.58.171"))))
16066
16067(operating-system
16068 ;; ...
16069 (services (cons* (service knot-service-type
dfb403b0 16070 (knot-configuration
ba69e8f7
JL
16071 (remotes (list plop-master))
16072 (zones (list master-zone slave-zone))))
16073 ;; ...
16074 %base-services)))
16075@end lisp
16076
16077@deffn {Scheme Variable} knot-service-type
16078This is the type for the Knot DNS server.
16079
16080Knot DNS is an authoritative DNS server, meaning that it can serve multiple
16081zones, that is to say domain names you would buy from a registrar. This server
16082is not a resolver, meaning that it can only resolve names for which it is
16083authoritative. This server can be configured to serve zones as a master server
16084or a slave server as a per-zone basis. Slave zones will get their data from
16085masters, and will serve it as an authoritative server. From the point of view
16086of a resolver, there is no difference between master and slave.
16087
16088The following data types are used to configure the Knot DNS server:
16089@end deffn
16090
16091@deftp {Data Type} knot-key-configuration
16092Data type representing a key.
16093This type has the following parameters:
16094
16095@table @asis
16096@item @code{id} (default: @code{""})
16097An identifier for other configuration fields to refer to this key. IDs must
16098be unique and must not be empty.
16099
16100@item @code{algorithm} (default: @code{#f})
16101The algorithm to use. Choose between @code{#f}, @code{'hmac-md5},
16102@code{'hmac-sha1}, @code{'hmac-sha224}, @code{'hmac-sha256}, @code{'hmac-sha384}
16103and @code{'hmac-sha512}.
16104
16105@item @code{secret} (default: @code{""})
16106The secret key itself.
16107
16108@end table
16109@end deftp
16110
16111@deftp {Data Type} knot-acl-configuration
16112Data type representing an Access Control List (ACL) configuration.
16113This type has the following parameters:
16114
16115@table @asis
16116@item @code{id} (default: @code{""})
16117An identifier for ether configuration fields to refer to this key. IDs must be
16118unique and must not be empty.
16119
16120@item @code{address} (default: @code{'()})
16121An ordered list of IP addresses, network subnets, or network ranges represented
16122with strings. The query must match one of them. Empty value means that
16123address match is not required.
16124
16125@item @code{key} (default: @code{'()})
16126An ordered list of references to keys represented with strings. The string
16127must match a key ID defined in a @code{knot-key-configuration}. No key means
16128that a key is not require to match that ACL.
16129
16130@item @code{action} (default: @code{'()})
16131An ordered list of actions that are permitted or forbidden by this ACL. Possible
16132values are lists of zero or more elements from @code{'transfer}, @code{'notify}
16133and @code{'update}.
16134
16135@item @code{deny?} (default: @code{#f})
16136When true, the ACL defines restrictions. Listed actions are forbidden. When
16137false, listed actions are allowed.
16138
16139@end table
16140@end deftp
16141
16142@deftp {Data Type} zone-entry
16143Data type represnting a record entry in a zone file.
16144This type has the following parameters:
16145
16146@table @asis
16147@item @code{name} (default: @code{"@@"})
16148The name of the record. @code{"@@"} refers to the origin of the zone. Names
16149are relative to the origin of the zone. For example, in the @code{example.org}
16150zone, @code{"ns.example.org"} actually refers to @code{ns.example.org.example.org}.
16151Names ending with a dot are absolute, which means that @code{"ns.example.org."}
16152refers to @code{ns.example.org}.
16153
16154@item @code{ttl} (default: @code{""})
16155The Time-To-Live (TTL) of this record. If not set, the default TTL is used.
16156
16157@item @code{class} (default: @code{"IN"})
16158The class of the record. Knot currently supports only @code{"IN"} and
16159partially @code{"CH"}.
16160
16161@item @code{type} (default: @code{"A"})
16162The type of the record. Common types include A (IPv4 address), AAAA (IPv6
16163address), NS (Name Server) and MX (Mail eXchange). Many other types are
16164defined.
16165
16166@item @code{data} (default: @code{""})
16167The data contained in the record. For instance an IP address associated with
16168an A record, or a domain name associated with an NS record. Remember that
16169domain names are relative to the origin unless they end with a dot.
16170
16171@end table
16172@end deftp
16173
16174@deftp {Data Type} zone-file
16175Data type representing the content of a zone file.
16176This type has the following parameters:
16177
16178@table @asis
16179@item @code{entries} (default: @code{'()})
16180The list of entries. The SOA record is taken care of, so you don't need to
16181put it in the list of entries. This list should probably contain an entry
16182for your primary authoritative DNS server. Other than using a list of entries
16183directly, you can use @code{define-zone-entries} to define a object containing
16184the list of entries more easily, that you can later pass to the @code{entries}
16185field of the @code{zone-file}.
16186
16187@item @code{origin} (default: @code{""})
16188The name of your zone. This parameter cannot be empty.
16189
16190@item @code{ns} (default: @code{"ns"})
16191The domain of your primary authoritative DNS server. The name is relative to
16192the origin, unless it ends with a dot. It is mandatory that this primary
16193DNS server corresponds to an NS record in the zone and that it is associated
16194to an IP address in the list of entries.
16195
16196@item @code{mail} (default: @code{"hostmaster"})
16197An email address people can contact you at, as the owner of the zone. This
16198is translated as @code{<mail>@@<origin>}.
16199
16200@item @code{serial} (default: @code{1})
16201The serial number of the zone. As this is used to keep track of changes by
16202both slaves and resolvers, it is mandatory that it @emph{never} decreases.
16203Always increment it when you make a change in your zone.
16204
f3853a25
JL
16205@item @code{refresh} (default: @code{(* 2 24 3600)})
16206The frequency at which slaves will do a zone transfer. This value is a number
16207of seconds. It can be computed by multiplications or with
16208@code{(string->duration)}.
ba69e8f7 16209
f3853a25 16210@item @code{retry} (default: @code{(* 15 60)})
ba69e8f7
JL
16211The period after which a slave will retry to contact its master when it fails
16212to do so a first time.
16213
f3853a25 16214@item @code{expiry} (default: @code{(* 14 24 3600)})
ba69e8f7
JL
16215Default TTL of records. Existing records are considered correct for at most
16216this amount of time. After this period, resolvers will invalidate their cache
16217and check again that it still exists.
16218
f3853a25 16219@item @code{nx} (default: @code{3600})
ba69e8f7
JL
16220Default TTL of inexistant records. This delay is usually short because you want
16221your new domains to reach everyone quickly.
16222
16223@end table
16224@end deftp
16225
16226@deftp {Data Type} knot-remote-configuration
16227Data type representing a remote configuration.
16228This type has the following parameters:
16229
16230@table @asis
16231@item @code{id} (default: @code{""})
16232An identifier for other configuration fields to refer to this remote. IDs must
16233be unique and must not be empty.
16234
16235@item @code{address} (default: @code{'()})
16236An ordered list of destination IP addresses. Addresses are tried in sequence.
16237An optional port can be given with the @@ separator. For instance:
16238@code{(list "1.2.3.4" "2.3.4.5@@53")}. Default port is 53.
16239
16240@item @code{via} (default: @code{'()})
16241An ordered list of source IP addresses. An empty list will have Knot choose
16242an appropriate source IP. An optional port can be given with the @@ separator.
16243The default is to choose at random.
16244
16245@item @code{key} (default: @code{#f})
16246A reference to a key, that is a string containing the identifier of a key
16247defined in a @code{knot-key-configuration} field.
16248
16249@end table
16250@end deftp
16251
16252@deftp {Data Type} knot-keystore-configuration
16253Data type representing a keystore to hold dnssec keys.
16254This type has the following parameters:
16255
16256@table @asis
16257@item @code{id} (default: @code{""})
16258The id of the keystore. It must not be empty.
16259
16260@item @code{backend} (default: @code{'pem})
16261The backend to store the keys in. Can be @code{'pem} or @code{'pkcs11}.
16262
16263@item @code{config} (default: @code{"/var/lib/knot/keys/keys"})
16264The configuration string of the backend. An example for the PKCS#11 is:
16265@code{"pkcs11:token=knot;pin-value=1234 /gnu/store/.../lib/pkcs11/libsofthsm2.so"}.
162a1374 16266For the pem backend, the string reprensents a path in the file system.
ba69e8f7
JL
16267
16268@end table
16269@end deftp
16270
16271@deftp {Data Type} knot-policy-configuration
16272Data type representing a dnssec policy. Knot DNS is able to automatically
16273sign your zones. It can either generate and manage your keys automatically or
16274use keys that you generate.
16275
16276Dnssec is usually implemented using two keys: a Key Signing Key (KSK) that is
16277used to sign the second, and a Zone Signing Key (ZSK) that is used to sign the
16278zone. In order to be trusted, the KSK needs to be present in the parent zone
16279(usually a top-level domain). If your registrar supports dnssec, you will
16280have to send them your KSK's hash so they can add a DS record in their zone.
16281This is not automated and need to be done each time you change your KSK.
16282
16283The policy also defines the lifetime of keys. Usually, ZSK can be changed
16284easily and use weaker cryptographic functions (they use lower parameters) in
16285order to sign records quickly, so they are changed often. The KSK however
16286requires manual interaction with the registrar, so they are changed less often
16287and use stronger parameters because they sign only one record.
16288
16289This type has the following parameters:
16290
16291@table @asis
16292@item @code{id} (default: @code{""})
16293The id of the policy. It must not be empty.
16294
16295@item @code{keystore} (default: @code{"default"})
16296A reference to a keystore, that is a string containing the identifier of a
16297keystore defined in a @code{knot-keystore-configuration} field. The
16298@code{"default"} identifier means the default keystore (a kasp database that
16299was setup by this service).
16300
16301@item @code{manual?} (default: @code{#f})
16302Whether the key management is manual or automatic.
16303
16304@item @code{single-type-signing?} (default: @code{#f})
16305When @code{#t}, use the Single-Type Signing Scheme.
16306
16307@item @code{algorithm} (default: @code{"ecdsap256sha256"})
16308An algorithm of signing keys and issued signatures.
16309
16310@item @code{ksk-size} (default: @code{256})
16311The length of the KSK. Note that this value is correct for the default
16312algorithm, but would be unsecure for other algorithms.
16313
16314@item @code{zsk-size} (default: @code{256})
16315The length of the ZSK. Note that this value is correct for the default
16316algorithm, but would be unsecure for other algorithms.
16317
16318@item @code{dnskey-ttl} (default: @code{'default})
16319The TTL value for DNSKEY records added into zone apex. The special
16320@code{'default} value means same as the zone SOA TTL.
16321
f3853a25 16322@item @code{zsk-lifetime} (default: @code{(* 30 24 3600)})
ba69e8f7
JL
16323The period between ZSK publication and the next rollover initiation.
16324
f3853a25 16325@item @code{propagation-delay} (default: @code{(* 24 3600)})
ba69e8f7
JL
16326An extra delay added for each key rollover step. This value should be high
16327enough to cover propagation of data from the master server to all slaves.
16328
f3853a25 16329@item @code{rrsig-lifetime} (default: @code{(* 14 24 3600)})
ba69e8f7
JL
16330A validity period of newly issued signatures.
16331
f3853a25 16332@item @code{rrsig-refresh} (default: @code{(* 7 24 3600)})
ba69e8f7
JL
16333A period how long before a signature expiration the signature will be refreshed.
16334
16335@item @code{nsec3?} (default: @code{#f})
16336When @code{#t}, NSEC3 will be used instead of NSEC.
16337
16338@item @code{nsec3-iterations} (default: @code{5})
16339The number of additional times the hashing is performed.
16340
16341@item @code{nsec3-salt-length} (default: @code{8})
16342The length of a salt field in octets, which is appended to the original owner
16343name before hashing.
16344
f3853a25 16345@item @code{nsec3-salt-lifetime} (default: @code{(* 30 24 3600)})
ba69e8f7
JL
16346The validity period of newly issued salt field.
16347
16348@end table
16349@end deftp
16350
16351@deftp {Data Type} knot-zone-configuration
16352Data type representing a zone served by Knot.
16353This type has the following parameters:
16354
16355@table @asis
16356@item @code{domain} (default: @code{""})
16357The domain served by this configuration. It must not be empty.
16358
16359@item @code{file} (default: @code{""})
16360The file where this zone is saved. This parameter is ignored by master zones.
16361Empty means default location that depends on the domain name.
16362
16363@item @code{zone} (default: @code{(zone-file)})
16364The content of the zone file. This parameter is ignored by slave zones. It
16365must contain a zone-file record.
16366
16367@item @code{master} (default: @code{'()})
16368A list of master remotes. When empty, this zone is a master. When set, this
16369zone is a slave. This is a list of remotes identifiers.
16370
16371@item @code{ddns-master} (default: @code{#f})
16372The main master. When empty, it defaults to the first master in the list of
16373masters.
16374
16375@item @code{notify} (default: @code{'()})
16376A list of slave remote identifiers.
16377
16378@item @code{acl} (default: @code{'()})
16379A list of acl identifiers.
16380
16381@item @code{semantic-checks?} (default: @code{#f})
16382When set, this adds more semantic checks to the zone.
16383
16384@item @code{disable-any?} (default: @code{#f})
16385When set, this forbids queries of the ANY type.
16386
16387@item @code{zonefile-sync} (default: @code{0})
16388The delay between a modification in memory and on disk. 0 means immediate
16389synchronization.
16390
16391@item @code{serial-policy} (default: @code{'increment})
16392A policy between @code{'increment} and @code{'unixtime}.
16393
16394@end table
16395@end deftp
16396
16397@deftp {Data Type} knot-configuration
16398Data type representing the Knot configuration.
16399This type has the following parameters:
16400
16401@table @asis
16402@item @code{knot} (default: @code{knot})
16403The Knot package.
16404
16405@item @code{run-directory} (default: @code{"/var/run/knot"})
16406The run directory. This directory will be used for pid file and sockets.
16407
16408@item @code{listen-v4} (default: @code{"0.0.0.0"})
16409An ip address on which to listen.
16410
16411@item @code{listen-v6} (default: @code{"::"})
16412An ip address on which to listen.
16413
16414@item @code{listen-port} (default: @code{53})
16415A port on which to listen.
16416
16417@item @code{keys} (default: @code{'()})
16418The list of knot-key-configuration used by this configuration.
16419
16420@item @code{acls} (default: @code{'()})
16421The list of knot-acl-configuration used by this configuration.
16422
16423@item @code{remotes} (default: @code{'()})
16424The list of knot-remote-configuration used by this configuration.
16425
16426@item @code{zones} (default: @code{'()})
16427The list of knot-zone-configuration used by this configuration.
16428
16429@end table
16430@end deftp
16431
1115f140 16432
2be1b471
JL
16433@node VPN Services
16434@subsubsection VPN Services
16435@cindex VPN (virtual private network)
16436@cindex virtual private network (VPN)
16437
16438The @code{(gnu services vpn)} module provides services related to
16439@dfn{virtual private networks} (VPNs). It provides a @emph{client} service for
16440your machine to connect to a VPN, and a @emph{servire} service for your machine
16441to host a VPN. Both services use @uref{https://openvpn.net/, OpenVPN}.
16442
16443@deffn {Scheme Procedure} openvpn-client-service @
16444 [#:config (openvpn-client-configuration)]
16445
16446Return a service that runs @command{openvpn}, a VPN daemon, as a client.
16447@end deffn
16448
16449@deffn {Scheme Procedure} openvpn-server-service @
16450 [#:config (openvpn-server-configuration)]
16451
16452Return a service that runs @command{openvpn}, a VPN daemon, as a server.
16453
16454Both can be run simultaneously.
16455@end deffn
16456
16457@c %automatically generated documentation
16458
16459Available @code{openvpn-client-configuration} fields are:
16460
1c17a863 16461@deftypevr {@code{openvpn-client-configuration} parameter} package openvpn
2be1b471
JL
16462The OpenVPN package.
16463
16464@end deftypevr
16465
1c17a863 16466@deftypevr {@code{openvpn-client-configuration} parameter} string pid-file
2be1b471
JL
16467The OpenVPN pid file.
16468
16469Defaults to @samp{"/var/run/openvpn/openvpn.pid"}.
16470
16471@end deftypevr
16472
1c17a863 16473@deftypevr {@code{openvpn-client-configuration} parameter} proto proto
2be1b471
JL
16474The protocol (UDP or TCP) used to open a channel between clients and
16475servers.
16476
16477Defaults to @samp{udp}.
16478
16479@end deftypevr
16480
1c17a863 16481@deftypevr {@code{openvpn-client-configuration} parameter} dev dev
2be1b471
JL
16482The device type used to represent the VPN connection.
16483
16484Defaults to @samp{tun}.
16485
16486@end deftypevr
16487
1c17a863 16488@deftypevr {@code{openvpn-client-configuration} parameter} string ca
2be1b471
JL
16489The certificate authority to check connections against.
16490
16491Defaults to @samp{"/etc/openvpn/ca.crt"}.
16492
16493@end deftypevr
16494
1c17a863 16495@deftypevr {@code{openvpn-client-configuration} parameter} string cert
2be1b471
JL
16496The certificate of the machine the daemon is running on. It should be
16497signed by the authority given in @code{ca}.
16498
16499Defaults to @samp{"/etc/openvpn/client.crt"}.
16500
16501@end deftypevr
16502
1c17a863 16503@deftypevr {@code{openvpn-client-configuration} parameter} string key
2be1b471
JL
16504The key of the machine the daemon is running on. It must be the key whose
16505certificate is @code{cert}.
16506
16507Defaults to @samp{"/etc/openvpn/client.key"}.
16508
16509@end deftypevr
16510
1c17a863 16511@deftypevr {@code{openvpn-client-configuration} parameter} boolean comp-lzo?
2be1b471
JL
16512Whether to use the lzo compression algorithm.
16513
16514Defaults to @samp{#t}.
16515
16516@end deftypevr
16517
1c17a863 16518@deftypevr {@code{openvpn-client-configuration} parameter} boolean persist-key?
2be1b471
JL
16519Don't re-read key files across SIGUSR1 or --ping-restart.
16520
16521Defaults to @samp{#t}.
16522
16523@end deftypevr
16524
1c17a863 16525@deftypevr {@code{openvpn-client-configuration} parameter} boolean persist-tun?
2be1b471
JL
16526Don't close and reopen TUN/TAP device or run up/down scripts across
16527SIGUSR1 or --ping-restart restarts.
16528
16529Defaults to @samp{#t}.
16530
16531@end deftypevr
16532
1c17a863 16533@deftypevr {@code{openvpn-client-configuration} parameter} number verbosity
2be1b471
JL
16534Verbosity level.
16535
16536Defaults to @samp{3}.
16537
16538@end deftypevr
16539
1c17a863 16540@deftypevr {@code{openvpn-client-configuration} parameter} tls-auth-client tls-auth
2be1b471
JL
16541Add an additional layer of HMAC authentication on top of the TLS control
16542channel to protect against DoS attacks.
16543
16544Defaults to @samp{#f}.
16545
16546@end deftypevr
16547
1c17a863 16548@deftypevr {@code{openvpn-client-configuration} parameter} key-usage verify-key-usage?
2be1b471
JL
16549Whether to check the server certificate has server usage extension.
16550
16551Defaults to @samp{#t}.
16552
16553@end deftypevr
16554
1c17a863 16555@deftypevr {@code{openvpn-client-configuration} parameter} bind bind?
2be1b471
JL
16556Bind to a specific local port number.
16557
16558Defaults to @samp{#f}.
16559
16560@end deftypevr
16561
1c17a863 16562@deftypevr {@code{openvpn-client-configuration} parameter} resolv-retry resolv-retry?
2be1b471
JL
16563Retry resolving server address.
16564
16565Defaults to @samp{#t}.
16566
16567@end deftypevr
16568
1c17a863 16569@deftypevr {@code{openvpn-client-configuration} parameter} openvpn-remote-list remote
2be1b471
JL
16570A list of remote servers to connect to.
16571
16572Defaults to @samp{()}.
16573
16574Available @code{openvpn-remote-configuration} fields are:
16575
1c17a863 16576@deftypevr {@code{openvpn-remote-configuration} parameter} string name
2be1b471
JL
16577Server name.
16578
16579Defaults to @samp{"my-server"}.
16580
16581@end deftypevr
16582
1c17a863 16583@deftypevr {@code{openvpn-remote-configuration} parameter} number port
2be1b471
JL
16584Port number the server listens to.
16585
16586Defaults to @samp{1194}.
16587
16588@end deftypevr
16589
16590@end deftypevr
16591@c %end of automatic openvpn-client documentation
16592
16593@c %automatically generated documentation
16594
16595Available @code{openvpn-server-configuration} fields are:
16596
1c17a863 16597@deftypevr {@code{openvpn-server-configuration} parameter} package openvpn
2be1b471
JL
16598The OpenVPN package.
16599
16600@end deftypevr
16601
1c17a863 16602@deftypevr {@code{openvpn-server-configuration} parameter} string pid-file
2be1b471
JL
16603The OpenVPN pid file.
16604
16605Defaults to @samp{"/var/run/openvpn/openvpn.pid"}.
16606
16607@end deftypevr
16608
1c17a863 16609@deftypevr {@code{openvpn-server-configuration} parameter} proto proto
2be1b471
JL
16610The protocol (UDP or TCP) used to open a channel between clients and
16611servers.
16612
16613Defaults to @samp{udp}.
16614
16615@end deftypevr
16616
1c17a863 16617@deftypevr {@code{openvpn-server-configuration} parameter} dev dev
2be1b471
JL
16618The device type used to represent the VPN connection.
16619
16620Defaults to @samp{tun}.
16621
16622@end deftypevr
16623
1c17a863 16624@deftypevr {@code{openvpn-server-configuration} parameter} string ca
2be1b471
JL
16625The certificate authority to check connections against.
16626
16627Defaults to @samp{"/etc/openvpn/ca.crt"}.
16628
16629@end deftypevr
16630
1c17a863 16631@deftypevr {@code{openvpn-server-configuration} parameter} string cert
2be1b471
JL
16632The certificate of the machine the daemon is running on. It should be
16633signed by the authority given in @code{ca}.
16634
16635Defaults to @samp{"/etc/openvpn/client.crt"}.
16636
16637@end deftypevr
16638
1c17a863 16639@deftypevr {@code{openvpn-server-configuration} parameter} string key
2be1b471
JL
16640The key of the machine the daemon is running on. It must be the key whose
16641certificate is @code{cert}.
16642
16643Defaults to @samp{"/etc/openvpn/client.key"}.
16644
16645@end deftypevr
16646
1c17a863 16647@deftypevr {@code{openvpn-server-configuration} parameter} boolean comp-lzo?
2be1b471
JL
16648Whether to use the lzo compression algorithm.
16649
16650Defaults to @samp{#t}.
16651
16652@end deftypevr
16653
1c17a863 16654@deftypevr {@code{openvpn-server-configuration} parameter} boolean persist-key?
2be1b471
JL
16655Don't re-read key files across SIGUSR1 or --ping-restart.
16656
16657Defaults to @samp{#t}.
16658
16659@end deftypevr
16660
1c17a863 16661@deftypevr {@code{openvpn-server-configuration} parameter} boolean persist-tun?
2be1b471
JL
16662Don't close and reopen TUN/TAP device or run up/down scripts across
16663SIGUSR1 or --ping-restart restarts.
16664
16665Defaults to @samp{#t}.
16666
16667@end deftypevr
16668
1c17a863 16669@deftypevr {@code{openvpn-server-configuration} parameter} number verbosity
2be1b471
JL
16670Verbosity level.
16671
16672Defaults to @samp{3}.
16673
16674@end deftypevr
16675
1c17a863 16676@deftypevr {@code{openvpn-server-configuration} parameter} tls-auth-server tls-auth
2be1b471
JL
16677Add an additional layer of HMAC authentication on top of the TLS control
16678channel to protect against DoS attacks.
16679
16680Defaults to @samp{#f}.
16681
16682@end deftypevr
16683
1c17a863 16684@deftypevr {@code{openvpn-server-configuration} parameter} number port
2be1b471
JL
16685Specifies the port number on which the server listens.
16686
16687Defaults to @samp{1194}.
16688
16689@end deftypevr
16690
1c17a863 16691@deftypevr {@code{openvpn-server-configuration} parameter} ip-mask server
2be1b471
JL
16692An ip and mask specifying the subnet inside the virtual network.
16693
16694Defaults to @samp{"10.8.0.0 255.255.255.0"}.
16695
16696@end deftypevr
16697
1c17a863 16698@deftypevr {@code{openvpn-server-configuration} parameter} cidr6 server-ipv6
2be1b471
JL
16699A CIDR notation specifying the IPv6 subnet inside the virtual network.
16700
16701Defaults to @samp{#f}.
16702
16703@end deftypevr
16704
1c17a863 16705@deftypevr {@code{openvpn-server-configuration} parameter} string dh
2be1b471
JL
16706The Diffie-Hellman parameters file.
16707
16708Defaults to @samp{"/etc/openvpn/dh2048.pem"}.
16709
16710@end deftypevr
16711
1c17a863 16712@deftypevr {@code{openvpn-server-configuration} parameter} string ifconfig-pool-persist
2be1b471
JL
16713The file that records client IPs.
16714
16715Defaults to @samp{"/etc/openvpn/ipp.txt"}.
16716
16717@end deftypevr
16718
1c17a863 16719@deftypevr {@code{openvpn-server-configuration} parameter} gateway redirect-gateway?
2be1b471
JL
16720When true, the server will act as a gateway for its clients.
16721
16722Defaults to @samp{#f}.
16723
16724@end deftypevr
16725
1c17a863 16726@deftypevr {@code{openvpn-server-configuration} parameter} boolean client-to-client?
9fc221b5 16727When true, clients are allowed to talk to each other inside the VPN.
2be1b471
JL
16728
16729Defaults to @samp{#f}.
16730
16731@end deftypevr
16732
1c17a863 16733@deftypevr {@code{openvpn-server-configuration} parameter} keepalive keepalive
2be1b471
JL
16734Causes ping-like messages to be sent back and forth over the link so
16735that each side knows when the other side has gone down. @code{keepalive}
16736requires a pair. The first element is the period of the ping sending,
16737and the second element is the timeout before considering the other side
16738down.
16739
16740@end deftypevr
16741
1c17a863 16742@deftypevr {@code{openvpn-server-configuration} parameter} number max-clients
2be1b471
JL
16743The maximum number of clients.
16744
16745Defaults to @samp{100}.
16746
16747@end deftypevr
16748
1c17a863 16749@deftypevr {@code{openvpn-server-configuration} parameter} string status
2be1b471 16750The status file. This file shows a small report on current connection.
9fc221b5 16751It is truncated and rewritten every minute.
2be1b471
JL
16752
16753Defaults to @samp{"/var/run/openvpn/status"}.
16754
16755@end deftypevr
16756
1c17a863 16757@deftypevr {@code{openvpn-server-configuration} parameter} openvpn-ccd-list client-config-dir
2be1b471
JL
16758The list of configuration for some clients.
16759
16760Defaults to @samp{()}.
16761
16762Available @code{openvpn-ccd-configuration} fields are:
16763
1c17a863 16764@deftypevr {@code{openvpn-ccd-configuration} parameter} string name
2be1b471
JL
16765Client name.
16766
16767Defaults to @samp{"client"}.
16768
16769@end deftypevr
16770
1c17a863 16771@deftypevr {@code{openvpn-ccd-configuration} parameter} ip-mask iroute
2be1b471
JL
16772Client own network
16773
16774Defaults to @samp{#f}.
16775
16776@end deftypevr
16777
1c17a863 16778@deftypevr {@code{openvpn-ccd-configuration} parameter} ip-mask ifconfig-push
2be1b471
JL
16779Client VPN IP.
16780
16781Defaults to @samp{#f}.
16782
16783@end deftypevr
16784
16785@end deftypevr
16786
16787
16788@c %end of automatic openvpn-server documentation
16789
16790
eb419bc9
JD
16791@node Network File System
16792@subsubsection Network File System
16793@cindex NFS
fe1a39d3 16794
eb419bc9
JD
16795The @code{(gnu services nfs)} module provides the following services,
16796which are most commonly used in relation to mounting or exporting
16797directory trees as @dfn{network file systems} (NFS).
d6a07ee6
JD
16798
16799@subsubheading RPC Bind Service
16800@cindex rpcbind
16801
eb419bc9
JD
16802The RPC Bind service provides a facility to map program numbers into
16803universal addresses.
16804Many NFS related services use this facility. Hence it is automatically
16805started when a dependent service starts.
d6a07ee6
JD
16806
16807@defvr {Scheme Variable} rpcbind-service-type
16808A service type for the RPC portmapper daemon.
16809@end defvr
16810
16811
16812@deftp {Data Type} rpcbind-configuration
16813Data type representing the configuration of the RPC Bind Service.
16814This type has the following parameters:
16815@table @asis
16816@item @code{rpcbind} (default: @code{rpcbind})
16817The rpcbind package to use.
16818
16819@item @code{warm-start?} (default: @code{#t})
16820If this parameter is @code{#t}, then the daemon will read a
16821state file on startup thus reloading state information saved by a previous
16822instance.
16823@end table
16824@end deftp
16825
eb419bc9
JD
16826
16827@subsubheading Pipefs Pseudo File System
16828@cindex pipefs
16829@cindex rpc_pipefs
16830
16831The pipefs file system is used to transfer NFS related data
16832between the kernel and user space programs.
16833
16834@defvr {Scheme Variable} pipefs-service-type
16835A service type for the pipefs pseudo file system.
16836@end defvr
16837
16838@deftp {Data Type} pipefs-configuration
16839Data type representing the configuration of the pipefs pseudo file system service.
16840This type has the following parameters:
16841@table @asis
16842@item @code{mount-point} (default: @code{"/var/lib/nfs/rpc_pipefs"})
16843The directory to which the file system is to be attached.
16844@end table
16845@end deftp
16846
16847
16848@subsubheading GSS Daemon Service
16849@cindex GSSD
16850@cindex GSS
16851@cindex global security system
16852
16853The @dfn{global security system} (GSS) daemon provides strong security for RPC
16854based protocols.
16855Before exchanging RPC requests an RPC client must establish a security
16856context. Typically this is done using the Kerberos command @command{kinit}
859e367d 16857or automatically at login time using PAM services (@pxref{Kerberos Services}).
eb419bc9
JD
16858
16859@defvr {Scheme Variable} gss-service-type
16860A service type for the Global Security System (GSS) daemon.
16861@end defvr
16862
16863@deftp {Data Type} gss-configuration
16864Data type representing the configuration of the GSS daemon service.
16865This type has the following parameters:
16866@table @asis
16867@item @code{nfs-utils} (default: @code{nfs-utils})
16868The package in which the @command{rpc.gssd} command is to be found.
16869
16870@item @code{pipefs-directory} (default: @code{"/var/lib/nfs/rpc_pipefs"})
16871The directory where the pipefs file system is mounted.
16872
16873@end table
16874@end deftp
16875
16876
16877@subsubheading IDMAP Daemon Service
16878@cindex idmapd
16879@cindex name mapper
16880
16881The idmap daemon service provides mapping between user IDs and user names.
16882Typically it is required in order to access file systems mounted via NFSv4.
16883
16884@defvr {Scheme Variable} idmap-service-type
16885A service type for the Identity Mapper (IDMAP) daemon.
16886@end defvr
16887
16888@deftp {Data Type} idmap-configuration
16889Data type representing the configuration of the IDMAP daemon service.
16890This type has the following parameters:
16891@table @asis
16892@item @code{nfs-utils} (default: @code{nfs-utils})
16893The package in which the @command{rpc.idmapd} command is to be found.
16894
16895@item @code{pipefs-directory} (default: @code{"/var/lib/nfs/rpc_pipefs"})
16896The directory where the pipefs file system is mounted.
16897
16898@item @code{domain} (default: @code{#f})
16899The local NFSv4 domain name.
16900This must be a string or @code{#f}.
16901If it is @code{#f} then the daemon will use the host's fully qualified domain name.
16902
16903@end table
16904@end deftp
16905
a7cf4eb6
ML
16906@node Continuous Integration
16907@subsubsection Continuous Integration
16908
16909@cindex continuous integration
16910@uref{https://notabug.org/mthl/cuirass, Cuirass} is a continuous
16911integration tool for Guix. It can be used both for development and for
16912providing substitutes to others (@pxref{Substitutes}).
16913
16914The @code{(gnu services cuirass)} module provides the following service.
16915
231eddc8
LC
16916@defvr {Scheme Procedure} cuirass-service-type
16917The type of the Cuirass service. Its value must be a
16918@code{cuirass-configuration} object, as described below.
16919@end defvr
a7cf4eb6 16920
231eddc8
LC
16921To add build jobs, you have to set the @code{specifications} field of
16922the configuration. Here is an example of a service defining a build job
16923based on a specification that can be found in Cuirass source tree. This
16924service polls the Guix repository and builds a subset of the Guix
16925packages, as prescribed in the @file{gnu-system.scm} example spec:
a7cf4eb6
ML
16926
16927@example
8de938d5
LC
16928(let ((spec #~((#:name . "guix")
16929 (#:url . "git://git.savannah.gnu.org/guix.git")
16930 (#:load-path . ".")
66bc1d2a
JN
16931 (#:file . "build-aux/cuirass/gnu-system.scm")
16932 (#:proc . cuirass-jobs)
8de938d5
LC
16933 (#:arguments (subset . "hello"))
16934 (#:branch . "master"))))
231eddc8
LC
16935 (service cuirass-service-type
16936 (cuirass-configuration
9bb98bcf 16937 (specifications #~(list '#$spec)))))
a7cf4eb6
ML
16938@end example
16939
231eddc8 16940While information related to build jobs is located directly in the
a7cf4eb6
ML
16941specifications, global settings for the @command{cuirass} process are
16942accessible in other @code{cuirass-configuration} fields.
16943
16944@deftp {Data Type} cuirass-configuration
16945Data type representing the configuration of Cuirass.
16946
16947@table @asis
b17e326f
LC
16948@item @code{log-file} (default: @code{"/var/log/cuirass.log"})
16949Location of the log file.
16950
463995da 16951@item @code{cache-directory} (default: @code{"/var/cache/cuirass"})
a7cf4eb6
ML
16952Location of the repository cache.
16953
16954@item @code{user} (default: @code{"cuirass"})
16955Owner of the @code{cuirass} process.
16956
16957@item @code{group} (default: @code{"cuirass"})
16958Owner's group of the @code{cuirass} process.
16959
16960@item @code{interval} (default: @code{60})
16961Number of seconds between the poll of the repositories followed by the
16962Cuirass jobs.
16963
16964@item @code{database} (default: @code{"/var/run/cuirass/cuirass.db"})
16965Location of sqlite database which contains the build results and previously
16966added specifications.
16967
1c05aab4 16968@item @code{port} (default: @code{8081})
11b7717d
MO
16969Port number used by the HTTP server.
16970
326f6ef1
JN
16971@item --listen=@var{host}
16972Listen on the network interface for @var{host}. The default is to
16973accept connections from localhost.
16974
8de938d5
LC
16975@item @code{specifications} (default: @code{#~'()})
16976A gexp (@pxref{G-Expressions}) that evaluates to a list of specifications,
16977where a specification is an association list
a7cf4eb6
ML
16978(@pxref{Associations Lists,,, guile, GNU Guile Reference Manual}) whose
16979keys are keywords (@code{#:keyword-example}) as shown in the example
16980above.
16981
16982@item @code{use-substitutes?} (default: @code{#f})
16983This allows using substitutes to avoid building every dependencies of a job
16984from source.
16985
16986@item @code{one-shot?} (default: @code{#f})
16987Only evaluate specifications and build derivations once.
379b6ba5 16988
c800fd56
MO
16989@item @code{fallback?} (default: @code{#f})
16990When substituting a pre-built binary fails, fall back to building
16991packages locally.
16992
eb122280
MO
16993@item @code{load-path} (default: @code{'()})
16994This allows users to define their own packages and make them visible to
16995cuirass as in @command{guix build} command.
16996
379b6ba5
LC
16997@item @code{cuirass} (default: @code{cuirass})
16998The Cuirass package to use.
a7cf4eb6
ML
16999@end table
17000@end deftp
eb419bc9 17001
bfbf6e1e
MO
17002@node Power management Services
17003@subsubsection Power management Services
17004
17005@cindex power management with TLP
17006The @code{(gnu services pm)} module provides a Guix service definition
17007for the Linux power management tool TLP.
17008
17009TLP enables various powersaving modes in userspace and kernel.
17010Contrary to @code{upower-service}, it is not a passive,
17011monitoring tool, as it will apply custom settings each time a new power
17012source is detected. More information can be found at
17013@uref{http://linrunner.de/en/tlp/tlp.html, TLP home page}.
17014
17015@deffn {Scheme Variable} tlp-service-type
17016The service type for the TLP tool. Its value should be a valid
3d3c5650
LC
17017TLP configuration (see below). To use the default settings, simply
17018write:
bfbf6e1e 17019@example
3d3c5650 17020(service tlp-service-type)
bfbf6e1e
MO
17021@end example
17022@end deffn
17023
17024By default TLP does not need much configuration but most TLP parameters
17025can be tweaked using @code{tlp-configuration}.
17026
17027Each parameter definition is preceded by its type; for example,
17028@samp{boolean foo} indicates that the @code{foo} parameter
17029should be specified as a boolean. Types starting with
17030@code{maybe-} denote parameters that won't show up in TLP config file
17031when their value is @code{'disabled}.
17032
17033@c The following documentation was initially generated by
17034@c (generate-tlp-documentation) in (gnu services pm). Manually maintained
17035@c documentation is better, so we shouldn't hesitate to edit below as
17036@c needed. However if the change you want to make to this documentation
17037@c can be done in an automated way, it's probably easier to change
17038@c (generate-documentation) than to make it below and have to deal with
17039@c the churn as TLP updates.
17040
17041Available @code{tlp-configuration} fields are:
17042
17043@deftypevr {@code{tlp-configuration} parameter} package tlp
17044The TLP package.
17045
17046@end deftypevr
17047
17048@deftypevr {@code{tlp-configuration} parameter} boolean tlp-enable?
17049Set to true if you wish to enable TLP.
17050
17051Defaults to @samp{#t}.
17052
17053@end deftypevr
17054
17055@deftypevr {@code{tlp-configuration} parameter} string tlp-default-mode
17056Default mode when no power supply can be detected. Alternatives are AC
17057and BAT.
17058
17059Defaults to @samp{"AC"}.
17060
17061@end deftypevr
17062
17063@deftypevr {@code{tlp-configuration} parameter} non-negative-integer disk-idle-secs-on-ac
17064Number of seconds Linux kernel has to wait after the disk goes idle,
17065before syncing on AC.
17066
17067Defaults to @samp{0}.
17068
17069@end deftypevr
17070
17071@deftypevr {@code{tlp-configuration} parameter} non-negative-integer disk-idle-secs-on-bat
17072Same as @code{disk-idle-ac} but on BAT mode.
17073
17074Defaults to @samp{2}.
17075
17076@end deftypevr
17077
17078@deftypevr {@code{tlp-configuration} parameter} non-negative-integer max-lost-work-secs-on-ac
17079Dirty pages flushing periodicity, expressed in seconds.
17080
17081Defaults to @samp{15}.
17082
17083@end deftypevr
17084
17085@deftypevr {@code{tlp-configuration} parameter} non-negative-integer max-lost-work-secs-on-bat
17086Same as @code{max-lost-work-secs-on-ac} but on BAT mode.
17087
17088Defaults to @samp{60}.
17089
17090@end deftypevr
17091
17092@deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list cpu-scaling-governor-on-ac
17093CPU frequency scaling governor on AC mode. With intel_pstate driver,
17094alternatives are powersave and performance. With acpi-cpufreq driver,
17095alternatives are ondemand, powersave, performance and conservative.
17096
17097Defaults to @samp{disabled}.
17098
17099@end deftypevr
17100
17101@deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list cpu-scaling-governor-on-bat
17102Same as @code{cpu-scaling-governor-on-ac} but on BAT mode.
17103
17104Defaults to @samp{disabled}.
17105
17106@end deftypevr
17107
17108@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-min-freq-on-ac
17109Set the min available frequency for the scaling governor on AC.
17110
17111Defaults to @samp{disabled}.
17112
17113@end deftypevr
17114
17115@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-max-freq-on-ac
17116Set the max available frequency for the scaling governor on AC.
17117
17118Defaults to @samp{disabled}.
17119
17120@end deftypevr
17121
17122@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-min-freq-on-bat
17123Set the min available frequency for the scaling governor on BAT.
17124
17125Defaults to @samp{disabled}.
17126
17127@end deftypevr
17128
17129@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-max-freq-on-bat
17130Set the max available frequency for the scaling governor on BAT.
17131
17132Defaults to @samp{disabled}.
17133
17134@end deftypevr
17135
17136@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-min-perf-on-ac
17137Limit the min P-state to control the power dissipation of the CPU, in AC
17138mode. Values are stated as a percentage of the available performance.
17139
17140Defaults to @samp{disabled}.
17141
17142@end deftypevr
17143
17144@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-max-perf-on-ac
17145Limit the max P-state to control the power dissipation of the CPU, in AC
17146mode. Values are stated as a percentage of the available performance.
17147
17148Defaults to @samp{disabled}.
17149
17150@end deftypevr
17151
17152@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-min-perf-on-bat
17153Same as @code{cpu-min-perf-on-ac} on BAT mode.
17154
17155Defaults to @samp{disabled}.
17156
17157@end deftypevr
17158
17159@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-max-perf-on-bat
17160Same as @code{cpu-max-perf-on-ac} on BAT mode.
17161
17162Defaults to @samp{disabled}.
17163
17164@end deftypevr
17165
17166@deftypevr {@code{tlp-configuration} parameter} maybe-boolean cpu-boost-on-ac?
17167Enable CPU turbo boost feature on AC mode.
17168
17169Defaults to @samp{disabled}.
17170
17171@end deftypevr
17172
17173@deftypevr {@code{tlp-configuration} parameter} maybe-boolean cpu-boost-on-bat?
17174Same as @code{cpu-boost-on-ac?} on BAT mode.
17175
17176Defaults to @samp{disabled}.
17177
17178@end deftypevr
17179
17180@deftypevr {@code{tlp-configuration} parameter} boolean sched-powersave-on-ac?
17181Allow Linux kernel to minimize the number of CPU cores/hyper-threads
17182used under light load conditions.
17183
17184Defaults to @samp{#f}.
17185
17186@end deftypevr
17187
17188@deftypevr {@code{tlp-configuration} parameter} boolean sched-powersave-on-bat?
17189Same as @code{sched-powersave-on-ac?} but on BAT mode.
17190
17191Defaults to @samp{#t}.
17192
17193@end deftypevr
17194
17195@deftypevr {@code{tlp-configuration} parameter} boolean nmi-watchdog?
17196Enable Linux kernel NMI watchdog.
17197
17198Defaults to @samp{#f}.
17199
17200@end deftypevr
17201
17202@deftypevr {@code{tlp-configuration} parameter} maybe-string phc-controls
17203For Linux kernels with PHC patch applied, change CPU voltages. An
17204example value would be @samp{"F:V F:V F:V F:V"}.
17205
17206Defaults to @samp{disabled}.
17207
17208@end deftypevr
17209
17210@deftypevr {@code{tlp-configuration} parameter} string energy-perf-policy-on-ac
17211Set CPU performance versus energy saving policy on AC. Alternatives are
17212performance, normal, powersave.
17213
17214Defaults to @samp{"performance"}.
17215
17216@end deftypevr
17217
17218@deftypevr {@code{tlp-configuration} parameter} string energy-perf-policy-on-bat
17219Same as @code{energy-perf-policy-ac} but on BAT mode.
17220
17221Defaults to @samp{"powersave"}.
17222
17223@end deftypevr
17224
17225@deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disks-devices
17226Hard disk devices.
17227
17228@end deftypevr
17229
17230@deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disk-apm-level-on-ac
17231Hard disk advanced power management level.
17232
17233@end deftypevr
17234
17235@deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disk-apm-level-on-bat
17236Same as @code{disk-apm-bat} but on BAT mode.
17237
17238@end deftypevr
17239
17240@deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-spindown-timeout-on-ac
17241Hard disk spin down timeout. One value has to be specified for each
17242declared hard disk.
17243
17244Defaults to @samp{disabled}.
17245
17246@end deftypevr
17247
17248@deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-spindown-timeout-on-bat
17249Same as @code{disk-spindown-timeout-on-ac} but on BAT mode.
17250
17251Defaults to @samp{disabled}.
17252
17253@end deftypevr
17254
17255@deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-iosched
17256Select IO scheduler for disk devices. One value has to be specified for
17257each declared hard disk. Example alternatives are cfq, deadline and
17258noop.
17259
17260Defaults to @samp{disabled}.
17261
17262@end deftypevr
17263
17264@deftypevr {@code{tlp-configuration} parameter} string sata-linkpwr-on-ac
17265SATA aggressive link power management (ALPM) level. Alternatives are
17266min_power, medium_power, max_performance.
17267
17268Defaults to @samp{"max_performance"}.
17269
17270@end deftypevr
17271
17272@deftypevr {@code{tlp-configuration} parameter} string sata-linkpwr-on-bat
17273Same as @code{sata-linkpwr-ac} but on BAT mode.
17274
17275Defaults to @samp{"min_power"}.
17276
17277@end deftypevr
17278
17279@deftypevr {@code{tlp-configuration} parameter} maybe-string sata-linkpwr-blacklist
17280Exclude specified SATA host devices for link power management.
17281
17282Defaults to @samp{disabled}.
17283
17284@end deftypevr
17285
17286@deftypevr {@code{tlp-configuration} parameter} maybe-on-off-boolean ahci-runtime-pm-on-ac?
17287Enable Runtime Power Management for AHCI controller and disks on AC
17288mode.
17289
17290Defaults to @samp{disabled}.
17291
17292@end deftypevr
17293
17294@deftypevr {@code{tlp-configuration} parameter} maybe-on-off-boolean ahci-runtime-pm-on-bat?
17295Same as @code{ahci-runtime-pm-on-ac} on BAT mode.
17296
17297Defaults to @samp{disabled}.
17298
17299@end deftypevr
17300
17301@deftypevr {@code{tlp-configuration} parameter} non-negative-integer ahci-runtime-pm-timeout
17302Seconds of inactivity before disk is suspended.
17303
17304Defaults to @samp{15}.
17305
17306@end deftypevr
17307
17308@deftypevr {@code{tlp-configuration} parameter} string pcie-aspm-on-ac
17309PCI Express Active State Power Management level. Alternatives are
17310default, performance, powersave.
17311
17312Defaults to @samp{"performance"}.
17313
17314@end deftypevr
17315
17316@deftypevr {@code{tlp-configuration} parameter} string pcie-aspm-on-bat
17317Same as @code{pcie-aspm-ac} but on BAT mode.
17318
17319Defaults to @samp{"powersave"}.
17320
17321@end deftypevr
17322
17323@deftypevr {@code{tlp-configuration} parameter} string radeon-power-profile-on-ac
17324Radeon graphics clock speed level. Alternatives are low, mid, high,
17325auto, default.
17326
17327Defaults to @samp{"high"}.
17328
17329@end deftypevr
17330
17331@deftypevr {@code{tlp-configuration} parameter} string radeon-power-profile-on-bat
17332Same as @code{radeon-power-ac} but on BAT mode.
17333
17334Defaults to @samp{"low"}.
17335
17336@end deftypevr
17337
17338@deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-state-on-ac
17339Radeon dynamic power management method (DPM). Alternatives are battery,
17340performance.
17341
17342Defaults to @samp{"performance"}.
17343
17344@end deftypevr
17345
17346@deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-state-on-bat
17347Same as @code{radeon-dpm-state-ac} but on BAT mode.
17348
17349Defaults to @samp{"battery"}.
17350
17351@end deftypevr
17352
17353@deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-perf-level-on-ac
17354Radeon DPM performance level. Alternatives are auto, low, high.
17355
17356Defaults to @samp{"auto"}.
17357
17358@end deftypevr
17359
17360@deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-perf-level-on-bat
17361Same as @code{radeon-dpm-perf-ac} but on BAT mode.
17362
17363Defaults to @samp{"auto"}.
17364
17365@end deftypevr
17366
17367@deftypevr {@code{tlp-configuration} parameter} on-off-boolean wifi-pwr-on-ac?
17368Wifi power saving mode.
17369
17370Defaults to @samp{#f}.
17371
17372@end deftypevr
17373
17374@deftypevr {@code{tlp-configuration} parameter} on-off-boolean wifi-pwr-on-bat?
17375Same as @code{wifi-power-ac?} but on BAT mode.
17376
17377Defaults to @samp{#t}.
17378
17379@end deftypevr
17380
17381@deftypevr {@code{tlp-configuration} parameter} y-n-boolean wol-disable?
17382Disable wake on LAN.
17383
17384Defaults to @samp{#t}.
17385
17386@end deftypevr
17387
17388@deftypevr {@code{tlp-configuration} parameter} non-negative-integer sound-power-save-on-ac
17389Timeout duration in seconds before activating audio power saving on
17390Intel HDA and AC97 devices. A value of 0 disables power saving.
17391
17392Defaults to @samp{0}.
17393
17394@end deftypevr
17395
17396@deftypevr {@code{tlp-configuration} parameter} non-negative-integer sound-power-save-on-bat
17397Same as @code{sound-powersave-ac} but on BAT mode.
17398
17399Defaults to @samp{1}.
17400
17401@end deftypevr
17402
17403@deftypevr {@code{tlp-configuration} parameter} y-n-boolean sound-power-save-controller?
17404Disable controller in powersaving mode on Intel HDA devices.
17405
17406Defaults to @samp{#t}.
17407
17408@end deftypevr
17409
17410@deftypevr {@code{tlp-configuration} parameter} boolean bay-poweroff-on-bat?
17411Enable optical drive in UltraBay/MediaBay on BAT mode. Drive can be
17412powered on again by releasing (and reinserting) the eject lever or by
17413pressing the disc eject button on newer models.
17414
17415Defaults to @samp{#f}.
17416
17417@end deftypevr
17418
17419@deftypevr {@code{tlp-configuration} parameter} string bay-device
17420Name of the optical drive device to power off.
17421
17422Defaults to @samp{"sr0"}.
17423
17424@end deftypevr
17425
17426@deftypevr {@code{tlp-configuration} parameter} string runtime-pm-on-ac
17427Runtime Power Management for PCI(e) bus devices. Alternatives are on
17428and auto.
17429
17430Defaults to @samp{"on"}.
17431
17432@end deftypevr
17433
17434@deftypevr {@code{tlp-configuration} parameter} string runtime-pm-on-bat
17435Same as @code{runtime-pm-ac} but on BAT mode.
17436
17437Defaults to @samp{"auto"}.
17438
17439@end deftypevr
17440
17441@deftypevr {@code{tlp-configuration} parameter} boolean runtime-pm-all?
17442Runtime Power Management for all PCI(e) bus devices, except blacklisted
17443ones.
17444
17445Defaults to @samp{#t}.
17446
17447@end deftypevr
17448
17449@deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list runtime-pm-blacklist
9fc221b5 17450Exclude specified PCI(e) device addresses from Runtime Power Management.
bfbf6e1e
MO
17451
17452Defaults to @samp{disabled}.
17453
17454@end deftypevr
17455
17456@deftypevr {@code{tlp-configuration} parameter} space-separated-string-list runtime-pm-driver-blacklist
17457Exclude PCI(e) devices assigned to the specified drivers from Runtime
17458Power Management.
17459
17460@end deftypevr
17461
17462@deftypevr {@code{tlp-configuration} parameter} boolean usb-autosuspend?
17463Enable USB autosuspend feature.
17464
17465Defaults to @samp{#t}.
17466
17467@end deftypevr
17468
17469@deftypevr {@code{tlp-configuration} parameter} maybe-string usb-blacklist
17470Exclude specified devices from USB autosuspend.
17471
17472Defaults to @samp{disabled}.
17473
17474@end deftypevr
17475
17476@deftypevr {@code{tlp-configuration} parameter} boolean usb-blacklist-wwan?
17477Exclude WWAN devices from USB autosuspend.
17478
17479Defaults to @samp{#t}.
17480
17481@end deftypevr
17482
17483@deftypevr {@code{tlp-configuration} parameter} maybe-string usb-whitelist
17484Include specified devices into USB autosuspend, even if they are already
17485excluded by the driver or via @code{usb-blacklist-wwan?}.
17486
17487Defaults to @samp{disabled}.
17488
17489@end deftypevr
17490
17491@deftypevr {@code{tlp-configuration} parameter} maybe-boolean usb-autosuspend-disable-on-shutdown?
17492Enable USB autosuspend before shutdown.
17493
17494Defaults to @samp{disabled}.
17495
17496@end deftypevr
17497
17498@deftypevr {@code{tlp-configuration} parameter} boolean restore-device-state-on-startup?
17499Restore radio device state (bluetooth, wifi, wwan) from previous
17500shutdown on system startup.
17501
17502Defaults to @samp{#f}.
17503
17504@end deftypevr
17505
d7fa39cc
CAW
17506
17507The @code{(gnu services pm)} module provides an interface to
17508thermald, a CPU frequency scaling service which helps prevent overheating.
17509
17510@defvr {Scheme Variable} thermald-service-type
17511This is the service type for
17512@uref{https://01.org/linux-thermal-daemon/, thermald}, the Linux
17513Thermal Daemon, which is responsible for controlling the thermal state
17514of processors and preventing overheating.
17515@end defvr
17516
17517@deftp {Data Type} thermald-configuration
17518Data type representing the configuration of @code{thermald-service-type}.
17519
17520@table @asis
17521@item @code{ignore-cpuid-check?} (default: @code{#f})
17522Ignore cpuid check for supported CPU models.
17523
17524@item @code{thermald} (default: @var{thermald})
17525Package object of thermald.
17526
17527@end table
17528@end deftp
17529
06465d2b
PM
17530@node Audio Services
17531@subsubsection Audio Services
17532
17533The @code{(gnu services audio)} module provides a service to start MPD
17534(the Music Player Daemon).
17535
17536@cindex mpd
17537@subsubheading Music Player Daemon
17538
17539The Music Player Daemon (MPD) is a service that can play music while
17540being controlled from the local machine or over the network by a variety
17541of clients.
17542
17543The following example shows how one might run @code{mpd} as user
17544@code{"bob"} on port @code{6666}. It uses pulseaudio for output.
17545
17546@example
17547(service mpd-service-type
17548 (mpd-configuration
17549 (user "bob")
17550 (port "6666")))
17551@end example
17552
17553@defvr {Scheme Variable} mpd-service-type
17554The service type for @command{mpd}
17555@end defvr
17556
17557@deftp {Data Type} mpd-configuration
17558Data type representing the configuration of @command{mpd}.
17559
17560@table @asis
17561@item @code{user} (default: @code{"mpd"})
17562The user to run mpd as.
17563
17564@item @code{music-dir} (default: @code{"~/Music"})
17565The directory to scan for music files.
17566
17567@item @code{playlist-dir} (default: @code{"~/.mpd/playlists"})
17568The directory to store playlists.
17569
06465d2b
PM
17570@item @code{port} (default: @code{"6600"})
17571The port to run mpd on.
17572
17573@item @code{address} (default: @code{"any"})
17574The address that mpd will bind to. To use a Unix domain socket,
17575an absolute path can be specified here.
17576
17577@end table
17578@end deftp
d7fa39cc 17579
e6051057
RM
17580@node Virtualization Services
17581@subsubsection Virtualization services
6738c29f 17582
e6051057 17583The @code{(gnu services virtualization)} module provides services for
6738c29f
LC
17584the libvirt and virtlog daemons, as well as other virtualization-related
17585services.
e6051057
RM
17586
17587@subsubheading Libvirt daemon
17588@code{libvirtd} is the server side daemon component of the libvirt
17589virtualization management system. This daemon runs on host servers
17590and performs required management tasks for virtualized guests.
17591
17592@deffn {Scheme Variable} libvirt-service-type
17593This is the type of the @uref{https://libvirt.org, libvirt daemon}.
17594Its value must be a @code{libvirt-configuration}.
17595
17596@example
17597(service libvirt-service-type
17598 (libvirt-configuration
17599 (unix-sock-group "libvirt")
17600 (tls-port "16555")))
17601@end example
17602@end deffn
17603
17604@c Auto-generated with (generate-libvirt-documentation)
17605Available @code{libvirt-configuration} fields are:
17606
17607@deftypevr {@code{libvirt-configuration} parameter} package libvirt
17608Libvirt package.
17609
17610@end deftypevr
17611
17612@deftypevr {@code{libvirt-configuration} parameter} boolean listen-tls?
17613Flag listening for secure TLS connections on the public TCP/IP port.
17614must set @code{listen} for this to have any effect.
17615
17616It is necessary to setup a CA and issue server certificates before using
17617this capability.
17618
17619Defaults to @samp{#t}.
17620
17621@end deftypevr
17622
17623@deftypevr {@code{libvirt-configuration} parameter} boolean listen-tcp?
17624Listen for unencrypted TCP connections on the public TCP/IP port. must
17625set @code{listen} for this to have any effect.
17626
17627Using the TCP socket requires SASL authentication by default. Only SASL
17628mechanisms which support data encryption are allowed. This is
17629DIGEST_MD5 and GSSAPI (Kerberos5)
17630
17631Defaults to @samp{#f}.
17632
17633@end deftypevr
17634
17635@deftypevr {@code{libvirt-configuration} parameter} string tls-port
17636Port for accepting secure TLS connections This can be a port number, or
17637service name
17638
17639Defaults to @samp{"16514"}.
17640
17641@end deftypevr
17642
17643@deftypevr {@code{libvirt-configuration} parameter} string tcp-port
17644Port for accepting insecure TCP connections This can be a port number,
17645or service name
17646
17647Defaults to @samp{"16509"}.
17648
17649@end deftypevr
17650
17651@deftypevr {@code{libvirt-configuration} parameter} string listen-addr
17652IP address or hostname used for client connections.
17653
17654Defaults to @samp{"0.0.0.0"}.
17655
17656@end deftypevr
17657
17658@deftypevr {@code{libvirt-configuration} parameter} boolean mdns-adv?
17659Flag toggling mDNS advertisement of the libvirt service.
17660
17661Alternatively can disable for all services on a host by stopping the
17662Avahi daemon.
17663
17664Defaults to @samp{#f}.
17665
17666@end deftypevr
17667
17668@deftypevr {@code{libvirt-configuration} parameter} string mdns-name
17669Default mDNS advertisement name. This must be unique on the immediate
17670broadcast network.
17671
17672Defaults to @samp{"Virtualization Host <hostname>"}.
17673
17674@end deftypevr
17675
17676@deftypevr {@code{libvirt-configuration} parameter} string unix-sock-group
17677UNIX domain socket group ownership. This can be used to allow a
17678'trusted' set of users access to management capabilities without
17679becoming root.
17680
17681Defaults to @samp{"root"}.
17682
17683@end deftypevr
17684
17685@deftypevr {@code{libvirt-configuration} parameter} string unix-sock-ro-perms
17686UNIX socket permissions for the R/O socket. This is used for monitoring
17687VM status only.
17688
17689Defaults to @samp{"0777"}.
17690
17691@end deftypevr
17692
17693@deftypevr {@code{libvirt-configuration} parameter} string unix-sock-rw-perms
17694UNIX socket permissions for the R/W socket. Default allows only root.
17695If PolicyKit is enabled on the socket, the default will change to allow
17696everyone (eg, 0777)
17697
17698Defaults to @samp{"0770"}.
17699
17700@end deftypevr
17701
17702@deftypevr {@code{libvirt-configuration} parameter} string unix-sock-admin-perms
17703UNIX socket permissions for the admin socket. Default allows only owner
17704(root), do not change it unless you are sure to whom you are exposing
17705the access to.
17706
17707Defaults to @samp{"0777"}.
17708
17709@end deftypevr
17710
17711@deftypevr {@code{libvirt-configuration} parameter} string unix-sock-dir
17712The directory in which sockets will be found/created.
17713
17714Defaults to @samp{"/var/run/libvirt"}.
17715
17716@end deftypevr
17717
17718@deftypevr {@code{libvirt-configuration} parameter} string auth-unix-ro
17719Authentication scheme for UNIX read-only sockets. By default socket
17720permissions allow anyone to connect
17721
17722Defaults to @samp{"polkit"}.
17723
17724@end deftypevr
17725
17726@deftypevr {@code{libvirt-configuration} parameter} string auth-unix-rw
17727Authentication scheme for UNIX read-write sockets. By default socket
17728permissions only allow root. If PolicyKit support was compiled into
17729libvirt, the default will be to use 'polkit' auth.
17730
17731Defaults to @samp{"polkit"}.
17732
17733@end deftypevr
17734
17735@deftypevr {@code{libvirt-configuration} parameter} string auth-tcp
17736Authentication scheme for TCP sockets. If you don't enable SASL, then
17737all TCP traffic is cleartext. Don't do this outside of a dev/test
17738scenario.
17739
17740Defaults to @samp{"sasl"}.
17741
17742@end deftypevr
17743
17744@deftypevr {@code{libvirt-configuration} parameter} string auth-tls
17745Authentication scheme for TLS sockets. TLS sockets already have
17746encryption provided by the TLS layer, and limited authentication is done
17747by certificates.
17748
17749It is possible to make use of any SASL authentication mechanism as well,
17750by using 'sasl' for this option
17751
17752Defaults to @samp{"none"}.
17753
17754@end deftypevr
17755
17756@deftypevr {@code{libvirt-configuration} parameter} optional-list access-drivers
17757API access control scheme.
17758
17759By default an authenticated user is allowed access to all APIs. Access
17760drivers can place restrictions on this.
17761
17762Defaults to @samp{()}.
17763
17764@end deftypevr
17765
17766@deftypevr {@code{libvirt-configuration} parameter} string key-file
17767Server key file path. If set to an empty string, then no private key is
17768loaded.
17769
17770Defaults to @samp{""}.
17771
17772@end deftypevr
17773
17774@deftypevr {@code{libvirt-configuration} parameter} string cert-file
17775Server key file path. If set to an empty string, then no certificate is
17776loaded.
17777
17778Defaults to @samp{""}.
17779
17780@end deftypevr
17781
17782@deftypevr {@code{libvirt-configuration} parameter} string ca-file
17783Server key file path. If set to an empty string, then no CA certificate
17784is loaded.
17785
17786Defaults to @samp{""}.
17787
17788@end deftypevr
17789
17790@deftypevr {@code{libvirt-configuration} parameter} string crl-file
17791Certificate revocation list path. If set to an empty string, then no
17792CRL is loaded.
17793
17794Defaults to @samp{""}.
17795
17796@end deftypevr
17797
17798@deftypevr {@code{libvirt-configuration} parameter} boolean tls-no-sanity-cert
17799Disable verification of our own server certificates.
17800
17801When libvirtd starts it performs some sanity checks against its own
17802certificates.
17803
17804Defaults to @samp{#f}.
17805
17806@end deftypevr
17807
17808@deftypevr {@code{libvirt-configuration} parameter} boolean tls-no-verify-cert
17809Disable verification of client certificates.
17810
17811Client certificate verification is the primary authentication mechanism.
17812Any client which does not present a certificate signed by the CA will be
17813rejected.
17814
17815Defaults to @samp{#f}.
17816
17817@end deftypevr
17818
17819@deftypevr {@code{libvirt-configuration} parameter} optional-list tls-allowed-dn-list
17820Whitelist of allowed x509 Distinguished Name.
17821
17822Defaults to @samp{()}.
17823
17824@end deftypevr
17825
17826@deftypevr {@code{libvirt-configuration} parameter} optional-list sasl-allowed-usernames
17827Whitelist of allowed SASL usernames. The format for username depends on
17828the SASL authentication mechanism.
17829
17830Defaults to @samp{()}.
17831
17832@end deftypevr
17833
17834@deftypevr {@code{libvirt-configuration} parameter} string tls-priority
17835Override the compile time default TLS priority string. The default is
17836usually "NORMAL" unless overridden at build time. Only set this is it
17837is desired for libvirt to deviate from the global default settings.
17838
17839Defaults to @samp{"NORMAL"}.
17840
17841@end deftypevr
17842
17843@deftypevr {@code{libvirt-configuration} parameter} integer max-clients
17844Maximum number of concurrent client connections to allow over all
17845sockets combined.
17846
17847Defaults to @samp{5000}.
17848
17849@end deftypevr
17850
17851@deftypevr {@code{libvirt-configuration} parameter} integer max-queued-clients
17852Maximum length of queue of connections waiting to be accepted by the
17853daemon. Note, that some protocols supporting retransmission may obey
17854this so that a later reattempt at connection succeeds.
17855
17856Defaults to @samp{1000}.
17857
17858@end deftypevr
17859
17860@deftypevr {@code{libvirt-configuration} parameter} integer max-anonymous-clients
17861Maximum length of queue of accepted but not yet authenticated clients.
17862Set this to zero to turn this feature off
17863
17864Defaults to @samp{20}.
17865
17866@end deftypevr
17867
17868@deftypevr {@code{libvirt-configuration} parameter} integer min-workers
17869Number of workers to start up initially.
17870
17871Defaults to @samp{5}.
17872
17873@end deftypevr
17874
17875@deftypevr {@code{libvirt-configuration} parameter} integer max-workers
17876Maximum number of worker threads.
17877
17878If the number of active clients exceeds @code{min-workers}, then more
17879threads are spawned, up to max_workers limit. Typically you'd want
17880max_workers to equal maximum number of clients allowed.
17881
17882Defaults to @samp{20}.
17883
17884@end deftypevr
17885
17886@deftypevr {@code{libvirt-configuration} parameter} integer prio-workers
17887Number of priority workers. If all workers from above pool are stuck,
17888some calls marked as high priority (notably domainDestroy) can be
17889executed in this pool.
17890
17891Defaults to @samp{5}.
17892
17893@end deftypevr
17894
17895@deftypevr {@code{libvirt-configuration} parameter} integer max-requests
17896Total global limit on concurrent RPC calls.
17897
17898Defaults to @samp{20}.
17899
17900@end deftypevr
17901
17902@deftypevr {@code{libvirt-configuration} parameter} integer max-client-requests
17903Limit on concurrent requests from a single client connection. To avoid
17904one client monopolizing the server this should be a small fraction of
17905the global max_requests and max_workers parameter.
17906
17907Defaults to @samp{5}.
17908
17909@end deftypevr
17910
17911@deftypevr {@code{libvirt-configuration} parameter} integer admin-min-workers
17912Same as @code{min-workers} but for the admin interface.
17913
17914Defaults to @samp{1}.
17915
17916@end deftypevr
17917
17918@deftypevr {@code{libvirt-configuration} parameter} integer admin-max-workers
17919Same as @code{max-workers} but for the admin interface.
17920
17921Defaults to @samp{5}.
17922
17923@end deftypevr
17924
17925@deftypevr {@code{libvirt-configuration} parameter} integer admin-max-clients
17926Same as @code{max-clients} but for the admin interface.
17927
17928Defaults to @samp{5}.
17929
17930@end deftypevr
17931
17932@deftypevr {@code{libvirt-configuration} parameter} integer admin-max-queued-clients
17933Same as @code{max-queued-clients} but for the admin interface.
17934
17935Defaults to @samp{5}.
17936
17937@end deftypevr
17938
17939@deftypevr {@code{libvirt-configuration} parameter} integer admin-max-client-requests
17940Same as @code{max-client-requests} but for the admin interface.
17941
17942Defaults to @samp{5}.
17943
17944@end deftypevr
17945
17946@deftypevr {@code{libvirt-configuration} parameter} integer log-level
17947Logging level. 4 errors, 3 warnings, 2 information, 1 debug.
17948
17949Defaults to @samp{3}.
17950
17951@end deftypevr
17952
17953@deftypevr {@code{libvirt-configuration} parameter} string log-filters
17954Logging filters.
17955
17956A filter allows to select a different logging level for a given category
17957of logs The format for a filter is one of:
17958
17959@itemize @bullet
17960@item
17961x:name
17962
17963@item
17964x:+name
17965
17966@end itemize
17967
17968where @code{name} is a string which is matched against the category
17969given in the @code{VIR_LOG_INIT()} at the top of each libvirt source
17970file, e.g., "remote", "qemu", or "util.json" (the name in the filter can
17971be a substring of the full category name, in order to match multiple
17972similar categories), the optional "+" prefix tells libvirt to log stack
17973trace for each message matching name, and @code{x} is the minimal level
17974where matching messages should be logged:
17975
17976@itemize @bullet
17977@item
179781: DEBUG
17979
17980@item
179812: INFO
17982
17983@item
179843: WARNING
17985
17986@item
179874: ERROR
17988
17989@end itemize
17990
17991Multiple filters can be defined in a single filters statement, they just
17992need to be separated by spaces.
17993
17994Defaults to @samp{"3:remote 4:event"}.
17995
17996@end deftypevr
17997
17998@deftypevr {@code{libvirt-configuration} parameter} string log-outputs
17999Logging outputs.
18000
18001An output is one of the places to save logging information The format
18002for an output can be:
18003
18004@table @code
18005@item x:stderr
18006output goes to stderr
18007
18008@item x:syslog:name
18009use syslog for the output and use the given name as the ident
18010
18011@item x:file:file_path
18012output to a file, with the given filepath
18013
18014@item x:journald
18015output to journald logging system
18016
18017@end table
18018
18019In all case the x prefix is the minimal level, acting as a filter
18020
18021@itemize @bullet
18022@item
180231: DEBUG
18024
18025@item
180262: INFO
18027
18028@item
180293: WARNING
18030
18031@item
180324: ERROR
18033
18034@end itemize
18035
18036Multiple outputs can be defined, they just need to be separated by
18037spaces.
18038
18039Defaults to @samp{"3:stderr"}.
18040
18041@end deftypevr
18042
18043@deftypevr {@code{libvirt-configuration} parameter} integer audit-level
18044Allows usage of the auditing subsystem to be altered
18045
18046@itemize @bullet
18047@item
180480: disable all auditing
18049
18050@item
180511: enable auditing, only if enabled on host
18052
18053@item
180542: enable auditing, and exit if disabled on host.
18055
18056@end itemize
18057
18058Defaults to @samp{1}.
18059
18060@end deftypevr
18061
18062@deftypevr {@code{libvirt-configuration} parameter} boolean audit-logging
18063Send audit messages via libvirt logging infrastructure.
18064
18065Defaults to @samp{#f}.
18066
18067@end deftypevr
18068
18069@deftypevr {@code{libvirt-configuration} parameter} optional-string host-uuid
18070Host UUID. UUID must not have all digits be the same.
18071
18072Defaults to @samp{""}.
18073
18074@end deftypevr
18075
18076@deftypevr {@code{libvirt-configuration} parameter} string host-uuid-source
18077Source to read host UUID.
18078
18079@itemize @bullet
18080@item
18081@code{smbios}: fetch the UUID from @code{dmidecode -s system-uuid}
18082
18083@item
18084@code{machine-id}: fetch the UUID from @code{/etc/machine-id}
18085
18086@end itemize
18087
18088If @code{dmidecode} does not provide a valid UUID a temporary UUID will
18089be generated.
18090
18091Defaults to @samp{"smbios"}.
18092
18093@end deftypevr
18094
18095@deftypevr {@code{libvirt-configuration} parameter} integer keepalive-interval
18096A keepalive message is sent to a client after @code{keepalive_interval}
18097seconds of inactivity to check if the client is still responding. If
18098set to -1, libvirtd will never send keepalive requests; however clients
18099can still send them and the daemon will send responses.
18100
18101Defaults to @samp{5}.
18102
18103@end deftypevr
18104
18105@deftypevr {@code{libvirt-configuration} parameter} integer keepalive-count
18106Maximum number of keepalive messages that are allowed to be sent to the
18107client without getting any response before the connection is considered
18108broken.
18109
18110In other words, the connection is automatically closed approximately
18111after @code{keepalive_interval * (keepalive_count + 1)} seconds since
18112the last message received from the client. When @code{keepalive-count}
18113is set to 0, connections will be automatically closed after
18114@code{keepalive-interval} seconds of inactivity without sending any
18115keepalive messages.
18116
18117Defaults to @samp{5}.
18118
18119@end deftypevr
18120
18121@deftypevr {@code{libvirt-configuration} parameter} integer admin-keepalive-interval
18122Same as above but for admin interface.
18123
18124Defaults to @samp{5}.
18125
18126@end deftypevr
18127
18128@deftypevr {@code{libvirt-configuration} parameter} integer admin-keepalive-count
18129Same as above but for admin interface.
18130
18131Defaults to @samp{5}.
18132
18133@end deftypevr
18134
18135@deftypevr {@code{libvirt-configuration} parameter} integer ovs-timeout
18136Timeout for Open vSwitch calls.
18137
18138The @code{ovs-vsctl} utility is used for the configuration and its
18139timeout option is set by default to 5 seconds to avoid potential
18140infinite waits blocking libvirt.
18141
18142Defaults to @samp{5}.
18143
18144@end deftypevr
18145
18146@c %end of autogenerated docs
18147
18148@subsubheading Virtlog daemon
18149The virtlogd service is a server side daemon component of libvirt that is
18150used to manage logs from virtual machine consoles.
18151
18152This daemon is not used directly by libvirt client applications, rather it
18153is called on their behalf by @code{libvirtd}. By maintaining the logs in a
18154standalone daemon, the main @code{libvirtd} daemon can be restarted without
18155risk of losing logs. The @code{virtlogd} daemon has the ability to re-exec()
18156itself upon receiving @code{SIGUSR1}, to allow live upgrades without downtime.
18157
18158@deffn {Scheme Variable} virtlog-service-type
18159This is the type of the virtlog daemon.
18160Its value must be a @code{virtlog-configuration}.
18161
18162@example
18163(service virtlog-service-type
18164 (virtlog-configuration
18165 (max-clients 1000)))
18166@end example
18167@end deffn
18168
18169@deftypevr {@code{virtlog-configuration} parameter} integer log-level
18170Logging level. 4 errors, 3 warnings, 2 information, 1 debug.
18171
18172Defaults to @samp{3}.
18173
18174@end deftypevr
18175
18176@deftypevr {@code{virtlog-configuration} parameter} string log-filters
18177Logging filters.
18178
18179A filter allows to select a different logging level for a given category
18180of logs The format for a filter is one of:
18181
18182@itemize @bullet
18183@item
18184x:name
18185
18186@item
18187x:+name
18188
18189@end itemize
18190
18191where @code{name} is a string which is matched against the category
18192given in the @code{VIR_LOG_INIT()} at the top of each libvirt source
18193file, e.g., "remote", "qemu", or "util.json" (the name in the filter can
18194be a substring of the full category name, in order to match multiple
18195similar categories), the optional "+" prefix tells libvirt to log stack
18196trace for each message matching name, and @code{x} is the minimal level
18197where matching messages should be logged:
18198
18199@itemize @bullet
18200@item
182011: DEBUG
18202
18203@item
182042: INFO
18205
18206@item
182073: WARNING
18208
18209@item
182104: ERROR
18211
18212@end itemize
18213
18214Multiple filters can be defined in a single filters statement, they just
18215need to be separated by spaces.
18216
18217Defaults to @samp{"3:remote 4:event"}.
18218
18219@end deftypevr
18220
18221@deftypevr {@code{virtlog-configuration} parameter} string log-outputs
18222Logging outputs.
18223
18224An output is one of the places to save logging information The format
18225for an output can be:
18226
18227@table @code
18228@item x:stderr
18229output goes to stderr
18230
18231@item x:syslog:name
18232use syslog for the output and use the given name as the ident
18233
18234@item x:file:file_path
18235output to a file, with the given filepath
18236
18237@item x:journald
18238output to journald logging system
18239
18240@end table
18241
18242In all case the x prefix is the minimal level, acting as a filter
18243
18244@itemize @bullet
18245@item
182461: DEBUG
18247
18248@item
182492: INFO
18250
18251@item
182523: WARNING
18253
18254@item
182554: ERROR
18256
18257@end itemize
18258
18259Multiple outputs can be defined, they just need to be separated by
18260spaces.
18261
18262Defaults to @samp{"3:stderr"}.
18263
18264@end deftypevr
18265
18266@deftypevr {@code{virtlog-configuration} parameter} integer max-clients
18267Maximum number of concurrent client connections to allow over all
18268sockets combined.
18269
18270Defaults to @samp{1024}.
18271
18272@end deftypevr
18273
18274@deftypevr {@code{virtlog-configuration} parameter} integer max-size
18275Maximum file size before rolling over.
18276
18277Defaults to @samp{2MB}
18278
18279@end deftypevr
18280
18281@deftypevr {@code{virtlog-configuration} parameter} integer max-backups
18282Maximum number of backup files to keep.
18283
18284Defaults to @samp{3}
18285
18286@end deftypevr
18287
6738c29f
LC
18288@subsubheading Transparent Emulation with QEMU
18289
18290@cindex emulation
18291@cindex @code{binfmt_misc}
18292@code{qemu-binfmt-service-type} provides support for transparent
18293emulation of program binaries built for different architectures---e.g.,
18294it allows you to transparently execute an ARMv7 program on an x86_64
18295machine. It achieves this by combining the @uref{https://www.qemu.org,
18296QEMU} emulator and the @code{binfmt_misc} feature of the kernel Linux.
18297
18298@defvr {Scheme Variable} qemu-binfmt-service-type
18299This is the type of the QEMU/binfmt service for transparent emulation.
18300Its value must be a @code{qemu-binfmt-configuration} object, which
18301specifies the QEMU package to use as well as the architecture we want to
18302emulated:
18303
18304@example
18305(service qemu-binfmt-service-type
18306 (qemu-binfmt-configuration
18307 (platforms (lookup-qemu-platforms "arm" "aarch64" "ppc"))))
18308@end example
18309
18310In this example, we enable transparent emulation for the ARM and aarch64
18311platforms. Running @code{herd stop qemu-binfmt} turns it off, and
18312running @code{herd start qemu-binfmt} turns it back on (@pxref{Invoking
18313herd, the @command{herd} command,, shepherd, The GNU Shepherd Manual}).
18314@end defvr
18315
18316@deftp {Data Type} qemu-binfmt-configuration
18317This is the configuration for the @code{qemu-binfmt} service.
18318
18319@table @asis
18320@item @code{platforms} (default: @code{'()})
18321The list of emulated QEMU platforms. Each item must be a @dfn{platform
18322object} as returned by @code{lookup-qemu-platforms} (see below).
18323
71b98b9d
LC
18324@item @code{guix-support?} (default: @code{#f})
18325When it is true, QEMU and all its dependencies are added to the build
18326environment of @command{guix-daemon} (@pxref{Invoking guix-daemon,
18327@code{--chroot-directory} option}). This allows the @code{binfmt_misc}
18328handlers to be used within the build environment, which in turn means
18329that you can transparently build programs for another architecture.
18330
18331For example, let's suppose you're on an x86_64 machine and you have this
18332service:
18333
18334@example
18335(service qemu-binfmt-service-type
18336 (qemu-binfmt-configuration
18337 (platforms (lookup-qemu-platforms "arm"))
ba491912 18338 (guix-support? #t)))
71b98b9d
LC
18339@end example
18340
18341You can run:
18342
18343@example
18344guix build -s armhf-linux inkscape
18345@end example
18346
18347@noindent
18348and it will build Inkscape for ARMv7 @emph{as if it were a native
18349build}, transparently using QEMU to emulate the ARMv7 CPU. Pretty handy
18350if you'd like to test a package build for an architecture you don't have
18351access to!
18352
6738c29f
LC
18353@item @code{qemu} (default: @code{qemu})
18354The QEMU package to use.
18355@end table
18356@end deftp
18357
18358@deffn {Scheme Procedure} lookup-qemu-platforms @var{platforms}@dots{}
18359Return the list of QEMU platform objects corresponding to
18360@var{platforms}@dots{}. @var{platforms} must be a list of strings
18361corresponding to platform names, such as @code{"arm"}, @code{"sparc"},
18362@code{"mips64el"}, and so on.
18363@end deffn
18364
18365@deffn {Scheme Procedure} qemu-platform? @var{obj}
18366Return true if @var{obj} is a platform object.
18367@end deffn
18368
18369@deffn {Scheme Procedure} qemu-platform-name @var{platform}
18370Return the name of @var{platform}---a string such as @code{"arm"}.
18371@end deffn
e6051057 18372
05f1cb3c
AW
18373@node Version Control Services
18374@subsubsection Version Control Services
18375
18376The @code{(gnu services version-control)} module provides a service to
03e1cca2 18377allow remote access to local Git repositories. There are three options:
41034934 18378the @code{git-daemon-service}, which provides access to repositories via
03e1cca2 18379the @code{git://} unsecured TCP-based protocol, extending the
41034934 18380@code{nginx} web server to proxy some requests to
03e1cca2
LF
18381@code{git-http-backend}, or providing a web interface with
18382@code{cgit-service-type}.
05f1cb3c
AW
18383
18384@deffn {Scheme Procedure} git-daemon-service [#:config (git-daemon-configuration)]
18385
18386Return a service that runs @command{git daemon}, a simple TCP server to
18387expose repositories over the Git protocol for anonymous access.
18388
18389The optional @var{config} argument should be a
18390@code{<git-daemon-configuration>} object, by default it allows read-only
18391access to exported@footnote{By creating the magic file
18392"git-daemon-export-ok" in the repository directory.} repositories under
18393@file{/srv/git}.
18394
18395@end deffn
18396
18397@deftp {Data Type} git-daemon-configuration
18398Data type representing the configuration for @code{git-daemon-service}.
18399
18400@table @asis
18401@item @code{package} (default: @var{git})
18402Package object of the Git distributed version control system.
18403
18404@item @code{export-all?} (default: @var{#f})
18405Whether to allow access for all Git repositories, even if they do not
18406have the @file{git-daemon-export-ok} file.
18407
18408@item @code{base-path} (default: @file{/srv/git})
18409Whether to remap all the path requests as relative to the given path.
18410If you run git daemon with @var{(base-path "/srv/git")} on example.com,
18411then if you later try to pull @code{git://example.com/hello.git}, git
18412daemon will interpret the path as @code{/srv/git/hello.git}.
18413
18414@item @code{user-path} (default: @var{#f})
18415Whether to allow @code{~user} notation to be used in requests. When
18416specified with empty string, requests to @code{git://host/~alice/foo} is
18417taken as a request to access @code{foo} repository in the home directory
18418of user @code{alice}. If @var{(user-path "path")} is specified, the
18419same request is taken as a request to access @code{path/foo} repository
18420in the home directory of user @code{alice}.
18421
18422@item @code{listen} (default: @var{'()})
18423Whether to listen on specific IP addresses or hostnames, defaults to
18424all.
18425
18426@item @code{port} (default: @var{#f})
18427Whether to listen on an alternative port, which defaults to 9418.
18428
18429@item @code{whitelist} (default: @var{'()})
18430If not empty, only allow access to this list of directories.
18431
18432@item @code{extra-options} (default: @var{'()})
18433Extra options will be passed to @code{git daemon}, please run
18434@command{man git-daemon} for more information.
18435
18436@end table
18437@end deftp
18438
41034934
AW
18439The @code{git://} protocol lacks authentication. When you pull from a
18440repository fetched via @code{git://}, you don't know that the data you
18441receive was modified is really coming from the specified host, and you
18442have your connection is subject to eavesdropping. It's better to use an
18443authenticated and encrypted transport, such as @code{https}. Although Git allows you
18444to serve repositories using unsophisticated file-based web servers,
18445there is a faster protocol implemented by the @code{git-http-backend}
18446program. This program is the back-end of a proper Git web service. It
18447is designed to sit behind a FastCGI proxy. @xref{Web Services}, for more
18448on running the necessary @code{fcgiwrap} daemon.
18449
18450Guix has a separate configuration data type for serving Git repositories
18451over HTTP.
18452
18453@deftp {Data Type} git-http-configuration
18454Data type representing the configuration for @code{git-http-service}.
18455
18456@table @asis
18457@item @code{package} (default: @var{git})
18458Package object of the Git distributed version control system.
18459
18460@item @code{git-root} (default: @file{/srv/git})
18461Directory containing the Git repositories to expose to the world.
18462
18463@item @code{export-all?} (default: @var{#f})
18464Whether to expose access for all Git repositories in @var{git-root},
18465even if they do not have the @file{git-daemon-export-ok} file.
18466
18467@item @code{uri-path} (default: @file{/git/})
18468Path prefix for Git access. With the default @code{/git/} prefix, this
18469will map @code{http://@var{server}/git/@var{repo}.git} to
18470@code{/srv/git/@var{repo}.git}. Requests whose URI paths do not begin
18471with this prefix are not passed on to this Git instance.
18472
18473@item @code{fcgiwrap-socket} (default: @code{127.0.0.1:9000})
18474The socket on which the @code{fcgiwrap} daemon is listening. @xref{Web
18475Services}.
18476@end table
18477@end deftp
18478
18479There is no @code{git-http-service-type}, currently; instead you can
18480create an @code{nginx-location-configuration} from a
18481@code{git-http-configuration} and then add that location to a web
18482server.
18483
18484@deffn {Scheme Procedure} git-http-nginx-location-configuration @
18485 [config=(git-http-configuration)]
18486Compute an @code{nginx-location-configuration} that corresponds to the
18487given Git http configuration. An example nginx service definition to
18488serve the default @file{/srv/git} over HTTPS might be:
18489
18490@example
18491(service nginx-service-type
18492 (nginx-configuration
18493 (server-blocks
18494 (list
18495 (nginx-server-configuration
8b223cea 18496 (listen '("443 ssl"))
41034934
AW
18497 (server-name "git.my-host.org")
18498 (ssl-certificate
18499 "/etc/letsencrypt/live/git.my-host.org/fullchain.pem")
18500 (ssl-certificate-key
18501 "/etc/letsencrypt/live/git.my-host.org/privkey.pem")
18502 (locations
18503 (list
18504 (git-http-nginx-location-configuration
18505 (git-http-configuration (uri-path "/"))))))))))
18506@end example
18507
18508This example assumes that you are using Let's Encrypt to get your TLS
18509certificate. @xref{Certificate Services}. The default @code{certbot}
18510service will redirect all HTTP traffic on @code{git.my-host.org} to
18511HTTPS. You will also need to add an @code{fcgiwrap} proxy to your
18512system services. @xref{Web Services}.
18513@end deffn
05f1cb3c 18514
032a2760
OP
18515@subsubheading Cgit Service
18516
18517@cindex Cgit service
18518@cindex Git, web interface
18519@uref{https://git.zx2c4.com/cgit/, Cgit} is a web frontend for Git
18520repositories written in C.
18521
18522The following example will configure the service with default values.
18523By default, Cgit can be accessed on port 80 (@code{http://localhost:80}).
18524
18525@example
032a2760
OP
18526(service cgit-service-type)
18527@end example
18528
e1cf4fd2
OP
18529@c %start of fragment
18530
18531Available @code{cgit-configuration} fields are:
18532
18533@deftypevr {@code{cgit-configuration} parameter} package package
18534The CGIT package.
18535
18536@end deftypevr
18537
18538@deftypevr {@code{cgit-configuration} parameter} nginx-server-configuration-list nginx
18539NGINX configuration.
18540
18541@end deftypevr
18542
18543@deftypevr {@code{cgit-configuration} parameter} string about-filter
18544Specifies a command which will be invoked to format the content of about
18545pages (both top-level and for each repository).
18546
18547Defaults to @samp{""}.
18548
18549@end deftypevr
18550
18551@deftypevr {@code{cgit-configuration} parameter} string agefile
18552Specifies a path, relative to each repository path, which can be used to
18553specify the date and time of the youngest commit in the repository.
18554
18555Defaults to @samp{""}.
18556
18557@end deftypevr
18558
18559@deftypevr {@code{cgit-configuration} parameter} string auth-filter
18560Specifies a command that will be invoked for authenticating repository
18561access.
18562
18563Defaults to @samp{""}.
18564
18565@end deftypevr
18566
18567@deftypevr {@code{cgit-configuration} parameter} string branch-sort
18568Flag which, when set to @samp{age}, enables date ordering in the branch
18569ref list, and when set @samp{name} enables ordering by branch name.
18570
18571Defaults to @samp{"name"}.
18572
18573@end deftypevr
18574
18575@deftypevr {@code{cgit-configuration} parameter} string cache-root
18576Path used to store the cgit cache entries.
18577
18578Defaults to @samp{"/var/cache/cgit"}.
18579
18580@end deftypevr
18581
18582@deftypevr {@code{cgit-configuration} parameter} integer cache-static-ttl
18583Number which specifies the time-to-live, in minutes, for the cached
18584version of repository pages accessed with a fixed SHA1.
18585
18586Defaults to @samp{-1}.
18587
18588@end deftypevr
18589
18590@deftypevr {@code{cgit-configuration} parameter} integer cache-dynamic-ttl
18591Number which specifies the time-to-live, in minutes, for the cached
18592version of repository pages accessed without a fixed SHA1.
18593
18594Defaults to @samp{5}.
18595
18596@end deftypevr
18597
18598@deftypevr {@code{cgit-configuration} parameter} integer cache-repo-ttl
18599Number which specifies the time-to-live, in minutes, for the cached
18600version of the repository summary page.
18601
18602Defaults to @samp{5}.
18603
18604@end deftypevr
18605
18606@deftypevr {@code{cgit-configuration} parameter} integer cache-root-ttl
18607Number which specifies the time-to-live, in minutes, for the cached
18608version of the repository index page.
18609
18610Defaults to @samp{5}.
18611
18612@end deftypevr
18613
18614@deftypevr {@code{cgit-configuration} parameter} integer cache-scanrc-ttl
18615Number which specifies the time-to-live, in minutes, for the result of
18616scanning a path for Git repositories.
18617
18618Defaults to @samp{15}.
18619
18620@end deftypevr
18621
18622@deftypevr {@code{cgit-configuration} parameter} integer cache-about-ttl
18623Number which specifies the time-to-live, in minutes, for the cached
18624version of the repository about page.
18625
18626Defaults to @samp{15}.
18627
18628@end deftypevr
18629
18630@deftypevr {@code{cgit-configuration} parameter} integer cache-snapshot-ttl
18631Number which specifies the time-to-live, in minutes, for the cached
18632version of snapshots.
18633
18634Defaults to @samp{5}.
18635
18636@end deftypevr
18637
18638@deftypevr {@code{cgit-configuration} parameter} integer cache-size
18639The maximum number of entries in the cgit cache. When set to @samp{0},
18640caching is disabled.
18641
18642Defaults to @samp{0}.
18643
18644@end deftypevr
18645
18646@deftypevr {@code{cgit-configuration} parameter} boolean case-sensitive-sort?
18647Sort items in the repo list case sensitively.
18648
18649Defaults to @samp{#t}.
18650
18651@end deftypevr
18652
18653@deftypevr {@code{cgit-configuration} parameter} list clone-prefix
18654List of common prefixes which, when combined with a repository URL,
18655generates valid clone URLs for the repository.
18656
18657Defaults to @samp{()}.
18658
18659@end deftypevr
18660
18661@deftypevr {@code{cgit-configuration} parameter} list clone-url
18662List of @code{clone-url} templates.
18663
18664Defaults to @samp{()}.
18665
18666@end deftypevr
18667
18668@deftypevr {@code{cgit-configuration} parameter} string commit-filter
18669Command which will be invoked to format commit messages.
18670
18671Defaults to @samp{""}.
18672
18673@end deftypevr
18674
18675@deftypevr {@code{cgit-configuration} parameter} string commit-sort
18676Flag which, when set to @samp{date}, enables strict date ordering in the
18677commit log, and when set to @samp{topo} enables strict topological
18678ordering.
18679
18680Defaults to @samp{"git log"}.
18681
18682@end deftypevr
18683
18684@deftypevr {@code{cgit-configuration} parameter} string css
18685URL which specifies the css document to include in all cgit pages.
18686
18687Defaults to @samp{"/share/cgit/cgit.css"}.
18688
18689@end deftypevr
18690
18691@deftypevr {@code{cgit-configuration} parameter} string email-filter
18692Specifies a command which will be invoked to format names and email
18693address of committers, authors, and taggers, as represented in various
18694places throughout the cgit interface.
18695
18696Defaults to @samp{""}.
18697
18698@end deftypevr
18699
18700@deftypevr {@code{cgit-configuration} parameter} boolean embedded?
18701Flag which, when set to @samp{#t}, will make cgit generate a HTML
18702fragment suitable for embedding in other HTML pages.
18703
18704Defaults to @samp{#f}.
18705
18706@end deftypevr
18707
18708@deftypevr {@code{cgit-configuration} parameter} boolean enable-commit-graph?
18709Flag which, when set to @samp{#t}, will make cgit print an ASCII-art
18710commit history graph to the left of the commit messages in the
18711repository log page.
18712
18713Defaults to @samp{#f}.
18714
18715@end deftypevr
18716
18717@deftypevr {@code{cgit-configuration} parameter} boolean enable-filter-overrides?
18718Flag which, when set to @samp{#t}, allows all filter settings to be
18719overridden in repository-specific cgitrc files.
18720
18721Defaults to @samp{#f}.
18722
18723@end deftypevr
18724
18725@deftypevr {@code{cgit-configuration} parameter} boolean enable-follow-links?
18726Flag which, when set to @samp{#t}, allows users to follow a file in the
18727log view.
18728
18729Defaults to @samp{#f}.
18730
18731@end deftypevr
18732
18733@deftypevr {@code{cgit-configuration} parameter} boolean enable-http-clone?
18734If set to @samp{#t}, cgit will act as an dumb HTTP endpoint for Git
18735clones.
18736
18737Defaults to @samp{#t}.
18738
18739@end deftypevr
18740
18741@deftypevr {@code{cgit-configuration} parameter} boolean enable-index-links?
18742Flag which, when set to @samp{#t}, will make cgit generate extra links
18743"summary", "commit", "tree" for each repo in the repository index.
18744
18745Defaults to @samp{#f}.
18746
18747@end deftypevr
18748
18749@deftypevr {@code{cgit-configuration} parameter} boolean enable-index-owner?
18750Flag which, when set to @samp{#t}, will make cgit display the owner of
18751each repo in the repository index.
18752
18753Defaults to @samp{#t}.
18754
18755@end deftypevr
18756
18757@deftypevr {@code{cgit-configuration} parameter} boolean enable-log-filecount?
18758Flag which, when set to @samp{#t}, will make cgit print the number of
18759modified files for each commit on the repository log page.
18760
18761Defaults to @samp{#f}.
18762
18763@end deftypevr
18764
18765@deftypevr {@code{cgit-configuration} parameter} boolean enable-log-linecount?
18766Flag which, when set to @samp{#t}, will make cgit print the number of
18767added and removed lines for each commit on the repository log page.
18768
18769Defaults to @samp{#f}.
18770
18771@end deftypevr
18772
18773@deftypevr {@code{cgit-configuration} parameter} boolean enable-remote-branches?
18774Flag which, when set to @code{#t}, will make cgit display remote
18775branches in the summary and refs views.
18776
18777Defaults to @samp{#f}.
18778
18779@end deftypevr
18780
18781@deftypevr {@code{cgit-configuration} parameter} boolean enable-subject-links?
18782Flag which, when set to @code{1}, will make cgit use the subject of the
18783parent commit as link text when generating links to parent commits in
18784commit view.
18785
18786Defaults to @samp{#f}.
18787
18788@end deftypevr
18789
18790@deftypevr {@code{cgit-configuration} parameter} boolean enable-html-serving?
18791Flag which, when set to @samp{#t}, will make cgit use the subject of the
18792parent commit as link text when generating links to parent commits in
18793commit view.
18794
18795Defaults to @samp{#f}.
18796
18797@end deftypevr
18798
18799@deftypevr {@code{cgit-configuration} parameter} boolean enable-tree-linenumbers?
18800Flag which, when set to @samp{#t}, will make cgit generate linenumber
18801links for plaintext blobs printed in the tree view.
18802
18803Defaults to @samp{#t}.
18804
18805@end deftypevr
18806
18807@deftypevr {@code{cgit-configuration} parameter} boolean enable-git-config?
18808Flag which, when set to @samp{#f}, will allow cgit to use Git config to
18809set any repo specific settings.
18810
18811Defaults to @samp{#f}.
18812
18813@end deftypevr
18814
18815@deftypevr {@code{cgit-configuration} parameter} string favicon
18816URL used as link to a shortcut icon for cgit.
18817
18818Defaults to @samp{"/favicon.ico"}.
18819
18820@end deftypevr
18821
18822@deftypevr {@code{cgit-configuration} parameter} string footer
18823The content of the file specified with this option will be included
18824verbatim at the bottom of all pages (i.e. it replaces the standard
18825"generated by..." message).
18826
18827Defaults to @samp{""}.
18828
18829@end deftypevr
18830
18831@deftypevr {@code{cgit-configuration} parameter} string head-include
18832The content of the file specified with this option will be included
18833verbatim in the HTML HEAD section on all pages.
18834
18835Defaults to @samp{""}.
18836
18837@end deftypevr
18838
18839@deftypevr {@code{cgit-configuration} parameter} string header
18840The content of the file specified with this option will be included
18841verbatim at the top of all pages.
18842
18843Defaults to @samp{""}.
18844
18845@end deftypevr
18846
18847@deftypevr {@code{cgit-configuration} parameter} string include
18848Name of a configfile to include before the rest of the current config-
18849file is parsed.
18850
18851Defaults to @samp{""}.
18852
18853@end deftypevr
18854
18855@deftypevr {@code{cgit-configuration} parameter} string index-header
18856The content of the file specified with this option will be included
18857verbatim above the repository index.
18858
18859Defaults to @samp{""}.
18860
18861@end deftypevr
18862
18863@deftypevr {@code{cgit-configuration} parameter} string index-info
18864The content of the file specified with this option will be included
18865verbatim below the heading on the repository index page.
18866
18867Defaults to @samp{""}.
18868
18869@end deftypevr
18870
18871@deftypevr {@code{cgit-configuration} parameter} boolean local-time?
18872Flag which, if set to @samp{#t}, makes cgit print commit and tag times
18873in the servers timezone.
18874
18875Defaults to @samp{#f}.
18876
18877@end deftypevr
18878
18879@deftypevr {@code{cgit-configuration} parameter} string logo
18880URL which specifies the source of an image which will be used as a logo
18881on all cgit pages.
18882
18883Defaults to @samp{"/share/cgit/cgit.png"}.
18884
18885@end deftypevr
18886
18887@deftypevr {@code{cgit-configuration} parameter} string logo-link
18888URL loaded when clicking on the cgit logo image.
18889
18890Defaults to @samp{""}.
18891
18892@end deftypevr
18893
18894@deftypevr {@code{cgit-configuration} parameter} string owner-filter
18895Command which will be invoked to format the Owner column of the main
18896page.
18897
18898Defaults to @samp{""}.
18899
18900@end deftypevr
18901
18902@deftypevr {@code{cgit-configuration} parameter} integer max-atom-items
18903Number of items to display in atom feeds view.
18904
18905Defaults to @samp{10}.
18906
18907@end deftypevr
18908
18909@deftypevr {@code{cgit-configuration} parameter} integer max-commit-count
18910Number of entries to list per page in "log" view.
18911
18912Defaults to @samp{50}.
18913
18914@end deftypevr
18915
18916@deftypevr {@code{cgit-configuration} parameter} integer max-message-length
18917Number of commit message characters to display in "log" view.
18918
18919Defaults to @samp{80}.
18920
18921@end deftypevr
18922
18923@deftypevr {@code{cgit-configuration} parameter} integer max-repo-count
18924Specifies the number of entries to list per page on the repository index
18925page.
18926
18927Defaults to @samp{50}.
18928
18929@end deftypevr
18930
18931@deftypevr {@code{cgit-configuration} parameter} integer max-repodesc-length
18932Specifies the maximum number of repo description characters to display
18933on the repository index page.
18934
18935Defaults to @samp{80}.
18936
18937@end deftypevr
18938
18939@deftypevr {@code{cgit-configuration} parameter} integer max-blob-size
18940Specifies the maximum size of a blob to display HTML for in KBytes.
18941
18942Defaults to @samp{0}.
18943
18944@end deftypevr
18945
18946@deftypevr {@code{cgit-configuration} parameter} string max-stats
18947Maximum statistics period. Valid values are @samp{week},@samp{month},
18948@samp{quarter} and @samp{year}.
18949
18950Defaults to @samp{""}.
18951
18952@end deftypevr
18953
18954@deftypevr {@code{cgit-configuration} parameter} mimetype-alist mimetype
18955Mimetype for the specified filename extension.
18956
18957Defaults to @samp{((gif "image/gif") (html "text/html") (jpg
18958"image/jpeg") (jpeg "image/jpeg") (pdf "application/pdf") (png
18959"image/png") (svg "image/svg+xml"))}.
18960
18961@end deftypevr
18962
18963@deftypevr {@code{cgit-configuration} parameter} string mimetype-file
18964Specifies the file to use for automatic mimetype lookup.
18965
18966Defaults to @samp{""}.
18967
18968@end deftypevr
18969
18970@deftypevr {@code{cgit-configuration} parameter} string module-link
18971Text which will be used as the formatstring for a hyperlink when a
18972submodule is printed in a directory listing.
18973
18974Defaults to @samp{""}.
18975
18976@end deftypevr
18977
18978@deftypevr {@code{cgit-configuration} parameter} boolean nocache?
18979If set to the value @samp{#t} caching will be disabled.
18980
18981Defaults to @samp{#f}.
18982
18983@end deftypevr
18984
18985@deftypevr {@code{cgit-configuration} parameter} boolean noplainemail?
18986If set to @samp{#t} showing full author email addresses will be
18987disabled.
18988
18989Defaults to @samp{#f}.
18990
18991@end deftypevr
18992
18993@deftypevr {@code{cgit-configuration} parameter} boolean noheader?
18994Flag which, when set to @samp{#t}, will make cgit omit the standard
18995header on all pages.
18996
18997Defaults to @samp{#f}.
18998
18999@end deftypevr
19000
19001@deftypevr {@code{cgit-configuration} parameter} string readme
19002Text which will be used as default value for @code{cgit-repo-readme}.
19003
19004Defaults to @samp{""}.
19005
19006@end deftypevr
19007
19008@deftypevr {@code{cgit-configuration} parameter} boolean remove-suffix?
19009If set to @code{#t} and @code{repository-directory} is enabled, if any
19010repositories are found with a suffix of @code{.git}, this suffix will be
19011removed for the URL and name.
19012
19013Defaults to @samp{#f}.
19014
19015@end deftypevr
19016
19017@deftypevr {@code{cgit-configuration} parameter} integer renamelimit
19018Maximum number of files to consider when detecting renames.
19019
19020Defaults to @samp{-1}.
19021
19022@end deftypevr
19023
19024@deftypevr {@code{cgit-configuration} parameter} string repository-sort
19025The way in which repositories in each section are sorted.
19026
19027Defaults to @samp{""}.
19028
19029@end deftypevr
19030
19031@deftypevr {@code{cgit-configuration} parameter} robots-list robots
19032Text used as content for the @code{robots} meta-tag.
19033
19034Defaults to @samp{("noindex" "nofollow")}.
19035
19036@end deftypevr
19037
19038@deftypevr {@code{cgit-configuration} parameter} string root-desc
19039Text printed below the heading on the repository index page.
19040
19041Defaults to @samp{"a fast webinterface for the git dscm"}.
19042
19043@end deftypevr
19044
19045@deftypevr {@code{cgit-configuration} parameter} string root-readme
19046The content of the file specified with this option will be included
19047verbatim below thef "about" link on the repository index page.
032a2760 19048
e1cf4fd2 19049Defaults to @samp{""}.
032a2760 19050
e1cf4fd2 19051@end deftypevr
032a2760 19052
e1cf4fd2
OP
19053@deftypevr {@code{cgit-configuration} parameter} string root-title
19054Text printed as heading on the repository index page.
032a2760 19055
e1cf4fd2 19056Defaults to @samp{""}.
032a2760 19057
e1cf4fd2 19058@end deftypevr
032a2760 19059
e1cf4fd2
OP
19060@deftypevr {@code{cgit-configuration} parameter} boolean scan-hidden-path
19061If set to @samp{#t} and repository-directory is enabled,
19062repository-directory will recurse into directories whose name starts
19063with a period. Otherwise, repository-directory will stay away from such
19064directories, considered as "hidden". Note that this does not apply to
19065the ".git" directory in non-bare repos.
032a2760 19066
e1cf4fd2
OP
19067Defaults to @samp{#f}.
19068
19069@end deftypevr
19070
19071@deftypevr {@code{cgit-configuration} parameter} list snapshots
19072Text which specifies the default set of snapshot formats that cgit
19073generates links for.
19074
19075Defaults to @samp{()}.
19076
19077@end deftypevr
19078
19079@deftypevr {@code{cgit-configuration} parameter} repository-directory repository-directory
19080Name of the directory to scan for repositories (represents
19081@code{scan-path}).
19082
19083Defaults to @samp{"/srv/git"}.
19084
19085@end deftypevr
19086
19087@deftypevr {@code{cgit-configuration} parameter} string section
19088The name of the current repository section - all repositories defined
19089after this option will inherit the current section name.
19090
19091Defaults to @samp{""}.
19092
19093@end deftypevr
19094
19095@deftypevr {@code{cgit-configuration} parameter} string section-sort
19096Flag which, when set to @samp{1}, will sort the sections on the
19097repository listing by name.
19098
19099Defaults to @samp{""}.
19100
19101@end deftypevr
19102
19103@deftypevr {@code{cgit-configuration} parameter} integer section-from-path
19104A number which, if defined prior to repository-directory, specifies how
19105many path elements from each repo path to use as a default section name.
19106
19107Defaults to @samp{0}.
19108
19109@end deftypevr
19110
19111@deftypevr {@code{cgit-configuration} parameter} boolean side-by-side-diffs?
19112If set to @samp{#t} shows side-by-side diffs instead of unidiffs per
19113default.
19114
19115Defaults to @samp{#f}.
19116
19117@end deftypevr
19118
19119@deftypevr {@code{cgit-configuration} parameter} string source-filter
19120Specifies a command which will be invoked to format plaintext blobs in
19121the tree view.
19122
19123Defaults to @samp{""}.
19124
19125@end deftypevr
19126
19127@deftypevr {@code{cgit-configuration} parameter} integer summary-branches
19128Specifies the number of branches to display in the repository "summary"
19129view.
19130
19131Defaults to @samp{10}.
19132
19133@end deftypevr
19134
19135@deftypevr {@code{cgit-configuration} parameter} integer summary-log
19136Specifies the number of log entries to display in the repository
19137"summary" view.
19138
19139Defaults to @samp{10}.
19140
19141@end deftypevr
19142
19143@deftypevr {@code{cgit-configuration} parameter} integer summary-tags
19144Specifies the number of tags to display in the repository "summary"
19145view.
19146
19147Defaults to @samp{10}.
19148
19149@end deftypevr
19150
19151@deftypevr {@code{cgit-configuration} parameter} string strict-export
19152Filename which, if specified, needs to be present within the repository
19153for cgit to allow access to that repository.
19154
19155Defaults to @samp{""}.
19156
19157@end deftypevr
19158
19159@deftypevr {@code{cgit-configuration} parameter} string virtual-root
19160URL which, if specified, will be used as root for all cgit links.
19161
19162Defaults to @samp{"/"}.
19163
19164@end deftypevr
19165
19166@deftypevr {@code{cgit-configuration} parameter} repository-cgit-configuration-list repositories
19167A list of @dfn{cgit-repo} records to use with config.
19168
19169Defaults to @samp{()}.
19170
19171Available @code{repository-cgit-configuration} fields are:
19172
19173@deftypevr {@code{repository-cgit-configuration} parameter} repo-list snapshots
19174A mask of snapshot formats for this repo that cgit generates links for,
19175restricted by the global @code{snapshots} setting.
19176
19177Defaults to @samp{()}.
19178
19179@end deftypevr
19180
19181@deftypevr {@code{repository-cgit-configuration} parameter} repo-string source-filter
19182Override the default @code{source-filter}.
19183
19184Defaults to @samp{""}.
19185
19186@end deftypevr
19187
19188@deftypevr {@code{repository-cgit-configuration} parameter} repo-string url
19189The relative URL used to access the repository.
19190
19191Defaults to @samp{""}.
19192
19193@end deftypevr
19194
19195@deftypevr {@code{repository-cgit-configuration} parameter} repo-string about-filter
19196Override the default @code{about-filter}.
19197
19198Defaults to @samp{""}.
19199
19200@end deftypevr
19201
19202@deftypevr {@code{repository-cgit-configuration} parameter} repo-string branch-sort
19203Flag which, when set to @samp{age}, enables date ordering in the branch
19204ref list, and when set to @samp{name} enables ordering by branch name.
19205
19206Defaults to @samp{""}.
19207
19208@end deftypevr
19209
19210@deftypevr {@code{repository-cgit-configuration} parameter} repo-list clone-url
19211A list of URLs which can be used to clone repo.
19212
19213Defaults to @samp{()}.
19214
19215@end deftypevr
19216
19217@deftypevr {@code{repository-cgit-configuration} parameter} repo-string commit-filter
19218Override the default @code{commit-filter}.
19219
19220Defaults to @samp{""}.
19221
19222@end deftypevr
19223
19224@deftypevr {@code{repository-cgit-configuration} parameter} repo-string commit-sort
19225Flag which, when set to @samp{date}, enables strict date ordering in the
19226commit log, and when set to @samp{topo} enables strict topological
19227ordering.
19228
19229Defaults to @samp{""}.
19230
19231@end deftypevr
19232
19233@deftypevr {@code{repository-cgit-configuration} parameter} repo-string defbranch
19234The name of the default branch for this repository. If no such branch
19235exists in the repository, the first branch name (when sorted) is used as
19236default instead. By default branch pointed to by HEAD, or "master" if
19237there is no suitable HEAD.
19238
19239Defaults to @samp{""}.
19240
19241@end deftypevr
19242
19243@deftypevr {@code{repository-cgit-configuration} parameter} repo-string desc
19244The value to show as repository description.
19245
19246Defaults to @samp{""}.
032a2760 19247
e1cf4fd2
OP
19248@end deftypevr
19249
19250@deftypevr {@code{repository-cgit-configuration} parameter} repo-string homepage
19251The value to show as repository homepage.
19252
19253Defaults to @samp{""}.
19254
19255@end deftypevr
19256
19257@deftypevr {@code{repository-cgit-configuration} parameter} repo-string email-filter
19258Override the default @code{email-filter}.
19259
19260Defaults to @samp{""}.
19261
19262@end deftypevr
19263
19264@deftypevr {@code{repository-cgit-configuration} parameter} repo-boolean enable-commit-graph?
19265A flag which can be used to disable the global setting
19266@code{enable-commit-graph?}.
19267
19268Defaults to @samp{#f}.
19269
19270@end deftypevr
19271
19272@deftypevr {@code{repository-cgit-configuration} parameter} repo-boolean enable-log-filecount?
19273A flag which can be used to disable the global setting
19274@code{enable-log-filecount?}.
19275
19276Defaults to @samp{#f}.
19277
19278@end deftypevr
19279
19280@deftypevr {@code{repository-cgit-configuration} parameter} repo-boolean enable-log-linecount?
19281A flag which can be used to disable the global setting
19282@code{enable-log-linecount?}.
19283
19284Defaults to @samp{#f}.
19285
19286@end deftypevr
19287
19288@deftypevr {@code{repository-cgit-configuration} parameter} repo-boolean enable-remote-branches?
19289Flag which, when set to @code{#t}, will make cgit display remote
19290branches in the summary and refs views.
19291
19292Defaults to @samp{#f}.
19293
19294@end deftypevr
19295
19296@deftypevr {@code{repository-cgit-configuration} parameter} repo-boolean enable-subject-links?
19297A flag which can be used to override the global setting
19298@code{enable-subject-links?}.
19299
19300Defaults to @samp{#f}.
19301
19302@end deftypevr
19303
19304@deftypevr {@code{repository-cgit-configuration} parameter} repo-boolean enable-html-serving?
19305A flag which can be used to override the global setting
19306@code{enable-html-serving?}.
19307
19308Defaults to @samp{#f}.
19309
19310@end deftypevr
19311
19312@deftypevr {@code{repository-cgit-configuration} parameter} repo-boolean hide?
19313Flag which, when set to @code{#t}, hides the repository from the
19314repository index.
19315
19316Defaults to @samp{#f}.
19317
19318@end deftypevr
19319
19320@deftypevr {@code{repository-cgit-configuration} parameter} repo-boolean ignore?
19321Flag which, when set to @samp{#t}, ignores the repository.
19322
19323Defaults to @samp{#f}.
19324
19325@end deftypevr
19326
19327@deftypevr {@code{repository-cgit-configuration} parameter} repo-string logo
032a2760 19328URL which specifies the source of an image which will be used as a logo
e1cf4fd2 19329on this repo’s pages.
032a2760 19330
e1cf4fd2 19331Defaults to @samp{""}.
032a2760 19332
e1cf4fd2 19333@end deftypevr
032a2760 19334
e1cf4fd2
OP
19335@deftypevr {@code{repository-cgit-configuration} parameter} repo-string logo-link
19336URL loaded when clicking on the cgit logo image.
032a2760 19337
e1cf4fd2
OP
19338Defaults to @samp{""}.
19339
19340@end deftypevr
19341
19342@deftypevr {@code{repository-cgit-configuration} parameter} repo-string owner-filter
19343Override the default @code{owner-filter}.
19344
19345Defaults to @samp{""}.
19346
19347@end deftypevr
19348
19349@deftypevr {@code{repository-cgit-configuration} parameter} repo-string module-link
19350Text which will be used as the formatstring for a hyperlink when a
19351submodule is printed in a directory listing. The arguments for the
19352formatstring are the path and SHA1 of the submodule commit.
19353
19354Defaults to @samp{""}.
19355
19356@end deftypevr
19357
19358@deftypevr {@code{repository-cgit-configuration} parameter} module-link-path module-link-path
19359Text which will be used as the formatstring for a hyperlink when a
19360submodule with the specified subdirectory path is printed in a directory
19361listing.
19362
19363Defaults to @samp{()}.
19364
19365@end deftypevr
19366
19367@deftypevr {@code{repository-cgit-configuration} parameter} repo-string max-stats
19368Override the default maximum statistics period.
19369
19370Defaults to @samp{""}.
19371
19372@end deftypevr
19373
19374@deftypevr {@code{repository-cgit-configuration} parameter} repo-string name
19375The value to show as repository name.
19376
19377Defaults to @samp{""}.
19378
19379@end deftypevr
19380
19381@deftypevr {@code{repository-cgit-configuration} parameter} repo-string owner
19382A value used to identify the owner of the repository.
19383
19384Defaults to @samp{""}.
19385
19386@end deftypevr
19387
19388@deftypevr {@code{repository-cgit-configuration} parameter} repo-string path
19389An absolute path to the repository directory.
19390
19391Defaults to @samp{""}.
19392
19393@end deftypevr
19394
19395@deftypevr {@code{repository-cgit-configuration} parameter} repo-string readme
19396A path (relative to repo) which specifies a file to include verbatim as
19397the "About" page for this repo.
19398
19399Defaults to @samp{""}.
19400
19401@end deftypevr
19402
19403@deftypevr {@code{repository-cgit-configuration} parameter} repo-string section
19404The name of the current repository section - all repositories defined
19405after this option will inherit the current section name.
19406
19407Defaults to @samp{""}.
19408
19409@end deftypevr
19410
19411@deftypevr {@code{repository-cgit-configuration} parameter} repo-list extra-options
19412Extra options will be appended to cgitrc file.
19413
19414Defaults to @samp{()}.
19415
19416@end deftypevr
19417
19418@end deftypevr
19419
19420@deftypevr {@code{cgit-configuration} parameter} list extra-options
19421Extra options will be appended to cgitrc file.
19422
19423Defaults to @samp{()}.
19424
19425@end deftypevr
19426
19427@c %end of fragment
19428
19429However, it could be that you just want to get a @code{cgitrc} up and
19430running. In that case, you can pass an @code{opaque-cgit-configuration}
19431as a record to @code{cgit-service-type}. As its name indicates, an
19432opaque configuration does not have easy reflective capabilities.
19433
19434Available @code{opaque-cgit-configuration} fields are:
19435
19436@deftypevr {@code{opaque-cgit-configuration} parameter} package cgit
19437The cgit package.
19438@end deftypevr
19439
19440@deftypevr {@code{opaque-cgit-configuration} parameter} string string
19441The contents of the @code{cgitrc}, as a string.
19442@end deftypevr
19443
19444For example, if your @code{cgitrc} is just the empty string, you
19445could instantiate a cgit service like this:
19446
19447@example
19448(service cgit-service-type
19449 (opaque-cgit-configuration
19450 (cgitrc "")))
19451@end example
03e1cca2
LF
19452
19453
19454@node Game Services
19455@subsubsection Game Services
19456
19457@subsubheading The Battle for Wesnoth Service
19458@cindex wesnothd
19459@uref{https://wesnoth.org, The Battle for Wesnoth} is a fantasy, turn
19460based tactical strategy game, with several single player campaigns, and
19461multiplayer games (both networked and local).
19462
19463@defvar {Scheme Variable} wesnothd-service-type
19464Service type for the wesnothd service. Its value must be a
19465@code{wesnothd-configuration} object. To run wesnothd in the default
19466configuration, instantiate it as:
19467
19468@example
19469(service wesnothd-service-type)
19470@end example
19471@end defvar
19472
19473@deftp {Data Type} wesnothd-configuration
19474Data type representing the configuration of @command{wesnothd}.
19475
19476@table @asis
19477@item @code{package} (default: @code{wesnoth-server})
19478The wesnoth server package to use.
19479
19480@item @code{port} (default: @code{15000})
19481The port to bind the server to.
19482@end table
19483@end deftp
19484
19485@node Miscellaneous Services
19486@subsubsection Miscellaneous Services
19487
19488@cindex sysctl
19489@subsubheading System Control Service
19490
19491The @code{(gnu services sysctl)} provides a service to configure kernel
19492parameters at boot.
19493
19494@defvr {Scheme Variable} sysctl-service-type
19495The service type for @command{sysctl}, which modifies kernel parameters
19496under @file{/proc/sys/}. To enable IPv4 forwarding, it can be
19497instantiated as:
19498
19499@example
19500(service sysctl-service-type
19501 (sysctl-configuration
19502 (settings '(("net.ipv4.ip_forward" . "1")))))
19503@end example
19504@end defvr
19505
19506@deftp {Data Type} sysctl-configuration
19507The data type representing the configuration of @command{sysctl}.
19508
19509@table @asis
19510@item @code{sysctl} (default: @code{(file-append procps "/sbin/sysctl"})
19511The @command{sysctl} executable to use.
19512
19513@item @code{settings} (default: @code{'()})
19514An association list specifies kernel parameters and their values.
19515@end table
19516@end deftp
19517
19518@cindex lirc
19519@subsubheading Lirc Service
19520
19521The @code{(gnu services lirc)} module provides the following service.
19522
19523@deffn {Scheme Procedure} lirc-service [#:lirc lirc] @
19524 [#:device #f] [#:driver #f] [#:config-file #f] @
19525 [#:extra-options '()]
19526Return a service that runs @url{http://www.lirc.org,LIRC}, a daemon that
19527decodes infrared signals from remote controls.
19528
19529Optionally, @var{device}, @var{driver} and @var{config-file}
19530(configuration file name) may be specified. See @command{lircd} manual
19531for details.
19532
19533Finally, @var{extra-options} is a list of additional command-line options
19534passed to @command{lircd}.
19535@end deffn
19536
19537@cindex spice
19538@subsubheading Spice Service
19539
19540The @code{(gnu services spice)} module provides the following service.
19541
19542@deffn {Scheme Procedure} spice-vdagent-service [#:spice-vdagent]
19543Returns a service that runs @url{http://www.spice-space.org,VDAGENT}, a daemon
19544that enables sharing the clipboard with a vm and setting the guest display
19545resolution when the graphical console window resizes.
19546@end deffn
19547
19548@subsubsection Dictionary Services
19549@cindex dictionary
19550The @code{(gnu services dict)} module provides the following service:
19551
19552@deffn {Scheme Procedure} dicod-service [#:config (dicod-configuration)]
19553Return a service that runs the @command{dicod} daemon, an implementation
19554of DICT server (@pxref{Dicod,,, dico, GNU Dico Manual}).
19555
19556The optional @var{config} argument specifies the configuration for
19557@command{dicod}, which should be a @code{<dicod-configuration>} object, by
19558default it serves the GNU Collaborative International Dictonary of English.
19559
19560You can add @command{open localhost} to your @file{~/.dico} file to make
19561@code{localhost} the default server for @command{dico} client
19562(@pxref{Initialization File,,, dico, GNU Dico Manual}).
19563@end deffn
19564
19565@deftp {Data Type} dicod-configuration
19566Data type representing the configuration of dicod.
19567
19568@table @asis
19569@item @code{dico} (default: @var{dico})
19570Package object of the GNU Dico dictionary server.
19571
19572@item @code{interfaces} (default: @var{'("localhost")})
19573This is the list of IP addresses and ports and possibly socket file
19574names to listen to (@pxref{Server Settings, @code{listen} directive,,
19575dico, GNU Dico Manual}).
19576
19577@item @code{handlers} (default: @var{'()})
19578List of @code{<dicod-handler>} objects denoting handlers (module instances).
19579
19580@item @code{databases} (default: @var{(list %dicod-database:gcide)})
19581List of @code{<dicod-database>} objects denoting dictionaries to be served.
19582@end table
19583@end deftp
19584
19585@deftp {Data Type} dicod-handler
19586Data type representing a dictionary handler (module instance).
19587
19588@table @asis
19589@item @code{name}
19590Name of the handler (module instance).
19591
19592@item @code{module} (default: @var{#f})
19593Name of the dicod module of the handler (instance). If it is @code{#f},
19594the module has the same name as the handler.
19595(@pxref{Modules,,, dico, GNU Dico Manual}).
19596
19597@item @code{options}
19598List of strings or gexps representing the arguments for the module handler
19599@end table
19600@end deftp
19601
19602@deftp {Data Type} dicod-database
19603Data type representing a dictionary database.
19604
19605@table @asis
19606@item @code{name}
19607Name of the database, will be used in DICT commands.
19608
19609@item @code{handler}
19610Name of the dicod handler (module instance) used by this database
19611(@pxref{Handlers,,, dico, GNU Dico Manual}).
19612
19613@item @code{complex?} (default: @var{#f})
19614Whether the database configuration complex. The complex configuration
19615will need a corresponding @code{<dicod-handler>} object, otherwise not.
19616
19617@item @code{options}
19618List of strings or gexps representing the arguments for the database
19619(@pxref{Databases,,, dico, GNU Dico Manual}).
19620@end table
19621@end deftp
19622
19623@defvr {Scheme Variable} %dicod-database:gcide
19624A @code{<dicod-database>} object serving the GNU Collaborative International
19625Dictionary of English using the @code{gcide} package.
19626@end defvr
19627
19628The following is an example @code{dicod-service} configuration.
19629
19630@example
19631(dicod-service #:config
19632 (dicod-configuration
19633 (handlers (list (dicod-handler
19634 (name "wordnet")
19635 (module "dictorg")
19636 (options
19637 (list #~(string-append "dbdir=" #$wordnet))))))
19638 (databases (list (dicod-database
19639 (name "wordnet")
19640 (complex? #t)
19641 (handler "wordnet")
19642 (options '("database=wn")))
19643 %dicod-database:gcide))))
19644@end example
032a2760 19645
0ae8c15a
LC
19646@node Setuid Programs
19647@subsection Setuid Programs
19648
19649@cindex setuid programs
19650Some programs need to run with ``root'' privileges, even when they are
19651launched by unprivileged users. A notorious example is the
4d40227c
LC
19652@command{passwd} program, which users can run to change their
19653password, and which needs to access the @file{/etc/passwd} and
0ae8c15a
LC
19654@file{/etc/shadow} files---something normally restricted to root, for
19655obvious security reasons. To address that, these executables are
19656@dfn{setuid-root}, meaning that they always run with root privileges
19657(@pxref{How Change Persona,,, libc, The GNU C Library Reference Manual},
f7e4ae7f 19658for more info about the setuid mechanism.)
0ae8c15a
LC
19659
19660The store itself @emph{cannot} contain setuid programs: that would be a
19661security issue since any user on the system can write derivations that
19662populate the store (@pxref{The Store}). Thus, a different mechanism is
19663used: instead of changing the setuid bit directly on files that are in
19664the store, we let the system administrator @emph{declare} which programs
19665should be setuid root.
19666
19667The @code{setuid-programs} field of an @code{operating-system}
19668declaration contains a list of G-expressions denoting the names of
19669programs to be setuid-root (@pxref{Using the Configuration System}).
19670For instance, the @command{passwd} program, which is part of the Shadow
19671package, can be designated by this G-expression (@pxref{G-Expressions}):
19672
19673@example
19674#~(string-append #$shadow "/bin/passwd")
19675@end example
19676
19677A default set of setuid programs is defined by the
19678@code{%setuid-programs} variable of the @code{(gnu system)} module.
19679
19680@defvr {Scheme Variable} %setuid-programs
19681A list of G-expressions denoting common programs that are setuid-root.
19682
19683The list includes commands such as @command{passwd}, @command{ping},
19684@command{su}, and @command{sudo}.
19685@end defvr
19686
19687Under the hood, the actual setuid programs are created in the
19688@file{/run/setuid-programs} directory at system activation time. The
19689files in this directory refer to the ``real'' binaries, which are in the
19690store.
19691
efb5e833
LC
19692@node X.509 Certificates
19693@subsection X.509 Certificates
19694
19695@cindex HTTPS, certificates
19696@cindex X.509 certificates
19697@cindex TLS
19698Web servers available over HTTPS (that is, HTTP over the transport-layer
19699security mechanism, TLS) send client programs an @dfn{X.509 certificate}
19700that the client can then use to @emph{authenticate} the server. To do
19701that, clients verify that the server's certificate is signed by a
19702so-called @dfn{certificate authority} (CA). But to verify the CA's
19703signature, clients must have first acquired the CA's certificate.
19704
19705Web browsers such as GNU@tie{}IceCat include their own set of CA
19706certificates, such that they are able to verify CA signatures
19707out-of-the-box.
19708
19709However, most other programs that can talk HTTPS---@command{wget},
19710@command{git}, @command{w3m}, etc.---need to be told where CA
19711certificates can be found.
19712
19713@cindex @code{nss-certs}
19714In GuixSD, this is done by adding a package that provides certificates
19715to the @code{packages} field of the @code{operating-system} declaration
19716(@pxref{operating-system Reference}). GuixSD includes one such package,
19717@code{nss-certs}, which is a set of CA certificates provided as part of
19718Mozilla's Network Security Services.
19719
19720Note that it is @emph{not} part of @var{%base-packages}, so you need to
19721explicitly add it. The @file{/etc/ssl/certs} directory, which is where
19722most applications and libraries look for certificates by default, points
19723to the certificates installed globally.
19724
b3129f2b
LC
19725Unprivileged users, including users of Guix on a foreign distro,
19726can also install their own certificate package in
efb5e833
LC
19727their profile. A number of environment variables need to be defined so
19728that applications and libraries know where to find them. Namely, the
19729OpenSSL library honors the @code{SSL_CERT_DIR} and @code{SSL_CERT_FILE}
19730variables. Some applications add their own environment variables; for
19731instance, the Git version control system honors the certificate bundle
b3129f2b
LC
19732pointed to by the @code{GIT_SSL_CAINFO} environment variable. Thus, you
19733would typically run something like:
efb5e833 19734
b3129f2b
LC
19735@example
19736$ guix package -i nss-certs
19737$ export SSL_CERT_DIR="$HOME/.guix-profile/etc/ssl/certs"
19738$ export SSL_CERT_FILE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
19739$ export GIT_SSL_CAINFO="$SSL_CERT_FILE"
19740@end example
efb5e833 19741
63657335
RW
19742As another example, R requires the @code{CURL_CA_BUNDLE} environment
19743variable to point to a certificate bundle, so you would have to run
19744something like this:
19745
19746@example
19747$ guix package -i nss-certs
19748$ export CURL_CA_BUNDLE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
19749@end example
19750
19751For other applications you may want to look up the required environment
19752variable in the relevant documentation.
19753
19754
996ed739
LC
19755@node Name Service Switch
19756@subsection Name Service Switch
19757
19758@cindex name service switch
19759@cindex NSS
19760The @code{(gnu system nss)} module provides bindings to the
1068f26b 19761configuration file of the libc @dfn{name service switch} or @dfn{NSS}
996ed739
LC
19762(@pxref{NSS Configuration File,,, libc, The GNU C Library Reference
19763Manual}). In a nutshell, the NSS is a mechanism that allows libc to be
19764extended with new ``name'' lookup methods for system databases, which
19765includes host names, service names, user accounts, and more (@pxref{Name
19766Service Switch, System Databases and Name Service Switch,, libc, The GNU
19767C Library Reference Manual}).
19768
19769The NSS configuration specifies, for each system database, which lookup
19770method is to be used, and how the various methods are chained
19771together---for instance, under which circumstances NSS should try the
19772next method in the list. The NSS configuration is given in the
19773@code{name-service-switch} field of @code{operating-system} declarations
19774(@pxref{operating-system Reference, @code{name-service-switch}}).
19775
4c9050c6
LC
19776@cindex nss-mdns
19777@cindex .local, host name lookup
996ed739 19778As an example, the declaration below configures the NSS to use the
4c9050c6
LC
19779@uref{http://0pointer.de/lennart/projects/nss-mdns/, @code{nss-mdns}
19780back-end}, which supports host name lookups over multicast DNS (mDNS)
19781for host names ending in @code{.local}:
996ed739
LC
19782
19783@example
19784(name-service-switch
19785 (hosts (list %files ;first, check /etc/hosts
19786
19787 ;; If the above did not succeed, try
19788 ;; with 'mdns_minimal'.
19789 (name-service
19790 (name "mdns_minimal")
19791
19792 ;; 'mdns_minimal' is authoritative for
19793 ;; '.local'. When it returns "not found",
19794 ;; no need to try the next methods.
19795 (reaction (lookup-specification
19796 (not-found => return))))
19797
19798 ;; Then fall back to DNS.
19799 (name-service
19800 (name "dns"))
19801
19802 ;; Finally, try with the "full" 'mdns'.
19803 (name-service
19804 (name "mdns")))))
19805@end example
19806
1068f26b
AE
19807Do not worry: the @code{%mdns-host-lookup-nss} variable (see below)
19808contains this configuration, so you will not have to type it if all you
15137a29
LC
19809want is to have @code{.local} host lookup working.
19810
4c9050c6
LC
19811Note that, in this case, in addition to setting the
19812@code{name-service-switch} of the @code{operating-system} declaration,
cc9c1f39
LC
19813you also need to use @code{avahi-service} (@pxref{Networking Services,
19814@code{avahi-service}}), or @var{%desktop-services}, which includes it
19815(@pxref{Desktop Services}). Doing this makes @code{nss-mdns} accessible
19816to the name service cache daemon (@pxref{Base Services,
19817@code{nscd-service}}).
15137a29
LC
19818
19819For convenience, the following variables provide typical NSS
19820configurations.
19821
19822@defvr {Scheme Variable} %default-nss
19823This is the default name service switch configuration, a
19824@code{name-service-switch} object.
19825@end defvr
19826
19827@defvr {Scheme Variable} %mdns-host-lookup-nss
19828This is the name service switch configuration with support for host name
19829lookup over multicast DNS (mDNS) for host names ending in @code{.local}.
19830@end defvr
4c9050c6 19831
996ed739 19832The reference for name service switch configuration is given below. It
1068f26b 19833is a direct mapping of the configuration file format of the C library , so
996ed739
LC
19834please refer to the C library manual for more information (@pxref{NSS
19835Configuration File,,, libc, The GNU C Library Reference Manual}).
1068f26b 19836Compared to the configuration file format of libc NSS, it has the advantage
996ed739 19837not only of adding this warm parenthetic feel that we like, but also
1068f26b 19838static checks: you will know about syntax errors and typos as soon as you
996ed739
LC
19839run @command{guix system}.
19840
996ed739
LC
19841@deftp {Data Type} name-service-switch
19842
19843This is the data type representation the configuration of libc's name
19844service switch (NSS). Each field below represents one of the supported
19845system databases.
19846
19847@table @code
19848@item aliases
19849@itemx ethers
19850@itemx group
19851@itemx gshadow
19852@itemx hosts
19853@itemx initgroups
19854@itemx netgroup
19855@itemx networks
19856@itemx password
19857@itemx public-key
19858@itemx rpc
19859@itemx services
19860@itemx shadow
19861The system databases handled by the NSS. Each of these fields must be a
1068f26b 19862list of @code{<name-service>} objects (see below).
996ed739
LC
19863@end table
19864@end deftp
19865
19866@deftp {Data Type} name-service
19867
19868This is the data type representing an actual name service and the
19869associated lookup action.
19870
19871@table @code
19872@item name
19873A string denoting the name service (@pxref{Services in the NSS
19874configuration,,, libc, The GNU C Library Reference Manual}).
19875
4aee6e60
LC
19876Note that name services listed here must be visible to nscd. This is
19877achieved by passing the @code{#:name-services} argument to
19878@code{nscd-service} the list of packages providing the needed name
19879services (@pxref{Base Services, @code{nscd-service}}).
19880
996ed739
LC
19881@item reaction
19882An action specified using the @code{lookup-specification} macro
19883(@pxref{Actions in the NSS configuration,,, libc, The GNU C Library
19884Reference Manual}). For example:
19885
19886@example
19887(lookup-specification (unavailable => continue)
19888 (success => return))
19889@end example
19890@end table
19891@end deftp
0ae8c15a 19892
fd1b1fa2
LC
19893@node Initial RAM Disk
19894@subsection Initial RAM Disk
19895
e32171ee
JD
19896@cindex initrd
19897@cindex initial RAM disk
fd1b1fa2
LC
19898For bootstrapping purposes, the Linux-Libre kernel is passed an
19899@dfn{initial RAM disk}, or @dfn{initrd}. An initrd contains a temporary
1068f26b 19900root file system as well as an initialization script. The latter is
fd1b1fa2
LC
19901responsible for mounting the real root file system, and for loading any
19902kernel modules that may be needed to achieve that.
19903
bc499b11
LC
19904The @code{initrd-modules} field of an @code{operating-system}
19905declaration allows you to specify Linux-libre kernel modules that must
19906be available in the initrd. In particular, this is where you would list
19907modules needed to actually drive the hard disk where your root partition
19908is---although the default value of @code{initrd-modules} should cover
19909most use cases. For example, assuming you need the @code{megaraid_sas}
19910module in addition to the default modules to be able to access your root
19911file system, you would write:
19912
19913@example
19914(operating-system
19915 ;; @dots{}
19916 (initrd-modules (cons "megaraid_sas" %base-initrd-modules)))
19917@end example
19918
19919@defvr {Scheme Variable} %base-initrd-modules
19920This is the list of kernel modules included in the initrd by default.
19921@end defvr
19922
19923Furthermore, if you need lower-level customization, the @code{initrd}
19924field of an @code{operating-system} declaration allows
fd1b1fa2 19925you to specify which initrd you would like to use. The @code{(gnu
47bdc5a1
MO
19926system linux-initrd)} module provides three ways to build an initrd: the
19927high-level @code{base-initrd} procedure and the low-level
19928@code{raw-initrd} and @code{expression->initrd} procedures.
fd1b1fa2
LC
19929
19930The @code{base-initrd} procedure is intended to cover most common uses.
19931For example, if you want to add a bunch of kernel modules to be loaded
19932at boot time, you can define the @code{initrd} field of the operating
19933system declaration like this:
19934
19935@example
52ac153e 19936(initrd (lambda (file-systems . rest)
bc499b11
LC
19937 ;; Create a standard initrd but set up networking
19938 ;; with the parameters QEMU expects by default.
52ac153e 19939 (apply base-initrd file-systems
bc499b11 19940 #:qemu-networking? #t
52ac153e 19941 rest)))
fd1b1fa2
LC
19942@end example
19943
52ac153e 19944The @code{base-initrd} procedure also handles common use cases that
1068f26b
AE
19945involves using the system as a QEMU guest, or as a ``live'' system with
19946volatile root file system.
fd1b1fa2 19947
47bdc5a1
MO
19948The @code{base-initrd} procedure is built from @code{raw-initrd} procedure.
19949Unlike @code{base-initrd}, @code{raw-initrd} doesn't do anything high-level,
19950such as trying to guess which kernel modules and packages should be included
19951to the initrd. An example use of @code{raw-initrd} is when a user has
19952a custom Linux kernel configuration and default kernel modules included by
19953@code{base-initrd} are not available.
19954
19955The initial RAM disk produced by @code{base-initrd} or @code{raw-initrd}
19956honors several options passed on the Linux kernel command line
19957(that is, arguments passed @i{via} the @code{linux} command of GRUB, or the
4af2fafd 19958@code{-append} option of QEMU), notably:
e90cf6c1
LC
19959
19960@table @code
19961@item --load=@var{boot}
19962Tell the initial RAM disk to load @var{boot}, a file containing a Scheme
19963program, once it has mounted the root file system.
19964
19965GuixSD uses this option to yield control to a boot program that runs the
dd17bc38 19966service activation programs and then spawns the GNU@tie{}Shepherd, the
e90cf6c1
LC
19967initialization system.
19968
19969@item --root=@var{root}
1068f26b 19970Mount @var{root} as the root file system. @var{root} can be a
01bd3b5e 19971device name like @code{/dev/sda1}, a file system label, or a file system
e90cf6c1
LC
19972UUID.
19973
19974@item --system=@var{system}
19975Have @file{/run/booted-system} and @file{/run/current-system} point to
19976@var{system}.
19977
19978@item modprobe.blacklist=@var{modules}@dots{}
19979@cindex module, black-listing
19980@cindex black list, of kernel modules
19981Instruct the initial RAM disk as well as the @command{modprobe} command
19982(from the kmod package) to refuse to load @var{modules}. @var{modules}
19983must be a comma-separated list of module names---e.g.,
19984@code{usbkbd,9pnet}.
19985
19986@item --repl
19987Start a read-eval-print loop (REPL) from the initial RAM disk before it
19988tries to load kernel modules and to mount the root file system. Our
19989marketing team calls it @dfn{boot-to-Guile}. The Schemer in you will
19990love it. @xref{Using Guile Interactively,,, guile, GNU Guile Reference
19991Manual}, for more information on Guile's REPL.
19992
19993@end table
19994
19995Now that you know all the features that initial RAM disks produced by
47bdc5a1
MO
19996@code{base-initrd} and @code{raw-initrd} provide,
19997here is how to use it and customize it further.
e90cf6c1 19998
e32171ee
JD
19999@cindex initrd
20000@cindex initial RAM disk
47bdc5a1
MO
20001@deffn {Monadic Procedure} raw-initrd @var{file-systems} @
20002 [#:linux-modules '()] [#:mapped-devices '()] @
20003 [#:helper-packages '()] [#:qemu-networking? #f] [#:volatile-root? #f]
20004Return a monadic derivation that builds a raw initrd. @var{file-systems} is
1068f26b 20005a list of file systems to be mounted by the initrd, possibly in addition to
fd1b1fa2 20006the root file system specified on the kernel command line via @code{--root}.
47bdc5a1 20007@var{linux-modules} is a list of kernel modules to be loaded at boot time.
52ac153e
LC
20008@var{mapped-devices} is a list of device mappings to realize before
20009@var{file-systems} are mounted (@pxref{Mapped Devices}).
47bdc5a1
MO
20010@var{helper-packages} is a list of packages to be copied in the initrd. It may
20011include @code{e2fsck/static} or other packages needed by the initrd to check
01bd3b5e 20012the root file system.
fd1b1fa2
LC
20013
20014When @var{qemu-networking?} is true, set up networking with the standard QEMU
1068f26b
AE
20015parameters. When @var{virtio?} is true, load additional modules so that the
20016initrd can be used as a QEMU guest with para-virtualized I/O drivers.
fd1b1fa2
LC
20017
20018When @var{volatile-root?} is true, the root file system is writable but any changes
20019to it are lost.
47bdc5a1
MO
20020@end deffn
20021
20022@deffn {Monadic Procedure} base-initrd @var{file-systems} @
20023 [#:mapped-devices '()] [#:qemu-networking? #f] [#:volatile-root? #f]@
eac026e5
LC
20024 [#:linux-modules '()]
20025Return a monadic derivation that builds a generic initrd, with kernel
20026modules taken from @var{linux}. @var{file-systems} is a list of file-systems to be
20027mounted by the initrd, possibly in addition to the root file system specified
20028on the kernel command line via @code{--root}. @var{mapped-devices} is a list of device
20029mappings to realize before @var{file-systems} are mounted.
47bdc5a1 20030
eac026e5 20031@var{qemu-networking?} and @var{volatile-root?} behaves as in @code{raw-initrd}.
fd1b1fa2
LC
20032
20033The initrd is automatically populated with all the kernel modules necessary
eac026e5
LC
20034for @var{file-systems} and for the given options. Additional kernel
20035modules can be listed in @var{linux-modules}. They will be added to the initrd, and
fd1b1fa2
LC
20036loaded at boot time in the order in which they appear.
20037@end deffn
20038
20039Needless to say, the initrds we produce and use embed a
20040statically-linked Guile, and the initialization program is a Guile
20041program. That gives a lot of flexibility. The
20042@code{expression->initrd} procedure builds such an initrd, given the
20043program to run in that initrd.
20044
20045@deffn {Monadic Procedure} expression->initrd @var{exp} @
4ee96a79 20046 [#:guile %guile-static-stripped] [#:name "guile-initrd"]
fd1b1fa2
LC
20047Return a derivation that builds a Linux initrd (a gzipped cpio archive)
20048containing @var{guile} and that evaluates @var{exp}, a G-expression,
df650fa8
LC
20049upon booting. All the derivations referenced by @var{exp} are
20050automatically copied to the initrd.
fd1b1fa2
LC
20051@end deffn
20052
74e64724
MO
20053@node Bootloader Configuration
20054@subsection Bootloader Configuration
88faf933 20055
74e64724 20056@cindex bootloader
88faf933
LC
20057@cindex boot loader
20058
74e64724
MO
20059The operating system supports multiple bootloaders. The bootloader is
20060configured using @code{bootloader-configuration} declaration. All the
20061fields of this structure are bootloader agnostic except for one field,
20062@code{bootloader} that indicates the bootloader to be configured and
20063installed.
88faf933 20064
74e64724
MO
20065Some of the bootloaders do not honor every field of
20066@code{bootloader-configuration}. For instance, the extlinux
20067bootloader does not support themes and thus ignores the @code{theme}
20068field.
20069
20070@deftp {Data Type} bootloader-configuration
20071The type of a bootloader configuration declaration.
88faf933
LC
20072
20073@table @asis
20074
74e64724
MO
20075@item @code{bootloader}
20076@cindex EFI, bootloader
20077@cindex UEFI, bootloader
20078@cindex BIOS, bootloader
20079The bootloader to use, as a @code{bootloader} object. For now
8d858010
DM
20080@code{grub-bootloader}, @code{grub-efi-bootloader},
20081@code{extlinux-bootloader} and @code{u-boot-bootloader} are supported.
20082@code{grub-efi-bootloader} allows to boot on modern systems using the
20083@dfn{Unified Extensible Firmware Interface} (UEFI).
74e64724
MO
20084
20085Available bootloaders are described in @code{(gnu bootloader @dots{})}
20086modules.
20087
045ebb3e
AW
20088@item @code{target}
20089This is a string denoting the target onto which to install the
20090bootloader. The exact interpretation depends on the bootloader in
20091question; for @code{grub-bootloader}, for example, it should be a device
20092name understood by the bootloader @command{installer} command, such as
20093@code{/dev/sda} or @code{(hd0)} (for GRUB, @pxref{Invoking
20094grub-install,,, grub, GNU GRUB Manual}). For
20095@code{grub-efi-bootloader}, it should be the path to a mounted EFI file
20096system.
88faf933
LC
20097
20098@item @code{menu-entries} (default: @code{()})
20099A possibly empty list of @code{menu-entry} objects (see below), denoting
74e64724 20100entries to appear in the bootloader menu, in addition to the current
88faf933
LC
20101system entry and the entry pointing to previous system generations.
20102
20103@item @code{default-entry} (default: @code{0})
1068f26b
AE
20104The index of the default boot menu entry. Index 0 is for the entry of the
20105current system.
88faf933
LC
20106
20107@item @code{timeout} (default: @code{5})
20108The number of seconds to wait for keyboard input before booting. Set to
201090 to boot immediately, and to -1 to wait indefinitely.
20110
74e64724
MO
20111@item @code{theme} (default: @var{#f})
20112The bootloader theme object describing the theme to use. If no theme
20113is provided, some bootloaders might use a default theme, that's true
20114for GRUB.
e0b2e930
LF
20115
20116@item @code{terminal-outputs} (default: @code{'gfxterm})
74e64724
MO
20117The output terminals used for the bootloader boot menu, as a list of
20118symbols. GRUB accepts the values: @code{console}, @code{serial},
20119@code{serial_@{0-3@}}, @code{gfxterm}, @code{vga_text},
20120@code{mda_text}, @code{morse}, and @code{pkmodem}. This field
20121corresponds to the GRUB variable GRUB_TERMINAL_OUTPUT (@pxref{Simple
20122configuration,,, grub,GNU GRUB manual}).
e0b2e930
LF
20123
20124@item @code{terminal-inputs} (default: @code{'()})
74e64724
MO
20125The input terminals used for the bootloader boot menu, as a list of
20126symbols. For GRUB, the default is the native platform terminal as
20127determined at run-time. GRUB accepts the values: @code{console},
20128@code{serial}, @code{serial_@{0-3@}}, @code{at_keyboard}, and
20129@code{usb_keyboard}. This field corresponds to the GRUB variable
20130GRUB_TERMINAL_INPUT (@pxref{Simple configuration,,, grub,GNU GRUB
20131manual}).
e0b2e930
LF
20132
20133@item @code{serial-unit} (default: @code{#f})
74e64724 20134The serial unit used by the bootloader, as an integer from 0 to 3.
68b49109 20135For GRUB, it is chosen at run-time; currently GRUB chooses 0, which
e0b2e930
LF
20136corresponds to COM1 (@pxref{Serial terminal,,, grub,GNU GRUB manual}).
20137
20138@item @code{serial-speed} (default: @code{#f})
74e64724
MO
20139The speed of the serial interface, as an integer. For GRUB, the
20140default value is chosen at run-time; currently GRUB chooses
201419600@tie{}bps (@pxref{Serial terminal,,, grub,GNU GRUB manual}).
88faf933
LC
20142@end table
20143
20144@end deftp
20145
44d5f54e
LC
20146@cindex dual boot
20147@cindex boot menu
88faf933
LC
20148Should you want to list additional boot menu entries @i{via} the
20149@code{menu-entries} field above, you will need to create them with the
44d5f54e
LC
20150@code{menu-entry} form. For example, imagine you want to be able to
20151boot another distro (hard to imagine!), you can define a menu entry
20152along these lines:
20153
20154@example
20155(menu-entry
20156 (label "The Other Distro")
20157 (linux "/boot/old/vmlinux-2.6.32")
20158 (linux-arguments '("root=/dev/sda2"))
20159 (initrd "/boot/old/initrd"))
20160@end example
20161
20162Details below.
88faf933
LC
20163
20164@deftp {Data Type} menu-entry
74e64724 20165The type of an entry in the bootloader menu.
88faf933
LC
20166
20167@table @asis
20168
20169@item @code{label}
35ed9306 20170The label to show in the menu---e.g., @code{"GNU"}.
88faf933
LC
20171
20172@item @code{linux}
44d5f54e
LC
20173The Linux kernel image to boot, for example:
20174
20175@example
20176(file-append linux-libre "/bzImage")
20177@end example
88faf933 20178
74e64724
MO
20179For GRUB, it is also possible to specify a device explicitly in the
20180file path using GRUB's device naming convention (@pxref{Naming
20181convention,,, grub, GNU GRUB manual}), for example:
1ef8b72a
CM
20182
20183@example
20184"(hd0,msdos1)/boot/vmlinuz"
20185@end example
20186
20187If the device is specified explicitly as above, then the @code{device}
20188field is ignored entirely.
20189
88faf933
LC
20190@item @code{linux-arguments} (default: @code{()})
20191The list of extra Linux kernel command-line arguments---e.g.,
20192@code{("console=ttyS0")}.
20193
20194@item @code{initrd}
20195A G-Expression or string denoting the file name of the initial RAM disk
20196to use (@pxref{G-Expressions}).
1ef8b72a 20197@item @code{device} (default: @code{#f})
74e64724 20198The device where the kernel and initrd are to be found---i.e., for GRUB,
1ef8b72a
CM
20199@dfn{root} for this menu entry (@pxref{root,,, grub, GNU GRUB manual}).
20200
20201This may be a file system label (a string), a file system UUID (a
74e64724
MO
20202bytevector, @pxref{File Systems}), or @code{#f}, in which case
20203the bootloader will search the device containing the file specified by
20204the @code{linux} field (@pxref{search,,, grub, GNU GRUB manual}). It
20205must @emph{not} be an OS device name such as @file{/dev/sda1}.
1ef8b72a 20206
88faf933
LC
20207@end table
20208@end deftp
20209
20210@c FIXME: Write documentation once it's stable.
74e64724
MO
20211Fow now only GRUB has theme support. GRUB themes are created using
20212the @code{grub-theme} form, which is not documented yet.
88faf933
LC
20213
20214@defvr {Scheme Variable} %default-theme
74e64724
MO
20215This is the default GRUB theme used by the operating system if no
20216@code{theme} field is specified in @code{bootloader-configuration}
20217record.
20218
20219It comes with a fancy background image displaying the GNU and Guix
20220logos.
88faf933
LC
20221@end defvr
20222
20223
cf4a9129
LC
20224@node Invoking guix system
20225@subsection Invoking @code{guix system}
0918e64a 20226
1068f26b 20227Once you have written an operating system declaration as seen in the
cf4a9129
LC
20228previous section, it can be @dfn{instantiated} using the @command{guix
20229system} command. The synopsis is:
4af2447e 20230
cf4a9129
LC
20231@example
20232guix system @var{options}@dots{} @var{action} @var{file}
20233@end example
4af2447e 20234
cf4a9129
LC
20235@var{file} must be the name of a file containing an
20236@code{operating-system} declaration. @var{action} specifies how the
a40424bd 20237operating system is instantiated. Currently the following values are
cf4a9129 20238supported:
4af2447e 20239
cf4a9129 20240@table @code
0649321d
LC
20241@item search
20242Display available service type definitions that match the given regular
20243expressions, sorted by relevance:
20244
20245@example
20246$ guix system search console font
20247name: console-fonts
20248location: gnu/services/base.scm:729:2
20249extends: shepherd-root
20250description: Install the given fonts on the specified ttys (fonts are
20251+ per virtual console on GNU/Linux). The value of this service is a list
20252+ of tty/font pairs like:
20253+
20254+ '(("tty1" . "LatGrkCyr-8x16"))
20255relevance: 20
20256
20257name: mingetty
20258location: gnu/services/base.scm:1048:2
20259extends: shepherd-root
20260description: Provide console login using the `mingetty' program.
20261relevance: 2
20262
20263name: login
20264location: gnu/services/base.scm:775:2
20265extends: pam
20266description: Provide a console log-in service as specified by its
20267+ configuration value, a `login-configuration' object.
20268relevance: 2
20269
20270@dots{}
20271@end example
20272
20273As for @command{guix package --search}, the result is written in
20274@code{recutils} format, which makes it easy to filter the output
20275(@pxref{Top, GNU recutils databases,, recutils, GNU recutils manual}).
20276
cf4a9129
LC
20277@item reconfigure
20278Build the operating system described in @var{file}, activate it, and
8074b330
CM
20279switch to it@footnote{This action (and the related actions
20280@code{switch-generation} and @code{roll-back}) are usable only on
20281systems already running GuixSD.}.
4af2447e 20282
cf4a9129
LC
20283This effects all the configuration specified in @var{file}: user
20284accounts, system services, global package list, setuid programs, etc.
240b57f0
LC
20285The command starts system services specified in @var{file} that are not
20286currently running; if a service is currently running, it does not
1068f26b 20287attempt to upgrade it since this would not be possible without stopping it
240b57f0 20288first.
4af2447e 20289
067a2e2d
CM
20290This command creates a new generation whose number is one greater than
20291the current generation (as reported by @command{guix system
20292list-generations}). If that generation already exists, it will be
20293overwritten. This behavior mirrors that of @command{guix package}
20294(@pxref{Invoking guix package}).
20295
74e64724
MO
20296It also adds a bootloader menu entry for the new OS configuration,
20297---unless @option{--no-bootloader} is passed. For GRUB, it moves
20298entries for older configurations to a submenu, allowing you to choose
20299an older system generation at boot time should you need it.
4af2447e 20300
240b57f0 20301@quotation Note
bf2479c7
LC
20302@c The paragraph below refers to the problem discussed at
20303@c <http://lists.gnu.org/archive/html/guix-devel/2014-08/msg00057.html>.
20304It is highly recommended to run @command{guix pull} once before you run
20305@command{guix system reconfigure} for the first time (@pxref{Invoking
20306guix pull}). Failing to do that you would see an older version of Guix
20307once @command{reconfigure} has completed.
240b57f0 20308@end quotation
bf2479c7 20309
8074b330 20310@item switch-generation
e32171ee 20311@cindex generations
8074b330 20312Switch to an existing system generation. This action atomically
74e64724
MO
20313switches the system profile to the specified system generation. It
20314also rearranges the system's existing bootloader menu entries. It
20315makes the menu entry for the specified system generation the default,
20316and it moves the entries for the other generatiors to a submenu, if
20317supported by the bootloader being used. The next time the system
20318boots, it will use the specified system generation.
20319
20320The bootloader itself is not being reinstalled when using this
20321command. Thus, the installed bootloader is used with an updated
20322configuration file.
8074b330
CM
20323
20324The target generation can be specified explicitly by its generation
20325number. For example, the following invocation would switch to system
20326generation 7:
20327
20328@example
20329guix system switch-generation 7
20330@end example
20331
20332The target generation can also be specified relative to the current
20333generation with the form @code{+N} or @code{-N}, where @code{+3} means
20334``3 generations ahead of the current generation,'' and @code{-1} means
20335``1 generation prior to the current generation.'' When specifying a
20336negative value such as @code{-1}, you must precede it with @code{--} to
20337prevent it from being parsed as an option. For example:
20338
20339@example
20340guix system switch-generation -- -1
20341@end example
20342
20343Currently, the effect of invoking this action is @emph{only} to switch
74e64724
MO
20344the system profile to an existing generation and rearrange the
20345bootloader menu entries. To actually start using the target system
20346generation, you must reboot after running this action. In the future,
20347it will be updated to do the same things as @command{reconfigure},
20348like activating and deactivating services.
8074b330
CM
20349
20350This action will fail if the specified generation does not exist.
20351
20352@item roll-back
e32171ee 20353@cindex rolling back
8074b330
CM
20354Switch to the preceding system generation. The next time the system
20355boots, it will use the preceding system generation. This is the inverse
20356of @command{reconfigure}, and it is exactly the same as invoking
20357@command{switch-generation} with an argument of @code{-1}.
20358
20359Currently, as with @command{switch-generation}, you must reboot after
20360running this action to actually start using the preceding system
20361generation.
20362
cf4a9129 20363@item build
1068f26b 20364Build the derivation of the operating system, which includes all the
cf4a9129
LC
20365configuration files and programs needed to boot and run the system.
20366This action does not actually install anything.
113daf62 20367
cf4a9129
LC
20368@item init
20369Populate the given directory with all the files necessary to run the
20370operating system specified in @var{file}. This is useful for first-time
4705641f 20371installations of GuixSD. For instance:
113daf62
LC
20372
20373@example
cf4a9129 20374guix system init my-os-config.scm /mnt
113daf62
LC
20375@end example
20376
cf4a9129
LC
20377copies to @file{/mnt} all the store items required by the configuration
20378specified in @file{my-os-config.scm}. This includes configuration
20379files, packages, and so on. It also creates other essential files
20380needed for the system to operate correctly---e.g., the @file{/etc},
20381@file{/var}, and @file{/run} directories, and the @file{/bin/sh} file.
113daf62 20382
045ebb3e 20383This command also installs bootloader on the target specified in
74e64724
MO
20384@file{my-os-config}, unless the @option{--no-bootloader} option was
20385passed.
113daf62 20386
cf4a9129
LC
20387@item vm
20388@cindex virtual machine
0276f697 20389@cindex VM
f535dcbe 20390@anchor{guix system vm}
1068f26b 20391Build a virtual machine that contains the operating system declared in
cf4a9129 20392@var{file}, and return a script to run that virtual machine (VM).
03317cbf
LC
20393Arguments given to the script are passed to QEMU as in the example
20394below, which enables networking and requests 1@tie{}GiB of RAM for the
20395emulated machine:
20396
20397@example
20398$ /gnu/store/@dots{}-run-vm.sh -m 1024 -net user
20399@end example
113daf62 20400
cf4a9129 20401The VM shares its store with the host system.
113daf62 20402
0276f697
LC
20403Additional file systems can be shared between the host and the VM using
20404the @code{--share} and @code{--expose} command-line options: the former
20405specifies a directory to be shared with write access, while the latter
20406provides read-only access to the shared directory.
20407
20408The example below creates a VM in which the user's home directory is
20409accessible read-only, and where the @file{/exchange} directory is a
1068f26b 20410read-write mapping of @file{$HOME/tmp} on the host:
0276f697
LC
20411
20412@example
20413guix system vm my-config.scm \
20414 --expose=$HOME --share=$HOME/tmp=/exchange
20415@end example
20416
6aa260af
LC
20417On GNU/Linux, the default is to boot directly to the kernel; this has
20418the advantage of requiring only a very tiny root disk image since the
1068f26b 20419store of the host can then be mounted.
6aa260af
LC
20420
20421The @code{--full-boot} option forces a complete boot sequence, starting
20422with the bootloader. This requires more disk space since a root image
20423containing at least the kernel, initrd, and bootloader data files must
20424be created. The @code{--image-size} option can be used to specify the
1068f26b 20425size of the image.
ab11f0be 20426
a335f6fc
CM
20427@cindex System images, creation in various formats
20428@cindex Creating system images in various formats
cf4a9129
LC
20429@item vm-image
20430@itemx disk-image
a335f6fc
CM
20431@itemx docker-image
20432Return a virtual machine, disk image, or Docker image of the operating
20433system declared in @var{file} that stands alone. By default,
20434@command{guix system} estimates the size of the image needed to store
20435the system, but you can use the @option{--image-size} option to specify
20436a value. Docker images are built to contain exactly what they need, so
20437the @option{--image-size} option is ignored in the case of
20438@code{docker-image}.
113daf62 20439
3f4d8a7f 20440You can specify the root file system type by using the
3b6e7d86 20441@option{--file-system-type} option. It defaults to @code{ext4}.
3f4d8a7f 20442
cf4a9129 20443When using @code{vm-image}, the returned image is in qcow2 format, which
97d76250
LF
20444the QEMU emulator can efficiently use. @xref{Running GuixSD in a VM},
20445for more information on how to run the image in a virtual machine.
113daf62 20446
cf4a9129
LC
20447When using @code{disk-image}, a raw disk image is produced; it can be
20448copied as is to a USB stick, for instance. Assuming @code{/dev/sdc} is
1068f26b 20449the device corresponding to a USB stick, one can copy the image to it
cf4a9129 20450using the following command:
113daf62 20451
cf4a9129
LC
20452@example
20453# dd if=$(guix system disk-image my-os.scm) of=/dev/sdc
20454@end example
113daf62 20455
a335f6fc
CM
20456When using @code{docker-image}, a Docker image is produced. Guix builds
20457the image from scratch, not from a pre-existing Docker base image. As a
20458result, it contains @emph{exactly} what you define in the operating
20459system configuration file. You can then load the image and launch a
20460Docker container using commands like the following:
20461
20462@example
20463image_id="$(docker load < guixsd-docker-image.tar.gz)"
20464docker run -e GUIX_NEW_SYSTEM=/var/guix/profiles/system \\
20465 --entrypoint /var/guix/profiles/system/profile/bin/guile \\
20466 $image_id /var/guix/profiles/system/boot
20467@end example
20468
20469This command starts a new Docker container from the specified image. It
20470will boot the GuixSD system in the usual manner, which means it will
20471start any services you have defined in the operating system
20472configuration. Depending on what you run in the Docker container, it
20473may be necessary to give the container additional permissions. For
20474example, if you intend to build software using Guix inside of the Docker
20475container, you may need to pass the @option{--privileged} option to
20476@code{docker run}.
20477
1c8a81b1
DT
20478@item container
20479Return a script to run the operating system declared in @var{file}
20480within a container. Containers are a set of lightweight isolation
20481mechanisms provided by the kernel Linux-libre. Containers are
20482substantially less resource-demanding than full virtual machines since
20483the kernel, shared objects, and other resources can be shared with the
20484host system; this also means they provide thinner isolation.
20485
20486Currently, the script must be run as root in order to support more than
20487a single user and group. The container shares its store with the host
20488system.
20489
20490As with the @code{vm} action (@pxref{guix system vm}), additional file
20491systems to be shared between the host and container can be specified
20492using the @option{--share} and @option{--expose} options:
20493
20494@example
20495guix system container my-config.scm \
20496 --expose=$HOME --share=$HOME/tmp=/exchange
20497@end example
20498
0f252e26 20499@quotation Note
cfd35b4e 20500This option requires Linux-libre 3.19 or newer.
0f252e26
DT
20501@end quotation
20502
cf4a9129 20503@end table
113daf62 20504
ccd7158d
LC
20505@var{options} can contain any of the common build options (@pxref{Common
20506Build Options}). In addition, @var{options} can contain one of the
20507following:
113daf62 20508
cf4a9129 20509@table @option
5a72ddf1
MO
20510@item --expression=@var{expr}
20511@itemx -e @var{expr}
20512Consider the operating-system @var{expr} evaluates to.
20513This is an alternative to specifying a file which evaluates to an
20514operating system.
20515This is used to generate the GuixSD installer @pxref{Building the
20516Installation Image}).
20517
cf4a9129
LC
20518@item --system=@var{system}
20519@itemx -s @var{system}
1068f26b 20520Attempt to build for @var{system} instead of the host system type.
cf4a9129 20521This works as per @command{guix build} (@pxref{Invoking guix build}).
113daf62 20522
f3f427c2
LC
20523@item --derivation
20524@itemx -d
20525Return the derivation file name of the given operating system without
20526building anything.
20527
3f4d8a7f
DM
20528@item --file-system-type=@var{type}
20529@itemx -t @var{type}
20530For the @code{disk-image} action, create a file system of the given
20531@var{type} on the image.
20532
20533When this option is omitted, @command{guix system} uses @code{ext4}.
20534
20535@cindex ISO-9660 format
20536@cindex CD image format
20537@cindex DVD image format
20538@code{--file-system-type=iso9660} produces an ISO-9660 image, suitable
20539for burning on CDs and DVDs.
20540
cf4a9129
LC
20541@item --image-size=@var{size}
20542For the @code{vm-image} and @code{disk-image} actions, create an image
20543of the given @var{size}. @var{size} may be a number of bytes, or it may
4a44d7bb
LC
20544include a unit as a suffix (@pxref{Block size, size specifications,,
20545coreutils, GNU Coreutils}).
db030303 20546
a8ac4f08
LC
20547When this option is omitted, @command{guix system} computes an estimate
20548of the image size as a function of the size of the system declared in
20549@var{file}.
20550
5ea69d9a
CM
20551@item --root=@var{file}
20552@itemx -r @var{file}
20553Make @var{file} a symlink to the result, and register it as a garbage
20554collector root.
20555
61b1dbbd
LC
20556@item --skip-checks
20557Skip pre-installation safety checks.
20558
20559By default, @command{guix system init} and @command{guix system
20560reconfigure} perform safety checks: they make sure the file systems that
20561appear in the @code{operating-system} declaration actually exist
20562(@pxref{File Systems}), and that any Linux kernel modules that may be
20563needed at boot time are listed in @code{initrd-modules} (@pxref{Initial
20564RAM Disk}). Passing this option skips these tests altogether.
20565
db030303
LC
20566@item --on-error=@var{strategy}
20567Apply @var{strategy} when an error occurs when reading @var{file}.
20568@var{strategy} may be one of the following:
20569
20570@table @code
20571@item nothing-special
20572Report the error concisely and exit. This is the default strategy.
20573
20574@item backtrace
20575Likewise, but also display a backtrace.
20576
20577@item debug
20578Report the error and enter Guile's debugger. From there, you can run
20579commands such as @code{,bt} to get a backtrace, @code{,locals} to
1068f26b
AE
20580display local variable values, and more generally inspect the state of the
20581program. @xref{Debug Commands,,, guile, GNU Guile Reference Manual}, for
db030303
LC
20582a list of available debugging commands.
20583@end table
113daf62 20584@end table
113daf62 20585
eca69fc0
LC
20586@quotation Note
20587All the actions above, except @code{build} and @code{init},
20588can use KVM support in the Linux-libre kernel. Specifically, if the
20589machine has hardware virtualization support, the corresponding
cf4a9129 20590KVM kernel module should be loaded, and the @file{/dev/kvm} device node
1068f26b 20591must exist and be readable and writable by the user and by the
eca69fc0
LC
20592build users of the daemon (@pxref{Build Environment Setup}).
20593@end quotation
8451a568 20594
65797bff
LC
20595Once you have built, configured, re-configured, and re-re-configured
20596your GuixSD installation, you may find it useful to list the operating
20597system generations available on disk---and that you can choose from the
74e64724 20598bootloader boot menu:
65797bff
LC
20599
20600@table @code
20601
20602@item list-generations
20603List a summary of each generation of the operating system available on
20604disk, in a human-readable way. This is similar to the
20605@option{--list-generations} option of @command{guix package}
20606(@pxref{Invoking guix package}).
20607
20608Optionally, one can specify a pattern, with the same syntax that is used
20609in @command{guix package --list-generations}, to restrict the list of
20610generations displayed. For instance, the following command displays
1068f26b 20611generations that are up to 10 days old:
65797bff
LC
20612
20613@example
20614$ guix system list-generations 10d
20615@end example
20616
20617@end table
20618
d6c3267a
LC
20619The @command{guix system} command has even more to offer! The following
20620sub-commands allow you to visualize how your system services relate to
20621each other:
20622
20623@anchor{system-extension-graph}
20624@table @code
20625
20626@item extension-graph
20627Emit in Dot/Graphviz format to standard output the @dfn{service
20628extension graph} of the operating system defined in @var{file}
20629(@pxref{Service Composition}, for more information on service
20630extensions.)
20631
20632The command:
20633
20634@example
20635$ guix system extension-graph @var{file} | dot -Tpdf > services.pdf
20636@end example
20637
20638produces a PDF file showing the extension relations among services.
20639
710fa231
AK
20640@anchor{system-shepherd-graph}
20641@item shepherd-graph
6f305ea5 20642Emit in Dot/Graphviz format to standard output the @dfn{dependency
dd17bc38
AK
20643graph} of shepherd services of the operating system defined in
20644@var{file}. @xref{Shepherd Services}, for more information and for an
20645example graph.
6f305ea5 20646
d6c3267a
LC
20647@end table
20648
97d76250 20649@node Running GuixSD in a VM
70ac09a5 20650@subsection Running GuixSD in a Virtual Machine
97d76250 20651
e32171ee 20652@cindex virtual machine
4b236c88
LF
20653To run GuixSD in a virtual machine (VM), one can either use the
20654pre-built GuixSD VM image distributed at
20655@indicateurl{ftp://alpha.gnu.org/guix/guixsd-vm-image-@value{VERSION}.@var{system}.tar.xz}
20656, or build their own virtual machine image using @command{guix system
20657vm-image} (@pxref{Invoking guix system}). The returned image is in
20658qcow2 format, which the @uref{http://qemu.org/, QEMU emulator} can
20659efficiently use.
97d76250 20660
e32171ee 20661@cindex QEMU
4b236c88
LF
20662If you built your own image, you must copy it out of the store
20663(@pxref{The Store}) and give yourself permission to write to the copy
20664before you can use it. When invoking QEMU, you must choose a system
20665emulator that is suitable for your hardware platform. Here is a minimal
20666QEMU invocation that will boot the result of @command{guix system
20667vm-image} on x86_64 hardware:
97d76250
LF
20668
20669@example
20670$ qemu-system-x86_64 \
20671 -net user -net nic,model=virtio \
20672 -enable-kvm -m 256 /tmp/qemu-image
20673@end example
20674
20675Here is what each of these options means:
20676
20677@table @code
20678@item qemu-system-x86_64
20679This specifies the hardware platform to emulate. This should match the
20680host.
20681
20682@item -net user
20683Enable the unprivileged user-mode network stack. The guest OS can
20684access the host but not vice versa. This is the simplest way to get the
58806e6f 20685guest OS online.
97d76250
LF
20686
20687@item -net nic,model=virtio
1068f26b 20688You must create a network interface of a given model. If you do not
97d76250
LF
20689create a NIC, the boot will fail. Assuming your hardware platform is
20690x86_64, you can get a list of available NIC models by running
20691@command{qemu-system-x86_64 -net nic,model=help}.
20692
20693@item -enable-kvm
20694If your system has hardware virtualization extensions, enabling the
1068f26b 20695virtual machine support (KVM) of the Linux kernel will make things run
97d76250
LF
20696faster.
20697
20698@item -m 256
20699RAM available to the guest OS, in mebibytes. Defaults to 128@tie{}MiB,
7414de0a 20700which may be insufficient for some operations.
97d76250
LF
20701
20702@item /tmp/qemu-image
20703The file name of the qcow2 image.
20704@end table
d6c3267a 20705
9fc221b5 20706The default @command{run-vm.sh} script that is returned by an invocation of
3ddc50db
DC
20707@command{guix system vm} does not add a @command{-net user} flag by default.
20708To get network access from within the vm add the @code{(dhcp-client-service)}
20709to your system definition and start the VM using
20710@command{`guix system vm config.scm` -net user}. An important caveat of using
20711@command{-net user} for networking is that @command{ping} will not work, because
20712it uses the ICMP protocol. You'll have to use a different command to check for
4100698d 20713network connectivity, for example @command{guix download}.
3ddc50db
DC
20714
20715@subsubsection Connecting Through SSH
20716
e32171ee
JD
20717@cindex SSH
20718@cindex SSH server
3ddc50db
DC
20719To enable SSH inside a VM you need to add a SSH server like @code{(dropbear-service)}
20720or @code{(lsh-service)} to your VM. The @code{(lsh-service}) doesn't currently
20721boot unsupervised. It requires you to type some characters to initialize the
20722randomness generator. In addition you need to forward the SSH port, 22 by
20723default, to the host. You can do this with
20724
20725@example
20726`guix system vm config.scm` -net user,hostfwd=tcp::10022-:22
20727@end example
20728
20729To connect to the VM you can run
20730
20731@example
20732ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 10022
20733@end example
20734
20735The @command{-p} tells @command{ssh} the port you want to connect to.
20736@command{-o UserKnownHostsFile=/dev/null} prevents @command{ssh} from complaining
20737every time you modify your @command{config.scm} file and the
20738@command{-o StrictHostKeyChecking=no} prevents you from having to allow a
20739connection to an unknown host every time you connect.
20740
20741@subsubsection Using @command{virt-viewer} with Spice
20742
20743As an alternative to the default @command{qemu} graphical client you can
20744use the @command{remote-viewer} from the @command{virt-viewer} package. To
20745connect pass the @command{-spice port=5930,disable-ticketing} flag to
20746@command{qemu}. See previous section for further information on how to do this.
20747
20748Spice also allows you to do some nice stuff like share your clipboard with your
20749VM. To enable that you'll also have to pass the following flags to @command{qemu}:
20750
20751@example
20752-device virtio-serial-pci,id=virtio-serial0,max_ports=16,bus=pci.0,addr=0x5
20753-chardev spicevmc,name=vdagent,id=vdagent
20754-device virtserialport,nr=1,bus=virtio-serial0.0,chardev=vdagent,
20755name=com.redhat.spice.0
20756@end example
20757
20758You'll also need to add the @pxref{Miscellaneous Services, Spice service}.
20759
cf4a9129
LC
20760@node Defining Services
20761@subsection Defining Services
8451a568 20762
eb524192 20763The previous sections show the available services and how one can combine
0adfe95a
LC
20764them in an @code{operating-system} declaration. But how do we define
20765them in the first place? And what is a service anyway?
8451a568 20766
0adfe95a
LC
20767@menu
20768* Service Composition:: The model for composing services.
20769* Service Types and Services:: Types and services.
20770* Service Reference:: API reference.
dd17bc38 20771* Shepherd Services:: A particular type of service.
0adfe95a
LC
20772@end menu
20773
20774@node Service Composition
20775@subsubsection Service Composition
20776
20777@cindex services
20778@cindex daemons
20779Here we define a @dfn{service} as, broadly, something that extends the
1068f26b 20780functionality of the operating system. Often a service is a process---a
0adfe95a
LC
20781@dfn{daemon}---started when the system boots: a secure shell server, a
20782Web server, the Guix build daemon, etc. Sometimes a service is a daemon
20783whose execution can be triggered by another daemon---e.g., an FTP server
20784started by @command{inetd} or a D-Bus service activated by
20785@command{dbus-daemon}. Occasionally, a service does not map to a
20786daemon. For instance, the ``account'' service collects user accounts
20787and makes sure they exist when the system runs; the ``udev'' service
20788collects device management rules and makes them available to the eudev
1068f26b
AE
20789daemon; the @file{/etc} service populates the @file{/etc} directory
20790of the system.
0adfe95a 20791
d6c3267a 20792@cindex service extensions
0adfe95a 20793GuixSD services are connected by @dfn{extensions}. For instance, the
1068f26b 20794secure shell service @emph{extends} the Shepherd---the GuixSD
dd17bc38
AK
20795initialization system, running as PID@tie{}1---by giving it the command
20796lines to start and stop the secure shell daemon (@pxref{Networking
20797Services, @code{lsh-service}}); the UPower service extends the D-Bus
20798service by passing it its @file{.service} specification, and extends the
20799udev service by passing it device management rules (@pxref{Desktop
20800Services, @code{upower-service}}); the Guix daemon service extends the
20801Shepherd by passing it the command lines to start and stop the daemon,
20802and extends the account service by passing it a list of required build
20803user accounts (@pxref{Base Services}).
0adfe95a
LC
20804
20805All in all, services and their ``extends'' relations form a directed
20806acyclic graph (DAG). If we represent services as boxes and extensions
20807as arrows, a typical system might provide something like this:
20808
20809@image{images/service-graph,,5in,Typical service extension graph.}
20810
d62e201c
LC
20811@cindex system service
20812At the bottom, we see the @dfn{system service}, which produces the
20813directory containing everything to run and boot the system, as returned
20814by the @command{guix system build} command. @xref{Service Reference},
20815to learn about the other service types shown here.
d6c3267a
LC
20816@xref{system-extension-graph, the @command{guix system extension-graph}
20817command}, for information on how to generate this representation for a
20818particular operating system definition.
0adfe95a
LC
20819
20820@cindex service types
20821Technically, developers can define @dfn{service types} to express these
20822relations. There can be any number of services of a given type on the
20823system---for instance, a system running two instances of the GNU secure
20824shell server (lsh) has two instances of @var{lsh-service-type}, with
20825different parameters.
20826
20827The following section describes the programming interface for service
20828types and services.
20829
20830@node Service Types and Services
20831@subsubsection Service Types and Services
20832
20833A @dfn{service type} is a node in the DAG described above. Let us start
20834with a simple example, the service type for the Guix build daemon
20835(@pxref{Invoking guix-daemon}):
20836
20837@example
20838(define guix-service-type
20839 (service-type
20840 (name 'guix)
20841 (extensions
d4053c71 20842 (list (service-extension shepherd-root-service-type guix-shepherd-service)
0adfe95a 20843 (service-extension account-service-type guix-accounts)
1bb895ea
LC
20844 (service-extension activation-service-type guix-activation)))
20845 (default-value (guix-configuration))))
0adfe95a 20846@end example
8451a568 20847
cf4a9129 20848@noindent
1bb895ea 20849It defines three things:
0adfe95a
LC
20850
20851@enumerate
20852@item
20853A name, whose sole purpose is to make inspection and debugging easier.
20854
20855@item
20856A list of @dfn{service extensions}, where each extension designates the
1068f26b
AE
20857target service type and a procedure that, given the parameters of the
20858service, returns a list of objects to extend the service of that type.
0adfe95a
LC
20859
20860Every service type has at least one service extension. The only
20861exception is the @dfn{boot service type}, which is the ultimate service.
1bb895ea
LC
20862
20863@item
20864Optionally, a default value for instances of this type.
0adfe95a
LC
20865@end enumerate
20866
20867In this example, @var{guix-service-type} extends three services:
20868
20869@table @var
d4053c71
AK
20870@item shepherd-root-service-type
20871The @var{guix-shepherd-service} procedure defines how the Shepherd
20872service is extended. Namely, it returns a @code{<shepherd-service>}
20873object that defines how @command{guix-daemon} is started and stopped
20874(@pxref{Shepherd Services}).
0adfe95a
LC
20875
20876@item account-service-type
20877This extension for this service is computed by @var{guix-accounts},
20878which returns a list of @code{user-group} and @code{user-account}
20879objects representing the build user accounts (@pxref{Invoking
20880guix-daemon}).
20881
20882@item activation-service-type
20883Here @var{guix-activation} is a procedure that returns a gexp, which is
20884a code snippet to run at ``activation time''---e.g., when the service is
20885booted.
20886@end table
20887
20888A service of this type is instantiated like this:
20889
20890@example
20891(service guix-service-type
20892 (guix-configuration
20893 (build-accounts 5)
20894 (use-substitutes? #f)))
20895@end example
20896
20897The second argument to the @code{service} form is a value representing
20898the parameters of this specific service instance.
20899@xref{guix-configuration-type, @code{guix-configuration}}, for
1bb895ea
LC
20900information about the @code{guix-configuration} data type. When the
20901value is omitted, the default value specified by
20902@code{guix-service-type} is used:
20903
20904@example
20905(service guix-service-type)
20906@end example
0adfe95a
LC
20907
20908@var{guix-service-type} is quite simple because it extends other
20909services but is not extensible itself.
20910
20911@c @subsubsubsection Extensible Service Types
20912
20913The service type for an @emph{extensible} service looks like this:
20914
20915@example
20916(define udev-service-type
20917 (service-type (name 'udev)
20918 (extensions
d4053c71
AK
20919 (list (service-extension shepherd-root-service-type
20920 udev-shepherd-service)))
0adfe95a
LC
20921
20922 (compose concatenate) ;concatenate the list of rules
20923 (extend (lambda (config rules)
20924 (match config
20925 (($ <udev-configuration> udev initial-rules)
20926 (udev-configuration
20927 (udev udev) ;the udev package to use
20928 (rules (append initial-rules rules)))))))))
20929@end example
20930
20931This is the service type for the
20932@uref{https://wiki.gentoo.org/wiki/Project:Eudev, eudev device
20933management daemon}. Compared to the previous example, in addition to an
d4053c71 20934extension of @var{shepherd-root-service-type}, we see two new fields:
0adfe95a
LC
20935
20936@table @code
20937@item compose
20938This is the procedure to @dfn{compose} the list of extensions to
20939services of this type.
20940
20941Services can extend the udev service by passing it lists of rules; we
20942compose those extensions simply by concatenating them.
20943
20944@item extend
1068f26b 20945This procedure defines how the value of the service is @dfn{extended} with
0adfe95a
LC
20946the composition of the extensions.
20947
20948Udev extensions are composed into a list of rules, but the udev service
20949value is itself a @code{<udev-configuration>} record. So here, we
a40424bd 20950extend that record by appending the list of rules it contains to the
0adfe95a 20951list of contributed rules.
b714395a
LC
20952
20953@item description
20954This is a string giving an overview of the service type. The string can
0649321d
LC
20955contain Texinfo markup (@pxref{Overview,,, texinfo, GNU Texinfo}). The
20956@command{guix system search} command searches these strings and displays
20957them (@pxref{Invoking guix system}).
0adfe95a
LC
20958@end table
20959
20960There can be only one instance of an extensible service type such as
20961@var{udev-service-type}. If there were more, the
20962@code{service-extension} specifications would be ambiguous.
20963
20964Still here? The next section provides a reference of the programming
20965interface for services.
20966
20967@node Service Reference
20968@subsubsection Service Reference
20969
20970We have seen an overview of service types (@pxref{Service Types and
20971Services}). This section provides a reference on how to manipulate
20972services and service types. This interface is provided by the
20973@code{(gnu services)} module.
20974
1bb895ea 20975@deffn {Scheme Procedure} service @var{type} [@var{value}]
0adfe95a
LC
20976Return a new service of @var{type}, a @code{<service-type>} object (see
20977below.) @var{value} can be any object; it represents the parameters of
20978this particular service instance.
1bb895ea
LC
20979
20980When @var{value} is omitted, the default value specified by @var{type}
20981is used; if @var{type} does not specify a default value, an error is
20982raised.
20983
20984For instance, this:
20985
20986@example
20987(service openssh-service-type)
20988@end example
20989
20990@noindent
20991is equivalent to this:
20992
20993@example
20994(service openssh-service-type
20995 (openssh-configuration))
20996@end example
20997
20998In both cases the result is an instance of @code{openssh-service-type}
20999with the default configuration.
0adfe95a
LC
21000@end deffn
21001
21002@deffn {Scheme Procedure} service? @var{obj}
21003Return true if @var{obj} is a service.
21004@end deffn
8451a568 21005
0adfe95a
LC
21006@deffn {Scheme Procedure} service-kind @var{service}
21007Return the type of @var{service}---i.e., a @code{<service-type>} object.
21008@end deffn
21009
efe7d19a 21010@deffn {Scheme Procedure} service-value @var{service}
0adfe95a
LC
21011Return the value associated with @var{service}. It represents its
21012parameters.
21013@end deffn
21014
21015Here is an example of how a service is created and manipulated:
21016
21017@example
21018(define s
21019 (service nginx-service-type
21020 (nginx-configuration
21021 (nginx nginx)
21022 (log-directory log-directory)
21023 (run-directory run-directory)
21024 (file config-file))))
21025
21026(service? s)
21027@result{} #t
21028
21029(eq? (service-kind s) nginx-service-type)
21030@result{} #t
21031@end example
21032
cd6f6c22
LC
21033The @code{modify-services} form provides a handy way to change the
21034parameters of some of the services of a list such as
4d343a14 21035@var{%base-services} (@pxref{Base Services, @code{%base-services}}). It
7414de0a 21036evaluates to a list of services. Of course, you could always use
4d343a14
CM
21037standard list combinators such as @code{map} and @code{fold} to do that
21038(@pxref{SRFI-1, List Library,, guile, GNU Guile Reference Manual});
21039@code{modify-services} simply provides a more concise form for this
21040common pattern.
cd6f6c22
LC
21041
21042@deffn {Scheme Syntax} modify-services @var{services} @
21043 (@var{type} @var{variable} => @var{body}) @dots{}
21044
21045Modify the services listed in @var{services} according to the given
21046clauses. Each clause has the form:
21047
21048@example
21049(@var{type} @var{variable} => @var{body})
21050@end example
21051
4d343a14
CM
21052where @var{type} is a service type---e.g.,
21053@code{guix-service-type}---and @var{variable} is an identifier that is
21054bound within the @var{body} to the service parameters---e.g., a
21055@code{guix-configuration} instance---of the original service of that
21056@var{type}.
cd6f6c22 21057
4d343a14
CM
21058The @var{body} should evaluate to the new service parameters, which will
21059be used to configure the new service. This new service will replace the
21060original in the resulting list. Because a service's service parameters
7414de0a 21061are created using @code{define-record-type*}, you can write a succinct
4d343a14
CM
21062@var{body} that evaluates to the new service parameters by using the
21063@code{inherit} feature that @code{define-record-type*} provides.
21064
b53daad0 21065@xref{Using the Configuration System}, for example usage.
cd6f6c22 21066
cd6f6c22
LC
21067@end deffn
21068
21069Next comes the programming interface for service types. This is
21070something you want to know when writing new service definitions, but not
21071necessarily when simply looking for ways to customize your
21072@code{operating-system} declaration.
21073
0adfe95a
LC
21074@deftp {Data Type} service-type
21075@cindex service type
21076This is the representation of a @dfn{service type} (@pxref{Service Types
21077and Services}).
21078
21079@table @asis
21080@item @code{name}
21081This is a symbol, used only to simplify inspection and debugging.
21082
21083@item @code{extensions}
1068f26b 21084A non-empty list of @code{<service-extension>} objects (see below).
0adfe95a
LC
21085
21086@item @code{compose} (default: @code{#f})
21087If this is @code{#f}, then the service type denotes services that cannot
21088be extended---i.e., services that do not receive ``values'' from other
21089services.
21090
21091Otherwise, it must be a one-argument procedure. The procedure is called
21092by @code{fold-services} and is passed a list of values collected from
21093extensions. It must return a value that is a valid parameter value for
21094the service instance.
21095
21096@item @code{extend} (default: @code{#f})
21097If this is @code{#f}, services of this type cannot be extended.
21098
21099Otherwise, it must be a two-argument procedure: @code{fold-services}
1068f26b 21100calls it, passing it the initial value of the service as the first argument
0adfe95a
LC
21101and the result of applying @code{compose} to the extension values as the
21102second argument.
21103@end table
21104
21105@xref{Service Types and Services}, for examples.
21106@end deftp
21107
21108@deffn {Scheme Procedure} service-extension @var{target-type} @
21109 @var{compute}
21110Return a new extension for services of type @var{target-type}.
21111@var{compute} must be a one-argument procedure: @code{fold-services}
21112calls it, passing it the value associated with the service that provides
21113the extension; it must return a valid value for the target service.
21114@end deffn
21115
21116@deffn {Scheme Procedure} service-extension? @var{obj}
21117Return true if @var{obj} is a service extension.
21118@end deffn
21119
71654dfd
LC
21120Occasionally, you might want to simply extend an existing service. This
21121involves creating a new service type and specifying the extension of
21122interest, which can be verbose; the @code{simple-service} procedure
21123provides a shorthand for this.
21124
21125@deffn {Scheme Procedure} simple-service @var{name} @var{target} @var{value}
21126Return a service that extends @var{target} with @var{value}. This works
21127by creating a singleton service type @var{name}, of which the returned
21128service is an instance.
21129
21130For example, this extends mcron (@pxref{Scheduled Job Execution}) with
21131an additional job:
21132
21133@example
21134(simple-service 'my-mcron-job mcron-service-type
21135 #~(job '(next-hour (3)) "guix gc -F 2G"))
21136@end example
21137@end deffn
21138
0adfe95a
LC
21139At the core of the service abstraction lies the @code{fold-services}
21140procedure, which is responsible for ``compiling'' a list of services
d62e201c
LC
21141down to a single directory that contains everything needed to boot and
21142run the system---the directory shown by the @command{guix system build}
21143command (@pxref{Invoking guix system}). In essence, it propagates
21144service extensions down the service graph, updating each node parameters
21145on the way, until it reaches the root node.
0adfe95a
LC
21146
21147@deffn {Scheme Procedure} fold-services @var{services} @
d62e201c 21148 [#:target-type @var{system-service-type}]
0adfe95a
LC
21149Fold @var{services} by propagating their extensions down to the root of
21150type @var{target-type}; return the root service adjusted accordingly.
21151@end deffn
21152
21153Lastly, the @code{(gnu services)} module also defines several essential
21154service types, some of which are listed below.
21155
d62e201c
LC
21156@defvr {Scheme Variable} system-service-type
21157This is the root of the service graph. It produces the system directory
21158as returned by the @command{guix system build} command.
21159@end defvr
21160
0adfe95a 21161@defvr {Scheme Variable} boot-service-type
d62e201c
LC
21162The type of the ``boot service'', which produces the @dfn{boot script}.
21163The boot script is what the initial RAM disk runs when booting.
0adfe95a
LC
21164@end defvr
21165
21166@defvr {Scheme Variable} etc-service-type
ed26b3a8
HG
21167The type of the @file{/etc} service. This service is used to create
21168files under @file{/etc} and can be extended by
0adfe95a
LC
21169passing it name/file tuples such as:
21170
21171@example
21172(list `("issue" ,(plain-file "issue" "Welcome!\n")))
21173@end example
21174
21175In this example, the effect would be to add an @file{/etc/issue} file
21176pointing to the given file.
21177@end defvr
21178
21179@defvr {Scheme Variable} setuid-program-service-type
21180Type for the ``setuid-program service''. This service collects lists of
21181executable file names, passed as gexps, and adds them to the set of
21182setuid-root programs on the system (@pxref{Setuid Programs}).
21183@end defvr
21184
af4c3fd5
LC
21185@defvr {Scheme Variable} profile-service-type
21186Type of the service that populates the @dfn{system profile}---i.e., the
21187programs under @file{/run/current-system/profile}. Other services can
21188extend it by passing it lists of packages to add to the system profile.
21189@end defvr
21190
0adfe95a 21191
dd17bc38
AK
21192@node Shepherd Services
21193@subsubsection Shepherd Services
0adfe95a 21194
e32171ee 21195@cindex shepherd services
0adfe95a
LC
21196@cindex PID 1
21197@cindex init system
a40424bd
CM
21198The @code{(gnu services shepherd)} module provides a way to define
21199services managed by the GNU@tie{}Shepherd, which is the GuixSD
21200initialization system---the first process that is started when the
1068f26b
AE
21201system boots, also known as PID@tie{}1
21202(@pxref{Introduction,,, shepherd, The GNU Shepherd Manual}).
6f305ea5 21203
dd17bc38
AK
21204Services in the Shepherd can depend on each other. For instance, the
21205SSH daemon may need to be started after the syslog daemon has been
21206started, which in turn can only happen once all the file systems have
21207been mounted. The simple operating system defined earlier (@pxref{Using
21208the Configuration System}) results in a service graph like this:
6f305ea5 21209
710fa231 21210@image{images/shepherd-graph,,5in,Typical shepherd service graph.}
6f305ea5
LC
21211
21212You can actually generate such a graph for any operating system
710fa231
AK
21213definition using the @command{guix system shepherd-graph} command
21214(@pxref{system-shepherd-graph, @command{guix system shepherd-graph}}).
6f305ea5 21215
d4053c71
AK
21216The @var{%shepherd-root-service} is a service object representing
21217PID@tie{}1, of type @var{shepherd-root-service-type}; it can be extended
21218by passing it lists of @code{<shepherd-service>} objects.
0adfe95a 21219
d4053c71 21220@deftp {Data Type} shepherd-service
dd17bc38 21221The data type representing a service managed by the Shepherd.
0adfe95a
LC
21222
21223@table @asis
21224@item @code{provision}
21225This is a list of symbols denoting what the service provides.
21226
dd17bc38
AK
21227These are the names that may be passed to @command{herd start},
21228@command{herd status}, and similar commands (@pxref{Invoking herd,,,
21229shepherd, The GNU Shepherd Manual}). @xref{Slots of services, the
21230@code{provides} slot,, shepherd, The GNU Shepherd Manual}, for details.
0adfe95a
LC
21231
21232@item @code{requirements} (default: @code{'()})
dd17bc38 21233List of symbols denoting the Shepherd services this one depends on.
0adfe95a
LC
21234
21235@item @code{respawn?} (default: @code{#t})
21236Whether to restart the service when it stops, for instance when the
21237underlying process dies.
21238
21239@item @code{start}
21240@itemx @code{stop} (default: @code{#~(const #f)})
dd17bc38
AK
21241The @code{start} and @code{stop} fields refer to the Shepherd's
21242facilities to start and stop processes (@pxref{Service De- and
21243Constructors,,, shepherd, The GNU Shepherd Manual}). They are given as
21244G-expressions that get expanded in the Shepherd configuration file
21245(@pxref{G-Expressions}).
0adfe95a
LC
21246
21247@item @code{documentation}
21248A documentation string, as shown when running:
21249
21250@example
dd17bc38 21251herd doc @var{service-name}
0adfe95a
LC
21252@end example
21253
21254where @var{service-name} is one of the symbols in @var{provision}
dd17bc38 21255(@pxref{Invoking herd,,, shepherd, The GNU Shepherd Manual}).
fae685b9
LC
21256
21257@item @code{modules} (default: @var{%default-modules})
21258This is the list of modules that must be in scope when @code{start} and
21259@code{stop} are evaluated.
21260
0adfe95a
LC
21261@end table
21262@end deftp
21263
d4053c71 21264@defvr {Scheme Variable} shepherd-root-service-type
dd17bc38 21265The service type for the Shepherd ``root service''---i.e., PID@tie{}1.
0adfe95a
LC
21266
21267This is the service type that extensions target when they want to create
dd17bc38 21268shepherd services (@pxref{Service Types and Services}, for an example).
d4053c71 21269Each extension must pass a list of @code{<shepherd-service>}.
0adfe95a
LC
21270@end defvr
21271
d4053c71 21272@defvr {Scheme Variable} %shepherd-root-service
0adfe95a
LC
21273This service represents PID@tie{}1.
21274@end defvr
8451a568 21275
8451a568 21276
31f1f593
LC
21277@node Documentation
21278@section Documentation
21279
21280@cindex documentation, searching for
21281@cindex searching for documentation
21282@cindex Info, documentation format
21283@cindex man pages
21284@cindex manual pages
21285In most cases packages installed with Guix come with documentation.
21286There are two main documentation formats: ``Info'', a browseable
21287hypertext format used for GNU software, and ``manual pages'' (or ``man
21288pages''), the linear documentation format traditionally found on Unix.
21289Info manuals are accessed with the @command{info} command or with Emacs,
21290and man pages are accessed using @command{man}.
21291
21292You can look for documentation of software installed on your system by
21293keyword. For example, the following command searches for information
21294about ``TLS'' in Info manuals:
21295
21296@example
21297$ info -k TLS
21298"(emacs)Network Security" -- STARTTLS
21299"(emacs)Network Security" -- TLS
21300"(gnutls)Core TLS API" -- gnutls_certificate_set_verify_flags
21301"(gnutls)Core TLS API" -- gnutls_certificate_set_verify_function
21302@dots{}
21303@end example
21304
21305@noindent
21306The command below searches for the same keyword in man pages:
21307
21308@example
21309$ man -k TLS
21310SSL (7) - OpenSSL SSL/TLS library
21311certtool (1) - GnuTLS certificate tool
21312@dots {}
21313@end example
21314
21315These searches are purely local to your computer so you have the
21316guarantee that documentation you find corresponds to what you have
21317actually installed, you can access it off-line, and your privacy is
21318respected.
21319
21320Once you have these results, you can view the relevant documentation by
21321running, say:
21322
21323@example
21324$ info "(gnutls)Core TLS API"
21325@end example
21326
21327@noindent
21328or:
21329
21330@example
21331$ man certtool
21332@end example
21333
21334Info manuals contain sections and indices as well as hyperlinks like
21335those found in Web pages. The @command{info} reader (@pxref{Top, Info
21336reader,, info-stnd, Stand-alone GNU Info}) and its Emacs counterpart
21337(@pxref{Misc Help,,, emacs, The GNU Emacs Manual}) provide intuitive key
21338bindings to navigate manuals. @xref{Getting Started,,, info, Info: An
21339Introduction}, for an introduction to Info navigation.
21340
cf4a9129
LC
21341@node Installing Debugging Files
21342@section Installing Debugging Files
8451a568 21343
cf4a9129
LC
21344@cindex debugging files
21345Program binaries, as produced by the GCC compilers for instance, are
21346typically written in the ELF format, with a section containing
21347@dfn{debugging information}. Debugging information is what allows the
21348debugger, GDB, to map binary code to source code; it is required to
21349debug a compiled program in good conditions.
8451a568 21350
cf4a9129
LC
21351The problem with debugging information is that is takes up a fair amount
21352of disk space. For example, debugging information for the GNU C Library
21353weighs in at more than 60 MiB. Thus, as a user, keeping all the
21354debugging info of all the installed programs is usually not an option.
21355Yet, space savings should not come at the cost of an impediment to
21356debugging---especially in the GNU system, which should make it easier
21357for users to exert their computing freedom (@pxref{GNU Distribution}).
8451a568 21358
cf4a9129
LC
21359Thankfully, the GNU Binary Utilities (Binutils) and GDB provide a
21360mechanism that allows users to get the best of both worlds: debugging
21361information can be stripped from the binaries and stored in separate
21362files. GDB is then able to load debugging information from those files,
21363when they are available (@pxref{Separate Debug Files,,, gdb, Debugging
21364with GDB}).
8451a568 21365
cf4a9129
LC
21366The GNU distribution takes advantage of this by storing debugging
21367information in the @code{lib/debug} sub-directory of a separate package
21368output unimaginatively called @code{debug} (@pxref{Packages with
21369Multiple Outputs}). Users can choose to install the @code{debug} output
21370of a package when they need it. For instance, the following command
21371installs the debugging information for the GNU C Library and for GNU
21372Guile:
8451a568
LC
21373
21374@example
cf4a9129 21375guix package -i glibc:debug guile:debug
8451a568
LC
21376@end example
21377
cf4a9129
LC
21378GDB must then be told to look for debug files in the user's profile, by
21379setting the @code{debug-file-directory} variable (consider setting it
21380from the @file{~/.gdbinit} file, @pxref{Startup,,, gdb, Debugging with
21381GDB}):
8451a568 21382
cf4a9129
LC
21383@example
21384(gdb) set debug-file-directory ~/.guix-profile/lib/debug
21385@end example
8451a568 21386
cf4a9129
LC
21387From there on, GDB will pick up debugging information from the
21388@code{.debug} files under @file{~/.guix-profile/lib/debug}.
8451a568 21389
cf4a9129
LC
21390In addition, you will most likely want GDB to be able to show the source
21391code being debugged. To do that, you will have to unpack the source
21392code of the package of interest (obtained with @code{guix build
21393--source}, @pxref{Invoking guix build}), and to point GDB to that source
21394directory using the @code{directory} command (@pxref{Source Path,
21395@code{directory},, gdb, Debugging with GDB}).
8451a568 21396
cf4a9129
LC
21397@c XXX: keep me up-to-date
21398The @code{debug} output mechanism in Guix is implemented by the
21399@code{gnu-build-system} (@pxref{Build Systems}). Currently, it is
1068f26b
AE
21400opt-in---debugging information is available only for the packages
21401with definitions explicitly declaring a @code{debug} output. This may be
21402changed to opt-out in the future if our build farm servers can handle
cf4a9129
LC
21403the load. To check whether a package has a @code{debug} output, use
21404@command{guix package --list-available} (@pxref{Invoking guix package}).
8451a568 21405
8451a568 21406
05962f29
LC
21407@node Security Updates
21408@section Security Updates
21409
09866b39
LC
21410@cindex security updates
21411@cindex security vulnerabilities
21412Occasionally, important security vulnerabilities are discovered in software
21413packages and must be patched. Guix developers try hard to keep track of
21414known vulnerabilities and to apply fixes as soon as possible in the
21415@code{master} branch of Guix (we do not yet provide a ``stable'' branch
21416containing only security updates.) The @command{guix lint} tool helps
21417developers find out about vulnerable versions of software packages in the
21418distribution:
21419
21420@smallexample
21421$ guix lint -c cve
e30c2be1
LC
21422gnu/packages/base.scm:652:2: glibc@@2.21: probably vulnerable to CVE-2015-1781, CVE-2015-7547
21423gnu/packages/gcc.scm:334:2: gcc@@4.9.3: probably vulnerable to CVE-2015-5276
21424gnu/packages/image.scm:312:2: openjpeg@@2.1.0: probably vulnerable to CVE-2016-1923, CVE-2016-1924
09866b39
LC
21425@dots{}
21426@end smallexample
21427
21428@xref{Invoking guix lint}, for more information.
21429
843858b8 21430@quotation Note
09866b39
LC
21431As of version @value{VERSION}, the feature described below is considered
21432``beta''.
843858b8 21433@end quotation
05962f29 21434
09866b39 21435Guix follows a functional
05962f29
LC
21436package management discipline (@pxref{Introduction}), which implies
21437that, when a package is changed, @emph{every package that depends on it}
21438must be rebuilt. This can significantly slow down the deployment of
21439fixes in core packages such as libc or Bash, since basically the whole
21440distribution would need to be rebuilt. Using pre-built binaries helps
21441(@pxref{Substitutes}), but deployment may still take more time than
21442desired.
21443
21444@cindex grafts
1068f26b 21445To address this, Guix implements @dfn{grafts}, a mechanism that allows
05962f29
LC
21446for fast deployment of critical updates without the costs associated
21447with a whole-distribution rebuild. The idea is to rebuild only the
21448package that needs to be patched, and then to ``graft'' it onto packages
21449explicitly installed by the user and that were previously referring to
21450the original package. The cost of grafting is typically very low, and
21451order of magnitudes lower than a full rebuild of the dependency chain.
21452
21453@cindex replacements of packages, for grafts
21454For instance, suppose a security update needs to be applied to Bash.
21455Guix developers will provide a package definition for the ``fixed''
21456Bash, say @var{bash-fixed}, in the usual way (@pxref{Defining
21457Packages}). Then, the original package definition is augmented with a
21458@code{replacement} field pointing to the package containing the bug fix:
21459
21460@example
21461(define bash
21462 (package
21463 (name "bash")
21464 ;; @dots{}
21465 (replacement bash-fixed)))
21466@end example
21467
c22a1324
LC
21468From there on, any package depending directly or indirectly on Bash---as
21469reported by @command{guix gc --requisites} (@pxref{Invoking guix
21470gc})---that is installed is automatically ``rewritten'' to refer to
05962f29 21471@var{bash-fixed} instead of @var{bash}. This grafting process takes
1068f26b 21472time proportional to the size of the package, usually less than a
c22a1324
LC
21473minute for an ``average'' package on a recent machine. Grafting is
21474recursive: when an indirect dependency requires grafting, then grafting
21475``propagates'' up to the package that the user is installing.
05962f29 21476
57bdd79e
LC
21477Currently, the length of the name and version of the graft and that of
21478the package it replaces (@var{bash-fixed} and @var{bash} in the example
21479above) must be equal. This restriction mostly comes from the fact that
21480grafting works by patching files, including binary files, directly.
05962f29
LC
21481Other restrictions may apply: for instance, when adding a graft to a
21482package providing a shared library, the original shared library and its
21483replacement must have the same @code{SONAME} and be binary-compatible.
21484
59a4dd50
LC
21485The @option{--no-grafts} command-line option allows you to forcefully
21486avoid grafting (@pxref{Common Build Options, @option{--no-grafts}}).
21487Thus, the command:
21488
21489@example
21490guix build bash --no-grafts
21491@end example
21492
21493@noindent
21494returns the store file name of the original Bash, whereas:
21495
21496@example
21497guix build bash
21498@end example
21499
21500@noindent
21501returns the store file name of the ``fixed'', replacement Bash. This
21502allows you to distinguish between the two variants of Bash.
21503
21504To verify which Bash your whole profile refers to, you can run
21505(@pxref{Invoking guix gc}):
21506
21507@example
21508guix gc -R `readlink -f ~/.guix-profile` | grep bash
21509@end example
21510
21511@noindent
21512@dots{} and compare the store file names that you get with those above.
21513Likewise for a complete GuixSD system generation:
21514
21515@example
21516guix gc -R `guix system build my-config.scm` | grep bash
21517@end example
21518
21519Lastly, to check which Bash running processes are using, you can use the
21520@command{lsof} command:
21521
21522@example
21523lsof | grep /gnu/store/.*bash
21524@end example
21525
05962f29 21526
cf4a9129
LC
21527@node Package Modules
21528@section Package Modules
8451a568 21529
cf4a9129
LC
21530From a programming viewpoint, the package definitions of the
21531GNU distribution are provided by Guile modules in the @code{(gnu packages
21532@dots{})} name space@footnote{Note that packages under the @code{(gnu
21533packages @dots{})} module name space are not necessarily ``GNU
21534packages''. This module naming scheme follows the usual Guile module
21535naming convention: @code{gnu} means that these modules are distributed
21536as part of the GNU system, and @code{packages} identifies modules that
21537define packages.} (@pxref{Modules, Guile modules,, guile, GNU Guile
21538Reference Manual}). For instance, the @code{(gnu packages emacs)}
21539module exports a variable named @code{emacs}, which is bound to a
21540@code{<package>} object (@pxref{Defining Packages}).
113daf62 21541
300868ba 21542The @code{(gnu packages @dots{})} module name space is
cf4a9129
LC
21543automatically scanned for packages by the command-line tools. For
21544instance, when running @code{guix package -i emacs}, all the @code{(gnu
21545packages @dots{})} modules are scanned until one that exports a package
21546object whose name is @code{emacs} is found. This package search
21547facility is implemented in the @code{(gnu packages)} module.
113daf62 21548
300868ba 21549@cindex customization, of packages
8689901f 21550@cindex package module search path
cf4a9129 21551Users can store package definitions in modules with different
60142854 21552names---e.g., @code{(my-packages emacs)}@footnote{Note that the file
c95ded7e
LC
21553name and module name must match. For instance, the @code{(my-packages
21554emacs)} module must be stored in a @file{my-packages/emacs.scm} file
21555relative to the load path specified with @option{--load-path} or
21556@code{GUIX_PACKAGE_PATH}. @xref{Modules and the File System,,,
21557guile, GNU Guile Reference Manual}, for details.}. These package definitions
1068f26b
AE
21558will not be visible by default. Users can invoke commands such as
21559@command{guix package} and @command{guix build} with the
c95ded7e
LC
21560@code{-e} option so that they know where to find the package. Better
21561yet, they can use the
300868ba 21562@code{-L} option of these commands to make those modules visible
8689901f
LC
21563(@pxref{Invoking guix build, @code{--load-path}}), or define the
21564@code{GUIX_PACKAGE_PATH} environment variable. This environment
21565variable makes it easy to extend or customize the distribution and is
21566honored by all the user interfaces.
21567
21568@defvr {Environment Variable} GUIX_PACKAGE_PATH
1068f26b
AE
21569This is a colon-separated list of directories to search for additional
21570package modules. Directories listed in this variable take precedence
21571over the own modules of the distribution.
8689901f 21572@end defvr
ef5dd60a 21573
cf4a9129
LC
21574The distribution is fully @dfn{bootstrapped} and @dfn{self-contained}:
21575each package is built based solely on other packages in the
21576distribution. The root of this dependency graph is a small set of
21577@dfn{bootstrap binaries}, provided by the @code{(gnu packages
21578bootstrap)} module. For more information on bootstrapping,
081145cf 21579@pxref{Bootstrapping}.
ef5dd60a 21580
cf4a9129
LC
21581@node Packaging Guidelines
21582@section Packaging Guidelines
ef5dd60a 21583
e32171ee 21584@cindex packages, creating
cf4a9129
LC
21585The GNU distribution is nascent and may well lack some of your favorite
21586packages. This section describes how you can help make the distribution
21587grow. @xref{Contributing}, for additional information on how you can
21588help.
ef5dd60a 21589
cf4a9129
LC
21590Free software packages are usually distributed in the form of
21591@dfn{source code tarballs}---typically @file{tar.gz} files that contain
21592all the source files. Adding a package to the distribution means
21593essentially two things: adding a @dfn{recipe} that describes how to
21594build the package, including a list of other packages required to build
f97c9175 21595it, and adding @dfn{package metadata} along with that recipe, such as a
cf4a9129 21596description and licensing information.
ef5dd60a 21597
cf4a9129
LC
21598In Guix all this information is embodied in @dfn{package definitions}.
21599Package definitions provide a high-level view of the package. They are
21600written using the syntax of the Scheme programming language; in fact,
21601for each package we define a variable bound to the package definition,
21602and export that variable from a module (@pxref{Package Modules}).
21603However, in-depth Scheme knowledge is @emph{not} a prerequisite for
21604creating packages. For more information on package definitions,
081145cf 21605@pxref{Defining Packages}.
ef5dd60a 21606
cf4a9129
LC
21607Once a package definition is in place, stored in a file in the Guix
21608source tree, it can be tested using the @command{guix build} command
21609(@pxref{Invoking guix build}). For example, assuming the new package is
c71979f4
LC
21610called @code{gnew}, you may run this command from the Guix build tree
21611(@pxref{Running Guix Before It Is Installed}):
ef5dd60a
LC
21612
21613@example
cf4a9129 21614./pre-inst-env guix build gnew --keep-failed
ef5dd60a 21615@end example
ef5dd60a 21616
cf4a9129
LC
21617Using @code{--keep-failed} makes it easier to debug build failures since
21618it provides access to the failed build tree. Another useful
21619command-line option when debugging is @code{--log-file}, to access the
21620build log.
ef5dd60a 21621
cf4a9129
LC
21622If the package is unknown to the @command{guix} command, it may be that
21623the source file contains a syntax error, or lacks a @code{define-public}
21624clause to export the package variable. To figure it out, you may load
21625the module from Guile to get more information about the actual error:
ef5dd60a 21626
cf4a9129
LC
21627@example
21628./pre-inst-env guile -c '(use-modules (gnu packages gnew))'
21629@end example
ef5dd60a 21630
cf4a9129
LC
21631Once your package builds correctly, please send us a patch
21632(@pxref{Contributing}). Well, if you need help, we will be happy to
21633help you too. Once the patch is committed in the Guix repository, the
21634new package automatically gets built on the supported platforms by
2b1cee21 21635@url{http://hydra.gnu.org/jobset/gnu/master, our continuous integration
cf4a9129 21636system}.
ef5dd60a 21637
cf4a9129
LC
21638@cindex substituter
21639Users can obtain the new package definition simply by running
21640@command{guix pull} (@pxref{Invoking guix pull}). When
21641@code{hydra.gnu.org} is done building the package, installing the
21642package automatically downloads binaries from there
21643(@pxref{Substitutes}). The only place where human intervention is
21644needed is to review and apply the patch.
ef5dd60a 21645
ef5dd60a 21646
cf4a9129 21647@menu
ec0339cd
LC
21648* Software Freedom:: What may go into the distribution.
21649* Package Naming:: What's in a name?
21650* Version Numbers:: When the name is not enough.
cbd02397 21651* Synopses and Descriptions:: Helping users find the right package.
fb4d6f6c 21652* Python Modules:: A touch of British comedy.
ec0339cd 21653* Perl Modules:: Little pearls.
e1c963bf 21654* Java Packages:: Coffee break.
ec0339cd 21655* Fonts:: Fond of fonts.
cf4a9129 21656@end menu
ef5dd60a 21657
cf4a9129
LC
21658@node Software Freedom
21659@subsection Software Freedom
ef5dd60a 21660
cf4a9129 21661@c Adapted from http://www.gnu.org/philosophy/philosophy.html.
e32171ee 21662@cindex free software
cf4a9129
LC
21663The GNU operating system has been developed so that users can have
21664freedom in their computing. GNU is @dfn{free software}, meaning that
21665users have the @url{http://www.gnu.org/philosophy/free-sw.html,four
21666essential freedoms}: to run the program, to study and change the program
21667in source code form, to redistribute exact copies, and to distribute
21668modified versions. Packages found in the GNU distribution provide only
21669software that conveys these four freedoms.
c11a6eb1 21670
cf4a9129
LC
21671In addition, the GNU distribution follow the
21672@url{http://www.gnu.org/distros/free-system-distribution-guidelines.html,free
21673software distribution guidelines}. Among other things, these guidelines
21674reject non-free firmware, recommendations of non-free software, and
21675discuss ways to deal with trademarks and patents.
ef5dd60a 21676
1068f26b
AE
21677Some otherwise free upstream package sources contain a small and optional
21678subset that violates the above guidelines, for instance because this subset
21679is itself non-free code. When that happens, the offending items are removed
21680with appropriate patches or code snippets in the @code{origin} form of the
21681package (@pxref{Defining Packages}). This way, @code{guix
cf4a9129
LC
21682build --source} returns the ``freed'' source rather than the unmodified
21683upstream source.
ef5dd60a 21684
ef5dd60a 21685
cf4a9129
LC
21686@node Package Naming
21687@subsection Package Naming
ef5dd60a 21688
e32171ee 21689@cindex package name
cf4a9129
LC
21690A package has actually two names associated with it:
21691First, there is the name of the @emph{Scheme variable}, the one following
21692@code{define-public}. By this name, the package can be made known in the
21693Scheme code, for instance as input to another package. Second, there is
21694the string in the @code{name} field of a package definition. This name
21695is used by package management commands such as
21696@command{guix package} and @command{guix build}.
ef5dd60a 21697
cf4a9129
LC
21698Both are usually the same and correspond to the lowercase conversion of
21699the project name chosen upstream, with underscores replaced with
21700hyphens. For instance, GNUnet is available as @code{gnunet}, and
21701SDL_net as @code{sdl-net}.
927097ef 21702
cf4a9129 21703We do not add @code{lib} prefixes for library packages, unless these are
081145cf 21704already part of the official project name. But @pxref{Python
cf4a9129
LC
21705Modules} and @ref{Perl Modules} for special rules concerning modules for
21706the Python and Perl languages.
927097ef 21707
1b366ee4 21708Font package names are handled differently, @pxref{Fonts}.
7fec52b7 21709
ef5dd60a 21710
cf4a9129
LC
21711@node Version Numbers
21712@subsection Version Numbers
ef5dd60a 21713
e32171ee 21714@cindex package version
cf4a9129
LC
21715We usually package only the latest version of a given free software
21716project. But sometimes, for instance for incompatible library versions,
21717two (or more) versions of the same package are needed. These require
21718different Scheme variable names. We use the name as defined
21719in @ref{Package Naming}
21720for the most recent version; previous versions use the same name, suffixed
21721by @code{-} and the smallest prefix of the version number that may
21722distinguish the two versions.
ef5dd60a 21723
cf4a9129
LC
21724The name inside the package definition is the same for all versions of a
21725package and does not contain any version number.
ef5dd60a 21726
cf4a9129 21727For instance, the versions 2.24.20 and 3.9.12 of GTK+ may be packaged as follows:
ef5dd60a 21728
cf4a9129
LC
21729@example
21730(define-public gtk+
21731 (package
17d8e33f
ML
21732 (name "gtk+")
21733 (version "3.9.12")
21734 ...))
cf4a9129
LC
21735(define-public gtk+-2
21736 (package
17d8e33f
ML
21737 (name "gtk+")
21738 (version "2.24.20")
21739 ...))
cf4a9129
LC
21740@end example
21741If we also wanted GTK+ 3.8.2, this would be packaged as
21742@example
21743(define-public gtk+-3.8
21744 (package
17d8e33f
ML
21745 (name "gtk+")
21746 (version "3.8.2")
21747 ...))
cf4a9129 21748@end example
ef5dd60a 21749
880d647d
LC
21750@c See <https://lists.gnu.org/archive/html/guix-devel/2016-01/msg00425.html>,
21751@c for a discussion of what follows.
21752@cindex version number, for VCS snapshots
21753Occasionally, we package snapshots of upstream's version control system
21754(VCS) instead of formal releases. This should remain exceptional,
21755because it is up to upstream developers to clarify what the stable
21756release is. Yet, it is sometimes necessary. So, what should we put in
21757the @code{version} field?
21758
21759Clearly, we need to make the commit identifier of the VCS snapshot
21760visible in the version string, but we also need to make sure that the
21761version string is monotonically increasing so that @command{guix package
21762--upgrade} can determine which version is newer. Since commit
21763identifiers, notably with Git, are not monotonically increasing, we add
21764a revision number that we increase each time we upgrade to a newer
21765snapshot. The resulting version string looks like this:
21766
21767@example
217682.0.11-3.cabba9e
21769 ^ ^ ^
21770 | | `-- upstream commit ID
21771 | |
21772 | `--- Guix package revision
21773 |
21774latest upstream version
21775@end example
21776
21777It is a good idea to strip commit identifiers in the @code{version}
21778field to, say, 7 digits. It avoids an aesthetic annoyance (assuming
21779aesthetics have a role to play here) as well as problems related to OS
21780limits such as the maximum shebang length (127 bytes for the Linux
21781kernel.) It is best to use the full commit identifiers in
561360a5
LC
21782@code{origin}s, though, to avoid ambiguities. A typical package
21783definition may look like this:
21784
21785@example
21786(define my-package
6e42660b 21787 (let ((commit "c3f29bc928d5900971f65965feaae59e1272a3f7")
21788 (revision "1")) ;Guix package revision
561360a5 21789 (package
9ce07f2d 21790 (version (git-version "0.9" revision commit))
561360a5
LC
21791 (source (origin
21792 (method git-fetch)
21793 (uri (git-reference
21794 (url "git://example.org/my-package.git")
21795 (commit commit)))
21796 (sha256 (base32 "1mbikn@dots{}"))
9ce07f2d 21797 (file-name (git-file-name name version))))
561360a5
LC
21798 ;; @dots{}
21799 )))
21800@end example
880d647d 21801
cbd02397
LC
21802@node Synopses and Descriptions
21803@subsection Synopses and Descriptions
21804
e32171ee
JD
21805@cindex package description
21806@cindex package synopsis
cbd02397
LC
21807As we have seen before, each package in GNU@tie{}Guix includes a
21808synopsis and a description (@pxref{Defining Packages}). Synopses and
21809descriptions are important: They are what @command{guix package
21810--search} searches, and a crucial piece of information to help users
21811determine whether a given package suits their needs. Consequently,
21812packagers should pay attention to what goes into them.
21813
21814Synopses must start with a capital letter and must not end with a
21815period. They must not start with ``a'' or ``the'', which usually does
21816not bring anything; for instance, prefer ``File-frobbing tool'' over ``A
21817tool that frobs files''. The synopsis should say what the package
21818is---e.g., ``Core GNU utilities (file, text, shell)''---or what it is
21819used for---e.g., the synopsis for GNU@tie{}grep is ``Print lines
21820matching a pattern''.
21821
21822Keep in mind that the synopsis must be meaningful for a very wide
21823audience. For example, ``Manipulate alignments in the SAM format''
21824might make sense for a seasoned bioinformatics researcher, but might be
21825fairly unhelpful or even misleading to a non-specialized audience. It
21826is a good idea to come up with a synopsis that gives an idea of the
21827application domain of the package. In this example, this might give
21828something like ``Manipulate nucleotide sequence alignments'', which
21829hopefully gives the user a better idea of whether this is what they are
21830looking for.
21831
cbd02397
LC
21832Descriptions should take between five and ten lines. Use full
21833sentences, and avoid using acronyms without first introducing them.
762e54b7
LC
21834Please avoid marketing phrases such as ``world-leading'',
21835``industrial-strength'', and ``next-generation'', and avoid superlatives
21836like ``the most advanced''---they are not helpful to users looking for a
21837package and may even sound suspicious. Instead, try to be factual,
21838mentioning use cases and features.
21839
21840@cindex Texinfo markup, in package descriptions
cbd02397
LC
21841Descriptions can include Texinfo markup, which is useful to introduce
21842ornaments such as @code{@@code} or @code{@@dfn}, bullet lists, or
ba7d6c76
ML
21843hyperlinks (@pxref{Overview,,, texinfo, GNU Texinfo}). However you
21844should be careful when using some characters for example @samp{@@} and
21845curly braces which are the basic special characters in Texinfo
21846(@pxref{Special Characters,,, texinfo, GNU Texinfo}). User interfaces
21847such as @command{guix package --show} take care of rendering it
21848appropriately.
cbd02397
LC
21849
21850Synopses and descriptions are translated by volunteers
21851@uref{http://translationproject.org/domain/guix-packages.html, at the
21852Translation Project} so that as many users as possible can read them in
21853their native language. User interfaces search them and display them in
21854the language specified by the current locale.
21855
e797e94b
LC
21856To allow @command{xgettext} to extract them as translatable strings,
21857synopses and descriptions @emph{must be literal strings}. This means
21858that you cannot use @code{string-append} or @code{format} to construct
21859these strings:
21860
21861@lisp
21862(package
21863 ;; @dots{}
21864 (synopsis "This is translatable")
21865 (description (string-append "This is " "*not*" " translatable.")))
21866@end lisp
21867
cbd02397
LC
21868Translation is a lot of work so, as a packager, please pay even more
21869attention to your synopses and descriptions as every change may entail
ba7d6c76 21870additional work for translators. In order to help them, it is possible
36743e71 21871to make recommendations or instructions visible to them by inserting
ba7d6c76
ML
21872special comments like this (@pxref{xgettext Invocation,,, gettext, GNU
21873Gettext}):
21874
21875@example
21876;; TRANSLATORS: "X11 resize-and-rotate" should not be translated.
21877(description "ARandR is designed to provide a simple visual front end
21878for the X11 resize-and-rotate (RandR) extension. @dots{}")
21879@end example
cbd02397 21880
ef5dd60a 21881
cf4a9129
LC
21882@node Python Modules
21883@subsection Python Modules
ef5dd60a 21884
e32171ee 21885@cindex python
cf4a9129
LC
21886We currently package Python 2 and Python 3, under the Scheme variable names
21887@code{python-2} and @code{python} as explained in @ref{Version Numbers}.
21888To avoid confusion and naming clashes with other programming languages, it
21889seems desirable that the name of a package for a Python module contains
21890the word @code{python}.
ef5dd60a 21891
cf4a9129
LC
21892Some modules are compatible with only one version of Python, others with both.
21893If the package Foo compiles only with Python 3, we name it
21894@code{python-foo}; if it compiles only with Python 2, we name it
21895@code{python2-foo}. If it is compatible with both versions, we create two
21896packages with the corresponding names.
ef5dd60a 21897
cf4a9129
LC
21898If a project already contains the word @code{python}, we drop this;
21899for instance, the module python-dateutil is packaged under the names
99c866a0
HG
21900@code{python-dateutil} and @code{python2-dateutil}. If the project name
21901starts with @code{py} (e.g. @code{pytz}), we keep it and prefix it as
21902described above.
113daf62 21903
e940a271
HG
21904@subsubsection Specifying Dependencies
21905@cindex inputs, for Python packages
21906
21907Dependency information for Python packages is usually available in the
21908package source tree, with varying degrees of accuracy: in the
21909@file{setup.py} file, in @file{requirements.txt}, or in @file{tox.ini}.
21910
21911Your mission, when writing a recipe for a Python package, is to map
21912these dependencies to the appropriate type of ``input'' (@pxref{package
21913Reference, inputs}). Although the @code{pypi} importer normally does a
21914good job (@pxref{Invoking guix import}), you may want to check the
21915following check list to determine which dependency goes where.
21916
21917@itemize
21918
aaf75c89
HG
21919@item
21920We currently package Python 2 with @code{setuptools} and @code{pip}
21921installed like Python 3.4 has per default. Thus you don't need to
891a843d
HG
21922specify either of these as an input. @command{guix lint} will warn you
21923if you do.
aaf75c89 21924
e940a271
HG
21925@item
21926Python dependencies required at run time go into
21927@code{propagated-inputs}. They are typically defined with the
21928@code{install_requires} keyword in @file{setup.py}, or in the
21929@file{requirements.txt} file.
21930
21931@item
21932Python packages required only at build time---e.g., those listed with
21933the @code{setup_requires} keyword in @file{setup.py}---or only for
21934testing---e.g., those in @code{tests_require}---go into
21935@code{native-inputs}. The rationale is that (1) they do not need to be
21936propagated because they are not needed at run time, and (2) in a
21937cross-compilation context, it's the ``native'' input that we'd want.
21938
aaf75c89 21939Examples are the @code{pytest}, @code{mock}, and @code{nose} test
e940a271
HG
21940frameworks. Of course if any of these packages is also required at
21941run-time, it needs to go to @code{propagated-inputs}.
21942
21943@item
21944Anything that does not fall in the previous categories goes to
21945@code{inputs}, for example programs or C libraries required for building
21946Python packages containing C extensions.
21947
21948@item
21949If a Python package has optional dependencies (@code{extras_require}),
21950it is up to you to decide whether to add them or not, based on their
21951usefulness/overhead ratio (@pxref{Submitting Patches, @command{guix
21952size}}).
21953
21954@end itemize
21955
21956
cf4a9129
LC
21957@node Perl Modules
21958@subsection Perl Modules
523e4896 21959
e32171ee 21960@cindex perl
cf4a9129
LC
21961Perl programs standing for themselves are named as any other package,
21962using the lowercase upstream name.
21963For Perl packages containing a single class, we use the lowercase class name,
21964replace all occurrences of @code{::} by dashes and prepend the prefix
21965@code{perl-}.
21966So the class @code{XML::Parser} becomes @code{perl-xml-parser}.
21967Modules containing several classes keep their lowercase upstream name and
21968are also prepended by @code{perl-}. Such modules tend to have the word
21969@code{perl} somewhere in their name, which gets dropped in favor of the
21970prefix. For instance, @code{libwww-perl} becomes @code{perl-libwww}.
523e4896 21971
523e4896 21972
e1c963bf
HG
21973@node Java Packages
21974@subsection Java Packages
21975
e32171ee 21976@cindex java
e1c963bf
HG
21977Java programs standing for themselves are named as any other package,
21978using the lowercase upstream name.
21979
21980To avoid confusion and naming clashes with other programming languages,
21981it is desirable that the name of a package for a Java package is
21982prefixed with @code{java-}. If a project already contains the word
21983@code{java}, we drop this; for instance, the package @code{ngsjava} is
21984packaged under the name @code{java-ngs}.
21985
21986For Java packages containing a single class or a small class hierarchy,
21987we use the lowercase class name, replace all occurrences of @code{.} by
21988dashes and prepend the prefix @code{java-}. So the class
21989@code{apache.commons.cli} becomes package
21990@code{java-apache-commons-cli}.
21991
21992
7fec52b7
AE
21993@node Fonts
21994@subsection Fonts
21995
e32171ee 21996@cindex fonts
7fec52b7
AE
21997For fonts that are in general not installed by a user for typesetting
21998purposes, or that are distributed as part of a larger software package,
21999we rely on the general packaging rules for software; for instance, this
22000applies to the fonts delivered as part of the X.Org system or fonts that
22001are part of TeX Live.
22002
22003To make it easier for a user to search for fonts, names for other packages
22004containing only fonts are constructed as follows, independently of the
22005upstream package name.
22006
22007The name of a package containing only one font family starts with
22008@code{font-}; it is followed by the foundry name and a dash @code{-}
22009if the foundry is known, and the font family name, in which spaces are
22010replaced by dashes (and as usual, all upper case letters are transformed
22011to lower case).
22012For example, the Gentium font family by SIL is packaged under the name
22013@code{font-sil-gentium}.
22014
22015For a package containing several font families, the name of the collection
22016is used in the place of the font family name.
22017For instance, the Liberation fonts consist of three families,
22018Liberation Sans, Liberation Serif and Liberation Mono.
22019These could be packaged separately under the names
22020@code{font-liberation-sans} and so on; but as they are distributed together
22021under a common name, we prefer to package them together as
22022@code{font-liberation}.
22023
22024In the case where several formats of the same font family or font collection
22025are packaged separately, a short form of the format, prepended by a dash,
22026is added to the package name. We use @code{-ttf} for TrueType fonts,
1b366ee4 22027@code{-otf} for OpenType fonts and @code{-type1} for PostScript Type 1
7fec52b7
AE
22028fonts.
22029
22030
b25937e3 22031
cf4a9129
LC
22032@node Bootstrapping
22033@section Bootstrapping
b25937e3 22034
cf4a9129 22035@c Adapted from the ELS 2013 paper.
b25937e3 22036
cf4a9129 22037@cindex bootstrapping
7889394e 22038
cf4a9129
LC
22039Bootstrapping in our context refers to how the distribution gets built
22040``from nothing''. Remember that the build environment of a derivation
22041contains nothing but its declared inputs (@pxref{Introduction}). So
22042there's an obvious chicken-and-egg problem: how does the first package
22043get built? How does the first compiler get compiled? Note that this is
22044a question of interest only to the curious hacker, not to the regular
22045user, so you can shamelessly skip this section if you consider yourself
22046a ``regular user''.
72b9d60d 22047
cf4a9129
LC
22048@cindex bootstrap binaries
22049The GNU system is primarily made of C code, with libc at its core. The
22050GNU build system itself assumes the availability of a Bourne shell and
22051command-line tools provided by GNU Coreutils, Awk, Findutils, `sed', and
22052`grep'. Furthermore, build programs---programs that run
22053@code{./configure}, @code{make}, etc.---are written in Guile Scheme
22054(@pxref{Derivations}). Consequently, to be able to build anything at
22055all, from scratch, Guix relies on pre-built binaries of Guile, GCC,
22056Binutils, libc, and the other packages mentioned above---the
22057@dfn{bootstrap binaries}.
72b9d60d 22058
cf4a9129
LC
22059These bootstrap binaries are ``taken for granted'', though we can also
22060re-create them if needed (more on that later).
72b9d60d 22061
cf4a9129 22062@unnumberedsubsec Preparing to Use the Bootstrap Binaries
c79d54fe 22063
cf4a9129
LC
22064@c As of Emacs 24.3, Info-mode displays the image, but since it's a
22065@c large image, it's hard to scroll. Oh well.
22066@image{images/bootstrap-graph,6in,,Dependency graph of the early bootstrap derivations}
523e4896 22067
cf4a9129
LC
22068The figure above shows the very beginning of the dependency graph of the
22069distribution, corresponding to the package definitions of the @code{(gnu
d33fa0c7
LC
22070packages bootstrap)} module. A similar figure can be generated with
22071@command{guix graph} (@pxref{Invoking guix graph}), along the lines of:
22072
22073@example
22074guix graph -t derivation \
22075 -e '(@@@@ (gnu packages bootstrap) %bootstrap-gcc)' \
22076 | dot -Tps > t.ps
22077@end example
22078
22079At this level of detail, things are
cf4a9129
LC
22080slightly complex. First, Guile itself consists of an ELF executable,
22081along with many source and compiled Scheme files that are dynamically
22082loaded when it runs. This gets stored in the @file{guile-2.0.7.tar.xz}
22083tarball shown in this graph. This tarball is part of Guix's ``source''
22084distribution, and gets inserted into the store with @code{add-to-store}
22085(@pxref{The Store}).
2e7b5cea 22086
cf4a9129
LC
22087But how do we write a derivation that unpacks this tarball and adds it
22088to the store? To solve this problem, the @code{guile-bootstrap-2.0.drv}
22089derivation---the first one that gets built---uses @code{bash} as its
22090builder, which runs @code{build-bootstrap-guile.sh}, which in turn calls
22091@code{tar} to unpack the tarball. Thus, @file{bash}, @file{tar},
22092@file{xz}, and @file{mkdir} are statically-linked binaries, also part of
22093the Guix source distribution, whose sole purpose is to allow the Guile
22094tarball to be unpacked.
fb729425 22095
cf4a9129
LC
22096Once @code{guile-bootstrap-2.0.drv} is built, we have a functioning
22097Guile that can be used to run subsequent build programs. Its first task
22098is to download tarballs containing the other pre-built binaries---this
22099is what the @code{.tar.xz.drv} derivations do. Guix modules such as
22100@code{ftp-client.scm} are used for this purpose. The
22101@code{module-import.drv} derivations import those modules in a directory
22102in the store, using the original layout. The
22103@code{module-import-compiled.drv} derivations compile those modules, and
22104write them in an output directory with the right layout. This
22105corresponds to the @code{#:modules} argument of
22106@code{build-expression->derivation} (@pxref{Derivations}).
fb729425 22107
cf4a9129
LC
22108Finally, the various tarballs are unpacked by the
22109derivations @code{gcc-bootstrap-0.drv}, @code{glibc-bootstrap-0.drv},
22110etc., at which point we have a working C tool chain.
fb729425 22111
fb729425 22112
cf4a9129 22113@unnumberedsubsec Building the Build Tools
523e4896 22114
cf4a9129
LC
22115Bootstrapping is complete when we have a full tool chain that does not
22116depend on the pre-built bootstrap tools discussed above. This
22117no-dependency requirement is verified by checking whether the files of
22118the final tool chain contain references to the @file{/gnu/store}
22119directories of the bootstrap inputs. The process that leads to this
22120``final'' tool chain is described by the package definitions found in
1f6f57df 22121the @code{(gnu packages commencement)} module.
df2ce343 22122
d33fa0c7
LC
22123The @command{guix graph} command allows us to ``zoom out'' compared to
22124the graph above, by looking at the level of package objects instead of
22125individual derivations---remember that a package may translate to
22126several derivations, typically one derivation to download its source,
22127one to build the Guile modules it needs, and one to actually build the
22128package from source. The command:
22129
22130@example
22131guix graph -t bag \
22132 -e '(@@@@ (gnu packages commencement)
22133 glibc-final-with-bootstrap-bash)' | dot -Tps > t.ps
22134@end example
22135
22136@noindent
22137produces the dependency graph leading to the ``final'' C
22138library@footnote{You may notice the @code{glibc-intermediate} label,
22139suggesting that it is not @emph{quite} final, but as a good
22140approximation, we will consider it final.}, depicted below.
22141
22142@image{images/bootstrap-packages,6in,,Dependency graph of the early packages}
22143
cf4a9129
LC
22144@c See <http://lists.gnu.org/archive/html/gnu-system-discuss/2012-10/msg00000.html>.
22145The first tool that gets built with the bootstrap binaries is
d33fa0c7
LC
22146GNU@tie{}Make---noted @code{make-boot0} above---which is a prerequisite
22147for all the following packages. From there Findutils and Diffutils get
22148built.
523e4896 22149
cf4a9129
LC
22150Then come the first-stage Binutils and GCC, built as pseudo cross
22151tools---i.e., with @code{--target} equal to @code{--host}. They are
22152used to build libc. Thanks to this cross-build trick, this libc is
22153guaranteed not to hold any reference to the initial tool chain.
4af2447e 22154
d33fa0c7
LC
22155From there the final Binutils and GCC (not shown above) are built.
22156GCC uses @code{ld}
cf4a9129
LC
22157from the final Binutils, and links programs against the just-built libc.
22158This tool chain is used to build the other packages used by Guix and by
22159the GNU Build System: Guile, Bash, Coreutils, etc.
4af2447e 22160
cf4a9129
LC
22161And voilà! At this point we have the complete set of build tools that
22162the GNU Build System expects. These are in the @code{%final-inputs}
dd164244
MW
22163variable of the @code{(gnu packages commencement)} module, and are
22164implicitly used by any package that uses @code{gnu-build-system}
1f6f57df 22165(@pxref{Build Systems, @code{gnu-build-system}}).
4af2447e 22166
4af2447e 22167
cf4a9129 22168@unnumberedsubsec Building the Bootstrap Binaries
4af2447e 22169
e32171ee 22170@cindex bootstrap binaries
cf4a9129
LC
22171Because the final tool chain does not depend on the bootstrap binaries,
22172those rarely need to be updated. Nevertheless, it is useful to have an
22173automated way to produce them, should an update occur, and this is what
22174the @code{(gnu packages make-bootstrap)} module provides.
4af2447e 22175
cf4a9129
LC
22176The following command builds the tarballs containing the bootstrap
22177binaries (Guile, Binutils, GCC, libc, and a tarball containing a mixture
22178of Coreutils and other basic command-line tools):
4b2615e1 22179
cf4a9129
LC
22180@example
22181guix build bootstrap-tarballs
22182@end example
22183
22184The generated tarballs are those that should be referred to in the
22185@code{(gnu packages bootstrap)} module mentioned at the beginning of
22186this section.
22187
22188Still here? Then perhaps by now you've started to wonder: when do we
22189reach a fixed point? That is an interesting question! The answer is
22190unknown, but if you would like to investigate further (and have
22191significant computational and storage resources to do so), then let us
22192know.
22193
350cb5ba
LC
22194@unnumberedsubsec Reducing the Set of Bootstrap Binaries
22195
22196Our bootstrap binaries currently include GCC, Guile, etc. That's a lot
22197of binary code! Why is that a problem? It's a problem because these
22198big chunks of binary code are practically non-auditable, which makes it
22199hard to establish what source code produced them. Every unauditable
22200binary also leaves us vulnerable to compiler backdoors as described by
22201Ken Thompson in the 1984 paper @emph{Reflections on Trusting Trust}.
22202
22203This is mitigated by the fact that our bootstrap binaries were generated
22204from an earlier Guix revision. Nevertheless it lacks the level of
22205transparency that we get in the rest of the package dependency graph,
22206where Guix always gives us a source-to-binary mapping. Thus, our goal
22207is to reduce the set of bootstrap binaries to the bare minimum.
22208
22209The @uref{http://bootstrappable.org, Bootstrappable.org web site} lists
22210on-going projects to do that. One of these is about replacing the
22211bootstrap GCC with a sequence of assemblers, interpreters, and compilers
22212of increasing complexity, which could be built from source starting from
22213a simple and auditable assembler. Your help is welcome!
22214
22215
cf4a9129
LC
22216@node Porting
22217@section Porting to a New Platform
22218
22219As discussed above, the GNU distribution is self-contained, and
22220self-containment is achieved by relying on pre-built ``bootstrap
22221binaries'' (@pxref{Bootstrapping}). These binaries are specific to an
22222operating system kernel, CPU architecture, and application binary
22223interface (ABI). Thus, to port the distribution to a platform that is
22224not yet supported, one must build those bootstrap binaries, and update
22225the @code{(gnu packages bootstrap)} module to use them on that platform.
22226
22227Fortunately, Guix can @emph{cross compile} those bootstrap binaries.
22228When everything goes well, and assuming the GNU tool chain supports the
22229target platform, this can be as simple as running a command like this
22230one:
22231
22232@example
22233guix build --target=armv5tel-linux-gnueabi bootstrap-tarballs
22234@end example
22235
1c0c417d
LC
22236For this to work, the @code{glibc-dynamic-linker} procedure in
22237@code{(gnu packages bootstrap)} must be augmented to return the right
22238file name for libc's dynamic linker on that platform; likewise,
22239@code{system->linux-architecture} in @code{(gnu packages linux)} must be
22240taught about the new platform.
22241
cf4a9129 22242Once these are built, the @code{(gnu packages bootstrap)} module needs
1c0c417d
LC
22243to be updated to refer to these binaries on the target platform. That
22244is, the hashes and URLs of the bootstrap tarballs for the new platform
22245must be added alongside those of the currently supported platforms. The
22246bootstrap Guile tarball is treated specially: it is expected to be
03d0e2d2 22247available locally, and @file{gnu/local.mk} has rules do download it for
1c0c417d
LC
22248the supported architectures; a rule for the new platform must be added
22249as well.
cf4a9129
LC
22250
22251In practice, there may be some complications. First, it may be that the
22252extended GNU triplet that specifies an ABI (like the @code{eabi} suffix
22253above) is not recognized by all the GNU tools. Typically, glibc
22254recognizes some of these, whereas GCC uses an extra @code{--with-abi}
22255configure flag (see @code{gcc.scm} for examples of how to handle this).
22256Second, some of the required packages could fail to build for that
22257platform. Lastly, the generated binaries could be broken for some
22258reason.
4af2447e 22259
9bf3c1a7 22260@c *********************************************************************
8c01b9d0 22261@include contributing.texi
c78bd12b 22262
568717fd
LC
22263@c *********************************************************************
22264@node Acknowledgments
22265@chapter Acknowledgments
22266
136787cb
LC
22267Guix is based on the @uref{http://nixos.org/nix/, Nix package manager},
22268which was designed and
4c7ac9aa
LC
22269implemented by Eelco Dolstra, with contributions from other people (see
22270the @file{nix/AUTHORS} file in Guix.) Nix pioneered functional package
568717fd
LC
22271management, and promoted unprecedented features, such as transactional
22272package upgrades and rollbacks, per-user profiles, and referentially
22273transparent build processes. Without this work, Guix would not exist.
22274
22275The Nix-based software distributions, Nixpkgs and NixOS, have also been
22276an inspiration for Guix.
22277
4c7ac9aa
LC
22278GNU@tie{}Guix itself is a collective work with contributions from a
22279number of people. See the @file{AUTHORS} file in Guix for more
22280information on these fine people. The @file{THANKS} file lists people
22281who have helped by reporting bugs, taking care of the infrastructure,
22282providing artwork and themes, making suggestions, and more---thank you!
22283
22284
568717fd
LC
22285@c *********************************************************************
22286@node GNU Free Documentation License
22287@appendix GNU Free Documentation License
e32171ee 22288@cindex license, GNU Free Documentation License
568717fd
LC
22289@include fdl-1.3.texi
22290
22291@c *********************************************************************
22292@node Concept Index
22293@unnumbered Concept Index
22294@printindex cp
22295
a85b83d2
LC
22296@node Programming Index
22297@unnumbered Programming Index
22298@syncodeindex tp fn
22299@syncodeindex vr fn
568717fd
LC
22300@printindex fn
22301
22302@bye
22303
22304@c Local Variables:
22305@c ispell-local-dictionary: "american";
22306@c End: