services: openssh: Extensions provide extra authorized keys.
[jackhill/guix/guix.git] / doc / guix.texi
CommitLineData
568717fd
LC
1\input texinfo
2@c -*-texinfo-*-
3
4@c %**start of header
5@setfilename guix.info
6@documentencoding UTF-8
f8348b91 7@settitle GNU Guix Reference Manual
568717fd
LC
8@c %**end of header
9
10@include version.texi
7df7a74e 11
debc6360 12@c Identifier of the OpenPGP key used to sign tarballs and such.
df671177 13@set OPENPGP-SIGNING-KEY-ID 3CE464558A84FDC69DB40CFB090B11993D9AEBB5
debc6360 14
7df7a74e 15@copying
8de938d5 16Copyright @copyright{} 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès@*
f97c9175 17Copyright @copyright{} 2013, 2014, 2016 Andreas Enge@*
87eafdbd 18Copyright @copyright{} 2013 Nikita Karetnikov@*
1a3e6b15 19Copyright @copyright{} 2014, 2015, 2016 Alex Kost@*
1b846da8 20Copyright @copyright{} 2015, 2016 Mathieu Lirzin@*
8c01b9d0 21Copyright @copyright{} 2014 Pierre-Antoine Rault@*
97d76250 22Copyright @copyright{} 2015 Taylan Ulrich Bayırlı/Kammer@*
8a9cffb2 23Copyright @copyright{} 2015, 2016, 2017 Leo Famulari@*
afbc9419 24Copyright @copyright{} 2015, 2016, 2017 Ricardo Wurmus@*
4d343a14 25Copyright @copyright{} 2016 Ben Woodcroft@*
76192896 26Copyright @copyright{} 2016 Chris Marusich@*
3b88f376 27Copyright @copyright{} 2016, 2017 Efraim Flashner@*
d6a07ee6 28Copyright @copyright{} 2016 John Darrington@*
92c03a87 29Copyright @copyright{} 2016 ng0@*
8c00b838 30Copyright @copyright{} 2016 Jan Nieuwenhuizen@*
9747d189 31Copyright @copyright{} 2016 Julien Lepiller@*
78cef99b 32Copyright @copyright{} 2016 Alex ter Weele@*
11b7717d 33Copyright @copyright{} 2017 Clément Lassieur@*
bc5844d1 34Copyright @copyright{} 2017 Mathieu Othacehe@*
82ccc499 35Copyright @copyright{} 2017 Federico Beffa@*
9260b9d1 36Copyright @copyright{} 2017 Carlo Zancanaro@*
fc06b15e 37Copyright @copyright{} 2017 Thomas Danckaert@*
d7fa39cc 38Copyright @copyright{} 2017 humanitiesNerd@*
c80cd4df 39Copyright @copyright{} 2017 Christopher Allan Webber@*
5abfa08d
LC
40Copyright @copyright{} 2017 Marius Bakke@*
41Copyright @copyright{} 2017 Hartmut Goebel
7df7a74e
NK
42
43Permission is granted to copy, distribute and/or modify this document
44under the terms of the GNU Free Documentation License, Version 1.3 or
45any later version published by the Free Software Foundation; with no
46Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
47copy of the license is included in the section entitled ``GNU Free
48Documentation License''.
49@end copying
568717fd 50
abd67856 51@dircategory System administration
568717fd 52@direntry
abd67856
LC
53* Guix: (guix). Manage installed software and system configuration.
54* guix package: (guix)Invoking guix package. Installing, removing, and upgrading packages.
abd67856
LC
55* guix gc: (guix)Invoking guix gc. Reclaiming unused disk space.
56* guix pull: (guix)Invoking guix pull. Update the list of available packages.
57* guix system: (guix)Invoking guix system. Manage the operating system configuration.
568717fd 58@end direntry
568717fd 59
372c4bbc
DT
60@dircategory Software development
61@direntry
abd67856 62* guix environment: (guix)Invoking guix environment. Building development environments with Guix.
ad172c4a
LC
63* guix build: (guix)Invoking guix build. Building packages.
64* guix pack: (guix)Invoking guix pack. Creating binary bundles.
372c4bbc
DT
65@end direntry
66
568717fd 67@titlepage
7730d112
LC
68@title GNU Guix Reference Manual
69@subtitle Using the GNU Guix Functional Package Manager
2cbed07e 70@author The GNU Guix Developers
568717fd
LC
71
72@page
73@vskip 0pt plus 1filll
74Edition @value{EDITION} @*
75@value{UPDATED} @*
76
7df7a74e 77@insertcopying
568717fd
LC
78@end titlepage
79
568717fd
LC
80@contents
81
82@c *********************************************************************
83@node Top
f8348b91 84@top GNU Guix
568717fd 85
f8348b91
LC
86This document describes GNU Guix version @value{VERSION}, a functional
87package management tool written for the GNU system.
568717fd
LC
88
89@menu
90* Introduction:: What is Guix about?
bd5e766b 91* Installation:: Installing Guix.
eeaf4427 92* Package Management:: Package installation, upgrade, etc.
568717fd
LC
93* Programming Interface:: Using Guix in Scheme.
94* Utilities:: Package management commands.
a1ba8475 95* GNU Distribution:: Software for your friendly GNU system.
9bf3c1a7 96* Contributing:: Your help needed!
568717fd
LC
97
98* Acknowledgments:: Thanks!
99* GNU Free Documentation License:: The license of this manual.
100* Concept Index:: Concepts.
a85b83d2 101* Programming Index:: Data types, functions, and variables.
aaa3eaa9
LC
102
103@detailmenu
104 --- The Detailed Node Listing ---
105
106Installation
107
1b2b8177 108* Binary Installation:: Getting Guix running in no time!
aaa3eaa9 109* Requirements:: Software needed to build and run Guix.
ec0339cd 110* Running the Test Suite:: Testing Guix.
aaa3eaa9
LC
111* Setting Up the Daemon:: Preparing the build daemon's environment.
112* Invoking guix-daemon:: Running the build daemon.
0e2d0213 113* Application Setup:: Application-specific setup.
aaa3eaa9
LC
114
115Setting Up the Daemon
116
117* Build Environment Setup:: Preparing the isolated build environment.
118* Daemon Offload Setup:: Offloading builds to remote machines.
119
120Package Management
121
122* Features:: How Guix will make your life brighter.
123* Invoking guix package:: Package installation, removal, etc.
aaa3eaa9
LC
124* Substitutes:: Downloading pre-built binaries.
125* Packages with Multiple Outputs:: Single source package, multiple outputs.
126* Invoking guix gc:: Running the garbage collector.
127* Invoking guix pull:: Fetching the latest Guix and distribution.
239c2266 128* Invoking guix pack:: Creating software bundles.
aaa3eaa9
LC
129* Invoking guix archive:: Exporting and importing store files.
130
131Programming Interface
132
133* Defining Packages:: Defining new packages.
134* Build Systems:: Specifying how packages are built.
135* The Store:: Manipulating the package store.
136* Derivations:: Low-level interface to package derivations.
137* The Store Monad:: Purely functional interface to the store.
138* G-Expressions:: Manipulating build expressions.
139
92492b23
LC
140Defining Packages
141
10f4353d 142* package Reference :: The package data type.
92492b23
LC
143* origin Reference:: The origin data type.
144
aaa3eaa9
LC
145Utilities
146
147* Invoking guix build:: Building packages from the command line.
fcc58db6 148* Invoking guix edit:: Editing package definitions.
aaa3eaa9
LC
149* Invoking guix download:: Downloading a file and printing its hash.
150* Invoking guix hash:: Computing the cryptographic hash of a file.
151* Invoking guix import:: Importing package definitions.
152* Invoking guix refresh:: Updating package definitions.
153* Invoking guix lint:: Finding errors in package definitions.
fcc58db6 154* Invoking guix size:: Profiling disk usage.
88856916 155* Invoking guix graph:: Visualizing the graph of packages.
aaa3eaa9 156* Invoking guix environment:: Setting up development environments.
aff8ce7c 157* Invoking guix publish:: Sharing substitutes.
d23c20f1 158* Invoking guix challenge:: Challenging substitute servers.
f11c444d 159* Invoking guix copy:: Copying to and from a remote store.
32efa254 160* Invoking guix container:: Process isolation.
585347d7 161* Invoking guix weather:: Assessing substitute availability.
aaa3eaa9 162
e3009f60
LC
163Invoking @command{guix build}
164
165* Common Build Options:: Build options for most commands.
f11c444d 166* Package Transformation Options:: Creating variants of packages.
e3009f60 167* Additional Build Options:: Options specific to 'guix build'.
10f4353d 168* Debugging Build Failures:: Real life packaging experience.
e3009f60 169
aaa3eaa9
LC
170GNU Distribution
171
172* System Installation:: Installing the whole operating system.
35ed9306 173* System Configuration:: Configuring the operating system.
31f1f593 174* Documentation:: Browsing software user manuals.
aaa3eaa9
LC
175* Installing Debugging Files:: Feeding the debugger.
176* Security Updates:: Deploying security fixes quickly.
177* Package Modules:: Packages from the programmer's viewpoint.
178* Packaging Guidelines:: Growing the distribution.
179* Bootstrapping:: GNU/Linux built from scratch.
180* Porting:: Targeting another platform or kernel.
181
e3009f60
LC
182System Installation
183
184* Limitations:: What you can expect.
185* Hardware Considerations:: Supported hardware.
186* USB Stick Installation:: Preparing the installation medium.
187* Preparing for Installation:: Networking, partitioning, etc.
188* Proceeding with the Installation:: The real thing.
c8b54374 189* Installing GuixSD in a VM:: GuixSD playground.
e3009f60
LC
190* Building the Installation Image:: How this comes to be.
191
aaa3eaa9
LC
192System Configuration
193
194* Using the Configuration System:: Customizing your GNU system.
195* operating-system Reference:: Detail of operating-system declarations.
196* File Systems:: Configuring file system mounts.
197* Mapped Devices:: Block device extra processing.
198* User Accounts:: Specifying user accounts.
598e19dc 199* Locales:: Language and cultural convention settings.
aaa3eaa9
LC
200* Services:: Specifying system services.
201* Setuid Programs:: Programs running with root privileges.
1b2b8177 202* X.509 Certificates:: Authenticating HTTPS servers.
996ed739 203* Name Service Switch:: Configuring libc's name service switch.
aaa3eaa9 204* Initial RAM Disk:: Linux-Libre bootstrapping.
74e64724 205* Bootloader Configuration:: Configuring the boot loader.
aaa3eaa9 206* Invoking guix system:: Instantiating a system configuration.
97d76250 207* Running GuixSD in a VM:: How to run GuixSD in a virtual machine.
aaa3eaa9
LC
208* Defining Services:: Adding new service definitions.
209
210Services
211
212* Base Services:: Essential system services.
c311089b 213* Scheduled Job Execution:: The mcron service.
92c03a87 214* Log Rotation:: The rottlog service.
aaa3eaa9
LC
215* Networking Services:: Network setup, SSH daemon, etc.
216* X Window:: Graphical display.
f11c444d 217* Printing Services:: Local and remote printer support.
1b2b8177
LC
218* Desktop Services:: D-Bus and desktop services.
219* Database Services:: SQL databases.
d8c18af8 220* Mail Services:: IMAP, POP3, SMTP, and all that.
78cef99b 221* Messaging Services:: Messaging services.
730ed6ec 222* Monitoring Services:: Monitoring services.
859e367d 223* Kerberos Services:: Kerberos services.
cbd02397 224* Web Services:: Web servers.
ba69e8f7 225* DNS Services:: DNS daemons.
2be1b471 226* VPN Services:: VPN daemons.
eb419bc9 227* Network File System:: NFS related services.
f11c444d 228* Continuous Integration:: The Cuirass service.
bfbf6e1e 229* Power management Services:: The TLP tool.
dbc6d370 230* Miscellaneous Services:: Other services.
aaa3eaa9 231
0adfe95a
LC
232Defining Services
233
234* Service Composition:: The model for composing services.
235* Service Types and Services:: Types and services.
236* Service Reference:: API reference.
dd17bc38 237* Shepherd Services:: A particular type of service.
0adfe95a 238
aaa3eaa9
LC
239Packaging Guidelines
240
ec0339cd
LC
241* Software Freedom:: What may go into the distribution.
242* Package Naming:: What's in a name?
243* Version Numbers:: When the name is not enough.
cbd02397 244* Synopses and Descriptions:: Helping users find the right package.
fb4d6f6c 245* Python Modules:: A touch of British comedy.
ec0339cd 246* Perl Modules:: Little pearls.
e1c963bf 247* Java Packages:: Coffee break.
ec0339cd 248* Fonts:: Fond of fonts.
aaa3eaa9 249
8c01b9d0
ML
250Contributing
251
252* Building from Git:: The latest and greatest.
253* Running Guix Before It Is Installed:: Hacker tricks.
254* The Perfect Setup:: The right tools.
255* Coding Style:: Hygiene of the contributor.
256* Submitting Patches:: Share your work.
257
258Coding Style
259
260* Programming Paradigm:: How to compose your elements.
261* Modules:: Where to store your code?
262* Data Types and Pattern Matching:: Implementing data structures.
263* Formatting Code:: Writing conventions.
264
aaa3eaa9 265@end detailmenu
568717fd
LC
266@end menu
267
268@c *********************************************************************
269@node Introduction
270@chapter Introduction
271
6f773606 272@cindex purpose
c80e7e55 273GNU Guix@footnote{``Guix'' is pronounced like ``geeks'', or ``ɡiːks''
6f773606
LC
274using the international phonetic alphabet (IPA).} is a package
275management tool for the GNU system. Guix makes it easy for unprivileged
276users to install, upgrade, or remove packages, to roll back to a
277previous package set, to build packages from source, and generally
278assists with the creation and maintenance of software environments.
279
280@cindex user interfaces
281Guix provides a command-line package management interface
282(@pxref{Invoking guix package}), a set of command-line utilities
deb6276d 283(@pxref{Utilities}), as well as Scheme programming interfaces
6f773606
LC
284(@pxref{Programming Interface}).
285@cindex build daemon
286Its @dfn{build daemon} is responsible for building packages on behalf of
287users (@pxref{Setting Up the Daemon}) and for downloading pre-built
288binaries from authorized sources (@pxref{Substitutes}).
289
290@cindex extensibility of the distribution
e32171ee 291@cindex customization, of packages
6f773606
LC
292Guix includes package definitions for many GNU and non-GNU packages, all
293of which @uref{https://www.gnu.org/philosophy/free-sw.html, respect the
294user's computing freedom}. It is @emph{extensible}: users can write
295their own package definitions (@pxref{Defining Packages}) and make them
296available as independent package modules (@pxref{Package Modules}). It
297is also @emph{customizable}: users can @emph{derive} specialized package
298definitions from existing ones, including from the command line
299(@pxref{Package Transformation Options}).
300
301@cindex Guix System Distribution
302@cindex GuixSD
303You can install GNU@tie{}Guix on top of an existing GNU/Linux system
304where it complements the available tools without interference
305(@pxref{Installation}), or you can use it as part of the standalone
306@dfn{Guix System Distribution} or GuixSD (@pxref{GNU Distribution}).
307With GNU@tie{}GuixSD, you @emph{declare} all aspects of the operating
308system configuration and Guix takes care of instantiating the
309configuration in a transactional, reproducible, and stateless fashion
310(@pxref{System Configuration}).
568717fd
LC
311
312@cindex functional package management
6f773606 313Under the hood, Guix implements the @dfn{functional package management}
136787cb
LC
314discipline pioneered by Nix (@pxref{Acknowledgments}).
315In Guix, the package build and installation process is seen
6f773606 316as a @emph{function}, in the mathematical sense. That function takes inputs,
4bfc4ea3
NK
317such as build scripts, a compiler, and libraries, and
318returns an installed package. As a pure function, its result depends
568717fd
LC
319solely on its inputs---for instance, it cannot refer to software or
320scripts that were not explicitly passed as inputs. A build function
4bfc4ea3 321always produces the same result when passed a given set of inputs. It
f97c9175 322cannot alter the environment of the running system in
568717fd
LC
323any way; for instance, it cannot create, modify, or delete files outside
324of its build and installation directories. This is achieved by running
e900c503 325build processes in isolated environments (or @dfn{containers}), where only their
4bfc4ea3 326explicit inputs are visible.
568717fd 327
e531ac2a 328@cindex store
568717fd 329The result of package build functions is @dfn{cached} in the file
e531ac2a 330system, in a special directory called @dfn{the store} (@pxref{The
f97c9175 331Store}). Each package is installed in a directory of its own in the
834129e0 332store---by default under @file{/gnu/store}. The directory name contains
568717fd
LC
333a hash of all the inputs used to build that package; thus, changing an
334input yields a different directory name.
335
f97c9175
AE
336This approach is the foundation for the salient features of Guix: support
337for transactional package upgrade and rollback, per-user installation, and
eeaf4427 338garbage collection of packages (@pxref{Features}).
568717fd 339
a1ba8475 340
bd5e766b
LC
341@c *********************************************************************
342@node Installation
343@chapter Installation
344
e32171ee 345@cindex installing Guix
48febeb8
LC
346GNU Guix is available for download from its website at
347@url{http://www.gnu.org/software/guix/}. This section describes the
348software requirements of Guix, as well as how to install it and get
349ready to use it.
bd5e766b 350
5af6de3e
LC
351Note that this section is concerned with the installation of the package
352manager, which can be done on top of a running GNU/Linux system. If,
353instead, you want to install the complete GNU operating system,
6621cdb6 354@pxref{System Installation}.
5af6de3e 355
d23ef788
LC
356@cindex foreign distro
357When installed on a running GNU/Linux system---thereafter called a
358@dfn{foreign distro}---GNU@tie{}Guix complements the available tools
359without interference. Its data lives exclusively in two directories,
360usually @file{/gnu/store} and @file{/var/guix}; other files on your
361system, such as @file{/etc}, are left untouched.
362
7fcf2a0b
LC
363Once installed, Guix can be updated by running @command{guix pull}
364(@pxref{Invoking guix pull}).
365
bd5e766b 366@menu
09722b11 367* Binary Installation:: Getting Guix running in no time!
bd5e766b 368* Requirements:: Software needed to build and run Guix.
ec0339cd 369* Running the Test Suite:: Testing Guix.
bd5e766b
LC
370* Setting Up the Daemon:: Preparing the build daemon's environment.
371* Invoking guix-daemon:: Running the build daemon.
0e2d0213 372* Application Setup:: Application-specific setup.
bd5e766b
LC
373@end menu
374
09722b11
LC
375@node Binary Installation
376@section Binary Installation
377
e32171ee 378@cindex installing Guix from binaries
09722b11
LC
379This section describes how to install Guix on an arbitrary system from a
380self-contained tarball providing binaries for Guix and for all its
381dependencies. This is often quicker than installing from source, which
382is described in the next sections. The only requirement is to have
383GNU@tie{}tar and Xz.
384
385Installing goes along these lines:
386
387@enumerate
388@item
e32171ee 389@cindex downloading Guix binary
09722b11 390Download the binary tarball from
daa8922a
LC
391@indicateurl{ftp://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{system}.tar.xz},
392where @var{system} is @code{x86_64-linux} for an @code{x86_64} machine
393already running the kernel Linux, and so on.
394
debc6360 395@c The following is somewhat duplicated in ``System Installation''.
daa8922a
LC
396Make sure to download the associated @file{.sig} file and to verify the
397authenticity of the tarball against it, along these lines:
398
399@example
400$ wget ftp://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{system}.tar.xz.sig
401$ gpg --verify guix-binary-@value{VERSION}.@var{system}.tar.xz.sig
402@end example
403
f97c9175 404If that command fails because you do not have the required public key,
daa8922a
LC
405then run this command to import it:
406
407@example
debc6360 408$ gpg --keyserver pgp.mit.edu --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
daa8922a
LC
409@end example
410
411@noindent
412and rerun the @code{gpg --verify} command.
debc6360 413@c end authentication part
09722b11
LC
414
415@item
416As @code{root}, run:
417
418@example
5dc42964 419# cd /tmp
254b1c2e
LC
420# tar --warning=no-timestamp -xf \
421 guix-binary-@value{VERSION}.@var{system}.tar.xz
5dc42964 422# mv var/guix /var/ && mv gnu /
09722b11
LC
423@end example
424
7acd3439
LC
425This creates @file{/gnu/store} (@pxref{The Store}) and @file{/var/guix}.
426The latter contains a ready-to-use profile for @code{root} (see next
427step.)
09722b11 428
5dc3ce5f
LC
429Do @emph{not} unpack the tarball on a working Guix system since that
430would overwrite its own essential files.
431
254b1c2e 432The @code{--warning=no-timestamp} option makes sure GNU@tie{}tar does
e9ba6357
LC
433not emit warnings about ``implausibly old time stamps'' (such
434warnings were triggered by GNU@tie{}tar 1.26 and older; recent
435versions are fine.)
436They stem from the fact that all the
254b1c2e
LC
437files in the archive have their modification time set to zero (which
438means January 1st, 1970.) This is done on purpose to make sure the
439archive content is independent of its creation time, thus making it
440reproducible.
441
7acd3439
LC
442@item
443Make @code{root}'s profile available under @file{~/.guix-profile}:
444
445@example
446# ln -sf /var/guix/profiles/per-user/root/guix-profile \
447 ~root/.guix-profile
448@end example
449
1165b08f
LC
450Source @file{etc/profile} to augment @code{PATH} and other relevant
451environment variables:
452
453@example
454# GUIX_PROFILE=$HOME/.guix-profile \
455 source $GUIX_PROFILE/etc/profile
456@end example
457
43c33047
LC
458@item
459Create the group and user accounts for build users as explained below
460(@pxref{Build Environment Setup}).
461
09722b11 462@item
bf98aea9 463Run the daemon, and set it to automatically start on boot.
c8e26887 464
bf98aea9
LC
465If your host distro uses the systemd init system, this can be achieved
466with these commands:
c8e26887 467
b812da70
LF
468@c Versions of systemd that supported symlinked service files are not
469@c yet widely deployed, so we should suggest that users copy the service
470@c files into place.
471@c
472@c See this thread for more information:
473@c http://lists.gnu.org/archive/html/guix-devel/2017-01/msg01199.html
474
c8e26887 475@example
b812da70 476# cp ~root/.guix-profile/lib/systemd/system/guix-daemon.service \
c8e26887
GC
477 /etc/systemd/system/
478# systemctl start guix-daemon && systemctl enable guix-daemon
479@end example
480
481If your host distro uses the Upstart init system:
09722b11
LC
482
483@example
4a780bdf 484# initctl reload-configuration
b812da70 485# cp ~root/.guix-profile/lib/upstart/system/guix-daemon.conf /etc/init/
bf98aea9 486# start guix-daemon
09722b11
LC
487@end example
488
c8e26887
GC
489Otherwise, you can still start the daemon manually with:
490
491@example
492# ~root/.guix-profile/bin/guix-daemon --build-users-group=guixbuild
493@end example
d2825c96 494
09722b11
LC
495@item
496Make the @command{guix} command available to other users on the machine,
497for instance with:
498
499@example
500# mkdir -p /usr/local/bin
501# cd /usr/local/bin
d72d05f9 502# ln -s /var/guix/profiles/per-user/root/guix-profile/bin/guix
09722b11 503@end example
39f8ed14 504
aca738f3
LC
505It is also a good idea to make the Info version of this manual available
506there:
507
508@example
509# mkdir -p /usr/local/share/info
510# cd /usr/local/share/info
511# for i in /var/guix/profiles/per-user/root/guix-profile/share/info/* ;
512 do ln -s $i ; done
513@end example
514
515That way, assuming @file{/usr/local/share/info} is in the search path,
516running @command{info guix} will open this manual (@pxref{Other Info
517Directories,,, texinfo, GNU Texinfo}, for more details on changing the
518Info search path.)
519
39f8ed14 520@item
e32171ee 521@cindex substitutes, authorization thereof
df061d07
LC
522To use substitutes from @code{hydra.gnu.org} or one of its mirrors
523(@pxref{Substitutes}), authorize them:
39f8ed14
LC
524
525@example
7acd3439 526# guix archive --authorize < ~root/.guix-profile/share/guix/hydra.gnu.org.pub
39f8ed14 527@end example
7f608a9b
LC
528
529@item
530Each user may need to perform a few additional steps to make their Guix
531environment ready for use, @pxref{Application Setup}.
09722b11
LC
532@end enumerate
533
7f608a9b 534Voilà, the installation is complete!
09722b11 535
c8e26887
GC
536You can confirm that Guix is working by installing a sample package into
537the root profile:
09722b11
LC
538
539@example
c8e26887 540# guix package -i hello
09722b11
LC
541@end example
542
c8e26887
GC
543The @code{guix} package must remain available in @code{root}'s profile,
544or it would become subject to garbage collection---in which case you
545would find yourself badly handicapped by the lack of the @command{guix}
bf98aea9
LC
546command. In other words, do not remove @code{guix} by running
547@code{guix package -r guix}.
548
549The binary installation tarball can be (re)produced and verified simply
550by running the following command in the Guix source tree:
551
552@example
553make guix-binary.@var{system}.tar.xz
554@end example
c8e26887 555
239c2266
LC
556@noindent
557... which, in turn, runs:
558
559@example
6b63c43e 560guix pack -s @var{system} --localstatedir guix
239c2266
LC
561@end example
562
563@xref{Invoking guix pack}, for more info on this handy tool.
09722b11 564
bd5e766b
LC
565@node Requirements
566@section Requirements
567
09722b11
LC
568This section lists requirements when building Guix from source. The
569build procedure for Guix is the same as for other GNU software, and is
570not covered here. Please see the files @file{README} and @file{INSTALL}
571in the Guix source tree for additional details.
572
bd5e766b
LC
573GNU Guix depends on the following packages:
574
575@itemize
36626c55 576@item @url{http://gnu.org/software/guile/, GNU Guile}, version 2.0.9 or
608e42e7 577later, including 2.2.x;
288dca55 578@item @url{http://gnupg.org/, GNU libgcrypt};
1dbe3a8d
LC
579@item
580@uref{http://gnutls.org/, GnuTLS}, specifically its Guile bindings
581(@pxref{Guile Preparations, how to install the GnuTLS bindings for
582Guile,, gnutls-guile, GnuTLS-Guile});
f0b98b84 583@item @url{http://www.gnu.org/software/make/, GNU Make}.
8a96bd4b
ID
584@end itemize
585
586The following dependencies are optional:
587
588@itemize
288dca55 589@item
8a96bd4b 590Installing
288dca55 591@url{http://savannah.nongnu.org/projects/guile-json/, Guile-JSON} will
2f7d2d91
LC
592allow you to use the @command{guix import pypi} command (@pxref{Invoking
593guix import}). It is of
288dca55 594interest primarily for developers and not for casual users.
4591c02e 595
21531add
LC
596@item
597@c Note: We need at least 0.10.2 for 'channel-send-eof'.
f11c444d
LC
598Support for build offloading (@pxref{Daemon Offload Setup}) and
599@command{guix copy} (@pxref{Invoking guix copy}) depends on
21531add
LC
600@uref{https://github.com/artyom-poptsov/guile-ssh, Guile-SSH},
601version 0.10.2 or later.
602
4591c02e
LC
603@item
604When @url{http://zlib.net, zlib} is available, @command{guix publish}
605can compress build byproducts (@pxref{Invoking guix publish}).
bd5e766b
LC
606@end itemize
607
608Unless @code{--disable-daemon} was passed to @command{configure}, the
609following packages are also needed:
610
611@itemize
368d08f7
LC
612@item @url{http://sqlite.org, SQLite 3};
613@item @url{http://www.bzip.org, libbz2};
614@item @url{http://gcc.gnu.org, GCC's g++}, with support for the
615C++11 standard.
bd5e766b
LC
616@end itemize
617
e32171ee 618@cindex state directory
ef5f5c86
LC
619When configuring Guix on a system that already has a Guix installation,
620be sure to specify the same state directory as the existing installation
621using the @code{--localstatedir} option of the @command{configure}
622script (@pxref{Directory Variables, @code{localstatedir},, standards,
623GNU Coding Standards}). The @command{configure} script protects against
624unintended misconfiguration of @var{localstatedir} so you do not
625inadvertently corrupt your store (@pxref{The Store}).
626
e32171ee 627@cindex Nix, compatibility
4bfc4ea3
NK
628When a working installation of @url{http://nixos.org/nix/, the Nix package
629manager} is available, you
bd5e766b 630can instead configure Guix with @code{--disable-daemon}. In that case,
4bfc4ea3 631Nix replaces the three dependencies above.
bd5e766b 632
b22a12fd
LC
633Guix is compatible with Nix, so it is possible to share the same store
634between both. To do so, you must pass @command{configure} not only the
635same @code{--with-store-dir} value, but also the same
4bfc4ea3
NK
636@code{--localstatedir} value. The latter is essential because it
637specifies where the database that stores metadata about the store is
834129e0 638located, among other things. The default values for Nix are
b22a12fd 639@code{--with-store-dir=/nix/store} and @code{--localstatedir=/nix/var}.
4bfc4ea3
NK
640Note that @code{--disable-daemon} is not required if
641your goal is to share the store with Nix.
b22a12fd 642
ec0339cd
LC
643@node Running the Test Suite
644@section Running the Test Suite
645
e32171ee 646@cindex test suite
ec0339cd
LC
647After a successful @command{configure} and @code{make} run, it is a good
648idea to run the test suite. It can help catch issues with the setup or
649environment, or bugs in Guix itself---and really, reporting test
650failures is a good way to help improve the software. To run the test
651suite, type:
652
653@example
654make check
655@end example
656
657Test cases can run in parallel: you can use the @code{-j} option of
658GNU@tie{}make to speed things up. The first run may take a few minutes
659on a recent machine; subsequent runs will be faster because the store
660that is created for test purposes will already have various things in
661cache.
662
a887fd8d
LC
663It is also possible to run a subset of the tests by defining the
664@code{TESTS} makefile variable as in this example:
665
666@example
667make check TESTS="tests/store.scm tests/cpio.scm"
668@end example
669
a9edb211
ML
670By default, tests results are displayed at a file level. In order to
671see the details of every individual test cases, it is possible to define
672the @code{SCM_LOG_DRIVER_FLAGS} makefile variable as in this example:
673
674@example
675make check TESTS="tests/base64.scm" SCM_LOG_DRIVER_FLAGS="--brief=no"
676@end example
677
ec0339cd 678Upon failure, please email @email{bug-guix@@gnu.org} and attach the
a9edb211
ML
679@file{test-suite.log} file. Please specify the Guix version being used
680as well as version numbers of the dependencies (@pxref{Requirements}) in
681your message.
ec0339cd 682
0a2f2848
LC
683Guix also comes with a whole-system test suite that tests complete
684GuixSD operating system instances. It can only run on systems where
685Guix is already installed, using:
686
687@example
688make check-system
689@end example
690
691@noindent
692or, again, by defining @code{TESTS} to select a subset of tests to run:
693
694@example
695make check-system TESTS="basic mcron"
696@end example
697
698These system tests are defined in the @code{(gnu tests @dots{})}
699modules. They work by running the operating systems under test with
700lightweight instrumentation in a virtual machine (VM). They can be
701computationally intensive or rather cheap, depending on whether
702substitutes are available for their dependencies (@pxref{Substitutes}).
703Some of them require a lot of storage space to hold VM images.
704
705Again in case of test failures, please send @email{bug-guix@@gnu.org}
706all the details.
707
bd5e766b
LC
708@node Setting Up the Daemon
709@section Setting Up the Daemon
710
711@cindex daemon
712Operations such as building a package or running the garbage collector
49e6291a 713are all performed by a specialized process, the @dfn{build daemon}, on
bd5e766b
LC
714behalf of clients. Only the daemon may access the store and its
715associated database. Thus, any operation that manipulates the store
716goes through the daemon. For instance, command-line tools such as
e49951eb 717@command{guix package} and @command{guix build} communicate with the
bd5e766b
LC
718daemon (@i{via} remote procedure calls) to instruct it what to do.
719
49e6291a 720The following sections explain how to prepare the build daemon's
f97c9175 721environment. See also @ref{Substitutes}, for information on how to allow
225dafde 722the daemon to download pre-built binaries.
49e6291a
LC
723
724@menu
725* Build Environment Setup:: Preparing the isolated build environment.
726* Daemon Offload Setup:: Offloading builds to remote machines.
727@end menu
728
729@node Build Environment Setup
730@subsection Build Environment Setup
731
e32171ee 732@cindex build environment
bd5e766b
LC
733In a standard multi-user setup, Guix and its daemon---the
734@command{guix-daemon} program---are installed by the system
834129e0 735administrator; @file{/gnu/store} is owned by @code{root} and
bd5e766b
LC
736@command{guix-daemon} runs as @code{root}. Unprivileged users may use
737Guix tools to build packages or otherwise access the store, and the
738daemon will do it on their behalf, ensuring that the store is kept in a
739consistent state, and allowing built packages to be shared among users.
740
741@cindex build users
742When @command{guix-daemon} runs as @code{root}, you may not want package
743build processes themselves to run as @code{root} too, for obvious
744security reasons. To avoid that, a special pool of @dfn{build users}
745should be created for use by build processes started by the daemon.
746These build users need not have a shell and a home directory: they will
747just be used when the daemon drops @code{root} privileges in build
748processes. Having several such users allows the daemon to launch
749distinct build processes under separate UIDs, which guarantees that they
750do not interfere with each other---an essential feature since builds are
751regarded as pure functions (@pxref{Introduction}).
752
753On a GNU/Linux system, a build user pool may be created like this (using
754Bash syntax and the @code{shadow} commands):
755
091196b3
LC
756@c See http://lists.gnu.org/archive/html/bug-guix/2013-01/msg00239.html
757@c for why `-G' is needed.
bd5e766b 758@example
cfc149dc
LC
759# groupadd --system guixbuild
760# for i in `seq -w 1 10`;
bd5e766b 761 do
cfc149dc
LC
762 useradd -g guixbuild -G guixbuild \
763 -d /var/empty -s `which nologin` \
764 -c "Guix build user $i" --system \
765 guixbuilder$i;
bd5e766b
LC
766 done
767@end example
768
769@noindent
54eb03ab
LC
770The number of build users determines how many build jobs may run in
771parallel, as specified by the @option{--max-jobs} option
eca69fc0
LC
772(@pxref{Invoking guix-daemon, @option{--max-jobs}}). To use
773@command{guix system vm} and related commands, you may need to add the
774build users to the @code{kvm} group so they can access @file{/dev/kvm},
775using @code{-G guixbuild,kvm} instead of @code{-G guixbuild}
776(@pxref{Invoking guix system}).
777
778The @code{guix-daemon} program may then be run as @code{root} with the
d2825c96
LC
779following command@footnote{If your machine uses the systemd init system,
780dropping the @file{@var{prefix}/lib/systemd/system/guix-daemon.service}
781file in @file{/etc/systemd/system} will ensure that
ad227484
MDRS
782@command{guix-daemon} is automatically started. Similarly, if your
783machine uses the Upstart init system, drop the
784@file{@var{prefix}/lib/upstart/system/guix-daemon.conf}
785file in @file{/etc/init}.}:
bd5e766b
LC
786
787@example
cfc149dc 788# guix-daemon --build-users-group=guixbuild
bd5e766b
LC
789@end example
790
e900c503 791@cindex chroot
b095792f
LC
792@noindent
793This way, the daemon starts build processes in a chroot, under one of
cfc149dc 794the @code{guixbuilder} users. On GNU/Linux, by default, the chroot
6dc99317
LC
795environment contains nothing but:
796
797@c Keep this list in sync with libstore/build.cc! -----------------------
798@itemize
799@item
4743a4da
LC
800a minimal @code{/dev} directory, created mostly independently from the
801host @code{/dev}@footnote{``Mostly'', because while the set of files
802that appear in the chroot's @code{/dev} is fixed, most of these files
803can only be created if the host has them.};
804
805@item
f97c9175 806the @code{/proc} directory; it only shows the processes of the container
4743a4da 807since a separate PID name space is used;
6dc99317
LC
808
809@item
810@file{/etc/passwd} with an entry for the current user and an entry for
811user @file{nobody};
812
813@item
814@file{/etc/group} with an entry for the user's group;
815
816@item
817@file{/etc/hosts} with an entry that maps @code{localhost} to
818@code{127.0.0.1};
819
820@item
821a writable @file{/tmp} directory.
822@end itemize
b095792f 823
cb960102
ED
824You can influence the directory where the daemon stores build trees
825@i{via} the @code{TMPDIR} environment variable. However, the build tree
f97c9175 826within the chroot is always called @file{/tmp/guix-build-@var{name}.drv-0},
cb960102
ED
827where @var{name} is the derivation name---e.g., @code{coreutils-8.24}.
828This way, the value of @code{TMPDIR} does not leak inside build
829environments, which avoids discrepancies in cases where build processes
830capture the name of their build tree.
831
e0c941fe
LC
832@vindex http_proxy
833The daemon also honors the @code{http_proxy} environment variable for
834HTTP downloads it performs, be it for fixed-output derivations
835(@pxref{Derivations}) or for substitutes (@pxref{Substitutes}).
836
1e2644bb
LC
837If you are installing Guix as an unprivileged user, it is still possible
838to run @command{guix-daemon} provided you pass @code{--disable-chroot}.
839However, build processes will not be isolated from one another, and not
840from the rest of the system. Thus, build processes may interfere with
841each other, and may access programs, libraries, and other files
842available on the system---making it much harder to view them as
843@emph{pure} functions.
bd5e766b 844
49e6291a
LC
845
846@node Daemon Offload Setup
847@subsection Using the Offload Facility
848
849@cindex offloading
4ec2e92d 850@cindex build hook
21531add
LC
851When desired, the build daemon can @dfn{offload} derivation builds to
852other machines running Guix, using the @code{offload} @dfn{build
853hook}@footnote{This feature is available only when
854@uref{https://github.com/artyom-poptsov/guile-ssh, Guile-SSH} is
855present.}. When that
49e6291a 856feature is enabled, a list of user-specified build machines is read from
f97c9175 857@file{/etc/guix/machines.scm}; every time a build is requested, for
49e6291a 858instance via @code{guix build}, the daemon attempts to offload it to one
f97c9175 859of the machines that satisfy the constraints of the derivation, in
49e6291a
LC
860particular its system type---e.g., @file{x86_64-linux}. Missing
861prerequisites for the build are copied over SSH to the target machine,
862which then proceeds with the build; upon success the output(s) of the
863build are copied back to the initial machine.
864
4ec2e92d 865The @file{/etc/guix/machines.scm} file typically looks like this:
49e6291a
LC
866
867@example
868(list (build-machine
869 (name "eightysix.example.org")
870 (system "x86_64-linux")
21531add 871 (host-key "ssh-ed25519 AAAAC3Nza@dots{}")
49e6291a 872 (user "bob")
21531add 873 (speed 2.)) ;incredibly fast!
49e6291a
LC
874
875 (build-machine
876 (name "meeps.example.org")
877 (system "mips64el-linux")
21531add 878 (host-key "ssh-rsa AAAAB3Nza@dots{}")
49e6291a
LC
879 (user "alice")
880 (private-key
881 (string-append (getenv "HOME")
21531add 882 "/.ssh/identity-for-guix"))))
49e6291a
LC
883@end example
884
885@noindent
886In the example above we specify a list of two build machines, one for
887the @code{x86_64} architecture and one for the @code{mips64el}
4ec2e92d
LC
888architecture.
889
890In fact, this file is---not surprisingly!---a Scheme file that is
891evaluated when the @code{offload} hook is started. Its return value
892must be a list of @code{build-machine} objects. While this example
893shows a fixed list of build machines, one could imagine, say, using
894DNS-SD to return a list of potential build machines discovered in the
895local network (@pxref{Introduction, Guile-Avahi,, guile-avahi, Using
c678a4ee
LC
896Avahi in Guile Scheme Programs}). The @code{build-machine} data type is
897detailed below.
4ec2e92d 898
c678a4ee 899@deftp {Data Type} build-machine
f97c9175
AE
900This data type represents build machines to which the daemon may offload
901builds. The important fields are:
49e6291a
LC
902
903@table @code
904
905@item name
f97c9175 906The host name of the remote machine.
49e6291a
LC
907
908@item system
f97c9175 909The system type of the remote machine---e.g., @code{"x86_64-linux"}.
49e6291a
LC
910
911@item user
912The user account to use when connecting to the remote machine over SSH.
913Note that the SSH key pair must @emph{not} be passphrase-protected, to
914allow non-interactive logins.
915
21531add
LC
916@item host-key
917This must be the machine's SSH @dfn{public host key} in OpenSSH format.
918This is used to authenticate the machine when we connect to it. It is a
919long string that looks like this:
920
921@example
922ssh-ed25519 AAAAC3NzaC@dots{}mde+UhL hint@@example.org
923@end example
924
925If the machine is running the OpenSSH daemon, @command{sshd}, the host
926key can be found in a file such as
927@file{/etc/ssh/ssh_host_ed25519_key.pub}.
928
929If the machine is running the SSH daemon of GNU@tie{}lsh,
930@command{lshd}, the host key is in @file{/etc/lsh/host-key.pub} or a
931similar file. It can be converted to the OpenSSH format using
932@command{lsh-export-key} (@pxref{Converting keys,,, lsh, LSH Manual}):
933
934@example
935$ lsh-export-key --openssh < /etc/lsh/host-key.pub
936ssh-rsa AAAAB3NzaC1yc2EAAAAEOp8FoQAAAQEAs1eB46LV@dots{}
937@end example
938
49e6291a
LC
939@end table
940
4ec2e92d 941A number of optional fields may be specified:
49e6291a 942
21531add 943@table @asis
49e6291a 944
21531add
LC
945@item @code{port} (default: @code{22})
946Port number of SSH server on the machine.
cecd72d5 947
dde1e152 948@item @code{private-key} (default: @file{~root/.ssh/id_rsa})
21531add
LC
949The SSH private key file to use when connecting to the machine, in
950OpenSSH format.
49e6291a 951
dde1e152
OP
952Note that the default value is the private key @emph{of the root
953account}. Make sure it exists if you use the default.
954
1d48cf94
LC
955@item @code{compression} (default: @code{"zlib@@openssh.com,zlib"})
956@itemx @code{compression-level} (default: @code{3})
957The SSH-level compression methods and compression level requested.
958
959Note that offloading relies on SSH compression to reduce bandwidth usage
960when transferring files to and from build machines.
961
cf283dd9
LC
962@item @code{daemon-socket} (default: @code{"/var/guix/daemon-socket/socket"})
963File name of the Unix-domain socket @command{guix-daemon} is listening
964to on that machine.
c4fdfd6f 965
21531add
LC
966@item @code{parallel-builds} (default: @code{1})
967The number of builds that may run in parallel on the machine.
49e6291a 968
21531add 969@item @code{speed} (default: @code{1.0})
49e6291a
LC
970A ``relative speed factor''. The offload scheduler will tend to prefer
971machines with a higher speed factor.
972
21531add 973@item @code{features} (default: @code{'()})
49e6291a
LC
974A list of strings denoting specific features supported by the machine.
975An example is @code{"kvm"} for machines that have the KVM Linux modules
976and corresponding hardware support. Derivations can request features by
977name, and they will be scheduled on matching build machines.
978
979@end table
c678a4ee 980@end deftp
49e6291a 981
aebaee95
LC
982The @code{guile} command must be in the search path on the build
983machines. In addition, the Guix modules must be in
c4fdfd6f
LC
984@code{$GUILE_LOAD_PATH} on the build machine---you can check whether
985this is the case by running:
986
987@example
21531add 988ssh build-machine guile -c "'(use-modules (guix config))'"
c4fdfd6f 989@end example
49e6291a 990
f97c9175 991There is one last thing to do once @file{machines.scm} is in place. As
49e6291a 992explained above, when offloading, files are transferred back and forth
c4fdfd6f
LC
993between the machine stores. For this to work, you first need to
994generate a key pair on each machine to allow the daemon to export signed
995archives of files from the store (@pxref{Invoking guix archive}):
49e6291a
LC
996
997@example
998# guix archive --generate-key
999@end example
1000
1001@noindent
c4fdfd6f
LC
1002Each build machine must authorize the key of the master machine so that
1003it accepts store items it receives from the master:
1004
1005@example
1006# guix archive --authorize < master-public-key.txt
1007@end example
1008
1009@noindent
1010Likewise, the master machine must authorize the key of each build machine.
1011
1012All the fuss with keys is here to express pairwise mutual trust
1013relations between the master and the build machines. Concretely, when
1014the master receives files from a build machine (and @i{vice versa}), its
1015build daemon can make sure they are genuine, have not been tampered
1016with, and that they are signed by an authorized key.
49e6291a 1017
aebaee95
LC
1018@cindex offload test
1019To test whether your setup is operational, run this command on the
1020master node:
1021
1022@example
1023# guix offload test
1024@end example
1025
1026This will attempt to connect to each of the build machines specified in
1027@file{/etc/guix/machines.scm}, make sure Guile and the Guix modules are
1028available on each machine, attempt to export to the machine and import
1029from it, and report any error in the process.
1030
1031If you want to test a different machine file, just specify it on the
1032command line:
1033
1034@example
1035# guix offload test machines-qualif.scm
1036@end example
1037
27991c97
LC
1038Last, you can test the subset of the machines whose name matches a
1039regular expression like this:
1040
1041@example
1042# guix offload test machines.scm '\.gnu\.org$'
1043@end example
49e6291a 1044
bd5e766b
LC
1045@node Invoking guix-daemon
1046@section Invoking @command{guix-daemon}
1047
1048The @command{guix-daemon} program implements all the functionality to
1049access the store. This includes launching build processes, running the
1050garbage collector, querying the availability of a build result, etc. It
1051is normally run as @code{root} like this:
1052
1053@example
cfc149dc 1054# guix-daemon --build-users-group=guixbuild
bd5e766b
LC
1055@end example
1056
1057@noindent
081145cf 1058For details on how to set it up, @pxref{Setting Up the Daemon}.
bd5e766b 1059
e900c503
LC
1060@cindex chroot
1061@cindex container, build environment
1062@cindex build environment
1063@cindex reproducible builds
bd5e766b
LC
1064By default, @command{guix-daemon} launches build processes under
1065different UIDs, taken from the build group specified with
1066@code{--build-users-group}. In addition, each build process is run in a
1067chroot environment that only contains the subset of the store that the
1068build process depends on, as specified by its derivation
1069(@pxref{Programming Interface, derivation}), plus a set of specific
1070system directories. By default, the latter contains @file{/dev} and
e900c503
LC
1071@file{/dev/pts}. Furthermore, on GNU/Linux, the build environment is a
1072@dfn{container}: in addition to having its own file system tree, it has
1073a separate mount name space, its own PID name space, network name space,
1074etc. This helps achieve reproducible builds (@pxref{Features}).
bd5e766b 1075
cbc538fe
LC
1076When the daemon performs a build on behalf of the user, it creates a
1077build directory under @file{/tmp} or under the directory specified by
1078its @code{TMPDIR} environment variable; this directory is shared with
1079the container for the duration of the build. Be aware that using a
1080directory other than @file{/tmp} can affect build results---for example,
1081with a longer directory name, a build process that uses Unix-domain
1082sockets might hit the name length limitation for @code{sun_path}, which
1083it would otherwise not hit.
1084
1085The build directory is automatically deleted upon completion, unless the
1086build failed and the client specified @option{--keep-failed}
1087(@pxref{Invoking guix build, @option{--keep-failed}}).
1088
bd5e766b
LC
1089The following command-line options are supported:
1090
1091@table @code
1092@item --build-users-group=@var{group}
1093Take users from @var{group} to run build processes (@pxref{Setting Up
1094the Daemon, build users}).
1095
6858f9d1 1096@item --no-substitutes
b5385b52 1097@cindex substitutes
6858f9d1 1098Do not use substitutes for build products. That is, always build things
c4202d60
LC
1099locally instead of allowing downloads of pre-built binaries
1100(@pxref{Substitutes}).
6858f9d1 1101
b5385b52
LC
1102By default substitutes are used, unless the client---such as the
1103@command{guix package} command---is explicitly invoked with
1104@code{--no-substitutes}.
1105
1106When the daemon runs with @code{--no-substitutes}, clients can still
1107explicitly enable substitution @i{via} the @code{set-build-options}
1108remote procedure call (@pxref{The Store}).
1109
9176607e 1110@item --substitute-urls=@var{urls}
f8a8e0fe 1111@anchor{daemon-substitute-urls}
9176607e 1112Consider @var{urls} the default whitespace-separated list of substitute
df061d07
LC
1113source URLs. When this option is omitted,
1114@indicateurl{https://mirror.hydra.gnu.org https://hydra.gnu.org} is used
1115(@code{mirror.hydra.gnu.org} is a mirror of @code{hydra.gnu.org}).
9176607e
LC
1116
1117This means that substitutes may be downloaded from @var{urls}, as long
1118as they are signed by a trusted signature (@pxref{Substitutes}).
1119
4ec2e92d
LC
1120@cindex build hook
1121@item --no-build-hook
1122Do not use the @dfn{build hook}.
1123
1124The build hook is a helper program that the daemon can start and to
1125which it submits build requests. This mechanism is used to offload
1126builds to other machines (@pxref{Daemon Offload Setup}).
1127
bd5e766b
LC
1128@item --cache-failures
1129Cache build failures. By default, only successful builds are cached.
1130
30d9aa54
LC
1131When this option is used, @command{guix gc --list-failures} can be used
1132to query the set of store items marked as failed; @command{guix gc
1133--clear-failures} removes store items from the set of cached failures.
1134@xref{Invoking guix gc}.
1135
bd5e766b
LC
1136@item --cores=@var{n}
1137@itemx -c @var{n}
1138Use @var{n} CPU cores to build each derivation; @code{0} means as many
1139as available.
1140
6efc160e 1141The default value is @code{0}, but it may be overridden by clients, such
e49951eb
MW
1142as the @code{--cores} option of @command{guix build} (@pxref{Invoking
1143guix build}).
bd5e766b
LC
1144
1145The effect is to define the @code{NIX_BUILD_CORES} environment variable
1146in the build process, which can then use it to exploit internal
1147parallelism---for instance, by running @code{make -j$NIX_BUILD_CORES}.
1148
1149@item --max-jobs=@var{n}
1150@itemx -M @var{n}
1151Allow at most @var{n} build jobs in parallel. The default value is
f6526eb3
LC
1152@code{1}. Setting it to @code{0} means that no builds will be performed
1153locally; instead, the daemon will offload builds (@pxref{Daemon Offload
1154Setup}), or simply fail.
bd5e766b 1155
2ca9f51e
LC
1156@item --max-silent-time=@var{seconds}
1157When the build or substitution process remains silent for more than
1158@var{seconds}, terminate it and report a build failure.
1159
1160The default value is @code{0}, which disables the timeout.
1161
1162The value specified here can be overridden by clients (@pxref{Common
1163Build Options, @code{--max-silent-time}}).
1164
1165@item --timeout=@var{seconds}
1166Likewise, when the build or substitution process lasts for more than
1167@var{seconds}, terminate it and report a build failure.
1168
1169The default value is @code{0}, which disables the timeout.
1170
1171The value specified here can be overridden by clients (@pxref{Common
1172Build Options, @code{--timeout}}).
1173
ecf84b7c
LC
1174@item --rounds=@var{N}
1175Build each derivation @var{n} times in a row, and raise an error if
1176consecutive build results are not bit-for-bit identical. Note that this
1177setting can be overridden by clients such as @command{guix build}
1178(@pxref{Invoking guix build}).
1179
b4528110
ED
1180When used in conjunction with @option{--keep-failed}, the differing
1181output is kept in the store, under @file{/gnu/store/@dots{}-check}.
1182This makes it easy to look for differences between the two results.
1183
bd5e766b
LC
1184@item --debug
1185Produce debugging output.
1186
1187This is useful to debug daemon start-up issues, but then it may be
1188overridden by clients, for example the @code{--verbosity} option of
e49951eb 1189@command{guix build} (@pxref{Invoking guix build}).
bd5e766b
LC
1190
1191@item --chroot-directory=@var{dir}
1192Add @var{dir} to the build chroot.
1193
1194Doing this may change the result of build processes---for instance if
1195they use optional dependencies found in @var{dir} when it is available,
1196and not otherwise. For that reason, it is not recommended to do so.
1197Instead, make sure that each derivation declares all the inputs that it
1198needs.
1199
1200@item --disable-chroot
1201Disable chroot builds.
1202
1203Using this option is not recommended since, again, it would allow build
1e2644bb
LC
1204processes to gain access to undeclared dependencies. It is necessary,
1205though, when @command{guix-daemon} is running under an unprivileged user
1206account.
bd5e766b
LC
1207
1208@item --disable-log-compression
1209Disable compression of the build logs.
1210
1da983b9
LC
1211Unless @code{--lose-logs} is used, all the build logs are kept in the
1212@var{localstatedir}. To save space, the daemon automatically compresses
1213them with bzip2 by default. This option disables that.
1214
ab3893d7
LC
1215@item --disable-deduplication
1216@cindex deduplication
bd5e766b
LC
1217Disable automatic file ``deduplication'' in the store.
1218
1da983b9 1219By default, files added to the store are automatically ``deduplicated'':
ab3893d7
LC
1220if a newly added file is identical to another one found in the store,
1221the daemon makes the new file a hard link to the other file. This can
4988dd40 1222noticeably reduce disk usage, at the expense of slightly increased
ab3893d7
LC
1223input/output load at the end of a build process. This option disables
1224this optimization.
1da983b9 1225
6e37066e
LC
1226@item --gc-keep-outputs[=yes|no]
1227Tell whether the garbage collector (GC) must keep outputs of live
1228derivations.
1229
1230When set to ``yes'', the GC will keep the outputs of any live derivation
1231available in the store---the @code{.drv} files. The default is ``no'',
1232meaning that derivation outputs are kept only if they are GC roots.
1233
1234@item --gc-keep-derivations[=yes|no]
1235Tell whether the garbage collector (GC) must keep derivations
1236corresponding to live outputs.
1237
1238When set to ``yes'', as is the case by default, the GC keeps
1239derivations---i.e., @code{.drv} files---as long as at least one of their
1240outputs is live. This allows users to keep track of the origins of
1241items in their store. Setting it to ``no'' saves a bit of disk space.
1242
1243Note that when both @code{--gc-keep-derivations} and
1244@code{--gc-keep-outputs} are used, the effect is to keep all the build
1245prerequisites (the sources, compiler, libraries, and other build-time
1246tools) of live objects in the store, regardless of whether these
1247prerequisites are live. This is convenient for developers since it
1248saves rebuilds or downloads.
1249
bd5e766b
LC
1250@item --impersonate-linux-2.6
1251On Linux-based systems, impersonate Linux 2.6. This means that the
1252kernel's @code{uname} system call will report 2.6 as the release number.
1253
1254This might be helpful to build programs that (usually wrongfully) depend
1255on the kernel version number.
1256
1257@item --lose-logs
1258Do not keep build logs. By default they are kept under
ce33631f 1259@code{@var{localstatedir}/guix/log}.
bd5e766b
LC
1260
1261@item --system=@var{system}
1262Assume @var{system} as the current system type. By default it is the
1263architecture/kernel pair found at configure time, such as
1264@code{x86_64-linux}.
b8d2aa26 1265
1071f781
LC
1266@item --listen=@var{endpoint}
1267Listen for connections on @var{endpoint}. @var{endpoint} is interpreted
1268as the file name of a Unix-domain socket if it starts with
1269@code{/} (slash sign). Otherwise, @var{endpoint} is interpreted as a
1270host name or host name and port to listen to. Here are a few examples:
1271
1272@table @code
1273@item --listen=/gnu/var/daemon
1274Listen for connections on the @file{/gnu/var/daemon} Unix-domain socket,
1275creating it if needed.
1276
1277@item --listen=localhost
1278@cindex daemon, remote access
1279@cindex remote access to the daemon
1280@cindex daemon, cluster setup
1281@cindex clusters, daemon setup
1282Listen for TCP connections on the network interface corresponding to
1283@code{localhost}, on port 44146.
1284
1285@item --listen=128.0.0.42:1234
1286Listen for TCP connections on the network interface corresponding to
1287@code{128.0.0.42}, on port 1234.
1288@end table
1289
1290This option can be repeated multiple times, in which case
1291@command{guix-daemon} accepts connections on all the specified
1292endpoints. Users can tell client commands what endpoint to connect to
1293by setting the @code{GUIX_DAEMON_SOCKET} environment variable
1294(@pxref{The Store, @code{GUIX_DAEMON_SOCKET}}).
1295
1296@quotation Note
1297The daemon protocol is @emph{unauthenticated and unencrypted}. Using
1298@code{--listen=@var{host}} is suitable on local networks, such as
1299clusters, where only trusted nodes may connect to the build daemon. In
1300other cases where remote access to the daemon is needed, we recommend
1301using Unix-domain sockets along with SSH.
1302@end quotation
1303
1304When @code{--listen} is omitted, @command{guix-daemon} listens for
1305connections on the Unix-domain socket located at
1306@file{@var{localstatedir}/daemon-socket/socket}.
bd5e766b
LC
1307@end table
1308
1309
0e2d0213
LC
1310@node Application Setup
1311@section Application Setup
1312
d23ef788 1313@cindex foreign distro
85e57214
LC
1314When using Guix on top of GNU/Linux distribution other than GuixSD---a
1315so-called @dfn{foreign distro}---a few additional steps are needed to
1316get everything in place. Here are some of them.
0e2d0213
LC
1317
1318@subsection Locales
1319
5c3c1427 1320@anchor{locales-and-locpath}
0e2d0213 1321@cindex locales, when not on GuixSD
5c3c1427 1322@vindex LOCPATH
85e57214 1323@vindex GUIX_LOCPATH
f97c9175
AE
1324Packages installed @i{via} Guix will not use the locale data of the
1325host system. Instead, you must first install one of the locale packages
85e57214
LC
1326available with Guix and then define the @code{GUIX_LOCPATH} environment
1327variable:
0e2d0213
LC
1328
1329@example
1330$ guix package -i glibc-locales
85e57214 1331$ export GUIX_LOCPATH=$HOME/.guix-profile/lib/locale
0e2d0213
LC
1332@end example
1333
1334Note that the @code{glibc-locales} package contains data for all the
1335locales supported by the GNU@tie{}libc and weighs in at around
f97c9175 1336110@tie{}MiB. Alternatively, the @code{glibc-utf8-locales} is smaller but
0e2d0213
LC
1337limited to a few UTF-8 locales.
1338
85e57214
LC
1339The @code{GUIX_LOCPATH} variable plays a role similar to @code{LOCPATH}
1340(@pxref{Locale Names, @code{LOCPATH},, libc, The GNU C Library Reference
1341Manual}). There are two important differences though:
1342
1343@enumerate
1344@item
f97c9175 1345@code{GUIX_LOCPATH} is honored only by the libc in Guix, and not by the libc
85e57214 1346provided by foreign distros. Thus, using @code{GUIX_LOCPATH} allows you
f97c9175 1347to make sure the programs of the foreign distro will not end up loading
85e57214
LC
1348incompatible locale data.
1349
1350@item
1351libc suffixes each entry of @code{GUIX_LOCPATH} with @code{/X.Y}, where
1352@code{X.Y} is the libc version---e.g., @code{2.22}. This means that,
1353should your Guix profile contain a mixture of programs linked against
1354different libc version, each libc version will only try to load locale
1355data in the right format.
1356@end enumerate
1357
1358This is important because the locale data format used by different libc
1359versions may be incompatible.
1360
9a5187b6
LC
1361@subsection Name Service Switch
1362
1363@cindex name service switch, glibc
1364@cindex NSS (name service switch), glibc
1365@cindex nscd (name service caching daemon)
1366@cindex name service caching daemon (nscd)
1367When using Guix on a foreign distro, we @emph{strongly recommend} that
1368the system run the GNU C library's @dfn{name service cache daemon},
1369@command{nscd}, which should be listening on the
1370@file{/var/run/nscd/socket} socket. Failing to do that, applications
1371installed with Guix may fail to look up host names or user accounts, or
1372may even crash. The next paragraphs explain why.
1373
1374@cindex @file{nsswitch.conf}
1375The GNU C library implements a @dfn{name service switch} (NSS), which is
1376an extensible mechanism for ``name lookups'' in general: host name
1377resolution, user accounts, and more (@pxref{Name Service Switch,,, libc,
1378The GNU C Library Reference Manual}).
1379
1380@cindex Network information service (NIS)
1381@cindex NIS (Network information service)
1382Being extensible, the NSS supports @dfn{plugins}, which provide new name
1383lookup implementations: for example, the @code{nss-mdns} plugin allow
1384resolution of @code{.local} host names, the @code{nis} plugin allows
1385user account lookup using the Network information service (NIS), and so
1386on. These extra ``lookup services'' are configured system-wide in
1387@file{/etc/nsswitch.conf}, and all the programs running on the system
1388honor those settings (@pxref{NSS Configuration File,,, libc, The GNU C
1389Reference Manual}).
1390
1391When they perform a name lookup---for instance by calling the
1392@code{getaddrinfo} function in C---applications first try to connect to
1393the nscd; on success, nscd performs name lookups on their behalf. If
1394the nscd is not running, then they perform the name lookup by
1395themselves, by loading the name lookup services into their own address
1396space and running it. These name lookup services---the
1397@file{libnss_*.so} files---are @code{dlopen}'d, but they may come from
1398the host system's C library, rather than from the C library the
1399application is linked against (the C library coming from Guix).
1400
1401And this is where the problem is: if your application is linked against
1402Guix's C library (say, glibc 2.24) and tries to load NSS plugins from
1403another C library (say, @code{libnss_mdns.so} for glibc 2.22), it will
1404likely crash or have its name lookups fail unexpectedly.
1405
1406Running @command{nscd} on the system, among other advantages, eliminates
1407this binary incompatibility problem because those @code{libnss_*.so}
1408files are loaded in the @command{nscd} process, not in applications
1409themselves.
1410
0e2d0213
LC
1411@subsection X11 Fonts
1412
e32171ee 1413@cindex fonts
4988dd40 1414The majority of graphical applications use Fontconfig to locate and
f97c9175
AE
1415load fonts and perform X11-client-side rendering. The @code{fontconfig}
1416package in Guix looks for fonts in @file{$HOME/.guix-profile}
0e2d0213 1417by default. Thus, to allow graphical applications installed with Guix
f97c9175 1418to display fonts, you have to install fonts with Guix as well.
0e2d0213 1419Essential font packages include @code{gs-fonts}, @code{font-dejavu}, and
8fe5b1d1 1420@code{font-gnu-freefont-ttf}.
0e2d0213 1421
5c36edc8
LC
1422To display text written in Chinese languages, Japanese, or Korean in
1423graphical applications, consider installing
1424@code{font-adobe-source-han-sans} or @code{font-wqy-zenhei}. The former
1425has multiple outputs, one per language family (@pxref{Packages with
1426Multiple Outputs}). For instance, the following command installs fonts
1427for Chinese languages:
1428
1429@example
1430guix package -i font-adobe-source-han-sans:cn
1431@end example
1432
e32171ee 1433@cindex @code{xterm}
1a3e6b15
AK
1434Older programs such as @command{xterm} do not use Fontconfig and instead
1435rely on server-side font rendering. Such programs require to specify a
1436full name of a font using XLFD (X Logical Font Description), like this:
1437
1438@example
1439-*-dejavu sans-medium-r-normal-*-*-100-*-*-*-*-*-1
1440@end example
1441
1442To be able to use such full names for the TrueType fonts installed in
1443your Guix profile, you need to extend the font path of the X server:
1444
1445@example
1446xset +fp ~/.guix-profile/share/fonts/truetype
1447@end example
1448
e32171ee 1449@cindex @code{xlsfonts}
1a3e6b15
AK
1450After that, you can run @code{xlsfonts} (from @code{xlsfonts} package)
1451to make sure your TrueType fonts are listed there.
1452
e5942cbf
RW
1453@cindex @code{fc-cache}
1454@cindex font cache
1455After installing fonts you may have to refresh the font cache to use
1456them in applications. The same applies when applications installed via
1457Guix do not seem to find fonts. To force rebuilding of the font cache
1458run @code{fc-cache -f}. The @code{fc-cache} command is provided by the
1459@code{fontconfig} package.
1460
b3129f2b
LC
1461@subsection X.509 Certificates
1462
e32171ee 1463@cindex @code{nss-certs}
b3129f2b
LC
1464The @code{nss-certs} package provides X.509 certificates, which allow
1465programs to authenticate Web servers accessed over HTTPS.
1466
1467When using Guix on a foreign distro, you can install this package and
1468define the relevant environment variables so that packages know where to
80d944b7 1469look for certificates. @xref{X.509 Certificates}, for detailed
b3129f2b
LC
1470information.
1471
6d97319c
AK
1472@subsection Emacs Packages
1473
e32171ee 1474@cindex @code{emacs}
6d97319c
AK
1475When you install Emacs packages with Guix, the elisp files may be placed
1476either in @file{$HOME/.guix-profile/share/emacs/site-lisp/} or in
1477sub-directories of
1478@file{$HOME/.guix-profile/share/emacs/site-lisp/guix.d/}. The latter
1479directory exists because potentially there may exist thousands of Emacs
1480packages and storing all their files in a single directory may be not
1481reliable (because of name conflicts). So we think using a separate
1482directory for each package is a good idea. It is very similar to how
1483the Emacs package system organizes the file structure (@pxref{Package
1484Files,,, emacs, The GNU Emacs Manual}).
1485
1486By default, Emacs (installed with Guix) ``knows'' where these packages
f97c9175 1487are placed, so you do not need to perform any configuration. If, for
6d97319c 1488some reason, you want to avoid auto-loading Emacs packages installed
f97c9175 1489with Guix, you can do so by running Emacs with @code{--no-site-file}
6d97319c
AK
1490option (@pxref{Init File,,, emacs, The GNU Emacs Manual}).
1491
2f0c4b82
RW
1492@subsection The GCC toolchain
1493
1494@cindex GCC
1495@cindex ld-wrapper
1496
1497Guix offers individual compiler packages such as @code{gcc} but if you
1498are in need of a complete toolchain for compiling and linking source
1499code what you really want is the @code{gcc-toolchain} package. This
1500package provides a complete GCC toolchain for C/C++ development,
1501including GCC itself, the GNU C Library (headers and binaries, plus
1502debugging symbols in the @code{debug} output), Binutils, and a linker
1503wrapper.
1504
1505@cindex attempt to use impure library, error message
1506
1507The wrapper's purpose is to inspect the @code{-L} and @code{-l} switches
1508passed to the linker, add corresponding @code{-rpath} arguments, and
1509invoke the actual linker with this new set of arguments. By default,
1510the linker wrapper refuses to link to libraries outside the store to
1511ensure ``purity''. This can be annoying when using the toolchain to
1512link with local libraries. To allow references to libraries outside the
1513store you need to define the environment variable
1514@code{GUIX_LD_WRAPPER_ALLOW_IMPURITIES}.
1515
0e2d0213
LC
1516@c TODO What else?
1517
eeaf4427
LC
1518@c *********************************************************************
1519@node Package Management
1520@chapter Package Management
1521
e32171ee 1522@cindex packages
f8348b91 1523The purpose of GNU Guix is to allow users to easily install, upgrade, and
eeaf4427 1524remove software packages, without having to know about their build
f97c9175 1525procedures or dependencies. Guix also goes beyond this obvious set of
eeaf4427
LC
1526features.
1527
8ca0c88a
AK
1528This chapter describes the main features of Guix, as well as the
1529package management tools it provides. Along with the command-line
1530interface described below (@pxref{Invoking guix package, @code{guix
1531package}}), you may also use Emacs Interface (@pxref{Top,,,
1532emacs-guix, The Emacs-Guix Reference Manual}), after installing
1533@code{emacs-guix} package (run @kbd{M-x guix-help} command to start
1534with it):
deb6276d
AK
1535
1536@example
1537guix package -i emacs-guix
1538@end example
eeaf4427
LC
1539
1540@menu
1541* Features:: How Guix will make your life brighter.
e49951eb 1542* Invoking guix package:: Package installation, removal, etc.
c4202d60 1543* Substitutes:: Downloading pre-built binaries.
760c60d6 1544* Packages with Multiple Outputs:: Single source package, multiple outputs.
e49951eb 1545* Invoking guix gc:: Running the garbage collector.
f651b477 1546* Invoking guix pull:: Fetching the latest Guix and distribution.
239c2266 1547* Invoking guix pack:: Creating software bundles.
760c60d6 1548* Invoking guix archive:: Exporting and importing store files.
eeaf4427
LC
1549@end menu
1550
1551@node Features
1552@section Features
1553
1554When using Guix, each package ends up in the @dfn{package store}, in its
1555own directory---something that resembles
deb6276d 1556@file{/gnu/store/xxx-package-1.2}, where @code{xxx} is a base32 string.
eeaf4427
LC
1557
1558Instead of referring to these directories, users have their own
1559@dfn{profile}, which points to the packages that they actually want to
821b0015
LC
1560use. These profiles are stored within each user's home directory, at
1561@code{$HOME/.guix-profile}.
eeaf4427 1562
821b0015 1563For example, @code{alice} installs GCC 4.7.2. As a result,
eeaf4427 1564@file{/home/alice/.guix-profile/bin/gcc} points to
834129e0 1565@file{/gnu/store/@dots{}-gcc-4.7.2/bin/gcc}. Now, on the same machine,
821b0015
LC
1566@code{bob} had already installed GCC 4.8.0. The profile of @code{bob}
1567simply continues to point to
834129e0 1568@file{/gnu/store/@dots{}-gcc-4.8.0/bin/gcc}---i.e., both versions of GCC
821b0015 1569coexist on the same system without any interference.
eeaf4427 1570
e49951eb 1571The @command{guix package} command is the central tool to manage
f97c9175 1572packages (@pxref{Invoking guix package}). It operates on the per-user
821b0015 1573profiles, and can be used @emph{with normal user privileges}.
eeaf4427 1574
e32171ee 1575@cindex transactions
eeaf4427
LC
1576The command provides the obvious install, remove, and upgrade
1577operations. Each invocation is actually a @emph{transaction}: either
ba55b1cb 1578the specified operation succeeds, or nothing happens. Thus, if the
e49951eb 1579@command{guix package} process is terminated during the transaction,
eeaf4427
LC
1580or if a power outage occurs during the transaction, then the user's
1581profile remains in its previous state, and remains usable.
1582
1583In addition, any package transaction may be @emph{rolled back}. So, if,
1584for example, an upgrade installs a new version of a package that turns
1585out to have a serious bug, users may roll back to the previous instance
4af2447e 1586of their profile, which was known to work well. Similarly, the global
6f773606
LC
1587system configuration on GuixSD is subject to
1588transactional upgrades and roll-back
4af2447e 1589(@pxref{Using the Configuration System}).
eeaf4427 1590
f97c9175
AE
1591All packages in the package store may be @emph{garbage-collected}.
1592Guix can determine which packages are still referenced by user
fe8ff028 1593profiles, and remove those that are provably no longer referenced
e49951eb 1594(@pxref{Invoking guix gc}). Users may also explicitly remove old
fe8ff028
LC
1595generations of their profile so that the packages they refer to can be
1596collected.
eeaf4427 1597
e900c503
LC
1598@cindex reproducibility
1599@cindex reproducible builds
eeaf4427
LC
1600Finally, Guix takes a @dfn{purely functional} approach to package
1601management, as described in the introduction (@pxref{Introduction}).
834129e0 1602Each @file{/gnu/store} package directory name contains a hash of all the
eeaf4427
LC
1603inputs that were used to build that package---compiler, libraries, build
1604scripts, etc. This direct correspondence allows users to make sure a
1605given package installation matches the current state of their
e900c503
LC
1606distribution. It also helps maximize @dfn{build reproducibility}:
1607thanks to the isolated build environments that are used, a given build
1608is likely to yield bit-identical files when performed on different
1609machines (@pxref{Invoking guix-daemon, container}).
eeaf4427 1610
c4202d60 1611@cindex substitutes
eeaf4427 1612This foundation allows Guix to support @dfn{transparent binary/source
c4202d60 1613deployment}. When a pre-built binary for a @file{/gnu/store} item is
18f2887b 1614available from an external source---a @dfn{substitute}, Guix just
c4202d60
LC
1615downloads it and unpacks it;
1616otherwise, it builds the package from source, locally
bf9eacd2
LC
1617(@pxref{Substitutes}). Because build results are usually bit-for-bit
1618reproducible, users do not have to trust servers that provide
1619substitutes: they can force a local build and @emph{challenge} providers
1620(@pxref{Invoking guix challenge}).
eeaf4427 1621
f5fd4fd2
LC
1622Control over the build environment is a feature that is also useful for
1623developers. The @command{guix environment} command allows developers of
1624a package to quickly set up the right development environment for their
f97c9175
AE
1625package, without having to manually install the dependencies of the
1626package into their profile (@pxref{Invoking guix environment}).
f5fd4fd2 1627
e49951eb
MW
1628@node Invoking guix package
1629@section Invoking @command{guix package}
eeaf4427 1630
e32171ee
JD
1631@cindex installing packages
1632@cindex removing packages
1633@cindex package installation
1634@cindex package removal
e49951eb 1635The @command{guix package} command is the tool that allows users to
eeaf4427
LC
1636install, upgrade, and remove packages, as well as rolling back to
1637previous configurations. It operates only on the user's own profile,
1638and works with normal user privileges (@pxref{Features}). Its syntax
1639is:
1640
1641@example
e49951eb 1642guix package @var{options}
eeaf4427 1643@end example
e32171ee 1644@cindex transactions
ba55b1cb 1645Primarily, @var{options} specifies the operations to be performed during
eeaf4427 1646the transaction. Upon completion, a new profile is created, but
99bd74d5 1647previous @dfn{generations} of the profile remain available, should the user
eeaf4427
LC
1648want to roll back.
1649
6447738c
MW
1650For example, to remove @code{lua} and install @code{guile} and
1651@code{guile-cairo} in a single transaction:
1652
1653@example
1654guix package -r lua -i guile guile-cairo
1655@end example
1656
99bd74d5
LC
1657@command{guix package} also supports a @dfn{declarative approach}
1658whereby the user specifies the exact set of packages to be available and
1659passes it @i{via} the @option{--manifest} option
1660(@pxref{profile-manifest, @option{--manifest}}).
1661
e32171ee 1662@cindex profile
b9e5c0a9 1663For each user, a symlink to the user's default profile is automatically
0ec1af59 1664created in @file{$HOME/.guix-profile}. This symlink always points to the
b9e5c0a9
LC
1665current generation of the user's default profile. Thus, users can add
1666@file{$HOME/.guix-profile/bin} to their @code{PATH} environment
1667variable, and so on.
d664f1b4
LC
1668@cindex search paths
1669If you are not using the Guix System Distribution, consider adding the
1670following lines to your @file{~/.bash_profile} (@pxref{Bash Startup
1671Files,,, bash, The GNU Bash Reference Manual}) so that newly-spawned
1672shells get all the right environment variable definitions:
1673
1674@example
1675GUIX_PROFILE="$HOME/.guix-profile" \
1676source "$HOME/.guix-profile/etc/profile"
1677@end example
b9e5c0a9 1678
4379c35b
LC
1679In a multi-user setup, user profiles are stored in a place registered as
1680a @dfn{garbage-collector root}, which @file{$HOME/.guix-profile} points
1681to (@pxref{Invoking guix gc}). That directory is normally
0ec1af59
LC
1682@code{@var{localstatedir}/profiles/per-user/@var{user}}, where
1683@var{localstatedir} is the value passed to @code{configure} as
4379c35b
LC
1684@code{--localstatedir}, and @var{user} is the user name. The
1685@file{per-user} directory is created when @command{guix-daemon} is
1686started, and the @var{user} sub-directory is created by @command{guix
1687package}.
0ec1af59
LC
1688
1689The @var{options} can be among the following:
1690
eeaf4427
LC
1691@table @code
1692
6447738c
MW
1693@item --install=@var{package} @dots{}
1694@itemx -i @var{package} @dots{}
1695Install the specified @var{package}s.
eeaf4427 1696
6447738c 1697Each @var{package} may specify either a simple package name, such as
1b846da8
ML
1698@code{guile}, or a package name followed by an at-sign and version number,
1699such as @code{guile@@1.8.8} or simply @code{guile@@1.8} (in the latter
724311a2
LC
1700case, the newest version prefixed by @code{1.8} is selected.)
1701
1702If no version number is specified, the
dc5669cd
MW
1703newest available version will be selected. In addition, @var{package}
1704may contain a colon, followed by the name of one of the outputs of the
1b846da8 1705package, as in @code{gcc:doc} or @code{binutils@@2.22:lib}
e7f34eb0
LC
1706(@pxref{Packages with Multiple Outputs}). Packages with a corresponding
1707name (and optionally version) are searched for among the GNU
1708distribution modules (@pxref{Package Modules}).
eeaf4427 1709
461572cc
LC
1710@cindex propagated inputs
1711Sometimes packages have @dfn{propagated inputs}: these are dependencies
21461f27
LC
1712that automatically get installed along with the required package
1713(@pxref{package-propagated-inputs, @code{propagated-inputs} in
1714@code{package} objects}, for information about propagated inputs in
1715package definitions).
461572cc 1716
21461f27 1717@anchor{package-cmd-propagated-inputs}
461572cc
LC
1718An example is the GNU MPC library: its C header files refer to those of
1719the GNU MPFR library, which in turn refer to those of the GMP library.
1720Thus, when installing MPC, the MPFR and GMP libraries also get installed
1721in the profile; removing MPC also removes MPFR and GMP---unless they had
f97c9175 1722also been explicitly installed by the user.
461572cc 1723
ba7ea5ce 1724Besides, packages sometimes rely on the definition of environment
5924080d 1725variables for their search paths (see explanation of
ba7ea5ce 1726@code{--search-paths} below). Any missing or possibly incorrect
5924080d
LC
1727environment variable definitions are reported here.
1728
5d4b411f
LC
1729@item --install-from-expression=@var{exp}
1730@itemx -e @var{exp}
1731Install the package @var{exp} evaluates to.
1732
1733@var{exp} must be a Scheme expression that evaluates to a
1734@code{<package>} object. This option is notably useful to disambiguate
1735between same-named variants of a package, with expressions such as
1736@code{(@@ (gnu packages base) guile-final)}.
1737
1738Note that this option installs the first output of the specified
1739package, which may be insufficient when needing a specific output of a
1740multiple-output package.
1741
0d279400
DT
1742@item --install-from-file=@var{file}
1743@itemx -f @var{file}
1744Install the package that the code within @var{file} evaluates to.
1745
1746As an example, @var{file} might contain a definition like this
1747(@pxref{Defining Packages}):
1748
1749@example
1750@verbatiminclude package-hello.scm
1751@end example
1752
baacf042 1753Developers may find it useful to include such a @file{guix.scm} file
f97c9175 1754in the root of their project source tree that can be used to test
0d279400
DT
1755development snapshots and create reproducible development environments
1756(@pxref{Invoking guix environment}).
1757
6447738c
MW
1758@item --remove=@var{package} @dots{}
1759@itemx -r @var{package} @dots{}
1760Remove the specified @var{package}s.
eeaf4427 1761
6447738c 1762As for @code{--install}, each @var{package} may specify a version number
13ed095c
LC
1763and/or output name in addition to the package name. For instance,
1764@code{-r glibc:debug} would remove the @code{debug} output of
1765@code{glibc}.
1766
6447738c
MW
1767@item --upgrade[=@var{regexp} @dots{}]
1768@itemx -u [@var{regexp} @dots{}]
e32171ee 1769@cindex upgrading packages
6447738c
MW
1770Upgrade all the installed packages. If one or more @var{regexp}s are
1771specified, upgrade only installed packages whose name matches a
d5f01e48 1772@var{regexp}. Also see the @code{--do-not-upgrade} option below.
eeaf4427 1773
f651b477
LC
1774Note that this upgrades package to the latest version of packages found
1775in the distribution currently installed. To update your distribution,
1776you should regularly run @command{guix pull} (@pxref{Invoking guix
1777pull}).
1778
d5f01e48
MW
1779@item --do-not-upgrade[=@var{regexp} @dots{}]
1780When used together with the @code{--upgrade} option, do @emph{not}
1781upgrade any packages whose name matches a @var{regexp}. For example, to
1782upgrade all packages in the current profile except those containing the
1783substring ``emacs'':
1784
1785@example
1786$ guix package --upgrade . --do-not-upgrade emacs
1787@end example
1788
99bd74d5 1789@item @anchor{profile-manifest}--manifest=@var{file}
1b676447 1790@itemx -m @var{file}
99bd74d5
LC
1791@cindex profile declaration
1792@cindex profile manifest
1793Create a new generation of the profile from the manifest object
1b676447
DT
1794returned by the Scheme code in @var{file}.
1795
99bd74d5
LC
1796This allows you to @emph{declare} the profile's contents rather than
1797constructing it through a sequence of @code{--install} and similar
1798commands. The advantage is that @var{file} can be put under version
1799control, copied to different machines to reproduce the same profile, and
1800so on.
1801
1802@c FIXME: Add reference to (guix profile) documentation when available.
1803@var{file} must return a @dfn{manifest} object, which is roughly a list
1804of packages:
1b676447 1805
99bd74d5 1806@findex packages->manifest
1b676447 1807@example
99bd74d5 1808(use-package-modules guile emacs)
1b676447
DT
1809
1810(packages->manifest
99bd74d5
LC
1811 (list emacs
1812 guile-2.0
1b676447 1813 ;; Use a specific package output.
99bd74d5 1814 (list guile-2.0 "debug")))
1b676447
DT
1815@end example
1816
c08ea55e 1817@findex specifications->manifest
6cd10593
LC
1818In this example we have to know which modules define the @code{emacs}
1819and @code{guile-2.0} variables to provide the right
1820@code{use-package-modules} line, which can be cumbersome. We can
1821instead provide regular package specifications and let
c08ea55e 1822@code{specifications->manifest} look up the corresponding package
6cd10593
LC
1823objects, like this:
1824
1825@example
c08ea55e
LC
1826(specifications->manifest
1827 '("emacs" "guile@@2.2" "guile@@2.2:debug"))
6cd10593
LC
1828@end example
1829
24e262f0 1830@item --roll-back
e32171ee
JD
1831@cindex rolling back
1832@cindex undoing transactions
1833@cindex transactions, undoing
24e262f0
LC
1834Roll back to the previous @dfn{generation} of the profile---i.e., undo
1835the last transaction.
1836
1837When combined with options such as @code{--install}, roll back occurs
1838before any other actions.
1839
d9307267 1840When rolling back from the first generation that actually contains
4b2bc804 1841installed packages, the profile is made to point to the @dfn{zeroth
f97c9175 1842generation}, which contains no files apart from its own metadata.
d9307267 1843
f97c9175
AE
1844After having rolled back, installing, removing, or upgrading packages
1845overwrites previous future generations. Thus, the history of the
1846generations in a profile is always linear.
82fe08ed 1847
b3bb82f1
AK
1848@item --switch-generation=@var{pattern}
1849@itemx -S @var{pattern}
e32171ee 1850@cindex generations
b3bb82f1
AK
1851Switch to a particular generation defined by @var{pattern}.
1852
1853@var{pattern} may be either a generation number or a number prefixed
1854with ``+'' or ``-''. The latter means: move forward/backward by a
1855specified number of generations. For example, if you want to return to
1856the latest generation after @code{--roll-back}, use
1857@code{--switch-generation=+1}.
1858
1859The difference between @code{--roll-back} and
1860@code{--switch-generation=-1} is that @code{--switch-generation} will
1861not make a zeroth generation, so if a specified generation does not
1862exist, the current generation will not be changed.
1863
dbc31ab2 1864@item --search-paths[=@var{kind}]
5924080d
LC
1865@cindex search paths
1866Report environment variable definitions, in Bash syntax, that may be
1867needed in order to use the set of installed packages. These environment
1868variables are used to specify @dfn{search paths} for files used by some
1869of the installed packages.
1870
1871For example, GCC needs the @code{CPATH} and @code{LIBRARY_PATH}
1872environment variables to be defined so it can look for headers and
1873libraries in the user's profile (@pxref{Environment Variables,,, gcc,
1874Using the GNU Compiler Collection (GCC)}). If GCC and, say, the C
1875library are installed in the profile, then @code{--search-paths} will
1876suggest setting these variables to @code{@var{profile}/include} and
1877@code{@var{profile}/lib}, respectively.
1878
dbc31ab2
LC
1879The typical use case is to define these environment variables in the
1880shell:
1881
1882@example
1883$ eval `guix package --search-paths`
1884@end example
1885
1886@var{kind} may be one of @code{exact}, @code{prefix}, or @code{suffix},
1887meaning that the returned environment variable definitions will either
1888be exact settings, or prefixes or suffixes of the current value of these
1889variables. When omitted, @var{kind} defaults to @code{exact}.
1890
fc2d2339
LC
1891This option can also be used to compute the @emph{combined} search paths
1892of several profiles. Consider this example:
1893
1894@example
1895$ guix package -p foo -i guile
1896$ guix package -p bar -i guile-json
1897$ guix package -p foo -p bar --search-paths
1898@end example
1899
1900The last command above reports about the @code{GUILE_LOAD_PATH}
1901variable, even though, taken individually, neither @file{foo} nor
1902@file{bar} would lead to that recommendation.
1903
1904
eeaf4427
LC
1905@item --profile=@var{profile}
1906@itemx -p @var{profile}
1907Use @var{profile} instead of the user's default profile.
1908
70915c1a 1909@item --verbose
f97c9175
AE
1910Produce verbose output. In particular, emit the build log of the
1911environment on the standard error port.
70915c1a 1912
eeaf4427
LC
1913@item --bootstrap
1914Use the bootstrap Guile to build the profile. This option is only
1915useful to distribution developers.
1916
1917@end table
1918
f97c9175 1919In addition to these actions, @command{guix package} supports the
733b4130
LC
1920following options to query the current state of a profile, or the
1921availability of packages:
eeaf4427 1922
733b4130
LC
1923@table @option
1924
acc08466
NK
1925@item --search=@var{regexp}
1926@itemx -s @var{regexp}
b110869d 1927@cindex searching for packages
5763ad92 1928List the available packages whose name, synopsis, or description matches
4e863eb3 1929@var{regexp}, sorted by relevance. Print all the metadata of matching packages in
299112d3
LC
1930@code{recutils} format (@pxref{Top, GNU recutils databases,, recutils,
1931GNU recutils manual}).
acc08466 1932
299112d3
LC
1933This allows specific fields to be extracted using the @command{recsel}
1934command, for instance:
1935
1936@example
4e863eb3
LC
1937$ guix package -s malloc | recsel -p name,version,relevance
1938name: jemalloc
1939version: 4.5.0
1940relevance: 6
1941
299112d3 1942name: glibc
4e863eb3
LC
1943version: 2.25
1944relevance: 1
299112d3
LC
1945
1946name: libgc
4e863eb3
LC
1947version: 7.6.0
1948relevance: 1
299112d3 1949@end example
acc08466 1950
a12d92f5
LC
1951Similarly, to show the name of all the packages available under the
1952terms of the GNU@tie{}LGPL version 3:
1953
1954@example
1955$ guix package -s "" | recsel -p name -e 'license ~ "LGPL 3"'
1956name: elfutils
1957
1958name: gmp
1959@dots{}
1960@end example
1961
db5a9444
LC
1962It is also possible to refine search results using several @code{-s}
1963flags. For example, the following command returns a list of board
1964games:
1965
1966@example
1967$ guix package -s '\<board\>' -s game | recsel -p name
1968name: gnubg
1969@dots{}
1970@end example
1971
1972If we were to omit @code{-s game}, we would also get software packages
1973that deal with printed circuit boards; removing the angle brackets
1974around @code{board} would further add packages that have to do with
1975keyboards.
1976
b110869d
LC
1977And now for a more elaborate example. The following command searches
1978for cryptographic libraries, filters out Haskell, Perl, Python, and Ruby
1979libraries, and prints the name and synopsis of the matching packages:
1980
1981@example
1982$ guix package -s crypto -s library | \
1983 recsel -e '! (name ~ "^(ghc|perl|python|ruby)")' -p name,synopsis
1984@end example
1985
1986@noindent
1987@xref{Selection Expressions,,, recutils, GNU recutils manual}, for more
1988information on @dfn{selection expressions} for @code{recsel -e}.
1989
2aa6efb0
CR
1990@item --show=@var{package}
1991Show details about @var{package}, taken from the list of available packages, in
1992@code{recutils} format (@pxref{Top, GNU recutils databases,, recutils, GNU
1993recutils manual}).
1994
1995@example
1996$ guix package --show=python | recsel -p name,version
1997name: python
1998version: 2.7.6
1999
2000name: python
2001version: 3.3.5
2002@end example
2003
2004You may also specify the full name of a package to only get details about a
2005specific version of it:
2006@example
ea206df4 2007$ guix package --show=python@@3.4 | recsel -p name,version
2aa6efb0 2008name: python
ea206df4 2009version: 3.4.3
2aa6efb0
CR
2010@end example
2011
2012
2013
733b4130
LC
2014@item --list-installed[=@var{regexp}]
2015@itemx -I [@var{regexp}]
bd9bde1c
LC
2016List the currently installed packages in the specified profile, with the
2017most recently installed packages shown last. When @var{regexp} is
2018specified, list only installed packages whose name matches @var{regexp}.
733b4130
LC
2019
2020For each installed package, print the following items, separated by
2021tabs: the package name, its version string, the part of the package that
2022is installed (for instance, @code{out} for the default output,
2023@code{include} for its headers, etc.), and the path of this package in
2024the store.
2025
64fc89b6
LC
2026@item --list-available[=@var{regexp}]
2027@itemx -A [@var{regexp}]
5763ad92 2028List packages currently available in the distribution for this system
a1ba8475
LC
2029(@pxref{GNU Distribution}). When @var{regexp} is specified, list only
2030installed packages whose name matches @var{regexp}.
64fc89b6
LC
2031
2032For each package, print the following items separated by tabs: its name,
6e721c4d
LC
2033its version string, the parts of the package (@pxref{Packages with
2034Multiple Outputs}), and the source location of its definition.
64fc89b6 2035
f566d765
LC
2036@item --list-generations[=@var{pattern}]
2037@itemx -l [@var{pattern}]
e32171ee 2038@cindex generations
f566d765
LC
2039Return a list of generations along with their creation dates; for each
2040generation, show the installed packages, with the most recently
4b2bc804
NK
2041installed packages shown last. Note that the zeroth generation is never
2042shown.
f566d765
LC
2043
2044For each installed package, print the following items, separated by
2045tabs: the name of a package, its version string, the part of the package
2046that is installed (@pxref{Packages with Multiple Outputs}), and the
2047location of this package in the store.
2048
2049When @var{pattern} is used, the command returns only matching
2050generations. Valid patterns include:
2051
2052@itemize
2053@item @emph{Integers and comma-separated integers}. Both patterns denote
2054generation numbers. For instance, @code{--list-generations=1} returns
2055the first one.
2056
2057And @code{--list-generations=1,8,2} outputs three generations in the
2058specified order. Neither spaces nor trailing commas are allowed.
2059
2060@item @emph{Ranges}. @code{--list-generations=2..9} prints the
2061specified generations and everything in between. Note that the start of
f97c9175 2062a range must be smaller than its end.
f566d765
LC
2063
2064It is also possible to omit the endpoint. For example,
2065@code{--list-generations=2..}, returns all generations starting from the
2066second one.
2067
2068@item @emph{Durations}. You can also get the last @emph{N}@tie{}days, weeks,
2069or months by passing an integer along with the first letter of the
d7ddb257
LC
2070duration. For example, @code{--list-generations=20d} lists generations
2071that are up to 20 days old.
f566d765
LC
2072@end itemize
2073
b7884ca3
NK
2074@item --delete-generations[=@var{pattern}]
2075@itemx -d [@var{pattern}]
d7ddb257
LC
2076When @var{pattern} is omitted, delete all generations except the current
2077one.
b7884ca3
NK
2078
2079This command accepts the same patterns as @option{--list-generations}.
d7ddb257
LC
2080When @var{pattern} is specified, delete the matching generations. When
2081@var{pattern} specifies a duration, generations @emph{older} than the
2082specified duration match. For instance, @code{--delete-generations=1m}
2083deletes generations that are more than one month old.
2084
391bdd8f
LC
2085If the current generation matches, it is @emph{not} deleted. Also, the
2086zeroth generation is never deleted.
b7884ca3 2087
f97c9175 2088Note that deleting generations prevents rolling back to them.
1bb9900a
LC
2089Consequently, this command must be used with care.
2090
733b4130 2091@end table
eeaf4427 2092
70ee5642 2093Finally, since @command{guix package} may actually start build
ccd7158d 2094processes, it supports all the common build options (@pxref{Common Build
f97c9175 2095Options}). It also supports package transformation options, such as
b8638f03
LC
2096@option{--with-source} (@pxref{Package Transformation Options}).
2097However, note that package transformations are lost when upgrading; to
f97c9175 2098preserve transformations across upgrades, you should define your own
b8638f03
LC
2099package variant in a Guile module and add it to @code{GUIX_PACKAGE_PATH}
2100(@pxref{Defining Packages}).
2101
70ee5642 2102
c4202d60
LC
2103@node Substitutes
2104@section Substitutes
2105
2106@cindex substitutes
2107@cindex pre-built binaries
2108Guix supports transparent source/binary deployment, which means that it
2109can either build things locally, or download pre-built items from a
2110server. We call these pre-built items @dfn{substitutes}---they are
2111substitutes for local build results. In many cases, downloading a
2112substitute is much faster than building things locally.
2113
2114Substitutes can be anything resulting from a derivation build
2115(@pxref{Derivations}). Of course, in the common case, they are
2116pre-built package binaries, but source tarballs, for instance, which
2117also result from derivation builds, can be available as substitutes.
2118
2119The @code{hydra.gnu.org} server is a front-end to a build farm that
2120builds packages from the GNU distribution continuously for some
deb6276d 2121architectures, and makes them available as substitutes. This is the
f8a8e0fe
LC
2122default source of substitutes; it can be overridden by passing the
2123@option{--substitute-urls} option either to @command{guix-daemon}
2124(@pxref{daemon-substitute-urls,, @code{guix-daemon --substitute-urls}})
2125or to client tools such as @command{guix package}
2126(@pxref{client-substitute-urls,, client @option{--substitute-urls}
2127option}).
c4202d60 2128
1dbe3a8d 2129Substitute URLs can be either HTTP or HTTPS.
9b7bd1b1
LC
2130HTTPS is recommended because communications are encrypted; conversely,
2131using HTTP makes all communications visible to an eavesdropper, who
2132could use the information gathered to determine, for instance, whether
2133your system has unpatched security vulnerabilities.
2134
c4202d60
LC
2135@cindex security
2136@cindex digital signatures
e32171ee 2137@cindex substitutes, authorization thereof
df061d07
LC
2138To allow Guix to download substitutes from @code{hydra.gnu.org} or a
2139mirror thereof, you
c4202d60
LC
2140must add its public key to the access control list (ACL) of archive
2141imports, using the @command{guix archive} command (@pxref{Invoking guix
2142archive}). Doing so implies that you trust @code{hydra.gnu.org} to not
2143be compromised and to serve genuine substitutes.
2144
2145This public key is installed along with Guix, in
2146@code{@var{prefix}/share/guix/hydra.gnu.org.pub}, where @var{prefix} is
2147the installation prefix of Guix. If you installed Guix from source,
2148make sure you checked the GPG signature of
2149@file{guix-@value{VERSION}.tar.gz}, which contains this public key file.
2150Then, you can run something like this:
2151
2152@example
2153# guix archive --authorize < hydra.gnu.org.pub
2154@end example
2155
2156Once this is in place, the output of a command like @code{guix build}
2157should change from something like:
2158
2159@example
2160$ guix build emacs --dry-run
2161The following derivations would be built:
2162 /gnu/store/yr7bnx8xwcayd6j95r2clmkdl1qh688w-emacs-24.3.drv
2163 /gnu/store/x8qsh1hlhgjx6cwsjyvybnfv2i37z23w-dbus-1.6.4.tar.gz.drv
2164 /gnu/store/1ixwp12fl950d15h2cj11c73733jay0z-alsa-lib-1.0.27.1.tar.bz2.drv
2165 /gnu/store/nlma1pw0p603fpfiqy7kn4zm105r5dmw-util-linux-2.21.drv
2166@dots{}
2167@end example
2168
2169@noindent
2170to something like:
2171
2172@example
2173$ guix build emacs --dry-run
2174The following files would be downloaded:
2175 /gnu/store/pk3n22lbq6ydamyymqkkz7i69wiwjiwi-emacs-24.3
2176 /gnu/store/2ygn4ncnhrpr61rssa6z0d9x22si0va3-libjpeg-8d
2177 /gnu/store/71yz6lgx4dazma9dwn2mcjxaah9w77jq-cairo-1.12.16
2178 /gnu/store/7zdhgp0n1518lvfn8mb96sxqfmvqrl7v-libxrender-0.9.7
2179@dots{}
2180@end example
2181
2182@noindent
2183This indicates that substitutes from @code{hydra.gnu.org} are usable and
2184will be downloaded, when possible, for future builds.
2185
2186Guix ignores substitutes that are not signed, or that are not signed by
ef27aa9c 2187one of the keys listed in the ACL. It also detects and raises an error
c4202d60
LC
2188when attempting to use a substitute that has been tampered with.
2189
e0c941fe 2190@vindex http_proxy
9b7bd1b1
LC
2191Substitutes are downloaded over HTTP or HTTPS.
2192The @code{http_proxy} environment
e0c941fe
LC
2193variable can be set in the environment of @command{guix-daemon} and is
2194honored for downloads of substitutes. Note that the value of
2195@code{http_proxy} in the environment where @command{guix build},
2196@command{guix package}, and other client commands are run has
2197@emph{absolutely no effect}.
2198
9b7bd1b1
LC
2199When using HTTPS, the server's X.509 certificate is @emph{not} validated
2200(in other words, the server is not authenticated), contrary to what
2201HTTPS clients such as Web browsers usually do. This is because Guix
2202authenticates substitute information itself, as explained above, which
2203is what we care about (whereas X.509 certificates are about
2204authenticating bindings between domain names and public keys.)
2205
585347d7
LC
2206You can get statistics on the substitutes provided by a server using the
2207@command{guix weather} command (@pxref{Invoking guix weather}).
2208
c4202d60
LC
2209The substitute mechanism can be disabled globally by running
2210@code{guix-daemon} with @code{--no-substitutes} (@pxref{Invoking
2211guix-daemon}). It can also be disabled temporarily by passing the
2212@code{--no-substitutes} option to @command{guix package}, @command{guix
2213build}, and other command-line tools.
2214
2215
9b7bd1b1
LC
2216@unnumberedsubsec On Trusting Binaries
2217
c4202d60
LC
2218Today, each individual's control over their own computing is at the
2219mercy of institutions, corporations, and groups with enough power and
2220determination to subvert the computing infrastructure and exploit its
2221weaknesses. While using @code{hydra.gnu.org} substitutes can be
2222convenient, we encourage users to also build on their own, or even run
2223their own build farm, such that @code{hydra.gnu.org} is less of an
8ce229fc
LC
2224interesting target. One way to help is by publishing the software you
2225build using @command{guix publish} so that others have one more choice
2226of server to download substitutes from (@pxref{Invoking guix publish}).
c4202d60
LC
2227
2228Guix has the foundations to maximize build reproducibility
2229(@pxref{Features}). In most cases, independent builds of a given
2230package or derivation should yield bit-identical results. Thus, through
2231a diverse set of independent package builds, we can strengthen the
d23c20f1
LC
2232integrity of our systems. The @command{guix challenge} command aims to
2233help users assess substitute servers, and to assist developers in
2234finding out about non-deterministic package builds (@pxref{Invoking guix
a8d65643
LC
2235challenge}). Similarly, the @option{--check} option of @command{guix
2236build} allows users to check whether previously-installed substitutes
2237are genuine by rebuilding them locally (@pxref{build-check,
2238@command{guix build --check}}).
c4202d60
LC
2239
2240In the future, we want Guix to have support to publish and retrieve
2241binaries to/from other users, in a peer-to-peer fashion. If you would
2242like to discuss this project, join us on @email{guix-devel@@gnu.org}.
2243
2244
6e721c4d
LC
2245@node Packages with Multiple Outputs
2246@section Packages with Multiple Outputs
2247
2248@cindex multiple-output packages
2249@cindex package outputs
e32171ee 2250@cindex outputs
6e721c4d
LC
2251
2252Often, packages defined in Guix have a single @dfn{output}---i.e., the
f97c9175 2253source package leads to exactly one directory in the store. When running
6e721c4d
LC
2254@command{guix package -i glibc}, one installs the default output of the
2255GNU libc package; the default output is called @code{out}, but its name
2256can be omitted as shown in this command. In this particular case, the
2257default output of @code{glibc} contains all the C header files, shared
2258libraries, static libraries, Info documentation, and other supporting
2259files.
2260
2261Sometimes it is more appropriate to separate the various types of files
2262produced from a single source package into separate outputs. For
2263instance, the GLib C library (used by GTK+ and related packages)
2264installs more than 20 MiB of reference documentation as HTML pages.
2265To save space for users who do not need it, the documentation goes to a
2266separate output, called @code{doc}. To install the main GLib output,
2267which contains everything but the documentation, one would run:
2268
2269@example
2270guix package -i glib
2271@end example
2272
e32171ee 2273@cindex documentation
6e721c4d
LC
2274The command to install its documentation is:
2275
2276@example
2277guix package -i glib:doc
2278@end example
2279
2280Some packages install programs with different ``dependency footprints''.
f97c9175 2281For instance, the WordNet package installs both command-line tools and
6e721c4d
LC
2282graphical user interfaces (GUIs). The former depend solely on the C
2283library, whereas the latter depend on Tcl/Tk and the underlying X
2284libraries. In this case, we leave the command-line tools in the default
2285output, whereas the GUIs are in a separate output. This allows users
fcc58db6
LC
2286who do not need the GUIs to save space. The @command{guix size} command
2287can help find out about such situations (@pxref{Invoking guix size}).
88856916 2288@command{guix graph} can also be helpful (@pxref{Invoking guix graph}).
6e721c4d
LC
2289
2290There are several such multiple-output packages in the GNU distribution.
91ef73d4
LC
2291Other conventional output names include @code{lib} for libraries and
2292possibly header files, @code{bin} for stand-alone programs, and
2293@code{debug} for debugging information (@pxref{Installing Debugging
2294Files}). The outputs of a packages are listed in the third column of
2295the output of @command{guix package --list-available} (@pxref{Invoking
2296guix package}).
6e721c4d 2297
eeaf4427 2298
e49951eb
MW
2299@node Invoking guix gc
2300@section Invoking @command{guix gc}
fe8ff028
LC
2301
2302@cindex garbage collector
e32171ee 2303@cindex disk space
f97c9175 2304Packages that are installed, but not used, may be @dfn{garbage-collected}.
e49951eb 2305The @command{guix gc} command allows users to explicitly run the garbage
c22eb992
LC
2306collector to reclaim space from the @file{/gnu/store} directory. It is
2307the @emph{only} way to remove files from @file{/gnu/store}---removing
2308files or directories manually may break it beyond repair!
fe8ff028
LC
2309
2310The garbage collector has a set of known @dfn{roots}: any file under
834129e0 2311@file{/gnu/store} reachable from a root is considered @dfn{live} and
fe8ff028
LC
2312cannot be deleted; any other file is considered @dfn{dead} and may be
2313deleted. The set of garbage collector roots includes default user
e49951eb
MW
2314profiles, and may be augmented with @command{guix build --root}, for
2315example (@pxref{Invoking guix build}).
fe8ff028 2316
1bb9900a
LC
2317Prior to running @code{guix gc --collect-garbage} to make space, it is
2318often useful to remove old generations from user profiles; that way, old
2319package builds referenced by those generations can be reclaimed. This
2320is achieved by running @code{guix package --delete-generations}
2321(@pxref{Invoking guix package}).
2322
457103b9
LC
2323Our recommendation is to run a garbage collection periodically, or when
2324you are short on disk space. For instance, to guarantee that at least
23255@tie{}GB are available on your disk, simply run:
2326
2327@example
2328guix gc -F 5G
2329@end example
2330
2331It is perfectly safe to run as a non-interactive periodic job
2332(@pxref{Scheduled Job Execution}, for how to set up such a job on
2333GuixSD). Running @command{guix gc} with no arguments will collect as
2334much garbage as it can, but that is often inconvenient: you may find
2335yourself having to rebuild or re-download software that is ``dead'' from
2336the GC viewpoint but that is necessary to build other pieces of
2337software---e.g., the compiler tool chain.
2338
e49951eb 2339The @command{guix gc} command has three modes of operation: it can be
fe8ff028 2340used to garbage-collect any dead files (the default), to delete specific
7770aafc
LC
2341files (the @code{--delete} option), to print garbage-collector
2342information, or for more advanced queries. The garbage collection
2343options are as follows:
fe8ff028
LC
2344
2345@table @code
2346@item --collect-garbage[=@var{min}]
2347@itemx -C [@var{min}]
834129e0 2348Collect garbage---i.e., unreachable @file{/gnu/store} files and
fe8ff028
LC
2349sub-directories. This is the default operation when no option is
2350specified.
2351
2352When @var{min} is given, stop once @var{min} bytes have been collected.
2353@var{min} may be a number of bytes, or it may include a unit as a
4a44d7bb
LC
2354suffix, such as @code{MiB} for mebibytes and @code{GB} for gigabytes
2355(@pxref{Block size, size specifications,, coreutils, GNU Coreutils}).
fe8ff028
LC
2356
2357When @var{min} is omitted, collect all the garbage.
2358
0054e470
LC
2359@item --free-space=@var{free}
2360@itemx -F @var{free}
2361Collect garbage until @var{free} space is available under
2362@file{/gnu/store}, if possible; @var{free} denotes storage space, such
2363as @code{500MiB}, as described above.
2364
2365When @var{free} or more is already available in @file{/gnu/store}, do
2366nothing and exit immediately.
2367
fe8ff028
LC
2368@item --delete
2369@itemx -d
2370Attempt to delete all the store files and directories specified as
2371arguments. This fails if some of the files are not in the store, or if
2372they are still live.
2373
30d9aa54
LC
2374@item --list-failures
2375List store items corresponding to cached build failures.
2376
2377This prints nothing unless the daemon was started with
2378@option{--cache-failures} (@pxref{Invoking guix-daemon,
2379@option{--cache-failures}}).
2380
2381@item --clear-failures
2382Remove the specified store items from the failed-build cache.
2383
2384Again, this option only makes sense when the daemon is started with
2385@option{--cache-failures}. Otherwise, it does nothing.
2386
fe8ff028
LC
2387@item --list-dead
2388Show the list of dead files and directories still present in the
2389store---i.e., files and directories no longer reachable from any root.
2390
2391@item --list-live
2392Show the list of live store files and directories.
ba8b732d
LC
2393
2394@end table
2395
2396In addition, the references among existing store files can be queried:
2397
2398@table @code
2399
2400@item --references
2401@itemx --referrers
e32171ee 2402@cindex package dependencies
ba8b732d
LC
2403List the references (respectively, the referrers) of store files given
2404as arguments.
2405
8e59fdd5
LC
2406@item --requisites
2407@itemx -R
fcc58db6 2408@cindex closure
8e59fdd5
LC
2409List the requisites of the store files passed as arguments. Requisites
2410include the store files themselves, their references, and the references
2411of these, recursively. In other words, the returned list is the
2412@dfn{transitive closure} of the store files.
2413
f97c9175
AE
2414@xref{Invoking guix size}, for a tool to profile the size of the closure
2415of an element. @xref{Invoking guix graph}, for a tool to visualize
88856916 2416the graph of references.
fcc58db6 2417
fe8ff028
LC
2418@end table
2419
7770aafc
LC
2420Lastly, the following options allow you to check the integrity of the
2421store and to control disk usage.
2422
2423@table @option
2424
2425@item --verify[=@var{options}]
2426@cindex integrity, of the store
2427@cindex integrity checking
2428Verify the integrity of the store.
2429
2430By default, make sure that all the store items marked as valid in the
f97c9175 2431database of the daemon actually exist in @file{/gnu/store}.
7770aafc 2432
f97c9175 2433When provided, @var{options} must be a comma-separated list containing one
7770aafc
LC
2434or more of @code{contents} and @code{repair}.
2435
7414de0a 2436When passing @option{--verify=contents}, the daemon computes the
f97c9175 2437content hash of each store item and compares it against its hash in the
7770aafc
LC
2438database. Hash mismatches are reported as data corruptions. Because it
2439traverses @emph{all the files in the store}, this command can take a
2440long time, especially on systems with a slow disk drive.
2441
2442@cindex repairing the store
6da5bb7b 2443@cindex corruption, recovering from
7770aafc
LC
2444Using @option{--verify=repair} or @option{--verify=contents,repair}
2445causes the daemon to try to repair corrupt store items by fetching
2446substitutes for them (@pxref{Substitutes}). Because repairing is not
2447atomic, and thus potentially dangerous, it is available only to the
6da5bb7b
LC
2448system administrator. A lightweight alternative, when you know exactly
2449which items in the store are corrupt, is @command{guix build --repair}
2450(@pxref{Invoking guix build}).
7770aafc
LC
2451
2452@item --optimize
2453@cindex deduplication
2454Optimize the store by hard-linking identical files---this is
2455@dfn{deduplication}.
2456
2457The daemon performs deduplication after each successful build or archive
2458import, unless it was started with @code{--disable-deduplication}
2459(@pxref{Invoking guix-daemon, @code{--disable-deduplication}}). Thus,
2460this option is primarily useful when the daemon was running with
2461@code{--disable-deduplication}.
2462
2463@end table
eeaf4427 2464
f651b477
LC
2465@node Invoking guix pull
2466@section Invoking @command{guix pull}
2467
e32171ee 2468@cindex upgrading Guix
7fcf2a0b 2469@cindex updating Guix
e32171ee
JD
2470@cindex @command{guix pull}
2471@cindex pull
f651b477
LC
2472Packages are installed or upgraded to the latest version available in
2473the distribution currently available on your local machine. To update
2474that distribution, along with the Guix tools, you must run @command{guix
2475pull}: the command downloads the latest Guix source code and package
2476descriptions, and deploys it.
2477
2478On completion, @command{guix package} will use packages and package
2479versions from this just-retrieved copy of Guix. Not only that, but all
2480the Guix commands and Scheme modules will also be taken from that latest
2481version. New @command{guix} sub-commands added by the update also
cb05108a
LC
2482become available.
2483
2484Any user can update their Guix copy using @command{guix pull}, and the
2485effect is limited to the user who run @command{guix pull}. For
2486instance, when user @code{root} runs @command{guix pull}, this has no
2487effect on the version of Guix that user @code{alice} sees, and vice
2488versa@footnote{Under the hood, @command{guix pull} updates the
2489@file{~/.config/guix/latest} symbolic link to point to the latest Guix,
5e2017ed
CM
2490and the @command{guix} command loads code from there. Currently, the
2491only way to roll back an invocation of @command{guix pull} is to
2492manually update this symlink to point to the previous Guix.}.
f651b477
LC
2493
2494The @command{guix pull} command is usually invoked with no arguments,
2495but it supports the following options:
2496
2497@table @code
2498@item --verbose
2499Produce verbose output, writing build logs to the standard error output.
2500
ab5d72ad
LC
2501@item --url=@var{url}
2502Download the source tarball of Guix from @var{url}.
2503
2504By default, the tarball is taken from its canonical address at
2505@code{gnu.org}, for the stable branch of Guix.
2506
8a9cffb2
LF
2507With some Git servers, this can be used to deploy any version of Guix.
2508For example, to download and deploy version 0.12.0 of Guix from the
2509canonical Git repo:
2510
2511@example
4902d3c4 2512guix pull --url=https://git.savannah.gnu.org/cgit/guix.git/snapshot/v0.12.0.tar.gz
8a9cffb2
LF
2513@end example
2514
2515It can also be used to deploy arbitrary Git revisions:
2516
2517@example
4902d3c4 2518guix pull --url=https://git.savannah.gnu.org/cgit/guix.git/snapshot/74d862e8a.tar.gz
8a9cffb2
LF
2519@end example
2520
f651b477
LC
2521@item --bootstrap
2522Use the bootstrap Guile to build the latest Guix. This option is only
2523useful to Guix developers.
2524@end table
2525
4902d3c4
LC
2526In addition, @command{guix pull} supports all the common build options
2527(@pxref{Common Build Options}).
760c60d6 2528
239c2266
LC
2529@node Invoking guix pack
2530@section Invoking @command{guix pack}
2531
2532Occasionally you want to pass software to people who are not (yet!)
2533lucky enough to be using Guix. You'd tell them to run @command{guix
2534package -i @var{something}}, but that's not possible in this case. This
2535is where @command{guix pack} comes in.
2536
2537@cindex pack
2538@cindex bundle
2539@cindex application bundle
2540@cindex software bundle
2541The @command{guix pack} command creates a shrink-wrapped @dfn{pack} or
2542@dfn{software bundle}: it creates a tarball or some other archive
2543containing the binaries of the software you're interested in, and all
2544its dependencies. The resulting archive can be used on any machine that
2545does not have Guix, and people can run the exact same binaries as those
107b8da6
LC
2546you have with Guix. The pack itself is created in a bit-reproducible
2547fashion, so anyone can verify that it really contains the build results
2548that you pretend to be shipping.
239c2266
LC
2549
2550For example, to create a bundle containing Guile, Emacs, Geiser, and all
2551their dependencies, you can run:
2552
2553@example
2554$ guix pack guile emacs geiser
2555@dots{}
2556/gnu/store/@dots{}-pack.tar.gz
2557@end example
2558
2559The result here is a tarball containing a @file{/gnu/store} directory
2560with all the relevant packages. The resulting tarball contains a
2561@dfn{profile} with the three packages of interest; the profile is the
2562same as would be created by @command{guix package -i}. It is this
2563mechanism that is used to create Guix's own standalone binary tarball
2564(@pxref{Binary Installation}).
2565
5895ec8a
LC
2566Users of this pack would have to run
2567@file{/gnu/store/@dots{}-profile/bin/guile} to run Guile, which you may
2568find inconvenient. To work around it, you can create, say, a
2569@file{/opt/gnu/bin} symlink to the profile:
2570
2571@example
2572guix pack -S /opt/gnu/bin=bin guile emacs geiser
2573@end example
2574
2575@noindent
2576That way, users can happily type @file{/opt/gnu/bin/guile} and enjoy.
2577
708b54a9
LC
2578Alternatively, you can produce a pack in the Docker image format using
2579the following command:
b1edfbc3
LC
2580
2581@example
2582guix pack -f docker guile emacs geiser
2583@end example
2584
2585@noindent
2586The result is a tarball that can be passed to the @command{docker load}
2587command. See the
2588@uref{https://docs.docker.com/engine/reference/commandline/load/, Docker
2589documentation} for more information.
2590
239c2266
LC
2591Several command-line options allow you to customize your pack:
2592
2593@table @code
708b54a9
LC
2594@item --format=@var{format}
2595@itemx -f @var{format}
2596Produce a pack in the given @var{format}.
2597
2598The available formats are:
2599
2600@table @code
2601@item tarball
2602This is the default format. It produces a tarball containing all the
2603specifies binaries and symlinks.
2604
2605@item docker
2606This produces a tarball that follows the
2607@uref{https://github.com/docker/docker/blob/master/image/spec/v1.2.md,
2608Docker Image Specification}.
2609@end table
2610
83cfa024
LC
2611@item --expression=@var{expr}
2612@itemx -e @var{expr}
2613Consider the package @var{expr} evaluates to.
2614
2615This has the same purpose as the same-named option in @command{guix
2616build} (@pxref{Additional Build Options, @code{--expression} in
2617@command{guix build}}).
2618
239c2266
LC
2619@item --system=@var{system}
2620@itemx -s @var{system}
2621Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of
2622the system type of the build host.
2623
5461115e
LC
2624@item --target=@var{triplet}
2625@cindex cross-compilation
2626Cross-build for @var{triplet}, which must be a valid GNU triplet, such
2627as @code{"mips64el-linux-gnu"} (@pxref{Specifying target triplets, GNU
2628configuration triplets,, autoconf, Autoconf}).
2629
239c2266
LC
2630@item --compression=@var{tool}
2631@itemx -C @var{tool}
2632Compress the resulting tarball using @var{tool}---one of @code{gzip},
2633@code{bzip2}, @code{xz}, or @code{lzip}.
6b63c43e 2634
5895ec8a
LC
2635@item --symlink=@var{spec}
2636@itemx -S @var{spec}
2637Add the symlinks specified by @var{spec} to the pack. This option can
2638appear several times.
2639
2640@var{spec} has the form @code{@var{source}=@var{target}}, where
2641@var{source} is the symlink that will be created and @var{target} is the
2642symlink target.
2643
2644For instance, @code{-S /opt/gnu/bin=bin} creates a @file{/opt/gnu/bin}
2645symlink pointing to the @file{bin} sub-directory of the profile.
2646
6b63c43e
LC
2647@item --localstatedir
2648Include the ``local state directory'', @file{/var/guix}, in the
2649resulting pack.
2650
2651@file{/var/guix} contains the store database (@pxref{The Store}) as well
2652as garbage-collector roots (@pxref{Invoking guix gc}). Providing it in
2653the pack means that the store is ``complete'' and manageable by Guix;
2654not providing it pack means that the store is ``dead'': items cannot be
2655added to it or removed from it after extraction of the pack.
2656
2657One use case for this is the Guix self-contained binary tarball
2658(@pxref{Binary Installation}).
239c2266
LC
2659@end table
2660
2661In addition, @command{guix pack} supports all the common build options
2662(@pxref{Common Build Options}) and all the package transformation
2663options (@pxref{Package Transformation Options}).
2664
2665
760c60d6
LC
2666@node Invoking guix archive
2667@section Invoking @command{guix archive}
2668
e32171ee
JD
2669@cindex @command{guix archive}
2670@cindex archive
760c60d6
LC
2671The @command{guix archive} command allows users to @dfn{export} files
2672from the store into a single archive, and to later @dfn{import} them.
2673In particular, it allows store files to be transferred from one machine
4d4c4816
AE
2674to the store on another machine.
2675
e32171ee 2676@cindex exporting store items
4d4c4816
AE
2677To export store files as an archive to standard output, run:
2678
2679@example
2680guix archive --export @var{options} @var{specifications}...
2681@end example
2682
2683@var{specifications} may be either store file names or package
2684specifications, as for @command{guix package} (@pxref{Invoking guix
2685package}). For instance, the following command creates an archive
2686containing the @code{gui} output of the @code{git} package and the main
2687output of @code{emacs}:
2688
2689@example
2690guix archive --export git:gui /gnu/store/...-emacs-24.3 > great.nar
2691@end example
2692
2693If the specified packages are not built yet, @command{guix archive}
2694automatically builds them. The build process may be controlled with the
2695common build options (@pxref{Common Build Options}).
2696
2697To transfer the @code{emacs} package to a machine connected over SSH,
2698one would run:
760c60d6
LC
2699
2700@example
56607088 2701guix archive --export -r emacs | ssh the-machine guix archive --import
760c60d6
LC
2702@end example
2703
87236aed 2704@noindent
56607088
LC
2705Similarly, a complete user profile may be transferred from one machine
2706to another like this:
2707
2708@example
2709guix archive --export -r $(readlink -f ~/.guix-profile) | \
2710 ssh the-machine guix-archive --import
2711@end example
2712
2713@noindent
2714However, note that, in both examples, all of @code{emacs} and the
2715profile as well as all of their dependencies are transferred (due to
f97c9175
AE
2716@code{-r}), regardless of what is already available in the store on the
2717target machine. The @code{--missing} option can help figure out which
f11c444d
LC
2718items are missing from the target store. The @command{guix copy}
2719command simplifies and optimizes this whole process, so this is probably
2720what you should use in this case (@pxref{Invoking guix copy}).
87236aed 2721
5597b3ae
LC
2722@cindex nar, archive format
2723@cindex normalized archive (nar)
b1edfbc3 2724Archives are stored in the ``normalized archive'' or ``nar'' format, which is
5597b3ae 2725comparable in spirit to `tar', but with differences
0dbd88db 2726that make it more appropriate for our purposes. First, rather than
5597b3ae 2727recording all Unix metadata for each file, the nar format only mentions
0dbd88db
LC
2728the file type (regular, directory, or symbolic link); Unix permissions
2729and owner/group are dismissed. Second, the order in which directory
2730entries are stored always follows the order of file names according to
2731the C locale collation order. This makes archive production fully
2732deterministic.
2733
2734When exporting, the daemon digitally signs the contents of the archive,
2735and that digital signature is appended. When importing, the daemon
2736verifies the signature and rejects the import in case of an invalid
2737signature or if the signing key is not authorized.
760c60d6
LC
2738@c FIXME: Add xref to daemon doc about signatures.
2739
2740The main options are:
2741
2742@table @code
2743@item --export
2744Export the specified store files or packages (see below.) Write the
2745resulting archive to the standard output.
2746
56607088
LC
2747Dependencies are @emph{not} included in the output, unless
2748@code{--recursive} is passed.
2749
2750@item -r
2751@itemx --recursive
2752When combined with @code{--export}, this instructs @command{guix
2753archive} to include dependencies of the given items in the archive.
2754Thus, the resulting archive is self-contained: it contains the closure
2755of the exported store items.
2756
760c60d6
LC
2757@item --import
2758Read an archive from the standard input, and import the files listed
2759therein into the store. Abort if the archive has an invalid digital
f82cc5fd
LC
2760signature, or if it is signed by a public key not among the authorized
2761keys (see @code{--authorize} below.)
554f26ec 2762
87236aed
LC
2763@item --missing
2764Read a list of store file names from the standard input, one per line,
2765and write on the standard output the subset of these files missing from
2766the store.
2767
554f26ec 2768@item --generate-key[=@var{parameters}]
f82cc5fd 2769@cindex signing, archives
f97c9175 2770Generate a new key pair for the daemon. This is a prerequisite before
554f26ec
LC
2771archives can be exported with @code{--export}. Note that this operation
2772usually takes time, because it needs to gather enough entropy to
2773generate the key pair.
2774
2775The generated key pair is typically stored under @file{/etc/guix}, in
2776@file{signing-key.pub} (public key) and @file{signing-key.sec} (private
867d8473
LC
2777key, which must be kept secret.) When @var{parameters} is omitted,
2778an ECDSA key using the Ed25519 curve is generated, or, for Libgcrypt
2779versions before 1.6.0, it is a 4096-bit RSA key.
f97c9175 2780Alternatively, @var{parameters} can specify
554f26ec
LC
2781@code{genkey} parameters suitable for Libgcrypt (@pxref{General
2782public-key related Functions, @code{gcry_pk_genkey},, gcrypt, The
2783Libgcrypt Reference Manual}).
f82cc5fd
LC
2784
2785@item --authorize
2786@cindex authorizing, archives
2787Authorize imports signed by the public key passed on standard input.
2788The public key must be in ``s-expression advanced format''---i.e., the
2789same format as the @file{signing-key.pub} file.
2790
2791The list of authorized keys is kept in the human-editable file
2792@file{/etc/guix/acl}. The file contains
2793@url{http://people.csail.mit.edu/rivest/Sexp.txt, ``advanced-format
2794s-expressions''} and is structured as an access-control list in the
2795@url{http://theworld.com/~cme/spki.txt, Simple Public-Key Infrastructure
2796(SPKI)}.
c6f8e9dd
LC
2797
2798@item --extract=@var{directory}
2799@itemx -x @var{directory}
2800Read a single-item archive as served by substitute servers
2801(@pxref{Substitutes}) and extract it to @var{directory}. This is a
2802low-level operation needed in only very narrow use cases; see below.
2803
2804For example, the following command extracts the substitute for Emacs
2805served by @code{hydra.gnu.org} to @file{/tmp/emacs}:
2806
2807@example
2808$ wget -O - \
df061d07 2809 https://hydra.gnu.org/nar/@dots{}-emacs-24.5 \
c6f8e9dd
LC
2810 | bunzip2 | guix archive -x /tmp/emacs
2811@end example
2812
2813Single-item archives are different from multiple-item archives produced
2814by @command{guix archive --export}; they contain a single store item,
2815and they do @emph{not} embed a signature. Thus this operation does
2816@emph{no} signature verification and its output should be considered
2817unsafe.
2818
2819The primary purpose of this operation is to facilitate inspection of
2820archive contents coming from possibly untrusted substitute servers.
2821
760c60d6
LC
2822@end table
2823
568717fd
LC
2824@c *********************************************************************
2825@node Programming Interface
2826@chapter Programming Interface
2827
3dc1970d
LC
2828GNU Guix provides several Scheme programming interfaces (APIs) to
2829define, build, and query packages. The first interface allows users to
2830write high-level package definitions. These definitions refer to
2831familiar packaging concepts, such as the name and version of a package,
2832its build system, and its dependencies. These definitions can then be
2833turned into concrete build actions.
2834
ba55b1cb 2835Build actions are performed by the Guix daemon, on behalf of users. In a
3dc1970d 2836standard setup, the daemon has write access to the store---the
834129e0 2837@file{/gnu/store} directory---whereas users do not. The recommended
3dc1970d
LC
2838setup also has the daemon perform builds in chroots, under a specific
2839build users, to minimize interference with the rest of the system.
2840
2841@cindex derivation
2842Lower-level APIs are available to interact with the daemon and the
2843store. To instruct the daemon to perform a build action, users actually
2844provide it with a @dfn{derivation}. A derivation is a low-level
2845representation of the build actions to be taken, and the environment in
2846which they should occur---derivations are to package definitions what
49ad317a
LC
2847assembly is to C programs. The term ``derivation'' comes from the fact
2848that build results @emph{derive} from them.
3dc1970d
LC
2849
2850This chapter describes all these APIs in turn, starting from high-level
2851package definitions.
2852
568717fd 2853@menu
b860f382 2854* Defining Packages:: Defining new packages.
7458bd0a 2855* Build Systems:: Specifying how packages are built.
b860f382
LC
2856* The Store:: Manipulating the package store.
2857* Derivations:: Low-level interface to package derivations.
2858* The Store Monad:: Purely functional interface to the store.
21b679f6 2859* G-Expressions:: Manipulating build expressions.
568717fd
LC
2860@end menu
2861
2862@node Defining Packages
2863@section Defining Packages
2864
3dc1970d
LC
2865The high-level interface to package definitions is implemented in the
2866@code{(guix packages)} and @code{(guix build-system)} modules. As an
2867example, the package definition, or @dfn{recipe}, for the GNU Hello
2868package looks like this:
2869
2870@example
e7f34eb0
LC
2871(define-module (gnu packages hello)
2872 #:use-module (guix packages)
2873 #:use-module (guix download)
2874 #:use-module (guix build-system gnu)
a6dcdcac
SB
2875 #:use-module (guix licenses)
2876 #:use-module (gnu packages gawk))
b22a12fd 2877
79f5dd59 2878(define-public hello
3dc1970d
LC
2879 (package
2880 (name "hello")
17d8e33f 2881 (version "2.10")
3dc1970d 2882 (source (origin
17d8e33f
ML
2883 (method url-fetch)
2884 (uri (string-append "mirror://gnu/hello/hello-" version
2885 ".tar.gz"))
2886 (sha256
2887 (base32
2888 "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
3dc1970d 2889 (build-system gnu-build-system)
654c0d97 2890 (arguments '(#:configure-flags '("--enable-silent-rules")))
3dc1970d 2891 (inputs `(("gawk" ,gawk)))
7458bd0a
LC
2892 (synopsis "Hello, GNU world: An example GNU package")
2893 (description "Guess what GNU Hello prints!")
3dc1970d 2894 (home-page "http://www.gnu.org/software/hello/")
b22a12fd 2895 (license gpl3+)))
3dc1970d
LC
2896@end example
2897
2898@noindent
2899Without being a Scheme expert, the reader may have guessed the meaning
f97c9175
AE
2900of the various fields here. This expression binds the variable
2901@code{hello} to a @code{<package>} object, which is essentially a record
3dc1970d
LC
2902(@pxref{SRFI-9, Scheme records,, guile, GNU Guile Reference Manual}).
2903This package object can be inspected using procedures found in the
2904@code{(guix packages)} module; for instance, @code{(package-name hello)}
2905returns---surprise!---@code{"hello"}.
2906
2f7d2d91
LC
2907With luck, you may be able to import part or all of the definition of
2908the package you are interested in from another repository, using the
2909@code{guix import} command (@pxref{Invoking guix import}).
2910
f97c9175 2911In the example above, @var{hello} is defined in a module of its own,
e7f34eb0
LC
2912@code{(gnu packages hello)}. Technically, this is not strictly
2913necessary, but it is convenient to do so: all the packages defined in
2914modules under @code{(gnu packages @dots{})} are automatically known to
2915the command-line tools (@pxref{Package Modules}).
2916
3dc1970d
LC
2917There are a few points worth noting in the above package definition:
2918
2919@itemize
2920@item
a2bf4907
LC
2921The @code{source} field of the package is an @code{<origin>} object
2922(@pxref{origin Reference}, for the complete reference).
3dc1970d
LC
2923Here, the @code{url-fetch} method from @code{(guix download)} is used,
2924meaning that the source is a file to be downloaded over FTP or HTTP.
2925
2926The @code{mirror://gnu} prefix instructs @code{url-fetch} to use one of
2927the GNU mirrors defined in @code{(guix download)}.
2928
2929The @code{sha256} field specifies the expected SHA256 hash of the file
2930being downloaded. It is mandatory, and allows Guix to check the
2931integrity of the file. The @code{(base32 @dots{})} form introduces the
6c365eca 2932base32 representation of the hash. You can obtain this information with
210cc920
LC
2933@code{guix download} (@pxref{Invoking guix download}) and @code{guix
2934hash} (@pxref{Invoking guix hash}).
3dc1970d 2935
f9cc8971
LC
2936@cindex patches
2937When needed, the @code{origin} form can also have a @code{patches} field
2938listing patches to be applied, and a @code{snippet} field giving a
2939Scheme expression to modify the source code.
2940
3dc1970d
LC
2941@item
2942@cindex GNU Build System
7458bd0a
LC
2943The @code{build-system} field specifies the procedure to build the
2944package (@pxref{Build Systems}). Here, @var{gnu-build-system}
2945represents the familiar GNU Build System, where packages may be
2946configured, built, and installed with the usual @code{./configure &&
2947make && make check && make install} command sequence.
2948
2949@item
2950The @code{arguments} field specifies options for the build system
2951(@pxref{Build Systems}). Here it is interpreted by
2952@var{gnu-build-system} as a request run @file{configure} with the
2953@code{--enable-silent-rules} flag.
3dc1970d 2954
654c0d97
LC
2955@cindex quote
2956@cindex quoting
2957@findex '
2958@findex quote
2959What about these quote (@code{'}) characters? They are Scheme syntax to
2960introduce a literal list; @code{'} is synonymous with @code{quote}.
2961@xref{Expression Syntax, quoting,, guile, GNU Guile Reference Manual},
2962for details. Here the value of the @code{arguments} field is a list of
2963arguments passed to the build system down the road, as with @code{apply}
2964(@pxref{Fly Evaluation, @code{apply},, guile, GNU Guile Reference
2965Manual}).
2966
2967The hash-colon (@code{#:}) sequence defines a Scheme @dfn{keyword}
2968(@pxref{Keywords,,, guile, GNU Guile Reference Manual}), and
2969@code{#:configure-flags} is a keyword used to pass a keyword argument
2970to the build system (@pxref{Coding With Keywords,,, guile, GNU Guile
2971Reference Manual}).
2972
3dc1970d
LC
2973@item
2974The @code{inputs} field specifies inputs to the build process---i.e.,
2975build-time or run-time dependencies of the package. Here, we define an
2976input called @code{"gawk"} whose value is that of the @var{gawk}
2977variable; @var{gawk} is itself bound to a @code{<package>} object.
2978
654c0d97
LC
2979@cindex backquote (quasiquote)
2980@findex `
2981@findex quasiquote
2982@cindex comma (unquote)
2983@findex ,
2984@findex unquote
2985@findex ,@@
2986@findex unquote-splicing
2987Again, @code{`} (a backquote, synonymous with @code{quasiquote}) allows
2988us to introduce a literal list in the @code{inputs} field, while
2989@code{,} (a comma, synonymous with @code{unquote}) allows us to insert a
2990value in that list (@pxref{Expression Syntax, unquote,, guile, GNU Guile
2991Reference Manual}).
2992
3dc1970d
LC
2993Note that GCC, Coreutils, Bash, and other essential tools do not need to
2994be specified as inputs here. Instead, @var{gnu-build-system} takes care
7458bd0a 2995of ensuring that they are present (@pxref{Build Systems}).
3dc1970d
LC
2996
2997However, any other dependencies need to be specified in the
2998@code{inputs} field. Any dependency not specified here will simply be
2999unavailable to the build process, possibly leading to a build failure.
3000@end itemize
3001
87eafdbd
TUBK
3002@xref{package Reference}, for a full description of possible fields.
3003
2f7d2d91 3004Once a package definition is in place, the
e49951eb 3005package may actually be built using the @code{guix build} command-line
fc06b15e
AP
3006tool (@pxref{Invoking guix build}), troubleshooting any build failures
3007you encounter (@pxref{Debugging Build Failures}). You can easily jump back to the
39bee8a2
LC
3008package definition using the @command{guix edit} command
3009(@pxref{Invoking guix edit}).
3010@xref{Packaging Guidelines}, for
b4f5e0e8
CR
3011more information on how to test package definitions, and
3012@ref{Invoking guix lint}, for information on how to check a definition
3013for style conformance.
b7ebcfe3
LC
3014@vindex GUIX_PACKAGE_PATH
3015Lastly, @pxref{Package Modules}, for information
3016on how to extend the distribution by adding your own package definitions
3017to @code{GUIX_PACKAGE_PATH}.
b4f5e0e8 3018
f97c9175 3019Finally, updating the package definition to a new upstream version
7458bd0a
LC
3020can be partly automated by the @command{guix refresh} command
3021(@pxref{Invoking guix refresh}).
3dc1970d
LC
3022
3023Behind the scenes, a derivation corresponding to the @code{<package>}
3024object is first computed by the @code{package-derivation} procedure.
834129e0 3025That derivation is stored in a @code{.drv} file under @file{/gnu/store}.
ba55b1cb 3026The build actions it prescribes may then be realized by using the
3dc1970d
LC
3027@code{build-derivations} procedure (@pxref{The Store}).
3028
3029@deffn {Scheme Procedure} package-derivation @var{store} @var{package} [@var{system}]
59688fc4
LC
3030Return the @code{<derivation>} object of @var{package} for @var{system}
3031(@pxref{Derivations}).
3dc1970d
LC
3032
3033@var{package} must be a valid @code{<package>} object, and @var{system}
3034must be a string denoting the target system type---e.g.,
3035@code{"x86_64-linux"} for an x86_64 Linux-based GNU system. @var{store}
3036must be a connection to the daemon, which operates on the store
3037(@pxref{The Store}).
3038@end deffn
568717fd 3039
9c1edabd
LC
3040@noindent
3041@cindex cross-compilation
3042Similarly, it is possible to compute a derivation that cross-builds a
3043package for some other system:
3044
3045@deffn {Scheme Procedure} package-cross-derivation @var{store} @
3046 @var{package} @var{target} [@var{system}]
59688fc4
LC
3047Return the @code{<derivation>} object of @var{package} cross-built from
3048@var{system} to @var{target}.
9c1edabd
LC
3049
3050@var{target} must be a valid GNU triplet denoting the target hardware
3051and operating system, such as @code{"mips64el-linux-gnu"}
3052(@pxref{Configuration Names, GNU configuration triplets,, configure, GNU
3053Configure and Build System}).
3054@end deffn
3055
2a75b0b6
LC
3056@cindex package transformations
3057@cindex input rewriting
3058@cindex dependency tree rewriting
3059Packages can be manipulated in arbitrary ways. An example of a useful
3060transformation is @dfn{input rewriting}, whereby the dependency tree of
3061a package is rewritten by replacing specific inputs by others:
3062
3063@deffn {Scheme Procedure} package-input-rewriting @var{replacements} @
3064 [@var{rewrite-name}]
3065Return a procedure that, when passed a package, replaces its direct and
3066indirect dependencies (but not its implicit inputs) according to
3067@var{replacements}. @var{replacements} is a list of package pairs; the
3068first element of each pair is the package to replace, and the second one
3069is the replacement.
3070
3071Optionally, @var{rewrite-name} is a one-argument procedure that takes
3072the name of a package and returns its new name after rewrite.
3073@end deffn
3074
3075@noindent
3076Consider this example:
3077
3078@example
3079(define libressl-instead-of-openssl
3080 ;; This is a procedure to replace OPENSSL by LIBRESSL,
3081 ;; recursively.
3082 (package-input-rewriting `((,openssl . ,libressl))))
3083
3084(define git-with-libressl
3085 (libressl-instead-of-openssl git))
3086@end example
3087
3088@noindent
3089Here we first define a rewriting procedure that replaces @var{openssl}
3090with @var{libressl}. Then we use it to define a @dfn{variant} of the
3091@var{git} package that uses @var{libressl} instead of @var{openssl}.
3092This is exactly what the @option{--with-input} command-line option does
3093(@pxref{Package Transformation Options, @option{--with-input}}).
3094
f37f2b83
LC
3095A more generic procedure to rewrite a package dependency graph is
3096@code{package-mapping}: it supports arbitrary changes to nodes in the
3097graph.
3098
3099@deffn {Scheme Procedure} package-mapping @var{proc} [@var{cut?}]
3100Return a procedure that, given a package, applies @var{proc} to all the packages
3101depended on and returns the resulting package. The procedure stops recursion
3102when @var{cut?} returns true for a given package.
3103@end deffn
3104
87eafdbd
TUBK
3105@menu
3106* package Reference :: The package data type.
3107* origin Reference:: The origin data type.
3108@end menu
3109
3110
3111@node package Reference
3112@subsection @code{package} Reference
3113
3114This section summarizes all the options available in @code{package}
3115declarations (@pxref{Defining Packages}).
3116
3117@deftp {Data Type} package
3118This is the data type representing a package recipe.
3119
3120@table @asis
3121@item @code{name}
3122The name of the package, as a string.
3123
3124@item @code{version}
3125The version of the package, as a string.
3126
3127@item @code{source}
da675305
LC
3128An object telling how the source code for the package should be
3129acquired. Most of the time, this is an @code{origin} object, which
3130denotes a file fetched from the Internet (@pxref{origin Reference}). It
3131can also be any other ``file-like'' object such as a @code{local-file},
3132which denotes a file from the local file system (@pxref{G-Expressions,
3133@code{local-file}}).
87eafdbd
TUBK
3134
3135@item @code{build-system}
3136The build system that should be used to build the package (@pxref{Build
3137Systems}).
3138
3139@item @code{arguments} (default: @code{'()})
3140The arguments that should be passed to the build system. This is a
3141list, typically containing sequential keyword-value pairs.
3142
3143@item @code{inputs} (default: @code{'()})
70650c68
LC
3144@itemx @code{native-inputs} (default: @code{'()})
3145@itemx @code{propagated-inputs} (default: @code{'()})
3146@cindex inputs, of packages
3147These fields list dependencies of the package. Each one is a list of
3148tuples, where each tuple has a label for the input (a string) as its
3149first element, a package, origin, or derivation as its second element,
3150and optionally the name of the output thereof that should be used, which
3151defaults to @code{"out"} (@pxref{Packages with Multiple Outputs}, for
f97c9175 3152more on package outputs). For example, the list below specifies three
70650c68 3153inputs:
87eafdbd 3154
70650c68
LC
3155@example
3156`(("libffi" ,libffi)
3157 ("libunistring" ,libunistring)
3158 ("glib:bin" ,glib "bin")) ;the "bin" output of Glib
3159@end example
3160
3161@cindex cross compilation, package dependencies
3162The distinction between @code{native-inputs} and @code{inputs} is
3163necessary when considering cross-compilation. When cross-compiling,
3164dependencies listed in @code{inputs} are built for the @emph{target}
3165architecture; conversely, dependencies listed in @code{native-inputs}
3166are built for the architecture of the @emph{build} machine.
3167
f97c9175
AE
3168@code{native-inputs} is typically used to list tools needed at
3169build time, but not at run time, such as Autoconf, Automake, pkg-config,
70650c68
LC
3170Gettext, or Bison. @command{guix lint} can report likely mistakes in
3171this area (@pxref{Invoking guix lint}).
3172
3173@anchor{package-propagated-inputs}
3174Lastly, @code{propagated-inputs} is similar to @code{inputs}, but the
f97c9175
AE
3175specified packages will be automatically installed alongside the package
3176they belong to (@pxref{package-cmd-propagated-inputs, @command{guix
70650c68
LC
3177package}}, for information on how @command{guix package} deals with
3178propagated inputs.)
21461f27 3179
e0508b6b
LC
3180For example this is necessary when a C/C++ library needs headers of
3181another library to compile, or when a pkg-config file refers to another
3182one @i{via} its @code{Requires} field.
3183
f97c9175
AE
3184Another example where @code{propagated-inputs} is useful is for languages
3185that lack a facility to record the run-time search path akin to the
c8ebb4c4 3186@code{RUNPATH} of ELF files; this includes Guile, Python, Perl, and
e0508b6b
LC
3187more. To ensure that libraries written in those languages can find
3188library code they depend on at run time, run-time dependencies must be
3189listed in @code{propagated-inputs} rather than @code{inputs}.
87eafdbd 3190
87eafdbd
TUBK
3191@item @code{self-native-input?} (default: @code{#f})
3192This is a Boolean field telling whether the package should use itself as
3193a native input when cross-compiling.
3194
3195@item @code{outputs} (default: @code{'("out")})
3196The list of output names of the package. @xref{Packages with Multiple
3197Outputs}, for typical uses of additional outputs.
3198
3199@item @code{native-search-paths} (default: @code{'()})
3200@itemx @code{search-paths} (default: @code{'()})
3201A list of @code{search-path-specification} objects describing
3202search-path environment variables honored by the package.
3203
3204@item @code{replacement} (default: @code{#f})
f97c9175 3205This must be either @code{#f} or a package object that will be used as a
87eafdbd
TUBK
3206@dfn{replacement} for this package. @xref{Security Updates, grafts},
3207for details.
3208
3209@item @code{synopsis}
3210A one-line description of the package.
3211
3212@item @code{description}
3213A more elaborate description of the package.
3214
3215@item @code{license}
e32171ee 3216@cindex license, of packages
f97c9175
AE
3217The license of the package; a value from @code{(guix licenses)},
3218or a list of such values.
87eafdbd
TUBK
3219
3220@item @code{home-page}
3221The URL to the home-page of the package, as a string.
3222
3223@item @code{supported-systems} (default: @var{%supported-systems})
3224The list of systems supported by the package, as strings of the form
3225@code{architecture-kernel}, for example @code{"x86_64-linux"}.
3226
3227@item @code{maintainers} (default: @code{'()})
3228The list of maintainers of the package, as @code{maintainer} objects.
3229
3230@item @code{location} (default: source location of the @code{package} form)
f97c9175 3231The source location of the package. It is useful to override this when
87eafdbd
TUBK
3232inheriting from another package, in which case this field is not
3233automatically corrected.
3234@end table
3235@end deftp
3236
3237
3238@node origin Reference
3239@subsection @code{origin} Reference
3240
3241This section summarizes all the options available in @code{origin}
3242declarations (@pxref{Defining Packages}).
3243
3244@deftp {Data Type} origin
3245This is the data type representing a source code origin.
3246
3247@table @asis
3248@item @code{uri}
3249An object containing the URI of the source. The object type depends on
3250the @code{method} (see below). For example, when using the
3251@var{url-fetch} method of @code{(guix download)}, the valid @code{uri}
3252values are: a URL represented as a string, or a list thereof.
3253
3254@item @code{method}
f97c9175 3255A procedure that handles the URI.
87eafdbd
TUBK
3256
3257Examples include:
3258
3259@table @asis
3260@item @var{url-fetch} from @code{(guix download)}
f97c9175 3261download a file from the HTTP, HTTPS, or FTP URL specified in the
87eafdbd
TUBK
3262@code{uri} field;
3263
db97a03a 3264@vindex git-fetch
87eafdbd
TUBK
3265@item @var{git-fetch} from @code{(guix git-download)}
3266clone the Git version control repository, and check out the revision
3267specified in the @code{uri} field as a @code{git-reference} object; a
3268@code{git-reference} looks like this:
3269
3270@example
3271(git-reference
3272 (url "git://git.debian.org/git/pkg-shadow/shadow")
3273 (commit "v4.1.5.1"))
3274@end example
3275@end table
3276
3277@item @code{sha256}
3278A bytevector containing the SHA-256 hash of the source. Typically the
3279@code{base32} form is used here to generate the bytevector from a
3280base-32 string.
3281
db97a03a
LC
3282You can obtain this information using @code{guix download}
3283(@pxref{Invoking guix download}) or @code{guix hash} (@pxref{Invoking
3284guix hash}).
3285
87eafdbd
TUBK
3286@item @code{file-name} (default: @code{#f})
3287The file name under which the source code should be saved. When this is
3288@code{#f}, a sensible default value will be used in most cases. In case
3289the source is fetched from a URL, the file name from the URL will be
f97c9175 3290used. For version control checkouts, it is recommended to provide the
87eafdbd
TUBK
3291file name explicitly because the default is not very descriptive.
3292
3293@item @code{patches} (default: @code{'()})
3294A list of file names containing patches to be applied to the source.
3295
0dfebdaa
LC
3296This list of patches must be unconditional. In particular, it cannot
3297depend on the value of @code{%current-system} or
3298@code{%current-target-system}.
3299
87eafdbd 3300@item @code{snippet} (default: @code{#f})
1929fdba
LC
3301A G-expression (@pxref{G-Expressions}) or S-expression that will be run
3302in the source directory. This is a convenient way to modify the source,
3303sometimes more convenient than a patch.
87eafdbd
TUBK
3304
3305@item @code{patch-flags} (default: @code{'("-p1")})
3306A list of command-line flags that should be passed to the @code{patch}
3307command.
3308
3309@item @code{patch-inputs} (default: @code{#f})
3310Input packages or derivations to the patching process. When this is
3311@code{#f}, the usual set of inputs necessary for patching are provided,
3312such as GNU@tie{}Patch.
3313
3314@item @code{modules} (default: @code{'()})
3315A list of Guile modules that should be loaded during the patching
3316process and while running the code in the @code{snippet} field.
3317
87eafdbd
TUBK
3318@item @code{patch-guile} (default: @code{#f})
3319The Guile package that should be used in the patching process. When
3320this is @code{#f}, a sensible default is used.
3321@end table
3322@end deftp
3323
9c1edabd 3324
7458bd0a
LC
3325@node Build Systems
3326@section Build Systems
3327
3328@cindex build system
3329Each package definition specifies a @dfn{build system} and arguments for
3330that build system (@pxref{Defining Packages}). This @code{build-system}
f97c9175 3331field represents the build procedure of the package, as well as implicit
7458bd0a
LC
3332dependencies of that build procedure.
3333
3334Build systems are @code{<build-system>} objects. The interface to
3335create and manipulate them is provided by the @code{(guix build-system)}
3336module, and actual build systems are exported by specific modules.
3337
f5fd4fd2 3338@cindex bag (low-level package representation)
0d5a559f
LC
3339Under the hood, build systems first compile package objects to
3340@dfn{bags}. A @dfn{bag} is like a package, but with less
3341ornamentation---in other words, a bag is a lower-level representation of
3342a package, which includes all the inputs of that package, including some
3343that were implicitly added by the build system. This intermediate
3344representation is then compiled to a derivation (@pxref{Derivations}).
3345
7458bd0a
LC
3346Build systems accept an optional list of @dfn{arguments}. In package
3347definitions, these are passed @i{via} the @code{arguments} field
3348(@pxref{Defining Packages}). They are typically keyword arguments
3349(@pxref{Optional Arguments, keyword arguments in Guile,, guile, GNU
3350Guile Reference Manual}). The value of these arguments is usually
3351evaluated in the @dfn{build stratum}---i.e., by a Guile process launched
3352by the daemon (@pxref{Derivations}).
3353
3354The main build system is @var{gnu-build-system}, which implements the
f97c9175 3355standard build procedure for GNU and many other packages. It
7458bd0a
LC
3356is provided by the @code{(guix build-system gnu)} module.
3357
3358@defvr {Scheme Variable} gnu-build-system
3359@var{gnu-build-system} represents the GNU Build System, and variants
3360thereof (@pxref{Configuration, configuration and makefile conventions,,
3361standards, GNU Coding Standards}).
3362
3363@cindex build phases
f97c9175 3364In a nutshell, packages using it are configured, built, and installed with
7458bd0a
LC
3365the usual @code{./configure && make && make check && make install}
3366command sequence. In practice, a few additional steps are often needed.
3367All these steps are split up in separate @dfn{phases},
3368notably@footnote{Please see the @code{(guix build gnu-build-system)}
3369modules for more details about the build phases.}:
3370
3371@table @code
3372@item unpack
3373Unpack the source tarball, and change the current directory to the
3374extracted source tree. If the source is actually a directory, copy it
3375to the build tree, and enter that directory.
3376
3377@item patch-source-shebangs
3378Patch shebangs encountered in source files so they refer to the right
3379store file names. For instance, this changes @code{#!/bin/sh} to
3380@code{#!/gnu/store/@dots{}-bash-4.3/bin/sh}.
3381
3382@item configure
3383Run the @file{configure} script with a number of default options, such
3384as @code{--prefix=/gnu/store/@dots{}}, as well as the options specified
3385by the @code{#:configure-flags} argument.
3386
3387@item build
3388Run @code{make} with the list of flags specified with
0917e80e 3389@code{#:make-flags}. If the @code{#:parallel-build?} argument is true
7458bd0a
LC
3390(the default), build with @code{make -j}.
3391
3392@item check
3393Run @code{make check}, or some other target specified with
3394@code{#:test-target}, unless @code{#:tests? #f} is passed. If the
3395@code{#:parallel-tests?} argument is true (the default), run @code{make
3396check -j}.
3397
3398@item install
3399Run @code{make install} with the flags listed in @code{#:make-flags}.
3400
3401@item patch-shebangs
3402Patch shebangs on the installed executable files.
3403
3404@item strip
3405Strip debugging symbols from ELF files (unless @code{#:strip-binaries?}
3406is false), copying them to the @code{debug} output when available
3407(@pxref{Installing Debugging Files}).
3408@end table
3409
3410@vindex %standard-phases
3411The build-side module @code{(guix build gnu-build-system)} defines
3412@var{%standard-phases} as the default list of build phases.
3413@var{%standard-phases} is a list of symbol/procedure pairs, where the
3414procedure implements the actual phase.
3415
3416The list of phases used for a particular package can be changed with the
3417@code{#:phases} parameter. For instance, passing:
3418
3419@example
c2c5dc79 3420#:phases (modify-phases %standard-phases (delete 'configure))
7458bd0a
LC
3421@end example
3422
9bf404e9 3423means that all the phases described above will be used, except the
7458bd0a
LC
3424@code{configure} phase.
3425
3426In addition, this build system ensures that the ``standard'' environment
3427for GNU packages is available. This includes tools such as GCC, libc,
3428Coreutils, Bash, Make, Diffutils, grep, and sed (see the @code{(guix
f97c9175
AE
3429build-system gnu)} module for a complete list). We call these the
3430@dfn{implicit inputs} of a package, because package definitions do not
7458bd0a
LC
3431have to mention them.
3432@end defvr
3433
3434Other @code{<build-system>} objects are defined to support other
3435conventions and tools used by free software packages. They inherit most
3436of @var{gnu-build-system}, and differ mainly in the set of inputs
3437implicitly added to the build process, and in the list of phases
3438executed. Some of these build systems are listed below.
3439
5f7a1a4d
RW
3440@defvr {Scheme Variable} ant-build-system
3441This variable is exported by @code{(guix build-system ant)}. It
3442implements the build procedure for Java packages that can be built with
3443@url{http://ant.apache.org/, Ant build tool}.
3444
3445It adds both @code{ant} and the @dfn{Java Development Kit} (JDK) as
3446provided by the @code{icedtea} package to the set of inputs. Different
3447packages can be specified with the @code{#:ant} and @code{#:jdk}
3448parameters, respectively.
3449
3450When the original package does not provide a suitable Ant build file,
3451the parameter @code{#:jar-name} can be used to generate a minimal Ant
3452build file @file{build.xml} with tasks to build the specified jar
8df64f73
HG
3453archive. In this case the parameter @code{#:source-dir} can be used to
3454specify the source sub-directory, defaulting to ``src''.
5f7a1a4d
RW
3455
3456The parameter @code{#:build-target} can be used to specify the Ant task
3457that should be run during the @code{build} phase. By default the
3458``jar'' task will be run.
3459
3460@end defvr
3461
a1b30f99
AP
3462@defvr {Scheme Variable} asdf-build-system/source
3463@defvrx {Scheme Variable} asdf-build-system/sbcl
3464@defvrx {Scheme Variable} asdf-build-system/ecl
3465
3466These variables, exported by @code{(guix build-system asdf)}, implement
3467build procedures for Common Lisp packages using
3468@url{https://common-lisp.net/project/asdf/, ``ASDF''}. ASDF is a system
3469definition facility for Common Lisp programs and libraries.
3470
3471The @code{asdf-build-system/source} system installs the packages in
3472source form, and can be loaded using any common lisp implementation, via
3473ASDF. The others, such as @code{asdf-build-system/sbcl}, install binary
3474systems in the format which a particular implementation understands.
3475These build systems can also be used to produce executable programs, or
3476lisp images which contain a set of packages pre-loaded.
3477
3478The build system uses naming conventions. For binary packages, the
8a3814cd
AP
3479package name should be prefixed with the lisp implementation, such as
3480@code{sbcl-} for @code{asdf-build-system/sbcl}.
a1b30f99
AP
3481
3482Additionally, the corresponding source package should be labeled using
3483the same convention as python packages (see @ref{Python Modules}), using
3484the @code{cl-} prefix.
3485
3486For binary packages, each system should be defined as a Guix package.
3487If one package @code{origin} contains several systems, package variants
3488can be created in order to build all the systems. Source packages,
3489which use @code{asdf-build-system/source}, may contain several systems.
3490
3491In order to create executable programs and images, the build-side
3492procedures @code{build-program} and @code{build-image} can be used.
3493They should be called in a build phase after the @code{create-symlinks}
3494phase, so that the system which was just built can be used within the
3495resulting image. @code{build-program} requires a list of Common Lisp
3496expressions to be passed as the @code{#:entry-program} argument.
3497
3498If the system is not defined within its own @code{.asd} file of the same
3499name, then the @code{#:asd-file} parameter should be used to specify
8a3814cd
AP
3500which file the system is defined in. Furthermore, if the package
3501defines a system for its tests in a separate file, it will be loaded
3502before the tests are run if it is specified by the
3503@code{#:test-asd-file} parameter. If it is not set, the files
3504@code{<system>-tests.asd}, @code{<system>-test.asd}, @code{tests.asd},
3505and @code{test.asd} will be tried if they exist.
3506
3507If for some reason the package must be named in a different way than the
3508naming conventions suggest, the @code{#:asd-system-name} parameter can
3509be used to specify the name of the system.
a1b30f99
AP
3510
3511@end defvr
3512
1ec34dd7
LC
3513@defvr {Scheme Variable} cargo-build-system
3514@cindex Rust programming language
3515@cindex Cargo (Rust build system)
3516This variable is exported by @code{(guix build-system cargo)}. It
3517supports builds of packages using Cargo, the build tool of the
3518@uref{https://www.rust-lang.org, Rust programming language}.
3519
3520In its @code{configure} phase, this build system replaces dependencies
3521specified in the @file{Carto.toml} file with inputs to the Guix package.
3522The @code{install} phase installs the binaries, and it also installs the
3523source code and @file{Cargo.toml} file.
3524@end defvr
3525
7458bd0a
LC
3526@defvr {Scheme Variable} cmake-build-system
3527This variable is exported by @code{(guix build-system cmake)}. It
3528implements the build procedure for packages using the
3529@url{http://www.cmake.org, CMake build tool}.
3530
3531It automatically adds the @code{cmake} package to the set of inputs.
3532Which package is used can be specified with the @code{#:cmake}
3533parameter.
9849cfc1
LC
3534
3535The @code{#:configure-flags} parameter is taken as a list of flags
3536passed to the @command{cmake} command. The @code{#:build-type}
3537parameter specifies in abstract terms the flags passed to the compiler;
3538it defaults to @code{"RelWithDebInfo"} (short for ``release mode with
3539debugging information''), which roughly means that code is compiled with
3540@code{-O2 -g}, as is the case for Autoconf-based packages by default.
7458bd0a
LC
3541@end defvr
3542
3afcf52b
FB
3543@defvr {Scheme Variable} glib-or-gtk-build-system
3544This variable is exported by @code{(guix build-system glib-or-gtk)}. It
3545is intended for use with packages making use of GLib or GTK+.
3546
3547This build system adds the following two phases to the ones defined by
3548@var{gnu-build-system}:
3549
3550@table @code
3551@item glib-or-gtk-wrap
f97c9175
AE
3552The phase @code{glib-or-gtk-wrap} ensures that programs in
3553@file{bin/} are able to find GLib ``schemas'' and
3afcf52b
FB
3554@uref{https://developer.gnome.org/gtk3/stable/gtk-running.html, GTK+
3555modules}. This is achieved by wrapping the programs in launch scripts
3556that appropriately set the @code{XDG_DATA_DIRS} and @code{GTK_PATH}
3557environment variables.
3558
73aa8ddb
LC
3559It is possible to exclude specific package outputs from that wrapping
3560process by listing their names in the
3561@code{#:glib-or-gtk-wrap-excluded-outputs} parameter. This is useful
3562when an output is known not to contain any GLib or GTK+ binaries, and
3563where wrapping would gratuitously add a dependency of that output on
3564GLib and GTK+.
3565
3afcf52b 3566@item glib-or-gtk-compile-schemas
f97c9175 3567The phase @code{glib-or-gtk-compile-schemas} makes sure that all
3afcf52b 3568@uref{https://developer.gnome.org/gio/stable/glib-compile-schemas.html,
f97c9175 3569GSettings schemas} of GLib are compiled. Compilation is performed by the
3afcf52b
FB
3570@command{glib-compile-schemas} program. It is provided by the package
3571@code{glib:bin} which is automatically imported by the build system.
3572The @code{glib} package providing @command{glib-compile-schemas} can be
3573specified with the @code{#:glib} parameter.
3574@end table
3575
3576Both phases are executed after the @code{install} phase.
3577@end defvr
3578
3184f14a 3579@defvr {Scheme Variable} ocaml-build-system
9fc221b5 3580This variable is exported by @code{(guix build-system ocaml)}. It implements
3184f14a
JL
3581a build procedure for @uref{https://ocaml.org, OCaml} packages, which consists
3582of choosing the correct set of commands to run for each package. OCaml
3583packages can expect many different commands to be run. This build system will
3584try some of them.
3585
3586When the package has a @file{setup.ml} file present at the top-level, it will
3587run @code{ocaml setup.ml -configure}, @code{ocaml setup.ml -build} and
3588@code{ocaml setup.ml -install}. The build system will assume that this file
3589was generated by @uref{http://oasis.forge.ocamlcore.org/, OASIS} and will take
3590care of setting the prefix and enabling tests if they are not disabled. You
3591can pass configure and build flags with the @code{#:configure-flags} and
3592@code{#:build-flags}. The @code{#:test-flags} key can be passed to change the
3593set of flags used to enable tests. The @code{#:use-make?} key can be used to
3594bypass this system in the build and install phases.
3595
3596When the package has a @file{configure} file, it is assumed that it is a
3597hand-made configure script that requires a different argument format than
3598in the @code{gnu-build-system}. You can add more flags with the
3599@code{#:configure-flags} key.
3600
3601When the package has a @file{Makefile} file (or @code{#:use-make?} is
3602@code{#t}), it will be used and more flags can be passed to the build and
3603install phases with the @code{#:make-flags} key.
3604
3605Finally, some packages do not have these files and use a somewhat standard
3606location for its build system. In that case, the build system will run
3607@code{ocaml pkg/pkg.ml} or @code{ocaml pkg/build.ml} and take care of
3608providing the path to the required findlib module. Additional flags can
3609be passed via the @code{#:build-flags} key. Install is taken care of by
3610@command{opam-installer}. In this case, the @code{opam} package must
3611be added to the @code{native-inputs} field of the package definition.
3612
3613Note that most OCaml packages assume they will be installed in the same
88ba7852 3614directory as OCaml, which is not what we want in guix. In particular, they
3184f14a 3615will install @file{.so} files in their module's directory, which is usually
88ba7852 3616fine because it is in the OCaml compiler directory. In guix though, these
3184f14a
JL
3617libraries cannot be found and we use @code{CAML_LD_LIBRARY_PATH}. This
3618variable points to @file{lib/ocaml/site-lib/stubslibs} and this is where
3619@file{.so} libraries should be installed.
3620@end defvr
3621
7458bd0a
LC
3622@defvr {Scheme Variable} python-build-system
3623This variable is exported by @code{(guix build-system python)}. It
3624implements the more or less standard build procedure used by Python
3625packages, which consists in running @code{python setup.py build} and
3626then @code{python setup.py install --prefix=/gnu/store/@dots{}}.
3627
3628For packages that install stand-alone Python programs under @code{bin/},
f97c9175 3629it takes care of wrapping these programs so that their @code{PYTHONPATH}
7458bd0a
LC
3630environment variable points to all the Python libraries they depend on.
3631
8a46205b
CM
3632Which Python package is used to perform the build can be specified with
3633the @code{#:python} parameter. This is a useful way to force a package
3634to be built for a specific version of the Python interpreter, which
3635might be necessary if the package is only compatible with a single
3636interpreter version.
5f7565d1
HG
3637
3638By default guix calls @code{setup.py} under control of
3639@code{setuptools}, much like @command{pip} does. Some packages are not
3640compatible with setuptools (and pip), thus you can disable this by
3641setting the @code{#:use-setuptools} parameter to @code{#f}.
7458bd0a
LC
3642@end defvr
3643
3644@defvr {Scheme Variable} perl-build-system
3645This variable is exported by @code{(guix build-system perl)}. It
2d2a53fc
EB
3646implements the standard build procedure for Perl packages, which either
3647consists in running @code{perl Build.PL --prefix=/gnu/store/@dots{}},
3648followed by @code{Build} and @code{Build install}; or in running
3649@code{perl Makefile.PL PREFIX=/gnu/store/@dots{}}, followed by
f97c9175 3650@code{make} and @code{make install}, depending on which of
2d2a53fc
EB
3651@code{Build.PL} or @code{Makefile.PL} is present in the package
3652distribution. Preference is given to the former if both @code{Build.PL}
3653and @code{Makefile.PL} exist in the package distribution. This
3654preference can be reversed by specifying @code{#t} for the
3655@code{#:make-maker?} parameter.
3656
3657The initial @code{perl Makefile.PL} or @code{perl Build.PL} invocation
3658passes flags specified by the @code{#:make-maker-flags} or
3659@code{#:module-build-flags} parameter, respectively.
7458bd0a
LC
3660
3661Which Perl package is used can be specified with @code{#:perl}.
3662@end defvr
3663
f8f3bef6
RW
3664@defvr {Scheme Variable} r-build-system
3665This variable is exported by @code{(guix build-system r)}. It
3666implements the build procedure used by @uref{http://r-project.org, R}
3667packages, which essentially is little more than running @code{R CMD
3668INSTALL --library=/gnu/store/@dots{}} in an environment where
3669@code{R_LIBS_SITE} contains the paths to all R package inputs. Tests
3670are run after installation using the R function
3671@code{tools::testInstalledPackage}.
3672@end defvr
3673
205794c8
RW
3674@defvr {Scheme Variable} texlive-build-system
3675This variable is exported by @code{(guix build-system texlive)}. It is
3676used to build TeX packages in batch mode with a specified engine. The
3677build system sets the @code{TEXINPUTS} variable to find all TeX source
3678files in the inputs.
3679
3680By default it runs @code{luatex} on all files ending on @code{ins}. A
3681different engine and format can be specified with the
3682@code{#:tex-format} argument. Different build targets can be specified
3683with the @code{#:build-targets} argument, which expects a list of file
3684names. The build system adds only @code{texlive-bin} and
3685@code{texlive-latex-base} (both from @code{(gnu packages tex}) to the
3686inputs. Both can be overridden with the arguments @code{#:texlive-bin}
3687and @code{#:texlive-latex-base}, respectively.
3688
3689The @code{#:tex-directory} parameter tells the build system where to
3690install the built files under the texmf tree.
3691@end defvr
3692
c08f9818
DT
3693@defvr {Scheme Variable} ruby-build-system
3694This variable is exported by @code{(guix build-system ruby)}. It
3695implements the RubyGems build procedure used by Ruby packages, which
3696involves running @code{gem build} followed by @code{gem install}.
3697
5dc87623
DT
3698The @code{source} field of a package that uses this build system
3699typically references a gem archive, since this is the format that Ruby
3700developers use when releasing their software. The build system unpacks
3701the gem archive, potentially patches the source, runs the test suite,
3702repackages the gem, and installs it. Additionally, directories and
3703tarballs may be referenced to allow building unreleased gems from Git or
3704a traditional source release tarball.
e83c6d00 3705
c08f9818 3706Which Ruby package is used can be specified with the @code{#:ruby}
6e9f2913
PP
3707parameter. A list of additional flags to be passed to the @command{gem}
3708command can be specified with the @code{#:gem-flags} parameter.
c08f9818 3709@end defvr
7458bd0a 3710
a677c726
RW
3711@defvr {Scheme Variable} waf-build-system
3712This variable is exported by @code{(guix build-system waf)}. It
3713implements a build procedure around the @code{waf} script. The common
3714phases---@code{configure}, @code{build}, and @code{install}---are
3715implemented by passing their names as arguments to the @code{waf}
3716script.
3717
3718The @code{waf} script is executed by the Python interpreter. Which
3719Python package is used to run the script can be specified with the
3720@code{#:python} parameter.
3721@end defvr
3722
14dfdf2e
FB
3723@defvr {Scheme Variable} haskell-build-system
3724This variable is exported by @code{(guix build-system haskell)}. It
3725implements the Cabal build procedure used by Haskell packages, which
3726involves running @code{runhaskell Setup.hs configure
3727--prefix=/gnu/store/@dots{}} and @code{runhaskell Setup.hs build}.
3728Instead of installing the package by running @code{runhaskell Setup.hs
3729install}, to avoid trying to register libraries in the read-only
3730compiler store directory, the build system uses @code{runhaskell
3731Setup.hs copy}, followed by @code{runhaskell Setup.hs register}. In
3732addition, the build system generates the package documentation by
3733running @code{runhaskell Setup.hs haddock}, unless @code{#:haddock? #f}
3734is passed. Optional Haddock parameters can be passed with the help of
3735the @code{#:haddock-flags} parameter. If the file @code{Setup.hs} is
3736not found, the build system looks for @code{Setup.lhs} instead.
3737
3738Which Haskell compiler is used can be specified with the @code{#:haskell}
a54bd6d7 3739parameter which defaults to @code{ghc}.
14dfdf2e
FB
3740@end defvr
3741
65e862d1
DM
3742@defvr {Scheme Variable} dub-build-system
3743This variable is exported by @code{(guix build-system dub)}. It
3744implements the Dub build procedure used by D packages, which
3745involves running @code{dub build} and @code{dub run}.
3746Installation is done by copying the files manually.
3747
3748Which D compiler is used can be specified with the @code{#:ldc}
3749parameter which defaults to @code{ldc}.
3750@end defvr
3751
e9137a53
FB
3752@defvr {Scheme Variable} emacs-build-system
3753This variable is exported by @code{(guix build-system emacs)}. It
f97c9175
AE
3754implements an installation procedure similar to the packaging system
3755of Emacs itself (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
e9137a53
FB
3756
3757It first creates the @code{@var{package}-autoloads.el} file, then it
3758byte compiles all Emacs Lisp files. Differently from the Emacs
3759packaging system, the Info documentation files are moved to the standard
3760documentation directory and the @file{dir} file is deleted. Each
3761package is installed in its own directory under
3762@file{share/emacs/site-lisp/guix.d}.
3763@end defvr
3764
3d90fa98
AI
3765@defvr {Scheme Variable} font-build-system
3766This variable is exported by @code{(guix build-system font)}. It
3767implements an installation procedure for font packages where upstream
3768provides pre-compiled TrueType, OpenType, etc. font files that merely
3769need to be copied into place. It copies font files to standard
3770locations in the output directory.
3771@end defvr
3772
7458bd0a
LC
3773Lastly, for packages that do not need anything as sophisticated, a
3774``trivial'' build system is provided. It is trivial in the sense that
3775it provides basically no support: it does not pull any implicit inputs,
3776and does not have a notion of build phases.
3777
3778@defvr {Scheme Variable} trivial-build-system
3779This variable is exported by @code{(guix build-system trivial)}.
3780
3781This build system requires a @code{#:builder} argument. This argument
f97c9175 3782must be a Scheme expression that builds the package output(s)---as
7458bd0a
LC
3783with @code{build-expression->derivation} (@pxref{Derivations,
3784@code{build-expression->derivation}}).
3785@end defvr
3786
568717fd
LC
3787@node The Store
3788@section The Store
3789
e531ac2a 3790@cindex store
1ddee424 3791@cindex store items
e531ac2a
LC
3792@cindex store paths
3793
f97c9175
AE
3794Conceptually, the @dfn{store} is the place where derivations that have
3795been built successfully are stored---by default, @file{/gnu/store}.
1ddee424
LC
3796Sub-directories in the store are referred to as @dfn{store items} or
3797sometimes @dfn{store paths}. The store has an associated database that
3798contains information such as the store paths referred to by each store
3799path, and the list of @emph{valid} store items---results of successful
ef5f5c86
LC
3800builds. This database resides in @file{@var{localstatedir}/guix/db},
3801where @var{localstatedir} is the state directory specified @i{via}
3802@option{--localstatedir} at configure time, usually @file{/var}.
1ddee424
LC
3803
3804The store is @emph{always} accessed by the daemon on behalf of its clients
e531ac2a 3805(@pxref{Invoking guix-daemon}). To manipulate the store, clients
f97c9175
AE
3806connect to the daemon over a Unix-domain socket, send requests to it,
3807and read the result---these are remote procedure calls, or RPCs.
e531ac2a 3808
1ddee424
LC
3809@quotation Note
3810Users must @emph{never} modify files under @file{/gnu/store} directly.
3811This would lead to inconsistencies and break the immutability
3812assumptions of Guix's functional model (@pxref{Introduction}).
3813
3814@xref{Invoking guix gc, @command{guix gc --verify}}, for information on
3815how to check the integrity of the store and attempt recovery from
3816accidental modifications.
3817@end quotation
3818
e531ac2a 3819The @code{(guix store)} module provides procedures to connect to the
1397b422
LC
3820daemon, and to perform RPCs. These are described below. By default,
3821@code{open-connection}, and thus all the @command{guix} commands,
3822connect to the local daemon or to the URI specified by the
3823@code{GUIX_DAEMON_SOCKET} environment variable.
e531ac2a 3824
1397b422
LC
3825@defvr {Environment Variable} GUIX_DAEMON_SOCKET
3826When set, the value of this variable should be a file name or a URI
3827designating the daemon endpoint. When it is a file name, it denotes a
3828Unix-domain socket to connect to. In addition to file names, the
3829supported URI schemes are:
3830
3831@table @code
3832@item file
3833@itemx unix
3834These are for Unix-domain sockets.
3835@code{file:///var/guix/daemon-socket/socket} is equivalent to
3836@file{/var/guix/daemon-socket/socket}.
3dff90ce
LC
3837
3838@item guix
1071f781
LC
3839@cindex daemon, remote access
3840@cindex remote access to the daemon
3841@cindex daemon, cluster setup
3842@cindex clusters, daemon setup
3dff90ce 3843These URIs denote connections over TCP/IP, without encryption nor
5df1395a
LC
3844authentication of the remote host. The URI must specify the host name
3845and optionally a port number (by default port 44146 is used):
3dff90ce
LC
3846
3847@example
3848guix://master.guix.example.org:1234
3849@end example
3850
3851This setup is suitable on local networks, such as clusters, where only
3852trusted nodes may connect to the build daemon at
3853@code{master.guix.example.org}.
285f63e8 3854
1071f781
LC
3855The @code{--listen} option of @command{guix-daemon} can be used to
3856instruct it to listen for TCP connections (@pxref{Invoking guix-daemon,
3857@code{--listen}}).
3858
285f63e8
LC
3859@item ssh
3860@cindex SSH access to build daemons
3861These URIs allow you to connect to a remote daemon over
3862SSH@footnote{This feature requires Guile-SSH (@pxref{Requirements}).}.
3863A typical URL might look like this:
3864
3865@example
3866ssh://charlie@@guix.example.org:22
3867@end example
3868
3869As for @command{guix copy}, the usual OpenSSH client configuration files
3870are honored (@pxref{Invoking guix copy}).
1397b422
LC
3871@end table
3872
3873Additional URI schemes may be supported in the future.
285f63e8
LC
3874
3875@c XXX: Remove this note when the protocol incurs fewer round trips
3876@c and when (guix derivations) no longer relies on file system access.
3877@quotation Note
3878The ability to connect to remote build daemons is considered
3879experimental as of @value{VERSION}. Please get in touch with us to
3880share any problems or suggestions you may have (@pxref{Contributing}).
3881@end quotation
1397b422
LC
3882@end defvr
3883
3884@deffn {Scheme Procedure} open-connection [@var{uri}] [#:reserve-space? #t]
3885Connect to the daemon over the Unix-domain socket at @var{uri} (a string). When
e531ac2a
LC
3886@var{reserve-space?} is true, instruct it to reserve a little bit of
3887extra space on the file system so that the garbage collector can still
f97c9175 3888operate should the disk become full. Return a server object.
e531ac2a
LC
3889
3890@var{file} defaults to @var{%default-socket-path}, which is the normal
3891location given the options that were passed to @command{configure}.
3892@end deffn
3893
3894@deffn {Scheme Procedure} close-connection @var{server}
3895Close the connection to @var{server}.
3896@end deffn
3897
3898@defvr {Scheme Variable} current-build-output-port
3899This variable is bound to a SRFI-39 parameter, which refers to the port
3900where build and error logs sent by the daemon should be written.
3901@end defvr
3902
3903Procedures that make RPCs all take a server object as their first
3904argument.
3905
3906@deffn {Scheme Procedure} valid-path? @var{server} @var{path}
06b76acc
LC
3907@cindex invalid store items
3908Return @code{#t} when @var{path} designates a valid store item and
3909@code{#f} otherwise (an invalid item may exist on disk but still be
3910invalid, for instance because it is the result of an aborted or failed
3911build.)
3912
3913A @code{&nix-protocol-error} condition is raised if @var{path} is not
3914prefixed by the store directory (@file{/gnu/store}).
e531ac2a
LC
3915@end deffn
3916
cfbf9160 3917@deffn {Scheme Procedure} add-text-to-store @var{server} @var{name} @var{text} [@var{references}]
e531ac2a
LC
3918Add @var{text} under file @var{name} in the store, and return its store
3919path. @var{references} is the list of store paths referred to by the
3920resulting store path.
3921@end deffn
3922
874e6874 3923@deffn {Scheme Procedure} build-derivations @var{server} @var{derivations}
59688fc4
LC
3924Build @var{derivations} (a list of @code{<derivation>} objects or
3925derivation paths), and return when the worker is done building them.
3926Return @code{#t} on success.
874e6874
LC
3927@end deffn
3928
b860f382
LC
3929Note that the @code{(guix monads)} module provides a monad as well as
3930monadic versions of the above procedures, with the goal of making it
3931more convenient to work with code that accesses the store (@pxref{The
3932Store Monad}).
3933
e531ac2a
LC
3934@c FIXME
3935@i{This section is currently incomplete.}
568717fd
LC
3936
3937@node Derivations
3938@section Derivations
3939
874e6874
LC
3940@cindex derivations
3941Low-level build actions and the environment in which they are performed
70458ed5 3942are represented by @dfn{derivations}. A derivation contains the
874e6874
LC
3943following pieces of information:
3944
3945@itemize
3946@item
3947The outputs of the derivation---derivations produce at least one file or
3948directory in the store, but may produce more.
3949
3950@item
3951The inputs of the derivations, which may be other derivations or plain
3952files in the store (patches, build scripts, etc.)
3953
3954@item
3955The system type targeted by the derivation---e.g., @code{x86_64-linux}.
3956
3957@item
3958The file name of a build script in the store, along with the arguments
3959to be passed.
3960
3961@item
3962A list of environment variables to be defined.
3963
3964@end itemize
3965
3966@cindex derivation path
3967Derivations allow clients of the daemon to communicate build actions to
3968the store. They exist in two forms: as an in-memory representation,
3969both on the client- and daemon-side, and as files in the store whose
3970name end in @code{.drv}---these files are referred to as @dfn{derivation
3971paths}. Derivations paths can be passed to the @code{build-derivations}
3972procedure to perform the build actions they prescribe (@pxref{The
3973Store}).
3974
3975The @code{(guix derivations)} module provides a representation of
3976derivations as Scheme objects, along with procedures to create and
3977otherwise manipulate derivations. The lowest-level primitive to create
3978a derivation is the @code{derivation} procedure:
3979
1909431c
LC
3980@deffn {Scheme Procedure} derivation @var{store} @var{name} @var{builder} @
3981 @var{args} [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
2096ef47 3982 [#:recursive? #f] [#:inputs '()] [#:env-vars '()] @
1909431c 3983 [#:system (%current-system)] [#:references-graphs #f] @
35b5ca78
LC
3984 [#:allowed-references #f] [#:disallowed-references #f] @
3985 [#:leaked-env-vars #f] [#:local-build? #f] @
4a6aeb67 3986 [#:substitutable? #t]
59688fc4
LC
3987Build a derivation with the given arguments, and return the resulting
3988@code{<derivation>} object.
874e6874 3989
2096ef47 3990When @var{hash} and @var{hash-algo} are given, a
874e6874 3991@dfn{fixed-output derivation} is created---i.e., one whose result is
36bbbbd1
LC
3992known in advance, such as a file download. If, in addition,
3993@var{recursive?} is true, then that fixed output may be an executable
3994file or a directory and @var{hash} must be the hash of an archive
3995containing this output.
5b0c9d16 3996
858e9282 3997When @var{references-graphs} is true, it must be a list of file
5b0c9d16
LC
3998name/store path pairs. In that case, the reference graph of each store
3999path is exported in the build environment in the corresponding file, in
4000a simple text format.
1909431c 4001
b53be755 4002When @var{allowed-references} is true, it must be a list of store items
35b5ca78
LC
4003or outputs that the derivation's output may refer to. Likewise,
4004@var{disallowed-references}, if true, must be a list of things the
4005outputs may @emph{not} refer to.
b53be755 4006
c0468155
LC
4007When @var{leaked-env-vars} is true, it must be a list of strings
4008denoting environment variables that are allowed to ``leak'' from the
4009daemon's environment to the build environment. This is only applicable
4010to fixed-output derivations---i.e., when @var{hash} is true. The main
4011use is to allow variables such as @code{http_proxy} to be passed to
4012derivations that download files.
4013
1909431c
LC
4014When @var{local-build?} is true, declare that the derivation is not a
4015good candidate for offloading and should rather be built locally
4016(@pxref{Daemon Offload Setup}). This is the case for small derivations
4017where the costs of data transfers would outweigh the benefits.
4a6aeb67
LC
4018
4019When @var{substitutable?} is false, declare that substitutes of the
4020derivation's output should not be used (@pxref{Substitutes}). This is
4021useful, for instance, when building packages that capture details of the
4022host CPU instruction set.
874e6874
LC
4023@end deffn
4024
4025@noindent
4026Here's an example with a shell script as its builder, assuming
4027@var{store} is an open connection to the daemon, and @var{bash} points
4028to a Bash executable in the store:
4029
4030@lisp
4031(use-modules (guix utils)
4032 (guix store)
4033 (guix derivations))
4034
59688fc4
LC
4035(let ((builder ; add the Bash script to the store
4036 (add-text-to-store store "my-builder.sh"
4037 "echo hello world > $out\n" '())))
4038 (derivation store "foo"
4039 bash `("-e" ,builder)
21b679f6 4040 #:inputs `((,bash) (,builder))
59688fc4 4041 #:env-vars '(("HOME" . "/homeless"))))
834129e0 4042@result{} #<derivation /gnu/store/@dots{}-foo.drv => /gnu/store/@dots{}-foo>
874e6874
LC
4043@end lisp
4044
21b679f6
LC
4045As can be guessed, this primitive is cumbersome to use directly. A
4046better approach is to write build scripts in Scheme, of course! The
4047best course of action for that is to write the build code as a
4048``G-expression'', and to pass it to @code{gexp->derivation}. For more
6621cdb6 4049information, @pxref{G-Expressions}.
21b679f6 4050
f2fadbc1
AE
4051Once upon a time, @code{gexp->derivation} did not exist and constructing
4052derivations with build code written in Scheme was achieved with
4053@code{build-expression->derivation}, documented below. This procedure
4054is now deprecated in favor of the much nicer @code{gexp->derivation}.
4055
4056@deffn {Scheme Procedure} build-expression->derivation @var{store} @
4057 @var{name} @var{exp} @
4058 [#:system (%current-system)] [#:inputs '()] @
4059 [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
4060 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
4061 [#:references-graphs #f] [#:allowed-references #f] @
35b5ca78 4062 [#:disallowed-references #f] @
f2fadbc1
AE
4063 [#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
4064Return a derivation that executes Scheme expression @var{exp} as a
4065builder for derivation @var{name}. @var{inputs} must be a list of
4066@code{(name drv-path sub-drv)} tuples; when @var{sub-drv} is omitted,
4067@code{"out"} is assumed. @var{modules} is a list of names of Guile
4068modules from the current search path to be copied in the store,
4069compiled, and made available in the load path during the execution of
4070@var{exp}---e.g., @code{((guix build utils) (guix build
4071gnu-build-system))}.
4072
4073@var{exp} is evaluated in an environment where @code{%outputs} is bound
4074to a list of output/path pairs, and where @code{%build-inputs} is bound
4075to a list of string/output-path pairs made from @var{inputs}.
4076Optionally, @var{env-vars} is a list of string pairs specifying the name
4077and value of environment variables visible to the builder. The builder
4078terminates by passing the result of @var{exp} to @code{exit}; thus, when
4079@var{exp} returns @code{#f}, the build is considered to have failed.
4080
4081@var{exp} is built using @var{guile-for-build} (a derivation). When
4082@var{guile-for-build} is omitted or is @code{#f}, the value of the
4083@code{%guile-for-build} fluid is used instead.
4084
4085See the @code{derivation} procedure for the meaning of
35b5ca78
LC
4086@var{references-graphs}, @var{allowed-references},
4087@var{disallowed-references}, @var{local-build?}, and
4088@var{substitutable?}.
f2fadbc1
AE
4089@end deffn
4090
4091@noindent
4092Here's an example of a single-output derivation that creates a directory
4093containing one file:
4094
4095@lisp
4096(let ((builder '(let ((out (assoc-ref %outputs "out")))
4097 (mkdir out) ; create /gnu/store/@dots{}-goo
4098 (call-with-output-file (string-append out "/test")
4099 (lambda (p)
4100 (display '(hello guix) p))))))
4101 (build-expression->derivation store "goo" builder))
4102
4103@result{} #<derivation /gnu/store/@dots{}-goo.drv => @dots{}>
4104@end lisp
4105
568717fd 4106
b860f382
LC
4107@node The Store Monad
4108@section The Store Monad
4109
4110@cindex monad
4111
4112The procedures that operate on the store described in the previous
4113sections all take an open connection to the build daemon as their first
4114argument. Although the underlying model is functional, they either have
4115side effects or depend on the current state of the store.
4116
4117The former is inconvenient: the connection to the build daemon has to be
4118carried around in all those functions, making it impossible to compose
4119functions that do not take that parameter with functions that do. The
4120latter can be problematic: since store operations have side effects
4121and/or depend on external state, they have to be properly sequenced.
4122
4123@cindex monadic values
4124@cindex monadic functions
4125This is where the @code{(guix monads)} module comes in. This module
4126provides a framework for working with @dfn{monads}, and a particularly
4127useful monad for our uses, the @dfn{store monad}. Monads are a
4128construct that allows two things: associating ``context'' with values
4129(in our case, the context is the store), and building sequences of
4827b36d 4130computations (here computations include accesses to the store). Values
b860f382
LC
4131in a monad---values that carry this additional context---are called
4132@dfn{monadic values}; procedures that return such values are called
4133@dfn{monadic procedures}.
4134
4135Consider this ``normal'' procedure:
4136
4137@example
45adbd62
LC
4138(define (sh-symlink store)
4139 ;; Return a derivation that symlinks the 'bash' executable.
4140 (let* ((drv (package-derivation store bash))
4141 (out (derivation->output-path drv))
4142 (sh (string-append out "/bin/bash")))
4143 (build-expression->derivation store "sh"
4144 `(symlink ,sh %output))))
b860f382
LC
4145@end example
4146
c6f30b81
LC
4147Using @code{(guix monads)} and @code{(guix gexp)}, it may be rewritten
4148as a monadic function:
b860f382
LC
4149
4150@example
45adbd62 4151(define (sh-symlink)
b860f382 4152 ;; Same, but return a monadic value.
c6f30b81
LC
4153 (mlet %store-monad ((drv (package->derivation bash)))
4154 (gexp->derivation "sh"
4155 #~(symlink (string-append #$drv "/bin/bash")
4156 #$output))))
b860f382
LC
4157@end example
4158
4827b36d 4159There are several things to note in the second version: the @code{store}
c6f30b81
LC
4160parameter is now implicit and is ``threaded'' in the calls to the
4161@code{package->derivation} and @code{gexp->derivation} monadic
4162procedures, and the monadic value returned by @code{package->derivation}
4163is @dfn{bound} using @code{mlet} instead of plain @code{let}.
4164
4165As it turns out, the call to @code{package->derivation} can even be
4166omitted since it will take place implicitly, as we will see later
4167(@pxref{G-Expressions}):
4168
4169@example
4170(define (sh-symlink)
4171 (gexp->derivation "sh"
4172 #~(symlink (string-append #$bash "/bin/bash")
4173 #$output)))
4174@end example
b860f382 4175
7ce21611 4176@c See
a01ad638 4177@c <https://syntaxexclamation.wordpress.com/2014/06/26/escaping-continuations/>
7ce21611
LC
4178@c for the funny quote.
4179Calling the monadic @code{sh-symlink} has no effect. As someone once
4180said, ``you exit a monad like you exit a building on fire: by running''.
4181So, to exit the monad and get the desired effect, one must use
4182@code{run-with-store}:
b860f382
LC
4183
4184@example
8e9aa37f
CAW
4185(run-with-store (open-connection) (sh-symlink))
4186@result{} /gnu/store/...-sh-symlink
b860f382
LC
4187@end example
4188
f97c9175 4189Note that the @code{(guix monad-repl)} module extends the Guile REPL with
b9b86078 4190new ``meta-commands'' to make it easier to deal with monadic procedures:
f97c9175 4191@code{run-in-store}, and @code{enter-store-monad}. The former is used
b9b86078
LC
4192to ``run'' a single monadic value through the store:
4193
4194@example
4195scheme@@(guile-user)> ,run-in-store (package->derivation hello)
4196$1 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
4197@end example
4198
4199The latter enters a recursive REPL, where all the return values are
4200automatically run through the store:
4201
4202@example
4203scheme@@(guile-user)> ,enter-store-monad
4204store-monad@@(guile-user) [1]> (package->derivation hello)
4205$2 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
4206store-monad@@(guile-user) [1]> (text-file "foo" "Hello!")
4207$3 = "/gnu/store/@dots{}-foo"
4208store-monad@@(guile-user) [1]> ,q
4209scheme@@(guile-user)>
4210@end example
4211
4212@noindent
4213Note that non-monadic values cannot be returned in the
4214@code{store-monad} REPL.
4215
e87f0591
LC
4216The main syntactic forms to deal with monads in general are provided by
4217the @code{(guix monads)} module and are described below.
b860f382
LC
4218
4219@deffn {Scheme Syntax} with-monad @var{monad} @var{body} ...
4220Evaluate any @code{>>=} or @code{return} forms in @var{body} as being
4221in @var{monad}.
4222@end deffn
4223
4224@deffn {Scheme Syntax} return @var{val}
4225Return a monadic value that encapsulates @var{val}.
4226@end deffn
4227
751630c9 4228@deffn {Scheme Syntax} >>= @var{mval} @var{mproc} ...
b860f382 4229@dfn{Bind} monadic value @var{mval}, passing its ``contents'' to monadic
751630c9
LC
4230procedures @var{mproc}@dots{}@footnote{This operation is commonly
4231referred to as ``bind'', but that name denotes an unrelated procedure in
4232Guile. Thus we use this somewhat cryptic symbol inherited from the
4233Haskell language.}. There can be one @var{mproc} or several of them, as
4234in this example:
4235
4236@example
4237(run-with-state
4238 (with-monad %state-monad
4239 (>>= (return 1)
4240 (lambda (x) (return (+ 1 x)))
4241 (lambda (x) (return (* 2 x)))))
4242 'some-state)
4243
4244@result{} 4
4245@result{} some-state
4246@end example
b860f382
LC
4247@end deffn
4248
4249@deffn {Scheme Syntax} mlet @var{monad} ((@var{var} @var{mval}) ...) @
4250 @var{body} ...
4251@deffnx {Scheme Syntax} mlet* @var{monad} ((@var{var} @var{mval}) ...) @
4252 @var{body} ...
4253Bind the variables @var{var} to the monadic values @var{mval} in
8bc2183f
CM
4254@var{body}, which is a sequence of expressions. As with the bind
4255operator, this can be thought of as ``unpacking'' the raw, non-monadic
4256value ``contained'' in @var{mval} and making @var{var} refer to that
4257raw, non-monadic value within the scope of the @var{body}. The form
4258(@var{var} -> @var{val}) binds @var{var} to the ``normal'' value
4259@var{val}, as per @code{let}. The binding operations occur in sequence
4260from left to right. The last expression of @var{body} must be a monadic
4261expression, and its result will become the result of the @code{mlet} or
4262@code{mlet*} when run in the @var{monad}.
b860f382
LC
4263
4264@code{mlet*} is to @code{mlet} what @code{let*} is to @code{let}
4265(@pxref{Local Bindings,,, guile, GNU Guile Reference Manual}).
4266@end deffn
4267
405a9d4e
LC
4268@deffn {Scheme System} mbegin @var{monad} @var{mexp} ...
4269Bind @var{mexp} and the following monadic expressions in sequence,
8bc2183f
CM
4270returning the result of the last expression. Every expression in the
4271sequence must be a monadic expression.
405a9d4e
LC
4272
4273This is akin to @code{mlet}, except that the return values of the
4274monadic expressions are ignored. In that sense, it is analogous to
4275@code{begin}, but applied to monadic expressions.
4276@end deffn
4277
60a9fcb1
CM
4278@deffn {Scheme System} mwhen @var{condition} @var{mexp0} @var{mexp*} ...
4279When @var{condition} is true, evaluate the sequence of monadic
4280expressions @var{mexp0}..@var{mexp*} as in an @code{mbegin}. When
4281@var{condition} is false, return @code{*unspecified*} in the current
4282monad. Every expression in the sequence must be a monadic expression.
4283@end deffn
4284
4285@deffn {Scheme System} munless @var{condition} @var{mexp0} @var{mexp*} ...
4286When @var{condition} is false, evaluate the sequence of monadic
4287expressions @var{mexp0}..@var{mexp*} as in an @code{mbegin}. When
4288@var{condition} is true, return @code{*unspecified*} in the current
4289monad. Every expression in the sequence must be a monadic expression.
4290@end deffn
4291
561fb6c3
LC
4292@cindex state monad
4293The @code{(guix monads)} module provides the @dfn{state monad}, which
4294allows an additional value---the state---to be @emph{threaded} through
4295monadic procedure calls.
4296
4297@defvr {Scheme Variable} %state-monad
4298The state monad. Procedures in the state monad can access and change
4299the state that is threaded.
4300
4301Consider the example below. The @code{square} procedure returns a value
4302in the state monad. It returns the square of its argument, but also
4303increments the current state value:
4304
4305@example
4306(define (square x)
4307 (mlet %state-monad ((count (current-state)))
4308 (mbegin %state-monad
4309 (set-current-state (+ 1 count))
4310 (return (* x x)))))
4311
4312(run-with-state (sequence %state-monad (map square (iota 3))) 0)
4313@result{} (0 1 4)
4314@result{} 3
4315@end example
4316
4317When ``run'' through @var{%state-monad}, we obtain that additional state
4318value, which is the number of @code{square} calls.
4319@end defvr
4320
4321@deffn {Monadic Procedure} current-state
4322Return the current state as a monadic value.
4323@end deffn
4324
4325@deffn {Monadic Procedure} set-current-state @var{value}
4326Set the current state to @var{value} and return the previous state as a
4327monadic value.
4328@end deffn
4329
4330@deffn {Monadic Procedure} state-push @var{value}
4331Push @var{value} to the current state, which is assumed to be a list,
4332and return the previous state as a monadic value.
4333@end deffn
4334
4335@deffn {Monadic Procedure} state-pop
4336Pop a value from the current state and return it as a monadic value.
4337The state is assumed to be a list.
4338@end deffn
4339
4340@deffn {Scheme Procedure} run-with-state @var{mval} [@var{state}]
4341Run monadic value @var{mval} starting with @var{state} as the initial
4342state. Return two values: the resulting value, and the resulting state.
4343@end deffn
4344
e87f0591
LC
4345The main interface to the store monad, provided by the @code{(guix
4346store)} module, is as follows.
b860f382
LC
4347
4348@defvr {Scheme Variable} %store-monad
561fb6c3
LC
4349The store monad---an alias for @var{%state-monad}.
4350
4351Values in the store monad encapsulate accesses to the store. When its
4352effect is needed, a value of the store monad must be ``evaluated'' by
4353passing it to the @code{run-with-store} procedure (see below.)
b860f382
LC
4354@end defvr
4355
4356@deffn {Scheme Procedure} run-with-store @var{store} @var{mval} [#:guile-for-build] [#:system (%current-system)]
4357Run @var{mval}, a monadic value in the store monad, in @var{store}, an
4358open store connection.
4359@end deffn
4360
ad372953 4361@deffn {Monadic Procedure} text-file @var{name} @var{text} [@var{references}]
b860f382 4362Return as a monadic value the absolute file name in the store of the file
ad372953
LC
4363containing @var{text}, a string. @var{references} is a list of store items that the
4364resulting text file refers to; it defaults to the empty list.
45adbd62
LC
4365@end deffn
4366
0a90af15 4367@deffn {Monadic Procedure} interned-file @var{file} [@var{name}] @
1ec32f4a 4368 [#:recursive? #t] [#:select? (const #t)]
0a90af15
LC
4369Return the name of @var{file} once interned in the store. Use
4370@var{name} as its store name, or the basename of @var{file} if
4371@var{name} is omitted.
4372
4373When @var{recursive?} is true, the contents of @var{file} are added
4374recursively; if @var{file} designates a flat file and @var{recursive?}
4375is true, its contents are added, and its permission bits are kept.
4376
1ec32f4a
LC
4377When @var{recursive?} is true, call @code{(@var{select?} @var{file}
4378@var{stat})} for each directory entry, where @var{file} is the entry's
4379absolute file name and @var{stat} is the result of @code{lstat}; exclude
4380entries for which @var{select?} does not return true.
4381
0a90af15
LC
4382The example below adds a file to the store, under two different names:
4383
4384@example
4385(run-with-store (open-connection)
4386 (mlet %store-monad ((a (interned-file "README"))
4387 (b (interned-file "README" "LEGU-MIN")))
4388 (return (list a b))))
4389
4390@result{} ("/gnu/store/rwm@dots{}-README" "/gnu/store/44i@dots{}-LEGU-MIN")
4391@end example
4392
4393@end deffn
4394
e87f0591
LC
4395The @code{(guix packages)} module exports the following package-related
4396monadic procedures:
4397
b860f382 4398@deffn {Monadic Procedure} package-file @var{package} [@var{file}] @
4231f05b 4399 [#:system (%current-system)] [#:target #f] @
f97c9175
AE
4400 [#:output "out"]
4401Return as a monadic
b860f382
LC
4402value in the absolute file name of @var{file} within the @var{output}
4403directory of @var{package}. When @var{file} is omitted, return the name
4231f05b
LC
4404of the @var{output} directory of @var{package}. When @var{target} is
4405true, use it as a cross-compilation target triplet.
b860f382
LC
4406@end deffn
4407
b860f382 4408@deffn {Monadic Procedure} package->derivation @var{package} [@var{system}]
4231f05b
LC
4409@deffnx {Monadic Procedure} package->cross-derivation @var{package} @
4410 @var{target} [@var{system}]
4411Monadic version of @code{package-derivation} and
4412@code{package-cross-derivation} (@pxref{Defining Packages}).
b860f382
LC
4413@end deffn
4414
4415
21b679f6
LC
4416@node G-Expressions
4417@section G-Expressions
4418
4419@cindex G-expression
4420@cindex build code quoting
4421So we have ``derivations'', which represent a sequence of build actions
4422to be performed to produce an item in the store (@pxref{Derivations}).
f97c9175 4423These build actions are performed when asking the daemon to actually
21b679f6
LC
4424build the derivations; they are run by the daemon in a container
4425(@pxref{Invoking guix-daemon}).
4426
4427@cindex strata of code
f97c9175 4428It should come as no surprise that we like to write these build actions
21b679f6
LC
4429in Scheme. When we do that, we end up with two @dfn{strata} of Scheme
4430code@footnote{The term @dfn{stratum} in this context was coined by
ef4ab0a4
LC
4431Manuel Serrano et al.@: in the context of their work on Hop. Oleg
4432Kiselyov, who has written insightful
4433@url{http://okmij.org/ftp/meta-programming/#meta-scheme, essays and code
4434on this topic}, refers to this kind of code generation as
4435@dfn{staging}.}: the ``host code''---code that defines packages, talks
4436to the daemon, etc.---and the ``build code''---code that actually
4437performs build actions, such as making directories, invoking
4438@command{make}, etc.
21b679f6
LC
4439
4440To describe a derivation and its build actions, one typically needs to
4441embed build code inside host code. It boils down to manipulating build
f97c9175 4442code as data, and the homoiconicity of Scheme---code has a direct
21b679f6 4443representation as data---comes in handy for that. But we need more than
f97c9175 4444the normal @code{quasiquote} mechanism in Scheme to construct build
21b679f6
LC
4445expressions.
4446
4447The @code{(guix gexp)} module implements @dfn{G-expressions}, a form of
4448S-expressions adapted to build expressions. G-expressions, or
f97c9175 4449@dfn{gexps}, consist essentially of three syntactic forms: @code{gexp},
21b679f6 4450@code{ungexp}, and @code{ungexp-splicing} (or simply: @code{#~},
f97c9175
AE
4451@code{#$}, and @code{#$@@}), which are comparable to
4452@code{quasiquote}, @code{unquote}, and @code{unquote-splicing},
4827b36d 4453respectively (@pxref{Expression Syntax, @code{quasiquote},, guile,
f97c9175 4454GNU Guile Reference Manual}). However, there are major differences:
21b679f6
LC
4455
4456@itemize
4457@item
4458Gexps are meant to be written to a file and run or manipulated by other
4459processes.
4460
4461@item
b39fc6f7
LC
4462When a high-level object such as a package or derivation is unquoted
4463inside a gexp, the result is as if its output file name had been
4464introduced.
ff40e9b7 4465
21b679f6
LC
4466@item
4467Gexps carry information about the packages or derivations they refer to,
4468and these dependencies are automatically added as inputs to the build
4469processes that use them.
4470@end itemize
4471
c2b84676 4472@cindex lowering, of high-level objects in gexps
343eacbe
LC
4473This mechanism is not limited to package and derivation
4474objects: @dfn{compilers} able to ``lower'' other high-level objects to
c2b84676
LC
4475derivations or files in the store can be defined,
4476such that these objects can also be inserted
f97c9175 4477into gexps. For example, a useful type of high-level objects that can be
343eacbe 4478inserted in a gexp is ``file-like objects'', which make it easy to
f97c9175 4479add files to the store and to refer to them in
558e8b11
LC
4480derivations and such (see @code{local-file} and @code{plain-file}
4481below.)
b39fc6f7 4482
21b679f6
LC
4483To illustrate the idea, here is an example of a gexp:
4484
4485@example
4486(define build-exp
4487 #~(begin
4488 (mkdir #$output)
4489 (chdir #$output)
aff8ce7c 4490 (symlink (string-append #$coreutils "/bin/ls")
21b679f6
LC
4491 "list-files")))
4492@end example
4493
4494This gexp can be passed to @code{gexp->derivation}; we obtain a
4495derivation that builds a directory containing exactly one symlink to
4496@file{/gnu/store/@dots{}-coreutils-8.22/bin/ls}:
4497
4498@example
4499(gexp->derivation "the-thing" build-exp)
4500@end example
4501
e20fd1bf 4502As one would expect, the @code{"/gnu/store/@dots{}-coreutils-8.22"} string is
21b679f6
LC
4503substituted to the reference to the @var{coreutils} package in the
4504actual build code, and @var{coreutils} is automatically made an input to
4505the derivation. Likewise, @code{#$output} (equivalent to @code{(ungexp
f97c9175
AE
4506output)}) is replaced by a string containing the directory name of the
4507output of the derivation.
667b2508
LC
4508
4509@cindex cross compilation
4510In a cross-compilation context, it is useful to distinguish between
4511references to the @emph{native} build of a package---that can run on the
4512host---versus references to cross builds of a package. To that end, the
4513@code{#+} plays the same role as @code{#$}, but is a reference to a
4514native package build:
4515
4516@example
4517(gexp->derivation "vi"
4518 #~(begin
4519 (mkdir #$output)
4520 (system* (string-append #+coreutils "/bin/ln")
4521 "-s"
4522 (string-append #$emacs "/bin/emacs")
4523 (string-append #$output "/bin/vi")))
4a3b6aa5 4524 #:target "mips64el-linux-gnu")
667b2508
LC
4525@end example
4526
4527@noindent
4528In the example above, the native build of @var{coreutils} is used, so
4529that @command{ln} can actually run on the host; but then the
4530cross-compiled build of @var{emacs} is referenced.
4531
0bb9929e
LC
4532@cindex imported modules, for gexps
4533@findex with-imported-modules
4534Another gexp feature is @dfn{imported modules}: sometimes you want to be
4535able to use certain Guile modules from the ``host environment'' in the
4536gexp, so those modules should be imported in the ``build environment''.
4537The @code{with-imported-modules} form allows you to express that:
4538
4539@example
4540(let ((build (with-imported-modules '((guix build utils))
4541 #~(begin
4542 (use-modules (guix build utils))
4543 (mkdir-p (string-append #$output "/bin"))))))
4544 (gexp->derivation "empty-dir"
4545 #~(begin
4546 #$build
4547 (display "success!\n")
4548 #t)))
4549@end example
4550
4551@noindent
4552In this example, the @code{(guix build utils)} module is automatically
4553pulled into the isolated build environment of our gexp, such that
4554@code{(use-modules (guix build utils))} works as expected.
4555
7ca87354
LC
4556@cindex module closure
4557@findex source-module-closure
4558Usually you want the @emph{closure} of the module to be imported---i.e.,
4559the module itself and all the modules it depends on---rather than just
4560the module; failing to do that, attempts to use the module will fail
4561because of missing dependent modules. The @code{source-module-closure}
4562procedure computes the closure of a module by looking at its source file
4563headers, which comes in handy in this case:
4564
4565@example
4566(use-modules (guix modules)) ;for 'source-module-closure'
4567
4568(with-imported-modules (source-module-closure
4569 '((guix build utils)
4570 (gnu build vm)))
4571 (gexp->derivation "something-with-vms"
4572 #~(begin
4573 (use-modules (guix build utils)
4574 (gnu build vm))
4575 @dots{})))
4576@end example
4577
667b2508 4578The syntactic form to construct gexps is summarized below.
21b679f6
LC
4579
4580@deffn {Scheme Syntax} #~@var{exp}
4581@deffnx {Scheme Syntax} (gexp @var{exp})
4582Return a G-expression containing @var{exp}. @var{exp} may contain one
4583or more of the following forms:
4584
4585@table @code
4586@item #$@var{obj}
4587@itemx (ungexp @var{obj})
b39fc6f7
LC
4588Introduce a reference to @var{obj}. @var{obj} may have one of the
4589supported types, for example a package or a
21b679f6
LC
4590derivation, in which case the @code{ungexp} form is replaced by its
4591output file name---e.g., @code{"/gnu/store/@dots{}-coreutils-8.22}.
4592
b39fc6f7
LC
4593If @var{obj} is a list, it is traversed and references to supported
4594objects are substituted similarly.
21b679f6
LC
4595
4596If @var{obj} is another gexp, its contents are inserted and its
4597dependencies are added to those of the containing gexp.
4598
4599If @var{obj} is another kind of object, it is inserted as is.
4600
b39fc6f7
LC
4601@item #$@var{obj}:@var{output}
4602@itemx (ungexp @var{obj} @var{output})
21b679f6 4603This is like the form above, but referring explicitly to the
b39fc6f7
LC
4604@var{output} of @var{obj}---this is useful when @var{obj} produces
4605multiple outputs (@pxref{Packages with Multiple Outputs}).
21b679f6 4606
667b2508
LC
4607@item #+@var{obj}
4608@itemx #+@var{obj}:output
4609@itemx (ungexp-native @var{obj})
4610@itemx (ungexp-native @var{obj} @var{output})
4611Same as @code{ungexp}, but produces a reference to the @emph{native}
4612build of @var{obj} when used in a cross compilation context.
4613
21b679f6
LC
4614@item #$output[:@var{output}]
4615@itemx (ungexp output [@var{output}])
4616Insert a reference to derivation output @var{output}, or to the main
4617output when @var{output} is omitted.
4618
4619This only makes sense for gexps passed to @code{gexp->derivation}.
4620
4621@item #$@@@var{lst}
4622@itemx (ungexp-splicing @var{lst})
4623Like the above, but splices the contents of @var{lst} inside the
4624containing list.
4625
667b2508
LC
4626@item #+@@@var{lst}
4627@itemx (ungexp-native-splicing @var{lst})
4628Like the above, but refers to native builds of the objects listed in
4629@var{lst}.
4630
21b679f6
LC
4631@end table
4632
4633G-expressions created by @code{gexp} or @code{#~} are run-time objects
4634of the @code{gexp?} type (see below.)
4635@end deffn
4636
0bb9929e
LC
4637@deffn {Scheme Syntax} with-imported-modules @var{modules} @var{body}@dots{}
4638Mark the gexps defined in @var{body}@dots{} as requiring @var{modules}
d938a58b
LC
4639in their execution environment.
4640
4641Each item in @var{modules} can be the name of a module, such as
4642@code{(guix build utils)}, or it can be a module name, followed by an
4643arrow, followed by a file-like object:
4644
4645@example
4646`((guix build utils)
4647 (guix gcrypt)
4648 ((guix config) => ,(scheme-file "config.scm"
4649 #~(define-module @dots{}))))
4650@end example
4651
4652@noindent
4653In the example above, the first two modules are taken from the search
4654path, and the last one is created from the given file-like object.
0bb9929e
LC
4655
4656This form has @emph{lexical} scope: it has an effect on the gexps
4657directly defined in @var{body}@dots{}, but not on those defined, say, in
4658procedures called from @var{body}@dots{}.
4659@end deffn
4660
21b679f6
LC
4661@deffn {Scheme Procedure} gexp? @var{obj}
4662Return @code{#t} if @var{obj} is a G-expression.
4663@end deffn
4664
4665G-expressions are meant to be written to disk, either as code building
4666some derivation, or as plain files in the store. The monadic procedures
4667below allow you to do that (@pxref{The Store Monad}, for more
4668information about monads.)
4669
4670@deffn {Monadic Procedure} gexp->derivation @var{name} @var{exp} @
ce45eb4c 4671 [#:system (%current-system)] [#:target #f] [#:graft? #t] @
21b679f6
LC
4672 [#:hash #f] [#:hash-algo #f] @
4673 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
4684f301 4674 [#:module-path @var{%load-path}] @
c8351d9a 4675 [#:references-graphs #f] [#:allowed-references #f] @
3f4ecf32 4676 [#:disallowed-references #f] @
c0468155 4677 [#:leaked-env-vars #f] @
0309e1b0 4678 [#:script-name (string-append @var{name} "-builder")] @
4a6aeb67 4679 [#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
21b679f6 4680Return a derivation @var{name} that runs @var{exp} (a gexp) with
0309e1b0
LC
4681@var{guile-for-build} (a derivation) on @var{system}; @var{exp} is
4682stored in a file called @var{script-name}. When @var{target} is true,
4683it is used as the cross-compilation target triplet for packages referred
4684to by @var{exp}.
21b679f6 4685
0bb9929e
LC
4686@var{modules} is deprecated in favor of @code{with-imported-modules}.
4687Its meaning is to
4688make @var{modules} available in the evaluation context of @var{exp};
ce45eb4c
LC
4689@var{modules} is a list of names of Guile modules searched in
4690@var{module-path} to be copied in the store, compiled, and made available in
21b679f6
LC
4691the load path during the execution of @var{exp}---e.g., @code{((guix
4692build utils) (guix build gnu-build-system))}.
4693
ce45eb4c
LC
4694@var{graft?} determines whether packages referred to by @var{exp} should be grafted when
4695applicable.
4696
b53833b2
LC
4697When @var{references-graphs} is true, it must be a list of tuples of one of the
4698following forms:
4699
4700@example
4701(@var{file-name} @var{package})
4702(@var{file-name} @var{package} @var{output})
4703(@var{file-name} @var{derivation})
4704(@var{file-name} @var{derivation} @var{output})
4705(@var{file-name} @var{store-item})
4706@end example
4707
4708The right-hand-side of each element of @var{references-graphs} is automatically made
4709an input of the build process of @var{exp}. In the build environment, each
4710@var{file-name} contains the reference graph of the corresponding item, in a simple
4711text format.
4712
c8351d9a
LC
4713@var{allowed-references} must be either @code{#f} or a list of output names and packages.
4714In the latter case, the list denotes store items that the result is allowed to
4715refer to. Any reference to another store item will lead to a build error.
3f4ecf32
LC
4716Similarly for @var{disallowed-references}, which can list items that must not be
4717referenced by the outputs.
c8351d9a 4718
e20fd1bf 4719The other arguments are as for @code{derivation} (@pxref{Derivations}).
21b679f6
LC
4720@end deffn
4721
343eacbe 4722@cindex file-like objects
e1c153e0
LC
4723The @code{local-file}, @code{plain-file}, @code{computed-file},
4724@code{program-file}, and @code{scheme-file} procedures below return
4725@dfn{file-like objects}. That is, when unquoted in a G-expression,
4726these objects lead to a file in the store. Consider this G-expression:
343eacbe
LC
4727
4728@example
a9e5e92f 4729#~(system* #$(file-append glibc "/sbin/nscd") "-f"
343eacbe
LC
4730 #$(local-file "/tmp/my-nscd.conf"))
4731@end example
4732
4733The effect here is to ``intern'' @file{/tmp/my-nscd.conf} by copying it
4734to the store. Once expanded, for instance @i{via}
4735@code{gexp->derivation}, the G-expression refers to that copy under
4736@file{/gnu/store}; thus, modifying or removing the file in @file{/tmp}
4737does not have any effect on what the G-expression does.
4738@code{plain-file} can be used similarly; it differs in that the file
4739content is directly passed as a string.
4740
d9ae938f 4741@deffn {Scheme Procedure} local-file @var{file} [@var{name}] @
0687fc9c 4742 [#:recursive? #f] [#:select? (const #t)]
d9ae938f 4743Return an object representing local file @var{file} to add to the store; this
9d3994f7
LC
4744object can be used in a gexp. If @var{file} is a relative file name, it is looked
4745up relative to the source file where this form appears. @var{file} will be added to
4746the store under @var{name}--by default the base name of @var{file}.
d9ae938f
LC
4747
4748When @var{recursive?} is true, the contents of @var{file} are added recursively; if @var{file}
4749designates a flat file and @var{recursive?} is true, its contents are added, and its
4750permission bits are kept.
4751
0687fc9c
LC
4752When @var{recursive?} is true, call @code{(@var{select?} @var{file}
4753@var{stat})} for each directory entry, where @var{file} is the entry's
4754absolute file name and @var{stat} is the result of @code{lstat}; exclude
4755entries for which @var{select?} does not return true.
4756
d9ae938f
LC
4757This is the declarative counterpart of the @code{interned-file} monadic
4758procedure (@pxref{The Store Monad, @code{interned-file}}).
4759@end deffn
4760
558e8b11
LC
4761@deffn {Scheme Procedure} plain-file @var{name} @var{content}
4762Return an object representing a text file called @var{name} with the given
4763@var{content} (a string) to be added to the store.
4764
4765This is the declarative counterpart of @code{text-file}.
4766@end deffn
4767
91937029 4768@deffn {Scheme Procedure} computed-file @var{name} @var{gexp} @
a769bffb 4769 [#:options '(#:local-build? #t)]
91937029 4770Return an object representing the store item @var{name}, a file or
a769bffb 4771directory computed by @var{gexp}. @var{options}
91937029
LC
4772is a list of additional arguments to pass to @code{gexp->derivation}.
4773
4774This is the declarative counterpart of @code{gexp->derivation}.
4775@end deffn
4776
21b679f6
LC
4777@deffn {Monadic Procedure} gexp->script @var{name} @var{exp}
4778Return an executable script @var{name} that runs @var{exp} using
9c14a487 4779@var{guile}, with @var{exp}'s imported modules in its search path.
21b679f6
LC
4780
4781The example below builds a script that simply invokes the @command{ls}
4782command:
4783
4784@example
4785(use-modules (guix gexp) (gnu packages base))
4786
4787(gexp->script "list-files"
a9e5e92f 4788 #~(execl #$(file-append coreutils "/bin/ls")
21b679f6
LC
4789 "ls"))
4790@end example
4791
4792When ``running'' it through the store (@pxref{The Store Monad,
e20fd1bf 4793@code{run-with-store}}), we obtain a derivation that produces an
21b679f6
LC
4794executable file @file{/gnu/store/@dots{}-list-files} along these lines:
4795
4796@example
4797#!/gnu/store/@dots{}-guile-2.0.11/bin/guile -ds
4798!#
a9e5e92f 4799(execl "/gnu/store/@dots{}-coreutils-8.22"/bin/ls" "ls")
21b679f6
LC
4800@end example
4801@end deffn
4802
15a01c72 4803@deffn {Scheme Procedure} program-file @var{name} @var{exp} @
9c14a487 4804 [#:guile #f]
15a01c72
LC
4805Return an object representing the executable store item @var{name} that
4806runs @var{gexp}. @var{guile} is the Guile package used to execute that
9c14a487 4807script.
15a01c72
LC
4808
4809This is the declarative counterpart of @code{gexp->script}.
4810@end deffn
4811
2b418579
LC
4812@deffn {Monadic Procedure} gexp->file @var{name} @var{exp} @
4813 [#:set-load-path? #t]
21b679f6 4814Return a derivation that builds a file @var{name} containing @var{exp}.
2b418579
LC
4815When @var{set-load-path?} is true, emit code in the resulting file to
4816set @code{%load-path} and @code{%load-compiled-path} to honor
4817@var{exp}'s imported modules.
21b679f6
LC
4818
4819The resulting file holds references to all the dependencies of @var{exp}
4820or a subset thereof.
4821@end deffn
1ed19464 4822
e1c153e0
LC
4823@deffn {Scheme Procedure} scheme-file @var{name} @var{exp}
4824Return an object representing the Scheme file @var{name} that contains
4825@var{exp}.
4826
4827This is the declarative counterpart of @code{gexp->file}.
4828@end deffn
4829
1ed19464
LC
4830@deffn {Monadic Procedure} text-file* @var{name} @var{text} @dots{}
4831Return as a monadic value a derivation that builds a text file
4832containing all of @var{text}. @var{text} may list, in addition to
d9ae938f
LC
4833strings, objects of any type that can be used in a gexp: packages,
4834derivations, local file objects, etc. The resulting store file holds
4835references to all these.
1ed19464
LC
4836
4837This variant should be preferred over @code{text-file} anytime the file
4838to create will reference items from the store. This is typically the
4839case when building a configuration file that embeds store file names,
4840like this:
4841
4842@example
4843(define (profile.sh)
4844 ;; Return the name of a shell script in the store that
4845 ;; initializes the 'PATH' environment variable.
4846 (text-file* "profile.sh"
4847 "export PATH=" coreutils "/bin:"
4848 grep "/bin:" sed "/bin\n"))
4849@end example
4850
4851In this example, the resulting @file{/gnu/store/@dots{}-profile.sh} file
b7899749 4852will reference @var{coreutils}, @var{grep}, and @var{sed}, thereby
1ed19464
LC
4853preventing them from being garbage-collected during its lifetime.
4854@end deffn
21b679f6 4855
b751cde3
LC
4856@deffn {Scheme Procedure} mixed-text-file @var{name} @var{text} @dots{}
4857Return an object representing store file @var{name} containing
4858@var{text}. @var{text} is a sequence of strings and file-like objects,
4859as in:
4860
4861@example
4862(mixed-text-file "profile"
4863 "export PATH=" coreutils "/bin:" grep "/bin")
4864@end example
4865
4866This is the declarative counterpart of @code{text-file*}.
4867@end deffn
4868
a9e5e92f
LC
4869@deffn {Scheme Procedure} file-append @var{obj} @var{suffix} @dots{}
4870Return a file-like object that expands to the concatenation of @var{obj}
4871and @var{suffix}, where @var{obj} is a lowerable object and each
4872@var{suffix} is a string.
4873
4874As an example, consider this gexp:
4875
4876@example
4877(gexp->script "run-uname"
4878 #~(system* #$(file-append coreutils
4879 "/bin/uname")))
4880@end example
4881
4882The same effect could be achieved with:
4883
4884@example
4885(gexp->script "run-uname"
4886 #~(system* (string-append #$coreutils
4887 "/bin/uname")))
4888@end example
4889
4890There is one difference though: in the @code{file-append} case, the
4891resulting script contains the absolute file name as a string, whereas in
4892the second case, the resulting script contains a @code{(string-append
4893@dots{})} expression to construct the file name @emph{at run time}.
4894@end deffn
4895
4896
21b679f6
LC
4897Of course, in addition to gexps embedded in ``host'' code, there are
4898also modules containing build tools. To make it clear that they are
4899meant to be used in the build stratum, these modules are kept in the
4900@code{(guix build @dots{})} name space.
4901
c2b84676
LC
4902@cindex lowering, of high-level objects in gexps
4903Internally, high-level objects are @dfn{lowered}, using their compiler,
4904to either derivations or store items. For instance, lowering a package
4905yields a derivation, and lowering a @code{plain-file} yields a store
4906item. This is achieved using the @code{lower-object} monadic procedure.
4907
4908@deffn {Monadic Procedure} lower-object @var{obj} [@var{system}] @
4909 [#:target #f]
4910Return as a value in @var{%store-monad} the derivation or store item
4911corresponding to @var{obj} for @var{system}, cross-compiling for
4912@var{target} if @var{target} is true. @var{obj} must be an object that
4913has an associated gexp compiler, such as a @code{<package>}.
4914@end deffn
4915
21b679f6 4916
568717fd
LC
4917@c *********************************************************************
4918@node Utilities
4919@chapter Utilities
4920
6f773606
LC
4921This section describes Guix command-line utilities. Some of them are
4922primarily targeted at developers and users who write new package
4923definitions, while others are more generally useful. They complement
4924the Scheme programming interface of Guix in a convenient way.
210cc920 4925
568717fd 4926@menu
37166310 4927* Invoking guix build:: Building packages from the command line.
39bee8a2 4928* Invoking guix edit:: Editing package definitions.
210cc920 4929* Invoking guix download:: Downloading a file and printing its hash.
37166310 4930* Invoking guix hash:: Computing the cryptographic hash of a file.
2f7d2d91 4931* Invoking guix import:: Importing package definitions.
37166310 4932* Invoking guix refresh:: Updating package definitions.
b4f5e0e8 4933* Invoking guix lint:: Finding errors in package definitions.
fcc58db6 4934* Invoking guix size:: Profiling disk usage.
88856916 4935* Invoking guix graph:: Visualizing the graph of packages.
372c4bbc 4936* Invoking guix environment:: Setting up development environments.
aff8ce7c 4937* Invoking guix publish:: Sharing substitutes.
d23c20f1 4938* Invoking guix challenge:: Challenging substitute servers.
f11c444d 4939* Invoking guix copy:: Copying to and from a remote store.
32efa254 4940* Invoking guix container:: Process isolation.
585347d7 4941* Invoking guix weather:: Assessing substitute availability.
568717fd
LC
4942@end menu
4943
e49951eb
MW
4944@node Invoking guix build
4945@section Invoking @command{guix build}
568717fd 4946
e32171ee
JD
4947@cindex package building
4948@cindex @command{guix build}
e49951eb 4949The @command{guix build} command builds packages or derivations and
6798a8e4
LC
4950their dependencies, and prints the resulting store paths. Note that it
4951does not modify the user's profile---this is the job of the
e49951eb 4952@command{guix package} command (@pxref{Invoking guix package}). Thus,
6798a8e4
LC
4953it is mainly useful for distribution developers.
4954
4955The general syntax is:
c78bd12b
LC
4956
4957@example
e49951eb 4958guix build @var{options} @var{package-or-derivation}@dots{}
c78bd12b
LC
4959@end example
4960
f97c9175 4961As an example, the following command builds the latest versions of Emacs
ccd7158d
LC
4962and of Guile, displays their build logs, and finally displays the
4963resulting directories:
4964
4965@example
4966guix build emacs guile
4967@end example
4968
4969Similarly, the following command builds all the available packages:
4970
4971@example
5284339d 4972guix build --quiet --keep-going \
ccd7158d
LC
4973 `guix package -A | cut -f1,2 --output-delimiter=@@`
4974@end example
4975
c78bd12b 4976@var{package-or-derivation} may be either the name of a package found in
5401dd75 4977the software distribution such as @code{coreutils} or
e1a65ae5 4978@code{coreutils@@8.20}, or a derivation such as
834129e0 4979@file{/gnu/store/@dots{}-coreutils-8.19.drv}. In the former case, a
e7f34eb0
LC
4980package with the corresponding name (and optionally version) is searched
4981for among the GNU distribution modules (@pxref{Package Modules}).
4982
4983Alternatively, the @code{--expression} option may be used to specify a
4984Scheme expression that evaluates to a package; this is useful when
b7899749 4985disambiguating among several same-named packages or package variants is
e7f34eb0 4986needed.
c78bd12b 4987
ccd7158d
LC
4988There may be zero or more @var{options}. The available options are
4989described in the subsections below.
4990
4991@menu
4992* Common Build Options:: Build options for most commands.
f11c444d 4993* Package Transformation Options:: Creating variants of packages.
ccd7158d 4994* Additional Build Options:: Options specific to 'guix build'.
10f4353d 4995* Debugging Build Failures:: Real life packaging experience.
ccd7158d
LC
4996@end menu
4997
4998@node Common Build Options
4999@subsection Common Build Options
5000
5001A number of options that control the build process are common to
5002@command{guix build} and other commands that can spawn builds, such as
5003@command{guix package} or @command{guix archive}. These are the
5004following:
5005
5006@table @code
5007
5008@item --load-path=@var{directory}
5009@itemx -L @var{directory}
5010Add @var{directory} to the front of the package module search path
5011(@pxref{Package Modules}).
5012
5013This allows users to define their own packages and make them visible to
5014the command-line tools.
5015
5016@item --keep-failed
5017@itemx -K
b7899749 5018Keep the build tree of failed builds. Thus, if a build fails, its build
ccd7158d
LC
5019tree is kept under @file{/tmp}, in a directory whose name is shown at
5020the end of the build log. This is useful when debugging build issues.
fc06b15e
AP
5021@xref{Debugging Build Failures}, for tips and tricks on how to debug
5022build issues.
ccd7158d
LC
5023
5024@item --keep-going
5025@itemx -k
5026Keep going when some of the derivations fail to build; return only once
5027all the builds have either completed or failed.
5028
5029The default behavior is to stop as soon as one of the specified
5030derivations has failed.
5031
5032@item --dry-run
5033@itemx -n
5034Do not build the derivations.
5035
5036@item --fallback
5037When substituting a pre-built binary fails, fall back to building
5038packages locally.
5039
5040@item --substitute-urls=@var{urls}
5041@anchor{client-substitute-urls}
5042Consider @var{urls} the whitespace-separated list of substitute source
5043URLs, overriding the default list of URLs of @command{guix-daemon}
5044(@pxref{daemon-substitute-urls,, @command{guix-daemon} URLs}).
5045
5046This means that substitutes may be downloaded from @var{urls}, provided
5047they are signed by a key authorized by the system administrator
5048(@pxref{Substitutes}).
5049
71e2065a
LC
5050When @var{urls} is the empty string, substitutes are effectively
5051disabled.
5052
ccd7158d
LC
5053@item --no-substitutes
5054Do not use substitutes for build products. That is, always build things
5055locally instead of allowing downloads of pre-built binaries
5056(@pxref{Substitutes}).
5057
7573d30f
LC
5058@item --no-grafts
5059Do not ``graft'' packages. In practice, this means that package updates
5060available as grafts are not applied. @xref{Security Updates}, for more
5061information on grafts.
5062
ccd7158d
LC
5063@item --rounds=@var{n}
5064Build each derivation @var{n} times in a row, and raise an error if
5065consecutive build results are not bit-for-bit identical.
5066
5067This is a useful way to detect non-deterministic builds processes.
5068Non-deterministic build processes are a problem because they make it
5069practically impossible for users to @emph{verify} whether third-party
5070binaries are genuine. @xref{Invoking guix challenge}, for more.
5071
5072Note that, currently, the differing build results are not kept around,
5073so you will have to manually investigate in case of an error---e.g., by
e66d1f59
ML
5074stashing one of the build results with @code{guix archive --export}
5075(@pxref{Invoking guix archive}), then rebuilding, and finally comparing
5076the two results.
ccd7158d
LC
5077
5078@item --no-build-hook
f97c9175 5079Do not attempt to offload builds @i{via} the ``build hook'' of the daemon
ccd7158d
LC
5080(@pxref{Daemon Offload Setup}). That is, always build things locally
5081instead of offloading builds to remote machines.
5082
5083@item --max-silent-time=@var{seconds}
5084When the build or substitution process remains silent for more than
5085@var{seconds}, terminate it and report a build failure.
5086
2ca9f51e
LC
5087By default, the daemon's setting is honored (@pxref{Invoking
5088guix-daemon, @code{--max-silent-time}}).
5089
ccd7158d
LC
5090@item --timeout=@var{seconds}
5091Likewise, when the build or substitution process lasts for more than
5092@var{seconds}, terminate it and report a build failure.
5093
2ca9f51e
LC
5094By default, the daemon's setting is honored (@pxref{Invoking
5095guix-daemon, @code{--timeout}}).
ccd7158d
LC
5096
5097@item --verbosity=@var{level}
5098Use the given verbosity level. @var{level} must be an integer between 0
5099and 5; higher means more verbose output. Setting a level of 4 or more
5100may be helpful when debugging setup issues with the build daemon.
5101
5102@item --cores=@var{n}
5103@itemx -c @var{n}
5104Allow the use of up to @var{n} CPU cores for the build. The special
5105value @code{0} means to use as many CPU cores as available.
5106
5107@item --max-jobs=@var{n}
5108@itemx -M @var{n}
5109Allow at most @var{n} build jobs in parallel. @xref{Invoking
5110guix-daemon, @code{--max-jobs}}, for details about this option and the
5111equivalent @command{guix-daemon} option.
5112
5113@end table
5114
5115Behind the scenes, @command{guix build} is essentially an interface to
5116the @code{package-derivation} procedure of the @code{(guix packages)}
5117module, and to the @code{build-derivations} procedure of the @code{(guix
5118derivations)} module.
5119
5120In addition to options explicitly passed on the command line,
5121@command{guix build} and other @command{guix} commands that support
5122building honor the @code{GUIX_BUILD_OPTIONS} environment variable.
5123
5124@defvr {Environment Variable} GUIX_BUILD_OPTIONS
5125Users can define this variable to a list of command line options that
5126will automatically be used by @command{guix build} and other
5127@command{guix} commands that can perform builds, as in the example
5128below:
5129
5130@example
5131$ export GUIX_BUILD_OPTIONS="--no-substitutes -c 2 -L /foo/bar"
5132@end example
5133
5134These options are parsed independently, and the result is appended to
5135the parsed command-line options.
5136@end defvr
5137
88ad6ded
LC
5138
5139@node Package Transformation Options
5140@subsection Package Transformation Options
5141
5142@cindex package variants
5143Another set of command-line options supported by @command{guix build}
b8638f03 5144and also @command{guix package} are @dfn{package transformation
f97c9175 5145options}. These are options that make it possible to define @dfn{package
b8638f03
LC
5146variants}---for instance, packages built from different source code.
5147This is a convenient way to create customized packages on the fly
5148without having to type in the definitions of package variants
5149(@pxref{Defining Packages}).
88ad6ded
LC
5150
5151@table @code
5152
5153@item --with-source=@var{source}
5154Use @var{source} as the source of the corresponding package.
5155@var{source} must be a file name or a URL, as for @command{guix
5156download} (@pxref{Invoking guix download}).
5157
f97c9175
AE
5158The ``corresponding package'' is taken to be the one specified on the
5159command line the name of which matches the base of @var{source}---e.g.,
5160if @var{source} is @code{/src/guile-2.0.10.tar.gz}, the corresponding
88ad6ded 5161package is @code{guile}. Likewise, the version string is inferred from
f97c9175 5162@var{source}; in the previous example, it is @code{2.0.10}.
88ad6ded
LC
5163
5164This option allows users to try out versions of packages other than the
5165one provided by the distribution. The example below downloads
5166@file{ed-1.7.tar.gz} from a GNU mirror and uses that as the source for
5167the @code{ed} package:
5168
5169@example
5170guix build ed --with-source=mirror://gnu/ed/ed-1.7.tar.gz
5171@end example
5172
5173As a developer, @code{--with-source} makes it easy to test release
5174candidates:
5175
5176@example
5177guix build guile --with-source=../guile-2.0.9.219-e1bb7.tar.xz
5178@end example
5179
5180@dots{} or to build from a checkout in a pristine environment:
5181
5182@example
5183$ git clone git://git.sv.gnu.org/guix.git
5184$ guix build guix --with-source=./guix
5185@end example
5186
47c0f92c
LC
5187@item --with-input=@var{package}=@var{replacement}
5188Replace dependency on @var{package} by a dependency on
5189@var{replacement}. @var{package} must be a package name, and
5190@var{replacement} must be a package specification such as @code{guile}
5191or @code{guile@@1.8}.
5192
f97c9175 5193For instance, the following command builds Guix, but replaces its
47c0f92c 5194dependency on the current stable version of Guile with a dependency on
f6396d86 5195the legacy version of Guile, @code{guile@@2.0}:
47c0f92c
LC
5196
5197@example
f6396d86 5198guix build --with-input=guile=guile@@2.0 guix
47c0f92c
LC
5199@end example
5200
5201This is a recursive, deep replacement. So in this example, both
5202@code{guix} and its dependency @code{guile-json} (which also depends on
f6396d86 5203@code{guile}) get rebuilt against @code{guile@@2.0}.
47c0f92c 5204
2a75b0b6
LC
5205This is implemented using the @code{package-input-rewriting} Scheme
5206procedure (@pxref{Defining Packages, @code{package-input-rewriting}}).
645b9df8
LC
5207
5208@item --with-graft=@var{package}=@var{replacement}
5209This is similar to @code{--with-input} but with an important difference:
9b4ec573 5210instead of rebuilding the whole dependency chain, @var{replacement} is
645b9df8
LC
5211built and then @dfn{grafted} onto the binaries that were initially
5212referring to @var{package}. @xref{Security Updates}, for more
5213information on grafts.
5214
5215For example, the command below grafts version 3.5.4 of GnuTLS onto Wget
5216and all its dependencies, replacing references to the version of GnuTLS
5217they currently refer to:
5218
5219@example
5220guix build --with-graft=gnutls=gnutls@@3.5.4 wget
5221@end example
5222
5223This has the advantage of being much faster than rebuilding everything.
5224But there is a caveat: it works if and only if @var{package} and
5225@var{replacement} are strictly compatible---for example, if they provide
5226a library, the application binary interface (ABI) of those libraries
5227must be compatible. If @var{replacement} is somehow incompatible with
5228@var{package}, then the resulting package may be unusable. Use with
5229care!
5230
88ad6ded
LC
5231@end table
5232
ccd7158d
LC
5233@node Additional Build Options
5234@subsection Additional Build Options
5235
5236The command-line options presented below are specific to @command{guix
5237build}.
c78bd12b
LC
5238
5239@table @code
5240
5284339d
LC
5241@item --quiet
5242@itemx -q
5243Build quietly, without displaying the build log. Upon completion, the
5244build log is kept in @file{/var} (or similar) and can always be
5245retrieved using the @option{--log-file} option.
5246
34a1783f
DT
5247@item --file=@var{file}
5248@itemx -f @var{file}
5249
5250Build the package or derivation that the code within @var{file}
5251evaluates to.
5252
5253As an example, @var{file} might contain a package definition like this
5254(@pxref{Defining Packages}):
5255
5256@example
5257@verbatiminclude package-hello.scm
5258@end example
5259
c78bd12b
LC
5260@item --expression=@var{expr}
5261@itemx -e @var{expr}
ac5de156 5262Build the package or derivation @var{expr} evaluates to.
c78bd12b 5263
5401dd75 5264For example, @var{expr} may be @code{(@@ (gnu packages guile)
c78bd12b
LC
5265guile-1.8)}, which unambiguously designates this specific variant of
5266version 1.8 of Guile.
5267
f97c9175 5268Alternatively, @var{expr} may be a G-expression, in which case it is used
56b82106
LC
5269as a build program passed to @code{gexp->derivation}
5270(@pxref{G-Expressions}).
5271
5272Lastly, @var{expr} may refer to a zero-argument monadic procedure
ac5de156
LC
5273(@pxref{The Store Monad}). The procedure must return a derivation as a
5274monadic value, which is then passed through @code{run-with-store}.
5275
c78bd12b
LC
5276@item --source
5277@itemx -S
f97c9175 5278Build the source derivations of the packages, rather than the packages
c78bd12b
LC
5279themselves.
5280
e49951eb 5281For instance, @code{guix build -S gcc} returns something like
f97c9175
AE
5282@file{/gnu/store/@dots{}-gcc-4.7.2.tar.bz2}, which is the GCC
5283source tarball.
c78bd12b 5284
f9cc8971 5285The returned source tarball is the result of applying any patches and
f97c9175 5286code snippets specified in the package @code{origin} (@pxref{Defining
f9cc8971
LC
5287Packages}).
5288
2cdfe13d
EB
5289@item --sources
5290Fetch and return the source of @var{package-or-derivation} and all their
5291dependencies, recursively. This is a handy way to obtain a local copy
5292of all the source code needed to build @var{packages}, allowing you to
5293eventually build them even without network access. It is an extension
5294of the @code{--source} option and can accept one of the following
5295optional argument values:
5296
5297@table @code
5298@item package
5299This value causes the @code{--sources} option to behave in the same way
5300as the @code{--source} option.
5301
5302@item all
f97c9175
AE
5303Build the source derivations of all packages, including any source that
5304might be listed as @code{inputs}. This is the default value.
2cdfe13d
EB
5305
5306@example
5307$ guix build --sources tzdata
5308The following derivations will be built:
5309 /gnu/store/@dots{}-tzdata2015b.tar.gz.drv
5310 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
5311@end example
5312
5313@item transitive
f97c9175
AE
5314Build the source derivations of all packages, as well of all transitive
5315inputs to the packages. This can be used e.g. to
2cdfe13d
EB
5316prefetch package source for later offline building.
5317
5318@example
5319$ guix build --sources=transitive tzdata
5320The following derivations will be built:
5321 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
5322 /gnu/store/@dots{}-findutils-4.4.2.tar.xz.drv
5323 /gnu/store/@dots{}-grep-2.21.tar.xz.drv
5324 /gnu/store/@dots{}-coreutils-8.23.tar.xz.drv
5325 /gnu/store/@dots{}-make-4.1.tar.xz.drv
5326 /gnu/store/@dots{}-bash-4.3.tar.xz.drv
5327@dots{}
5328@end example
5329
5330@end table
5331
c78bd12b
LC
5332@item --system=@var{system}
5333@itemx -s @var{system}
5334Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of
f97c9175 5335the system type of the build host.
c78bd12b
LC
5336
5337An example use of this is on Linux-based systems, which can emulate
5338different personalities. For instance, passing
5339@code{--system=i686-linux} on an @code{x86_64-linux} system allows users
5340to build packages in a complete 32-bit environment.
5341
e55ec43d
LC
5342@item --target=@var{triplet}
5343@cindex cross-compilation
5344Cross-build for @var{triplet}, which must be a valid GNU triplet, such
5461115e
LC
5345as @code{"mips64el-linux-gnu"} (@pxref{Specifying target triplets, GNU
5346configuration triplets,, autoconf, Autoconf}).
e55ec43d 5347
a8d65643
LC
5348@anchor{build-check}
5349@item --check
5350@cindex determinism, checking
5351@cindex reproducibility, checking
5352Rebuild @var{package-or-derivation}, which are already available in the
5353store, and raise an error if the build results are not bit-for-bit
5354identical.
5355
f97c9175
AE
5356This mechanism allows you to check whether previously installed
5357substitutes are genuine (@pxref{Substitutes}), or whether the build result
5358of a package is deterministic. @xref{Invoking guix challenge}, for more
a8d65643
LC
5359background information and tools.
5360
7f3b2510
ED
5361When used in conjunction with @option{--keep-failed}, the differing
5362output is kept in the store, under @file{/gnu/store/@dots{}-check}.
5363This makes it easy to look for differences between the two results.
5364
6da5bb7b
LC
5365@item --repair
5366@cindex repairing store items
5367@cindex corruption, recovering from
5368Attempt to repair the specified store items, if they are corrupt, by
5369re-downloading or rebuilding them.
5370
5371This operation is not atomic and thus restricted to @code{root}.
5372
c78bd12b
LC
5373@item --derivations
5374@itemx -d
5375Return the derivation paths, not the output paths, of the given
5376packages.
5377
70ee5642
LC
5378@item --root=@var{file}
5379@itemx -r @var{file}
5380Make @var{file} a symlink to the result, and register it as a garbage
5381collector root.
5382
5383@item --log-file
3f208ad7 5384Return the build log file names or URLs for the given
f97c9175 5385@var{package-or-derivation}, or raise an error if build logs are
70ee5642
LC
5386missing.
5387
5388This works regardless of how packages or derivations are specified. For
5389instance, the following invocations are equivalent:
5390
5391@example
5392guix build --log-file `guix build -d guile`
5393guix build --log-file `guix build guile`
5394guix build --log-file guile
5395guix build --log-file -e '(@@ (gnu packages guile) guile-2.0)'
5396@end example
5397
3f208ad7
LC
5398If a log is unavailable locally, and unless @code{--no-substitutes} is
5399passed, the command looks for a corresponding log on one of the
5400substitute servers (as specified with @code{--substitute-urls}.)
70ee5642 5401
f97c9175
AE
5402So for instance, imagine you want to see the build log of GDB on MIPS,
5403but you are actually on an @code{x86_64} machine:
3f208ad7
LC
5404
5405@example
a01ad638 5406$ guix build --log-file gdb -s mips64el-linux
df061d07 5407https://hydra.gnu.org/log/@dots{}-gdb-7.10
3f208ad7
LC
5408@end example
5409
5410You can freely access a huge library of build logs!
70ee5642
LC
5411@end table
5412
fc06b15e
AP
5413@node Debugging Build Failures
5414@subsection Debugging Build Failures
5415
5416@cindex build failures, debugging
5417When defining a new package (@pxref{Defining Packages}), you will
5418probably find yourself spending some time debugging and tweaking the
5419build until it succeeds. To do that, you need to operate the build
5420commands yourself in an environment as close as possible to the one the
5421build daemon uses.
5422
5423To that end, the first thing to do is to use the @option{--keep-failed}
5424or @option{-K} option of @command{guix build}, which will keep the
5425failed build tree in @file{/tmp} or whatever directory you specified as
5426@code{TMPDIR} (@pxref{Invoking guix build, @code{--keep-failed}}).
5427
5428From there on, you can @command{cd} to the failed build tree and source
5429the @file{environment-variables} file, which contains all the
5430environment variable definitions that were in place when the build
5431failed. So let's say you're debugging a build failure in package
5432@code{foo}; a typical session would look like this:
5433
5434@example
5435$ guix build foo -K
5436@dots{} @i{build fails}
5437$ cd /tmp/guix-build-foo.drv-0
5438$ source ./environment-variables
5439$ cd foo-1.2
5440@end example
5441
5442Now, you can invoke commands as if you were the daemon (almost) and
5443troubleshoot your build process.
5444
5445Sometimes it happens that, for example, a package's tests pass when you
5446run them manually but they fail when the daemon runs them. This can
5447happen because the daemon runs builds in containers where, unlike in our
5448environment above, network access is missing, @file{/bin/sh} does not
5449exist, etc. (@pxref{Build Environment Setup}).
5450
5451In such cases, you may need to run inspect the build process from within
5452a container similar to the one the build daemon creates:
5453
5454@example
5455$ guix build -K foo
5456@dots{}
5457$ cd /tmp/guix-build-foo.drv-0
fa511e29 5458$ guix environment --no-grafts -C foo --ad-hoc strace gdb
fc06b15e
AP
5459[env]# source ./environment-variables
5460[env]# cd foo-1.2
5461@end example
5462
5463Here, @command{guix environment -C} creates a container and spawns a new
5464shell in it (@pxref{Invoking guix environment}). The @command{--ad-hoc
5465strace gdb} part adds the @command{strace} and @command{gdb} commands to
fa511e29
LC
5466the container, which would may find handy while debugging. The
5467@option{--no-grafts} option makes sure we get the exact same
5468environment, with ungrafted packages (@pxref{Security Updates}, for more
5469info on grafts).
fc06b15e
AP
5470
5471To get closer to a container like that used by the build daemon, we can
5472remove @file{/bin/sh}:
5473
5474@example
5475[env]# rm /bin/sh
5476@end example
5477
5478(Don't worry, this is harmless: this is all happening in the throw-away
5479container created by @command{guix environment}.)
5480
5481The @command{strace} command is probably not in the search path, but we
5482can run:
5483
5484@example
5485[env]# $GUIX_ENVIRONMENT/bin/strace -f -o log make check
5486@end example
5487
5488In this way, not only you will have reproduced the environment variables
5489the daemon uses, you will also be running the build process in a container
5490similar to the one the daemon uses.
5491
16eb115e 5492
39bee8a2
LC
5493@node Invoking guix edit
5494@section Invoking @command{guix edit}
5495
e32171ee 5496@cindex @command{guix edit}
39bee8a2
LC
5497@cindex package definition, editing
5498So many packages, so many source files! The @command{guix edit} command
424a323e
GC
5499facilitates the life of users and packagers by pointing their editor at
5500the source file containing the definition of the specified packages.
5501For instance:
39bee8a2
LC
5502
5503@example
7b9a66e5 5504guix edit gcc@@4.9 vim
39bee8a2
LC
5505@end example
5506
5507@noindent
6237b9fa 5508launches the program specified in the @code{VISUAL} or in the
424a323e 5509@code{EDITOR} environment variable to view the recipe of GCC@tie{}4.9.3
6237b9fa 5510and that of Vim.
39bee8a2 5511
424a323e
GC
5512If you are using a Guix Git checkout (@pxref{Building from Git}), or
5513have created your own packages on @code{GUIX_PACKAGE_PATH}
5514(@pxref{Defining Packages}), you will be able to edit the package
5515recipes. Otherwise, you will be able to examine the read-only recipes
5516for packages currently in the store.
5517
39bee8a2 5518
210cc920
LC
5519@node Invoking guix download
5520@section Invoking @command{guix download}
5521
e32171ee
JD
5522@cindex @command{guix download}
5523@cindex downloading package sources
210cc920 5524When writing a package definition, developers typically need to download
f97c9175 5525a source tarball, compute its SHA256 hash, and write that
210cc920
LC
5526hash in the package definition (@pxref{Defining Packages}). The
5527@command{guix download} tool helps with this task: it downloads a file
5528from the given URI, adds it to the store, and prints both its file name
5529in the store and its SHA256 hash.
5530
5531The fact that the downloaded file is added to the store saves bandwidth:
5532when the developer eventually tries to build the newly defined package
5533with @command{guix build}, the source tarball will not have to be
5534downloaded again because it is already in the store. It is also a
5535convenient way to temporarily stash files, which may be deleted
5536eventually (@pxref{Invoking guix gc}).
5537
5538The @command{guix download} command supports the same URIs as used in
5539package definitions. In particular, it supports @code{mirror://} URIs.
5540@code{https} URIs (HTTP over TLS) are supported @emph{provided} the
5541Guile bindings for GnuTLS are available in the user's environment; when
537c8bb3
LC
5542they are not available, an error is raised. @xref{Guile Preparations,
5543how to install the GnuTLS bindings for Guile,, gnutls-guile,
5544GnuTLS-Guile}, for more information.
210cc920 5545
bc3c41ce
LC
5546@command{guix download} verifies HTTPS server certificates by loading
5547the certificates of X.509 authorities from the directory pointed to by
5548the @code{SSL_CERT_DIR} environment variable (@pxref{X.509
64b8695c 5549Certificates}), unless @option{--no-check-certificate} is used.
bc3c41ce 5550
64b8695c 5551The following options are available:
210cc920
LC
5552
5553@table @code
5554@item --format=@var{fmt}
5555@itemx -f @var{fmt}
5556Write the hash in the format specified by @var{fmt}. For more
081145cf 5557information on the valid values for @var{fmt}, @pxref{Invoking guix hash}.
64b8695c
LC
5558
5559@item --no-check-certificate
5560Do not validate the X.509 certificates of HTTPS servers.
5561
5562When using this option, you have @emph{absolutely no guarantee} that you
5563are communicating with the authentic server responsible for the given
5564URL, which makes you vulnerable to ``man-in-the-middle'' attacks.
5565
1bcc87bb
LC
5566@item --output=@var{file}
5567@itemx -o @var{file}
5568Save the downloaded file to @var{file} instead of adding it to the
5569store.
210cc920
LC
5570@end table
5571
6c365eca
NK
5572@node Invoking guix hash
5573@section Invoking @command{guix hash}
5574
e32171ee 5575@cindex @command{guix hash}
210cc920 5576The @command{guix hash} command computes the SHA256 hash of a file.
6c365eca
NK
5577It is primarily a convenience tool for anyone contributing to the
5578distribution: it computes the cryptographic hash of a file, which can be
5579used in the definition of a package (@pxref{Defining Packages}).
5580
5581The general syntax is:
5582
5583@example
5584guix hash @var{option} @var{file}
5585@end example
5586
343dc117
LC
5587When @var{file} is @code{-} (a hyphen), @command{guix hash} computes the
5588hash of data read from standard input. @command{guix hash} has the
5589following options:
6c365eca
NK
5590
5591@table @code
5592
5593@item --format=@var{fmt}
5594@itemx -f @var{fmt}
210cc920 5595Write the hash in the format specified by @var{fmt}.
6c365eca
NK
5596
5597Supported formats: @code{nix-base32}, @code{base32}, @code{base16}
5598(@code{hex} and @code{hexadecimal} can be used as well).
5599
5600If the @option{--format} option is not specified, @command{guix hash}
5601will output the hash in @code{nix-base32}. This representation is used
5602in the definitions of packages.
5603
3140f2df
LC
5604@item --recursive
5605@itemx -r
5606Compute the hash on @var{file} recursively.
5607
5608In this case, the hash is computed on an archive containing @var{file},
f97c9175
AE
5609including its children if it is a directory. Some of the metadata of
5610@var{file} is part of the archive; for instance, when @var{file} is a
3140f2df 5611regular file, the hash is different depending on whether @var{file} is
f97c9175 5612executable or not. Metadata such as time stamps has no impact on the
3140f2df
LC
5613hash (@pxref{Invoking guix archive}).
5614@c FIXME: Replace xref above with xref to an ``Archive'' section when
5615@c it exists.
5616
392a4e12
JN
5617@item --exclude-vcs
5618@itemx -x
5619When combined with @option{--recursive}, exclude version control system
5620directories (@file{.bzr}, @file{.git}, @file{.hg}, etc.)
5621
db97a03a
LC
5622@vindex git-fetch
5623As an example, here is how you would compute the hash of a Git checkout,
5624which is useful when using the @code{git-fetch} method (@pxref{origin
5625Reference}):
5626
5627@example
5628$ git clone http://example.org/foo.git
5629$ cd foo
392a4e12 5630$ guix hash -rx .
db97a03a 5631@end example
6c365eca
NK
5632@end table
5633
2f7d2d91
LC
5634@node Invoking guix import
5635@section Invoking @command{guix import}
5636
5637@cindex importing packages
5638@cindex package import
5639@cindex package conversion
e32171ee 5640@cindex Invoking @command{guix import}
f97c9175
AE
5641The @command{guix import} command is useful for people who would like to
5642add a package to the distribution with as little work as
5643possible---a legitimate demand. The command knows of a few
5644repositories from which it can ``import'' package metadata. The result
2f7d2d91
LC
5645is a package definition, or a template thereof, in the format we know
5646(@pxref{Defining Packages}).
5647
5648The general syntax is:
5649
5650@example
5651guix import @var{importer} @var{options}@dots{}
5652@end example
5653
5654@var{importer} specifies the source from which to import package
f97c9175 5655metadata, and @var{options} specifies a package identifier and other
2f7d2d91
LC
5656options specific to @var{importer}. Currently, the available
5657``importers'' are:
5658
5659@table @code
5660@item gnu
f97c9175 5661Import metadata for the given GNU package. This provides a template
2f7d2d91
LC
5662for the latest version of that GNU package, including the hash of its
5663source tarball, and its canonical synopsis and description.
5664
f97c9175 5665Additional information such as the package dependencies and its
2f7d2d91
LC
5666license needs to be figured out manually.
5667
5668For example, the following command returns a package definition for
5669GNU@tie{}Hello:
5670
5671@example
5672guix import gnu hello
5673@end example
5674
5675Specific command-line options are:
5676
5677@table @code
5678@item --key-download=@var{policy}
5679As for @code{guix refresh}, specify the policy to handle missing OpenPGP
f97c9175 5680keys when verifying the package signature. @xref{Invoking guix
2f7d2d91
LC
5681refresh, @code{--key-download}}.
5682@end table
5683
5684@item pypi
5685@cindex pypi
f97c9175 5686Import metadata from the @uref{https://pypi.python.org/, Python Package
2f7d2d91
LC
5687Index}@footnote{This functionality requires Guile-JSON to be installed.
5688@xref{Requirements}.}. Information is taken from the JSON-formatted
5689description available at @code{pypi.python.org} and usually includes all
266785d2
CR
5690the relevant information, including package dependencies. For maximum
5691efficiency, it is recommended to install the @command{unzip} utility, so
5692that the importer can unzip Python wheels and gather data from them.
2f7d2d91 5693
f97c9175 5694The command below imports metadata for the @code{itsdangerous} Python
2f7d2d91
LC
5695package:
5696
5697@example
5698guix import pypi itsdangerous
5699@end example
5700
3aae8145
DT
5701@item gem
5702@cindex gem
f97c9175 5703Import metadata from @uref{https://rubygems.org/,
3aae8145
DT
5704RubyGems}@footnote{This functionality requires Guile-JSON to be
5705installed. @xref{Requirements}.}. Information is taken from the
5706JSON-formatted description available at @code{rubygems.org} and includes
5707most relevant information, including runtime dependencies. There are
f97c9175 5708some caveats, however. The metadata doesn't distinguish between
3aae8145
DT
5709synopses and descriptions, so the same string is used for both fields.
5710Additionally, the details of non-Ruby dependencies required to build
5711native extensions is unavailable and left as an exercise to the
5712packager.
5713
f97c9175 5714The command below imports metadata for the @code{rails} Ruby package:
3aae8145
DT
5715
5716@example
5717guix import gem rails
5718@end example
5719
d45dc6da
EB
5720@item cpan
5721@cindex CPAN
3c192e4e
AE
5722Import metadata from @uref{https://www.metacpan.org/, MetaCPAN}@footnote{This
5723functionality requires Guile-JSON to be installed.
5724@xref{Requirements}.}.
f97c9175 5725Information is taken from the JSON-formatted metadata provided through
d45dc6da 5726@uref{https://api.metacpan.org/, MetaCPAN's API} and includes most
66392e47
EB
5727relevant information, such as module dependencies. License information
5728should be checked closely. If Perl is available in the store, then the
5729@code{corelist} utility will be used to filter core modules out of the
5730list of dependencies.
d45dc6da 5731
f97c9175 5732The command command below imports metadata for the @code{Acme::Boolean}
d45dc6da
EB
5733Perl module:
5734
5735@example
5736guix import cpan Acme::Boolean
5737@end example
5738
e1248602
RW
5739@item cran
5740@cindex CRAN
d0bd632f 5741@cindex Bioconductor
f97c9175 5742Import metadata from @uref{http://cran.r-project.org/, CRAN}, the
e1248602
RW
5743central repository for the @uref{http://r-project.org, GNU@tie{}R
5744statistical and graphical environment}.
5745
f97c9175 5746Information is extracted from the @code{DESCRIPTION} file of the package.
e1248602 5747
f97c9175 5748The command command below imports metadata for the @code{Cairo}
e1248602
RW
5749R package:
5750
5751@example
5752guix import cran Cairo
5753@end example
5754
64ce53eb
RW
5755When @code{--recursive} is added, the importer will traverse the
5756dependency graph of the given upstream package recursively and generate
5757package expressions for all those packages that are not yet in Guix.
5758
f97c9175 5759When @code{--archive=bioconductor} is added, metadata is imported from
d0bd632f
RW
5760@uref{http://www.bioconductor.org/, Bioconductor}, a repository of R
5761packages for for the analysis and comprehension of high-throughput
5762genomic data in bioinformatics.
5763
f97c9175 5764Information is extracted from the @code{DESCRIPTION} file of a package
d0bd632f
RW
5765published on the web interface of the Bioconductor SVN repository.
5766
f97c9175 5767The command below imports metadata for the @code{GenomicRanges}
d0bd632f
RW
5768R package:
5769
5770@example
5771guix import cran --archive=bioconductor GenomicRanges
5772@end example
5773
afbc9419
RW
5774@item texlive
5775@cindex TeX Live
5776@cindex CTAN
5777Import metadata from @uref{http://www.ctan.org/, CTAN}, the
5778comprehensive TeX archive network for TeX packages that are part of the
5779@uref{https://www.tug.org/texlive/, TeX Live distribution}.
5780
5781Information about the package is obtained through the XML API provided
5782by CTAN, while the source code is downloaded from the SVN repository of
5783the Tex Live project. This is done because the CTAN does not keep
5784versioned archives.
5785
5786The command command below imports metadata for the @code{fontspec}
5787TeX package:
5788
5789@example
5790guix import texlive fontspec
5791@end example
5792
5793When @code{--archive=DIRECTORY} is added, the source code is downloaded
5794not from the @file{latex} sub-directory of the @file{texmf-dist/source}
5795tree in the TeX Live SVN repository, but from the specified sibling
5796directory under the same root.
5797
5798The command below imports metadata for the @code{ifxetex} package from
5799CTAN while fetching the sources from the directory
5800@file{texmf/source/generic}:
5801
5802@example
5803guix import texlive --archive=generic ifxetex
5804@end example
5805
2f7d2d91 5806@item nix
f97c9175 5807Import metadata from a local copy of the source of the
2f7d2d91
LC
5808@uref{http://nixos.org/nixpkgs/, Nixpkgs distribution}@footnote{This
5809relies on the @command{nix-instantiate} command of
5810@uref{http://nixos.org/nix/, Nix}.}. Package definitions in Nixpkgs are
5811typically written in a mixture of Nix-language and Bash code. This
5812command only imports the high-level package structure that is written in
5813the Nix language. It normally includes all the basic fields of a
5814package definition.
5815
5816When importing a GNU package, the synopsis and descriptions are replaced
5817by their canonical upstream variant.
5818
961d0d2d
LC
5819Usually, you will first need to do:
5820
5821@example
5822export NIX_REMOTE=daemon
5823@end example
5824
5825@noindent
5826so that @command{nix-instantiate} does not try to open the Nix database.
5827
2f7d2d91
LC
5828As an example, the command below imports the package definition of
5829LibreOffice (more precisely, it imports the definition of the package
5830bound to the @code{libreoffice} top-level attribute):
5831
5832@example
5833guix import nix ~/path/to/nixpkgs libreoffice
5834@end example
863af4e1
FB
5835
5836@item hackage
5837@cindex hackage
f97c9175 5838Import metadata from the Haskell community's central package archive
863af4e1
FB
5839@uref{https://hackage.haskell.org/, Hackage}. Information is taken from
5840Cabal files and includes all the relevant information, including package
5841dependencies.
5842
5843Specific command-line options are:
5844
5845@table @code
a4154748
FB
5846@item --stdin
5847@itemx -s
f97c9175 5848Read a Cabal file from standard input.
863af4e1
FB
5849@item --no-test-dependencies
5850@itemx -t
f97c9175 5851Do not include dependencies required only by the test suites.
a4154748
FB
5852@item --cabal-environment=@var{alist}
5853@itemx -e @var{alist}
5854@var{alist} is a Scheme alist defining the environment in which the
5855Cabal conditionals are evaluated. The accepted keys are: @code{os},
5856@code{arch}, @code{impl} and a string representing the name of a flag.
5857The value associated with a flag has to be either the symbol
5858@code{true} or @code{false}. The value associated with other keys
5859has to conform to the Cabal file format definition. The default value
5860associated with the keys @code{os}, @code{arch} and @code{impl} is
f97c9175 5861@samp{linux}, @samp{x86_64} and @samp{ghc}, respectively.
863af4e1
FB
5862@end table
5863
f97c9175 5864The command below imports metadata for the latest version of the
a4154748
FB
5865@code{HTTP} Haskell package without including test dependencies and
5866specifying the value of the flag @samp{network-uri} as @code{false}:
863af4e1
FB
5867
5868@example
a4154748 5869guix import hackage -t -e "'((\"network-uri\" . false))" HTTP
863af4e1
FB
5870@end example
5871
5872A specific package version may optionally be specified by following the
1b846da8 5873package name by an at-sign and a version number as in the following example:
863af4e1
FB
5874
5875@example
1b846da8 5876guix import hackage mtl@@2.1.3.1
863af4e1 5877@end example
7f74a931 5878
bc5844d1
FB
5879@item stackage
5880@cindex stackage
5881The @code{stackage} importer is a wrapper around the @code{hackage} one.
5882It takes a package name, looks up the package version included in a
5883long-term support (LTS) @uref{https://www.stackage.org, Stackage}
5884release and uses the @code{hackage} importer to retrieve its metadata.
5885Note that it is up to you to select an LTS release compatible with the
5886GHC compiler used by Guix.
5887
5888Specific command-line options are:
5889
5890@table @code
5891@item --no-test-dependencies
5892@itemx -t
5893Do not include dependencies required only by the test suites.
5894@item --lts-version=@var{version}
5895@itemx -r @var{version}
5896@var{version} is the desired LTS release version. If omitted the latest
5897release is used.
5898@end table
5899
5900The command below imports metadata for the @code{HTTP} Haskell package
5901included in the LTS Stackage release version 7.18:
5902
5903@example
5904guix import stackage --lts-version=7.18 HTTP
5905@end example
5906
7f74a931
FB
5907@item elpa
5908@cindex elpa
f97c9175 5909Import metadata from an Emacs Lisp Package Archive (ELPA) package
7f74a931
FB
5910repository (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
5911
5912Specific command-line options are:
5913
5914@table @code
5915@item --archive=@var{repo}
5916@itemx -a @var{repo}
5917@var{repo} identifies the archive repository from which to retrieve the
5918information. Currently the supported repositories and their identifiers
5919are:
5920@itemize -
5921@item
840bd1d3 5922@uref{http://elpa.gnu.org/packages, GNU}, selected by the @code{gnu}
7f74a931
FB
5923identifier. This is the default.
5924
624144e0
LC
5925Packages from @code{elpa.gnu.org} are signed with one of the keys
5926contained in the GnuPG keyring at
5927@file{share/emacs/25.1/etc/package-keyring.gpg} (or similar) in the
5928@code{emacs} package (@pxref{Package Installation, ELPA package
5929signatures,, emacs, The GNU Emacs Manual}).
5930
7f74a931 5931@item
840bd1d3 5932@uref{http://stable.melpa.org/packages, MELPA-Stable}, selected by the
7f74a931
FB
5933@code{melpa-stable} identifier.
5934
5935@item
840bd1d3 5936@uref{http://melpa.org/packages, MELPA}, selected by the @code{melpa}
7f74a931
FB
5937identifier.
5938@end itemize
5939@end table
3e0c0365
DC
5940
5941@item crate
5942@cindex crate
5943Import metadata from the crates.io Rust package repository
5944@uref{https://crates.io, crates.io}.
2f7d2d91
LC
5945@end table
5946
5947The structure of the @command{guix import} code is modular. It would be
5948useful to have more importers for other package formats, and your help
5949is welcome here (@pxref{Contributing}).
5950
37166310
LC
5951@node Invoking guix refresh
5952@section Invoking @command{guix refresh}
5953
e32171ee 5954@cindex @command {guix refresh}
37166310
LC
5955The primary audience of the @command{guix refresh} command is developers
5956of the GNU software distribution. By default, it reports any packages
5957provided by the distribution that are outdated compared to the latest
5958upstream version, like this:
5959
5960@example
5961$ guix refresh
5962gnu/packages/gettext.scm:29:13: gettext would be upgraded from 0.18.1.1 to 0.18.2.1
5963gnu/packages/glib.scm:77:12: glib would be upgraded from 2.34.3 to 2.37.0
5964@end example
5965
e9c72306
LC
5966Alternately, one can specify packages to consider, in which case a
5967warning is emitted for packages that lack an updater:
5968
5969@example
5970$ guix refresh coreutils guile guile-ssh
5971gnu/packages/ssh.scm:205:2: warning: no updater for guile-ssh
5972gnu/packages/guile.scm:136:12: guile would be upgraded from 2.0.12 to 2.0.13
5973@end example
5974
5975@command{guix refresh} browses the upstream repository of each package and determines
5976the highest version number of the releases therein. The command
bcb571cb 5977knows how to update specific types of packages: GNU packages, ELPA
e9c72306 5978packages, etc.---see the documentation for @option{--type} below. There
bcb571cb
LC
5979are many packages, though, for which it lacks a method to determine
5980whether a new upstream release is available. However, the mechanism is
5981extensible, so feel free to get in touch with us to add a new method!
37166310
LC
5982
5983When passed @code{--update}, it modifies distribution source files to
f97c9175 5984update the version numbers and source tarball hashes of those package
37166310
LC
5985recipes (@pxref{Defining Packages}). This is achieved by downloading
5986each package's latest source tarball and its associated OpenPGP
5987signature, authenticating the downloaded tarball against its signature
5988using @command{gpg}, and finally computing its hash. When the public
5989key used to sign the tarball is missing from the user's keyring, an
5990attempt is made to automatically retrieve it from a public key server;
f97c9175 5991when this is successful, the key is added to the user's keyring; otherwise,
37166310
LC
5992@command{guix refresh} reports an error.
5993
5994The following options are supported:
5995
5996@table @code
5997
2d7fc7da
LC
5998@item --expression=@var{expr}
5999@itemx -e @var{expr}
6000Consider the package @var{expr} evaluates to.
6001
6002This is useful to precisely refer to a package, as in this example:
6003
6004@example
6005guix refresh -l -e '(@@@@ (gnu packages commencement) glibc-final)'
6006@end example
6007
6008This command lists the dependents of the ``final'' libc (essentially all
6009the packages.)
6010
37166310
LC
6011@item --update
6012@itemx -u
38e16b49
LC
6013Update distribution source files (package recipes) in place. This is
6014usually run from a checkout of the Guix source tree (@pxref{Running
6015Guix Before It Is Installed}):
6016
6017@example
e9c72306 6018$ ./pre-inst-env guix refresh -s non-core -u
38e16b49
LC
6019@end example
6020
081145cf 6021@xref{Defining Packages}, for more information on package definitions.
37166310
LC
6022
6023@item --select=[@var{subset}]
6024@itemx -s @var{subset}
6025Select all the packages in @var{subset}, one of @code{core} or
6026@code{non-core}.
6027
6028The @code{core} subset refers to all the packages at the core of the
6029distribution---i.e., packages that are used to build ``everything
6030else''. This includes GCC, libc, Binutils, Bash, etc. Usually,
6031changing one of these packages in the distribution entails a rebuild of
6032all the others. Thus, such updates are an inconvenience to users in
6033terms of build time or bandwidth used to achieve the upgrade.
6034
6035The @code{non-core} subset refers to the remaining packages. It is
6036typically useful in cases where an update of the core packages would be
6037inconvenient.
6038
1335ac31
MO
6039@item --manifest=@var{file}
6040@itemx -m @var{file}
6041Select all the packages from the manifest in @var{file}. This is useful to
6042check if any packages of the user manifest can be updated.
6043
bcb571cb
LC
6044@item --type=@var{updater}
6045@itemx -t @var{updater}
7191adc5
AK
6046Select only packages handled by @var{updater} (may be a comma-separated
6047list of updaters). Currently, @var{updater} may be one of:
bcb571cb
LC
6048
6049@table @code
6050@item gnu
6051the updater for GNU packages;
e80c0f85
LC
6052@item gnome
6053the updater for GNOME packages;
9c97afe8
DC
6054@item kde
6055the updater for KDE packages;
62061d6b
AW
6056@item xorg
6057the updater for X.org packages;
2fd370e8
LC
6058@item kernel.org
6059the updater for packages hosted on kernel.org;
bcb571cb 6060@item elpa
d882c235
LC
6061the updater for @uref{http://elpa.gnu.org/, ELPA} packages;
6062@item cran
b9d044ef 6063the updater for @uref{http://cran.r-project.org/, CRAN} packages;
d0bd632f
RW
6064@item bioconductor
6065the updater for @uref{http://www.bioconductor.org/, Bioconductor} R packages;
200cdf81
EB
6066@item cpan
6067the updater for @uref{http://www.cpan.org/, CPAN} packages;
bab020d7 6068@item pypi
b9d044ef 6069the updater for @uref{https://pypi.python.org, PyPI} packages.
fbc5b815
BW
6070@item gem
6071the updater for @uref{https://rubygems.org, RubyGems} packages.
917a2a58
BW
6072@item github
6073the updater for @uref{https://github.com, GitHub} packages.
42efe27a
EB
6074@item hackage
6075the updater for @uref{https://hackage.haskell.org, Hackage} packages.
bc5844d1
FB
6076@item stackage
6077the updater for @uref{https://www.stackage.org, Stackage} packages.
8ac52987
DC
6078@item crate
6079the updater for @uref{https://crates.io, Crates} packages.
bcb571cb
LC
6080@end table
6081
f97c9175
AE
6082For instance, the following command only checks for updates of Emacs
6083packages hosted at @code{elpa.gnu.org} and for updates of CRAN packages:
bcb571cb
LC
6084
6085@example
7191adc5 6086$ guix refresh --type=elpa,cran
d882c235 6087gnu/packages/statistics.scm:819:13: r-testthat would be upgraded from 0.10.0 to 0.11.0
bcb571cb
LC
6088gnu/packages/emacs.scm:856:13: emacs-auctex would be upgraded from 11.88.6 to 11.88.9
6089@end example
6090
37166310
LC
6091@end table
6092
6093In addition, @command{guix refresh} can be passed one or more package
6094names, as in this example:
6095
6096@example
e9c72306 6097$ ./pre-inst-env guix refresh -u emacs idutils gcc@@4.8
37166310
LC
6098@end example
6099
6100@noindent
6101The command above specifically updates the @code{emacs} and
6102@code{idutils} packages. The @code{--select} option would have no
6103effect in this case.
6104
7d193ec3
EB
6105When considering whether to upgrade a package, it is sometimes
6106convenient to know which packages would be affected by the upgrade and
6107should be checked for compatibility. For this the following option may
6108be used when passing @command{guix refresh} one or more package names:
6109
6110@table @code
6111
6ffa706b
AK
6112@item --list-updaters
6113@itemx -L
6114List available updaters and exit (see @option{--type} above.)
6115
3676f892
LC
6116For each updater, display the fraction of packages it covers; at the
6117end, display the fraction of packages covered by all these updaters.
6118
7d193ec3
EB
6119@item --list-dependent
6120@itemx -l
6121List top-level dependent packages that would need to be rebuilt as a
6122result of upgrading one or more packages.
6123
b96a0640
LC
6124@xref{Invoking guix graph, the @code{reverse-package} type of
6125@command{guix graph}}, for information on how to visualize the list of
6126dependents of a package.
6127
7d193ec3
EB
6128@end table
6129
6130Be aware that the @code{--list-dependent} option only
6131@emph{approximates} the rebuilds that would be required as a result of
6132an upgrade. More rebuilds might be required under some circumstances.
6133
6134@example
7779ab61
LC
6135$ guix refresh --list-dependent flex
6136Building the following 120 packages would ensure 213 dependent packages are rebuilt:
6d1a5e5f 6137hop@@2.4.0 geiser@@0.4 notmuch@@0.18 mu@@0.9.9.5 cflow@@1.4 idutils@@4.6 @dots{}
7d193ec3
EB
6138@end example
6139
6140The command above lists a set of packages that could be built to check
6141for compatibility with an upgraded @code{flex} package.
6142
f9230085
LC
6143The following options can be used to customize GnuPG operation:
6144
6145@table @code
6146
f9230085
LC
6147@item --gpg=@var{command}
6148Use @var{command} as the GnuPG 2.x command. @var{command} is searched
6149for in @code{$PATH}.
6150
2bc53ba9
LC
6151@item --key-download=@var{policy}
6152Handle missing OpenPGP keys according to @var{policy}, which may be one
6153of:
6154
6155@table @code
6156@item always
6157Always download missing OpenPGP keys from the key server, and add them
6158to the user's GnuPG keyring.
6159
6160@item never
6161Never try to download missing OpenPGP keys. Instead just bail out.
6162
6163@item interactive
6164When a package signed with an unknown OpenPGP key is encountered, ask
6165the user whether to download it or not. This is the default behavior.
6166@end table
6167
6168@item --key-server=@var{host}
6169Use @var{host} as the OpenPGP key server when importing a public key.
6170
f9230085
LC
6171@end table
6172
917a2a58
BW
6173The @code{github} updater uses the
6174@uref{https://developer.github.com/v3/, GitHub API} to query for new
6175releases. When used repeatedly e.g. when refreshing all packages,
6176GitHub will eventually refuse to answer any further API requests. By
6177default 60 API requests per hour are allowed, and a full refresh on all
6178GitHub packages in Guix requires more than this. Authentication with
6179GitHub through the use of an API token alleviates these limits. To use
6180an API token, set the environment variable @code{GUIX_GITHUB_TOKEN} to a
6181token procured from @uref{https://github.com/settings/tokens} or
6182otherwise.
6183
6184
b4f5e0e8
CR
6185@node Invoking guix lint
6186@section Invoking @command{guix lint}
e32171ee
JD
6187
6188@cindex @command{guix lint}
6189@cindex package, checking for errors
f97c9175
AE
6190The @command{guix lint} command is meant to help package developers avoid
6191common errors and use a consistent style. It runs a number of checks on
6192a given set of packages in order to find common mistakes in their
873c4085
LC
6193definitions. Available @dfn{checkers} include (see
6194@code{--list-checkers} for a complete list):
6195
6196@table @code
6197@item synopsis
6198@itemx description
6199Validate certain typographical and stylistic rules about package
6200descriptions and synopses.
6201
6202@item inputs-should-be-native
6203Identify inputs that should most likely be native inputs.
6204
6205@item source
6206@itemx home-page
fac46e3f 6207@itemx mirror-url
50f5c46d 6208@itemx source-file-name
873c4085 6209Probe @code{home-page} and @code{source} URLs and report those that are
fac46e3f
LC
6210invalid. Suggest a @code{mirror://} URL when applicable. Check that
6211the source file name is meaningful, e.g. is not
f97c9175
AE
6212just a version number or ``git-checkout'', without a declared
6213@code{file-name} (@pxref{origin Reference}).
40a7d4e5 6214
5432734b 6215@item cve
09866b39
LC
6216@cindex security vulnerabilities
6217@cindex CVE, Common Vulnerabilities and Exposures
5432734b 6218Report known vulnerabilities found in the Common Vulnerabilities and
09866b39 6219Exposures (CVE) databases of the current and past year
5432734b
LC
6220@uref{https://nvd.nist.gov/download.cfm#CVE_FEED, published by the US
6221NIST}.
6222
09866b39
LC
6223To view information about a particular vulnerability, visit pages such as:
6224
6225@itemize
6226@item
6227@indicateurl{https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-YYYY-ABCD}
6228@item
6229@indicateurl{https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-YYYY-ABCD}
6230@end itemize
6231
6232@noindent
6233where @code{CVE-YYYY-ABCD} is the CVE identifier---e.g.,
6234@code{CVE-2015-7554}.
6235
99effc8f
LC
6236Package developers can specify in package recipes the
6237@uref{https://nvd.nist.gov/cpe.cfm,Common Platform Enumeration (CPE)}
6238name and version of the package when they differ from the name that Guix
6239uses, as in this example:
6240
6241@example
6242(package
6243 (name "grub")
6244 ;; @dots{}
6245 ;; CPE calls this package "grub2".
6246 (properties '((cpe-name . "grub2"))))
6247@end example
6248
40a7d4e5
LC
6249@item formatting
6250Warn about obvious source code formatting issues: trailing white space,
6251use of tabulations, etc.
873c4085 6252@end table
b4f5e0e8
CR
6253
6254The general syntax is:
6255
6256@example
6257guix lint @var{options} @var{package}@dots{}
6258@end example
6259
6260If no package is given on the command line, then all packages are checked.
6261The @var{options} may be zero or more of the following:
6262
6263@table @code
f97c9175
AE
6264@item --list-checkers
6265@itemx -l
6266List and describe all the available checkers that will be run on packages
6267and exit.
b4f5e0e8 6268
dd7c013d
CR
6269@item --checkers
6270@itemx -c
6271Only enable the checkers specified in a comma-separated list using the
6272names returned by @code{--list-checkers}.
6273
b4f5e0e8 6274@end table
37166310 6275
fcc58db6
LC
6276@node Invoking guix size
6277@section Invoking @command{guix size}
6278
e32171ee
JD
6279@cindex size
6280@cindex package size
6281@cindex closure
6282@cindex @command{guix size}
fcc58db6
LC
6283The @command{guix size} command helps package developers profile the
6284disk usage of packages. It is easy to overlook the impact of an
6285additional dependency added to a package, or the impact of using a
6286single output for a package that could easily be split (@pxref{Packages
f97c9175 6287with Multiple Outputs}). Such are the typical issues that
fcc58db6
LC
6288@command{guix size} can highlight.
6289
e1a65ae5 6290The command can be passed a package specification such as @code{gcc@@4.8}
fcc58db6
LC
6291or @code{guile:debug}, or a file name in the store. Consider this
6292example:
6293
6294@example
6295$ guix size coreutils
6296store item total self
6297/gnu/store/@dots{}-coreutils-8.23 70.0 13.9 19.8%
6298/gnu/store/@dots{}-gmp-6.0.0a 55.3 2.5 3.6%
6299/gnu/store/@dots{}-acl-2.2.52 53.7 0.5 0.7%
6300/gnu/store/@dots{}-attr-2.4.46 53.2 0.3 0.5%
6301/gnu/store/@dots{}-gcc-4.8.4-lib 52.9 15.7 22.4%
6302/gnu/store/@dots{}-glibc-2.21 37.2 37.2 53.1%
6303@end example
6304
6305@cindex closure
6306The store items listed here constitute the @dfn{transitive closure} of
6307Coreutils---i.e., Coreutils and all its dependencies, recursively---as
6308would be returned by:
6309
6310@example
6311$ guix gc -R /gnu/store/@dots{}-coreutils-8.23
6312@end example
6313
f97c9175 6314Here the output shows three columns next to store items. The first column,
fcc58db6
LC
6315labeled ``total'', shows the size in mebibytes (MiB) of the closure of
6316the store item---that is, its own size plus the size of all its
6317dependencies. The next column, labeled ``self'', shows the size of the
f97c9175
AE
6318item itself. The last column shows the ratio of the size of the item
6319itself to the space occupied by all the items listed here.
fcc58db6
LC
6320
6321In this example, we see that the closure of Coreutils weighs in at
632270@tie{}MiB, half of which is taken by libc. (That libc represents a
6323large fraction of the closure is not a problem @i{per se} because it is
6324always available on the system anyway.)
6325
6326When the package passed to @command{guix size} is available in the
6327store, @command{guix size} queries the daemon to determine its
6328dependencies, and measures its size in the store, similar to @command{du
6329-ms --apparent-size} (@pxref{du invocation,,, coreutils, GNU
6330Coreutils}).
6331
6332When the given package is @emph{not} in the store, @command{guix size}
f97c9175
AE
6333reports information based on the available substitutes
6334(@pxref{Substitutes}). This makes it possible it to profile disk usage of
6335store items that are not even on disk, only available remotely.
fcc58db6 6336
db761534
LC
6337You can also specify several package names:
6338
6339@example
6340$ guix size coreutils grep sed bash
6341store item total self
6342/gnu/store/@dots{}-coreutils-8.24 77.8 13.8 13.4%
6343/gnu/store/@dots{}-grep-2.22 73.1 0.8 0.8%
6344/gnu/store/@dots{}-bash-4.3.42 72.3 4.7 4.6%
6345/gnu/store/@dots{}-readline-6.3 67.6 1.2 1.2%
6346@dots{}
6347total: 102.3 MiB
6348@end example
6349
6350@noindent
6351In this example we see that the combination of the four packages takes
6352102.3@tie{}MiB in total, which is much less than the sum of each closure
6353since they have a lot of dependencies in common.
6354
a8f996c6 6355The available options are:
fcc58db6
LC
6356
6357@table @option
6358
d490d06e
LC
6359@item --substitute-urls=@var{urls}
6360Use substitute information from @var{urls}.
6361@xref{client-substitute-urls, the same option for @code{guix build}}.
6362
a6c1fe82
LC
6363@item --sort=@var{key}
6364Sort lines according to @var{key}, one of the following options:
6365
6366@table @code
6367@item closure
6368the total size of the item's closure (the default);
6369@item self
6370the size of each item.
6371@end table
6372
a8f996c6 6373@item --map-file=@var{file}
f97c9175 6374Write a graphical map of disk usage in PNG format to @var{file}.
a8f996c6
LC
6375
6376For the example above, the map looks like this:
6377
6378@image{images/coreutils-size-map,5in,, map of Coreutils disk usage
6379produced by @command{guix size}}
6380
6381This option requires that
6382@uref{http://wingolog.org/software/guile-charting/, Guile-Charting} be
6383installed and visible in Guile's module search path. When that is not
6384the case, @command{guix size} fails as it tries to load it.
6385
fcc58db6
LC
6386@item --system=@var{system}
6387@itemx -s @var{system}
6388Consider packages for @var{system}---e.g., @code{x86_64-linux}.
6389
6390@end table
6391
88856916
LC
6392@node Invoking guix graph
6393@section Invoking @command{guix graph}
6394
6395@cindex DAG
e32171ee
JD
6396@cindex @command{guix graph}
6397@cindex package dependencies
88856916
LC
6398Packages and their dependencies form a @dfn{graph}, specifically a
6399directed acyclic graph (DAG). It can quickly become difficult to have a
f97c9175 6400mental model of the package DAG, so the @command{guix graph} command
9ea36197
LC
6401provides a visual representation of the DAG. By default,
6402@command{guix graph} emits a DAG representation in the input format of
88856916 6403@uref{http://www.graphviz.org/, Graphviz}, so its output can be passed
9ea36197
LC
6404directly to the @command{dot} command of Graphviz. It can also emit an
6405HTML page with embedded JavaScript code to display a ``chord diagram''
5899fafb
RJ
6406in a Web browser, using the @uref{https://d3js.org/, d3.js} library, or
6407emit Cypher queries to construct a graph in a graph database supporting
6408the @uref{http://www.opencypher.org/, openCypher} query language.
9ea36197 6409The general syntax is:
88856916
LC
6410
6411@example
6412guix graph @var{options} @var{package}@dots{}
6413@end example
6414
6415For example, the following command generates a PDF file representing the
6416package DAG for the GNU@tie{}Core Utilities, showing its build-time
6417dependencies:
6418
6419@example
6420guix graph coreutils | dot -Tpdf > dag.pdf
6421@end example
6422
6423The output looks like this:
6424
6425@image{images/coreutils-graph,2in,,Dependency graph of the GNU Coreutils}
6426
6427Nice little graph, no?
6428
f97c9175 6429But there is more than one graph! The one above is concise: it is the
88856916 6430graph of package objects, omitting implicit inputs such as GCC, libc,
f97c9175
AE
6431grep, etc. It is often useful to have such a concise graph, but
6432sometimes one may want to see more details. @command{guix graph} supports
6433several types of graphs, allowing you to choose the level of detail:
88856916
LC
6434
6435@table @code
6436@item package
f97c9175 6437This is the default type used in the example above. It shows the DAG of
88856916
LC
6438package objects, excluding implicit dependencies. It is concise, but
6439filters out many details.
6440
b96a0640
LC
6441@item reverse-package
6442This shows the @emph{reverse} DAG of packages. For example:
6443
6444@example
6445guix graph --type=reverse-package ocaml
6446@end example
6447
6448... yields the graph of packages that depend on OCaml.
6449
6450Note that for core packages this can yield huge graphs. If all you want
6451is to know the number of packages that depend on a given package, use
6452@command{guix refresh --list-dependent} (@pxref{Invoking guix refresh,
6453@option{--list-dependent}}).
6454
88856916
LC
6455@item bag-emerged
6456This is the package DAG, @emph{including} implicit inputs.
6457
6458For instance, the following command:
6459
6460@example
6461guix graph --type=bag-emerged coreutils | dot -Tpdf > dag.pdf
6462@end example
6463
6464... yields this bigger graph:
6465
6466@image{images/coreutils-bag-graph,,5in,Detailed dependency graph of the GNU Coreutils}
6467
6468At the bottom of the graph, we see all the implicit inputs of
6469@var{gnu-build-system} (@pxref{Build Systems, @code{gnu-build-system}}).
6470
f97c9175 6471Now, note that the dependencies of these implicit inputs---that is, the
88856916
LC
6472@dfn{bootstrap dependencies} (@pxref{Bootstrapping})---are not shown
6473here, for conciseness.
6474
6475@item bag
6476Similar to @code{bag-emerged}, but this time including all the bootstrap
6477dependencies.
6478
38b92daa
LC
6479@item bag-with-origins
6480Similar to @code{bag}, but also showing origins and their dependencies.
6481
88856916
LC
6482@item derivations
6483This is the most detailed representation: It shows the DAG of
6484derivations (@pxref{Derivations}) and plain store items. Compared to
6485the above representation, many additional nodes are visible, including
f97c9175 6486build scripts, patches, Guile modules, etc.
88856916 6487
a773c314
LC
6488For this type of graph, it is also possible to pass a @file{.drv} file
6489name instead of a package name, as in:
6490
6491@example
6492guix graph -t derivation `guix system build -d my-config.scm`
6493@end example
88856916
LC
6494@end table
6495
f97c9175 6496All the types above correspond to @emph{build-time dependencies}. The
88856916
LC
6497following graph type represents the @emph{run-time dependencies}:
6498
6499@table @code
6500@item references
6501This is the graph of @dfn{references} of a package output, as returned
6502by @command{guix gc --references} (@pxref{Invoking guix gc}).
6503
6504If the given package output is not available in the store, @command{guix
6505graph} attempts to obtain dependency information from substitutes.
a773c314
LC
6506
6507Here you can also pass a store file name instead of a package name. For
6508example, the command below produces the reference graph of your profile
6509(which can be big!):
6510
6511@example
6512guix graph -t references `readlink -f ~/.guix-profile`
6513@end example
7f8fec0f
LC
6514
6515@item referrers
6516This is the graph of the @dfn{referrers} of a store item, as returned by
6517@command{guix gc --referrers} (@pxref{Invoking guix gc}).
6518
6519This relies exclusively on local information from your store. For
6520instance, let us suppose that the current Inkscape is available in 10
6521profiles on your machine; @command{guix graph -t referrers inkscape}
6522will show a graph rooted at Inkscape and with those 10 profiles linked
6523to it.
6524
6525It can help determine what is preventing a store item from being garbage
6526collected.
6527
88856916
LC
6528@end table
6529
6530The available options are the following:
6531
6532@table @option
6533@item --type=@var{type}
6534@itemx -t @var{type}
6535Produce a graph output of @var{type}, where @var{type} must be one of
6536the values listed above.
6537
6538@item --list-types
6539List the supported graph types.
4c8f997a 6540
642339dc
RW
6541@item --backend=@var{backend}
6542@itemx -b @var{backend}
6543Produce a graph using the selected @var{backend}.
6544
6545@item --list-backends
6546List the supported graph backends.
6547
9ea36197
LC
6548Currently, the available backends are Graphviz and d3.js.
6549
4c8f997a
LC
6550@item --expression=@var{expr}
6551@itemx -e @var{expr}
6552Consider the package @var{expr} evaluates to.
6553
6554This is useful to precisely refer to a package, as in this example:
6555
6556@example
6557guix graph -e '(@@@@ (gnu packages commencement) gnu-make-final)'
6558@end example
88856916
LC
6559@end table
6560
6561
372c4bbc
DT
6562@node Invoking guix environment
6563@section Invoking @command{guix environment}
6564
f5fd4fd2 6565@cindex reproducible build environments
fe36d84e 6566@cindex development environments
e32171ee
JD
6567@cindex @command{guix environment}
6568@cindex environment, package build environment
372c4bbc
DT
6569The purpose of @command{guix environment} is to assist hackers in
6570creating reproducible development environments without polluting their
6571package profile. The @command{guix environment} tool takes one or more
f97c9175 6572packages, builds all of their inputs, and creates a shell
372c4bbc
DT
6573environment to use them.
6574
6575The general syntax is:
6576
6577@example
6578guix environment @var{options} @var{package}@dots{}
6579@end example
6580
fe36d84e
LC
6581The following example spawns a new shell set up for the development of
6582GNU@tie{}Guile:
372c4bbc
DT
6583
6584@example
6585guix environment guile
6586@end example
6587
f97c9175
AE
6588If the needed dependencies are not built yet, @command{guix environment}
6589automatically builds them. The environment of the new shell is an augmented
372c4bbc
DT
6590version of the environment that @command{guix environment} was run in.
6591It contains the necessary search paths for building the given package
6592added to the existing environment variables. To create a ``pure''
f97c9175 6593environment, in which the original environment variables have been unset,
50500f7c
LC
6594use the @code{--pure} option@footnote{Users sometimes wrongfully augment
6595environment variables such as @code{PATH} in their @file{~/.bashrc}
6596file. As a consequence, when @code{guix environment} launches it, Bash
6597may read @file{~/.bashrc}, thereby introducing ``impurities'' in these
6598environment variables. It is an error to define such environment
6599variables in @file{.bashrc}; instead, they should be defined in
6600@file{.bash_profile}, which is sourced only by log-in shells.
6601@xref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}, for
6602details on Bash start-up files.}.
372c4bbc 6603
28de8d25
LC
6604@vindex GUIX_ENVIRONMENT
6605@command{guix environment} defines the @code{GUIX_ENVIRONMENT}
20185522
LC
6606variable in the shell it spawns; its value is the file name of the
6607profile of this environment. This allows users to, say, define a
28de8d25
LC
6608specific prompt for development environments in their @file{.bashrc}
6609(@pxref{Bash Startup Files,,, bash, The GNU Bash Reference Manual}):
6610
6611@example
6612if [ -n "$GUIX_ENVIRONMENT" ]
6613then
6614 export PS1="\u@@\h \w [dev]\$ "
6615fi
6616@end example
6617
20185522
LC
6618@noindent
6619... or to browse the profile:
6620
6621@example
6622$ ls "$GUIX_ENVIRONMENT/bin"
6623@end example
6624
372c4bbc
DT
6625Additionally, more than one package may be specified, in which case the
6626union of the inputs for the given packages are used. For example, the
6627command below spawns a shell where all of the dependencies of both Guile
6628and Emacs are available:
6629
6630@example
6631guix environment guile emacs
6632@end example
6633
1de2fe95
DT
6634Sometimes an interactive shell session is not desired. An arbitrary
6635command may be invoked by placing the @code{--} token to separate the
6636command from the rest of the arguments:
372c4bbc
DT
6637
6638@example
1de2fe95 6639guix environment guile -- make -j4
372c4bbc
DT
6640@end example
6641
fe36d84e
LC
6642In other situations, it is more convenient to specify the list of
6643packages needed in the environment. For example, the following command
6644runs @command{python} from an environment containing Python@tie{}2.7 and
6645NumPy:
6646
6647@example
1de2fe95 6648guix environment --ad-hoc python2-numpy python-2.7 -- python
fe36d84e
LC
6649@end example
6650
cc90fbbf
DT
6651Furthermore, one might want the dependencies of a package and also some
6652additional packages that are not build-time or runtime dependencies, but
6653are useful when developing nonetheless. Because of this, the
6654@code{--ad-hoc} flag is positional. Packages appearing before
6655@code{--ad-hoc} are interpreted as packages whose dependencies will be
6656added to the environment. Packages appearing after are interpreted as
6657packages that will be added to the environment directly. For example,
6658the following command creates a Guix development environment that
6659additionally includes Git and strace:
6660
6661@example
6662guix environment guix --ad-hoc git strace
6663@end example
6664
f535dcbe
DT
6665Sometimes it is desirable to isolate the environment as much as
6666possible, for maximal purity and reproducibility. In particular, when
6667using Guix on a host distro that is not GuixSD, it is desirable to
6668prevent access to @file{/usr/bin} and other system-wide resources from
6669the development environment. For example, the following command spawns
6670a Guile REPL in a ``container'' where only the store and the current
6671working directory are mounted:
6672
6673@example
6674guix environment --ad-hoc --container guile -- guile
6675@end example
6676
0f252e26 6677@quotation Note
cfd35b4e 6678The @code{--container} option requires Linux-libre 3.19 or newer.
0f252e26
DT
6679@end quotation
6680
fe36d84e 6681The available options are summarized below.
372c4bbc
DT
6682
6683@table @code
f943c317
LC
6684@item --root=@var{file}
6685@itemx -r @var{file}
6686@cindex persistent environment
6687@cindex garbage collector root, for environments
6688Make @var{file} a symlink to the profile for this environment, and
6689register it as a garbage collector root.
6690
6691This is useful if you want to protect your environment from garbage
6692collection, to make it ``persistent''.
6693
6694When this option is omitted, the environment is protected from garbage
6695collection only for the duration of the @command{guix environment}
6696session. This means that next time you recreate the same environment,
6697you could have to rebuild or re-download packages.
6698
372c4bbc
DT
6699@item --expression=@var{expr}
6700@itemx -e @var{expr}
c9c282ce
DT
6701Create an environment for the package or list of packages that
6702@var{expr} evaluates to.
372c4bbc 6703
fe36d84e
LC
6704For example, running:
6705
6706@example
6707guix environment -e '(@@ (gnu packages maths) petsc-openmpi)'
6708@end example
6709
6710starts a shell with the environment for this specific variant of the
6711PETSc package.
6712
c9c282ce
DT
6713Running:
6714
6715@example
5c2b2f00 6716guix environment --ad-hoc -e '(@@ (gnu) %base-packages)'
c9c282ce
DT
6717@end example
6718
6719starts a shell with all the GuixSD base packages available.
6720
fa445d64 6721The above commands only use the default output of the given packages.
779aa003
DT
6722To select other outputs, two element tuples can be specified:
6723
6724@example
6725guix environment --ad-hoc -e '(list (@ (gnu packages bash) bash) "include")'
6726@end example
6727
372c4bbc
DT
6728@item --load=@var{file}
6729@itemx -l @var{file}
c9c282ce
DT
6730Create an environment for the package or list of packages that the code
6731within @var{file} evaluates to.
372c4bbc 6732
fe36d84e
LC
6733As an example, @var{file} might contain a definition like this
6734(@pxref{Defining Packages}):
6735
6736@example
6737@verbatiminclude environment-gdb.scm
6738@end example
6739
a54bd6d7
DT
6740@item --ad-hoc
6741Include all specified packages in the resulting environment, as if an
6742@i{ad hoc} package were defined with them as inputs. This option is
6743useful for quickly creating an environment without having to write a
6744package expression to contain the desired inputs.
6745
6746For instance, the command:
6747
6748@example
1de2fe95 6749guix environment --ad-hoc guile guile-sdl -- guile
a54bd6d7
DT
6750@end example
6751
6752runs @command{guile} in an environment where Guile and Guile-SDL are
6753available.
6754
417c39f1 6755Note that this example implicitly asks for the default output of
f97c9175 6756@code{guile} and @code{guile-sdl}, but it is possible to ask for a
417c39f1
LC
6757specific output---e.g., @code{glib:bin} asks for the @code{bin} output
6758of @code{glib} (@pxref{Packages with Multiple Outputs}).
6759
cc90fbbf
DT
6760This option may be composed with the default behavior of @command{guix
6761environment}. Packages appearing before @code{--ad-hoc} are interpreted
6762as packages whose dependencies will be added to the environment, the
6763default behavior. Packages appearing after are interpreted as packages
6764that will be added to the environment directly.
6765
372c4bbc
DT
6766@item --pure
6767Unset existing environment variables when building the new environment.
6768This has the effect of creating an environment in which search paths
6769only contain package inputs.
6770
6771@item --search-paths
6772Display the environment variable definitions that make up the
6773environment.
ce367ef3
LC
6774
6775@item --system=@var{system}
6776@itemx -s @var{system}
6777Attempt to build for @var{system}---e.g., @code{i686-linux}.
f535dcbe
DT
6778
6779@item --container
6780@itemx -C
6781@cindex container
6782Run @var{command} within an isolated container. The current working
a01ad638
DT
6783directory outside the container is mapped inside the container.
6784Additionally, a dummy home directory is created that matches the current
6785user's home directory, and @file{/etc/passwd} is configured accordingly.
6786The spawned process runs as the current user outside the container, but
6787has root privileges in the context of the container.
f535dcbe
DT
6788
6789@item --network
6790@itemx -N
6791For containers, share the network namespace with the host system.
6792Containers created without this flag only have access to the loopback
6793device.
6794
6795@item --expose=@var{source}[=@var{target}]
6796For containers, expose the file system @var{source} from the host system
6797as the read-only file system @var{target} within the container. If
6798@var{target} is not specified, @var{source} is used as the target mount
6799point in the container.
6800
6801The example below spawns a Guile REPL in a container in which the user's
6802home directory is accessible read-only via the @file{/exchange}
6803directory:
6804
6805@example
da31b9c7 6806guix environment --container --expose=$HOME=/exchange --ad-hoc guile -- guile
f535dcbe
DT
6807@end example
6808
5c2b2f00 6809@item --share=@var{source}[=@var{target}]
f535dcbe
DT
6810For containers, share the file system @var{source} from the host system
6811as the writable file system @var{target} within the container. If
6812@var{target} is not specified, @var{source} is used as the target mount
6813point in the container.
6814
6815The example below spawns a Guile REPL in a container in which the user's
6816home directory is accessible for both reading and writing via the
6817@file{/exchange} directory:
6818
6819@example
da31b9c7 6820guix environment --container --share=$HOME=/exchange --ad-hoc guile -- guile
f535dcbe 6821@end example
372c4bbc
DT
6822@end table
6823
fdcb04af
HG
6824@command{guix environment}
6825also supports all of the common build options that @command{guix
ccd7158d 6826build} supports (@pxref{Common Build Options}).
372c4bbc 6827
fdcb04af 6828
aff8ce7c
DT
6829@node Invoking guix publish
6830@section Invoking @command{guix publish}
6831
e32171ee 6832@cindex @command{guix publish}
aff8ce7c 6833The purpose of @command{guix publish} is to enable users to easily share
f97c9175 6834their store with others, who can then use it as a substitute server
8ce229fc
LC
6835(@pxref{Substitutes}).
6836
6837When @command{guix publish} runs, it spawns an HTTP server which allows
6838anyone with network access to obtain substitutes from it. This means
6839that any machine running Guix can also act as if it were a build farm,
6840since the HTTP interface is compatible with Hydra, the software behind
6841the @code{hydra.gnu.org} build farm.
aff8ce7c
DT
6842
6843For security, each substitute is signed, allowing recipients to check
6844their authenticity and integrity (@pxref{Substitutes}). Because
f97c9175 6845@command{guix publish} uses the signing key of the system, which is only
5463fe51
LC
6846readable by the system administrator, it must be started as root; the
6847@code{--user} option makes it drop root privileges early on.
aff8ce7c 6848
b18812b6
LC
6849The signing key pair must be generated before @command{guix publish} is
6850launched, using @command{guix archive --generate-key} (@pxref{Invoking
6851guix archive}).
6852
aff8ce7c
DT
6853The general syntax is:
6854
6855@example
6856guix publish @var{options}@dots{}
6857@end example
6858
6859Running @command{guix publish} without any additional arguments will
6860spawn an HTTP server on port 8080:
6861
6862@example
6863guix publish
6864@end example
6865
6866Once a publishing server has been authorized (@pxref{Invoking guix
6867archive}), the daemon may download substitutes from it:
6868
6869@example
6870guix-daemon --substitute-urls=http://example.org:8080
6871@end example
6872
00753f70
LC
6873By default, @command{guix publish} compresses archives on the fly as it
6874serves them. This ``on-the-fly'' mode is convenient in that it requires
6875no setup and is immediately available. However, when serving lots of
6876clients, we recommend using the @option{--cache} option, which enables
6877caching of the archives before they are sent to clients---see below for
585347d7
LC
6878details. The @command{guix weather} command provides a handy way to
6879check what a server provides (@pxref{Invoking guix weather}).
00753f70 6880
ff6638d1
LC
6881As a bonus, @command{guix publish} also serves as a content-addressed
6882mirror for source files referenced in @code{origin} records
6883(@pxref{origin Reference}). For instance, assuming @command{guix
6884publish} is running on @code{example.org}, the following URL returns the
6885raw @file{hello-2.10.tar.gz} file with the given SHA256 hash
6886(represented in @code{nix-base32} format, @pxref{Invoking guix hash}):
6887
6888@example
6889http://example.org/file/hello-2.10.tar.gz/sha256/0ssi1@dots{}ndq1i
6890@end example
6891
6892Obviously, these URLs only work for files that are in the store; in
6893other cases, they return 404 (``Not Found'').
6894
aff8ce7c
DT
6895The following options are available:
6896
6897@table @code
6898@item --port=@var{port}
6899@itemx -p @var{port}
6900Listen for HTTP requests on @var{port}.
6901
9e2292ef
LC
6902@item --listen=@var{host}
6903Listen on the network interface for @var{host}. The default is to
6904accept connections from any interface.
6905
5463fe51
LC
6906@item --user=@var{user}
6907@itemx -u @var{user}
6908Change privileges to @var{user} as soon as possible---i.e., once the
6909server socket is open and the signing key has been read.
6910
4a1fc562
LC
6911@item --compression[=@var{level}]
6912@itemx -C [@var{level}]
6913Compress data using the given @var{level}. When @var{level} is zero,
6914disable compression. The range 1 to 9 corresponds to different gzip
6915compression levels: 1 is the fastest, and 9 is the best (CPU-intensive).
6916The default is 3.
6917
00753f70
LC
6918Unless @option{--cache} is used, compression occurs on the fly and
6919the compressed streams are not
4a1fc562 6920cached. Thus, to reduce load on the machine that runs @command{guix
00753f70
LC
6921publish}, it may be a good idea to choose a low compression level, to
6922run @command{guix publish} behind a caching proxy, or to use
6923@option{--cache}. Using @option{--cache} has the advantage that it
6924allows @command{guix publish} to add @code{Content-Length} HTTP header
6925to its responses.
6926
6927@item --cache=@var{directory}
6928@itemx -c @var{directory}
6929Cache archives and meta-data (@code{.narinfo} URLs) to @var{directory}
6930and only serve archives that are in cache.
6931
6932When this option is omitted, archives and meta-data are created
6933on-the-fly. This can reduce the available bandwidth, especially when
6934compression is enabled, since this may become CPU-bound. Another
6935drawback of the default mode is that the length of archives is not known
6936in advance, so @command{guix publish} does not add a
6937@code{Content-Length} HTTP header to its responses, which in turn
6938prevents clients from knowing the amount of data being downloaded.
6939
6940Conversely, when @option{--cache} is used, the first request for a store
6941item (@i{via} a @code{.narinfo} URL) returns 404 and triggers a
6942background process to @dfn{bake} the archive---computing its
6943@code{.narinfo} and compressing the archive, if needed. Once the
6944archive is cached in @var{directory}, subsequent requests succeed and
6945are served directly from the cache, which guarantees that clients get
6946the best possible bandwidth.
6947
6948The ``baking'' process is performed by worker threads. By default, one
6949thread per CPU core is created, but this can be customized. See
6950@option{--workers} below.
6951
d72b4206
LC
6952When @option{--ttl} is used, cached entries are automatically deleted
6953when they have expired.
6954
00753f70
LC
6955@item --workers=@var{N}
6956When @option{--cache} is used, request the allocation of @var{N} worker
6957threads to ``bake'' archives.
4a1fc562 6958
e4c7a5f7
LC
6959@item --ttl=@var{ttl}
6960Produce @code{Cache-Control} HTTP headers that advertise a time-to-live
6961(TTL) of @var{ttl}. @var{ttl} must denote a duration: @code{5d} means 5
6962days, @code{1m} means 1 month, and so on.
6963
6964This allows the user's Guix to keep substitute information in cache for
6965@var{ttl}. However, note that @code{guix publish} does not itself
6966guarantee that the store items it provides will indeed remain available
6967for as long as @var{ttl}.
6968
d72b4206 6969Additionally, when @option{--cache} is used, cached entries that have
c95644f0
LC
6970not been accessed for @var{ttl} and that no longer have a corresponding
6971item in the store, may be deleted.
d72b4206 6972
4bb5e0ae
LC
6973@item --nar-path=@var{path}
6974Use @var{path} as the prefix for the URLs of ``nar'' files
6975(@pxref{Invoking guix archive, normalized archives}).
6976
6977By default, nars are served at a URL such as
6978@code{/nar/gzip/@dots{}-coreutils-8.25}. This option allows you to
6979change the @code{/nar} part to @var{path}.
6980
46f58390
LC
6981@item --public-key=@var{file}
6982@itemx --private-key=@var{file}
6983Use the specific @var{file}s as the public/private key pair used to sign
6984the store items being published.
6985
6986The files must correspond to the same key pair (the private key is used
6987for signing and the public key is merely advertised in the signature
6988metadata). They must contain keys in the canonical s-expression format
6989as produced by @command{guix archive --generate-key} (@pxref{Invoking
6990guix archive}). By default, @file{/etc/guix/signing-key.pub} and
6991@file{/etc/guix/signing-key.sec} are used.
6992
aff8ce7c
DT
6993@item --repl[=@var{port}]
6994@itemx -r [@var{port}]
6995Spawn a Guile REPL server (@pxref{REPL Servers,,, guile, GNU Guile
8ce229fc
LC
6996Reference Manual}) on @var{port} (37146 by default). This is used
6997primarily for debugging a running @command{guix publish} server.
aff8ce7c
DT
6998@end table
6999
1c52181f 7000Enabling @command{guix publish} on a GuixSD system is a one-liner: just
f1e900a3
LC
7001instantiate a @code{guix-publish-service-type} service in the @code{services} field
7002of the @code{operating-system} declaration (@pxref{guix-publish-service-type,
7003@code{guix-publish-service-type}}).
1c52181f 7004
332d7903
HG
7005If you are instead running Guix on a ``foreign distro'', follow these
7006instructions:”
7007
7008@itemize
7009@item
7010If your host distro uses the systemd init system:
7011
7012@example
7013# ln -s ~root/.guix-profile/lib/systemd/system/guix-publish.service \
7014 /etc/systemd/system/
7015# systemctl start guix-publish && systemctl enable guix-publish
7016@end example
7017
7018@item
7019If your host distro uses the Upstart init system:
7020
7021@example
7022# ln -s ~root/.guix-profile/lib/upstart/system/guix-publish.conf /etc/init/
7023# start guix-publish
7024@end example
7025
7026@item
7027Otherwise, proceed similarly with your distro's init system.
7028@end itemize
d23c20f1
LC
7029
7030@node Invoking guix challenge
7031@section Invoking @command{guix challenge}
7032
7033@cindex reproducible builds
7034@cindex verifiable builds
e32171ee
JD
7035@cindex @command{guix challenge}
7036@cindex challenge
d23c20f1 7037Do the binaries provided by this server really correspond to the source
f97c9175 7038code it claims to build? Is a package build process deterministic?
d23c20f1
LC
7039These are the questions the @command{guix challenge} command attempts to
7040answer.
7041
7042The former is obviously an important question: Before using a substitute
f97c9175 7043server (@pxref{Substitutes}), one had better @emph{verify} that it
d23c20f1
LC
7044provides the right binaries, and thus @emph{challenge} it. The latter
7045is what enables the former: If package builds are deterministic, then
7046independent builds of the package should yield the exact same result,
7047bit for bit; if a server provides a binary different from the one
7048obtained locally, it may be either corrupt or malicious.
7049
7050We know that the hash that shows up in @file{/gnu/store} file names is
7051the hash of all the inputs of the process that built the file or
7052directory---compilers, libraries, build scripts,
7053etc. (@pxref{Introduction}). Assuming deterministic build processes,
7054one store file name should map to exactly one build output.
7055@command{guix challenge} checks whether there is, indeed, a single
7056mapping by comparing the build outputs of several independent builds of
7057any given store item.
7058
f97c9175 7059The command output looks like this:
d23c20f1
LC
7060
7061@smallexample
ddbc7f7d
LC
7062$ guix challenge --substitute-urls="https://hydra.gnu.org https://guix.example.org"
7063updating list of substitutes from 'https://hydra.gnu.org'... 100.0%
7064updating list of substitutes from 'https://guix.example.org'... 100.0%
d23c20f1
LC
7065/gnu/store/@dots{}-openssl-1.0.2d contents differ:
7066 local hash: 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
ddbc7f7d
LC
7067 https://hydra.gnu.org/nar/@dots{}-openssl-1.0.2d: 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
7068 https://guix.example.org/nar/@dots{}-openssl-1.0.2d: 1zy4fmaaqcnjrzzajkdn3f5gmjk754b43qkq47llbyak9z0qjyim
d23c20f1
LC
7069/gnu/store/@dots{}-git-2.5.0 contents differ:
7070 local hash: 00p3bmryhjxrhpn2gxs2fy0a15lnip05l97205pgbk5ra395hyha
ddbc7f7d
LC
7071 https://hydra.gnu.org/nar/@dots{}-git-2.5.0: 069nb85bv4d4a6slrwjdy8v1cn4cwspm3kdbmyb81d6zckj3nq9f
7072 https://guix.example.org/nar/@dots{}-git-2.5.0: 0mdqa9w1p6cmli6976v4wi0sw9r4p5prkj7lzfd1877wk11c9c73
d23c20f1
LC
7073/gnu/store/@dots{}-pius-2.1.1 contents differ:
7074 local hash: 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
ddbc7f7d
LC
7075 https://hydra.gnu.org/nar/@dots{}-pius-2.1.1: 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
7076 https://guix.example.org/nar/@dots{}-pius-2.1.1: 1cy25x1a4fzq5rk0pmvc8xhwyffnqz95h2bpvqsz2mpvlbccy0gs
d23c20f1
LC
7077@end smallexample
7078
7079@noindent
7080In this example, @command{guix challenge} first scans the store to
7081determine the set of locally-built derivations---as opposed to store
7082items that were downloaded from a substitute server---and then queries
7083all the substitute servers. It then reports those store items for which
7084the servers obtained a result different from the local build.
7085
7086@cindex non-determinism, in package builds
7087As an example, @code{guix.example.org} always gets a different answer.
7088Conversely, @code{hydra.gnu.org} agrees with local builds, except in the
7089case of Git. This might indicate that the build process of Git is
7090non-deterministic, meaning that its output varies as a function of
7091various things that Guix does not fully control, in spite of building
7092packages in isolated environments (@pxref{Features}). Most common
7093sources of non-determinism include the addition of timestamps in build
7094results, the inclusion of random numbers, and directory listings sorted
a70a5004 7095by inode number. See @uref{https://reproducible-builds.org/docs/}, for
d23c20f1
LC
7096more information.
7097
f97c9175 7098To find out what is wrong with this Git binary, we can do something along
d23c20f1
LC
7099these lines (@pxref{Invoking guix archive}):
7100
7101@example
ddbc7f7d 7102$ wget -q -O - https://hydra.gnu.org/nar/@dots{}-git-2.5.0 \
d23c20f1 7103 | guix archive -x /tmp/git
043f4698 7104$ diff -ur --no-dereference /gnu/store/@dots{}-git.2.5.0 /tmp/git
d23c20f1
LC
7105@end example
7106
7107This command shows the difference between the files resulting from the
7108local build, and the files resulting from the build on
7109@code{hydra.gnu.org} (@pxref{Overview, Comparing and Merging Files,,
7110diffutils, Comparing and Merging Files}). The @command{diff} command
7111works great for text files. When binary files differ, a better option
ddbc7f7d 7112is @uref{https://diffoscope.org/, Diffoscope}, a tool that helps
d23c20f1
LC
7113visualize differences for all kinds of files.
7114
f97c9175 7115Once you have done that work, you can tell whether the differences are due
d23c20f1
LC
7116to a non-deterministic build process or to a malicious server. We try
7117hard to remove sources of non-determinism in packages to make it easier
f97c9175
AE
7118to verify substitutes, but of course, this is a process that
7119involves not just Guix, but a large part of the free software community.
d23c20f1
LC
7120In the meantime, @command{guix challenge} is one tool to help address
7121the problem.
7122
7123If you are writing packages for Guix, you are encouraged to check
7124whether @code{hydra.gnu.org} and other substitute servers obtain the
7125same build result as you did with:
7126
7127@example
7128$ guix challenge @var{package}
7129@end example
7130
7131@noindent
f97c9175 7132where @var{package} is a package specification such as
7cffaeb6 7133@code{guile@@2.0} or @code{glibc:debug}.
d23c20f1
LC
7134
7135The general syntax is:
7136
7137@example
7138guix challenge @var{options} [@var{packages}@dots{}]
7139@end example
7140
7cffaeb6
LC
7141When a difference is found between the hash of a locally-built item and
7142that of a server-provided substitute, or among substitutes provided by
7143different servers, the command displays it as in the example above and
a17417a8
LC
7144its exit code is 2 (other non-zero exit codes denote other kinds of
7145errors.)
7cffaeb6 7146
d23c20f1
LC
7147The one option that matters is:
7148
7149@table @code
7150
7151@item --substitute-urls=@var{urls}
7152Consider @var{urls} the whitespace-separated list of substitute source
7153URLs to compare to.
7154
153b6295
LC
7155@item --verbose
7156@itemx -v
7157Show details about matches (identical contents) in addition to
7158information about mismatches.
7159
d23c20f1
LC
7160@end table
7161
f11c444d
LC
7162@node Invoking guix copy
7163@section Invoking @command{guix copy}
7164
7165@cindex copy, of store items, over SSH
7166@cindex SSH, copy of store items
7167@cindex sharing store items across machines
7168@cindex transferring store items across machines
7169The @command{guix copy} command copies items from the store of one
7170machine to that of another machine over a secure shell (SSH)
7171connection@footnote{This command is available only when Guile-SSH was
7172found. @xref{Requirements}, for details.}. For example, the following
7173command copies the @code{coreutils} package, the user's profile, and all
7174their dependencies over to @var{host}, logged in as @var{user}:
7175
7176@example
7177guix copy --to=@var{user}@@@var{host} \
7178 coreutils `readlink -f ~/.guix-profile`
7179@end example
7180
7181If some of the items to be copied are already present on @var{host},
7182they are not actually sent.
7183
7184The command below retrieves @code{libreoffice} and @code{gimp} from
7185@var{host}, assuming they are available there:
7186
7187@example
7188guix copy --from=@var{host} libreoffice gimp
7189@end example
7190
7191The SSH connection is established using the Guile-SSH client, which is
7192compatible with OpenSSH: it honors @file{~/.ssh/known_hosts} and
7193@file{~/.ssh/config}, and uses the SSH agent for authentication.
7194
7195The key used to sign items that are sent must be accepted by the remote
7196machine. Likewise, the key used by the remote machine to sign items you
7197are retrieving must be in @file{/etc/guix/acl} so it is accepted by your
7198own daemon. @xref{Invoking guix archive}, for more information about
7199store item authentication.
7200
7201The general syntax is:
7202
7203@example
7204guix copy [--to=@var{spec}|--from=@var{spec}] @var{items}@dots{}
7205@end example
7206
7207You must always specify one of the following options:
7208
7209@table @code
7210@item --to=@var{spec}
7211@itemx --from=@var{spec}
7212Specify the host to send to or receive from. @var{spec} must be an SSH
7213spec such as @code{example.org}, @code{charlie@@example.org}, or
7214@code{charlie@@example.org:2222}.
7215@end table
7216
7217The @var{items} can be either package names, such as @code{gimp}, or
7218store items, such as @file{/gnu/store/@dots{}-idutils-4.6}.
7219
7220When specifying the name of a package to send, it is first built if
7221needed, unless @option{--dry-run} was specified. Common build options
7222are supported (@pxref{Common Build Options}).
7223
d23c20f1 7224
32efa254
DT
7225@node Invoking guix container
7226@section Invoking @command{guix container}
7227@cindex container
e32171ee 7228@cindex @command{guix container}
32efa254
DT
7229@quotation Note
7230As of version @value{VERSION}, this tool is experimental. The interface
7231is subject to radical change in the future.
7232@end quotation
7233
7234The purpose of @command{guix container} is to manipulate processes
7235running within an isolated environment, commonly known as a
46c36586 7236``container'', typically created by the @command{guix environment}
32efa254
DT
7237(@pxref{Invoking guix environment}) and @command{guix system container}
7238(@pxref{Invoking guix system}) commands.
7239
7240The general syntax is:
7241
7242@example
7243guix container @var{action} @var{options}@dots{}
7244@end example
7245
7246@var{action} specifies the operation to perform with a container, and
7247@var{options} specifies the context-specific arguments for the action.
7248
7249The following actions are available:
7250
7251@table @code
7252@item exec
7253Execute a command within the context of a running container.
7254
7255The syntax is:
7256
7257@example
7258guix container exec @var{pid} @var{program} @var{arguments}@dots{}
7259@end example
7260
7261@var{pid} specifies the process ID of the running container.
f97c9175
AE
7262@var{program} specifies an executable file name within the root file
7263system of the container. @var{arguments} are the additional options that
7264will be passed to @var{program}.
32efa254
DT
7265
7266The following command launches an interactive login shell inside a
7267GuixSD container, started by @command{guix system container}, and whose
7268process ID is 9001:
7269
7270@example
7271guix container exec 9001 /run/current-system/profile/bin/bash --login
7272@end example
7273
7274Note that the @var{pid} cannot be the parent process of a container. It
f97c9175 7275must be PID 1 of the container or one of its child processes.
32efa254
DT
7276
7277@end table
7278
585347d7
LC
7279@node Invoking guix weather
7280@section Invoking @command{guix weather}
7281
7282Occasionally you're grumpy because substitutes are lacking and you end
7283up building packages by yourself (@pxref{Substitutes}). The
7284@command{guix weather} command reports on substitute availability on the
7285specified servers so you can have an idea of whether you'll be grumpy
7286today. It can sometimes be useful info as a user, but it is primarily
7287useful to people running @command{guix publish} (@pxref{Invoking guix
7288publish}).
7289
7290@cindex statistics, for substitutes
7291@cindex availability of substitutes
7292@cindex substitute availability
7293@cindex weather, substitute availability
7294Here's a sample run:
7295
7296@example
7297$ guix weather --substitute-urls=https://guix.example.org
7298computing 5,872 package derivations for x86_64-linux...
7299looking for 6,128 store items on https://guix.example.org..
7300updating list of substitutes from 'https://guix.example.org'... 100.0%
7301https://guix.example.org
7302 43.4% substitutes available (2,658 out of 6,128)
7303 7,032.5 MiB of nars (compressed)
7304 19,824.2 MiB on disk (uncompressed)
7305 0.030 seconds per request (182.9 seconds in total)
7306 33.5 requests per second
7307@end example
7308
7309As you can see, it reports the fraction of all the packages for which
7310substitutes are available on the server---regardless of whether
7311substitutes are enabled, and regardless of whether this server's signing
7312key is authorized. It also reports the size of the compressed archives
7313(``nars'') provided by the server, the size the corresponding store
7314items occupy in the store (assuming deduplication is turned off), and
7315the server's throughput.
7316
7317To achieve that, @command{guix weather} queries over HTTP(S) meta-data
7318(@dfn{narinfos}) for all the relevant store items. Like @command{guix
7319challenge}, it ignores signatures on those substitutes, which is
7320innocuous since the command only gathers statistics and cannot install
7321those substitutes.
7322
7323Among other things, it is possible to query specific system types and
7324specific package sets. The available options are listed below.
7325
7326@table @code
7327@item --substitute-urls=@var{urls}
7328@var{urls} is the space-separated list of substitute server URLs to
7329query. When this option is omitted, the default set of substitute
7330servers is queried.
7331
7332@item --system=@var{system}
7333@itemx -s @var{system}
7334Query substitutes for @var{system}---e.g., @code{aarch64-linux}. This
7335option can be repeated, in which case @command{guix weather} will query
7336substitutes for several system types.
7337
7338@item --manifest=@var{file}
7339Instead of querying substitutes for all the packages, only ask for those
7340specified in @var{file}. @var{file} must contain a @dfn{manifest}, as
7341with the @code{-m} option of @command{guix package} (@pxref{Invoking
7342guix package}).
7343@end table
7344
7345
a1ba8475
LC
7346@c *********************************************************************
7347@node GNU Distribution
7348@chapter GNU Distribution
7349
3ca2731c 7350@cindex Guix System Distribution
4705641f 7351@cindex GuixSD
3ca2731c
LC
7352Guix comes with a distribution of the GNU system consisting entirely of
7353free software@footnote{The term ``free'' here refers to the
a1ba8475 7354@url{http://www.gnu.org/philosophy/free-sw.html,freedom provided to
3ca2731c 7355users of that software}.}. The
35ed9306
LC
7356distribution can be installed on its own (@pxref{System Installation}),
7357but it is also possible to install Guix as a package manager on top of
7358an installed GNU/Linux system (@pxref{Installation}). To distinguish
3ca2731c 7359between the two, we refer to the standalone distribution as the Guix
4705641f 7360System Distribution, or GuixSD.
35ed9306
LC
7361
7362The distribution provides core GNU packages such as GNU libc, GCC, and
7363Binutils, as well as many GNU and non-GNU applications. The complete
7364list of available packages can be browsed
093ae1be 7365@url{http://www.gnu.org/software/guix/packages,on-line} or by
d03bb653 7366running @command{guix package} (@pxref{Invoking guix package}):
a1ba8475
LC
7367
7368@example
e49951eb 7369guix package --list-available
a1ba8475
LC
7370@end example
7371
f97c9175 7372Our goal is to provide a practical 100% free software distribution of
401c53c4
LC
7373Linux-based and other variants of GNU, with a focus on the promotion and
7374tight integration of GNU components, and an emphasis on programs and
7375tools that help users exert that freedom.
7376
3ca2731c 7377Packages are currently available on the following platforms:
c320011d
LC
7378
7379@table @code
7380
7381@item x86_64-linux
7382Intel/AMD @code{x86_64} architecture, Linux-Libre kernel;
7383
7384@item i686-linux
7385Intel 32-bit architecture (IA32), Linux-Libre kernel;
7386
aa1e1947 7387@item armhf-linux
aa725117 7388ARMv7-A architecture with hard float, Thumb-2 and NEON,
f97c9175
AE
7389using the EABI hard-float application binary interface (ABI),
7390and Linux-Libre kernel.
aa1e1947 7391
3b88f376
EF
7392@item aarch64-linux
7393little-endian 64-bit ARMv8-A processors, Linux-Libre kernel. This is
be2ba697 7394currently in an experimental stage, with limited support.
3b88f376
EF
7395@xref{Contributing}, for how to help!
7396
c320011d
LC
7397@item mips64el-linux
7398little-endian 64-bit MIPS processors, specifically the Loongson series,
f97c9175 7399n32 ABI, and Linux-Libre kernel.
c320011d
LC
7400
7401@end table
7402
4705641f 7403GuixSD itself is currently only available on @code{i686} and @code{x86_64}.
3ca2731c 7404
c320011d
LC
7405@noindent
7406For information on porting to other architectures or kernels,
f97c9175 7407@pxref{Porting}.
c320011d 7408
401c53c4 7409@menu
5af6de3e 7410* System Installation:: Installing the whole operating system.
35ed9306 7411* System Configuration:: Configuring the operating system.
31f1f593 7412* Documentation:: Browsing software user manuals.
91ef73d4 7413* Installing Debugging Files:: Feeding the debugger.
05962f29 7414* Security Updates:: Deploying security fixes quickly.
401c53c4 7415* Package Modules:: Packages from the programmer's viewpoint.
da7cabd4 7416* Packaging Guidelines:: Growing the distribution.
401c53c4 7417* Bootstrapping:: GNU/Linux built from scratch.
8b315a6d 7418* Porting:: Targeting another platform or kernel.
401c53c4
LC
7419@end menu
7420
7421Building this distribution is a cooperative effort, and you are invited
081145cf 7422to join! @xref{Contributing}, for information about how you can help.
401c53c4 7423
5af6de3e
LC
7424@node System Installation
7425@section System Installation
7426
e32171ee 7427@cindex installing GuixSD
3ca2731c 7428@cindex Guix System Distribution
c8b54374 7429This section explains how to install the Guix System Distribution (GuixSD)
3ca2731c 7430on a machine. The Guix package manager can
35ed9306
LC
7431also be installed on top of a running GNU/Linux system,
7432@pxref{Installation}.
5af6de3e
LC
7433
7434@ifinfo
9c18cf9b 7435@quotation Note
5af6de3e
LC
7436@c This paragraph is for people reading this from tty2 of the
7437@c installation image.
1068f26b 7438You are reading this documentation with an Info reader. For details on
5af6de3e 7439how to use it, hit the @key{RET} key (``return'' or ``enter'') on the
de341e7c
LC
7440link that follows: @pxref{Top, Info reader,, info-stnd, Stand-alone GNU
7441Info}. Hit @kbd{l} afterwards to come back here.
9c18cf9b
LC
7442
7443Alternately, run @command{info info} in another tty to keep the manual
7444available.
7445@end quotation
5af6de3e
LC
7446@end ifinfo
7447
dedb8d5e 7448@menu
e3009f60
LC
7449* Limitations:: What you can expect.
7450* Hardware Considerations:: Supported hardware.
7451* USB Stick Installation:: Preparing the installation medium.
7452* Preparing for Installation:: Networking, partitioning, etc.
7453* Proceeding with the Installation:: The real thing.
c8b54374 7454* Installing GuixSD in a VM:: GuixSD playground.
e3009f60 7455* Building the Installation Image:: How this comes to be.
dedb8d5e
LC
7456@end menu
7457
7458@node Limitations
8aaaae38
LC
7459@subsection Limitations
7460
4705641f 7461As of version @value{VERSION}, the Guix System Distribution (GuixSD) is
3ca2731c 7462not production-ready. It may contain bugs and lack important
8aaaae38
LC
7463features. Thus, if you are looking for a stable production system that
7464respects your freedom as a computer user, a good solution at this point
7465is to consider @url{http://www.gnu.org/distros/free-distros.html, one of
f97c9175 7466the more established GNU/Linux distributions}. We hope you can soon switch
4705641f 7467to the GuixSD without fear, of course. In the meantime, you can
8aaaae38
LC
7468also keep using your distribution and try out the package manager on top
7469of it (@pxref{Installation}).
7470
7471Before you proceed with the installation, be aware of the following
7472noteworthy limitations applicable to version @value{VERSION}:
7473
7474@itemize
7475@item
7476The installation process does not include a graphical user interface and
7477requires familiarity with GNU/Linux (see the following subsections to
7478get a feel of what that means.)
7479
8aaaae38 7480@item
dbcb0ab1 7481Support for the Logical Volume Manager (LVM) is missing.
8aaaae38
LC
7482
7483@item
0be9b4a9
LC
7484More and more system services are provided (@pxref{Services}), but some
7485may be missing.
8aaaae38
LC
7486
7487@item
0be9b4a9 7488More than 5,300 packages are available, but you may
8aaaae38 7489occasionally find that a useful package is missing.
5fe01c2d
LC
7490
7491@item
0be9b4a9 7492GNOME, Xfce, LXDE, and Enlightenment are available (@pxref{Desktop Services}),
5fe01c2d
LC
7493as well as a number of X11 window managers. However, some graphical
7494applications may be missing, as well as KDE.
8aaaae38
LC
7495@end itemize
7496
f97c9175
AE
7497You have been warned! But more than a disclaimer, this is an invitation
7498to report issues (and success stories!), and to join us in improving it.
8aaaae38 7499@xref{Contributing}, for more info.
5af6de3e 7500
e3009f60
LC
7501
7502@node Hardware Considerations
7503@subsection Hardware Considerations
7504
7505@cindex hardware support on GuixSD
7506GNU@tie{}GuixSD focuses on respecting the user's computing freedom. It
7507builds around the kernel Linux-libre, which means that only hardware for
e0b3f97e 7508which free software drivers and firmware exist is supported. Nowadays,
e3009f60
LC
7509a wide range of off-the-shelf hardware is supported on
7510GNU/Linux-libre---from keyboards to graphics cards to scanners and
7511Ethernet controllers. Unfortunately, there are still areas where
7512hardware vendors deny users control over their own computing, and such
7513hardware is not supported on GuixSD.
7514
7515@cindex WiFi, hardware support
e0b3f97e 7516One of the main areas where free drivers or firmware are lacking is WiFi
e3009f60
LC
7517devices. WiFi devices known to work include those using Atheros chips
7518(AR9271 and AR7010), which corresponds to the @code{ath9k} Linux-libre
52db41af
EB
7519driver, and those using Broadcom/AirForce chips (BCM43xx with
7520Wireless-Core Revision 5), which corresponds to the @code{b43-open}
7521Linux-libre driver. Free firmware exists for both and is available
e3009f60
LC
7522out-of-the-box on GuixSD, as part of @var{%base-firmware}
7523(@pxref{operating-system Reference, @code{firmware}}).
7524
7525@cindex RYF, Respects Your Freedom
7526The @uref{https://www.fsf.org/, Free Software Foundation} runs
e0b3f97e 7527@uref{https://www.fsf.org/ryf, @dfn{Respects Your Freedom}} (RYF), a
e3009f60
LC
7528certification program for hardware products that respect your freedom
7529and your privacy and ensure that you have control over your device. We
e0b3f97e 7530encourage you to check the list of RYF-certified devices.
e3009f60
LC
7531
7532Another useful resource is the @uref{https://www.h-node.org/, H-Node}
7533web site. It contains a catalog of hardware devices with information
7534about their support in GNU/Linux.
7535
7536
dedb8d5e 7537@node USB Stick Installation
5af6de3e
LC
7538@subsection USB Stick Installation
7539
7540An installation image for USB sticks can be downloaded from
4705641f 7541@indicateurl{ftp://alpha.gnu.org/gnu/guix/guixsd-usb-install-@value{VERSION}.@var{system}.xz},
5af6de3e
LC
7542where @var{system} is one of:
7543
7544@table @code
7545@item x86_64-linux
7546for a GNU/Linux system on Intel/AMD-compatible 64-bit CPUs;
7547
7548@item i686-linux
7549for a 32-bit GNU/Linux system on Intel-compatible CPUs.
7550@end table
7551
debc6360
LC
7552@c start duplication of authentication part from ``Binary Installation''
7553Make sure to download the associated @file{.sig} file and to verify the
7554authenticity of the image against it, along these lines:
7555
7556@example
7557$ wget ftp://alpha.gnu.org/gnu/guix/guixsd-usb-install-@value{VERSION}.@var{system}.xz.sig
7558$ gpg --verify guixsd-usb-install-@value{VERSION}.@var{system}.xz.sig
7559@end example
7560
7561If that command fails because you do not have the required public key,
7562then run this command to import it:
7563
7564@example
7565$ gpg --keyserver pgp.mit.edu --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
7566@end example
7567
7568@noindent
7569and rerun the @code{gpg --verify} command.
7570@c end duplication
7571
5af6de3e
LC
7572This image contains a single partition with the tools necessary for an
7573installation. It is meant to be copied @emph{as is} to a large-enough
7574USB stick.
7575
7576To copy the image to a USB stick, follow these steps:
7577
7578@enumerate
7579@item
7580Decompress the image using the @command{xz} command:
7581
7582@example
4705641f 7583xz -d guixsd-usb-install-@value{VERSION}.@var{system}.xz
5af6de3e
LC
7584@end example
7585
7586@item
f97c9175
AE
7587Insert a USB stick of 1@tie{}GiB or more into your machine, and determine
7588its device name. Assuming that the USB stick is known as @file{/dev/sdX},
5af6de3e
LC
7589copy the image with:
7590
7591@example
4705641f 7592dd if=guixsd-usb-install-@value{VERSION}.x86_64 of=/dev/sdX
0e2bfa3a 7593sync
5af6de3e
LC
7594@end example
7595
7596Access to @file{/dev/sdX} usually requires root privileges.
7597@end enumerate
7598
7599Once this is done, you should be able to reboot the system and boot from
4fed93a1 7600the USB stick. The latter usually requires you to get in the BIOS or
8ea98ee1 7601UEFI boot menu, where you can choose to boot from the USB stick.
5af6de3e 7602
c8b54374
VL
7603@xref{Installing GuixSD in a VM}, if, instead, you would like to install
7604GuixSD in a virtual machine (VM).
7605
dedb8d5e 7606@node Preparing for Installation
5af6de3e
LC
7607@subsection Preparing for Installation
7608
7609Once you have successfully booted the image on the USB stick, you should
7610end up with a root prompt. Several console TTYs are configured and can
7611be used to run commands as root. TTY2 shows this documentation,
de341e7c
LC
7612browsable using the Info reader commands (@pxref{Top,,, info-stnd,
7613Stand-alone GNU Info}). The installation system runs the GPM mouse
7614daemon, which allows you to select text with the left mouse button and
7615to paste it with the middle button.
5af6de3e 7616
ff925d37
LC
7617@quotation Note
7618Installation requires access to the Internet so that any missing
7619dependencies of your system configuration can be downloaded. See the
7620``Networking'' section below.
7621@end quotation
7622
0e69cf67
LC
7623The installation system includes many common tools needed for this task.
7624But it is also a full-blown GuixSD system, which means that you can
7625install additional packages, should you need it, using @command{guix
7626package} (@pxref{Invoking guix package}).
7627
dedb8d5e 7628@subsubsection Keyboard Layout
5af6de3e 7629
dedb8d5e
LC
7630@cindex keyboard layout
7631The installation image uses the US qwerty keyboard layout. If you want
7632to change it, you can use the @command{loadkeys} command. For example,
7633the following command selects the Dvorak keyboard layout:
5af6de3e 7634
dedb8d5e
LC
7635@example
7636loadkeys dvorak
7637@end example
7638
7639See the files under @file{/run/current-system/profile/share/keymaps} for
7640a list of available keyboard layouts. Run @command{man loadkeys} for
7641more information.
7642
7643@subsubsection Networking
7644
7645Run the following command see what your network interfaces are called:
235cba85
LC
7646
7647@example
dedb8d5e 7648ifconfig -a
235cba85
LC
7649@end example
7650
1713c37f
LC
7651@noindent
7652@dots{} or, using the GNU/Linux-specific @command{ip} command:
7653
7654@example
7655ip a
7656@end example
7657
95c559c1 7658@c http://cgit.freedesktop.org/systemd/systemd/tree/src/udev/udev-builtin-net_id.c#n20
dedb8d5e
LC
7659Wired interfaces have a name starting with @samp{e}; for example, the
7660interface corresponding to the first on-board Ethernet controller is
7661called @samp{eno1}. Wireless interfaces have a name starting with
7662@samp{w}, like @samp{w1p2s0}.
7663
7664@table @asis
7665@item Wired connection
7666To configure a wired network run the following command, substituting
7667@var{interface} with the name of the wired interface you want to use.
7668
7669@example
7670ifconfig @var{interface} up
7671@end example
7672
7673@item Wireless connection
e32171ee
JD
7674@cindex wireless
7675@cindex WiFi
dedb8d5e
LC
7676To configure wireless networking, you can create a configuration file
7677for the @command{wpa_supplicant} configuration tool (its location is not
7678important) using one of the available text editors such as
7679@command{zile}:
7680
7681@example
7682zile wpa_supplicant.conf
7683@end example
7684
7685As an example, the following stanza can go to this file and will work
7686for many wireless networks, provided you give the actual SSID and
7687passphrase for the network you are connecting to:
7688
7689@example
7690network=@{
ae768308 7691 ssid="@var{my-ssid}"
dedb8d5e
LC
7692 key_mgmt=WPA-PSK
7693 psk="the network's secret passphrase"
7694@}
7695@end example
7696
7697Start the wireless service and run it in the background with the
7698following command (substitute @var{interface} with the name of the
7699network interface you want to use):
7700
7701@example
7702wpa_supplicant -c wpa_supplicant.conf -i @var{interface} -B
7703@end example
7704
641d0518 7705Run @command{man wpa_supplicant} for more information.
dedb8d5e
LC
7706@end table
7707
e32171ee 7708@cindex DHCP
dedb8d5e
LC
7709At this point, you need to acquire an IP address. On a network where IP
7710addresses are automatically assigned @i{via} DHCP, you can run:
7711
7712@example
15650ac2 7713dhclient -v @var{interface}
dedb8d5e 7714@end example
5af6de3e 7715
dedb8d5e
LC
7716Try to ping a server to see if networking is up and running:
7717
7718@example
7719ping -c 3 gnu.org
7720@end example
5af6de3e
LC
7721
7722Setting up network access is almost always a requirement because the
7723image does not contain all the software and tools that may be needed.
7724
c80cd4df
MB
7725@cindex installing over SSH
7726If you want to, you can continue the installation remotely by starting
7727an SSH server:
7728
7729@example
7730herd start ssh-daemon
7731@end example
7732
7733Make sure to either set a password with @command{passwd}, or configure
7734OpenSSH public key authentication before logging in.
7735
dedb8d5e
LC
7736@subsubsection Disk Partitioning
7737
7738Unless this has already been done, the next step is to partition, and
7739then format the target partition(s).
7740
7741The installation image includes several partitioning tools, including
7742Parted (@pxref{Overview,,, parted, GNU Parted User Manual}),
7743@command{fdisk}, and @command{cfdisk}. Run it and set up your disk with
7744the partition layout you want:
7745
7746@example
7747cfdisk
7748@end example
7749
d918d79f
SB
7750If your disk uses the GUID Partition Table (GPT) format and you plan to
7751install BIOS-based GRUB (which is the default), make sure a BIOS Boot
7752Partition is available (@pxref{BIOS installation,,, grub, GNU GRUB
7753manual}).
7754
8ea98ee1
MB
7755@cindex EFI, installation
7756@cindex UEFI, installation
7757@cindex ESP, EFI system partition
7758If you instead wish to use EFI-based GRUB, a FAT32 @dfn{EFI System Partition}
7759(ESP) is required. This partition should be mounted at @file{/boot/efi} and
7760must have the @code{esp} flag set. E.g., for @command{parted}:
7761
7762@example
7763parted /dev/sda set 1 esp on
7764@end example
7765
dedb8d5e
LC
7766Once you are done partitioning the target hard disk drive, you have to
7767create a file system on the relevant partition(s)@footnote{Currently
b1a505ba
DC
7768GuixSD only supports ext4 and btrfs file systems. In particular, code
7769that reads partition UUIDs and labels only works for these file system
7770types.}.
5af6de3e 7771
7ab44369
LC
7772Preferably, assign partitions a label so that you can easily and
7773reliably refer to them in @code{file-system} declarations (@pxref{File
7774Systems}). This is typically done using the @code{-L} option of
dedb8d5e
LC
7775@command{mkfs.ext4} and related commands. So, assuming the target root
7776partition lives at @file{/dev/sda1}, a file system with the label
7777@code{my-root} can be created with:
7ab44369 7778
dedb8d5e
LC
7779@example
7780mkfs.ext4 -L my-root /dev/sda1
7781@end example
dd816355 7782
13fb1bd9
LC
7783@cindex encrypted disk
7784If you are instead planning to encrypt the root partition, you can use
7785the Cryptsetup/LUKS utilities to do that (see @inlinefmtifelse{html,
7786@uref{https://linux.die.net/man/8/cryptsetup, @code{man cryptsetup}},
7787@code{man cryptsetup}} for more information.) Assuming you want to
7788store the root partition on @file{/dev/sda1}, the command sequence would
7789be along these lines:
6d6e6281 7790
13fb1bd9
LC
7791@example
7792cryptsetup luksFormat /dev/sda1
7793cryptsetup open --type luks /dev/sda1 my-partition
7794mkfs.ext4 -L my-root /dev/mapper/my-partition
7795@end example
5af6de3e 7796
dedb8d5e 7797Once that is done, mount the target root partition under @file{/mnt}
13fb1bd9
LC
7798with a command like (again, assuming @code{my-root} is the label of the
7799root partition):
83a17b62 7800
dedb8d5e 7801@example
13fb1bd9 7802mount LABEL=my-root /mnt
dedb8d5e 7803@end example
83a17b62 7804
8ea98ee1
MB
7805Also mount any other partitions you would like to use on the target
7806system relative to this path. If you have @file{/boot} on a separate
7807partition for example, mount it at @file{/mnt/boot} now so it is found
7808by @code{guix system init} afterwards.
7809
31b6cdf8
LC
7810Finally, if you plan to use one or more swap partitions (@pxref{Memory
7811Concepts, swap space,, libc, The GNU C Library Reference Manual}), make
7812sure to initialize them with @command{mkswap}. Assuming you have one
7813swap partition on @file{/dev/sda2}, you would run:
7814
7815@example
7816mkswap /dev/sda2
b2ff76a0 7817swapon /dev/sda2
31b6cdf8
LC
7818@end example
7819
a4ca4362
CM
7820Alternatively, you may use a swap file. For example, assuming that in
7821the new system you want to use the file @file{/swapfile} as a swap file,
7822you would run@footnote{This example will work for many types of file
7823systems (e.g., ext4). However, for copy-on-write file systems (e.g.,
7824btrfs), the required steps may be different. For details, see the
7825manual pages for @command{mkswap} and @command{swapon}.}:
7826
7827@example
7828# This is 10 GiB of swap space. Adjust "count" to change the size.
7829dd if=/dev/zero of=/mnt/swapfile bs=1MiB count=10240
7830# For security, make the file readable and writable only by root.
7831chmod 600 /mnt/swapfile
7832mkswap /mnt/swapfile
7833swapon /mnt/swapfile
7834@end example
7835
7836Note that if you have encrypted the root partition and created a swap
7837file in its file system as described above, then the encryption also
7838protects the swap file, just like any other file in that file system.
7839
dedb8d5e
LC
7840@node Proceeding with the Installation
7841@subsection Proceeding with the Installation
83a17b62 7842
dedb8d5e
LC
7843With the target partitions ready and the target root mounted on
7844@file{/mnt}, we're ready to go. First, run:
5af6de3e 7845
dedb8d5e
LC
7846@example
7847herd start cow-store /mnt
7848@end example
5af6de3e 7849
b397c0d5
LC
7850This makes @file{/gnu/store} copy-on-write, such that packages added to it
7851during the installation phase are written to the target disk on @file{/mnt}
7852rather than kept in memory. This is necessary because the first phase of
7853the @command{guix system init} command (see below) entails downloads or
7854builds to @file{/gnu/store} which, initially, is an in-memory file system.
5af6de3e 7855
dedb8d5e 7856Next, you have to edit a file and
5af6de3e 7857provide the declaration of the operating system to be installed. To
a8cb87ab
LC
7858that end, the installation system comes with three text editors: GNU nano
7859(@pxref{Top,,, nano, GNU nano Manual}), GNU Zile (an Emacs clone), and
7860nvi (a clone of the original BSD @command{vi} editor).
efa77c6c
LC
7861We strongly recommend storing that file on the target root file system, say,
7862as @file{/mnt/etc/config.scm}. Failing to do that, you will have lost your
7863configuration file once you have rebooted into the newly-installed system.
5af6de3e 7864
dedb8d5e
LC
7865@xref{Using the Configuration System}, for an overview of the
7866configuration file. The example configurations discussed in that
7867section are available under @file{/etc/configuration} in the
7868installation image. Thus, to get started with a system configuration
7869providing a graphical display server (a ``desktop'' system), you can run
7870something along these lines:
7871
7872@example
7873# mkdir /mnt/etc
7874# cp /etc/configuration/desktop.scm /mnt/etc/config.scm
7875# zile /mnt/etc/config.scm
7876@end example
7877
7878You should pay attention to what your configuration file contains, and
7879in particular:
7880
7881@itemize
7882@item
7883Make sure the @code{grub-configuration} form refers to the device you
8ea98ee1
MB
7884want to install GRUB on. You also need to specify the @code{grub-efi}
7885package if you wish to use native UEFI boot.
dedb8d5e
LC
7886
7887@item
7888Be sure that your partition labels match the value of their respective
7889@code{device} fields in your @code{file-system} configuration, assuming
7890your @code{file-system} configuration sets the value of @code{title} to
7891@code{'label}.
13fb1bd9
LC
7892
7893@item
7894If there are encrypted or RAID partitions, make sure to add a
7895@code{mapped-devices} field to describe them (@pxref{Mapped Devices}).
dedb8d5e 7896@end itemize
5af6de3e 7897
dd51caac
LC
7898Once you are done preparing the configuration file, the new system must
7899be initialized (remember that the target root file system is mounted
7900under @file{/mnt}):
5af6de3e
LC
7901
7902@example
7903guix system init /mnt/etc/config.scm /mnt
7904@end example
7905
7906@noindent
dedb8d5e 7907This copies all the necessary files and installs GRUB on
f8818360 7908@file{/dev/sdX}, unless you pass the @option{--no-bootloader} option. For
6621cdb6 7909more information, @pxref{Invoking guix system}. This command may trigger
5af6de3e
LC
7910downloads or builds of missing packages, which can take some time.
7911
1bd4e6db
LC
7912Once that command has completed---and hopefully succeeded!---you can run
7913@command{reboot} and boot into the new system. The @code{root} password
7914in the new system is initially empty; other users' passwords need to be
7915initialized by running the @command{passwd} command as @code{root},
7916unless your configuration specifies otherwise
7917(@pxref{user-account-password, user account passwords}).
7918
7fcf2a0b
LC
7919@cindex upgrading GuixSD
7920From then on, you can update GuixSD whenever you want by running
7921@command{guix pull} as @code{root} (@pxref{Invoking guix pull}), and
7922then running @command{guix system reconfigure} to build a new system
7923generation with the latest packages and services (@pxref{Invoking guix
7924system}). We recommend doing that regularly so that your system
7925includes the latest security updates (@pxref{Security Updates}).
7926
1bd4e6db 7927Join us on @code{#guix} on the Freenode IRC network or on
5af6de3e
LC
7928@file{guix-devel@@gnu.org} to share your experience---good or not so
7929good.
7930
c8b54374
VL
7931@node Installing GuixSD in a VM
7932@subsection Installing GuixSD in a Virtual Machine
7933
7934@cindex virtual machine, GuixSD installation
4b236c88
LF
7935@cindex virtual private server (VPS)
7936@cindex VPS (virtual private server)
7937If you'd like to install GuixSD in a virtual machine (VM) or on a
7938virtual private server (VPS) rather than on your beloved machine, this
7939section is for you.
c8b54374
VL
7940
7941To boot a @uref{http://qemu.org/,QEMU} VM for installing GuixSD in a
7942disk image, follow these steps:
7943
7944@enumerate
7945@item
a0885414
LF
7946First, retrieve and decompress the GuixSD installation image as
7947described previously (@pxref{USB Stick Installation}).
c8b54374
VL
7948
7949@item
7950Create a disk image that will hold the installed system. To make a
7951qcow2-formatted disk image, use the @command{qemu-img} command:
7952
7953@example
01049bb0 7954qemu-img create -f qcow2 guixsd.img 50G
c8b54374
VL
7955@end example
7956
01049bb0
LF
7957The resulting file will be much smaller than 50 GB (typically less than
79581 MB), but it will grow as the virtualized storage device is filled up.
c8b54374
VL
7959
7960@item
7961Boot the USB installation image in an VM:
7962
7963@example
7964qemu-system-x86_64 -m 1024 -smp 1 \
d36b8457 7965 -net user -net nic,model=virtio -boot menu=on \
1c25d6d0
DM
7966 -drive file=guixsd-usb-install-@value{VERSION}.@var{system} \
7967 -drive file=guixsd.img
c8b54374
VL
7968@end example
7969
1c25d6d0
DM
7970The ordering of the drives matters.
7971
c8b54374
VL
7972In the VM console, quickly press the @kbd{F12} key to enter the boot
7973menu. Then press the @kbd{2} key and the @kbd{RET} key to validate your
7974selection.
7975
7976@item
7977You're now root in the VM, proceed with the installation process.
7978@xref{Preparing for Installation}, and follow the instructions.
7979@end enumerate
7980
7981Once installation is complete, you can boot the system that's on your
7982@file{guixsd.img} image. @xref{Running GuixSD in a VM}, for how to do
7983that.
7984
dedb8d5e 7985@node Building the Installation Image
5af6de3e
LC
7986@subsection Building the Installation Image
7987
e32171ee 7988@cindex installation image
5af6de3e
LC
7989The installation image described above was built using the @command{guix
7990system} command, specifically:
7991
7992@example
a8ac4f08 7993guix system disk-image gnu/system/install.scm
5af6de3e
LC
7994@end example
7995
6e6a0401
AE
7996Have a look at @file{gnu/system/install.scm} in the source tree,
7997and see also @ref{Invoking guix system} for more information
5af6de3e
LC
7998about the installation image.
7999
cf4a9129
LC
8000@node System Configuration
8001@section System Configuration
b208a005 8002
cf4a9129 8003@cindex system configuration
3ca2731c 8004The Guix System Distribution supports a consistent whole-system configuration
cf4a9129
LC
8005mechanism. By that we mean that all aspects of the global system
8006configuration---such as the available system services, timezone and
8007locale settings, user accounts---are declared in a single place. Such
8008a @dfn{system configuration} can be @dfn{instantiated}---i.e., effected.
91ef73d4 8009
cf4a9129
LC
8010One of the advantages of putting all the system configuration under the
8011control of Guix is that it supports transactional system upgrades, and
1068f26b 8012makes it possible to roll back to a previous system instantiation,
cf4a9129 8013should something go wrong with the new one (@pxref{Features}). Another
1068f26b 8014advantage is that it makes it easy to replicate the exact same configuration
cf4a9129
LC
8015across different machines, or at different points in time, without
8016having to resort to additional administration tools layered on top of
1068f26b 8017the own tools of the system.
cf4a9129 8018@c Yes, we're talking of Puppet, Chef, & co. here. ↑
91ef73d4 8019
cf4a9129
LC
8020This section describes this mechanism. First we focus on the system
8021administrator's viewpoint---explaining how the system is configured and
8022instantiated. Then we show how this mechanism can be extended, for
8023instance to support new system services.
91ef73d4 8024
cf4a9129
LC
8025@menu
8026* Using the Configuration System:: Customizing your GNU system.
7313a52e 8027* operating-system Reference:: Detail of operating-system declarations.
cf4a9129 8028* File Systems:: Configuring file system mounts.
510f9d86 8029* Mapped Devices:: Block device extra processing.
cf4a9129 8030* User Accounts:: Specifying user accounts.
598e19dc 8031* Locales:: Language and cultural convention settings.
cf4a9129 8032* Services:: Specifying system services.
0ae8c15a 8033* Setuid Programs:: Programs running with root privileges.
efb5e833 8034* X.509 Certificates:: Authenticating HTTPS servers.
996ed739 8035* Name Service Switch:: Configuring libc's name service switch.
fd1b1fa2 8036* Initial RAM Disk:: Linux-Libre bootstrapping.
74e64724 8037* Bootloader Configuration:: Configuring the boot loader.
cf4a9129 8038* Invoking guix system:: Instantiating a system configuration.
97d76250 8039* Running GuixSD in a VM:: How to run GuixSD in a virtual machine.
cf4a9129
LC
8040* Defining Services:: Adding new service definitions.
8041@end menu
91ef73d4 8042
cf4a9129
LC
8043@node Using the Configuration System
8044@subsection Using the Configuration System
64d76fa6 8045
cf4a9129
LC
8046The operating system is configured by providing an
8047@code{operating-system} declaration in a file that can then be passed to
8048the @command{guix system} command (@pxref{Invoking guix system}). A
8049simple setup, with the default system services, the default Linux-Libre
8050kernel, initial RAM disk, and boot loader looks like this:
91ef73d4 8051
cf4a9129
LC
8052@findex operating-system
8053@lisp
dd51caac 8054@include os-config-bare-bones.texi
cf4a9129 8055@end lisp
401c53c4 8056
cf4a9129
LC
8057This example should be self-describing. Some of the fields defined
8058above, such as @code{host-name} and @code{bootloader}, are mandatory.
8059Others, such as @code{packages} and @code{services}, can be omitted, in
8060which case they get a default value.
e7f34eb0 8061
5d94ac51
LC
8062Below we discuss the effect of some of the most important fields
8063(@pxref{operating-system Reference}, for details about all the available
8064fields), and how to @dfn{instantiate} the operating system using
8065@command{guix system}.
8066
8067@unnumberedsubsubsec Globally-Visible Packages
8068
cf4a9129 8069@vindex %base-packages
5d94ac51
LC
8070The @code{packages} field lists packages that will be globally visible
8071on the system, for all user accounts---i.e., in every user's @code{PATH}
8072environment variable---in addition to the per-user profiles
8073(@pxref{Invoking guix package}). The @var{%base-packages} variable
8074provides all the tools one would expect for basic user and administrator
8075tasks---including the GNU Core Utilities, the GNU Networking Utilities,
8076the GNU Zile lightweight text editor, @command{find}, @command{grep},
8077etc. The example above adds tcpdump to those, taken from the @code{(gnu
fe0915cf
JL
8078packages admin)} module (@pxref{Package Modules}). The
8079@code{(list package output)} syntax can be used to add a specific output
8080of a package:
8081
8082@lisp
8083(use-modules (gnu packages))
8084(use-modules (gnu packages dns))
8085
8086(operating-system
8087 ;; ...
8088 (packages (cons (list bind "utils")
8089 %base-packages)))
8090@end lisp
e7f34eb0 8091
f6c9fb1b
LC
8092@findex specification->package
8093Referring to packages by variable name, like @var{tcpdump} above, has
8094the advantage of being unambiguous; it also allows typos and such to be
8095diagnosed right away as ``unbound variables''. The downside is that one
8096needs to know which module defines which package, and to augment the
8097@code{use-package-modules} line accordingly. To avoid that, one can use
8098the @code{specification->package} procedure of the @code{(gnu packages)}
8099module, which returns the best package for a given name or name and
8100version:
8101
8102@lisp
8103(use-modules (gnu packages))
8104
8105(operating-system
8106 ;; ...
8107 (packages (append (map specification->package
d5e59248 8108 '("tcpdump" "htop" "gnupg@@2.0"))
f6c9fb1b
LC
8109 %base-packages)))
8110@end lisp
8111
5d94ac51
LC
8112@unnumberedsubsubsec System Services
8113
e32171ee 8114@cindex services
cf4a9129
LC
8115@vindex %base-services
8116The @code{services} field lists @dfn{system services} to be made
8117available when the system starts (@pxref{Services}).
8118The @code{operating-system} declaration above specifies that, in
8119addition to the basic services, we want the @command{lshd} secure shell
cd6f6c22
LC
8120daemon listening on port 2222 (@pxref{Networking Services,
8121@code{lsh-service}}). Under the hood,
cf4a9129
LC
8122@code{lsh-service} arranges so that @code{lshd} is started with the
8123right command-line options, possibly with supporting configuration files
cd6f6c22
LC
8124generated as needed (@pxref{Defining Services}).
8125
8126@cindex customization, of services
8127@findex modify-services
8128Occasionally, instead of using the base services as is, you will want to
4d343a14
CM
8129customize them. To do this, use @code{modify-services} (@pxref{Service
8130Reference, @code{modify-services}}) to modify the list.
8131
8132For example, suppose you want to modify @code{guix-daemon} and Mingetty
8133(the console log-in) in the @var{%base-services} list (@pxref{Base
8134Services, @code{%base-services}}). To do that, you can write the
8135following in your operating system declaration:
cd6f6c22
LC
8136
8137@lisp
4d343a14
CM
8138(define %my-services
8139 ;; My very own list of services.
8140 (modify-services %base-services
8141 (guix-service-type config =>
8142 (guix-configuration
8143 (inherit config)
8144 (use-substitutes? #f)
8145 (extra-options '("--gc-keep-derivations"))))
8146 (mingetty-service-type config =>
8147 (mingetty-configuration
317d3b47 8148 (inherit config)))))
4d343a14
CM
8149
8150(operating-system
8151 ;; @dots{}
8152 (services %my-services))
cd6f6c22
LC
8153@end lisp
8154
4d343a14
CM
8155This changes the configuration---i.e., the service parameters---of the
8156@code{guix-service-type} instance, and that of all the
8157@code{mingetty-service-type} instances in the @var{%base-services} list.
8158Observe how this is accomplished: first, we arrange for the original
8159configuration to be bound to the identifier @code{config} in the
8160@var{body}, and then we write the @var{body} so that it evaluates to the
8161desired configuration. In particular, notice how we use @code{inherit}
8162to create a new configuration which has the same values as the old
8163configuration, but with a few modifications.
a1ba8475 8164
13fb1bd9
LC
8165@cindex encrypted disk
8166The configuration for a typical ``desktop'' usage, with an encrypted
8167root partition, the X11 display
d038b674
LC
8168server, GNOME and Xfce (users can choose which of these desktop
8169environments to use at the log-in screen by pressing @kbd{F1}), network
8170management, power management, and more, would look like this:
dd51caac
LC
8171
8172@lisp
8173@include os-config-desktop.texi
8174@end lisp
8175
8ea98ee1 8176A graphical UEFI system with a choice of lightweight window managers
d038b674
LC
8177instead of full-blown desktop environments would look like this:
8178
8179@lisp
8180@include os-config-lightweight-desktop.texi
8181@end lisp
8182
dd51caac 8183@xref{Desktop Services}, for the exact list of services provided by
efb5e833
LC
8184@var{%desktop-services}. @xref{X.509 Certificates}, for background
8185information about the @code{nss-certs} package that is used here.
dd51caac 8186
5d94ac51
LC
8187Again, @var{%desktop-services} is just a list of service objects. If
8188you want to remove services from there, you can do so using the
8189procedures for list filtering (@pxref{SRFI-1 Filtering and
8190Partitioning,,, guile, GNU Guile Reference Manual}). For instance, the
8191following expression returns a list that contains all the services in
8192@var{%desktop-services} minus the Avahi service:
8193
8194@example
8195(remove (lambda (service)
8196 (eq? (service-kind service) avahi-service-type))
8197 %desktop-services)
8198@end example
8199
8200@unnumberedsubsubsec Instantiating the System
8201
8202Assuming the @code{operating-system} declaration
8203is stored in the @file{my-system-config.scm}
cf4a9129
LC
8204file, the @command{guix system reconfigure my-system-config.scm} command
8205instantiates that configuration, and makes it the default GRUB boot
65797bff
LC
8206entry (@pxref{Invoking guix system}).
8207
1068f26b 8208The normal way to change the system configuration is by updating this
65797bff 8209file and re-running @command{guix system reconfigure}. One should never
8b499030 8210have to touch files in @file{/etc} or to run commands that modify the
65797bff
LC
8211system state such as @command{useradd} or @command{grub-install}. In
8212fact, you must avoid that since that would not only void your warranty
8213but also prevent you from rolling back to previous versions of your
8214system, should you ever need to.
8215
8216@cindex roll-back, of the operating system
8217Speaking of roll-back, each time you run @command{guix system
8218reconfigure}, a new @dfn{generation} of the system is created---without
8219modifying or deleting previous generations. Old system generations get
74e64724 8220an entry in the bootloader boot menu, allowing you to boot them in case
65797bff
LC
8221something went wrong with the latest generation. Reassuring, no? The
8222@command{guix system list-generations} command lists the system
067a2e2d
CM
8223generations available on disk. It is also possible to roll back the
8224system via the commands @command{guix system roll-back} and
8225@command{guix system switch-generation}.
8226
8227Although the command @command{guix system reconfigure} will not modify
8228previous generations, must take care when the current generation is not
8229the latest (e.g., after invoking @command{guix system roll-back}), since
8230the operation might overwrite a later generation (@pxref{Invoking guix
8231system}).
b81e1947 8232
5d94ac51
LC
8233@unnumberedsubsubsec The Programming Interface
8234
cf4a9129
LC
8235At the Scheme level, the bulk of an @code{operating-system} declaration
8236is instantiated with the following monadic procedure (@pxref{The Store
8237Monad}):
b81e1947 8238
cf4a9129
LC
8239@deffn {Monadic Procedure} operating-system-derivation os
8240Return a derivation that builds @var{os}, an @code{operating-system}
8241object (@pxref{Derivations}).
b81e1947 8242
cf4a9129
LC
8243The output of the derivation is a single directory that refers to all
8244the packages, configuration files, and other supporting files needed to
8245instantiate @var{os}.
8246@end deffn
b81e1947 8247
5d94ac51
LC
8248This procedure is provided by the @code{(gnu system)} module. Along
8249with @code{(gnu services)} (@pxref{Services}), this module contains the
8250guts of GuixSD. Make sure to visit it!
8251
8252
7313a52e
LC
8253@node operating-system Reference
8254@subsection @code{operating-system} Reference
8255
8256This section summarizes all the options available in
8257@code{operating-system} declarations (@pxref{Using the Configuration
8258System}).
8259
8260@deftp {Data Type} operating-system
8261This is the data type representing an operating system configuration.
8262By that, we mean all the global system configuration, not per-user
8263configuration (@pxref{Using the Configuration System}).
8264
8265@table @asis
8266@item @code{kernel} (default: @var{linux-libre})
fbb25e56 8267The package object of the operating system kernel to use@footnote{Currently
7313a52e
LC
8268only the Linux-libre kernel is supported. In the future, it will be
8269possible to use the GNU@tie{}Hurd.}.
8270
ee2a6304
LC
8271@item @code{kernel-arguments} (default: @code{'()})
8272List of strings or gexps representing additional arguments to pass on
1068f26b 8273the command-line of the kernel---e.g., @code{("console=ttyS0")}.
ee2a6304 8274
7313a52e 8275@item @code{bootloader}
74e64724 8276The system bootloader configuration object. @xref{Bootloader Configuration}.
7313a52e
LC
8277
8278@item @code{initrd} (default: @code{base-initrd})
e32171ee
JD
8279@cindex initrd
8280@cindex initial RAM disk
7313a52e
LC
8281A two-argument monadic procedure that returns an initial RAM disk for
8282the Linux kernel. @xref{Initial RAM Disk}.
8283
f34c56be
LC
8284@item @code{firmware} (default: @var{%base-firmware})
8285@cindex firmware
8286List of firmware packages loadable by the operating system kernel.
8287
52db41af
EB
8288The default includes firmware needed for Atheros- and Broadcom-based
8289WiFi devices (Linux-libre modules @code{ath9k} and @code{b43-open},
8290respectively). @xref{Hardware Considerations}, for more info on
8291supported hardware.
f34c56be 8292
7313a52e
LC
8293@item @code{host-name}
8294The host name.
8295
8296@item @code{hosts-file}
8297@cindex hosts file
24e02c28 8298A file-like object (@pxref{G-Expressions, file-like objects}) for use as
7313a52e 8299@file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C Library
24e02c28 8300Reference Manual}). The default is a file with entries for
7313a52e
LC
8301@code{localhost} and @var{host-name}.
8302
8303@item @code{mapped-devices} (default: @code{'()})
8304A list of mapped devices. @xref{Mapped Devices}.
8305
8306@item @code{file-systems}
8307A list of file systems. @xref{File Systems}.
8308
8309@item @code{swap-devices} (default: @code{'()})
8310@cindex swap devices
a4ca4362
CM
8311A list of strings identifying devices or files to be used for ``swap
8312space'' (@pxref{Memory Concepts,,, libc, The GNU C Library Reference
8313Manual}). For example, @code{'("/dev/sda3")} or @code{'("/swapfile")}.
8314It is possible to specify a swap file in a file system on a mapped
8315device, provided that the necessary device mapping and file system are
8316also specified. @xref{Mapped Devices} and @ref{File Systems}.
7313a52e 8317
bf87f38a 8318@item @code{users} (default: @code{%base-user-accounts})
7313a52e
LC
8319@itemx @code{groups} (default: @var{%base-groups})
8320List of user accounts and groups. @xref{User Accounts}.
8321
8322@item @code{skeletons} (default: @code{(default-skeletons)})
e9dffec1
LC
8323A list target file name/file-like object tuples (@pxref{G-Expressions,
8324file-like objects}). These are the skeleton files that will be added to
8325the home directory of newly-created user accounts.
7313a52e
LC
8326
8327For instance, a valid value may look like this:
8328
8329@example
e9dffec1
LC
8330`((".bashrc" ,(plain-file "bashrc" "echo Hello\n"))
8331 (".guile" ,(plain-file "guile"
8332 "(use-modules (ice-9 readline))
8333 (activate-readline)")))
7313a52e
LC
8334@end example
8335
8336@item @code{issue} (default: @var{%default-issue})
8337A string denoting the contents of the @file{/etc/issue} file, which is
1068f26b 8338displayed when users log in on a text console.
7313a52e
LC
8339
8340@item @code{packages} (default: @var{%base-packages})
8341The set of packages installed in the global profile, which is accessible
8342at @file{/run/current-system/profile}.
8343
1068f26b 8344The default set includes core utilities and it is good practice to
7313a52e
LC
8345install non-core utilities in user profiles (@pxref{Invoking guix
8346package}).
8347
8348@item @code{timezone}
8349A timezone identifying string---e.g., @code{"Europe/Paris"}.
8350
17c20385
LC
8351You can run the @command{tzselect} command to find out which timezone
8352string corresponds to your region. Choosing an invalid timezone name
8353causes @command{guix system} to fail.
8354
598e19dc
LC
8355@item @code{locale} (default: @code{"en_US.utf8"})
8356The name of the default locale (@pxref{Locale Names,,, libc, The GNU C
8357Library Reference Manual}). @xref{Locales}, for more information.
8358
8359@item @code{locale-definitions} (default: @var{%default-locale-definitions})
8360The list of locale definitions to be compiled and that may be used at
8361run time. @xref{Locales}.
7313a52e 8362
34760ae7
LC
8363@item @code{locale-libcs} (default: @code{(list @var{glibc})})
8364The list of GNU@tie{}libc packages whose locale data and tools are used
8365to build the locale definitions. @xref{Locales}, for compatibility
8366considerations that justify this option.
8367
996ed739 8368@item @code{name-service-switch} (default: @var{%default-nss})
1068f26b 8369Configuration of the libc name service switch (NSS)---a
996ed739
LC
8370@code{<name-service-switch>} object. @xref{Name Service Switch}, for
8371details.
8372
7313a52e 8373@item @code{services} (default: @var{%base-services})
28d939af 8374A list of service objects denoting system services. @xref{Services}.
7313a52e
LC
8375
8376@item @code{pam-services} (default: @code{(base-pam-services)})
8377@cindex PAM
8378@cindex pluggable authentication modules
8379Linux @dfn{pluggable authentication module} (PAM) services.
8380@c FIXME: Add xref to PAM services section.
8381
8382@item @code{setuid-programs} (default: @var{%setuid-programs})
8383List of string-valued G-expressions denoting setuid programs.
8384@xref{Setuid Programs}.
8385
f5a9ffa0
AK
8386@item @code{sudoers-file} (default: @var{%sudoers-specification})
8387@cindex sudoers file
84765839
LC
8388The contents of the @file{/etc/sudoers} file as a file-like object
8389(@pxref{G-Expressions, @code{local-file} and @code{plain-file}}).
7313a52e
LC
8390
8391This file specifies which users can use the @command{sudo} command, what
8392they are allowed to do, and what privileges they may gain. The default
8393is that only @code{root} and members of the @code{wheel} group may use
8394@code{sudo}.
8395
8396@end table
8397@end deftp
8398
cf4a9129
LC
8399@node File Systems
8400@subsection File Systems
b81e1947 8401
cf4a9129 8402The list of file systems to be mounted is specified in the
1068f26b 8403@code{file-systems} field of the operating system declaration
cf4a9129
LC
8404(@pxref{Using the Configuration System}). Each file system is declared
8405using the @code{file-system} form, like this:
b81e1947
LC
8406
8407@example
cf4a9129
LC
8408(file-system
8409 (mount-point "/home")
8410 (device "/dev/sda3")
8411 (type "ext4"))
b81e1947
LC
8412@end example
8413
cf4a9129
LC
8414As usual, some of the fields are mandatory---those shown in the example
8415above---while others can be omitted. These are described below.
b81e1947 8416
cf4a9129
LC
8417@deftp {Data Type} file-system
8418Objects of this type represent file systems to be mounted. They
8419contain the following members:
5ff3c4b8 8420
cf4a9129
LC
8421@table @asis
8422@item @code{type}
8423This is a string specifying the type of the file system---e.g.,
8424@code{"ext4"}.
5ff3c4b8 8425
cf4a9129
LC
8426@item @code{mount-point}
8427This designates the place where the file system is to be mounted.
b81e1947 8428
cf4a9129
LC
8429@item @code{device}
8430This names the ``source'' of the file system. By default it is the name
8431of a node under @file{/dev}, but its meaning depends on the @code{title}
8432field described below.
401c53c4 8433
cf4a9129
LC
8434@item @code{title} (default: @code{'device})
8435This is a symbol that specifies how the @code{device} field is to be
8436interpreted.
401c53c4 8437
cf4a9129
LC
8438When it is the symbol @code{device}, then the @code{device} field is
8439interpreted as a file name; when it is @code{label}, then @code{device}
8440is interpreted as a partition label name; when it is @code{uuid},
8441@code{device} is interpreted as a partition unique identifier (UUID).
da7cabd4 8442
661a1d79 8443UUIDs may be converted from their string representation (as shown by the
0767f6a6
LC
8444@command{tune2fs -l} command) using the @code{uuid} form@footnote{The
8445@code{uuid} form expects 16-byte UUIDs as defined in
8446@uref{https://tools.ietf.org/html/rfc4122, RFC@tie{}4122}. This is the
8447form of UUID used by the ext2 family of file systems and others, but it
8448is different from ``UUIDs'' found in FAT file systems, for instance.},
8449like this:
661a1d79
LC
8450
8451@example
8452(file-system
8453 (mount-point "/home")
8454 (type "ext4")
8455 (title 'uuid)
8456 (device (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")))
8457@end example
8458
cf4a9129 8459The @code{label} and @code{uuid} options offer a way to refer to disk
661a1d79
LC
8460partitions without having to hard-code their actual device
8461name@footnote{Note that, while it is tempting to use
8462@file{/dev/disk/by-uuid} and similar device names to achieve the same
8463result, this is not recommended: These special device nodes are created
8464by the udev daemon and may be unavailable at the time the device is
8465mounted.}.
da7cabd4 8466
1068f26b 8467However, when the source of a file system is a mapped device (@pxref{Mapped
5f86a66e
LC
8468Devices}), its @code{device} field @emph{must} refer to the mapped
8469device name---e.g., @file{/dev/mapper/root-partition}---and consequently
8470@code{title} must be set to @code{'device}. This is required so that
8471the system knows that mounting the file system depends on having the
8472corresponding device mapping established.
8473
cf4a9129
LC
8474@item @code{flags} (default: @code{'()})
8475This is a list of symbols denoting mount flags. Recognized flags
2c071ce9
LC
8476include @code{read-only}, @code{bind-mount}, @code{no-dev} (disallow
8477access to special files), @code{no-suid} (ignore setuid and setgid
8478bits), and @code{no-exec} (disallow program execution.)
da7cabd4 8479
cf4a9129
LC
8480@item @code{options} (default: @code{#f})
8481This is either @code{#f}, or a string denoting mount options.
da7cabd4 8482
be21979d
LC
8483@item @code{mount?} (default: @code{#t})
8484This value indicates whether to automatically mount the file system when
8485the system is brought up. When set to @code{#f}, the file system gets
8486an entry in @file{/etc/fstab} (read by the @command{mount} command) but
8487is not automatically mounted.
8488
cf4a9129
LC
8489@item @code{needed-for-boot?} (default: @code{#f})
8490This Boolean value indicates whether the file system is needed when
8491booting. If that is true, then the file system is mounted when the
8492initial RAM disk (initrd) is loaded. This is always the case, for
8493instance, for the root file system.
da7cabd4 8494
cf4a9129
LC
8495@item @code{check?} (default: @code{#t})
8496This Boolean indicates whether the file system needs to be checked for
8497errors before being mounted.
f9cc8971 8498
4e469051
LC
8499@item @code{create-mount-point?} (default: @code{#f})
8500When true, the mount point is created if it does not exist yet.
8501
e51710d1 8502@item @code{dependencies} (default: @code{'()})
13fb1bd9
LC
8503This is a list of @code{<file-system>} or @code{<mapped-device>} objects
8504representing file systems that must be mounted or mapped devices that
8505must be opened before (and unmounted or closed after) this one.
e51710d1
LC
8506
8507As an example, consider a hierarchy of mounts: @file{/sys/fs/cgroup} is
8508a dependency of @file{/sys/fs/cgroup/cpu} and
8509@file{/sys/fs/cgroup/memory}.
8510
13fb1bd9
LC
8511Another example is a file system that depends on a mapped device, for
8512example for an encrypted partition (@pxref{Mapped Devices}).
cf4a9129
LC
8513@end table
8514@end deftp
da7cabd4 8515
a69576ea
LC
8516The @code{(gnu system file-systems)} exports the following useful
8517variables.
8518
8519@defvr {Scheme Variable} %base-file-systems
8520These are essential file systems that are required on normal systems,
cc0e575a 8521such as @var{%pseudo-terminal-file-system} and @var{%immutable-store} (see
3392ce5d
LC
8522below.) Operating system declarations should always contain at least
8523these.
a69576ea
LC
8524@end defvr
8525
7f239fd3
LC
8526@defvr {Scheme Variable} %pseudo-terminal-file-system
8527This is the file system to be mounted as @file{/dev/pts}. It supports
8528@dfn{pseudo-terminals} created @i{via} @code{openpty} and similar
8529functions (@pxref{Pseudo-Terminals,,, libc, The GNU C Library Reference
8530Manual}). Pseudo-terminals are used by terminal emulators such as
8531@command{xterm}.
8532@end defvr
8533
db17ae5c
LC
8534@defvr {Scheme Variable} %shared-memory-file-system
8535This file system is mounted as @file{/dev/shm} and is used to support
8536memory sharing across processes (@pxref{Memory-mapped I/O,
8537@code{shm_open},, libc, The GNU C Library Reference Manual}).
8538@end defvr
8539
3392ce5d
LC
8540@defvr {Scheme Variable} %immutable-store
8541This file system performs a read-only ``bind mount'' of
8542@file{/gnu/store}, making it read-only for all the users including
8543@code{root}. This prevents against accidental modification by software
8544running as @code{root} or by system administrators.
8545
8546The daemon itself is still able to write to the store: it remounts it
8547read-write in its own ``name space.''
8548@end defvr
8549
a69576ea
LC
8550@defvr {Scheme Variable} %binary-format-file-system
8551The @code{binfmt_misc} file system, which allows handling of arbitrary
8552executable file types to be delegated to user space. This requires the
8553@code{binfmt.ko} kernel module to be loaded.
8554@end defvr
8555
8556@defvr {Scheme Variable} %fuse-control-file-system
8557The @code{fusectl} file system, which allows unprivileged users to mount
8558and unmount user-space FUSE file systems. This requires the
8559@code{fuse.ko} kernel module to be loaded.
8560@end defvr
8561
510f9d86
LC
8562@node Mapped Devices
8563@subsection Mapped Devices
8564
8565@cindex device mapping
8566@cindex mapped devices
8567The Linux kernel has a notion of @dfn{device mapping}: a block device,
8568such as a hard disk partition, can be @dfn{mapped} into another device,
97c8aef1 8569usually in @code{/dev/mapper/},
510f9d86
LC
8570with additional processing over the data that flows through
8571it@footnote{Note that the GNU@tie{}Hurd makes no difference between the
8572concept of a ``mapped device'' and that of a file system: both boil down
8573to @emph{translating} input/output operations made on a file to
8574operations on its backing store. Thus, the Hurd implements mapped
8575devices, like file systems, using the generic @dfn{translator} mechanism
8576(@pxref{Translators,,, hurd, The GNU Hurd Reference Manual}).}. A
8577typical example is encryption device mapping: all writes to the mapped
8578device are encrypted, and all reads are deciphered, transparently.
97c8aef1
AE
8579Guix extends this notion by considering any device or set of devices that
8580are @dfn{transformed} in some way to create a new device; for instance,
8581RAID devices are obtained by @dfn{assembling} several other devices, such
8582as hard disks or partitions, into a new one that behaves as one partition.
8583Other examples, not yet implemented, are LVM logical volumes.
510f9d86 8584
97c8aef1
AE
8585Mapped devices are declared using the @code{mapped-device} form,
8586defined as follows; for examples, see below.
510f9d86
LC
8587
8588@deftp {Data Type} mapped-device
8589Objects of this type represent device mappings that will be made when
8590the system boots up.
8591
9cb426b8
LC
8592@table @code
8593@item source
97c8aef1
AE
8594This is either a string specifying the name of the block device to be mapped,
8595such as @code{"/dev/sda3"}, or a list of such strings when several devices
8596need to be assembled for creating a new one.
510f9d86 8597
9cb426b8 8598@item target
97c8aef1
AE
8599This string specifies the name of the resulting mapped device. For
8600kernel mappers such as encrypted devices of type @code{luks-device-mapping},
8601specifying @code{"my-partition"} leads to the creation of
510f9d86 8602the @code{"/dev/mapper/my-partition"} device.
97c8aef1
AE
8603For RAID devices of type @code{raid-device-mapping}, the full device name
8604such as @code{"/dev/md0"} needs to be given.
510f9d86 8605
9cb426b8 8606@item type
510f9d86
LC
8607This must be a @code{mapped-device-kind} object, which specifies how
8608@var{source} is mapped to @var{target}.
8609@end table
8610@end deftp
8611
8612@defvr {Scheme Variable} luks-device-mapping
8613This defines LUKS block device encryption using the @command{cryptsetup}
1068f26b 8614command from the package with the same name. It relies on the
510f9d86
LC
8615@code{dm-crypt} Linux kernel module.
8616@end defvr
8617
97c8aef1
AE
8618@defvr {Scheme Variable} raid-device-mapping
8619This defines a RAID device, which is assembled using the @code{mdadm}
8620command from the package with the same name. It requires a Linux kernel
8621module for the appropriate RAID level to be loaded, such as @code{raid456}
8622for RAID-4, RAID-5 or RAID-6, or @code{raid10} for RAID-10.
8623@end defvr
8624
8625@cindex disk encryption
8626@cindex LUKS
8627The following example specifies a mapping from @file{/dev/sda3} to
8628@file{/dev/mapper/home} using LUKS---the
ddf1cd51 8629@url{https://gitlab.com/cryptsetup/cryptsetup,Linux Unified Key Setup}, a
97c8aef1
AE
8630standard mechanism for disk encryption.
8631The @file{/dev/mapper/home}
8632device can then be used as the @code{device} of a @code{file-system}
8633declaration (@pxref{File Systems}).
8634
8635@example
8636(mapped-device
8637 (source "/dev/sda3")
8638 (target "home")
8639 (type luks-device-mapping))
8640@end example
8641
8642Alternatively, to become independent of device numbering, one may obtain
8643the LUKS UUID (@dfn{unique identifier}) of the source device by a
8644command like:
8645
8646@example
8647cryptsetup luksUUID /dev/sda3
8648@end example
8649
8650and use it as follows:
8651
8652@example
8653(mapped-device
8654 (source (uuid "cb67fc72-0d54-4c88-9d4b-b225f30b0f44"))
8655 (target "home")
8656 (type luks-device-mapping))
8657@end example
8658
a4ca4362
CM
8659@cindex swap encryption
8660It is also desirable to encrypt swap space, since swap space may contain
8661sensitive data. One way to accomplish that is to use a swap file in a
8662file system on a device mapped via LUKS encryption. In this way, the
8663swap file is encrypted because the entire device is encrypted.
8664@xref{Preparing for Installation,,Disk Partitioning}, for an example.
8665
97c8aef1
AE
8666A RAID device formed of the partitions @file{/dev/sda1} and @file{/dev/sdb1}
8667may be declared as follows:
8668
8669@example
8670(mapped-device
8671 (source (list "/dev/sda1" "/dev/sdb1"))
8672 (target "/dev/md0")
8673 (type raid-device-mapping))
8674@end example
8675
8676The @file{/dev/md0} device can then be used as the @code{device} of a
8677@code{file-system} declaration (@pxref{File Systems}).
8678Note that the RAID level need not be given; it is chosen during the
8679initial creation and formatting of the RAID device and is determined
8680automatically later.
8681
8682
cf4a9129
LC
8683@node User Accounts
8684@subsection User Accounts
ee85f3db 8685
e32171ee
JD
8686@cindex users
8687@cindex accounts
8688@cindex user accounts
9bea87a5
LC
8689User accounts and groups are entirely managed through the
8690@code{operating-system} declaration. They are specified with the
8691@code{user-account} and @code{user-group} forms:
ee85f3db 8692
cf4a9129
LC
8693@example
8694(user-account
8695 (name "alice")
8696 (group "users")
24e752c0
LC
8697 (supplementary-groups '("wheel" ;allow use of sudo, etc.
8698 "audio" ;sound card
8699 "video" ;video devices such as webcams
8700 "cdrom")) ;the good ol' CD-ROM
cf4a9129
LC
8701 (comment "Bob's sister")
8702 (home-directory "/home/alice"))
8703@end example
25083588 8704
9bea87a5
LC
8705When booting or upon completion of @command{guix system reconfigure},
8706the system ensures that only the user accounts and groups specified in
8707the @code{operating-system} declaration exist, and with the specified
8708properties. Thus, account or group creations or modifications made by
8709directly invoking commands such as @command{useradd} are lost upon
8710reconfiguration or reboot. This ensures that the system remains exactly
8711as declared.
8712
cf4a9129
LC
8713@deftp {Data Type} user-account
8714Objects of this type represent user accounts. The following members may
8715be specified:
ee85f3db 8716
cf4a9129
LC
8717@table @asis
8718@item @code{name}
8719The name of the user account.
ee85f3db 8720
cf4a9129 8721@item @code{group}
e32171ee 8722@cindex groups
cf4a9129
LC
8723This is the name (a string) or identifier (a number) of the user group
8724this account belongs to.
ee85f3db 8725
cf4a9129
LC
8726@item @code{supplementary-groups} (default: @code{'()})
8727Optionally, this can be defined as a list of group names that this
8728account belongs to.
ee85f3db 8729
cf4a9129
LC
8730@item @code{uid} (default: @code{#f})
8731This is the user ID for this account (a number), or @code{#f}. In the
8732latter case, a number is automatically chosen by the system when the
8733account is created.
ee85f3db 8734
cf4a9129 8735@item @code{comment} (default: @code{""})
1068f26b 8736A comment about the account, such as the account owner's full name.
c8c871d1 8737
cf4a9129
LC
8738@item @code{home-directory}
8739This is the name of the home directory for the account.
ee85f3db 8740
eb56ee02
LC
8741@item @code{create-home-directory?} (default: @code{#t})
8742Indicates whether the home directory of this account should be created
8743if it does not exist yet.
8744
cf4a9129
LC
8745@item @code{shell} (default: Bash)
8746This is a G-expression denoting the file name of a program to be used as
8747the shell (@pxref{G-Expressions}).
ee85f3db 8748
cf4a9129
LC
8749@item @code{system?} (default: @code{#f})
8750This Boolean value indicates whether the account is a ``system''
8751account. System accounts are sometimes treated specially; for instance,
8752graphical login managers do not list them.
ee85f3db 8753
1bd4e6db 8754@anchor{user-account-password}
cf4a9129 8755@item @code{password} (default: @code{#f})
eb59595c
LC
8756You would normally leave this field to @code{#f}, initialize user
8757passwords as @code{root} with the @command{passwd} command, and then let
9bea87a5
LC
8758users change it with @command{passwd}. Passwords set with
8759@command{passwd} are of course preserved across reboot and
8760reconfiguration.
eb59595c
LC
8761
8762If you @emph{do} want to have a preset password for an account, then
8763this field must contain the encrypted password, as a string.
5d1f1177
LC
8764@xref{crypt,,, libc, The GNU C Library Reference Manual}, for more information
8765on password encryption, and @ref{Encryption,,, guile, GNU Guile Reference
eb59595c 8766Manual}, for information on Guile's @code{crypt} procedure.
c8c871d1 8767
cf4a9129
LC
8768@end table
8769@end deftp
ee85f3db 8770
e32171ee 8771@cindex groups
cf4a9129 8772User group declarations are even simpler:
ee85f3db 8773
cf4a9129
LC
8774@example
8775(user-group (name "students"))
8776@end example
ee85f3db 8777
cf4a9129
LC
8778@deftp {Data Type} user-group
8779This type is for, well, user groups. There are just a few fields:
af8a56b8 8780
cf4a9129
LC
8781@table @asis
8782@item @code{name}
1068f26b 8783The name of the group.
ee85f3db 8784
cf4a9129
LC
8785@item @code{id} (default: @code{#f})
8786The group identifier (a number). If @code{#f}, a new number is
8787automatically allocated when the group is created.
ee85f3db 8788
c8fa3426
LC
8789@item @code{system?} (default: @code{#f})
8790This Boolean value indicates whether the group is a ``system'' group.
8791System groups have low numerical IDs.
8792
cf4a9129
LC
8793@item @code{password} (default: @code{#f})
8794What, user groups can have a password? Well, apparently yes. Unless
1068f26b 8795@code{#f}, this field specifies the password of the group.
ee85f3db 8796
cf4a9129
LC
8797@end table
8798@end deftp
401c53c4 8799
cf4a9129
LC
8800For convenience, a variable lists all the basic user groups one may
8801expect:
401c53c4 8802
cf4a9129
LC
8803@defvr {Scheme Variable} %base-groups
8804This is the list of basic user groups that users and/or packages expect
8805to be present on the system. This includes groups such as ``root'',
8806``wheel'', and ``users'', as well as groups used to control access to
8807specific devices such as ``audio'', ``disk'', and ``cdrom''.
8808@end defvr
401c53c4 8809
bf87f38a
LC
8810@defvr {Scheme Variable} %base-user-accounts
8811This is the list of basic system accounts that programs may expect to
8812find on a GNU/Linux system, such as the ``nobody'' account.
8813
8814Note that the ``root'' account is not included here. It is a
8815special-case and is automatically added whether or not it is specified.
8816@end defvr
8817
598e19dc
LC
8818@node Locales
8819@subsection Locales
8820
8821@cindex locale
8822A @dfn{locale} defines cultural conventions for a particular language
8823and region of the world (@pxref{Locales,,, libc, The GNU C Library
8824Reference Manual}). Each locale has a name that typically has the form
b2636518 8825@code{@var{language}_@var{territory}.@var{codeset}}---e.g.,
598e19dc
LC
8826@code{fr_LU.utf8} designates the locale for the French language, with
8827cultural conventions from Luxembourg, and using the UTF-8 encoding.
8828
8829@cindex locale definition
8830Usually, you will want to specify the default locale for the machine
8831using the @code{locale} field of the @code{operating-system} declaration
8832(@pxref{operating-system Reference, @code{locale}}).
8833
f5582b2c
LC
8834The selected locale is automatically added to the @dfn{locale
8835definitions} known to the system if needed, with its codeset inferred
8836from its name---e.g., @code{bo_CN.utf8} will be assumed to use the
8837@code{UTF-8} codeset. Additional locale definitions can be specified in
8838the @code{locale-definitions} slot of @code{operating-system}---this is
8839useful, for instance, if the codeset could not be inferred from the
8840locale name. The default set of locale definitions includes some widely
8841used locales, but not all the available locales, in order to save space.
8842
8843For instance, to add the North Frisian locale for Germany, the value of
8844that field may be:
598e19dc
LC
8845
8846@example
8847(cons (locale-definition
8848 (name "fy_DE.utf8") (source "fy_DE"))
8849 %default-locale-definitions)
8850@end example
8851
8852Likewise, to save space, one might want @code{locale-definitions} to
8853list only the locales that are actually used, as in:
8854
8855@example
8856(list (locale-definition
8857 (name "ja_JP.eucjp") (source "ja_JP")
8858 (charset "EUC-JP")))
8859@end example
8860
5c3c1427
LC
8861@vindex LOCPATH
8862The compiled locale definitions are available at
46bd6edd
LC
8863@file{/run/current-system/locale/X.Y}, where @code{X.Y} is the libc
8864version, which is the default location where the GNU@tie{}libc provided
8865by Guix looks for locale data. This can be overridden using the
8866@code{LOCPATH} environment variable (@pxref{locales-and-locpath,
5c3c1427
LC
8867@code{LOCPATH} and locale packages}).
8868
598e19dc
LC
8869The @code{locale-definition} form is provided by the @code{(gnu system
8870locale)} module. Details are given below.
8871
8872@deftp {Data Type} locale-definition
8873This is the data type of a locale definition.
8874
8875@table @asis
8876
8877@item @code{name}
8878The name of the locale. @xref{Locale Names,,, libc, The GNU C Library
8879Reference Manual}, for more information on locale names.
8880
8881@item @code{source}
8882The name of the source for that locale. This is typically the
8883@code{@var{language}_@var{territory}} part of the locale name.
8884
8885@item @code{charset} (default: @code{"UTF-8"})
8886The ``character set'' or ``code set'' for that locale,
8887@uref{http://www.iana.org/assignments/character-sets, as defined by
8888IANA}.
8889
8890@end table
8891@end deftp
8892
8893@defvr {Scheme Variable} %default-locale-definitions
1068f26b 8894A list of commonly used UTF-8 locales, used as the default
b2636518 8895value of the @code{locale-definitions} field of @code{operating-system}
598e19dc 8896declarations.
b2636518
LC
8897
8898@cindex locale name
8899@cindex normalized codeset in locale names
8900These locale definitions use the @dfn{normalized codeset} for the part
8901that follows the dot in the name (@pxref{Using gettextized software,
8902normalized codeset,, libc, The GNU C Library Reference Manual}). So for
8903instance it has @code{uk_UA.utf8} but @emph{not}, say,
8904@code{uk_UA.UTF-8}.
598e19dc 8905@end defvr
401c53c4 8906
34760ae7
LC
8907@subsubsection Locale Data Compatibility Considerations
8908
8909@cindex incompatibility, of locale data
8910@code{operating-system} declarations provide a @code{locale-libcs} field
8911to specify the GNU@tie{}libc packages that are used to compile locale
8912declarations (@pxref{operating-system Reference}). ``Why would I
8913care?'', you may ask. Well, it turns out that the binary format of
8914locale data is occasionally incompatible from one libc version to
8915another.
8916
8917@c See <https://sourceware.org/ml/libc-alpha/2015-09/msg00575.html>
8918@c and <https://lists.gnu.org/archive/html/guix-devel/2015-08/msg00737.html>.
8919For instance, a program linked against libc version 2.21 is unable to
8920read locale data produced with libc 2.22; worse, that program
8921@emph{aborts} instead of simply ignoring the incompatible locale
8922data@footnote{Versions 2.23 and later of GNU@tie{}libc will simply skip
8923the incompatible locale data, which is already an improvement.}.
8924Similarly, a program linked against libc 2.22 can read most, but not
201fff9e 8925all, of the locale data from libc 2.21 (specifically, @code{LC_COLLATE}
34760ae7
LC
8926data is incompatible); thus calls to @code{setlocale} may fail, but
8927programs will not abort.
8928
8929The ``problem'' in GuixSD is that users have a lot of freedom: They can
8930choose whether and when to upgrade software in their profiles, and might
8931be using a libc version different from the one the system administrator
8932used to build the system-wide locale data.
8933
8934Fortunately, unprivileged users can also install their own locale data
8935and define @var{GUIX_LOCPATH} accordingly (@pxref{locales-and-locpath,
8936@code{GUIX_LOCPATH} and locale packages}).
8937
8938Still, it is best if the system-wide locale data at
8939@file{/run/current-system/locale} is built for all the libc versions
8940actually in use on the system, so that all the programs can access
8941it---this is especially crucial on a multi-user system. To do that, the
8942administrator can specify several libc packages in the
8943@code{locale-libcs} field of @code{operating-system}:
8944
8945@example
8946(use-package-modules base)
8947
8948(operating-system
8949 ;; @dots{}
8950 (locale-libcs (list glibc-2.21 (canonical-package glibc))))
8951@end example
8952
8953This example would lead to a system containing locale definitions for
8954both libc 2.21 and the current version of libc in
8955@file{/run/current-system/locale}.
8956
8957
cf4a9129
LC
8958@node Services
8959@subsection Services
401c53c4 8960
cf4a9129
LC
8961@cindex system services
8962An important part of preparing an @code{operating-system} declaration is
8963listing @dfn{system services} and their configuration (@pxref{Using the
8964Configuration System}). System services are typically daemons launched
8965when the system boots, or other actions needed at that time---e.g.,
d8b94dbd
LC
8966configuring network access.
8967
e8b652d4
LC
8968GuixSD has a broad definition of ``service'' (@pxref{Service
8969Composition}), but many services are managed by the GNU@tie{}Shepherd
8970(@pxref{Shepherd Services}). On a running system, the @command{herd}
8971command allows you to list the available services, show their status,
8972start and stop them, or do other specific operations (@pxref{Jump
8973Start,,, shepherd, The GNU Shepherd Manual}). For example:
d8b94dbd
LC
8974
8975@example
dd17bc38 8976# herd status
d8b94dbd
LC
8977@end example
8978
8979The above command, run as @code{root}, lists the currently defined
dd17bc38 8980services. The @command{herd doc} command shows a synopsis of the given
d8b94dbd
LC
8981service:
8982
8983@example
dd17bc38 8984# herd doc nscd
d8b94dbd
LC
8985Run libc's name service cache daemon (nscd).
8986@end example
8987
8988The @command{start}, @command{stop}, and @command{restart} sub-commands
8989have the effect you would expect. For instance, the commands below stop
8990the nscd service and restart the Xorg display server:
8991
8992@example
dd17bc38 8993# herd stop nscd
d8b94dbd 8994Service nscd has been stopped.
dd17bc38 8995# herd restart xorg-server
d8b94dbd
LC
8996Service xorg-server has been stopped.
8997Service xorg-server has been started.
8998@end example
401c53c4 8999
cf4a9129 9000The following sections document the available services, starting with
d8b94dbd
LC
9001the core services, that may be used in an @code{operating-system}
9002declaration.
401c53c4 9003
cf4a9129
LC
9004@menu
9005* Base Services:: Essential system services.
c311089b 9006* Scheduled Job Execution:: The mcron service.
92c03a87 9007* Log Rotation:: The rottlog service.
cf4a9129
LC
9008* Networking Services:: Network setup, SSH daemon, etc.
9009* X Window:: Graphical display.
f2ec23d1 9010* Printing Services:: Local and remote printer support.
fe1a39d3 9011* Desktop Services:: D-Bus and desktop services.
105369a4 9012* Database Services:: SQL databases.
d8c18af8 9013* Mail Services:: IMAP, POP3, SMTP, and all that.
78cef99b 9014* Messaging Services:: Messaging services.
730ed6ec 9015* Monitoring Services:: Monitoring services.
859e367d 9016* Kerberos Services:: Kerberos services.
58724c48 9017* Web Services:: Web servers.
ba69e8f7 9018* DNS Services:: DNS daemons.
2be1b471 9019* VPN Services:: VPN daemons.
eb419bc9 9020* Network File System:: NFS related services.
a7cf4eb6 9021* Continuous Integration:: The Cuirass service.
bfbf6e1e 9022* Power management Services:: The TLP tool.
dbc6d370 9023* Miscellaneous Services:: Other services.
cf4a9129 9024@end menu
401c53c4 9025
cf4a9129
LC
9026@node Base Services
9027@subsubsection Base Services
a1ba8475 9028
cf4a9129
LC
9029The @code{(gnu services base)} module provides definitions for the basic
9030services that one expects from the system. The services exported by
9031this module are listed below.
401c53c4 9032
cf4a9129 9033@defvr {Scheme Variable} %base-services
31771497
LC
9034This variable contains a list of basic services (@pxref{Service Types
9035and Services}, for more information on service objects) one would
cf4a9129 9036expect from the system: a login service (mingetty) on each tty, syslogd,
1068f26b 9037the libc name service cache daemon (nscd), the udev device manager, and
cf4a9129 9038more.
401c53c4 9039
cf4a9129
LC
9040This is the default value of the @code{services} field of
9041@code{operating-system} declarations. Usually, when customizing a
9042system, you will want to append services to @var{%base-services}, like
9043this:
401c53c4 9044
cf4a9129 9045@example
fa1e31b8 9046(cons* (avahi-service) (lsh-service) %base-services)
cf4a9129
LC
9047@end example
9048@end defvr
401c53c4 9049
387e1754
LC
9050@defvr {Scheme Variable} special-files-service-type
9051This is the service that sets up ``special files'' such as
9052@file{/bin/sh}; an instance of it is part of @code{%base-services}.
9053
9054The value associated with @code{special-files-service-type} services
9055must be a list of tuples where the first element is the ``special file''
9056and the second element is its target. By default it is:
9057
9058@cindex @file{/bin/sh}
9059@cindex @file{sh}, in @file{/bin}
9060@example
9061`(("/bin/sh" ,(file-append @var{bash} "/bin/sh")))
9062@end example
9063
9064@cindex @file{/usr/bin/env}
9065@cindex @file{env}, in @file{/usr/bin}
9066If you want to add, say, @code{/usr/bin/env} to your system, you can
9067change it to:
9068
9069@example
9070`(("/bin/sh" ,(file-append @var{bash} "/bin/sh"))
9071 ("/usr/bin/env" ,(file-append @var{coreutils} "/bin/env")))
9072@end example
9073
9074Since this is part of @code{%base-services}, you can use
9075@code{modify-services} to customize the set of special files
9076(@pxref{Service Reference, @code{modify-services}}). But the simple way
9077to add a special file is @i{via} the @code{extra-special-file} procedure
9078(see below.)
9079@end defvr
9080
9081@deffn {Scheme Procedure} extra-special-file @var{file} @var{target}
9082Use @var{target} as the ``special file'' @var{file}.
9083
9084For example, adding the following lines to the @code{services} field of
9085your operating system declaration leads to a @file{/usr/bin/env}
9086symlink:
9087
9088@example
9089(extra-special-file "/usr/bin/env"
9090 (file-append coreutils "/bin/env"))
9091@end example
9092@end deffn
9093
be1c2c54 9094@deffn {Scheme Procedure} host-name-service @var{name}
cf4a9129
LC
9095Return a service that sets the host name to @var{name}.
9096@end deffn
401c53c4 9097
317d3b47
DC
9098@deffn {Scheme Procedure} login-service @var{config}
9099Return a service to run login according to @var{config}, a
9100@code{<login-configuration>} object, which specifies the message of the day,
9101among other things.
9102@end deffn
9103
9104@deftp {Data Type} login-configuration
9105This is the data type representing the configuration of login.
9106
9107@table @asis
9108
9109@item @code{motd}
e32171ee 9110@cindex message of the day
317d3b47
DC
9111A file-like object containing the ``message of the day''.
9112
9113@item @code{allow-empty-passwords?} (default: @code{#t})
9114Allow empty passwords by default so that first-time users can log in when
9115the 'root' account has just been created.
9116
9117@end table
9118@end deftp
9119
66e4f01c
LC
9120@deffn {Scheme Procedure} mingetty-service @var{config}
9121Return a service to run mingetty according to @var{config}, a
9122@code{<mingetty-configuration>} object, which specifies the tty to run, among
9123other things.
cf4a9129 9124@end deffn
401c53c4 9125
66e4f01c
LC
9126@deftp {Data Type} mingetty-configuration
9127This is the data type representing the configuration of Mingetty, which
9ee4c9ab 9128provides the default implementation of virtual console log-in.
66e4f01c
LC
9129
9130@table @asis
9131
9132@item @code{tty}
9133The name of the console this Mingetty runs on---e.g., @code{"tty1"}.
9134
66e4f01c
LC
9135@item @code{auto-login} (default: @code{#f})
9136When true, this field must be a string denoting the user name under
f9b9a033 9137which the system automatically logs in. When it is @code{#f}, a
66e4f01c
LC
9138user name and password must be entered to log in.
9139
9140@item @code{login-program} (default: @code{#f})
9141This must be either @code{#f}, in which case the default log-in program
9142is used (@command{login} from the Shadow tool suite), or a gexp denoting
9143the name of the log-in program.
9144
9145@item @code{login-pause?} (default: @code{#f})
9146When set to @code{#t} in conjunction with @var{auto-login}, the user
9147will have to press a key before the log-in shell is launched.
9148
9149@item @code{mingetty} (default: @var{mingetty})
9150The Mingetty package to use.
9151
9152@end table
9153@end deftp
9154
9ee4c9ab
LF
9155@deffn {Scheme Procedure} agetty-service @var{config}
9156Return a service to run agetty according to @var{config}, an
9157@code{<agetty-configuration>} object, which specifies the tty to run,
9158among other things.
9159@end deffn
9160
9161@deftp {Data Type} agetty-configuration
9162This is the data type representing the configuration of agetty, which
9163implements virtual and serial console log-in. See the @code{agetty(8)}
9164man page for more information.
9165
9166@table @asis
9167
9168@item @code{tty}
9169The name of the console this agetty runs on, as a string---e.g.,
9170@code{"ttyS0"}. This argument is mandatory.
9171
9172@item @code{baud-rate} (default: @code{#f})
9173A string containing a comma-separated list of one or more baud rates, in
9174descending order.
9175
9176@item @code{term} (default: @code{#f})
9177A string containing the value used for the @code{TERM} environment
9178variable.
9179
9180@item @code{eight-bits?} (default: @code{#f})
9181When @code{#t}, the tty is assumed to be 8-bit clean, and parity detection is
9182disabled.
9183
9184@item @code{auto-login} (default: @code{#f})
9185When passed a login name, as a string, the specified user will be logged
9186in automatically without prompting for their login name or password.
9187
9188@item @code{no-reset?} (default: @code{#f})
9189When @code{#t}, don't reset terminal cflags (control modes).
9190
9191@item @code{host} (default: @code{#f})
9192This accepts a string containing the "login_host", which will be written
9193into the @file{/var/run/utmpx} file.
9194
9195@item @code{remote?} (default: @code{#f})
9196When set to @code{#t} in conjunction with @var{host}, this will add an
9197@code{-r} fakehost option to the command line of the login program
9198specified in @var{login-program}.
9199
9200@item @code{flow-control?} (default: @code{#f})
9201When set to @code{#t}, enable hardware (RTS/CTS) flow control.
9202
9203@item @code{no-issue?} (default: @code{#f})
9204When set to @code{#t}, the contents of the @file{/etc/issue} file will
9205not be displayed before presenting the login prompt.
9206
9207@item @code{init-string} (default: @code{#f})
9208This accepts a string that will be sent to the tty or modem before
9209sending anything else. It can be used to initialize a modem.
9210
9211@item @code{no-clear?} (default: @code{#f})
9212When set to @code{#t}, agetty will not clear the screen before showing
9213the login prompt.
9214
9215@item @code{login-program} (default: (file-append shadow "/bin/login"))
9216This must be either a gexp denoting the name of a log-in program, or
9217unset, in which case the default value is the @command{login} from the
9218Shadow tool suite.
9219
9220@item @code{local-line} (default: @code{#f})
9221Control the CLOCAL line flag. This accepts one of three symbols as
9222arguments, @code{'auto}, @code{'always}, or @code{'never}. If @code{#f},
9223the default value chosen by agetty is @code{'auto}.
9224
9225@item @code{extract-baud?} (default: @code{#f})
9226When set to @code{#t}, instruct agetty to try to extract the baud rate
9227from the status messages produced by certain types of modems.
9228
9229@item @code{skip-login?} (default: @code{#f})
9230When set to @code{#t}, do not prompt the user for a login name. This
9231can be used with @var{login-program} field to use non-standard login
9232systems.
9233
9234@item @code{no-newline?} (default: @code{#f})
9235When set to @code{#t}, do not print a newline before printing the
9236@file{/etc/issue} file.
9237
9238@c Is this dangerous only when used with login-program, or always?
9239@item @code{login-options} (default: @code{#f})
9240This option accepts a string containing options that are passed to the
9241login program. When used with the @var{login-program}, be aware that a
9242malicious user could try to enter a login name containing embedded
9243options that could be parsed by the login program.
9244
9245@item @code{login-pause} (default: @code{#f})
9246When set to @code{#t}, wait for any key before showing the login prompt.
9247This can be used in conjunction with @var{auto-login} to save memory by
9248lazily spawning shells.
9249
9250@item @code{chroot} (default: @code{#f})
9251Change root to the specified directory. This option accepts a directory
9252path as a string.
9253
9254@item @code{hangup?} (default: @code{#f})
9255Use the Linux system call @code{vhangup} to do a virtual hangup of the
9256specified terminal.
9257
9258@item @code{keep-baud?} (default: @code{#f})
9259When set to @code{#t}, try to keep the existing baud rate. The baud
9260rates from @var{baud-rate} are used when agetty receives a @key{BREAK}
9261character.
9262
9263@item @code{timeout} (default: @code{#f})
9264When set to an integer value, terminate if no user name could be read
9265within @var{timeout} seconds.
9266
9267@item @code{detect-case?} (default: @code{#f})
9268When set to @code{#t}, turn on support for detecting an uppercase-only
9269terminal. This setting will detect a login name containing only
9270uppercase letters as indicating an uppercase-only terminal and turn on
9271some upper-to-lower case conversions. Note that this will not support
9272Unicode characters.
9273
9274@item @code{wait-cr?} (default: @code{#f})
9275When set to @code{#t}, wait for the user or modem to send a
9276carriage-return or linefeed character before displaying
9277@file{/etc/issue} or login prompt. This is typically used with the
9278@var{init-string} option.
9279
9280@item @code{no-hints?} (default: @code{#f})
9281When set to @code{#t}, do not print hints about Num, Caps, and Scroll
9282locks.
9283
9284@item @code{no-hostname?} (default: @code{#f})
9285By default, the hostname is printed. When this option is set to
9286@code{#t}, no hostname will be shown at all.
9287
9288@item @code{long-hostname?} (default: @code{#f})
9289By default, the hostname is only printed until the first dot. When this
9290option is set to @code{#t}, the fully qualified hostname by
9291@code{gethostname} or @code{getaddrinfo} is shown.
9292
9293@item @code{erase-characters} (default: @code{#f})
9294This option accepts a string of additional characters that should be
9295interpreted as backspace when the user types their login name.
9296
9297@item @code{kill-characters} (default: @code{#f})
9298This option accepts a string that should be interpreted to mean "ignore
9299all previous characters" (also called a "kill" character) when the types
9300their login name.
9301
9302@item @code{chdir} (default: @code{#f})
9303This option accepts, as a string, a directory path that will be changed
9304to before login.
9305
9306@item @code{delay} (default: @code{#f})
9307This options accepts, as an integer, the number of seconds to sleep
9308before opening the tty and displaying the login prompt.
9309
9310@item @code{nice} (default: @code{#f})
9311This option accepts, as an integer, the nice value with which to run the
9312@command{login} program.
9313
9314@item @code{extra-options} (default: @code{'()})
9315This option provides an "escape hatch" for the user to provide arbitrary
9316command-line arguments to @command{agetty} as a list of strings.
9317
9318@end table
9319@end deftp
9320
46ec2707
DC
9321@deffn {Scheme Procedure} kmscon-service-type @var{config}
9322Return a service to run @uref{https://www.freedesktop.org/wiki/Software/kmscon,kmscon}
9323according to @var{config}, a @code{<kmscon-configuration>} object, which
9324specifies the tty to run, among other things.
9325@end deffn
9326
9327@deftp {Data Type} kmscon-configuration
9328This is the data type representing the configuration of Kmscon, which
9ee4c9ab 9329implements virtual console log-in.
46ec2707
DC
9330
9331@table @asis
9332
9333@item @code{virtual-terminal}
9334The name of the console this Kmscon runs on---e.g., @code{"tty1"}.
9335
9336@item @code{login-program} (default: @code{#~(string-append #$shadow "/bin/login")})
9337A gexp denoting the name of the log-in program. The default log-in program is
9338@command{login} from the Shadow tool suite.
9339
9340@item @code{login-arguments} (default: @code{'("-p")})
9341A list of arguments to pass to @command{login}.
9342
9343@item @code{hardware-acceleration?} (default: #f)
9344Whether to use hardware acceleration.
9345
9346@item @code{kmscon} (default: @var{kmscon})
9347The Kmscon package to use.
9348
9349@end table
9350@end deftp
9351
6454b333
LC
9352@cindex name service cache daemon
9353@cindex nscd
be1c2c54 9354@deffn {Scheme Procedure} nscd-service [@var{config}] [#:glibc glibc] @
4aee6e60 9355 [#:name-services '()]
1068f26b 9356Return a service that runs the libc name service cache daemon (nscd) with the
b893f1ae
LC
9357given @var{config}---an @code{<nscd-configuration>} object. @xref{Name
9358Service Switch}, for an example.
cf4a9129 9359@end deffn
401c53c4 9360
6454b333
LC
9361@defvr {Scheme Variable} %nscd-default-configuration
9362This is the default @code{<nscd-configuration>} value (see below) used
1068f26b 9363by @code{nscd-service}. It uses the caches defined by
6454b333
LC
9364@var{%nscd-default-caches}; see below.
9365@end defvr
9366
9367@deftp {Data Type} nscd-configuration
1068f26b 9368This is the data type representing the name service cache daemon (nscd)
6454b333
LC
9369configuration.
9370
9371@table @asis
9372
b893f1ae
LC
9373@item @code{name-services} (default: @code{'()})
9374List of packages denoting @dfn{name services} that must be visible to
9375the nscd---e.g., @code{(list @var{nss-mdns})}.
9376
9377@item @code{glibc} (default: @var{glibc})
9378Package object denoting the GNU C Library providing the @command{nscd}
9379command.
9380
6454b333 9381@item @code{log-file} (default: @code{"/var/log/nscd.log"})
1068f26b 9382Name of the nscd log file. This is where debugging output goes when
6454b333
LC
9383@code{debug-level} is strictly positive.
9384
9385@item @code{debug-level} (default: @code{0})
1068f26b 9386Integer denoting the debugging levels. Higher numbers mean that more
6454b333
LC
9387debugging output is logged.
9388
9389@item @code{caches} (default: @var{%nscd-default-caches})
9390List of @code{<nscd-cache>} objects denoting things to be cached; see
9391below.
9392
9393@end table
9394@end deftp
9395
9396@deftp {Data Type} nscd-cache
9397Data type representing a cache database of nscd and its parameters.
9398
9399@table @asis
9400
9401@item @code{database}
9402This is a symbol representing the name of the database to be cached.
9403Valid values are @code{passwd}, @code{group}, @code{hosts}, and
9404@code{services}, which designate the corresponding NSS database
9405(@pxref{NSS Basics,,, libc, The GNU C Library Reference Manual}).
9406
9407@item @code{positive-time-to-live}
9408@itemx @code{negative-time-to-live} (default: @code{20})
9409A number representing the number of seconds during which a positive or
9410negative lookup result remains in cache.
9411
9412@item @code{check-files?} (default: @code{#t})
9413Whether to check for updates of the files corresponding to
9414@var{database}.
9415
9416For instance, when @var{database} is @code{hosts}, setting this flag
9417instructs nscd to check for updates in @file{/etc/hosts} and to take
9418them into account.
9419
9420@item @code{persistent?} (default: @code{#t})
9421Whether the cache should be stored persistently on disk.
9422
9423@item @code{shared?} (default: @code{#t})
9424Whether the cache should be shared among users.
9425
9426@item @code{max-database-size} (default: 32@tie{}MiB)
9427Maximum size in bytes of the database cache.
9428
9429@c XXX: 'suggested-size' and 'auto-propagate?' seem to be expert
9430@c settings, so leave them out.
9431
9432@end table
9433@end deftp
9434
9435@defvr {Scheme Variable} %nscd-default-caches
9436List of @code{<nscd-cache>} objects used by default by
1068f26b 9437@code{nscd-configuration} (see above).
6454b333
LC
9438
9439It enables persistent and aggressive caching of service and host name
9440lookups. The latter provides better host name lookup performance,
9441resilience in the face of unreliable name servers, and also better
9442privacy---often the result of host name lookups is in local cache, so
9443external name servers do not even need to be queried.
9444@end defvr
9445
ec2e2f6c 9446@anchor{syslog-configuration-type}
e32171ee
JD
9447@cindex syslog
9448@cindex logging
ec2e2f6c
DC
9449@deftp {Data Type} syslog-configuration
9450This data type represents the configuration of the syslog daemon.
6454b333 9451
ec2e2f6c
DC
9452@table @asis
9453@item @code{syslogd} (default: @code{#~(string-append #$inetutils "/libexec/syslogd")})
9454The syslog daemon to use.
9455
9456@item @code{config-file} (default: @code{%default-syslog.conf})
9457The syslog configuration file to use.
9458
9459@end table
9460@end deftp
9461
9462@anchor{syslog-service}
e32171ee 9463@cindex syslog
ec2e2f6c
DC
9464@deffn {Scheme Procedure} syslog-service @var{config}
9465Return a service that runs a syslog daemon according to @var{config}.
44abcb28
LC
9466
9467@xref{syslogd invocation,,, inetutils, GNU Inetutils}, for more
9468information on the configuration file syntax.
cf4a9129 9469@end deffn
401c53c4 9470
0adfe95a
LC
9471@anchor{guix-configuration-type}
9472@deftp {Data Type} guix-configuration
9473This data type represents the configuration of the Guix build daemon.
9474@xref{Invoking guix-daemon}, for more information.
9475
9476@table @asis
9477@item @code{guix} (default: @var{guix})
9478The Guix package to use.
401c53c4 9479
0adfe95a
LC
9480@item @code{build-group} (default: @code{"guixbuild"})
9481Name of the group for build user accounts.
401c53c4 9482
0adfe95a
LC
9483@item @code{build-accounts} (default: @code{10})
9484Number of build user accounts to create.
401c53c4 9485
0adfe95a 9486@item @code{authorize-key?} (default: @code{#t})
e32171ee 9487@cindex substitutes, authorization thereof
5b58c28b
LC
9488Whether to authorize the substitute keys listed in
9489@code{authorized-keys}---by default that of @code{hydra.gnu.org}
0adfe95a
LC
9490(@pxref{Substitutes}).
9491
5b58c28b
LC
9492@vindex %default-authorized-guix-keys
9493@item @code{authorized-keys} (default: @var{%default-authorized-guix-keys})
9494The list of authorized key files for archive imports, as a list of
9495string-valued gexps (@pxref{Invoking guix archive}). By default, it
9496contains that of @code{hydra.gnu.org} (@pxref{Substitutes}).
9497
0adfe95a
LC
9498@item @code{use-substitutes?} (default: @code{#t})
9499Whether to use substitutes.
9500
b0b9f6e0
LC
9501@item @code{substitute-urls} (default: @var{%default-substitute-urls})
9502The list of URLs where to look for substitutes by default.
9503
3bee4b61
LC
9504@item @code{max-silent-time} (default: @code{0})
9505@itemx @code{timeout} (default: @code{0})
9506The number of seconds of silence and the number of seconds of activity,
9507respectively, after which a build process times out. A value of zero
9508disables the timeout.
9509
0adfe95a
LC
9510@item @code{extra-options} (default: @code{'()})
9511List of extra command-line options for @command{guix-daemon}.
9512
dc0ef095
LC
9513@item @code{log-file} (default: @code{"/var/log/guix-daemon.log"})
9514File where @command{guix-daemon}'s standard output and standard error
9515are written.
9516
0adfe95a 9517@item @code{lsof} (default: @var{lsof})
f78903f3 9518The lsof package to use.
0adfe95a 9519
93d32da9
LF
9520@item @code{http-proxy} (default: @code{#f})
9521The HTTP proxy used for downloading fixed-output derivations and
9522substitutes.
9523
b191f0a6
LF
9524@item @code{tmpdir} (default: @code{#f})
9525A directory path where the @command{guix-daemon} will perform builds.
9526
0adfe95a
LC
9527@end table
9528@end deftp
9529
9530@deffn {Scheme Procedure} guix-service @var{config}
9531Return a service that runs the Guix build daemon according to
9532@var{config}.
cf4a9129 9533@end deffn
a1ba8475 9534
be1c2c54 9535@deffn {Scheme Procedure} udev-service [#:udev udev]
cf4a9129
LC
9536Run @var{udev}, which populates the @file{/dev} directory dynamically.
9537@end deffn
401c53c4 9538
a535e122
LF
9539@deffn {Scheme Procedure} urandom-seed-service @var{#f}
9540Save some entropy in @var{%random-seed-file} to seed @file{/dev/urandom}
9541when rebooting.
9542@end deffn
9543
9544@defvr {Scheme Variable} %random-seed-file
9545This is the name of the file where some random bytes are saved by
9546@var{urandom-seed-service} to seed @file{/dev/urandom} when rebooting.
9547It defaults to @file{/var/lib/random-seed}.
9548@end defvr
9549
e32171ee
JD
9550@cindex keymap
9551@cindex keyboard
b3d05f48 9552@deffn {Scheme Procedure} console-keymap-service @var{files} ...
dedb8d5e 9553@cindex keyboard layout
b3d05f48
AK
9554Return a service to load console keymaps from @var{files} using
9555@command{loadkeys} command. Most likely, you want to load some default
9556keymap, which can be done like this:
9557
9558@example
9559(console-keymap-service "dvorak")
9560@end example
9561
9562Or, for example, for a Swedish keyboard, you may need to combine
9563the following keymaps:
9564@example
9565(console-keymap-service "se-lat6" "se-fi-lat6")
9566@end example
9567
9568Also you can specify a full file name (or file names) of your keymap(s).
9569See @code{man loadkeys} for details.
9570
5eca9459
AK
9571@end deffn
9572
e32171ee
JD
9573@cindex mouse
9574@cindex gpm
1aaf116d 9575@deffn {Scheme Procedure} gpm-service [#:gpm @var{gpm}] @
8664cc88
LC
9576 [#:options]
9577Run @var{gpm}, the general-purpose mouse daemon, with the given
9578command-line @var{options}. GPM allows users to use the mouse in the console,
9579notably to select, copy, and paste text. The default value of @var{options}
9580uses the @code{ps2} protocol, which works for both USB and PS/2 mice.
9581
9582This service is not part of @var{%base-services}.
9583@end deffn
9584
f1e900a3 9585@anchor{guix-publish-service-type}
3d3c5650 9586@deffn {Scheme Variable} guix-publish-service-type
f1e900a3 9587This is the service type for @command{guix publish} (@pxref{Invoking
3d3c5650 9588guix publish}). Its value must be a @code{guix-configuration}
f1e900a3 9589object, as described below.
1c52181f
LC
9590
9591This assumes that @file{/etc/guix} already contains a signing key pair as
9592created by @command{guix archive --generate-key} (@pxref{Invoking guix
9593archive}). If that is not the case, the service will fail to start.
9594@end deffn
9595
f1e900a3
LC
9596@deftp {Data Type} guix-publish-configuration
9597Data type representing the configuration of the @code{guix publish}
9598service.
9599
9600@table @asis
9601@item @code{guix} (default: @code{guix})
9602The Guix package to use.
9603
9604@item @code{port} (default: @code{80})
9605The TCP port to listen for connections.
9606
9607@item @code{host} (default: @code{"localhost"})
9608The host (and thus, network interface) to listen to. Use
9609@code{"0.0.0.0"} to listen on all the network interfaces.
697ddb88
LC
9610
9611@item @code{compression-level} (default: @code{3})
9612The gzip compression level at which substitutes are compressed. Use
9613@code{0} to disable compression altogether, and @code{9} to get the best
9614compression ratio at the expense of increased CPU usage.
9615
9616@item @code{nar-path} (default: @code{"nar"})
9617The URL path at which ``nars'' can be fetched. @xref{Invoking guix
9618publish, @code{--nar-path}}, for details.
a35136cb
LC
9619
9620@item @code{cache} (default: @code{#f})
9621When it is @code{#f}, disable caching and instead generate archives on
9622demand. Otherwise, this should be the name of a directory---e.g.,
9623@code{"/var/cache/guix/publish"}---where @command{guix publish} caches
9624archives and meta-data ready to be sent. @xref{Invoking guix publish,
9625@option{--cache}}, for more information on the tradeoffs involved.
9626
9627@item @code{workers} (default: @code{#f})
9628When it is an integer, this is the number of worker threads used for
9629caching; when @code{#f}, the number of processors is used.
9630@xref{Invoking guix publish, @option{--workers}}, for more information.
9631
9632@item @code{ttl} (default: @code{#f})
9633When it is an integer, this denotes the @dfn{time-to-live} of the
9634published archives. @xref{Invoking guix publish, @option{--ttl}}, for
9635more information.
f1e900a3
LC
9636@end table
9637@end deftp
9638
b58cbf9a
DC
9639@anchor{rngd-service}
9640@deffn {Scheme Procedure} rngd-service [#:rng-tools @var{rng-tools}] @
9641 [#:device "/dev/hwrng"]
9642Return a service that runs the @command{rngd} program from @var{rng-tools}
9643to add @var{device} to the kernel's entropy pool. The service will fail if
9644@var{device} does not exist.
9645@end deffn
a69576ea 9646
909147e4
RW
9647@anchor{pam-limits-service}
9648@cindex session limits
9649@cindex ulimit
9650@cindex priority
9651@deffn {Scheme Procedure} pam-limits-service [#:limits @var{limits}]
9652
9653Return a service that installs a configuration file for the
9654@uref{http://linux-pam.org/Linux-PAM-html/sag-pam_limits.html,
9655@code{pam_limits} module}. The procedure optionally takes a list of
9656@code{pam-limits-entry} values, which can be used to specify
9657@code{ulimit} limits and nice priority limits to user sessions.
9658
9659The following limits definition sets two hard and soft limits for all
9660login sessions of users in the @code{realtime} group:
9661
9662@example
9663(pam-limits-service
9664 (list
9665 (pam-limits-entry "@@realtime" 'both 'rtprio 99)
9666 (pam-limits-entry "@@realtime" 'both 'memlock 'unlimited)))
9667@end example
9668
9669The first entry increases the maximum realtime priority for
9670non-privileged processes; the second entry lifts any restriction of the
9671maximum address space that can be locked in memory. These settings are
9672commonly used for real-time audio systems.
9673@end deffn
9674
c311089b
LC
9675@node Scheduled Job Execution
9676@subsubsection Scheduled Job Execution
9677
9678@cindex cron
e32171ee 9679@cindex mcron
c311089b
LC
9680@cindex scheduling jobs
9681The @code{(gnu services mcron)} module provides an interface to
9682GNU@tie{}mcron, a daemon to run jobs at scheduled times (@pxref{Top,,,
9683mcron, GNU@tie{}mcron}). GNU@tie{}mcron is similar to the traditional
9684Unix @command{cron} daemon; the main difference is that it is
9685implemented in Guile Scheme, which provides a lot of flexibility when
9686specifying the scheduling of jobs and their actions.
9687
8ac6282c 9688The example below defines an operating system that runs the
c311089b 9689@command{updatedb} (@pxref{Invoking updatedb,,, find, Finding Files})
8ac6282c
LC
9690and the @command{guix gc} commands (@pxref{Invoking guix gc}) daily, as
9691well as the @command{mkid} command on behalf of an unprivileged user
9692(@pxref{mkid invocation,,, idutils, ID Database Utilities}). It uses
9693gexps to introduce job definitions that are passed to mcron
9694(@pxref{G-Expressions}).
c311089b
LC
9695
9696@lisp
9697(use-modules (guix) (gnu) (gnu services mcron))
8ac6282c 9698(use-package-modules base idutils)
c311089b
LC
9699
9700(define updatedb-job
8ac6282c
LC
9701 ;; Run 'updatedb' at 3AM every day. Here we write the
9702 ;; job's action as a Scheme procedure.
c311089b 9703 #~(job '(next-hour '(3))
8ac6282c
LC
9704 (lambda ()
9705 (execl (string-append #$findutils "/bin/updatedb")
9706 "updatedb"
9707 "--prunepaths=/tmp /var/tmp /gnu/store"))))
c311089b
LC
9708
9709(define garbage-collector-job
9710 ;; Collect garbage 5 minutes after midnight every day.
8ac6282c 9711 ;; The job's action is a shell command.
c311089b
LC
9712 #~(job "5 0 * * *" ;Vixie cron syntax
9713 "guix gc -F 1G"))
9714
80d944b7 9715(define idutils-job
8ac6282c
LC
9716 ;; Update the index database as user "charlie" at 12:15PM
9717 ;; and 19:15PM. This runs from the user's home directory.
9718 #~(job '(next-minute-from (next-hour '(12 19)) '(15))
9719 (string-append #$idutils "/bin/mkid src")
9720 #:user "charlie"))
9721
c311089b
LC
9722(operating-system
9723 ;; @dots{}
9724 (services (cons (mcron-service (list garbage-collector-job
8ac6282c
LC
9725 updatedb-job
9726 idutils-job))
c311089b
LC
9727 %base-services)))
9728@end lisp
9729
9730@xref{Guile Syntax, mcron job specifications,, mcron, GNU@tie{}mcron},
9731for more information on mcron job specifications. Below is the
9732reference of the mcron service.
9733
9734@deffn {Scheme Procedure} mcron-service @var{jobs} [#:mcron @var{mcron2}]
9735Return an mcron service running @var{mcron} that schedules @var{jobs}, a
9736list of gexps denoting mcron job specifications.
9737
9738This is a shorthand for:
9739@example
80d944b7
LC
9740(service mcron-service-type
9741 (mcron-configuration (mcron mcron) (jobs jobs)))
c311089b
LC
9742@end example
9743@end deffn
9744
9745@defvr {Scheme Variable} mcron-service-type
9746This is the type of the @code{mcron} service, whose value is an
9747@code{mcron-configuration} object.
9748
9749This service type can be the target of a service extension that provides
9750it additional job specifications (@pxref{Service Composition}). In
80d944b7 9751other words, it is possible to define services that provide additional
c311089b
LC
9752mcron jobs to run.
9753@end defvr
9754
9755@deftp {Data Type} mcron-configuration
9756Data type representing the configuration of mcron.
9757
9758@table @asis
9759@item @code{mcron} (default: @var{mcron2})
9760The mcron package to use.
9761
9762@item @code{jobs}
9763This is a list of gexps (@pxref{G-Expressions}), where each gexp
9764corresponds to an mcron job specification (@pxref{Syntax, mcron job
9765specifications,, mcron, GNU@tie{}mcron}).
9766@end table
9767@end deftp
9768
9769
92c03a87
JN
9770@node Log Rotation
9771@subsubsection Log Rotation
9772
9773@cindex rottlog
9774@cindex log rotation
e32171ee 9775@cindex logging
92c03a87
JN
9776Log files such as those found in @file{/var/log} tend to grow endlessly,
9777so it's a good idea to @dfn{rotate} them once in a while---i.e., archive
9778their contents in separate files, possibly compressed. The @code{(gnu
9779services admin)} module provides an interface to GNU@tie{}Rot[t]log, a
9780log rotation tool (@pxref{Top,,, rottlog, GNU Rot[t]log Manual}).
9781
9782The example below defines an operating system that provides log rotation
81fa2229 9783with the default settings, for commonly encountered log files.
92c03a87
JN
9784
9785@lisp
9786(use-modules (guix) (gnu))
9787(use-service-modules admin mcron)
9788(use-package-modules base idutils)
9789
9790(operating-system
9791 ;; @dots{}
9792 (services (cons* (mcron-service)
3d3c5650 9793 (service rottlog-service-type)
92c03a87
JN
9794 %base-services)))
9795@end lisp
9796
9797@defvr {Scheme Variable} rottlog-service-type
9798This is the type of the Rottlog service, whose value is a
9799@code{rottlog-configuration} object.
9800
254ea3f9
LC
9801Other services can extend this one with new @code{log-rotation} objects
9802(see below), thereby augmenting the set of files to be rotated.
9803
92c03a87
JN
9804This service type can define mcron jobs (@pxref{Scheduled Job
9805Execution}) to run the rottlog service.
9806@end defvr
9807
9808@deftp {Data Type} rottlog-configuration
9809Data type representing the configuration of rottlog.
9810
9811@table @asis
9812@item @code{rottlog} (default: @code{rottlog})
9813The Rottlog package to use.
9814
9815@item @code{rc-file} (default: @code{(file-append rottlog "/etc/rc")})
9816The Rottlog configuration file to use (@pxref{Mandatory RC Variables,,,
9817rottlog, GNU Rot[t]log Manual}).
9818
81fa2229
LC
9819@item @code{rotations} (default: @code{%default-rotations})
9820A list of @code{log-rotation} objects as defined below.
92c03a87 9821
81fa2229
LC
9822@item @code{jobs}
9823This is a list of gexps where each gexp corresponds to an mcron job
9824specification (@pxref{Scheduled Job Execution}).
9825@end table
9826@end deftp
9827
9828@deftp {Data Type} log-rotation
9829Data type representing the rotation of a group of log files.
9830
9831Taking an example from the Rottlog manual (@pxref{Period Related File
9832Examples,,, rottlog, GNU Rot[t]log Manual}), a log rotation might be
9833defined like this:
92c03a87
JN
9834
9835@example
81fa2229
LC
9836(log-rotation
9837 (frequency 'daily)
9838 (files '("/var/log/apache/*"))
9839 (options '("storedir apache-archives"
9840 "rotate 6"
9841 "notifempty"
9842 "nocompress")))
92c03a87
JN
9843@end example
9844
81fa2229
LC
9845The list of fields is as follows:
9846
9847@table @asis
9848@item @code{frequency} (default: @code{'weekly})
9849The log rotation frequency, a symbol.
9850
9851@item @code{files}
9852The list of files or file glob patterns to rotate.
9853
9854@item @code{options} (default: @code{'()})
9855The list of rottlog options for this rotation (@pxref{Configuration
9856parameters,,, rottlog, GNU Rot[t]lg Manual}).
9857
9858@item @code{post-rotate} (default: @code{#f})
9859Either @code{#f} or a gexp to execute once the rotation has completed.
92c03a87
JN
9860@end table
9861@end deftp
9862
9863@defvr {Scheme Variable} %default-rotations
9864Specifies weekly rotation of @var{%rotated-files} and
81fa2229 9865a couple of other files.
92c03a87
JN
9866@end defvr
9867
9868@defvr {Scheme Variable} %rotated-files
9869The list of syslog-controlled files to be rotated. By default it is:
9870@code{'("/var/log/messages" "/var/log/secure")}.
9871@end defvr
9872
cf4a9129
LC
9873@node Networking Services
9874@subsubsection Networking Services
401c53c4 9875
fa1e31b8 9876The @code{(gnu services networking)} module provides services to configure
cf4a9129 9877the network interface.
a1ba8475 9878
a023cca8 9879@cindex DHCP, networking service
be1c2c54 9880@deffn {Scheme Procedure} dhcp-client-service [#:dhcp @var{isc-dhcp}]
a023cca8
LC
9881Return a service that runs @var{dhcp}, a Dynamic Host Configuration
9882Protocol (DHCP) client, on all the non-loopback network interfaces.
9883@end deffn
9884
8de3e4b3
LC
9885@defvr {Scheme Variable} static-networking-service-type
9886This is the type for statically-configured network interfaces.
9887@c TODO Document <static-networking> data structures.
9888@end defvr
9889
be1c2c54 9890@deffn {Scheme Procedure} static-networking-service @var{interface} @var{ip} @
1f9803c2 9891 [#:netmask #f] [#:gateway #f] [#:name-servers @code{'()}]
cf4a9129 9892Return a service that starts @var{interface} with address @var{ip}. If
1f9803c2
LC
9893@var{netmask} is true, use it as the network mask. If @var{gateway} is true,
9894it must be a string specifying the default network gateway.
8de3e4b3
LC
9895
9896This procedure can be called several times, one for each network
9897interface of interest. Behind the scenes what it does is extend
9898@code{static-networking-service-type} with additional network interfaces
9899to handle.
cf4a9129 9900@end deffn
8b315a6d 9901
b7d0c494 9902@cindex wicd
e32171ee
JD
9903@cindex wireless
9904@cindex WiFi
87f40011 9905@cindex network management
be1c2c54 9906@deffn {Scheme Procedure} wicd-service [#:wicd @var{wicd}]
87f40011
LC
9907Return a service that runs @url{https://launchpad.net/wicd,Wicd}, a network
9908management daemon that aims to simplify wired and wireless networking.
9909
9910This service adds the @var{wicd} package to the global profile, providing
9911several commands to interact with the daemon and configure networking:
9912@command{wicd-client}, a graphical user interface, and the @command{wicd-cli}
9913and @command{wicd-curses} user interfaces.
b7d0c494
MW
9914@end deffn
9915
c0a9589d 9916@cindex NetworkManager
b726096b
CB
9917
9918@defvr {Scheme Variable} network-manager-service-type
9919This is the service type for the
9920@uref{https://wiki.gnome.org/Projects/NetworkManager, NetworkManager}
9921service. The value for this service type is a
9922@code{network-manager-configuration} record.
9923@end defvr
9924
9925@deftp {Data Type} network-manager-configuration
9926Data type representing the configuration of NetworkManager.
9927
9928@table @asis
9929@item @code{network-manager} (default: @code{network-manager})
9930The NetworkManager package to use.
9931
9932@item @code{dns} (default: @code{"default"})
9933Processing mode for DNS, which affects how NetworkManager uses the
9934@code{resolv.conf} configuration file.
9935
9936@table @samp
9937@item default
9938NetworkManager will update @code{resolv.conf} to reflect the nameservers
9939provided by currently active connections.
9940
9941@item dnsmasq
9942NetworkManager will run @code{dnsmasq} as a local caching nameserver,
9943using a "split DNS" configuration if you are connected to a VPN, and
9944then update @code{resolv.conf} to point to the local nameserver.
9945
9946@item none
9947NetworkManager will not modify @code{resolv.conf}.
9948@end table
9949
9950@end table
9951@end deftp
c0a9589d 9952
76192896 9953@cindex Connman
34d60c49
MO
9954@deffn {Scheme Variable} connman-service-type
9955This is the service type to run @url{https://01.org/connman,Connman},
9956a network connection manager.
9957
9958Its value must be an
9959@code{connman-configuration} record as in this example:
9960
9961@example
9962(service connman-service-type
9963 (connman-configuration
9964 (disable-vpn? #t)))
9965@end example
9966
9967See below for details about @code{connman-configuration}.
76192896
EF
9968@end deffn
9969
34d60c49
MO
9970@deftp {Data Type} connman-configuration
9971Data Type representing the configuration of connman.
9972
9973@table @asis
9974@item @code{connman} (default: @var{connman})
9975The connman package to use.
9976
9977@item @code{disable-vpn?} (default: @code{#f})
9978When true, enable connman's vpn plugin.
9979@end table
9980@end deftp
9981
2cccbc2a 9982@cindex WPA Supplicant
cbf1024e
LC
9983@defvr {Scheme Variable} wpa-supplicant-service-type
9984This is the service type to run @url{https://w1.fi/wpa_supplicant/,WPA
2cccbc2a 9985supplicant}, an authentication daemon required to authenticate against
cbf1024e 9986encrypted WiFi or ethernet networks. It is configured to listen for
2cccbc2a 9987requests on D-Bus.
cbf1024e
LC
9988
9989The value of this service is the @code{wpa-supplicant} package to use.
9990Thus, it can be instantiated like this:
9991
9992@lisp
3d3c5650 9993(use-modules (gnu services networking))
cbf1024e 9994
3d3c5650 9995(service wpa-supplicant-service-type)
cbf1024e
LC
9996@end lisp
9997@end defvr
2cccbc2a 9998
e32171ee
JD
9999@cindex NTP
10000@cindex real time clock
be1c2c54 10001@deffn {Scheme Procedure} ntp-service [#:ntp @var{ntp}] @
dc0322b5
LC
10002 [#:servers @var{%ntp-servers}] @
10003 [#:allow-large-adjustment? #f]
63854bcb
LC
10004Return a service that runs the daemon from @var{ntp}, the
10005@uref{http://www.ntp.org, Network Time Protocol package}. The daemon will
10006keep the system clock synchronized with that of @var{servers}.
dc0322b5
LC
10007@var{allow-large-adjustment?} determines whether @command{ntpd} is allowed to
10008make an initial adjustment of more than 1,000 seconds.
63854bcb
LC
10009@end deffn
10010
10011@defvr {Scheme Variable} %ntp-servers
10012List of host names used as the default NTP servers.
10013@end defvr
10014
9260b9d1
TD
10015@cindex inetd
10016@deffn {Scheme variable} inetd-service-type
10017This service runs the @command{inetd} (@pxref{inetd invocation,,,
10018inetutils, GNU Inetutils}) daemon. @command{inetd} listens for
10019connections on internet sockets, and lazily starts the specified server
10020program when a connection is made on one of these sockets.
10021
10022The value of this service is an @code{inetd-configuration} object. The
10023following example configures the @command{inetd} daemon to provide the
10024built-in @command{echo} service, as well as an smtp service which
10025forwards smtp traffic over ssh to a server @code{smtp-server} behind a
10026gateway @code{hostname}:
10027
10028@example
10029(service
10030 inetd-service-type
10031 (inetd-configuration
10032 (entries (list
10033 (inetd-entry
10034 (name "echo")
10035 (socket-type 'stream)
10036 (protocol "tcp")
10037 (wait? #f)
10038 (user "root"))
10039 (inetd-entry
10040 (node "127.0.0.1")
10041 (name "smtp")
10042 (socket-type 'stream)
10043 (protocol "tcp")
10044 (wait? #f)
10045 (user "root")
10046 (program (file-append openssh "/bin/ssh"))
10047 (arguments
10048 '("ssh" "-qT" "-i" "/path/to/ssh_key"
10049 "-W" "smtp-server:25" "user@@hostname")))))
10050@end example
10051
10052See below for more details about @code{inetd-configuration}.
10053@end deffn
10054
10055@deftp {Data Type} inetd-configuration
10056Data type representing the configuration of @command{inetd}.
10057
10058@table @asis
10059@item @code{program} (default: @code{(file-append inetutils "/libexec/inetd")})
10060The @command{inetd} executable to use.
10061
10062@item @code{entries} (default: @code{'()})
10063A list of @command{inetd} service entries. Each entry should be created
10064by the @code{inetd-entry} constructor.
10065@end table
10066@end deftp
10067
10068@deftp {Data Type} inetd-entry
10069Data type representing an entry in the @command{inetd} configuration.
10070Each entry corresponds to a socket where @command{inetd} will listen for
10071requests.
10072
10073@table @asis
10074@item @code{node} (default: @code{#f})
10075Optional string, a comma-separated list of local addresses
10076@command{inetd} should use when listening for this service.
10077@xref{Configuration file,,, inetutils, GNU Inetutils} for a complete
10078description of all options.
10079@item @code{name}
10080A string, the name must correspond to an entry in @code{/etc/services}.
10081@item @code{socket-type}
10082One of @code{'stream}, @code{'dgram}, @code{'raw}, @code{'rdm} or
10083@code{'seqpacket}.
10084@item @code{protocol}
10085A string, must correspond to an entry in @code{/etc/protocols}.
10086@item @code{wait?} (default: @code{#t})
10087Whether @command{inetd} should wait for the server to exit before
10088listening to new service requests.
10089@item @code{user}
10090A string containing the user (and, optionally, group) name of the user
10091as whom the server should run. The group name can be specified in a
10092suffix, separated by a colon or period, i.e. @code{"user"},
10093@code{"user:group"} or @code{"user.group"}.
10094@item @code{program} (default: @code{"internal"})
10095The server program which will serve the requests, or @code{"internal"}
10096if @command{inetd} should use a built-in service.
10097@item @code{arguments} (default: @code{'()})
10098A list strings or file-like objects, which are the server program's
10099arguments, starting with the zeroth argument, i.e. the name of the
10100program itself. For @command{inetd}'s internal services, this entry
10101must be @code{'()} or @code{'("internal")}.
10102@end table
10103
10104@xref{Configuration file,,, inetutils, GNU Inetutils} for a more
10105detailed discussion of each configuration field.
10106@end deftp
10107
e32171ee 10108@cindex Tor
375c6108
LC
10109@deffn {Scheme Procedure} tor-service [@var{config-file}] [#:tor @var{tor}]
10110Return a service to run the @uref{https://torproject.org, Tor} anonymous
10111networking daemon.
8b315a6d 10112
375c6108 10113The daemon runs as the @code{tor} unprivileged user. It is passed
6331bde7
LC
10114@var{config-file}, a file-like object, with an additional @code{User tor} line
10115and lines for hidden services added via @code{tor-hidden-service}. Run
10116@command{man tor} for information about the configuration file.
10117@end deffn
10118
24a8ef3b 10119@cindex hidden service
6331bde7
LC
10120@deffn {Scheme Procedure} tor-hidden-service @var{name} @var{mapping}
10121Define a new Tor @dfn{hidden service} called @var{name} and implementing
10122@var{mapping}. @var{mapping} is a list of port/host tuples, such as:
10123
10124@example
24a8ef3b
LC
10125 '((22 "127.0.0.1:22")
10126 (80 "127.0.0.1:8080"))
6331bde7
LC
10127@end example
10128
10129In this example, port 22 of the hidden service is mapped to local port 22, and
10130port 80 is mapped to local port 8080.
10131
6629099a
LC
10132This creates a @file{/var/lib/tor/hidden-services/@var{name}} directory, where
10133the @file{hostname} file contains the @code{.onion} host name for the hidden
6331bde7
LC
10134service.
10135
10136See @uref{https://www.torproject.org/docs/tor-hidden-service.html.en, the Tor
10137project's documentation} for more information.
cf4a9129 10138@end deffn
8b315a6d 10139
be1c2c54 10140@deffn {Scheme Procedure} bitlbee-service [#:bitlbee bitlbee] @
4627a464
LC
10141 [#:interface "127.0.0.1"] [#:port 6667] @
10142 [#:extra-settings ""]
10143Return a service that runs @url{http://bitlbee.org,BitlBee}, a daemon that
10144acts as a gateway between IRC and chat networks.
10145
10146The daemon will listen to the interface corresponding to the IP address
10147specified in @var{interface}, on @var{port}. @code{127.0.0.1} means that only
10148local clients can connect, whereas @code{0.0.0.0} means that connections can
10149come from any networking interface.
10150
10151In addition, @var{extra-settings} specifies a string to append to the
10152configuration file.
10153@end deffn
10154
71b0601a 10155Furthermore, @code{(gnu services ssh)} provides the following services.
e32171ee
JD
10156@cindex SSH
10157@cindex SSH server
8b315a6d 10158
be1c2c54 10159@deffn {Scheme Procedure} lsh-service [#:host-key "/etc/lsh/host-key"] @
5833bf33 10160 [#:daemonic? #t] [#:interfaces '()] [#:port-number 22] @
cf4a9129
LC
10161 [#:allow-empty-passwords? #f] [#:root-login? #f] @
10162 [#:syslog-output? #t] [#:x11-forwarding? #t] @
10163 [#:tcp/ip-forwarding? #t] [#:password-authentication? #t] @
21cc905a 10164 [#:public-key-authentication? #t] [#:initialize? #t]
cf4a9129
LC
10165Run the @command{lshd} program from @var{lsh} to listen on port @var{port-number}.
10166@var{host-key} must designate a file containing the host key, and readable
10167only by root.
72e25e35 10168
5833bf33
DP
10169When @var{daemonic?} is true, @command{lshd} will detach from the
10170controlling terminal and log its output to syslogd, unless one sets
10171@var{syslog-output?} to false. Obviously, it also makes lsh-service
10172depend on existence of syslogd service. When @var{pid-file?} is true,
10173@command{lshd} writes its PID to the file called @var{pid-file}.
10174
cf4a9129
LC
10175When @var{initialize?} is true, automatically create the seed and host key
10176upon service activation if they do not exist yet. This may take long and
10177require interaction.
8b315a6d 10178
20dd519c
LC
10179When @var{initialize?} is false, it is up to the user to initialize the
10180randomness generator (@pxref{lsh-make-seed,,, lsh, LSH Manual}), and to create
10181a key pair with the private key stored in file @var{host-key} (@pxref{lshd
10182basics,,, lsh, LSH Manual}).
10183
cf4a9129
LC
10184When @var{interfaces} is empty, lshd listens for connections on all the
10185network interfaces; otherwise, @var{interfaces} must be a list of host names
10186or addresses.
9bf3c1a7 10187
20dd519c
LC
10188@var{allow-empty-passwords?} specifies whether to accept log-ins with empty
10189passwords, and @var{root-login?} specifies whether to accept log-ins as
cf4a9129 10190root.
4af2447e 10191
cf4a9129
LC
10192The other options should be self-descriptive.
10193@end deffn
4af2447e 10194
e32171ee
JD
10195@cindex SSH
10196@cindex SSH server
d8f31281
LC
10197@deffn {Scheme Variable} openssh-service-type
10198This is the type for the @uref{http://www.openssh.org, OpenSSH} secure
10199shell daemon, @command{sshd}. Its value must be an
10200@code{openssh-configuration} record as in this example:
10201
10202@example
10203(service openssh-service-type
10204 (openssh-configuration
10205 (x11-forwarding? #t)
4892eb7c
LC
10206 (permit-root-login 'without-password)
10207 (authorized-keys
10208 `(("alice" ,(local-file "alice.pub"))
10209 ("bob" ,(local-file "bob.pub"))))))
d8f31281
LC
10210@end example
10211
10212See below for details about @code{openssh-configuration}.
1398a438
LC
10213
10214This service can be extended with extra authorized keys, as in this
10215example:
10216
10217@example
10218(service-extension openssh-service-type
10219 (const `(("charlie"
10220 ,(local-file "charlie.pub")))))
10221@end example
86d8f6d3
JL
10222@end deffn
10223
d8f31281
LC
10224@deftp {Data Type} openssh-configuration
10225This is the configuration record for OpenSSH's @command{sshd}.
10226
10227@table @asis
10228@item @code{pid-file} (default: @code{"/var/run/sshd.pid"})
10229Name of the file where @command{sshd} writes its PID.
10230
10231@item @code{port-number} (default: @code{22})
10232TCP port on which @command{sshd} listens for incoming connections.
10233
10234@item @code{permit-root-login} (default: @code{#f})
10235This field determines whether and when to allow logins as root. If
10236@code{#f}, root logins are disallowed; if @code{#t}, they are allowed.
10237If it's the symbol @code{'without-password}, then root logins are
10238permitted but not with password-based authentication.
10239
10240@item @code{allow-empty-passwords?} (default: @code{#f})
10241When true, users with empty passwords may log in. When false, they may
10242not.
10243
10244@item @code{password-authentication?} (default: @code{#t})
10245When true, users may log in with their password. When false, they have
10246other authentication methods.
10247
10248@item @code{public-key-authentication?} (default: @code{#t})
10249When true, users may log in using public key authentication. When
10250false, users have to use other authentication method.
10251
10252Authorized public keys are stored in @file{~/.ssh/authorized_keys}.
10253This is used only by protocol version 2.
10254
d8f31281
LC
10255@item @code{x11-forwarding?} (default: @code{#f})
10256When true, forwarding of X11 graphical client connections is
10257enabled---in other words, @command{ssh} options @option{-X} and
10258@option{-Y} will work.
10259
563c5d42
CL
10260@item @code{challenge-response-authentication?} (default: @code{#f})
10261Specifies whether challenge response authentication is allowed (e.g. via
10262PAM).
10263
10264@item @code{use-pam?} (default: @code{#t})
10265Enables the Pluggable Authentication Module interface. If set to
10266@code{#t}, this will enable PAM authentication using
10267@code{challenge-response-authentication?} and
10268@code{password-authentication?}, in addition to PAM account and session
10269module processing for all authentication types.
10270
10271Because PAM challenge response authentication usually serves an
10272equivalent role to password authentication, you should disable either
10273@code{challenge-response-authentication?} or
10274@code{password-authentication?}.
f895dce4
CL
10275
10276@item @code{print-last-log?} (default: @code{#t})
10277Specifies whether @command{sshd} should print the date and time of the
10278last user login when a user logs in interactively.
12723370
CL
10279
10280@item @code{subsystems} (default: @code{'(("sftp" "internal-sftp"))})
10281Configures external subsystems (e.g. file transfer daemon).
10282
10283This is a list of two-element lists, each of which containing the
10284subsystem name and a command (with optional arguments) to execute upon
10285subsystem request.
10286
10287The command @command{internal-sftp} implements an in-process SFTP
10288server. Alternately, one can specify the @command{sftp-server} command:
10289@example
10290(service openssh-service-type
10291 (openssh-configuration
10292 (subsystems
4892eb7c 10293 `(("sftp" ,(file-append openssh "/libexec/sftp-server"))))))
12723370 10294@end example
4892eb7c
LC
10295
10296@item @code{authorized-keys} (default: @code{'()})
10297@cindex authorized keys, SSH
10298@cindex SSH authorized keys
10299This is the list of authorized keys. Each element of the list is a user
10300name followed by one or more file-like objects that represent SSH public
10301keys. For example:
10302
10303@example
10304(openssh-configuration
10305 (authorized-keys
10306 `(("rekado" ,(local-file "rekado.pub"))
10307 ("chris" ,(local-file "chris.pub"))
10308 ("root" ,(local-file "rekado.pub") ,(local-file "chris.pub")))))
10309@end example
10310
10311@noindent
10312registers the specified public keys for user accounts @code{rekado},
10313@code{chris}, and @code{root}.
10314
1398a438
LC
10315Additional authorized keys can be specified @i{via}
10316@code{service-extension}.
10317
4892eb7c
LC
10318Note that this does @emph{not} interfere with the use of
10319@file{~/.ssh/authorized_keys}.
d8f31281
LC
10320@end table
10321@end deftp
10322
71b0601a
DC
10323@deffn {Scheme Procedure} dropbear-service [@var{config}]
10324Run the @uref{https://matt.ucc.asn.au/dropbear/dropbear.html,Dropbear SSH
10325daemon} with the given @var{config}, a @code{<dropbear-configuration>}
10326object.
10327
10328For example, to specify a Dropbear service listening on port 1234, add
10329this call to the operating system's @code{services} field:
10330
10331@example
10332(dropbear-service (dropbear-configuration
10333 (port-number 1234)))
10334@end example
10335@end deffn
10336
10337@deftp {Data Type} dropbear-configuration
10338This data type represents the configuration of a Dropbear SSH daemon.
10339
10340@table @asis
10341@item @code{dropbear} (default: @var{dropbear})
10342The Dropbear package to use.
10343
10344@item @code{port-number} (default: 22)
10345The TCP port where the daemon waits for incoming connections.
10346
10347@item @code{syslog-output?} (default: @code{#t})
10348Whether to enable syslog output.
10349
10350@item @code{pid-file} (default: @code{"/var/run/dropbear.pid"})
10351File name of the daemon's PID file.
10352
10353@item @code{root-login?} (default: @code{#f})
10354Whether to allow @code{root} logins.
10355
10356@item @code{allow-empty-passwords?} (default: @code{#f})
10357Whether to allow empty passwords.
10358
10359@item @code{password-authentication?} (default: @code{#t})
10360Whether to enable password-based authentication.
10361@end table
10362@end deftp
10363
fa0c1d61
LC
10364@defvr {Scheme Variable} %facebook-host-aliases
10365This variable contains a string for use in @file{/etc/hosts}
10366(@pxref{Host Names,,, libc, The GNU C Library Reference Manual}). Each
10367line contains a entry that maps a known server name of the Facebook
10368on-line service---e.g., @code{www.facebook.com}---to the local
10369host---@code{127.0.0.1} or its IPv6 equivalent, @code{::1}.
10370
10371This variable is typically used in the @code{hosts-file} field of an
7313a52e
LC
10372@code{operating-system} declaration (@pxref{operating-system Reference,
10373@file{/etc/hosts}}):
fa0c1d61
LC
10374
10375@example
10376(use-modules (gnu) (guix))
10377
10378(operating-system
10379 (host-name "mymachine")
10380 ;; ...
10381 (hosts-file
10382 ;; Create a /etc/hosts file with aliases for "localhost"
10383 ;; and "mymachine", as well as for Facebook servers.
24e02c28
LC
10384 (plain-file "hosts"
10385 (string-append (local-host-aliases host-name)
10386 %facebook-host-aliases))))
fa0c1d61
LC
10387@end example
10388
10389This mechanism can prevent programs running locally, such as Web
10390browsers, from accessing Facebook.
10391@end defvr
10392
965a7332
LC
10393The @code{(gnu services avahi)} provides the following definition.
10394
be1c2c54 10395@deffn {Scheme Procedure} avahi-service [#:avahi @var{avahi}] @
965a7332
LC
10396 [#:host-name #f] [#:publish? #t] [#:ipv4? #t] @
10397 [#:ipv6? #t] [#:wide-area? #f] @
c8695f32 10398 [#:domains-to-browse '()] [#:debug? #f]
965a7332
LC
10399Return a service that runs @command{avahi-daemon}, a system-wide
10400mDNS/DNS-SD responder that allows for service discovery and
cc9c1f39
LC
10401"zero-configuration" host name lookups (see @uref{http://avahi.org/}), and
10402extends the name service cache daemon (nscd) so that it can resolve
10403@code{.local} host names using
1065bed9
LC
10404@uref{http://0pointer.de/lennart/projects/nss-mdns/, nss-mdns}. Additionally,
10405add the @var{avahi} package to the system profile so that commands such as
10406@command{avahi-browse} are directly usable.
965a7332
LC
10407
10408If @var{host-name} is different from @code{#f}, use that as the host name to
10409publish for this machine; otherwise, use the machine's actual host name.
10410
10411When @var{publish?} is true, publishing of host names and services is allowed;
10412in particular, avahi-daemon will publish the machine's host name and IP
10413address via mDNS on the local network.
10414
10415When @var{wide-area?} is true, DNS-SD over unicast DNS is enabled.
10416
10417Boolean values @var{ipv4?} and @var{ipv6?} determine whether to use IPv4/IPv6
10418sockets.
10419@end deffn
10420
c32d02fe
SB
10421@deffn {Scheme Variable} openvswitch-service-type
10422This is the type of the @uref{http://www.openvswitch.org, Open vSwitch}
10423service, whose value should be an @code{openvswitch-configuration}
10424object.
10425@end deffn
10426
10427@deftp {Data Type} openvswitch-configuration
10428Data type representing the configuration of Open vSwitch, a multilayer
10429virtual switch which is designed to enable massive network automation
10430through programmatic extension.
10431
10432@table @asis
10433@item @code{package} (default: @var{openvswitch})
10434Package object of the Open vSwitch.
10435
10436@end table
10437@end deftp
965a7332 10438
cf4a9129
LC
10439@node X Window
10440@subsubsection X Window
68ad877c 10441
e32171ee
JD
10442@cindex X11
10443@cindex X Window System
cf4a9129
LC
10444Support for the X Window graphical display system---specifically
10445Xorg---is provided by the @code{(gnu services xorg)} module. Note that
10446there is no @code{xorg-service} procedure. Instead, the X server is
10447started by the @dfn{login manager}, currently SLiM.
4af2447e 10448
935644c0
DC
10449@deftp {Data Type} sddm-configuration
10450This is the data type representing the sddm service configuration.
10451
10452@table @asis
10453@item @code{display-server} (default: "x11")
10454Select display server to use for the greeter. Valid values are "x11"
10455or "wayland".
10456
10457@item @code{numlock} (default: "on")
10458Valid values are "on", "off" or "none".
10459
10460@item @code{halt-command} (default @code{#~(string-apppend #$shepherd "/sbin/halt")})
10461Command to run when halting.
10462
10463@item @code{reboot-command} (default @code{#~(string-append #$shepherd "/sbin/reboot")})
10464Command to run when rebooting.
10465
10466@item @code{theme} (default "maldives")
10467Theme to use. Default themes provided by SDDM are "elarun" or "maldives".
10468
10469@item @code{themes-directory} (default "/run/current-system/profile/share/sddm/themes")
10470Directory to look for themes.
10471
10472@item @code{faces-directory} (default "/run/current-system/profile/share/sddm/faces")
10473Directory to look for faces.
10474
10475@item @code{default-path} (default "/run/current-system/profile/bin")
10476Default PATH to use.
10477
10478@item @code{minimum-uid} (default 1000)
10479Minimum UID to display in SDDM.
10480
10481@item @code{maximum-uid} (default 2000)
10482Maximum UID to display in SDDM
10483
10484@item @code{remember-last-user?} (default #t)
10485Remember last user.
10486
10487@item @code{remember-last-session?} (default #t)
10488Remember last session.
10489
10490@item @code{hide-users} (default "")
10491Usernames to hide from SDDM greeter.
10492
10493@item @code{hide-shells} (default @code{#~(string-append #$shadow "/sbin/nologin")})
10494Users with shells listed will be hidden from the SDDM greeter.
10495
10496@item @code{session-command} (default @code{#~(string-append #$sddm "/share/sddm/scripts/wayland-session")})
10497Script to run before starting a wayland session.
10498
10499@item @code{sessions-directory} (default "/run/current-system/profile/share/wayland-sessions")
10500Directory to look for desktop files starting wayland sessions.
10501
10502@item @code{xorg-server-path} (default @code{xorg-start-command})
10503Path to xorg-server.
10504
10505@item @code{xauth-path} (default @code{#~(string-append #$xauth "/bin/xauth")})
10506Path to xauth.
10507
10508@item @code{xephyr-path} (default @code{#~(string-append #$xorg-server "/bin/Xephyr")})
10509Path to Xephyr.
10510
10511@item @code{xdisplay-start} (default @code{#~(string-append #$sddm "/share/sddm/scripts/Xsetup")})
10512Script to run after starting xorg-server.
10513
10514@item @code{xdisplay-stop} (default @code{#~(string-append #$sddm "/share/sddm/scripts/Xstop")})
10515Script to run before stopping xorg-server.
10516
10517@item @code{xsession-command} (default: @code{xinitr })
10518Script to run before starting a X session.
10519
10520@item @code{xsessions-directory} (default: "/run/current-system/profile/share/xsessions")
10521Directory to look for desktop files starting X sessions.
10522
10523@item @code{minimum-vt} (default: 7)
10524Minimum VT to use.
10525
10526@item @code{xserver-arguments} (default "-nolisten tcp")
10527Arguments to pass to xorg-server.
10528
10529@item @code{auto-login-user} (default "")
10530User to use for auto-login.
10531
10532@item @code{auto-login-session} (default "")
10533Desktop file to use for auto-login.
10534
10535@item @code{relogin?} (default #f)
10536Relogin after logout.
10537
10538@end table
10539@end deftp
10540
e32171ee 10541@cindex login manager
935644c0
DC
10542@deffn {Scheme Procedure} sddm-service config
10543Return a service that spawns the SDDM graphical login manager for config of
10544type @code{<sddm-configuration>}.
10545
10546@example
10547 (sddm-service (sddm-configuration
10548 (auto-login-user "Alice")
10549 (auto-login-session "xfce.desktop")))
10550@end example
10551@end deffn
10552
be1c2c54 10553@deffn {Scheme Procedure} slim-service [#:allow-empty-passwords? #f] @
0ecc3bf3
LC
10554 [#:auto-login? #f] [#:default-user ""] [#:startx] @
10555 [#:theme @var{%default-slim-theme}] @
4bd43bbe 10556 [#:theme-name @var{%default-slim-theme-name}]
cf4a9129
LC
10557Return a service that spawns the SLiM graphical login manager, which in
10558turn starts the X display server with @var{startx}, a command as returned by
10559@code{xorg-start-command}.
4af2447e 10560
04e4e6ab
LC
10561@cindex X session
10562
10563SLiM automatically looks for session types described by the @file{.desktop}
10564files in @file{/run/current-system/profile/share/xsessions} and allows users
10565to choose a session from the log-in screen using @kbd{F1}. Packages such as
10566@var{xfce}, @var{sawfish}, and @var{ratpoison} provide @file{.desktop} files;
10567adding them to the system-wide set of packages automatically makes them
10568available at the log-in screen.
10569
10570In addition, @file{~/.xsession} files are honored. When available,
10571@file{~/.xsession} must be an executable that starts a window manager
10572and/or other X clients.
10573
cf4a9129
LC
10574When @var{allow-empty-passwords?} is true, allow logins with an empty
10575password. When @var{auto-login?} is true, log in automatically as
10576@var{default-user}.
0ecc3bf3 10577
1068f26b 10578If @var{theme} is @code{#f}, use the default log-in theme; otherwise
0ecc3bf3
LC
10579@var{theme} must be a gexp denoting the name of a directory containing the
10580theme to use. In that case, @var{theme-name} specifies the name of the
10581theme.
cf4a9129 10582@end deffn
4af2447e 10583
0ecc3bf3
LC
10584@defvr {Scheme Variable} %default-theme
10585@defvrx {Scheme Variable} %default-theme-name
10586The G-Expression denoting the default SLiM theme and its name.
10587@end defvr
10588
be1c2c54 10589@deffn {Scheme Procedure} xorg-start-command [#:guile] @
d1cdd7ba 10590 [#:configuration-file #f] [#:xorg-server @var{xorg-server}]
f703413e 10591Return a derivation that builds a @var{guile} script to start the X server
d1cdd7ba
LC
10592from @var{xorg-server}. @var{configuration-file} is the server configuration
10593file or a derivation that builds it; when omitted, the result of
10594@code{xorg-configuration-file} is used.
10595
10596Usually the X server is started by a login manager.
10597@end deffn
10598
be1c2c54 10599@deffn {Scheme Procedure} xorg-configuration-file @
12422c9d 10600 [#:drivers '()] [#:resolutions '()] [#:extra-config '()]
d1cdd7ba
LC
10601Return a configuration file for the Xorg server containing search paths for
10602all the common drivers.
f703413e
LC
10603
10604@var{drivers} must be either the empty list, in which case Xorg chooses a
10605graphics driver automatically, or a list of driver names that will be tried in
d1cdd7ba 10606this order---e.g., @code{(\"modesetting\" \"vesa\")}.
d2e59637
LC
10607
10608Likewise, when @var{resolutions} is the empty list, Xorg chooses an
10609appropriate screen resolution; otherwise, it must be a list of
10610resolutions---e.g., @code{((1024 768) (640 480))}.
12422c9d
LC
10611
10612Last, @var{extra-config} is a list of strings or objects appended to the
10613@code{text-file*} argument list. It is used to pass extra text to be added
10614verbatim to the configuration file.
f703413e 10615@end deffn
4af2447e 10616
6726282b
LC
10617@deffn {Scheme Procedure} screen-locker-service @var{package} [@var{name}]
10618Add @var{package}, a package for a screen-locker or screen-saver whose
10619command is @var{program}, to the set of setuid programs and add a PAM entry
10620for it. For example:
10621
10622@lisp
10623(screen-locker-service xlockmore "xlock")
10624@end lisp
10625
10626makes the good ol' XlockMore usable.
10627@end deffn
10628
10629
f2ec23d1
AW
10630@node Printing Services
10631@subsubsection Printing Services
10632
de322a5d 10633@cindex printer support with CUPS
f2ec23d1
AW
10634The @code{(gnu services cups)} module provides a Guix service definition
10635for the CUPS printing service. To add printer support to a GuixSD
10636system, add a @code{cups-service} to the operating system definition:
10637
10638@deffn {Scheme Variable} cups-service-type
10639The service type for the CUPS print server. Its value should be a valid
3d3c5650
LC
10640CUPS configuration (see below). To use the default settings, simply
10641write:
f2ec23d1 10642@example
3d3c5650 10643(service cups-service-type)
f2ec23d1
AW
10644@end example
10645@end deffn
10646
10647The CUPS configuration controls the basic things about your CUPS
10648installation: what interfaces it listens on, what to do if a print job
10649fails, how much logging to do, and so on. To actually add a printer,
10650you have to visit the @url{http://localhost:631} URL, or use a tool such
10651as GNOME's printer configuration services. By default, configuring a
10652CUPS service will generate a self-signed certificate if needed, for
10653secure connections to the print server.
10654
de322a5d
LC
10655Suppose you want to enable the Web interface of CUPS and also add
10656support for HP printers @i{via} the @code{hplip} package. You can do
10657that directly, like this (you need to use the @code{(gnu packages cups)}
10658module):
f2ec23d1
AW
10659
10660@example
10661(service cups-service-type
10662 (cups-configuration
de322a5d
LC
10663 (web-interface? #t)
10664 (extensions
10665 (list cups-filters hplip))))
f2ec23d1
AW
10666@end example
10667
10668The available configuration parameters follow. Each parameter
10669definition is preceded by its type; for example, @samp{string-list foo}
10670indicates that the @code{foo} parameter should be specified as a list of
10671strings. There is also a way to specify the configuration as a string,
10672if you have an old @code{cupsd.conf} file that you want to port over
10673from some other system; see the end for more details.
10674
10675@c The following documentation was initially generated by
10676@c (generate-documentation) in (gnu services cups). Manually maintained
10677@c documentation is better, so we shouldn't hesitate to edit below as
10678@c needed. However if the change you want to make to this documentation
10679@c can be done in an automated way, it's probably easier to change
10680@c (generate-documentation) than to make it below and have to deal with
10681@c the churn as CUPS updates.
10682
10683
10684Available @code{cups-configuration} fields are:
10685
10686@deftypevr {@code{cups-configuration} parameter} package cups
10687The CUPS package.
10688@end deftypevr
10689
10690@deftypevr {@code{cups-configuration} parameter} package-list extensions
10691Drivers and other extensions to the CUPS package.
10692@end deftypevr
10693
10694@deftypevr {@code{cups-configuration} parameter} files-configuration files-configuration
10695Configuration of where to write logs, what directories to use for print
10696spools, and related privileged configuration parameters.
10697
10698Available @code{files-configuration} fields are:
10699
10700@deftypevr {@code{files-configuration} parameter} log-location access-log
10701Defines the access log filename. Specifying a blank filename disables
10702access log generation. The value @code{stderr} causes log entries to be
10703sent to the standard error file when the scheduler is running in the
10704foreground, or to the system log daemon when run in the background. The
10705value @code{syslog} causes log entries to be sent to the system log
10706daemon. The server name may be included in filenames using the string
10707@code{%s}, as in @code{/var/log/cups/%s-access_log}.
10708
10709Defaults to @samp{"/var/log/cups/access_log"}.
10710@end deftypevr
10711
10712@deftypevr {@code{files-configuration} parameter} file-name cache-dir
10713Where CUPS should cache data.
10714
10715Defaults to @samp{"/var/cache/cups"}.
10716@end deftypevr
10717
10718@deftypevr {@code{files-configuration} parameter} string config-file-perm
10719Specifies the permissions for all configuration files that the scheduler
10720writes.
10721
10722Note that the permissions for the printers.conf file are currently
10723masked to only allow access from the scheduler user (typically root).
10724This is done because printer device URIs sometimes contain sensitive
10725authentication information that should not be generally known on the
10726system. There is no way to disable this security feature.
10727
10728Defaults to @samp{"0640"}.
10729@end deftypevr
10730
10731@deftypevr {@code{files-configuration} parameter} log-location error-log
10732Defines the error log filename. Specifying a blank filename disables
10733access log generation. The value @code{stderr} causes log entries to be
10734sent to the standard error file when the scheduler is running in the
10735foreground, or to the system log daemon when run in the background. The
10736value @code{syslog} causes log entries to be sent to the system log
10737daemon. The server name may be included in filenames using the string
10738@code{%s}, as in @code{/var/log/cups/%s-error_log}.
10739
10740Defaults to @samp{"/var/log/cups/error_log"}.
10741@end deftypevr
10742
10743@deftypevr {@code{files-configuration} parameter} string fatal-errors
10744Specifies which errors are fatal, causing the scheduler to exit. The
10745kind strings are:
10746
10747@table @code
10748@item none
10749No errors are fatal.
10750
10751@item all
10752All of the errors below are fatal.
10753
10754@item browse
10755Browsing initialization errors are fatal, for example failed connections
10756to the DNS-SD daemon.
10757
10758@item config
10759Configuration file syntax errors are fatal.
10760
10761@item listen
10762Listen or Port errors are fatal, except for IPv6 failures on the
10763loopback or @code{any} addresses.
10764
10765@item log
10766Log file creation or write errors are fatal.
10767
10768@item permissions
10769Bad startup file permissions are fatal, for example shared TLS
10770certificate and key files with world-read permissions.
10771@end table
10772
10773Defaults to @samp{"all -browse"}.
10774@end deftypevr
10775
10776@deftypevr {@code{files-configuration} parameter} boolean file-device?
10777Specifies whether the file pseudo-device can be used for new printer
10778queues. The URI @uref{file:///dev/null} is always allowed.
10779
10780Defaults to @samp{#f}.
10781@end deftypevr
10782
10783@deftypevr {@code{files-configuration} parameter} string group
10784Specifies the group name or ID that will be used when executing external
10785programs.
10786
10787Defaults to @samp{"lp"}.
10788@end deftypevr
10789
10790@deftypevr {@code{files-configuration} parameter} string log-file-perm
10791Specifies the permissions for all log files that the scheduler writes.
10792
10793Defaults to @samp{"0644"}.
10794@end deftypevr
10795
10796@deftypevr {@code{files-configuration} parameter} log-location page-log
10797Defines the page log filename. Specifying a blank filename disables
10798access log generation. The value @code{stderr} causes log entries to be
10799sent to the standard error file when the scheduler is running in the
10800foreground, or to the system log daemon when run in the background. The
10801value @code{syslog} causes log entries to be sent to the system log
10802daemon. The server name may be included in filenames using the string
10803@code{%s}, as in @code{/var/log/cups/%s-page_log}.
10804
10805Defaults to @samp{"/var/log/cups/page_log"}.
10806@end deftypevr
10807
10808@deftypevr {@code{files-configuration} parameter} string remote-root
10809Specifies the username that is associated with unauthenticated accesses
10810by clients claiming to be the root user. The default is @code{remroot}.
10811
10812Defaults to @samp{"remroot"}.
10813@end deftypevr
10814
10815@deftypevr {@code{files-configuration} parameter} file-name request-root
10816Specifies the directory that contains print jobs and other HTTP request
10817data.
10818
10819Defaults to @samp{"/var/spool/cups"}.
10820@end deftypevr
10821
10822@deftypevr {@code{files-configuration} parameter} sandboxing sandboxing
10823Specifies the level of security sandboxing that is applied to print
10824filters, backends, and other child processes of the scheduler; either
10825@code{relaxed} or @code{strict}. This directive is currently only
10826used/supported on macOS.
10827
10828Defaults to @samp{strict}.
10829@end deftypevr
10830
10831@deftypevr {@code{files-configuration} parameter} file-name server-keychain
10832Specifies the location of TLS certificates and private keys. CUPS will
10833look for public and private keys in this directory: a @code{.crt} files
10834for PEM-encoded certificates and corresponding @code{.key} files for
10835PEM-encoded private keys.
10836
10837Defaults to @samp{"/etc/cups/ssl"}.
10838@end deftypevr
10839
10840@deftypevr {@code{files-configuration} parameter} file-name server-root
10841Specifies the directory containing the server configuration files.
10842
10843Defaults to @samp{"/etc/cups"}.
10844@end deftypevr
10845
10846@deftypevr {@code{files-configuration} parameter} boolean sync-on-close?
10847Specifies whether the scheduler calls fsync(2) after writing
10848configuration or state files.
10849
10850Defaults to @samp{#f}.
10851@end deftypevr
10852
10853@deftypevr {@code{files-configuration} parameter} space-separated-string-list system-group
10854Specifies the group(s) to use for @code{@@SYSTEM} group authentication.
10855@end deftypevr
10856
10857@deftypevr {@code{files-configuration} parameter} file-name temp-dir
10858Specifies the directory where temporary files are stored.
10859
10860Defaults to @samp{"/var/spool/cups/tmp"}.
10861@end deftypevr
10862
10863@deftypevr {@code{files-configuration} parameter} string user
10864Specifies the user name or ID that is used when running external
10865programs.
10866
10867Defaults to @samp{"lp"}.
10868@end deftypevr
10869@end deftypevr
10870
10871@deftypevr {@code{cups-configuration} parameter} access-log-level access-log-level
10872Specifies the logging level for the AccessLog file. The @code{config}
10873level logs when printers and classes are added, deleted, or modified and
10874when configuration files are accessed or updated. The @code{actions}
10875level logs when print jobs are submitted, held, released, modified, or
10876canceled, and any of the conditions for @code{config}. The @code{all}
10877level logs all requests.
10878
10879Defaults to @samp{actions}.
10880@end deftypevr
10881
10882@deftypevr {@code{cups-configuration} parameter} boolean auto-purge-jobs?
10883Specifies whether to purge job history data automatically when it is no
10884longer required for quotas.
10885
10886Defaults to @samp{#f}.
10887@end deftypevr
10888
10889@deftypevr {@code{cups-configuration} parameter} browse-local-protocols browse-local-protocols
10890Specifies which protocols to use for local printer sharing.
10891
10892Defaults to @samp{dnssd}.
10893@end deftypevr
10894
10895@deftypevr {@code{cups-configuration} parameter} boolean browse-web-if?
10896Specifies whether the CUPS web interface is advertised.
10897
10898Defaults to @samp{#f}.
10899@end deftypevr
10900
10901@deftypevr {@code{cups-configuration} parameter} boolean browsing?
10902Specifies whether shared printers are advertised.
10903
10904Defaults to @samp{#f}.
10905@end deftypevr
10906
10907@deftypevr {@code{cups-configuration} parameter} string classification
10908Specifies the security classification of the server. Any valid banner
10909name can be used, including "classified", "confidential", "secret",
10910"topsecret", and "unclassified", or the banner can be omitted to disable
10911secure printing functions.
10912
10913Defaults to @samp{""}.
10914@end deftypevr
10915
10916@deftypevr {@code{cups-configuration} parameter} boolean classify-override?
10917Specifies whether users may override the classification (cover page) of
10918individual print jobs using the @code{job-sheets} option.
10919
10920Defaults to @samp{#f}.
10921@end deftypevr
10922
10923@deftypevr {@code{cups-configuration} parameter} default-auth-type default-auth-type
10924Specifies the default type of authentication to use.
10925
10926Defaults to @samp{Basic}.
10927@end deftypevr
10928
10929@deftypevr {@code{cups-configuration} parameter} default-encryption default-encryption
10930Specifies whether encryption will be used for authenticated requests.
10931
10932Defaults to @samp{Required}.
10933@end deftypevr
10934
10935@deftypevr {@code{cups-configuration} parameter} string default-language
10936Specifies the default language to use for text and web content.
10937
10938Defaults to @samp{"en"}.
10939@end deftypevr
10940
10941@deftypevr {@code{cups-configuration} parameter} string default-paper-size
10942Specifies the default paper size for new print queues. @samp{"Auto"}
10943uses a locale-specific default, while @samp{"None"} specifies there is
10944no default paper size. Specific size names are typically
10945@samp{"Letter"} or @samp{"A4"}.
10946
10947Defaults to @samp{"Auto"}.
10948@end deftypevr
10949
10950@deftypevr {@code{cups-configuration} parameter} string default-policy
10951Specifies the default access policy to use.
10952
10953Defaults to @samp{"default"}.
10954@end deftypevr
10955
10956@deftypevr {@code{cups-configuration} parameter} boolean default-shared?
10957Specifies whether local printers are shared by default.
10958
10959Defaults to @samp{#t}.
10960@end deftypevr
10961
10962@deftypevr {@code{cups-configuration} parameter} non-negative-integer dirty-clean-interval
10963Specifies the delay for updating of configuration and state files, in
10964seconds. A value of 0 causes the update to happen as soon as possible,
10965typically within a few milliseconds.
10966
10967Defaults to @samp{30}.
10968@end deftypevr
10969
10970@deftypevr {@code{cups-configuration} parameter} error-policy error-policy
10971Specifies what to do when an error occurs. Possible values are
10972@code{abort-job}, which will discard the failed print job;
10973@code{retry-job}, which will retry the job at a later time;
10974@code{retry-this-job}, which retries the failed job immediately; and
10975@code{stop-printer}, which stops the printer.
10976
10977Defaults to @samp{stop-printer}.
10978@end deftypevr
10979
10980@deftypevr {@code{cups-configuration} parameter} non-negative-integer filter-limit
10981Specifies the maximum cost of filters that are run concurrently, which
10982can be used to minimize disk, memory, and CPU resource problems. A
10983limit of 0 disables filter limiting. An average print to a
10984non-PostScript printer needs a filter limit of about 200. A PostScript
10985printer needs about half that (100). Setting the limit below these
10986thresholds will effectively limit the scheduler to printing a single job
10987at any time.
10988
10989Defaults to @samp{0}.
10990@end deftypevr
10991
10992@deftypevr {@code{cups-configuration} parameter} non-negative-integer filter-nice
10993Specifies the scheduling priority of filters that are run to print a
10994job. The nice value ranges from 0, the highest priority, to 19, the
10995lowest priority.
10996
10997Defaults to @samp{0}.
10998@end deftypevr
10999
11000@deftypevr {@code{cups-configuration} parameter} host-name-lookups host-name-lookups
11001Specifies whether to do reverse lookups on connecting clients. The
11002@code{double} setting causes @code{cupsd} to verify that the hostname
11003resolved from the address matches one of the addresses returned for that
11004hostname. Double lookups also prevent clients with unregistered
11005addresses from connecting to your server. Only set this option to
11006@code{#t} or @code{double} if absolutely required.
11007
11008Defaults to @samp{#f}.
11009@end deftypevr
11010
11011@deftypevr {@code{cups-configuration} parameter} non-negative-integer job-kill-delay
11012Specifies the number of seconds to wait before killing the filters and
11013backend associated with a canceled or held job.
11014
11015Defaults to @samp{30}.
11016@end deftypevr
11017
11018@deftypevr {@code{cups-configuration} parameter} non-negative-integer job-retry-interval
11019Specifies the interval between retries of jobs in seconds. This is
11020typically used for fax queues but can also be used with normal print
11021queues whose error policy is @code{retry-job} or
11022@code{retry-current-job}.
11023
11024Defaults to @samp{30}.
11025@end deftypevr
11026
11027@deftypevr {@code{cups-configuration} parameter} non-negative-integer job-retry-limit
11028Specifies the number of retries that are done for jobs. This is
11029typically used for fax queues but can also be used with normal print
11030queues whose error policy is @code{retry-job} or
11031@code{retry-current-job}.
11032
11033Defaults to @samp{5}.
11034@end deftypevr
11035
11036@deftypevr {@code{cups-configuration} parameter} boolean keep-alive?
11037Specifies whether to support HTTP keep-alive connections.
11038
11039Defaults to @samp{#t}.
11040@end deftypevr
11041
11042@deftypevr {@code{cups-configuration} parameter} non-negative-integer keep-alive-timeout
11043Specifies how long an idle client connection remains open, in seconds.
11044
11045Defaults to @samp{30}.
11046@end deftypevr
11047
11048@deftypevr {@code{cups-configuration} parameter} non-negative-integer limit-request-body
11049Specifies the maximum size of print files, IPP requests, and HTML form
11050data. A limit of 0 disables the limit check.
11051
11052Defaults to @samp{0}.
11053@end deftypevr
11054
11055@deftypevr {@code{cups-configuration} parameter} multiline-string-list listen
11056Listens on the specified interfaces for connections. Valid values are
11057of the form @var{address}:@var{port}, where @var{address} is either an
11058IPv6 address enclosed in brackets, an IPv4 address, or @code{*} to
11059indicate all addresses. Values can also be file names of local UNIX
11060domain sockets. The Listen directive is similar to the Port directive
11061but allows you to restrict access to specific interfaces or networks.
11062@end deftypevr
11063
11064@deftypevr {@code{cups-configuration} parameter} non-negative-integer listen-back-log
11065Specifies the number of pending connections that will be allowed. This
11066normally only affects very busy servers that have reached the MaxClients
11067limit, but can also be triggered by large numbers of simultaneous
11068connections. When the limit is reached, the operating system will
11069refuse additional connections until the scheduler can accept the pending
11070ones.
11071
11072Defaults to @samp{128}.
11073@end deftypevr
11074
11075@deftypevr {@code{cups-configuration} parameter} location-access-control-list location-access-controls
11076Specifies a set of additional access controls.
11077
11078Available @code{location-access-controls} fields are:
11079
11080@deftypevr {@code{location-access-controls} parameter} file-name path
11081Specifies the URI path to which the access control applies.
11082@end deftypevr
11083
11084@deftypevr {@code{location-access-controls} parameter} access-control-list access-controls
11085Access controls for all access to this path, in the same format as the
11086@code{access-controls} of @code{operation-access-control}.
11087
11088Defaults to @samp{()}.
11089@end deftypevr
11090
11091@deftypevr {@code{location-access-controls} parameter} method-access-control-list method-access-controls
11092Access controls for method-specific access to this path.
11093
11094Defaults to @samp{()}.
11095
11096Available @code{method-access-controls} fields are:
11097
11098@deftypevr {@code{method-access-controls} parameter} boolean reverse?
11099If @code{#t}, apply access controls to all methods except the listed
11100methods. Otherwise apply to only the listed methods.
11101
11102Defaults to @samp{#f}.
11103@end deftypevr
11104
11105@deftypevr {@code{method-access-controls} parameter} method-list methods
11106Methods to which this access control applies.
11107
11108Defaults to @samp{()}.
11109@end deftypevr
11110
11111@deftypevr {@code{method-access-controls} parameter} access-control-list access-controls
11112Access control directives, as a list of strings. Each string should be
11113one directive, such as "Order allow,deny".
11114
11115Defaults to @samp{()}.
11116@end deftypevr
11117@end deftypevr
11118@end deftypevr
11119
11120@deftypevr {@code{cups-configuration} parameter} non-negative-integer log-debug-history
11121Specifies the number of debugging messages that are retained for logging
11122if an error occurs in a print job. Debug messages are logged regardless
11123of the LogLevel setting.
11124
11125Defaults to @samp{100}.
11126@end deftypevr
11127
11128@deftypevr {@code{cups-configuration} parameter} log-level log-level
11129Specifies the level of logging for the ErrorLog file. The value
11130@code{none} stops all logging while @code{debug2} logs everything.
11131
11132Defaults to @samp{info}.
11133@end deftypevr
11134
11135@deftypevr {@code{cups-configuration} parameter} log-time-format log-time-format
11136Specifies the format of the date and time in the log files. The value
11137@code{standard} logs whole seconds while @code{usecs} logs microseconds.
11138
11139Defaults to @samp{standard}.
11140@end deftypevr
11141
11142@deftypevr {@code{cups-configuration} parameter} non-negative-integer max-clients
11143Specifies the maximum number of simultaneous clients that are allowed by
11144the scheduler.
11145
11146Defaults to @samp{100}.
11147@end deftypevr
11148
11149@deftypevr {@code{cups-configuration} parameter} non-negative-integer max-clients-per-host
11150Specifies the maximum number of simultaneous clients that are allowed
11151from a single address.
11152
11153Defaults to @samp{100}.
11154@end deftypevr
11155
11156@deftypevr {@code{cups-configuration} parameter} non-negative-integer max-copies
11157Specifies the maximum number of copies that a user can print of each
11158job.
11159
11160Defaults to @samp{9999}.
11161@end deftypevr
11162
11163@deftypevr {@code{cups-configuration} parameter} non-negative-integer max-hold-time
11164Specifies the maximum time a job may remain in the @code{indefinite}
11165hold state before it is canceled. A value of 0 disables cancellation of
11166held jobs.
11167
11168Defaults to @samp{0}.
11169@end deftypevr
11170
11171@deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs
11172Specifies the maximum number of simultaneous jobs that are allowed. Set
11173to 0 to allow an unlimited number of jobs.
11174
11175Defaults to @samp{500}.
11176@end deftypevr
11177
11178@deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs-per-printer
11179Specifies the maximum number of simultaneous jobs that are allowed per
11180printer. A value of 0 allows up to MaxJobs jobs per printer.
11181
11182Defaults to @samp{0}.
11183@end deftypevr
11184
11185@deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs-per-user
11186Specifies the maximum number of simultaneous jobs that are allowed per
11187user. A value of 0 allows up to MaxJobs jobs per user.
11188
11189Defaults to @samp{0}.
11190@end deftypevr
11191
11192@deftypevr {@code{cups-configuration} parameter} non-negative-integer max-job-time
11193Specifies the maximum time a job may take to print before it is
11194canceled, in seconds. Set to 0 to disable cancellation of "stuck" jobs.
11195
11196Defaults to @samp{10800}.
11197@end deftypevr
11198
11199@deftypevr {@code{cups-configuration} parameter} non-negative-integer max-log-size
11200Specifies the maximum size of the log files before they are rotated, in
11201bytes. The value 0 disables log rotation.
11202
11203Defaults to @samp{1048576}.
11204@end deftypevr
11205
11206@deftypevr {@code{cups-configuration} parameter} non-negative-integer multiple-operation-timeout
11207Specifies the maximum amount of time to allow between files in a
11208multiple file print job, in seconds.
11209
11210Defaults to @samp{300}.
11211@end deftypevr
11212
11213@deftypevr {@code{cups-configuration} parameter} string page-log-format
11214Specifies the format of PageLog lines. Sequences beginning with percent
11215(@samp{%}) characters are replaced with the corresponding information,
11216while all other characters are copied literally. The following percent
11217sequences are recognized:
11218
11219@table @samp
11220@item %%
11221insert a single percent character
11222
11223@item %@{name@}
11224insert the value of the specified IPP attribute
11225
11226@item %C
11227insert the number of copies for the current page
11228
11229@item %P
11230insert the current page number
11231
11232@item %T
11233insert the current date and time in common log format
11234
11235@item %j
11236insert the job ID
11237
11238@item %p
11239insert the printer name
11240
11241@item %u
11242insert the username
11243@end table
11244
11245A value of the empty string disables page logging. The string @code{%p
11246%u %j %T %P %C %@{job-billing@} %@{job-originating-host-name@}
11247%@{job-name@} %@{media@} %@{sides@}} creates a page log with the
11248standard items.
11249
11250Defaults to @samp{""}.
11251@end deftypevr
11252
11253@deftypevr {@code{cups-configuration} parameter} environment-variables environment-variables
11254Passes the specified environment variable(s) to child processes; a list
11255of strings.
11256
11257Defaults to @samp{()}.
11258@end deftypevr
11259
11260@deftypevr {@code{cups-configuration} parameter} policy-configuration-list policies
11261Specifies named access control policies.
11262
11263Available @code{policy-configuration} fields are:
11264
11265@deftypevr {@code{policy-configuration} parameter} string name
11266Name of the policy.
11267@end deftypevr
11268
11269@deftypevr {@code{policy-configuration} parameter} string job-private-access
11270Specifies an access list for a job's private values. @code{@@ACL} maps
11271to the printer's requesting-user-name-allowed or
11272requesting-user-name-denied values. @code{@@OWNER} maps to the job's
11273owner. @code{@@SYSTEM} maps to the groups listed for the
11274@code{system-group} field of the @code{files-config} configuration,
11275which is reified into the @code{cups-files.conf(5)} file. Other
11276possible elements of the access list include specific user names, and
11277@code{@@@var{group}} to indicate members of a specific group. The
11278access list may also be simply @code{all} or @code{default}.
11279
11280Defaults to @samp{"@@OWNER @@SYSTEM"}.
11281@end deftypevr
11282
11283@deftypevr {@code{policy-configuration} parameter} string job-private-values
11284Specifies the list of job values to make private, or @code{all},
11285@code{default}, or @code{none}.
11286
11287Defaults to @samp{"job-name job-originating-host-name
11288job-originating-user-name phone"}.
11289@end deftypevr
11290
11291@deftypevr {@code{policy-configuration} parameter} string subscription-private-access
11292Specifies an access list for a subscription's private values.
11293@code{@@ACL} maps to the printer's requesting-user-name-allowed or
11294requesting-user-name-denied values. @code{@@OWNER} maps to the job's
11295owner. @code{@@SYSTEM} maps to the groups listed for the
11296@code{system-group} field of the @code{files-config} configuration,
11297which is reified into the @code{cups-files.conf(5)} file. Other
11298possible elements of the access list include specific user names, and
11299@code{@@@var{group}} to indicate members of a specific group. The
11300access list may also be simply @code{all} or @code{default}.
11301
11302Defaults to @samp{"@@OWNER @@SYSTEM"}.
11303@end deftypevr
11304
11305@deftypevr {@code{policy-configuration} parameter} string subscription-private-values
11306Specifies the list of job values to make private, or @code{all},
11307@code{default}, or @code{none}.
11308
11309Defaults to @samp{"notify-events notify-pull-method notify-recipient-uri
11310notify-subscriber-user-name notify-user-data"}.
11311@end deftypevr
11312
11313@deftypevr {@code{policy-configuration} parameter} operation-access-control-list access-controls
11314Access control by IPP operation.
11315
11316Defaults to @samp{()}.
11317@end deftypevr
11318@end deftypevr
11319
11320@deftypevr {@code{cups-configuration} parameter} boolean-or-non-negative-integer preserve-job-files
11321Specifies whether job files (documents) are preserved after a job is
11322printed. If a numeric value is specified, job files are preserved for
11323the indicated number of seconds after printing. Otherwise a boolean
11324value applies indefinitely.
11325
11326Defaults to @samp{86400}.
11327@end deftypevr
11328
11329@deftypevr {@code{cups-configuration} parameter} boolean-or-non-negative-integer preserve-job-history
11330Specifies whether the job history is preserved after a job is printed.
11331If a numeric value is specified, the job history is preserved for the
11332indicated number of seconds after printing. If @code{#t}, the job
11333history is preserved until the MaxJobs limit is reached.
11334
11335Defaults to @samp{#t}.
11336@end deftypevr
11337
11338@deftypevr {@code{cups-configuration} parameter} non-negative-integer reload-timeout
11339Specifies the amount of time to wait for job completion before
11340restarting the scheduler.
11341
11342Defaults to @samp{30}.
11343@end deftypevr
11344
11345@deftypevr {@code{cups-configuration} parameter} string rip-cache
11346Specifies the maximum amount of memory to use when converting documents
11347into bitmaps for a printer.
11348
11349Defaults to @samp{"128m"}.
11350@end deftypevr
11351
11352@deftypevr {@code{cups-configuration} parameter} string server-admin
11353Specifies the email address of the server administrator.
11354
11355Defaults to @samp{"root@@localhost.localdomain"}.
11356@end deftypevr
11357
11358@deftypevr {@code{cups-configuration} parameter} host-name-list-or-* server-alias
11359The ServerAlias directive is used for HTTP Host header validation when
11360clients connect to the scheduler from external interfaces. Using the
11361special name @code{*} can expose your system to known browser-based DNS
11362rebinding attacks, even when accessing sites through a firewall. If the
11363auto-discovery of alternate names does not work, we recommend listing
11364each alternate name with a ServerAlias directive instead of using
11365@code{*}.
11366
11367Defaults to @samp{*}.
11368@end deftypevr
11369
11370@deftypevr {@code{cups-configuration} parameter} string server-name
11371Specifies the fully-qualified host name of the server.
11372
11373Defaults to @samp{"localhost"}.
11374@end deftypevr
11375
11376@deftypevr {@code{cups-configuration} parameter} server-tokens server-tokens
11377Specifies what information is included in the Server header of HTTP
11378responses. @code{None} disables the Server header. @code{ProductOnly}
11379reports @code{CUPS}. @code{Major} reports @code{CUPS 2}. @code{Minor}
11380reports @code{CUPS 2.0}. @code{Minimal} reports @code{CUPS 2.0.0}.
11381@code{OS} reports @code{CUPS 2.0.0 (@var{uname})} where @var{uname} is
11382the output of the @code{uname} command. @code{Full} reports @code{CUPS
113832.0.0 (@var{uname}) IPP/2.0}.
11384
11385Defaults to @samp{Minimal}.
11386@end deftypevr
11387
11388@deftypevr {@code{cups-configuration} parameter} string set-env
11389Set the specified environment variable to be passed to child processes.
11390
11391Defaults to @samp{"variable value"}.
11392@end deftypevr
11393
11394@deftypevr {@code{cups-configuration} parameter} multiline-string-list ssl-listen
11395Listens on the specified interfaces for encrypted connections. Valid
11396values are of the form @var{address}:@var{port}, where @var{address} is
11397either an IPv6 address enclosed in brackets, an IPv4 address, or
11398@code{*} to indicate all addresses.
11399
11400Defaults to @samp{()}.
11401@end deftypevr
11402
11403@deftypevr {@code{cups-configuration} parameter} ssl-options ssl-options
11404Sets encryption options. By default, CUPS only supports encryption
11405using TLS v1.0 or higher using known secure cipher suites. The
11406@code{AllowRC4} option enables the 128-bit RC4 cipher suites, which are
11407required for some older clients that do not implement newer ones. The
11408@code{AllowSSL3} option enables SSL v3.0, which is required for some
11409older clients that do not support TLS v1.0.
11410
11411Defaults to @samp{()}.
11412@end deftypevr
11413
11414@deftypevr {@code{cups-configuration} parameter} boolean strict-conformance?
11415Specifies whether the scheduler requires clients to strictly adhere to
11416the IPP specifications.
11417
11418Defaults to @samp{#f}.
11419@end deftypevr
11420
11421@deftypevr {@code{cups-configuration} parameter} non-negative-integer timeout
11422Specifies the HTTP request timeout, in seconds.
11423
11424Defaults to @samp{300}.
11425
11426@end deftypevr
11427
11428@deftypevr {@code{cups-configuration} parameter} boolean web-interface?
11429Specifies whether the web interface is enabled.
11430
11431Defaults to @samp{#f}.
11432@end deftypevr
11433
11434At this point you're probably thinking ``oh dear, Guix manual, I like
11435you but you can stop already with the configuration options''. Indeed.
11436However, one more point: it could be that you have an existing
11437@code{cupsd.conf} that you want to use. In that case, you can pass an
11438@code{opaque-cups-configuration} as the configuration of a
11439@code{cups-service-type}.
11440
11441Available @code{opaque-cups-configuration} fields are:
11442
11443@deftypevr {@code{opaque-cups-configuration} parameter} package cups
11444The CUPS package.
11445@end deftypevr
11446
11447@deftypevr {@code{opaque-cups-configuration} parameter} string cupsd.conf
11448The contents of the @code{cupsd.conf}, as a string.
11449@end deftypevr
11450
11451@deftypevr {@code{opaque-cups-configuration} parameter} string cups-files.conf
11452The contents of the @code{cups-files.conf} file, as a string.
11453@end deftypevr
11454
11455For example, if your @code{cupsd.conf} and @code{cups-files.conf} are in
11456strings of the same name, you could instantiate a CUPS service like
11457this:
11458
11459@example
11460(service cups-service-type
11461 (opaque-cups-configuration
11462 (cupsd.conf cupsd.conf)
11463 (cups-files.conf cups-files.conf)))
11464@end example
11465
11466
fe1a39d3
LC
11467@node Desktop Services
11468@subsubsection Desktop Services
aa4ed923 11469
fe1a39d3
LC
11470The @code{(gnu services desktop)} module provides services that are
11471usually useful in the context of a ``desktop'' setup---that is, on a
11472machine running a graphical display server, possibly with graphical user
7a2413e4
AW
11473interfaces, etc. It also defines services that provide specific desktop
11474environments like GNOME and XFCE.
aa4ed923 11475
4467be21
LC
11476To simplify things, the module defines a variable containing the set of
11477services that users typically expect on a machine with a graphical
11478environment and networking:
11479
11480@defvr {Scheme Variable} %desktop-services
11481This is a list of services that builds upon @var{%base-services} and
1068f26b 11482adds or adjusts services for a typical ``desktop'' setup.
4467be21
LC
11483
11484In particular, it adds a graphical login manager (@pxref{X Window,
6726282b
LC
11485@code{slim-service}}), screen lockers,
11486a network management tool (@pxref{Networking
4467be21 11487Services, @code{wicd-service}}), energy and color management services,
4650a77e 11488the @code{elogind} login and seat manager, the Polkit privilege service,
cee32ee4
AW
11489the GeoClue location service, an NTP client (@pxref{Networking
11490Services}), the Avahi daemon, and has the name service switch service
11491configured to be able to use @code{nss-mdns} (@pxref{Name Service
11492Switch, mDNS}).
4467be21
LC
11493@end defvr
11494
11495The @var{%desktop-services} variable can be used as the @code{services}
11496field of an @code{operating-system} declaration (@pxref{operating-system
11497Reference, @code{services}}).
11498
7a2413e4
AW
11499Additionally, the @code{gnome-desktop-service} and
11500@code{xfce-desktop-service} procedures can add GNOME and/or XFCE to a
11501system. To ``add GNOME'' means that system-level services like the
11502backlight adjustment helpers and the power management utilities are
11503added to the system, extending @code{polkit} and @code{dbus}
11504appropriately, allowing GNOME to operate with elevated privileges on a
11505limited number of special-purpose system interfaces. Additionally,
11506adding a service made by @code{gnome-desktop-service} adds the GNOME
11507metapackage to the system profile. Likewise, adding the XFCE service
11508not only adds the @code{xfce} metapackage to the system profile, but it
11509also gives the Thunar file manager the ability to open a ``root-mode''
11510file management window, if the user authenticates using the
11511administrator's password via the standard polkit graphical interface.
11512
11513@deffn {Scheme Procedure} gnome-desktop-service
11514Return a service that adds the @code{gnome} package to the system
11515profile, and extends polkit with the actions from
11516@code{gnome-settings-daemon}.
11517@end deffn
11518
11519@deffn {Scheme Procedure} xfce-desktop-service
11520Return a service that adds the @code{xfce} package to the system profile,
5741e3e5 11521and extends polkit with the ability for @code{thunar} to manipulate the
7a2413e4
AW
11522file system as root from within a user session, after the user has
11523authenticated with the administrator's password.
11524@end deffn
11525
11526Because the GNOME and XFCE desktop services pull in so many packages,
11527the default @code{%desktop-services} variable doesn't include either of
11528them by default. To add GNOME or XFCE, just @code{cons} them onto
11529@code{%desktop-services} in the @code{services} field of your
11530@code{operating-system}:
11531
11532@example
11533(use-modules (gnu))
11534(use-service-modules desktop)
11535(operating-system
11536 ...
11537 ;; cons* adds items to the list given as its last argument.
11538 (services (cons* (gnome-desktop-service)
11539 (xfce-desktop-service)
11540 %desktop-services))
11541 ...)
11542@end example
11543
11544These desktop environments will then be available as options in the
11545graphical login window.
11546
11547The actual service definitions included in @code{%desktop-services} and
11548provided by @code{(gnu services dbus)} and @code{(gnu services desktop)}
11549are described below.
4467be21 11550
0adfe95a 11551@deffn {Scheme Procedure} dbus-service [#:dbus @var{dbus}] [#:services '()]
fe1a39d3
LC
11552Return a service that runs the ``system bus'', using @var{dbus}, with
11553support for @var{services}.
aa4ed923 11554
fe1a39d3
LC
11555@uref{http://dbus.freedesktop.org/, D-Bus} is an inter-process communication
11556facility. Its system bus is used to allow system services to communicate
1068f26b 11557and to be notified of system-wide events.
aa4ed923 11558
fe1a39d3
LC
11559@var{services} must be a list of packages that provide an
11560@file{etc/dbus-1/system.d} directory containing additional D-Bus configuration
11561and policy files. For example, to allow avahi-daemon to use the system bus,
11562@var{services} must be equal to @code{(list avahi)}.
aa4ed923
AK
11563@end deffn
11564
0adfe95a 11565@deffn {Scheme Procedure} elogind-service [#:config @var{config}]
4650a77e
AW
11566Return a service that runs the @code{elogind} login and
11567seat management daemon. @uref{https://github.com/andywingo/elogind,
11568Elogind} exposes a D-Bus interface that can be used to know which users
11569are logged in, know what kind of sessions they have open, suspend the
11570system, inhibit system suspend, reboot the system, and other tasks.
11571
11572Elogind handles most system-level power events for a computer, for
11573example suspending the system when a lid is closed, or shutting it down
11574when the power button is pressed.
11575
11576The @var{config} keyword argument specifies the configuration for
1068f26b 11577elogind, and should be the result of an @code{(elogind-configuration
4650a77e
AW
11578(@var{parameter} @var{value})...)} invocation. Available parameters and
11579their default values are:
11580
11581@table @code
11582@item kill-user-processes?
11583@code{#f}
11584@item kill-only-users
11585@code{()}
11586@item kill-exclude-users
11587@code{("root")}
11588@item inhibit-delay-max-seconds
11589@code{5}
11590@item handle-power-key
11591@code{poweroff}
11592@item handle-suspend-key
11593@code{suspend}
11594@item handle-hibernate-key
11595@code{hibernate}
11596@item handle-lid-switch
11597@code{suspend}
11598@item handle-lid-switch-docked
11599@code{ignore}
11600@item power-key-ignore-inhibited?
11601@code{#f}
11602@item suspend-key-ignore-inhibited?
11603@code{#f}
11604@item hibernate-key-ignore-inhibited?
11605@code{#f}
11606@item lid-switch-ignore-inhibited?
11607@code{#t}
11608@item holdoff-timeout-seconds
11609@code{30}
11610@item idle-action
11611@code{ignore}
11612@item idle-action-seconds
11613@code{(* 30 60)}
11614@item runtime-directory-size-percent
11615@code{10}
11616@item runtime-directory-size
11617@code{#f}
11618@item remove-ipc?
11619@code{#t}
11620@item suspend-state
11621@code{("mem" "standby" "freeze")}
11622@item suspend-mode
11623@code{()}
11624@item hibernate-state
11625@code{("disk")}
11626@item hibernate-mode
11627@code{("platform" "shutdown")}
11628@item hybrid-sleep-state
11629@code{("disk")}
11630@item hybrid-sleep-mode
11631@code{("suspend" "platform" "shutdown")}
11632@end table
11633@end deffn
11634
be1c2c54 11635@deffn {Scheme Procedure} polkit-service @
4650a77e 11636 [#:polkit @var{polkit}]
222e3319
LC
11637Return a service that runs the
11638@uref{http://www.freedesktop.org/wiki/Software/polkit/, Polkit privilege
11639management service}, which allows system administrators to grant access to
11640privileged operations in a structured way. By querying the Polkit service, a
11641privileged system component can know when it should grant additional
11642capabilities to ordinary users. For example, an ordinary user can be granted
11643the capability to suspend the system if the user is logged in locally.
4650a77e
AW
11644@end deffn
11645
be1c2c54 11646@deffn {Scheme Procedure} upower-service [#:upower @var{upower}] @
be234128
AW
11647 [#:watts-up-pro? #f] @
11648 [#:poll-batteries? #t] @
11649 [#:ignore-lid? #f] @
11650 [#:use-percentage-for-policy? #f] @
11651 [#:percentage-low 10] @
11652 [#:percentage-critical 3] @
11653 [#:percentage-action 2] @
11654 [#:time-low 1200] @
11655 [#:time-critical 300] @
11656 [#:time-action 120] @
11657 [#:critical-power-action 'hybrid-sleep]
11658Return a service that runs @uref{http://upower.freedesktop.org/,
11659@command{upowerd}}, a system-wide monitor for power consumption and battery
11660levels, with the given configuration settings. It implements the
11661@code{org.freedesktop.UPower} D-Bus interface, and is notably used by
11662GNOME.
11663@end deffn
11664
2b9e0a94
LC
11665@deffn {Scheme Procedure} udisks-service [#:udisks @var{udisks}]
11666Return a service for @uref{http://udisks.freedesktop.org/docs/latest/,
11667UDisks}, a @dfn{disk management} daemon that provides user interfaces with
11668notifications and ways to mount/unmount disks. Programs that talk to UDisks
11669include the @command{udisksctl} command, part of UDisks, and GNOME Disks.
11670@end deffn
11671
be1c2c54 11672@deffn {Scheme Procedure} colord-service [#:colord @var{colord}]
7ce597ff
AW
11673Return a service that runs @command{colord}, a system service with a D-Bus
11674interface to manage the color profiles of input and output devices such as
11675screens and scanners. It is notably used by the GNOME Color Manager graphical
11676tool. See @uref{http://www.freedesktop.org/software/colord/, the colord web
11677site} for more information.
11678@end deffn
11679
cee32ee4 11680@deffn {Scheme Procedure} geoclue-application name [#:allowed? #t] [#:system? #f] [#:users '()]
1068f26b 11681Return a configuration allowing an application to access GeoClue
cee32ee4
AW
11682location data. @var{name} is the Desktop ID of the application, without
11683the @code{.desktop} part. If @var{allowed?} is true, the application
11684will have access to location information by default. The boolean
1068f26b 11685@var{system?} value indicates whether an application is a system component
cee32ee4
AW
11686or not. Finally @var{users} is a list of UIDs of all users for which
11687this application is allowed location info access. An empty users list
11688means that all users are allowed.
11689@end deffn
11690
11691@defvr {Scheme Variable} %standard-geoclue-applications
11692The standard list of well-known GeoClue application configurations,
1068f26b
AE
11693granting authority to the GNOME date-and-time utility to ask for the
11694current location in order to set the time zone, and allowing the
11695IceCat and Epiphany web browsers to request location information.
11696IceCat and Epiphany both query the user before allowing a web page to
cee32ee4
AW
11697know the user's location.
11698@end defvr
11699
be1c2c54 11700@deffn {Scheme Procedure} geoclue-service [#:colord @var{colord}] @
cee32ee4
AW
11701 [#:whitelist '()] @
11702 [#:wifi-geolocation-url "https://location.services.mozilla.com/v1/geolocate?key=geoclue"] @
11703 [#:submit-data? #f]
11704 [#:wifi-submission-url "https://location.services.mozilla.com/v1/submit?key=geoclue"] @
11705 [#:submission-nick "geoclue"] @
11706 [#:applications %standard-geoclue-applications]
11707Return a service that runs the GeoClue location service. This service
11708provides a D-Bus interface to allow applications to request access to a
11709user's physical location, and optionally to add information to online
11710location databases. See
11711@uref{https://wiki.freedesktop.org/www/Software/GeoClue/, the GeoClue
11712web site} for more information.
11713@end deffn
11714
922e21f4
SB
11715@deffn {Scheme Procedure} bluetooth-service [#:bluez @var{bluez}]
11716Return a service that runs the @command{bluetoothd} daemon, which manages
11717all the Bluetooth devices and provides a number of D-Bus interfaces.
11718
11719Users need to be in the @code{lp} group to access the D-Bus service.
11720@end deffn
11721
105369a4
DT
11722@node Database Services
11723@subsubsection Database Services
11724
e32171ee
JD
11725@cindex database
11726@cindex SQL
6575183b 11727The @code{(gnu services databases)} module provides the following services.
105369a4 11728
be1c2c54 11729@deffn {Scheme Procedure} postgresql-service [#:postgresql postgresql] @
2d3d5cc5 11730 [#:config-file] [#:data-directory ``/var/lib/postgresql/data''] @
e05b780a 11731 [#:port 5432] [#:locale ``en_US.utf8'']
105369a4
DT
11732Return a service that runs @var{postgresql}, the PostgreSQL database
11733server.
11734
e05b780a
CB
11735The PostgreSQL daemon loads its runtime configuration from @var{config-file},
11736creates a database cluster with @var{locale} as the default
11737locale, stored in @var{data-directory}. It then listens on @var{port}.
105369a4 11738@end deffn
fe1a39d3 11739
6575183b
SB
11740@deffn {Scheme Procedure} mysql-service [#:config (mysql-configuration)]
11741Return a service that runs @command{mysqld}, the MySQL or MariaDB
11742database server.
11743
11744The optional @var{config} argument specifies the configuration for
c940b8e6 11745@command{mysqld}, which should be a @code{<mysql-configuration>} object.
6575183b
SB
11746@end deffn
11747
11748@deftp {Data Type} mysql-configuration
11749Data type representing the configuration of @var{mysql-service}.
11750
11751@table @asis
11752@item @code{mysql} (default: @var{mariadb})
11753Package object of the MySQL database server, can be either @var{mariadb}
11754or @var{mysql}.
11755
7414de0a 11756For MySQL, a temporary root password will be displayed at activation time.
6575183b 11757For MariaDB, the root password is empty.
4b41febf
CB
11758
11759@item @code{port} (default: @code{3306})
11760TCP port on which the database server listens for incoming connections.
6575183b
SB
11761@end table
11762@end deftp
11763
119fdd0d
CB
11764@defvr {Scheme Variable} memcached-service-type
11765This is the service type for the @uref{https://memcached.org/,
11766Memcached} service, which provides a distributed in memory cache. The
11767value for the service type is a @code{memcached-configuration} object.
11768@end defvr
11769
11770@example
11771(service memcached-service-type)
11772@end example
11773
11774@deftp {Data Type} memcached-configuration
11775Data type representing the configuration of memcached.
11776
11777@table @asis
11778@item @code{memcached} (default: @code{memcached})
11779The Memcached package to use.
11780
11781@item @code{interfaces} (default: @code{'("0.0.0.0")})
11782Network interfaces on which to listen.
11783
11784@item @code{tcp-port} (default: @code{11211})
11785Port on which to accept connections on,
11786
11787@item @code{udp-port} (default: @code{11211})
11788Port on which to accept UDP connections on, a value of 0 will disable
11789listening on a UDP socket.
11790
11791@item @code{additional-options} (default: @code{'()})
11792Additional command line options to pass to @code{memcached}.
11793@end table
11794@end deftp
11795
67cadaca
CB
11796@defvr {Scheme Variable} redis-service-type
11797This is the service type for the @uref{https://redis.io/, Redis}
11798key/value store, whose value is a @code{redis-configuration} object.
11799@end defvr
11800
11801@deftp {Data Type} redis-configuration
11802Data type representing the configuration of redis.
11803
11804@table @asis
11805@item @code{redis} (default: @code{redis})
11806The Redis package to use.
11807
11808@item @code{bind} (default: @code{"127.0.0.1"})
11809Network interface on which to listen.
11810
11811@item @code{port} (default: @code{6379})
11812Port on which to accept connections on, a value of 0 will disable
9fc221b5 11813listening on a TCP socket.
67cadaca
CB
11814
11815@item @code{working-directory} (default: @code{"/var/lib/redis"})
11816Directory in which to store the database and related files.
11817@end table
11818@end deftp
11819
d8c18af8
AW
11820@node Mail Services
11821@subsubsection Mail Services
11822
e32171ee
JD
11823@cindex mail
11824@cindex email
d8c18af8 11825The @code{(gnu services mail)} module provides Guix service definitions
f88371e8
SB
11826for email services: IMAP, POP3, and LMTP servers, as well as mail
11827transport agents (MTAs). Lots of acronyms! These services are detailed
11828in the subsections below.
d8c18af8 11829
f88371e8 11830@subsubheading Dovecot Service
d8c18af8
AW
11831
11832@deffn {Scheme Procedure} dovecot-service [#:config (dovecot-configuration)]
11833Return a service that runs the Dovecot IMAP/POP3/LMTP mail server.
11834@end deffn
11835
1068f26b 11836By default, Dovecot does not need much configuration; the default
d8c18af8
AW
11837configuration object created by @code{(dovecot-configuration)} will
11838suffice if your mail is delivered to @code{~/Maildir}. A self-signed
11839certificate will be generated for TLS-protected connections, though
11840Dovecot will also listen on cleartext ports by default. There are a
1068f26b 11841number of options, though, which mail administrators might need to change,
d8c18af8
AW
11842and as is the case with other services, Guix allows the system
11843administrator to specify these parameters via a uniform Scheme interface.
11844
11845For example, to specify that mail is located at @code{maildir~/.mail},
11846one would instantiate the Dovecot service like this:
11847
11848@example
11849(dovecot-service #:config
11850 (dovecot-configuration
11851 (mail-location "maildir:~/.mail")))
11852@end example
11853
11854The available configuration parameters follow. Each parameter
11855definition is preceded by its type; for example, @samp{string-list foo}
11856indicates that the @code{foo} parameter should be specified as a list of
11857strings. There is also a way to specify the configuration as a string,
11858if you have an old @code{dovecot.conf} file that you want to port over
11859from some other system; see the end for more details.
11860
11861@c The following documentation was initially generated by
11862@c (generate-documentation) in (gnu services mail). Manually maintained
11863@c documentation is better, so we shouldn't hesitate to edit below as
11864@c needed. However if the change you want to make to this documentation
11865@c can be done in an automated way, it's probably easier to change
11866@c (generate-documentation) than to make it below and have to deal with
11867@c the churn as dovecot updates.
11868
11869Available @code{dovecot-configuration} fields are:
11870
11871@deftypevr {@code{dovecot-configuration} parameter} package dovecot
11872The dovecot package.
11873@end deftypevr
11874
11875@deftypevr {@code{dovecot-configuration} parameter} comma-separated-string-list listen
1068f26b
AE
11876A list of IPs or hosts where to listen for connections. @samp{*}
11877listens on all IPv4 interfaces, @samp{::} listens on all IPv6
d8c18af8
AW
11878interfaces. If you want to specify non-default ports or anything more
11879complex, customize the address and port fields of the
11880@samp{inet-listener} of the specific services you are interested in.
11881@end deftypevr
11882
11883@deftypevr {@code{dovecot-configuration} parameter} protocol-configuration-list protocols
11884List of protocols we want to serve. Available protocols include
11885@samp{imap}, @samp{pop3}, and @samp{lmtp}.
11886
11887Available @code{protocol-configuration} fields are:
11888
11889@deftypevr {@code{protocol-configuration} parameter} string name
11890The name of the protocol.
11891@end deftypevr
11892
11893@deftypevr {@code{protocol-configuration} parameter} string auth-socket-path
1068f26b 11894UNIX socket path to the master authentication server to find users.
d8c18af8 11895This is used by imap (for shared users) and lda.
1068f26b 11896It defaults to @samp{"/var/run/dovecot/auth-userdb"}.
d8c18af8
AW
11897@end deftypevr
11898
11899@deftypevr {@code{protocol-configuration} parameter} space-separated-string-list mail-plugins
11900Space separated list of plugins to load.
11901@end deftypevr
11902
11903@deftypevr {@code{protocol-configuration} parameter} non-negative-integer mail-max-userip-connections
11904Maximum number of IMAP connections allowed for a user from each IP
11905address. NOTE: The username is compared case-sensitively.
11906Defaults to @samp{10}.
11907@end deftypevr
11908
11909@end deftypevr
11910
11911@deftypevr {@code{dovecot-configuration} parameter} service-configuration-list services
11912List of services to enable. Available services include @samp{imap},
11913@samp{imap-login}, @samp{pop3}, @samp{pop3-login}, @samp{auth}, and
11914@samp{lmtp}.
11915
11916Available @code{service-configuration} fields are:
11917
11918@deftypevr {@code{service-configuration} parameter} string kind
11919The service kind. Valid values include @code{director},
11920@code{imap-login}, @code{pop3-login}, @code{lmtp}, @code{imap},
11921@code{pop3}, @code{auth}, @code{auth-worker}, @code{dict},
11922@code{tcpwrap}, @code{quota-warning}, or anything else.
11923@end deftypevr
11924
11925@deftypevr {@code{service-configuration} parameter} listener-configuration-list listeners
1068f26b 11926Listeners for the service. A listener is either a
d8c18af8
AW
11927@code{unix-listener-configuration}, a @code{fifo-listener-configuration}, or
11928an @code{inet-listener-configuration}.
11929Defaults to @samp{()}.
11930
11931Available @code{unix-listener-configuration} fields are:
11932
eba56076
CL
11933@deftypevr {@code{unix-listener-configuration} parameter} string path
11934Path to the file, relative to @code{base-dir} field. This is also used as
11935the section name.
d8c18af8
AW
11936@end deftypevr
11937
11938@deftypevr {@code{unix-listener-configuration} parameter} string mode
11939The access mode for the socket.
11940Defaults to @samp{"0600"}.
11941@end deftypevr
11942
11943@deftypevr {@code{unix-listener-configuration} parameter} string user
f9b9a033 11944The user to own the socket.
d8c18af8
AW
11945Defaults to @samp{""}.
11946@end deftypevr
11947
11948@deftypevr {@code{unix-listener-configuration} parameter} string group
11949The group to own the socket.
11950Defaults to @samp{""}.
11951@end deftypevr
11952
11953
11954Available @code{fifo-listener-configuration} fields are:
11955
eba56076
CL
11956@deftypevr {@code{fifo-listener-configuration} parameter} string path
11957Path to the file, relative to @code{base-dir} field. This is also used as
11958the section name.
d8c18af8
AW
11959@end deftypevr
11960
11961@deftypevr {@code{fifo-listener-configuration} parameter} string mode
11962The access mode for the socket.
11963Defaults to @samp{"0600"}.
11964@end deftypevr
11965
11966@deftypevr {@code{fifo-listener-configuration} parameter} string user
f9b9a033 11967The user to own the socket.
d8c18af8
AW
11968Defaults to @samp{""}.
11969@end deftypevr
11970
11971@deftypevr {@code{fifo-listener-configuration} parameter} string group
11972The group to own the socket.
11973Defaults to @samp{""}.
11974@end deftypevr
11975
11976
11977Available @code{inet-listener-configuration} fields are:
11978
11979@deftypevr {@code{inet-listener-configuration} parameter} string protocol
11980The protocol to listen for.
11981@end deftypevr
11982
11983@deftypevr {@code{inet-listener-configuration} parameter} string address
11984The address on which to listen, or empty for all addresses.
11985Defaults to @samp{""}.
11986@end deftypevr
11987
11988@deftypevr {@code{inet-listener-configuration} parameter} non-negative-integer port
11989The port on which to listen.
11990@end deftypevr
11991
11992@deftypevr {@code{inet-listener-configuration} parameter} boolean ssl?
11993Whether to use SSL for this service; @samp{yes}, @samp{no}, or
11994@samp{required}.
11995Defaults to @samp{#t}.
11996@end deftypevr
11997
11998@end deftypevr
11999
12000@deftypevr {@code{service-configuration} parameter} non-negative-integer service-count
12001Number of connections to handle before starting a new process.
12002Typically the only useful values are 0 (unlimited) or 1. 1 is more
12003secure, but 0 is faster. <doc/wiki/LoginProcess.txt>.
12004Defaults to @samp{1}.
12005@end deftypevr
12006
12007@deftypevr {@code{service-configuration} parameter} non-negative-integer process-min-avail
12008Number of processes to always keep waiting for more connections.
12009Defaults to @samp{0}.
12010@end deftypevr
12011
12012@deftypevr {@code{service-configuration} parameter} non-negative-integer vsz-limit
12013If you set @samp{service-count 0}, you probably need to grow
12014this.
12015Defaults to @samp{256000000}.
12016@end deftypevr
12017
12018@end deftypevr
12019
12020@deftypevr {@code{dovecot-configuration} parameter} dict-configuration dict
12021Dict configuration, as created by the @code{dict-configuration}
12022constructor.
12023
12024Available @code{dict-configuration} fields are:
12025
12026@deftypevr {@code{dict-configuration} parameter} free-form-fields entries
12027A list of key-value pairs that this dict should hold.
12028Defaults to @samp{()}.
12029@end deftypevr
12030
12031@end deftypevr
12032
12033@deftypevr {@code{dovecot-configuration} parameter} passdb-configuration-list passdbs
1068f26b 12034A list of passdb configurations, each one created by the
d8c18af8
AW
12035@code{passdb-configuration} constructor.
12036
12037Available @code{passdb-configuration} fields are:
12038
12039@deftypevr {@code{passdb-configuration} parameter} string driver
12040The driver that the passdb should use. Valid values include
12041@samp{pam}, @samp{passwd}, @samp{shadow}, @samp{bsdauth}, and
12042@samp{static}.
12043Defaults to @samp{"pam"}.
12044@end deftypevr
12045
deb36188
CL
12046@deftypevr {@code{passdb-configuration} parameter} space-separated-string-list args
12047Space separated list of arguments to the passdb driver.
12048Defaults to @samp{""}.
d8c18af8
AW
12049@end deftypevr
12050
12051@end deftypevr
12052
12053@deftypevr {@code{dovecot-configuration} parameter} userdb-configuration-list userdbs
12054List of userdb configurations, each one created by the
12055@code{userdb-configuration} constructor.
12056
12057Available @code{userdb-configuration} fields are:
12058
12059@deftypevr {@code{userdb-configuration} parameter} string driver
12060The driver that the userdb should use. Valid values include
12061@samp{passwd} and @samp{static}.
12062Defaults to @samp{"passwd"}.
12063@end deftypevr
12064
deb36188
CL
12065@deftypevr {@code{userdb-configuration} parameter} space-separated-string-list args
12066Space separated list of arguments to the userdb driver.
12067Defaults to @samp{""}.
d8c18af8
AW
12068@end deftypevr
12069
12070@deftypevr {@code{userdb-configuration} parameter} free-form-args override-fields
12071Override fields from passwd.
12072Defaults to @samp{()}.
12073@end deftypevr
12074
12075@end deftypevr
12076
12077@deftypevr {@code{dovecot-configuration} parameter} plugin-configuration plugin-configuration
12078Plug-in configuration, created by the @code{plugin-configuration}
12079constructor.
12080@end deftypevr
12081
12082@deftypevr {@code{dovecot-configuration} parameter} list-of-namespace-configuration namespaces
12083List of namespaces. Each item in the list is created by the
12084@code{namespace-configuration} constructor.
12085
12086Available @code{namespace-configuration} fields are:
12087
12088@deftypevr {@code{namespace-configuration} parameter} string name
12089Name for this namespace.
12090@end deftypevr
12091
12092@deftypevr {@code{namespace-configuration} parameter} string type
12093Namespace type: @samp{private}, @samp{shared} or @samp{public}.
12094Defaults to @samp{"private"}.
12095@end deftypevr
12096
12097@deftypevr {@code{namespace-configuration} parameter} string separator
12098Hierarchy separator to use. You should use the same separator for
12099all namespaces or some clients get confused. @samp{/} is usually a good
12100one. The default however depends on the underlying mail storage
12101format.
12102Defaults to @samp{""}.
12103@end deftypevr
12104
12105@deftypevr {@code{namespace-configuration} parameter} string prefix
12106Prefix required to access this namespace. This needs to be
12107different for all namespaces. For example @samp{Public/}.
12108Defaults to @samp{""}.
12109@end deftypevr
12110
12111@deftypevr {@code{namespace-configuration} parameter} string location
1068f26b 12112Physical location of the mailbox. This is in the same format as
d8c18af8
AW
12113mail_location, which is also the default for it.
12114Defaults to @samp{""}.
12115@end deftypevr
12116
12117@deftypevr {@code{namespace-configuration} parameter} boolean inbox?
12118There can be only one INBOX, and this setting defines which
12119namespace has it.
12120Defaults to @samp{#f}.
12121@end deftypevr
12122
12123@deftypevr {@code{namespace-configuration} parameter} boolean hidden?
12124If namespace is hidden, it's not advertised to clients via NAMESPACE
12125extension. You'll most likely also want to set @samp{list? #f}. This is mostly
12126useful when converting from another server with different namespaces
12127which you want to deprecate but still keep working. For example you can
12128create hidden namespaces with prefixes @samp{~/mail/}, @samp{~%u/mail/}
12129and @samp{mail/}.
12130Defaults to @samp{#f}.
12131@end deftypevr
12132
12133@deftypevr {@code{namespace-configuration} parameter} boolean list?
1068f26b
AE
12134Show the mailboxes under this namespace with the LIST command. This
12135makes the namespace visible for clients that do not support the NAMESPACE
d8c18af8
AW
12136extension. The special @code{children} value lists child mailboxes, but
12137hides the namespace prefix.
12138Defaults to @samp{#t}.
12139@end deftypevr
12140
12141@deftypevr {@code{namespace-configuration} parameter} boolean subscriptions?
12142Namespace handles its own subscriptions. If set to @code{#f}, the
12143parent namespace handles them. The empty prefix should always have this
1068f26b 12144as @code{#t}).
d8c18af8
AW
12145Defaults to @samp{#t}.
12146@end deftypevr
12147
12148@deftypevr {@code{namespace-configuration} parameter} mailbox-configuration-list mailboxes
12149List of predefined mailboxes in this namespace.
12150Defaults to @samp{()}.
12151
12152Available @code{mailbox-configuration} fields are:
12153
12154@deftypevr {@code{mailbox-configuration} parameter} string name
12155Name for this mailbox.
12156@end deftypevr
12157
12158@deftypevr {@code{mailbox-configuration} parameter} string auto
12159@samp{create} will automatically create this mailbox.
12160@samp{subscribe} will both create and subscribe to the mailbox.
12161Defaults to @samp{"no"}.
12162@end deftypevr
12163
12164@deftypevr {@code{mailbox-configuration} parameter} space-separated-string-list special-use
12165List of IMAP @code{SPECIAL-USE} attributes as specified by RFC 6154.
12166Valid values are @code{\All}, @code{\Archive}, @code{\Drafts},
12167@code{\Flagged}, @code{\Junk}, @code{\Sent}, and @code{\Trash}.
12168Defaults to @samp{()}.
12169@end deftypevr
12170
12171@end deftypevr
12172
12173@end deftypevr
12174
12175@deftypevr {@code{dovecot-configuration} parameter} file-name base-dir
12176Base directory where to store runtime data.
12177Defaults to @samp{"/var/run/dovecot/"}.
12178@end deftypevr
12179
12180@deftypevr {@code{dovecot-configuration} parameter} string login-greeting
12181Greeting message for clients.
12182Defaults to @samp{"Dovecot ready."}.
12183@end deftypevr
12184
12185@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-trusted-networks
12186List of trusted network ranges. Connections from these IPs are
12187allowed to override their IP addresses and ports (for logging and for
12188authentication checks). @samp{disable-plaintext-auth} is also ignored
1068f26b 12189for these networks. Typically you would specify your IMAP proxy servers
d8c18af8
AW
12190here.
12191Defaults to @samp{()}.
12192@end deftypevr
12193
12194@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-access-sockets
12195List of login access check sockets (e.g. tcpwrap).
12196Defaults to @samp{()}.
12197@end deftypevr
12198
12199@deftypevr {@code{dovecot-configuration} parameter} boolean verbose-proctitle?
12200Show more verbose process titles (in ps). Currently shows user name
1068f26b
AE
12201and IP address. Useful for seeing who is actually using the IMAP
12202processes (e.g. shared mailboxes or if the same uid is used for multiple
d8c18af8
AW
12203accounts).
12204Defaults to @samp{#f}.
12205@end deftypevr
12206
12207@deftypevr {@code{dovecot-configuration} parameter} boolean shutdown-clients?
12208Should all processes be killed when Dovecot master process shuts down.
12209Setting this to @code{#f} means that Dovecot can be upgraded without
12210forcing existing client connections to close (although that could also
1068f26b 12211be a problem if the upgrade is e.g. due to a security fix).
d8c18af8
AW
12212Defaults to @samp{#t}.
12213@end deftypevr
12214
12215@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer doveadm-worker-count
12216If non-zero, run mail commands via this many connections to doveadm
12217server, instead of running them directly in the same process.
12218Defaults to @samp{0}.
12219@end deftypevr
12220
12221@deftypevr {@code{dovecot-configuration} parameter} string doveadm-socket-path
12222UNIX socket or host:port used for connecting to doveadm server.
12223Defaults to @samp{"doveadm-server"}.
12224@end deftypevr
12225
12226@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list import-environment
12227List of environment variables that are preserved on Dovecot startup
12228and passed down to all of its child processes. You can also give
12229key=value pairs to always set specific settings.
12230@end deftypevr
12231
12232@deftypevr {@code{dovecot-configuration} parameter} boolean disable-plaintext-auth?
12233Disable LOGIN command and all other plaintext authentications unless
12234SSL/TLS is used (LOGINDISABLED capability). Note that if the remote IP
12235matches the local IP (i.e. you're connecting from the same computer),
12236the connection is considered secure and plaintext authentication is
12237allowed. See also ssl=required setting.
12238Defaults to @samp{#t}.
12239@end deftypevr
12240
12241@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer auth-cache-size
12242Authentication cache size (e.g. @samp{#e10e6}). 0 means it's disabled.
12243Note that bsdauth, PAM and vpopmail require @samp{cache-key} to be set
12244for caching to be used.
12245Defaults to @samp{0}.
12246@end deftypevr
12247
12248@deftypevr {@code{dovecot-configuration} parameter} string auth-cache-ttl
12249Time to live for cached data. After TTL expires the cached record
12250is no longer used, *except* if the main database lookup returns internal
12251failure. We also try to handle password changes automatically: If
12252user's previous authentication was successful, but this one wasn't, the
12253cache isn't used. For now this works only with plaintext
12254authentication.
12255Defaults to @samp{"1 hour"}.
12256@end deftypevr
12257
12258@deftypevr {@code{dovecot-configuration} parameter} string auth-cache-negative-ttl
12259TTL for negative hits (user not found, password mismatch).
122600 disables caching them completely.
12261Defaults to @samp{"1 hour"}.
12262@end deftypevr
12263
12264@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list auth-realms
12265List of realms for SASL authentication mechanisms that need them.
12266You can leave it empty if you don't want to support multiple realms.
12267Many clients simply use the first one listed here, so keep the default
12268realm first.
12269Defaults to @samp{()}.
12270@end deftypevr
12271
12272@deftypevr {@code{dovecot-configuration} parameter} string auth-default-realm
12273Default realm/domain to use if none was specified. This is used for
12274both SASL realms and appending @@domain to username in plaintext
12275logins.
12276Defaults to @samp{""}.
12277@end deftypevr
12278
12279@deftypevr {@code{dovecot-configuration} parameter} string auth-username-chars
12280List of allowed characters in username. If the user-given username
12281contains a character not listed in here, the login automatically fails.
12282This is just an extra check to make sure user can't exploit any
12283potential quote escaping vulnerabilities with SQL/LDAP databases. If
12284you want to allow all characters, set this value to empty.
12285Defaults to @samp{"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@@"}.
12286@end deftypevr
12287
12288@deftypevr {@code{dovecot-configuration} parameter} string auth-username-translation
12289Username character translations before it's looked up from
12290databases. The value contains series of from -> to characters. For
12291example @samp{#@@/@@} means that @samp{#} and @samp{/} characters are
12292translated to @samp{@@}.
12293Defaults to @samp{""}.
12294@end deftypevr
12295
12296@deftypevr {@code{dovecot-configuration} parameter} string auth-username-format
12297Username formatting before it's looked up from databases. You can
12298use the standard variables here, e.g. %Lu would lowercase the username,
12299%n would drop away the domain if it was given, or @samp{%n-AT-%d} would
12300change the @samp{@@} into @samp{-AT-}. This translation is done after
12301@samp{auth-username-translation} changes.
12302Defaults to @samp{"%Lu"}.
12303@end deftypevr
12304
12305@deftypevr {@code{dovecot-configuration} parameter} string auth-master-user-separator
12306If you want to allow master users to log in by specifying the master
12307username within the normal username string (i.e. not using SASL
12308mechanism's support for it), you can specify the separator character
12309here. The format is then <username><separator><master username>.
12310UW-IMAP uses @samp{*} as the separator, so that could be a good
12311choice.
12312Defaults to @samp{""}.
12313@end deftypevr
12314
12315@deftypevr {@code{dovecot-configuration} parameter} string auth-anonymous-username
12316Username to use for users logging in with ANONYMOUS SASL
12317mechanism.
12318Defaults to @samp{"anonymous"}.
12319@end deftypevr
12320
12321@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer auth-worker-max-count
12322Maximum number of dovecot-auth worker processes. They're used to
12323execute blocking passdb and userdb queries (e.g. MySQL and PAM).
12324They're automatically created and destroyed as needed.
12325Defaults to @samp{30}.
12326@end deftypevr
12327
12328@deftypevr {@code{dovecot-configuration} parameter} string auth-gssapi-hostname
12329Host name to use in GSSAPI principal names. The default is to use
12330the name returned by gethostname(). Use @samp{$ALL} (with quotes) to
12331allow all keytab entries.
12332Defaults to @samp{""}.
12333@end deftypevr
12334
12335@deftypevr {@code{dovecot-configuration} parameter} string auth-krb5-keytab
12336Kerberos keytab to use for the GSSAPI mechanism. Will use the
8b499030 12337system default (usually @file{/etc/krb5.keytab}) if not specified. You may
d8c18af8
AW
12338need to change the auth service to run as root to be able to read this
12339file.
12340Defaults to @samp{""}.
12341@end deftypevr
12342
12343@deftypevr {@code{dovecot-configuration} parameter} boolean auth-use-winbind?
12344Do NTLM and GSS-SPNEGO authentication using Samba's winbind daemon
12345and @samp{ntlm-auth} helper.
12346<doc/wiki/Authentication/Mechanisms/Winbind.txt>.
12347Defaults to @samp{#f}.
12348@end deftypevr
12349
12350@deftypevr {@code{dovecot-configuration} parameter} file-name auth-winbind-helper-path
12351Path for Samba's @samp{ntlm-auth} helper binary.
12352Defaults to @samp{"/usr/bin/ntlm_auth"}.
12353@end deftypevr
12354
12355@deftypevr {@code{dovecot-configuration} parameter} string auth-failure-delay
12356Time to delay before replying to failed authentications.
12357Defaults to @samp{"2 secs"}.
12358@end deftypevr
12359
12360@deftypevr {@code{dovecot-configuration} parameter} boolean auth-ssl-require-client-cert?
12361Require a valid SSL client certificate or the authentication
12362fails.
12363Defaults to @samp{#f}.
12364@end deftypevr
12365
12366@deftypevr {@code{dovecot-configuration} parameter} boolean auth-ssl-username-from-cert?
12367Take the username from client's SSL certificate, using
12368@code{X509_NAME_get_text_by_NID()} which returns the subject's DN's
12369CommonName.
12370Defaults to @samp{#f}.
12371@end deftypevr
12372
12373@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list auth-mechanisms
12374List of wanted authentication mechanisms. Supported mechanisms are:
12375@samp{plain}, @samp{login}, @samp{digest-md5}, @samp{cram-md5},
12376@samp{ntlm}, @samp{rpa}, @samp{apop}, @samp{anonymous}, @samp{gssapi},
12377@samp{otp}, @samp{skey}, and @samp{gss-spnego}. NOTE: See also
12378@samp{disable-plaintext-auth} setting.
12379@end deftypevr
12380
12381@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list director-servers
12382List of IPs or hostnames to all director servers, including ourself.
12383Ports can be specified as ip:port. The default port is the same as what
12384director service's @samp{inet-listener} is using.
12385Defaults to @samp{()}.
12386@end deftypevr
12387
12388@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list director-mail-servers
12389List of IPs or hostnames to all backend mail servers. Ranges are
12390allowed too, like 10.0.0.10-10.0.0.30.
12391Defaults to @samp{()}.
12392@end deftypevr
12393
12394@deftypevr {@code{dovecot-configuration} parameter} string director-user-expire
12395How long to redirect users to a specific server after it no longer
12396has any connections.
12397Defaults to @samp{"15 min"}.
12398@end deftypevr
12399
12400@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer director-doveadm-port
12401TCP/IP port that accepts doveadm connections (instead of director
12402connections) If you enable this, you'll also need to add
12403@samp{inet-listener} for the port.
12404Defaults to @samp{0}.
12405@end deftypevr
12406
12407@deftypevr {@code{dovecot-configuration} parameter} string director-username-hash
12408How the username is translated before being hashed. Useful values
12409include %Ln if user can log in with or without @@domain, %Ld if mailboxes
12410are shared within domain.
12411Defaults to @samp{"%Lu"}.
12412@end deftypevr
12413
12414@deftypevr {@code{dovecot-configuration} parameter} string log-path
12415Log file to use for error messages. @samp{syslog} logs to syslog,
12416@samp{/dev/stderr} logs to stderr.
12417Defaults to @samp{"syslog"}.
12418@end deftypevr
12419
12420@deftypevr {@code{dovecot-configuration} parameter} string info-log-path
12421Log file to use for informational messages. Defaults to
12422@samp{log-path}.
12423Defaults to @samp{""}.
12424@end deftypevr
12425
12426@deftypevr {@code{dovecot-configuration} parameter} string debug-log-path
12427Log file to use for debug messages. Defaults to
12428@samp{info-log-path}.
12429Defaults to @samp{""}.
12430@end deftypevr
12431
12432@deftypevr {@code{dovecot-configuration} parameter} string syslog-facility
12433Syslog facility to use if you're logging to syslog. Usually if you
12434don't want to use @samp{mail}, you'll use local0..local7. Also other
12435standard facilities are supported.
12436Defaults to @samp{"mail"}.
12437@end deftypevr
12438
12439@deftypevr {@code{dovecot-configuration} parameter} boolean auth-verbose?
12440Log unsuccessful authentication attempts and the reasons why they
12441failed.
12442Defaults to @samp{#f}.
12443@end deftypevr
12444
12445@deftypevr {@code{dovecot-configuration} parameter} boolean auth-verbose-passwords?
12446In case of password mismatches, log the attempted password. Valid
12447values are no, plain and sha1. sha1 can be useful for detecting brute
12448force password attempts vs. user simply trying the same password over
12449and over again. You can also truncate the value to n chars by appending
12450":n" (e.g. sha1:6).
12451Defaults to @samp{#f}.
12452@end deftypevr
12453
12454@deftypevr {@code{dovecot-configuration} parameter} boolean auth-debug?
12455Even more verbose logging for debugging purposes. Shows for example
12456SQL queries.
12457Defaults to @samp{#f}.
12458@end deftypevr
12459
12460@deftypevr {@code{dovecot-configuration} parameter} boolean auth-debug-passwords?
12461In case of password mismatches, log the passwords and used scheme so
12462the problem can be debugged. Enabling this also enables
12463@samp{auth-debug}.
12464Defaults to @samp{#f}.
12465@end deftypevr
12466
12467@deftypevr {@code{dovecot-configuration} parameter} boolean mail-debug?
12468Enable mail process debugging. This can help you figure out why
12469Dovecot isn't finding your mails.
12470Defaults to @samp{#f}.
12471@end deftypevr
12472
12473@deftypevr {@code{dovecot-configuration} parameter} boolean verbose-ssl?
12474Show protocol level SSL errors.
12475Defaults to @samp{#f}.
12476@end deftypevr
12477
12478@deftypevr {@code{dovecot-configuration} parameter} string log-timestamp
12479Prefix for each line written to log file. % codes are in
12480strftime(3) format.
12481Defaults to @samp{"\"%b %d %H:%M:%S \""}.
12482@end deftypevr
12483
12484@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-log-format-elements
12485List of elements we want to log. The elements which have a
12486non-empty variable value are joined together to form a comma-separated
12487string.
12488@end deftypevr
12489
12490@deftypevr {@code{dovecot-configuration} parameter} string login-log-format
12491Login log format. %s contains @samp{login-log-format-elements}
12492string, %$ contains the data we want to log.
12493Defaults to @samp{"%$: %s"}.
12494@end deftypevr
12495
12496@deftypevr {@code{dovecot-configuration} parameter} string mail-log-prefix
12497Log prefix for mail processes. See doc/wiki/Variables.txt for list
12498of possible variables you can use.
12499Defaults to @samp{"\"%s(%u): \""}.
12500@end deftypevr
12501
12502@deftypevr {@code{dovecot-configuration} parameter} string deliver-log-format
12503Format to use for logging mail deliveries. You can use variables:
12504@table @code
12505@item %$
12506Delivery status message (e.g. @samp{saved to INBOX})
12507@item %m
12508Message-ID
12509@item %s
12510Subject
12511@item %f
12512From address
12513@item %p
12514Physical size
12515@item %w
12516Virtual size.
12517@end table
12518Defaults to @samp{"msgid=%m: %$"}.
12519@end deftypevr
12520
12521@deftypevr {@code{dovecot-configuration} parameter} string mail-location
12522Location for users' mailboxes. The default is empty, which means
12523that Dovecot tries to find the mailboxes automatically. This won't work
12524if the user doesn't yet have any mail, so you should explicitly tell
12525Dovecot the full location.
12526
12527If you're using mbox, giving a path to the INBOX
12528file (e.g. /var/mail/%u) isn't enough. You'll also need to tell Dovecot
12529where the other mailboxes are kept. This is called the "root mail
12530directory", and it must be the first path given in the
12531@samp{mail-location} setting.
12532
12533There are a few special variables you can use, eg.:
12534
12535@table @samp
12536@item %u
12537username
12538@item %n
12539user part in user@@domain, same as %u if there's no domain
12540@item %d
12541domain part in user@@domain, empty if there's no domain
12542@item %h
12543home director
12544@end table
12545
12546See doc/wiki/Variables.txt for full list. Some examples:
12547@table @samp
12548@item maildir:~/Maildir
12549@item mbox:~/mail:INBOX=/var/mail/%u
12550@item mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%
12551@end table
12552Defaults to @samp{""}.
12553@end deftypevr
12554
12555@deftypevr {@code{dovecot-configuration} parameter} string mail-uid
12556System user and group used to access mails. If you use multiple,
12557userdb can override these by returning uid or gid fields. You can use
12558either numbers or names. <doc/wiki/UserIds.txt>.
12559Defaults to @samp{""}.
12560@end deftypevr
12561
12562@deftypevr {@code{dovecot-configuration} parameter} string mail-gid
12563
12564Defaults to @samp{""}.
12565@end deftypevr
12566
12567@deftypevr {@code{dovecot-configuration} parameter} string mail-privileged-group
12568Group to enable temporarily for privileged operations. Currently
12569this is used only with INBOX when either its initial creation or
12570dotlocking fails. Typically this is set to "mail" to give access to
12571/var/mail.
12572Defaults to @samp{""}.
12573@end deftypevr
12574
12575@deftypevr {@code{dovecot-configuration} parameter} string mail-access-groups
12576Grant access to these supplementary groups for mail processes.
12577Typically these are used to set up access to shared mailboxes. Note
12578that it may be dangerous to set these if users can create
12579symlinks (e.g. if "mail" group is set here, ln -s /var/mail ~/mail/var
12580could allow a user to delete others' mailboxes, or ln -s
12581/secret/shared/box ~/mail/mybox would allow reading it).
12582Defaults to @samp{""}.
12583@end deftypevr
12584
12585@deftypevr {@code{dovecot-configuration} parameter} boolean mail-full-filesystem-access?
8f65585b 12586Allow full file system access to clients. There's no access checks
d8c18af8
AW
12587other than what the operating system does for the active UID/GID. It
12588works with both maildir and mboxes, allowing you to prefix mailboxes
12589names with e.g. /path/ or ~user/.
12590Defaults to @samp{#f}.
12591@end deftypevr
12592
12593@deftypevr {@code{dovecot-configuration} parameter} boolean mmap-disable?
12594Don't use mmap() at all. This is required if you store indexes to
8f65585b 12595shared file systems (NFS or clustered file system).
d8c18af8
AW
12596Defaults to @samp{#f}.
12597@end deftypevr
12598
12599@deftypevr {@code{dovecot-configuration} parameter} boolean dotlock-use-excl?
12600Rely on @samp{O_EXCL} to work when creating dotlock files. NFS
12601supports @samp{O_EXCL} since version 3, so this should be safe to use
12602nowadays by default.
12603Defaults to @samp{#t}.
12604@end deftypevr
12605
12606@deftypevr {@code{dovecot-configuration} parameter} string mail-fsync
12607When to use fsync() or fdatasync() calls:
12608@table @code
12609@item optimized
12610Whenever necessary to avoid losing important data
12611@item always
12612Useful with e.g. NFS when write()s are delayed
12613@item never
12614Never use it (best performance, but crashes can lose data).
12615@end table
12616Defaults to @samp{"optimized"}.
12617@end deftypevr
12618
12619@deftypevr {@code{dovecot-configuration} parameter} boolean mail-nfs-storage?
12620Mail storage exists in NFS. Set this to yes to make Dovecot flush
12621NFS caches whenever needed. If you're using only a single mail server
12622this isn't needed.
12623Defaults to @samp{#f}.
12624@end deftypevr
12625
12626@deftypevr {@code{dovecot-configuration} parameter} boolean mail-nfs-index?
12627Mail index files also exist in NFS. Setting this to yes requires
12628@samp{mmap-disable? #t} and @samp{fsync-disable? #f}.
12629Defaults to @samp{#f}.
12630@end deftypevr
12631
12632@deftypevr {@code{dovecot-configuration} parameter} string lock-method
12633Locking method for index files. Alternatives are fcntl, flock and
12634dotlock. Dotlocking uses some tricks which may create more disk I/O
12635than other locking methods. NFS users: flock doesn't work, remember to
12636change @samp{mmap-disable}.
12637Defaults to @samp{"fcntl"}.
12638@end deftypevr
12639
12640@deftypevr {@code{dovecot-configuration} parameter} file-name mail-temp-dir
12641Directory in which LDA/LMTP temporarily stores incoming mails >128
12642kB.
12643Defaults to @samp{"/tmp"}.
12644@end deftypevr
12645
12646@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer first-valid-uid
12647Valid UID range for users. This is mostly to make sure that users can't
12648log in as daemons or other system users. Note that denying root logins is
12649hardcoded to dovecot binary and can't be done even if @samp{first-valid-uid}
12650is set to 0.
12651Defaults to @samp{500}.
12652@end deftypevr
12653
12654@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer last-valid-uid
12655
12656Defaults to @samp{0}.
12657@end deftypevr
12658
12659@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer first-valid-gid
12660Valid GID range for users. Users having non-valid GID as primary group ID
12661aren't allowed to log in. If user belongs to supplementary groups with
12662non-valid GIDs, those groups are not set.
12663Defaults to @samp{1}.
12664@end deftypevr
12665
12666@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer last-valid-gid
12667
12668Defaults to @samp{0}.
12669@end deftypevr
12670
12671@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-max-keyword-length
12672Maximum allowed length for mail keyword name. It's only forced when
12673trying to create new keywords.
12674Defaults to @samp{50}.
12675@end deftypevr
12676
12677@deftypevr {@code{dovecot-configuration} parameter} colon-separated-file-name-list valid-chroot-dirs
12678List of directories under which chrooting is allowed for mail
12679processes (i.e. /var/mail will allow chrooting to /var/mail/foo/bar
12680too). This setting doesn't affect @samp{login-chroot}
12681@samp{mail-chroot} or auth chroot settings. If this setting is empty,
12682"/./" in home dirs are ignored. WARNING: Never add directories here
12683which local users can modify, that may lead to root exploit. Usually
12684this should be done only if you don't allow shell access for users.
12685<doc/wiki/Chrooting.txt>.
12686Defaults to @samp{()}.
12687@end deftypevr
12688
12689@deftypevr {@code{dovecot-configuration} parameter} string mail-chroot
12690Default chroot directory for mail processes. This can be overridden
12691for specific users in user database by giving /./ in user's home
12692directory (e.g. /home/./user chroots into /home). Note that usually
12693there is no real need to do chrooting, Dovecot doesn't allow users to
12694access files outside their mail directory anyway. If your home
12695directories are prefixed with the chroot directory, append "/." to
12696@samp{mail-chroot}. <doc/wiki/Chrooting.txt>.
12697Defaults to @samp{""}.
12698@end deftypevr
12699
12700@deftypevr {@code{dovecot-configuration} parameter} file-name auth-socket-path
12701UNIX socket path to master authentication server to find users.
12702This is used by imap (for shared users) and lda.
12703Defaults to @samp{"/var/run/dovecot/auth-userdb"}.
12704@end deftypevr
12705
12706@deftypevr {@code{dovecot-configuration} parameter} file-name mail-plugin-dir
12707Directory where to look up mail plugins.
12708Defaults to @samp{"/usr/lib/dovecot"}.
12709@end deftypevr
12710
12711@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mail-plugins
12712List of plugins to load for all services. Plugins specific to IMAP,
12713LDA, etc. are added to this list in their own .conf files.
12714Defaults to @samp{()}.
12715@end deftypevr
12716
12717@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-cache-min-mail-count
12718The minimum number of mails in a mailbox before updates are done to
12719cache file. This allows optimizing Dovecot's behavior to do less disk
12720writes at the cost of more disk reads.
12721Defaults to @samp{0}.
12722@end deftypevr
12723
12724@deftypevr {@code{dovecot-configuration} parameter} string mailbox-idle-check-interval
12725When IDLE command is running, mailbox is checked once in a while to
12726see if there are any new mails or other changes. This setting defines
12727the minimum time to wait between those checks. Dovecot can also use
12728dnotify, inotify and kqueue to find out immediately when changes
12729occur.
12730Defaults to @samp{"30 secs"}.
12731@end deftypevr
12732
12733@deftypevr {@code{dovecot-configuration} parameter} boolean mail-save-crlf?
12734Save mails with CR+LF instead of plain LF. This makes sending those
12735mails take less CPU, especially with sendfile() syscall with Linux and
12736FreeBSD. But it also creates a bit more disk I/O which may just make it
12737slower. Also note that if other software reads the mboxes/maildirs,
12738they may handle the extra CRs wrong and cause problems.
12739Defaults to @samp{#f}.
12740@end deftypevr
12741
12742@deftypevr {@code{dovecot-configuration} parameter} boolean maildir-stat-dirs?
12743By default LIST command returns all entries in maildir beginning
12744with a dot. Enabling this option makes Dovecot return only entries
12745which are directories. This is done by stat()ing each entry, so it
12746causes more disk I/O.
12747 (For systems setting struct @samp{dirent->d_type} this check is free
12748and it's done always regardless of this setting).
12749Defaults to @samp{#f}.
12750@end deftypevr
12751
12752@deftypevr {@code{dovecot-configuration} parameter} boolean maildir-copy-with-hardlinks?
12753When copying a message, do it with hard links whenever possible.
12754This makes the performance much better, and it's unlikely to have any
12755side effects.
12756Defaults to @samp{#t}.
12757@end deftypevr
12758
12759@deftypevr {@code{dovecot-configuration} parameter} boolean maildir-very-dirty-syncs?
12760Assume Dovecot is the only MUA accessing Maildir: Scan cur/
12761directory only when its mtime changes unexpectedly or when we can't find
12762the mail otherwise.
12763Defaults to @samp{#f}.
12764@end deftypevr
12765
12766@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mbox-read-locks
12767Which locking methods to use for locking mbox. There are four
12768available:
12769
12770@table @code
12771@item dotlock
12772Create <mailbox>.lock file. This is the oldest and most NFS-safe
12773solution. If you want to use /var/mail/ like directory, the users will
12774need write access to that directory.
12775@item dotlock-try
12776Same as dotlock, but if it fails because of permissions or because there
12777isn't enough disk space, just skip it.
12778@item fcntl
12779Use this if possible. Works with NFS too if lockd is used.
12780@item flock
a01ad638 12781May not exist in all systems. Doesn't work with NFS.
d8c18af8
AW
12782@item lockf
12783May not exist in all systems. Doesn't work with NFS.
12784@end table
12785
12786You can use multiple locking methods; if you do the order they're declared
12787in is important to avoid deadlocks if other MTAs/MUAs are using multiple
12788locking methods as well. Some operating systems don't allow using some of
12789them simultaneously.
12790@end deftypevr
12791
12792@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mbox-write-locks
12793
12794@end deftypevr
12795
12796@deftypevr {@code{dovecot-configuration} parameter} string mbox-lock-timeout
12797Maximum time to wait for lock (all of them) before aborting.
12798Defaults to @samp{"5 mins"}.
12799@end deftypevr
12800
12801@deftypevr {@code{dovecot-configuration} parameter} string mbox-dotlock-change-timeout
12802If dotlock exists but the mailbox isn't modified in any way,
12803override the lock file after this much time.
12804Defaults to @samp{"2 mins"}.
12805@end deftypevr
12806
12807@deftypevr {@code{dovecot-configuration} parameter} boolean mbox-dirty-syncs?
12808When mbox changes unexpectedly we have to fully read it to find out
12809what changed. If the mbox is large this can take a long time. Since
12810the change is usually just a newly appended mail, it'd be faster to
12811simply read the new mails. If this setting is enabled, Dovecot does
12812this but still safely fallbacks to re-reading the whole mbox file
12813whenever something in mbox isn't how it's expected to be. The only real
12814downside to this setting is that if some other MUA changes message
12815flags, Dovecot doesn't notice it immediately. Note that a full sync is
12816done with SELECT, EXAMINE, EXPUNGE and CHECK commands.
12817Defaults to @samp{#t}.
12818@end deftypevr
12819
12820@deftypevr {@code{dovecot-configuration} parameter} boolean mbox-very-dirty-syncs?
12821Like @samp{mbox-dirty-syncs}, but don't do full syncs even with SELECT,
12822EXAMINE, EXPUNGE or CHECK commands. If this is set,
12823@samp{mbox-dirty-syncs} is ignored.
12824Defaults to @samp{#f}.
12825@end deftypevr
12826
12827@deftypevr {@code{dovecot-configuration} parameter} boolean mbox-lazy-writes?
12828Delay writing mbox headers until doing a full write sync (EXPUNGE
12829and CHECK commands and when closing the mailbox). This is especially
12830useful for POP3 where clients often delete all mails. The downside is
12831that our changes aren't immediately visible to other MUAs.
12832Defaults to @samp{#t}.
12833@end deftypevr
12834
12835@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mbox-min-index-size
12836If mbox size is smaller than this (e.g. 100k), don't write index
12837files. If an index file already exists it's still read, just not
12838updated.
12839Defaults to @samp{0}.
12840@end deftypevr
12841
12842@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mdbox-rotate-size
12843Maximum dbox file size until it's rotated.
12844Defaults to @samp{2000000}.
12845@end deftypevr
12846
12847@deftypevr {@code{dovecot-configuration} parameter} string mdbox-rotate-interval
12848Maximum dbox file age until it's rotated. Typically in days. Day
12849begins from midnight, so 1d = today, 2d = yesterday, etc. 0 = check
12850disabled.
12851Defaults to @samp{"1d"}.
12852@end deftypevr
12853
12854@deftypevr {@code{dovecot-configuration} parameter} boolean mdbox-preallocate-space?
12855When creating new mdbox files, immediately preallocate their size to
12856@samp{mdbox-rotate-size}. This setting currently works only in Linux
8f65585b 12857with some file systems (ext4, xfs).
d8c18af8
AW
12858Defaults to @samp{#f}.
12859@end deftypevr
12860
12861@deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-dir
12862sdbox and mdbox support saving mail attachments to external files,
12863which also allows single instance storage for them. Other backends
12864don't support this for now.
12865
12866WARNING: This feature hasn't been tested much yet. Use at your own risk.
12867
12868Directory root where to store mail attachments. Disabled, if empty.
12869Defaults to @samp{""}.
12870@end deftypevr
12871
12872@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-attachment-min-size
12873Attachments smaller than this aren't saved externally. It's also
12874possible to write a plugin to disable saving specific attachments
12875externally.
12876Defaults to @samp{128000}.
12877@end deftypevr
12878
12879@deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-fs
8f65585b 12880File system backend to use for saving attachments:
d8c18af8
AW
12881@table @code
12882@item posix
12883No SiS done by Dovecot (but this might help FS's own deduplication)
12884@item sis posix
12885SiS with immediate byte-by-byte comparison during saving
12886@item sis-queue posix
12887SiS with delayed comparison and deduplication.
12888@end table
12889Defaults to @samp{"sis posix"}.
12890@end deftypevr
12891
12892@deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-hash
12893Hash format to use in attachment filenames. You can add any text and
12894variables: @code{%@{md4@}}, @code{%@{md5@}}, @code{%@{sha1@}},
12895@code{%@{sha256@}}, @code{%@{sha512@}}, @code{%@{size@}}. Variables can be
12896truncated, e.g. @code{%@{sha256:80@}} returns only first 80 bits.
12897Defaults to @samp{"%@{sha1@}"}.
12898@end deftypevr
12899
12900@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-process-limit
12901
12902Defaults to @samp{100}.
12903@end deftypevr
12904
12905@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-client-limit
12906
12907Defaults to @samp{1000}.
12908@end deftypevr
12909
12910@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-vsz-limit
12911Default VSZ (virtual memory size) limit for service processes.
12912This is mainly intended to catch and kill processes that leak memory
12913before they eat up everything.
12914Defaults to @samp{256000000}.
12915@end deftypevr
12916
12917@deftypevr {@code{dovecot-configuration} parameter} string default-login-user
12918Login user is internally used by login processes. This is the most
12919untrusted user in Dovecot system. It shouldn't have access to anything
12920at all.
12921Defaults to @samp{"dovenull"}.
12922@end deftypevr
12923
12924@deftypevr {@code{dovecot-configuration} parameter} string default-internal-user
12925Internal user is used by unprivileged processes. It should be
12926separate from login user, so that login processes can't disturb other
12927processes.
12928Defaults to @samp{"dovecot"}.
12929@end deftypevr
12930
12931@deftypevr {@code{dovecot-configuration} parameter} string ssl?
12932SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>.
12933Defaults to @samp{"required"}.
12934@end deftypevr
12935
12936@deftypevr {@code{dovecot-configuration} parameter} string ssl-cert
12937PEM encoded X.509 SSL/TLS certificate (public key).
12938Defaults to @samp{"</etc/dovecot/default.pem"}.
12939@end deftypevr
12940
12941@deftypevr {@code{dovecot-configuration} parameter} string ssl-key
12942PEM encoded SSL/TLS private key. The key is opened before
12943dropping root privileges, so keep the key file unreadable by anyone but
12944root.
12945Defaults to @samp{"</etc/dovecot/private/default.pem"}.
12946@end deftypevr
12947
12948@deftypevr {@code{dovecot-configuration} parameter} string ssl-key-password
12949If key file is password protected, give the password here.
12950Alternatively give it when starting dovecot with -p parameter. Since
12951this file is often world-readable, you may want to place this setting
12952instead to a different.
12953Defaults to @samp{""}.
12954@end deftypevr
12955
12956@deftypevr {@code{dovecot-configuration} parameter} string ssl-ca
12957PEM encoded trusted certificate authority. Set this only if you
12958intend to use @samp{ssl-verify-client-cert? #t}. The file should
12959contain the CA certificate(s) followed by the matching
12960CRL(s). (e.g. @samp{ssl-ca </etc/ssl/certs/ca.pem}).
12961Defaults to @samp{""}.
12962@end deftypevr
12963
12964@deftypevr {@code{dovecot-configuration} parameter} boolean ssl-require-crl?
12965Require that CRL check succeeds for client certificates.
12966Defaults to @samp{#t}.
12967@end deftypevr
12968
12969@deftypevr {@code{dovecot-configuration} parameter} boolean ssl-verify-client-cert?
12970Request client to send a certificate. If you also want to require
12971it, set @samp{auth-ssl-require-client-cert? #t} in auth section.
12972Defaults to @samp{#f}.
12973@end deftypevr
12974
12975@deftypevr {@code{dovecot-configuration} parameter} string ssl-cert-username-field
12976Which field from certificate to use for username. commonName and
12977x500UniqueIdentifier are the usual choices. You'll also need to set
12978@samp{auth-ssl-username-from-cert? #t}.
12979Defaults to @samp{"commonName"}.
12980@end deftypevr
12981
12982@deftypevr {@code{dovecot-configuration} parameter} hours ssl-parameters-regenerate
12983How often to regenerate the SSL parameters file. Generation is
12984quite CPU intensive operation. The value is in hours, 0 disables
12985regeneration entirely.
12986Defaults to @samp{168}.
12987@end deftypevr
12988
12989@deftypevr {@code{dovecot-configuration} parameter} string ssl-protocols
12990SSL protocols to use.
12991Defaults to @samp{"!SSLv2"}.
12992@end deftypevr
12993
12994@deftypevr {@code{dovecot-configuration} parameter} string ssl-cipher-list
12995SSL ciphers to use.
12996Defaults to @samp{"ALL:!LOW:!SSLv2:!EXP:!aNULL"}.
12997@end deftypevr
12998
12999@deftypevr {@code{dovecot-configuration} parameter} string ssl-crypto-device
13000SSL crypto device to use, for valid values run "openssl engine".
13001Defaults to @samp{""}.
13002@end deftypevr
13003
13004@deftypevr {@code{dovecot-configuration} parameter} string postmaster-address
13005Address to use when sending rejection mails.
66329c23
AW
13006%d expands to recipient domain.
13007Defaults to @samp{"postmaster@@%d"}.
d8c18af8
AW
13008@end deftypevr
13009
13010@deftypevr {@code{dovecot-configuration} parameter} string hostname
13011Hostname to use in various parts of sent mails (e.g. in Message-Id)
13012and in LMTP replies. Default is the system's real hostname@@domain.
13013Defaults to @samp{""}.
13014@end deftypevr
13015
13016@deftypevr {@code{dovecot-configuration} parameter} boolean quota-full-tempfail?
13017If user is over quota, return with temporary failure instead of
13018bouncing the mail.
13019Defaults to @samp{#f}.
13020@end deftypevr
13021
13022@deftypevr {@code{dovecot-configuration} parameter} file-name sendmail-path
13023Binary to use for sending mails.
13024Defaults to @samp{"/usr/sbin/sendmail"}.
13025@end deftypevr
13026
13027@deftypevr {@code{dovecot-configuration} parameter} string submission-host
13028If non-empty, send mails via this SMTP host[:port] instead of
13029sendmail.
13030Defaults to @samp{""}.
13031@end deftypevr
13032
13033@deftypevr {@code{dovecot-configuration} parameter} string rejection-subject
13034Subject: header to use for rejection mails. You can use the same
13035variables as for @samp{rejection-reason} below.
13036Defaults to @samp{"Rejected: %s"}.
13037@end deftypevr
13038
13039@deftypevr {@code{dovecot-configuration} parameter} string rejection-reason
13040Human readable error message for rejection mails. You can use
13041variables:
13042
13043@table @code
13044@item %n
13045CRLF
13046@item %r
13047reason
13048@item %s
13049original subject
13050@item %t
13051recipient
13052@end table
13053Defaults to @samp{"Your message to <%t> was automatically rejected:%n%r"}.
13054@end deftypevr
13055
13056@deftypevr {@code{dovecot-configuration} parameter} string recipient-delimiter
13057Delimiter character between local-part and detail in email
13058address.
13059Defaults to @samp{"+"}.
13060@end deftypevr
13061
13062@deftypevr {@code{dovecot-configuration} parameter} string lda-original-recipient-header
13063Header where the original recipient address (SMTP's RCPT TO:
13064address) is taken from if not available elsewhere. With dovecot-lda -a
13065parameter overrides this. A commonly used header for this is
13066X-Original-To.
13067Defaults to @samp{""}.
13068@end deftypevr
13069
13070@deftypevr {@code{dovecot-configuration} parameter} boolean lda-mailbox-autocreate?
13071Should saving a mail to a nonexistent mailbox automatically create
13072it?.
13073Defaults to @samp{#f}.
13074@end deftypevr
13075
13076@deftypevr {@code{dovecot-configuration} parameter} boolean lda-mailbox-autosubscribe?
13077Should automatically created mailboxes be also automatically
13078subscribed?.
13079Defaults to @samp{#f}.
13080@end deftypevr
13081
13082@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer imap-max-line-length
13083Maximum IMAP command line length. Some clients generate very long
13084command lines with huge mailboxes, so you may need to raise this if you
13085get "Too long argument" or "IMAP command line too large" errors
13086often.
13087Defaults to @samp{64000}.
13088@end deftypevr
13089
13090@deftypevr {@code{dovecot-configuration} parameter} string imap-logout-format
13091IMAP logout format string:
13092@table @code
13093@item %i
13094total number of bytes read from client
13095@item %o
13096total number of bytes sent to client.
13097@end table
13098Defaults to @samp{"in=%i out=%o"}.
13099@end deftypevr
13100
13101@deftypevr {@code{dovecot-configuration} parameter} string imap-capability
13102Override the IMAP CAPABILITY response. If the value begins with '+',
13103add the given capabilities on top of the defaults (e.g. +XFOO XBAR).
13104Defaults to @samp{""}.
13105@end deftypevr
13106
13107@deftypevr {@code{dovecot-configuration} parameter} string imap-idle-notify-interval
13108How long to wait between "OK Still here" notifications when client
13109is IDLEing.
13110Defaults to @samp{"2 mins"}.
13111@end deftypevr
13112
13113@deftypevr {@code{dovecot-configuration} parameter} string imap-id-send
13114ID field names and values to send to clients. Using * as the value
13115makes Dovecot use the default value. The following fields have default
13116values currently: name, version, os, os-version, support-url,
13117support-email.
13118Defaults to @samp{""}.
13119@end deftypevr
13120
13121@deftypevr {@code{dovecot-configuration} parameter} string imap-id-log
13122ID fields sent by client to log. * means everything.
13123Defaults to @samp{""}.
13124@end deftypevr
13125
13126@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list imap-client-workarounds
13127Workarounds for various client bugs:
13128
13129@table @code
13130@item delay-newmail
13131Send EXISTS/RECENT new mail notifications only when replying to NOOP and
13132CHECK commands. Some clients ignore them otherwise, for example OSX
13133Mail (<v2.1). Outlook Express breaks more badly though, without this it
13134may show user "Message no longer in server" errors. Note that OE6
13135still breaks even with this workaround if synchronization is set to
13136"Headers Only".
13137
13138@item tb-extra-mailbox-sep
13139Thunderbird gets somehow confused with LAYOUT=fs (mbox and dbox) and
13140adds extra @samp{/} suffixes to mailbox names. This option causes Dovecot to
13141ignore the extra @samp{/} instead of treating it as invalid mailbox name.
13142
13143@item tb-lsub-flags
13144Show \Noselect flags for LSUB replies with LAYOUT=fs (e.g. mbox).
13145This makes Thunderbird realize they aren't selectable and show them
13146greyed out, instead of only later giving "not selectable" popup error.
13147@end table
13148Defaults to @samp{()}.
13149@end deftypevr
13150
13151@deftypevr {@code{dovecot-configuration} parameter} string imap-urlauth-host
13152Host allowed in URLAUTH URLs sent by client. "*" allows all.
13153Defaults to @samp{""}.
13154@end deftypevr
13155
13156
13157Whew! Lots of configuration options. The nice thing about it though is
13158that GuixSD has a complete interface to Dovecot's configuration
13159language. This allows not only a nice way to declare configurations,
13160but also offers reflective capabilities as well: users can write code to
13161inspect and transform configurations from within Scheme.
13162
13163However, it could be that you just want to get a @code{dovecot.conf} up
13164and running. In that case, you can pass an
7414de0a 13165@code{opaque-dovecot-configuration} as the @code{#:config} parameter to
d8c18af8
AW
13166@code{dovecot-service}. As its name indicates, an opaque configuration
13167does not have easy reflective capabilities.
13168
13169Available @code{opaque-dovecot-configuration} fields are:
13170
13171@deftypevr {@code{opaque-dovecot-configuration} parameter} package dovecot
13172The dovecot package.
13173@end deftypevr
13174
13175@deftypevr {@code{opaque-dovecot-configuration} parameter} string string
13176The contents of the @code{dovecot.conf}, as a string.
13177@end deftypevr
13178
13179For example, if your @code{dovecot.conf} is just the empty string, you
13180could instantiate a dovecot service like this:
13181
13182@example
13183(dovecot-service #:config
13184 (opaque-dovecot-configuration
13185 (string "")))
13186@end example
13187
f88371e8
SB
13188@subsubheading OpenSMTPD Service
13189
13190@deffn {Scheme Variable} opensmtpd-service-type
13191This is the type of the @uref{https://www.opensmtpd.org, OpenSMTPD}
13192service, whose value should be an @code{opensmtpd-configuration} object
13193as in this example:
13194
13195@example
13196(service opensmtpd-service-type
13197 (opensmtpd-configuration
13198 (config-file (local-file "./my-smtpd.conf"))))
13199@end example
13200@end deffn
13201
13202@deftp {Data Type} opensmtpd-configuration
9fc221b5 13203Data type representing the configuration of opensmtpd.
f88371e8
SB
13204
13205@table @asis
13206@item @code{package} (default: @var{opensmtpd})
13207Package object of the OpenSMTPD SMTP server.
13208
13209@item @code{config-file} (default: @var{%default-opensmtpd-file})
13210File-like object of the OpenSMTPD configuration file to use. By default
13211it listens on the loopback network interface, and allows for mail from
13212users and daemons on the local machine, as well as permitting email to
13213remote servers. Run @command{man smtpd.conf} for more information.
13214
13215@end table
13216@end deftp
859e367d 13217
82ccc499
CZ
13218@subsubheading Exim Service
13219
63422bbb
CZ
13220@cindex mail transfer agent (MTA)
13221@cindex MTA (mail transfer agent)
13222@cindex SMTP
13223
82ccc499 13224@deffn {Scheme Variable} exim-service-type
63422bbb
CZ
13225This is the type of the @uref{https://exim.org, Exim} mail transfer
13226agent (MTA), whose value should be an @code{exim-configuration} object
13227as in this example:
82ccc499
CZ
13228
13229@example
13230(service exim-service-type
13231 (exim-configuration
63422bbb 13232 (config-file (local-file "./my-exim.conf"))))
82ccc499
CZ
13233@end example
13234@end deffn
13235
63422bbb
CZ
13236In order to use an @code{exim-service-type} service you must also have a
13237@code{mail-aliases-service-type} service present in your
13238@code{operating-system} (even if it has no aliases).
13239
82ccc499
CZ
13240@deftp {Data Type} exim-configuration
13241Data type representing the configuration of exim.
13242
13243@table @asis
13244@item @code{package} (default: @var{exim})
13245Package object of the Exim server.
13246
13247@item @code{config-file} (default: @code{#f})
13248File-like object of the Exim configuration file to use. If its value is
13249@code{#f} then use the default configuration file from the package
13250provided in @code{package}. The resulting configuration file is loaded
13251after setting the @code{exim_user} and @code{exim_group} configuration
13252variables.
13253
82ccc499
CZ
13254@end table
13255@end deftp
13256
63422bbb
CZ
13257@subsubheading Mail Aliases Service
13258
13259@cindex email aliases
13260@cindex aliases, for email addresses
13261
13262@deffn {Scheme Variable} mail-aliases-service-type
13263This is the type of the service which provides @code{/etc/aliases},
13264specifying how to deliver mail to users on this system.
13265
13266@example
13267(service mail-aliases-service-type
13268 '(("postmaster" "bob")
13269 ("bob" "bob@@example.com" "bob@@example2.com")))
13270@end example
13271@end deffn
13272
13273The configuration for a @code{mail-aliases-service-type} service is an
13274association list denoting how to deliver mail that comes to this
13275system. Each entry is of the form @code{(alias addresses ...)}, with
13276@code{alias} specifying the local alias and @code{addresses} specifying
13277where to deliver this user's mail.
13278
13279The aliases aren't required to exist as users on the local system. In
13280the above example, there doesn't need to be a @code{postmaster} entry in
13281the @code{operating-system}'s @code{user-accounts} in order to deliver
13282the @code{postmaster} mail to @code{bob} (which subsequently would
13283deliver mail to @code{bob@@example.com} and @code{bob@@example2.com}).
13284
78cef99b
CL
13285@node Messaging Services
13286@subsubsection Messaging Services
13287
13288@cindex messaging
13289@cindex jabber
13290@cindex XMPP
13291The @code{(gnu services messaging)} module provides Guix service
13292definitions for messaging services: currently only Prosody is supported.
13293
13294@subsubheading Prosody Service
13295
13296@deffn {Scheme Variable} prosody-service-type
13297This is the type for the @uref{http://prosody.im, Prosody XMPP
13298communication server}. Its value must be a @code{prosody-configuration}
13299record as in this example:
13300
13301@example
13302(service prosody-service-type
13303 (prosody-configuration
13304 (modules-enabled (cons "groups" %default-modules-enabled))
13305 (int-components
13306 (list
13307 (int-component-configuration
13308 (hostname "conference.example.net")
13309 (plugin "muc")
13310 (mod-muc (mod-muc-configuration)))))
13311 (virtualhosts
13312 (list
13313 (virtualhost-configuration
13314 (domain "example.net"))))))
13315@end example
13316
13317See below for details about @code{prosody-configuration}.
13318
13319@end deffn
13320
13321By default, Prosody does not need much configuration. Only one
13322@code{virtualhosts} field is needed: it specifies the domain you wish
13323Prosody to serve.
13324
13325Prosodyctl will help you generate X.509 certificates and keys:
13326
13327@example
13328prosodyctl cert request example.net
13329@end example
13330
13331The available configuration parameters follow. Each parameter
13332definition is preceded by its type; for example, @samp{string-list foo}
13333indicates that the @code{foo} parameter should be specified as a list of
13334strings. Types starting with @code{maybe-} denote parameters that won't
13335show up in @code{prosody.cfg.lua} when their value is @code{'disabled}.
13336
13337There is also a way to specify the configuration as a string, if you
13338have an old @code{prosody.cfg.lua} file that you want to port over from
13339some other system; see the end for more details.
13340
13341@c The following documentation was initially generated by
13342@c (generate-documentation) in (gnu services messaging). Manually maintained
13343@c documentation is better, so we shouldn't hesitate to edit below as
13344@c needed. However if the change you want to make to this documentation
13345@c can be done in an automated way, it's probably easier to change
13346@c (generate-documentation) than to make it below and have to deal with
13347@c the churn as Prosody updates.
13348
13349Available @code{prosody-configuration} fields are:
13350
13351@deftypevr {@code{prosody-configuration} parameter} package prosody
13352The Prosody package.
13353@end deftypevr
13354
13355@deftypevr {@code{prosody-configuration} parameter} file-name data-path
13356Location of the Prosody data storage directory. See
13357@url{http://prosody.im/doc/configure}.
13358Defaults to @samp{"/var/lib/prosody"}.
13359@end deftypevr
13360
13361@deftypevr {@code{prosody-configuration} parameter} file-name-list plugin-paths
13362Additional plugin directories. They are searched in all the specified
13363paths in order. See @url{http://prosody.im/doc/plugins_directory}.
13364Defaults to @samp{()}.
13365@end deftypevr
13366
13367@deftypevr {@code{prosody-configuration} parameter} string-list admins
13368This is a list of accounts that are admins for the server. Note that you
13369must create the accounts separately. See @url{http://prosody.im/doc/admins} and
13370@url{http://prosody.im/doc/creating_accounts}.
13371Example: @code{(admins '("user1@@example.com" "user2@@example.net"))}
13372Defaults to @samp{()}.
13373@end deftypevr
13374
13375@deftypevr {@code{prosody-configuration} parameter} boolean use-libevent?
13376Enable use of libevent for better performance under high load. See
13377@url{http://prosody.im/doc/libevent}.
13378Defaults to @samp{#f}.
13379@end deftypevr
13380
13381@deftypevr {@code{prosody-configuration} parameter} module-list modules-enabled
13382This is the list of modules Prosody will load on startup. It looks for
13383@code{mod_modulename.lua} in the plugins folder, so make sure that exists too.
13384Documentation on modules can be found at: @url{http://prosody.im/doc/modules}.
13385Defaults to @samp{%default-modules-enabled}.
13386@end deftypevr
13387
13388@deftypevr {@code{prosody-configuration} parameter} string-list modules-disabled
13389@samp{"offline"}, @samp{"c2s"} and @samp{"s2s"} are auto-loaded, but
13390should you want to disable them then add them to this list.
13391Defaults to @samp{()}.
13392@end deftypevr
13393
13394@deftypevr {@code{prosody-configuration} parameter} file-name groups-file
13395Path to a text file where the shared groups are defined. If this path is
13396empty then @samp{mod_groups} does nothing. See
13397@url{http://prosody.im/doc/modules/mod_groups}.
13398Defaults to @samp{"/var/lib/prosody/sharedgroups.txt"}.
13399@end deftypevr
13400
13401@deftypevr {@code{prosody-configuration} parameter} boolean allow-registration?
13402Disable account creation by default, for security. See
13403@url{http://prosody.im/doc/creating_accounts}.
13404Defaults to @samp{#f}.
13405@end deftypevr
13406
13407@deftypevr {@code{prosody-configuration} parameter} maybe-ssl-configuration ssl
13408These are the SSL/TLS-related settings. Most of them are disabled so to
13409use Prosody's defaults. If you do not completely understand these options, do
13410not add them to your config, it is easy to lower the security of your server
13411using them. See @url{http://prosody.im/doc/advanced_ssl_config}.
13412
13413Available @code{ssl-configuration} fields are:
13414
13415@deftypevr {@code{ssl-configuration} parameter} maybe-string protocol
13416This determines what handshake to use.
13417@end deftypevr
13418
13419@deftypevr {@code{ssl-configuration} parameter} file-name key
13420Path to your private key file, relative to @code{/etc/prosody}.
13421Defaults to @samp{"/etc/prosody/certs/key.pem"}.
13422@end deftypevr
13423
13424@deftypevr {@code{ssl-configuration} parameter} file-name certificate
13425Path to your certificate file, relative to @code{/etc/prosody}.
13426Defaults to @samp{"/etc/prosody/certs/cert.pem"}.
13427@end deftypevr
13428
13429@deftypevr {@code{ssl-configuration} parameter} file-name capath
13430Path to directory containing root certificates that you wish Prosody to
13431trust when verifying the certificates of remote servers.
13432Defaults to @samp{"/etc/ssl/certs"}.
13433@end deftypevr
13434
13435@deftypevr {@code{ssl-configuration} parameter} maybe-file-name cafile
13436Path to a file containing root certificates that you wish Prosody to trust.
13437Similar to @code{capath} but with all certificates concatenated together.
13438@end deftypevr
13439
13440@deftypevr {@code{ssl-configuration} parameter} maybe-string-list verify
13441A list of verification options (these mostly map to OpenSSL's
13442@code{set_verify()} flags).
13443@end deftypevr
13444
13445@deftypevr {@code{ssl-configuration} parameter} maybe-string-list options
13446A list of general options relating to SSL/TLS. These map to OpenSSL's
13447@code{set_options()}. For a full list of options available in LuaSec, see the
13448LuaSec source.
13449@end deftypevr
13450
13451@deftypevr {@code{ssl-configuration} parameter} maybe-non-negative-integer depth
13452How long a chain of certificate authorities to check when looking for a
13453trusted root certificate.
13454@end deftypevr
13455
13456@deftypevr {@code{ssl-configuration} parameter} maybe-string ciphers
13457An OpenSSL cipher string. This selects what ciphers Prosody will offer to
13458clients, and in what order.
13459@end deftypevr
13460
13461@deftypevr {@code{ssl-configuration} parameter} maybe-file-name dhparam
13462A path to a file containing parameters for Diffie-Hellman key exchange. You
13463can create such a file with:
13464@code{openssl dhparam -out /etc/prosody/certs/dh-2048.pem 2048}
13465@end deftypevr
13466
13467@deftypevr {@code{ssl-configuration} parameter} maybe-string curve
13468Curve for Elliptic curve Diffie-Hellman. Prosody's default is
13469@samp{"secp384r1"}.
13470@end deftypevr
13471
13472@deftypevr {@code{ssl-configuration} parameter} maybe-string-list verifyext
13473A list of "extra" verification options.
13474@end deftypevr
13475
13476@deftypevr {@code{ssl-configuration} parameter} maybe-string password
13477Password for encrypted private keys.
13478@end deftypevr
13479
13480@end deftypevr
13481
13482@deftypevr {@code{prosody-configuration} parameter} boolean c2s-require-encryption?
13483Whether to force all client-to-server connections to be encrypted or not.
13484See @url{http://prosody.im/doc/modules/mod_tls}.
13485Defaults to @samp{#f}.
13486@end deftypevr
13487
13488@deftypevr {@code{prosody-configuration} parameter} boolean s2s-require-encryption?
13489Whether to force all server-to-server connections to be encrypted or not.
13490See @url{http://prosody.im/doc/modules/mod_tls}.
13491Defaults to @samp{#f}.
13492@end deftypevr
13493
13494@deftypevr {@code{prosody-configuration} parameter} boolean s2s-secure-auth?
13495Whether to require encryption and certificate authentication. This
13496provides ideal security, but requires servers you communicate with to support
13497encryption AND present valid, trusted certificates. See
13498@url{http://prosody.im/doc/s2s#security}.
13499Defaults to @samp{#f}.
13500@end deftypevr
13501
13502@deftypevr {@code{prosody-configuration} parameter} string-list s2s-insecure-domains
13503Many servers don't support encryption or have invalid or self-signed
13504certificates. You can list domains here that will not be required to
13505authenticate using certificates. They will be authenticated using DNS. See
13506@url{http://prosody.im/doc/s2s#security}.
13507Defaults to @samp{()}.
13508@end deftypevr
13509
13510@deftypevr {@code{prosody-configuration} parameter} string-list s2s-secure-domains
13511Even if you leave @code{s2s-secure-auth?} disabled, you can still require
13512valid certificates for some domains by specifying a list here. See
13513@url{http://prosody.im/doc/s2s#security}.
13514Defaults to @samp{()}.
13515@end deftypevr
13516
13517@deftypevr {@code{prosody-configuration} parameter} string authentication
13518Select the authentication backend to use. The default provider stores
13519passwords in plaintext and uses Prosody's configured data storage to store the
13520authentication data. If you do not trust your server please see
13521@url{http://prosody.im/doc/modules/mod_auth_internal_hashed} for information
13522about using the hashed backend. See also
13523@url{http://prosody.im/doc/authentication}
13524Defaults to @samp{"internal_plain"}.
13525@end deftypevr
13526
13527@deftypevr {@code{prosody-configuration} parameter} maybe-string log
13528Set logging options. Advanced logging configuration is not yet supported
13529by the GuixSD Prosody Service. See @url{http://prosody.im/doc/logging}.
13530Defaults to @samp{"*syslog"}.
13531@end deftypevr
13532
13533@deftypevr {@code{prosody-configuration} parameter} file-name pidfile
13534File to write pid in. See @url{http://prosody.im/doc/modules/mod_posix}.
13535Defaults to @samp{"/var/run/prosody/prosody.pid"}.
13536@end deftypevr
13537
13538@deftypevr {@code{prosody-configuration} parameter} virtualhost-configuration-list virtualhosts
13539A host in Prosody is a domain on which user accounts can be created. For
13540example if you want your users to have addresses like
13541@samp{"john.smith@@example.com"} then you need to add a host
13542@samp{"example.com"}. All options in this list will apply only to this host.
13543
13544Note: the name "virtual" host is used in configuration to avoid confusion with
13545the actual physical host that Prosody is installed on. A single Prosody
13546instance can serve many domains, each one defined as a VirtualHost entry in
13547Prosody's configuration. Conversely a server that hosts a single domain would
13548have just one VirtualHost entry.
13549
13550See @url{http://prosody.im/doc/configure#virtual_host_settings}.
13551
13552Available @code{virtualhost-configuration} fields are:
13553
13554all these @code{prosody-configuration} fields: @code{admins}, @code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled}, @code{groups-file}, @code{allow-registration?}, @code{ssl}, @code{c2s-require-encryption?}, @code{s2s-require-encryption?}, @code{s2s-secure-auth?}, @code{s2s-insecure-domains}, @code{s2s-secure-domains}, @code{authentication}, @code{log}, plus:
13555@deftypevr {@code{virtualhost-configuration} parameter} string domain
13556Domain you wish Prosody to serve.
13557@end deftypevr
13558
13559@end deftypevr
13560
13561@deftypevr {@code{prosody-configuration} parameter} int-component-configuration-list int-components
13562Components are extra services on a server which are available to clients,
13563usually on a subdomain of the main server (such as
13564@samp{"mycomponent.example.com"}). Example components might be chatroom
13565servers, user directories, or gateways to other protocols.
13566
13567Internal components are implemented with Prosody-specific plugins. To add an
13568internal component, you simply fill the hostname field, and the plugin you wish
13569to use for the component.
13570
13571See @url{http://prosody.im/doc/components}.
13572Defaults to @samp{()}.
13573
13574Available @code{int-component-configuration} fields are:
13575
13576all these @code{prosody-configuration} fields: @code{admins}, @code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled}, @code{groups-file}, @code{allow-registration?}, @code{ssl}, @code{c2s-require-encryption?}, @code{s2s-require-encryption?}, @code{s2s-secure-auth?}, @code{s2s-insecure-domains}, @code{s2s-secure-domains}, @code{authentication}, @code{log}, plus:
13577@deftypevr {@code{int-component-configuration} parameter} string hostname
13578Hostname of the component.
13579@end deftypevr
13580
13581@deftypevr {@code{int-component-configuration} parameter} string plugin
13582Plugin you wish to use for the component.
13583@end deftypevr
13584
13585@deftypevr {@code{int-component-configuration} parameter} maybe-mod-muc-configuration mod-muc
13586Multi-user chat (MUC) is Prosody's module for allowing you to create
13587hosted chatrooms/conferences for XMPP users.
13588
13589General information on setting up and using multi-user chatrooms can be found
13590in the "Chatrooms" documentation (@url{http://prosody.im/doc/chatrooms}),
13591which you should read if you are new to XMPP chatrooms.
13592
13593See also @url{http://prosody.im/doc/modules/mod_muc}.
13594
13595Available @code{mod-muc-configuration} fields are:
13596
13597@deftypevr {@code{mod-muc-configuration} parameter} string name
13598The name to return in service discovery responses.
13599Defaults to @samp{"Prosody Chatrooms"}.
13600@end deftypevr
13601
13602@deftypevr {@code{mod-muc-configuration} parameter} string-or-boolean restrict-room-creation
13603If @samp{#t}, this will only allow admins to create new chatrooms.
13604Otherwise anyone can create a room. The value @samp{"local"} restricts room
13605creation to users on the service's parent domain. E.g. @samp{user@@example.com}
13606can create rooms on @samp{rooms.example.com}. The value @samp{"admin"}
13607restricts to service administrators only.
13608Defaults to @samp{#f}.
13609@end deftypevr
13610
13611@deftypevr {@code{mod-muc-configuration} parameter} non-negative-integer max-history-messages
13612Maximum number of history messages that will be sent to the member that has
13613just joined the room.
13614Defaults to @samp{20}.
13615@end deftypevr
13616
13617@end deftypevr
13618
13619@end deftypevr
13620
13621@deftypevr {@code{prosody-configuration} parameter} ext-component-configuration-list ext-components
13622External components use XEP-0114, which most standalone components
13623support. To add an external component, you simply fill the hostname field. See
13624@url{http://prosody.im/doc/components}.
13625Defaults to @samp{()}.
13626
13627Available @code{ext-component-configuration} fields are:
13628
13629all these @code{prosody-configuration} fields: @code{admins}, @code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled}, @code{groups-file}, @code{allow-registration?}, @code{ssl}, @code{c2s-require-encryption?}, @code{s2s-require-encryption?}, @code{s2s-secure-auth?}, @code{s2s-insecure-domains}, @code{s2s-secure-domains}, @code{authentication}, @code{log}, plus:
13630@deftypevr {@code{ext-component-configuration} parameter} string component-secret
13631Password which the component will use to log in.
13632@end deftypevr
13633
13634@deftypevr {@code{ext-component-configuration} parameter} string hostname
13635Hostname of the component.
13636@end deftypevr
13637
13638@end deftypevr
13639
13640@deftypevr {@code{prosody-configuration} parameter} non-negative-integer-list component-ports
13641Port(s) Prosody listens on for component connections.
13642@end deftypevr
13643
13644@deftypevr {@code{prosody-configuration} parameter} string component-interface
13645Interface Prosody listens on for component connections.
13646Defaults to @samp{"127.0.0.1"}.
13647@end deftypevr
13648
13649It could be that you just want to get a @code{prosody.cfg.lua}
13650up and running. In that case, you can pass an
13651@code{opaque-prosody-configuration} record as the value of
13652@code{prosody-service-type}. As its name indicates, an opaque configuration
13653does not have easy reflective capabilities.
13654Available @code{opaque-prosody-configuration} fields are:
13655
13656@deftypevr {@code{opaque-prosody-configuration} parameter} package prosody
13657The prosody package.
13658@end deftypevr
13659
13660@deftypevr {@code{opaque-prosody-configuration} parameter} string prosody.cfg.lua
13661The contents of the @code{prosody.cfg.lua} to use.
13662@end deftypevr
13663
13664For example, if your @code{prosody.cfg.lua} is just the empty
13665string, you could instantiate a prosody service like this:
13666
13667@example
13668(service prosody-service-type
13669 (opaque-prosody-configuration
13670 (prosody.cfg.lua "")))
13671@end example
13672
730ed6ec
CB
13673@node Monitoring Services
13674@subsubsection Monitoring Services
13675
13676@subsubheading Tailon Service
13677
13678@uref{https://tailon.readthedocs.io/, Tailon} is a web application for
13679viewing and searching log files.
13680
13681The following example will configure the service with default values.
13682By default, Tailon can be accessed on port 8080 (@code{http://localhost:8080}).
13683
13684@example
13685(service tailon-service-type)
13686@end example
13687
13688The following example customises more of the Tailon configuration,
13689adding @command{sed} to the list of allowed commands.
13690
13691@example
13692(service tailon-service-type
13693 (tailon-configuration
13694 (config-file
13695 (tailon-configuration-file
13696 (allowed-commands '("tail" "grep" "awk" "sed"))))))
13697@end example
13698
13699
13700@deftp {Data Type} tailon-configuration
13701Data type representing the configuration of Tailon.
13702This type has the following parameters:
13703
13704@table @asis
13705@item @code{config-file} (default: @code{(tailon-configuration-file)})
13706The configuration file to use for Tailon. This can be set to a
13707@dfn{tailon-configuration-file} record value, or any gexp
13708(@pxref{G-Expressions}).
13709
13710For example, to instead use a local file, the @code{local-file} function
13711can be used:
13712
13713@example
13714(service tailon-service-type
13715 (tailon-configuration
13716 (config-file (local-file "./my-tailon.conf"))))
13717@end example
13718
13719@item @code{package} (default: @code{tailon})
13720The tailon package to use.
13721
13722@end table
13723@end deftp
13724
13725@deftp {Data Type} tailon-configuration-file
13726Data type representing the configuration options for Tailon.
13727This type has the following parameters:
13728
13729@table @asis
13730@item @code{files} (default: @code{(list "/var/log")})
13731List of files to display. The list can include strings for a single file
13732or directory, or a list, where the first item is the name of a
13733subsection, and the remaining items are the files or directories in that
13734subsection.
13735
13736@item @code{bind} (default: @code{"localhost:8080"})
13737Address and port to which Tailon should bind on.
13738
13739@item @code{relative-root} (default: @code{#f})
13740URL path to use for Tailon, set to @code{#f} to not use a path.
13741
13742@item @code{allow-transfers?} (default: @code{#t})
13743Allow downloading the log files in the web interface.
13744
13745@item @code{follow-names?} (default: @code{#t})
13746Allow tailing of not-yet existent files.
13747
13748@item @code{tail-lines} (default: @code{200})
13749Number of lines to read initially from each file.
13750
13751@item @code{allowed-commands} (default: @code{(list "tail" "grep" "awk")})
13752Commands to allow running. By default, @code{sed} is disabled.
13753
13754@item @code{debug?} (default: @code{#f})
13755Set @code{debug?} to @code{#t} to show debug messages.
13756
13757@end table
13758@end deftp
13759
13760
859e367d
JD
13761@node Kerberos Services
13762@subsubsection Kerberos Services
13763@cindex Kerberos
13764
df31e36a 13765The @code{(gnu services kerberos)} module provides services relating to
859e367d
JD
13766the authentication protocol @dfn{Kerberos}.
13767
8e3f813f
JD
13768@subsubheading Krb5 Service
13769
13770Programs using a Kerberos client library normally
13771expect a configuration file in @file{/etc/krb5.conf}.
13772This service generates such a file from a definition provided in the
13773operating system declaration.
13774It does not cause any daemon to be started.
13775
13776No ``keytab'' files are provided by this service---you must explicitly create them.
13777This service is known to work with the MIT client library, @code{mit-krb5}.
13778Other implementations have not been tested.
13779
13780@defvr {Scheme Variable} krb5-service-type
13781A service type for Kerberos 5 clients.
13782@end defvr
13783
13784@noindent
13785Here is an example of its use:
13786@lisp
13787(service krb5-service-type
13788 (krb5-configuration
13789 (default-realm "EXAMPLE.COM")
13790 (allow-weak-crypto? #t)
13791 (realms (list
13792 (krb5-realm
13793 (name "EXAMPLE.COM")
13794 (admin-server "groucho.example.com")
13795 (kdc "karl.example.com"))
13796 (krb5-realm
13797 (name "ARGRX.EDU")
13798 (admin-server "kerb-admin.argrx.edu")
13799 (kdc "keys.argrx.edu"))))))
13800@end lisp
13801
13802@noindent
13803This example provides a Kerberos@tie{}5 client configuration which:
13804@itemize
13805@item Recognizes two realms, @i{viz:} ``EXAMPLE.COM'' and ``ARGRX.EDU'', both
13806of which have distinct administration servers and key distribution centers;
13807@item Will default to the realm ``EXAMPLE.COM'' if the realm is not explicitly
13808specified by clients;
13809@item Accepts services which only support encryption types known to be weak.
13810@end itemize
13811
13812The @code{krb5-realm} and @code{krb5-configuration} types have many fields.
13813Only the most commonly used ones are described here.
13814For a full list, and more detailed explanation of each, see the MIT
13815@uref{http://web.mit.edu/kerberos/krb5-devel/doc/admin/conf_files/krb5_conf.html,,krb5.conf}
13816documentation.
13817
13818
13819@deftp {Data Type} krb5-realm
13820@cindex realm, kerberos
13821@table @asis
13822@item @code{name}
13823This field is a string identifying the name of the realm.
13824A common convention is to use the fully qualified DNS name of your organization,
13825converted to upper case.
13826
13827@item @code{admin-server}
13828This field is a string identifying the host where the administration server is
13829running.
13830
13831@item @code{kdc}
13832This field is a string identifying the key distribution center
13833for the realm.
13834@end table
13835@end deftp
13836
13837@deftp {Data Type} krb5-configuration
13838
13839@table @asis
13840@item @code{allow-weak-crypto?} (default: @code{#f})
13841If this flag is @code{#t} then services which only offer encryption algorithms
13842known to be weak will be accepted.
13843
13844@item @code{default-realm} (default: @code{#f})
13845This field should be a string identifying the default Kerberos
13846realm for the client.
13847You should set this field to the name of your Kerberos realm.
13848If this value is @code{#f}
13849then a realm must be specified with every Kerberos principal when invoking programs
13850such as @command{kinit}.
13851
13852@item @code{realms}
13853This should be a non-empty list of @code{krb5-realm} objects, which clients may
13854access.
13855Normally, one of them will have a @code{name} field matching the @code{default-realm}
13856field.
13857@end table
13858@end deftp
13859
13860
859e367d
JD
13861@subsubheading PAM krb5 Service
13862@cindex pam-krb5
13863
df31e36a 13864The @code{pam-krb5} service allows for login authentication and password
859e367d
JD
13865management via Kerberos.
13866You will need this service if you want PAM enabled applications to authenticate
13867users using Kerberos.
13868
13869@defvr {Scheme Variable} pam-krb5-service-type
13870A service type for the Kerberos 5 PAM module.
13871@end defvr
13872
13873@deftp {Data Type} pam-krb5-configuration
13874Data type representing the configuration of the Kerberos 5 PAM module
13875This type has the following parameters:
13876@table @asis
13877@item @code{pam-krb5} (default: @code{pam-krb5})
13878The pam-krb5 package to use.
13879
13880@item @code{minimum-uid} (default: @code{1000})
13881The smallest user ID for which Kerberos authentications should be attempted.
13882Local accounts with lower values will silently fail to authenticate.
13883@end table
13884@end deftp
13885
13886
58724c48
DT
13887@node Web Services
13888@subsubsection Web Services
13889
e32171ee
JD
13890@cindex web
13891@cindex www
13892@cindex HTTP
a5130d10
AW
13893The @code{(gnu services web)} module provides the nginx web server and
13894also a fastcgi wrapper daemon.
58724c48 13895
be1c2c54 13896@deffn {Scheme Procedure} nginx-service [#:nginx nginx] @
58724c48
DT
13897 [#:log-directory ``/var/log/nginx''] @
13898 [#:run-directory ``/var/run/nginx''] @
d338237d 13899 [#:server-list '()] @
cb341293 13900 [#:upstream-list '()] @
d338237d 13901 [#:config-file @code{#f}]
58724c48
DT
13902
13903Return a service that runs @var{nginx}, the nginx web server.
13904
13905The nginx daemon loads its runtime configuration from @var{config-file}.
13906Log files are written to @var{log-directory} and temporary runtime data
13907files are written to @var{run-directory}. For proper operation, these
13908arguments should match what is in @var{config-file} to ensure that the
13909directories are created when the service is activated.
13910
3b9b12ef 13911As an alternative to using a @var{config-file}, @var{server-list} can be
cb341293
CB
13912used to specify the list of @dfn{server blocks} required on the host and
13913@var{upstream-list} can be used to specify a list of @dfn{upstream
13914blocks} to configure. For this to work, use the default value for
13915@var{config-file}.
8c00b838 13916
5a10cd47
JL
13917At startup, @command{nginx} has not yet read its configuration file, so it
13918uses a default file to log error messages. If it fails to load its
13919configuration file, that is where error messages are logged. After the
13920configuration file is loaded, the default error log file changes as per
13921configuration. In our case, startup error messages can be found in
13922@file{/var/run/nginx/logs/error.log}, and after configuration in
13923@file{/var/log/nginx/error.log}. The second location can be changed with the
13924@var{log-directory} configuration option.
13925
58724c48
DT
13926@end deffn
13927
d338237d
JL
13928@deffn {Scheme Variable} nginx-service-type
13929This is type for the nginx web server.
13930
13931This service can be extended to add server blocks in addition to the
13932default one, as in this example:
13933
13934@example
13935(simple-service 'my-extra-server nginx-service-type
13936 (list (nginx-server-configuration
13937 (https-port #f)
13938 (root "/srv/http/extra-website"))))
13939@end example
13940@end deffn
13941
3b9b12ef
JL
13942@deftp {Data Type} nginx-server-configuration
13943Data type representing the configuration of an nginx server block.
8c00b838
JL
13944This type has the following parameters:
13945
13946@table @asis
13947@item @code{http-port} (default: @code{80})
13948Nginx will listen for HTTP connection on this port. Set it at @code{#f} if
13949nginx should not listen for HTTP (non secure) connection for this
3b9b12ef 13950@dfn{server block}.
8c00b838
JL
13951
13952@item @code{https-port} (default: @code{443})
13953Nginx will listen for HTTPS connection on this port. Set it at @code{#f} if
3b9b12ef 13954nginx should not listen for HTTPS (secure) connection for this @dfn{server block}.
8c00b838
JL
13955
13956Note that nginx can listen for HTTP and HTTPS connections in the same
3b9b12ef 13957@dfn{server block}.
8c00b838
JL
13958
13959@item @code{server-name} (default: @code{(list 'default)})
3b9b12ef
JL
13960A list of server names this server represents. @code{'default} represents the
13961default server for connections matching no other server.
8c00b838
JL
13962
13963@item @code{root} (default: @code{"/srv/http"})
13964Root of the website nginx will serve.
13965
9c557a69
CB
13966@item @code{locations} (default: @code{'()})
13967A list of @dfn{nginx-location-configuration} or
13968@dfn{nginx-named-location-configuration} records to use within this
13969server block.
13970
8c00b838
JL
13971@item @code{index} (default: @code{(list "index.html")})
13972Index files to look for when clients ask for a directory. If it cannot be found,
13973Nginx will send the list of files in the directory.
13974
13975@item @code{ssl-certificate} (default: @code{"/etc/nginx/cert.pem"})
13976Where to find the certificate for secure connections. Set it to @code{#f} if
13977you don't have a certificate or you don't want to use HTTPS.
13978
13979@item @code{ssl-certificate-key} (default: @code{"/etc/nginx/key.pem"})
13980Where to find the private key for secure connections. Set it to @code{#f} if
13981you don't have a key or you don't want to use HTTPS.
13982
13983@item @code{server-tokens?} (default: @code{#f})
13984Whether the server should add its configuration to response.
13985
13986@end table
13987@end deftp
13988
a88d41d1
CB
13989@deftp {Data Type} nginx-upstream-configuration
13990Data type representing the configuration of an nginx @code{upstream}
13991block. This type has the following parameters:
13992
13993@table @asis
13994@item @code{name}
13995Name for this group of servers.
13996
13997@item @code{servers}
13998Specify the addresses of the servers in the group. The address can be
13999specified as a IP address (e.g. @samp{127.0.0.1}), domain name
14000(e.g. @samp{backend1.example.com}) or a path to a UNIX socket using the
14001prefix @samp{unix:}. For addresses using an IP address or domain name,
14002the default port is 80, and a different port can be specified
14003explicitly.
14004
14005@end table
14006@end deftp
14007
14008@deftp {Data Type} nginx-location-configuration
14009Data type representing the configuration of an nginx @code{location}
14010block. This type has the following parameters:
14011
14012@table @asis
14013@item @code{uri}
14014URI which this location block matches.
14015
14016@anchor{nginx-location-configuration body}
14017@item @code{body}
14018Body of the location block, specified as a string. This can contain many
14019configuration directives. For example, to pass requests to a upstream
14020server group defined using an @code{nginx-upstream-configuration} block,
14021the following directive would be specified in the body @samp{proxy_pass
14022http://upstream-name;}.
14023
14024@end table
14025@end deftp
14026
14027@deftp {Data Type} nginx-named-location-configuration
14028Data type representing the configuration of an nginx named location
14029block. Named location blocks are used for request redirection, and not
14030used for regular request processing. This type has the following
14031parameters:
14032
14033@table @asis
14034@item @code{name}
14035Name to identify this location block.
14036
14037@item @code{body}
14038@xref{nginx-location-configuration body}, as the body for named location
14039blocks can be used in a similar way to the
14040@code{nginx-location-configuration body}. One restriction is that the
14041body of a named location block cannot contain location blocks.
14042
14043@end table
14044@end deftp
14045
a5130d10
AW
14046@cindex fastcgi
14047@cindex fcgiwrap
14048FastCGI is an interface between the front-end and the back-end of a web
14049service. It is a somewhat legacy facility; new web services should
14050generally just talk HTTP between the front-end and the back-end.
14051However there are a number of back-end services such as PHP or the
14052optimized HTTP Git repository access that use FastCGI, so we have
14053support for it in Guix.
14054
14055To use FastCGI, you configure the front-end web server (e.g., nginx) to
14056dispatch some subset of its requests to the fastcgi backend, which
14057listens on a local TCP or UNIX socket. There is an intermediary
14058@code{fcgiwrap} program that sits between the actual backend process and
14059the web server. The front-end indicates which backend program to run,
14060passing that information to the @code{fcgiwrap} process.
14061
14062@defvr {Scheme Variable} fcgiwrap-service-type
14063A service type for the @code{fcgiwrap} FastCGI proxy.
14064@end defvr
14065
14066@deftp {Data Type} fcgiwrap-configuration
14067Data type representing the configuration of the @code{fcgiwrap} serice.
14068This type has the following parameters:
14069@table @asis
14070@item @code{package} (default: @code{fcgiwrap})
14071The fcgiwrap package to use.
14072
14073@item @code{socket} (default: @code{tcp:127.0.0.1:9000})
14074The socket on which the @code{fcgiwrap} process should listen, as a
14075string. Valid @var{socket} values include
14076@code{unix:@var{/path/to/unix/socket}},
14077@code{tcp:@var{dot.ted.qu.ad}:@var{port}} and
14078@code{tcp6:[@var{ipv6_addr}]:port}.
14079
14080@item @code{user} (default: @code{fcgiwrap})
14081@itemx @code{group} (default: @code{fcgiwrap})
14082The user and group names, as strings, under which to run the
14083@code{fcgiwrap} process. The @code{fastcgi} service will ensure that if
14084the user asks for the specific user or group names @code{fcgiwrap} that
14085the corresponding user and/or group is present on the system.
14086
14087It is possible to configure a FastCGI-backed web service to pass HTTP
14088authentication information from the front-end to the back-end, and to
14089allow @code{fcgiwrap} to run the back-end process as a corresponding
14090local user. To enable this capability on the back-end., run
14091@code{fcgiwrap} as the @code{root} user and group. Note that this
14092capability also has to be configured on the front-end as well.
14093@end table
14094@end deftp
14095
a88d41d1 14096
ba69e8f7
JL
14097@node DNS Services
14098@subsubsection DNS Services
14099@cindex DNS (domain name system)
14100@cindex domain name system (DNS)
14101
14102The @code{(gnu services dns)} module provides services related to the
14103@dfn{domain name system} (DNS). It provides a server service for hosting
14104an @emph{authoritative} DNS server for multiple zones, slave or master.
14105This service uses @uref{https://www.knot-dns.cz/, Knot DNS}.
14106
14107An example configuration of an authoritative server for two zones, one master
14108and one slave, is:
14109
14110@lisp
14111(define-zone-entries example.org.zone
14112;; Name TTL Class Type Data
14113 ("@@" "" "IN" "A" "127.0.0.1")
14114 ("@@" "" "IN" "NS" "ns")
14115 ("ns" "" "IN" "A" "127.0.0.1"))
14116
14117(define master-zone
14118 (knot-zone-configuration
14119 (domain "example.org")
14120 (zone (zone-file
14121 (origin "example.org")
14122 (entries example.org.zone)))))
14123
14124(define slave-zone
14125 (knot-zone-configuration
14126 (domain "plop.org")
14127 (dnssec-policy "default")
14128 (master (list "plop-master"))))
14129
14130(define plop-master
14131 (knot-remote-configuration
14132 (id "plop-master")
14133 (address (list "208.76.58.171"))))
14134
14135(operating-system
14136 ;; ...
14137 (services (cons* (service knot-service-type
14138 (knot-confifguration
14139 (remotes (list plop-master))
14140 (zones (list master-zone slave-zone))))
14141 ;; ...
14142 %base-services)))
14143@end lisp
14144
14145@deffn {Scheme Variable} knot-service-type
14146This is the type for the Knot DNS server.
14147
14148Knot DNS is an authoritative DNS server, meaning that it can serve multiple
14149zones, that is to say domain names you would buy from a registrar. This server
14150is not a resolver, meaning that it can only resolve names for which it is
14151authoritative. This server can be configured to serve zones as a master server
14152or a slave server as a per-zone basis. Slave zones will get their data from
14153masters, and will serve it as an authoritative server. From the point of view
14154of a resolver, there is no difference between master and slave.
14155
14156The following data types are used to configure the Knot DNS server:
14157@end deffn
14158
14159@deftp {Data Type} knot-key-configuration
14160Data type representing a key.
14161This type has the following parameters:
14162
14163@table @asis
14164@item @code{id} (default: @code{""})
14165An identifier for other configuration fields to refer to this key. IDs must
14166be unique and must not be empty.
14167
14168@item @code{algorithm} (default: @code{#f})
14169The algorithm to use. Choose between @code{#f}, @code{'hmac-md5},
14170@code{'hmac-sha1}, @code{'hmac-sha224}, @code{'hmac-sha256}, @code{'hmac-sha384}
14171and @code{'hmac-sha512}.
14172
14173@item @code{secret} (default: @code{""})
14174The secret key itself.
14175
14176@end table
14177@end deftp
14178
14179@deftp {Data Type} knot-acl-configuration
14180Data type representing an Access Control List (ACL) configuration.
14181This type has the following parameters:
14182
14183@table @asis
14184@item @code{id} (default: @code{""})
14185An identifier for ether configuration fields to refer to this key. IDs must be
14186unique and must not be empty.
14187
14188@item @code{address} (default: @code{'()})
14189An ordered list of IP addresses, network subnets, or network ranges represented
14190with strings. The query must match one of them. Empty value means that
14191address match is not required.
14192
14193@item @code{key} (default: @code{'()})
14194An ordered list of references to keys represented with strings. The string
14195must match a key ID defined in a @code{knot-key-configuration}. No key means
14196that a key is not require to match that ACL.
14197
14198@item @code{action} (default: @code{'()})
14199An ordered list of actions that are permitted or forbidden by this ACL. Possible
14200values are lists of zero or more elements from @code{'transfer}, @code{'notify}
14201and @code{'update}.
14202
14203@item @code{deny?} (default: @code{#f})
14204When true, the ACL defines restrictions. Listed actions are forbidden. When
14205false, listed actions are allowed.
14206
14207@end table
14208@end deftp
14209
14210@deftp {Data Type} zone-entry
14211Data type represnting a record entry in a zone file.
14212This type has the following parameters:
14213
14214@table @asis
14215@item @code{name} (default: @code{"@@"})
14216The name of the record. @code{"@@"} refers to the origin of the zone. Names
14217are relative to the origin of the zone. For example, in the @code{example.org}
14218zone, @code{"ns.example.org"} actually refers to @code{ns.example.org.example.org}.
14219Names ending with a dot are absolute, which means that @code{"ns.example.org."}
14220refers to @code{ns.example.org}.
14221
14222@item @code{ttl} (default: @code{""})
14223The Time-To-Live (TTL) of this record. If not set, the default TTL is used.
14224
14225@item @code{class} (default: @code{"IN"})
14226The class of the record. Knot currently supports only @code{"IN"} and
14227partially @code{"CH"}.
14228
14229@item @code{type} (default: @code{"A"})
14230The type of the record. Common types include A (IPv4 address), AAAA (IPv6
14231address), NS (Name Server) and MX (Mail eXchange). Many other types are
14232defined.
14233
14234@item @code{data} (default: @code{""})
14235The data contained in the record. For instance an IP address associated with
14236an A record, or a domain name associated with an NS record. Remember that
14237domain names are relative to the origin unless they end with a dot.
14238
14239@end table
14240@end deftp
14241
14242@deftp {Data Type} zone-file
14243Data type representing the content of a zone file.
14244This type has the following parameters:
14245
14246@table @asis
14247@item @code{entries} (default: @code{'()})
14248The list of entries. The SOA record is taken care of, so you don't need to
14249put it in the list of entries. This list should probably contain an entry
14250for your primary authoritative DNS server. Other than using a list of entries
14251directly, you can use @code{define-zone-entries} to define a object containing
14252the list of entries more easily, that you can later pass to the @code{entries}
14253field of the @code{zone-file}.
14254
14255@item @code{origin} (default: @code{""})
14256The name of your zone. This parameter cannot be empty.
14257
14258@item @code{ns} (default: @code{"ns"})
14259The domain of your primary authoritative DNS server. The name is relative to
14260the origin, unless it ends with a dot. It is mandatory that this primary
14261DNS server corresponds to an NS record in the zone and that it is associated
14262to an IP address in the list of entries.
14263
14264@item @code{mail} (default: @code{"hostmaster"})
14265An email address people can contact you at, as the owner of the zone. This
14266is translated as @code{<mail>@@<origin>}.
14267
14268@item @code{serial} (default: @code{1})
14269The serial number of the zone. As this is used to keep track of changes by
14270both slaves and resolvers, it is mandatory that it @emph{never} decreases.
14271Always increment it when you make a change in your zone.
14272
f3853a25
JL
14273@item @code{refresh} (default: @code{(* 2 24 3600)})
14274The frequency at which slaves will do a zone transfer. This value is a number
14275of seconds. It can be computed by multiplications or with
14276@code{(string->duration)}.
ba69e8f7 14277
f3853a25 14278@item @code{retry} (default: @code{(* 15 60)})
ba69e8f7
JL
14279The period after which a slave will retry to contact its master when it fails
14280to do so a first time.
14281
f3853a25 14282@item @code{expiry} (default: @code{(* 14 24 3600)})
ba69e8f7
JL
14283Default TTL of records. Existing records are considered correct for at most
14284this amount of time. After this period, resolvers will invalidate their cache
14285and check again that it still exists.
14286
f3853a25 14287@item @code{nx} (default: @code{3600})
ba69e8f7
JL
14288Default TTL of inexistant records. This delay is usually short because you want
14289your new domains to reach everyone quickly.
14290
14291@end table
14292@end deftp
14293
14294@deftp {Data Type} knot-remote-configuration
14295Data type representing a remote configuration.
14296This type has the following parameters:
14297
14298@table @asis
14299@item @code{id} (default: @code{""})
14300An identifier for other configuration fields to refer to this remote. IDs must
14301be unique and must not be empty.
14302
14303@item @code{address} (default: @code{'()})
14304An ordered list of destination IP addresses. Addresses are tried in sequence.
14305An optional port can be given with the @@ separator. For instance:
14306@code{(list "1.2.3.4" "2.3.4.5@@53")}. Default port is 53.
14307
14308@item @code{via} (default: @code{'()})
14309An ordered list of source IP addresses. An empty list will have Knot choose
14310an appropriate source IP. An optional port can be given with the @@ separator.
14311The default is to choose at random.
14312
14313@item @code{key} (default: @code{#f})
14314A reference to a key, that is a string containing the identifier of a key
14315defined in a @code{knot-key-configuration} field.
14316
14317@end table
14318@end deftp
14319
14320@deftp {Data Type} knot-keystore-configuration
14321Data type representing a keystore to hold dnssec keys.
14322This type has the following parameters:
14323
14324@table @asis
14325@item @code{id} (default: @code{""})
14326The id of the keystore. It must not be empty.
14327
14328@item @code{backend} (default: @code{'pem})
14329The backend to store the keys in. Can be @code{'pem} or @code{'pkcs11}.
14330
14331@item @code{config} (default: @code{"/var/lib/knot/keys/keys"})
14332The configuration string of the backend. An example for the PKCS#11 is:
14333@code{"pkcs11:token=knot;pin-value=1234 /gnu/store/.../lib/pkcs11/libsofthsm2.so"}.
14334For the pem backend, the string reprensents a path in the filesystem.
14335
14336@end table
14337@end deftp
14338
14339@deftp {Data Type} knot-policy-configuration
14340Data type representing a dnssec policy. Knot DNS is able to automatically
14341sign your zones. It can either generate and manage your keys automatically or
14342use keys that you generate.
14343
14344Dnssec is usually implemented using two keys: a Key Signing Key (KSK) that is
14345used to sign the second, and a Zone Signing Key (ZSK) that is used to sign the
14346zone. In order to be trusted, the KSK needs to be present in the parent zone
14347(usually a top-level domain). If your registrar supports dnssec, you will
14348have to send them your KSK's hash so they can add a DS record in their zone.
14349This is not automated and need to be done each time you change your KSK.
14350
14351The policy also defines the lifetime of keys. Usually, ZSK can be changed
14352easily and use weaker cryptographic functions (they use lower parameters) in
14353order to sign records quickly, so they are changed often. The KSK however
14354requires manual interaction with the registrar, so they are changed less often
14355and use stronger parameters because they sign only one record.
14356
14357This type has the following parameters:
14358
14359@table @asis
14360@item @code{id} (default: @code{""})
14361The id of the policy. It must not be empty.
14362
14363@item @code{keystore} (default: @code{"default"})
14364A reference to a keystore, that is a string containing the identifier of a
14365keystore defined in a @code{knot-keystore-configuration} field. The
14366@code{"default"} identifier means the default keystore (a kasp database that
14367was setup by this service).
14368
14369@item @code{manual?} (default: @code{#f})
14370Whether the key management is manual or automatic.
14371
14372@item @code{single-type-signing?} (default: @code{#f})
14373When @code{#t}, use the Single-Type Signing Scheme.
14374
14375@item @code{algorithm} (default: @code{"ecdsap256sha256"})
14376An algorithm of signing keys and issued signatures.
14377
14378@item @code{ksk-size} (default: @code{256})
14379The length of the KSK. Note that this value is correct for the default
14380algorithm, but would be unsecure for other algorithms.
14381
14382@item @code{zsk-size} (default: @code{256})
14383The length of the ZSK. Note that this value is correct for the default
14384algorithm, but would be unsecure for other algorithms.
14385
14386@item @code{dnskey-ttl} (default: @code{'default})
14387The TTL value for DNSKEY records added into zone apex. The special
14388@code{'default} value means same as the zone SOA TTL.
14389
f3853a25 14390@item @code{zsk-lifetime} (default: @code{(* 30 24 3600)})
ba69e8f7
JL
14391The period between ZSK publication and the next rollover initiation.
14392
f3853a25 14393@item @code{propagation-delay} (default: @code{(* 24 3600)})
ba69e8f7
JL
14394An extra delay added for each key rollover step. This value should be high
14395enough to cover propagation of data from the master server to all slaves.
14396
f3853a25 14397@item @code{rrsig-lifetime} (default: @code{(* 14 24 3600)})
ba69e8f7
JL
14398A validity period of newly issued signatures.
14399
f3853a25 14400@item @code{rrsig-refresh} (default: @code{(* 7 24 3600)})
ba69e8f7
JL
14401A period how long before a signature expiration the signature will be refreshed.
14402
14403@item @code{nsec3?} (default: @code{#f})
14404When @code{#t}, NSEC3 will be used instead of NSEC.
14405
14406@item @code{nsec3-iterations} (default: @code{5})
14407The number of additional times the hashing is performed.
14408
14409@item @code{nsec3-salt-length} (default: @code{8})
14410The length of a salt field in octets, which is appended to the original owner
14411name before hashing.
14412
f3853a25 14413@item @code{nsec3-salt-lifetime} (default: @code{(* 30 24 3600)})
ba69e8f7
JL
14414The validity period of newly issued salt field.
14415
14416@end table
14417@end deftp
14418
14419@deftp {Data Type} knot-zone-configuration
14420Data type representing a zone served by Knot.
14421This type has the following parameters:
14422
14423@table @asis
14424@item @code{domain} (default: @code{""})
14425The domain served by this configuration. It must not be empty.
14426
14427@item @code{file} (default: @code{""})
14428The file where this zone is saved. This parameter is ignored by master zones.
14429Empty means default location that depends on the domain name.
14430
14431@item @code{zone} (default: @code{(zone-file)})
14432The content of the zone file. This parameter is ignored by slave zones. It
14433must contain a zone-file record.
14434
14435@item @code{master} (default: @code{'()})
14436A list of master remotes. When empty, this zone is a master. When set, this
14437zone is a slave. This is a list of remotes identifiers.
14438
14439@item @code{ddns-master} (default: @code{#f})
14440The main master. When empty, it defaults to the first master in the list of
14441masters.
14442
14443@item @code{notify} (default: @code{'()})
14444A list of slave remote identifiers.
14445
14446@item @code{acl} (default: @code{'()})
14447A list of acl identifiers.
14448
14449@item @code{semantic-checks?} (default: @code{#f})
14450When set, this adds more semantic checks to the zone.
14451
14452@item @code{disable-any?} (default: @code{#f})
14453When set, this forbids queries of the ANY type.
14454
14455@item @code{zonefile-sync} (default: @code{0})
14456The delay between a modification in memory and on disk. 0 means immediate
14457synchronization.
14458
14459@item @code{serial-policy} (default: @code{'increment})
14460A policy between @code{'increment} and @code{'unixtime}.
14461
14462@end table
14463@end deftp
14464
14465@deftp {Data Type} knot-configuration
14466Data type representing the Knot configuration.
14467This type has the following parameters:
14468
14469@table @asis
14470@item @code{knot} (default: @code{knot})
14471The Knot package.
14472
14473@item @code{run-directory} (default: @code{"/var/run/knot"})
14474The run directory. This directory will be used for pid file and sockets.
14475
14476@item @code{listen-v4} (default: @code{"0.0.0.0"})
14477An ip address on which to listen.
14478
14479@item @code{listen-v6} (default: @code{"::"})
14480An ip address on which to listen.
14481
14482@item @code{listen-port} (default: @code{53})
14483A port on which to listen.
14484
14485@item @code{keys} (default: @code{'()})
14486The list of knot-key-configuration used by this configuration.
14487
14488@item @code{acls} (default: @code{'()})
14489The list of knot-acl-configuration used by this configuration.
14490
14491@item @code{remotes} (default: @code{'()})
14492The list of knot-remote-configuration used by this configuration.
14493
14494@item @code{zones} (default: @code{'()})
14495The list of knot-zone-configuration used by this configuration.
14496
14497@end table
14498@end deftp
14499
2be1b471
JL
14500@node VPN Services
14501@subsubsection VPN Services
14502@cindex VPN (virtual private network)
14503@cindex virtual private network (VPN)
14504
14505The @code{(gnu services vpn)} module provides services related to
14506@dfn{virtual private networks} (VPNs). It provides a @emph{client} service for
14507your machine to connect to a VPN, and a @emph{servire} service for your machine
14508to host a VPN. Both services use @uref{https://openvpn.net/, OpenVPN}.
14509
14510@deffn {Scheme Procedure} openvpn-client-service @
14511 [#:config (openvpn-client-configuration)]
14512
14513Return a service that runs @command{openvpn}, a VPN daemon, as a client.
14514@end deffn
14515
14516@deffn {Scheme Procedure} openvpn-server-service @
14517 [#:config (openvpn-server-configuration)]
14518
14519Return a service that runs @command{openvpn}, a VPN daemon, as a server.
14520
14521Both can be run simultaneously.
14522@end deffn
14523
14524@c %automatically generated documentation
14525
14526Available @code{openvpn-client-configuration} fields are:
14527
1c17a863 14528@deftypevr {@code{openvpn-client-configuration} parameter} package openvpn
2be1b471
JL
14529The OpenVPN package.
14530
14531@end deftypevr
14532
1c17a863 14533@deftypevr {@code{openvpn-client-configuration} parameter} string pid-file
2be1b471
JL
14534The OpenVPN pid file.
14535
14536Defaults to @samp{"/var/run/openvpn/openvpn.pid"}.
14537
14538@end deftypevr
14539
1c17a863 14540@deftypevr {@code{openvpn-client-configuration} parameter} proto proto
2be1b471
JL
14541The protocol (UDP or TCP) used to open a channel between clients and
14542servers.
14543
14544Defaults to @samp{udp}.
14545
14546@end deftypevr
14547
1c17a863 14548@deftypevr {@code{openvpn-client-configuration} parameter} dev dev
2be1b471
JL
14549The device type used to represent the VPN connection.
14550
14551Defaults to @samp{tun}.
14552
14553@end deftypevr
14554
1c17a863 14555@deftypevr {@code{openvpn-client-configuration} parameter} string ca
2be1b471
JL
14556The certificate authority to check connections against.
14557
14558Defaults to @samp{"/etc/openvpn/ca.crt"}.
14559
14560@end deftypevr
14561
1c17a863 14562@deftypevr {@code{openvpn-client-configuration} parameter} string cert
2be1b471
JL
14563The certificate of the machine the daemon is running on. It should be
14564signed by the authority given in @code{ca}.
14565
14566Defaults to @samp{"/etc/openvpn/client.crt"}.
14567
14568@end deftypevr
14569
1c17a863 14570@deftypevr {@code{openvpn-client-configuration} parameter} string key
2be1b471
JL
14571The key of the machine the daemon is running on. It must be the key whose
14572certificate is @code{cert}.
14573
14574Defaults to @samp{"/etc/openvpn/client.key"}.
14575
14576@end deftypevr
14577
1c17a863 14578@deftypevr {@code{openvpn-client-configuration} parameter} boolean comp-lzo?
2be1b471
JL
14579Whether to use the lzo compression algorithm.
14580
14581Defaults to @samp{#t}.
14582
14583@end deftypevr
14584
1c17a863 14585@deftypevr {@code{openvpn-client-configuration} parameter} boolean persist-key?
2be1b471
JL
14586Don't re-read key files across SIGUSR1 or --ping-restart.
14587
14588Defaults to @samp{#t}.
14589
14590@end deftypevr
14591
1c17a863 14592@deftypevr {@code{openvpn-client-configuration} parameter} boolean persist-tun?
2be1b471
JL
14593Don't close and reopen TUN/TAP device or run up/down scripts across
14594SIGUSR1 or --ping-restart restarts.
14595
14596Defaults to @samp{#t}.
14597
14598@end deftypevr
14599
1c17a863 14600@deftypevr {@code{openvpn-client-configuration} parameter} number verbosity
2be1b471
JL
14601Verbosity level.
14602
14603Defaults to @samp{3}.
14604
14605@end deftypevr
14606
1c17a863 14607@deftypevr {@code{openvpn-client-configuration} parameter} tls-auth-client tls-auth
2be1b471
JL
14608Add an additional layer of HMAC authentication on top of the TLS control
14609channel to protect against DoS attacks.
14610
14611Defaults to @samp{#f}.
14612
14613@end deftypevr
14614
1c17a863 14615@deftypevr {@code{openvpn-client-configuration} parameter} key-usage verify-key-usage?
2be1b471
JL
14616Whether to check the server certificate has server usage extension.
14617
14618Defaults to @samp{#t}.
14619
14620@end deftypevr
14621
1c17a863 14622@deftypevr {@code{openvpn-client-configuration} parameter} bind bind?
2be1b471
JL
14623Bind to a specific local port number.
14624
14625Defaults to @samp{#f}.
14626
14627@end deftypevr
14628
1c17a863 14629@deftypevr {@code{openvpn-client-configuration} parameter} resolv-retry resolv-retry?
2be1b471
JL
14630Retry resolving server address.
14631
14632Defaults to @samp{#t}.
14633
14634@end deftypevr
14635
1c17a863 14636@deftypevr {@code{openvpn-client-configuration} parameter} openvpn-remote-list remote
2be1b471
JL
14637A list of remote servers to connect to.
14638
14639Defaults to @samp{()}.
14640
14641Available @code{openvpn-remote-configuration} fields are:
14642
1c17a863 14643@deftypevr {@code{openvpn-remote-configuration} parameter} string name
2be1b471
JL
14644Server name.
14645
14646Defaults to @samp{"my-server"}.
14647
14648@end deftypevr
14649
1c17a863 14650@deftypevr {@code{openvpn-remote-configuration} parameter} number port
2be1b471
JL
14651Port number the server listens to.
14652
14653Defaults to @samp{1194}.
14654
14655@end deftypevr
14656
14657@end deftypevr
14658@c %end of automatic openvpn-client documentation
14659
14660@c %automatically generated documentation
14661
14662Available @code{openvpn-server-configuration} fields are:
14663
1c17a863 14664@deftypevr {@code{openvpn-server-configuration} parameter} package openvpn
2be1b471
JL
14665The OpenVPN package.
14666
14667@end deftypevr
14668
1c17a863 14669@deftypevr {@code{openvpn-server-configuration} parameter} string pid-file
2be1b471
JL
14670The OpenVPN pid file.
14671
14672Defaults to @samp{"/var/run/openvpn/openvpn.pid"}.
14673
14674@end deftypevr
14675
1c17a863 14676@deftypevr {@code{openvpn-server-configuration} parameter} proto proto
2be1b471
JL
14677The protocol (UDP or TCP) used to open a channel between clients and
14678servers.
14679
14680Defaults to @samp{udp}.
14681
14682@end deftypevr
14683
1c17a863 14684@deftypevr {@code{openvpn-server-configuration} parameter} dev dev
2be1b471
JL
14685The device type used to represent the VPN connection.
14686
14687Defaults to @samp{tun}.
14688
14689@end deftypevr
14690
1c17a863 14691@deftypevr {@code{openvpn-server-configuration} parameter} string ca
2be1b471
JL
14692The certificate authority to check connections against.
14693
14694Defaults to @samp{"/etc/openvpn/ca.crt"}.
14695
14696@end deftypevr
14697
1c17a863 14698@deftypevr {@code{openvpn-server-configuration} parameter} string cert
2be1b471
JL
14699The certificate of the machine the daemon is running on. It should be
14700signed by the authority given in @code{ca}.
14701
14702Defaults to @samp{"/etc/openvpn/client.crt"}.
14703
14704@end deftypevr
14705
1c17a863 14706@deftypevr {@code{openvpn-server-configuration} parameter} string key
2be1b471
JL
14707The key of the machine the daemon is running on. It must be the key whose
14708certificate is @code{cert}.
14709
14710Defaults to @samp{"/etc/openvpn/client.key"}.
14711
14712@end deftypevr
14713
1c17a863 14714@deftypevr {@code{openvpn-server-configuration} parameter} boolean comp-lzo?
2be1b471
JL
14715Whether to use the lzo compression algorithm.
14716
14717Defaults to @samp{#t}.
14718
14719@end deftypevr
14720
1c17a863 14721@deftypevr {@code{openvpn-server-configuration} parameter} boolean persist-key?
2be1b471
JL
14722Don't re-read key files across SIGUSR1 or --ping-restart.
14723
14724Defaults to @samp{#t}.
14725
14726@end deftypevr
14727
1c17a863 14728@deftypevr {@code{openvpn-server-configuration} parameter} boolean persist-tun?
2be1b471
JL
14729Don't close and reopen TUN/TAP device or run up/down scripts across
14730SIGUSR1 or --ping-restart restarts.
14731
14732Defaults to @samp{#t}.
14733
14734@end deftypevr
14735
1c17a863 14736@deftypevr {@code{openvpn-server-configuration} parameter} number verbosity
2be1b471
JL
14737Verbosity level.
14738
14739Defaults to @samp{3}.
14740
14741@end deftypevr
14742
1c17a863 14743@deftypevr {@code{openvpn-server-configuration} parameter} tls-auth-server tls-auth
2be1b471
JL
14744Add an additional layer of HMAC authentication on top of the TLS control
14745channel to protect against DoS attacks.
14746
14747Defaults to @samp{#f}.
14748
14749@end deftypevr
14750
1c17a863 14751@deftypevr {@code{openvpn-server-configuration} parameter} number port
2be1b471
JL
14752Specifies the port number on which the server listens.
14753
14754Defaults to @samp{1194}.
14755
14756@end deftypevr
14757
1c17a863 14758@deftypevr {@code{openvpn-server-configuration} parameter} ip-mask server
2be1b471
JL
14759An ip and mask specifying the subnet inside the virtual network.
14760
14761Defaults to @samp{"10.8.0.0 255.255.255.0"}.
14762
14763@end deftypevr
14764
1c17a863 14765@deftypevr {@code{openvpn-server-configuration} parameter} cidr6 server-ipv6
2be1b471
JL
14766A CIDR notation specifying the IPv6 subnet inside the virtual network.
14767
14768Defaults to @samp{#f}.
14769
14770@end deftypevr
14771
1c17a863 14772@deftypevr {@code{openvpn-server-configuration} parameter} string dh
2be1b471
JL
14773The Diffie-Hellman parameters file.
14774
14775Defaults to @samp{"/etc/openvpn/dh2048.pem"}.
14776
14777@end deftypevr
14778
1c17a863 14779@deftypevr {@code{openvpn-server-configuration} parameter} string ifconfig-pool-persist
2be1b471
JL
14780The file that records client IPs.
14781
14782Defaults to @samp{"/etc/openvpn/ipp.txt"}.
14783
14784@end deftypevr
14785
1c17a863 14786@deftypevr {@code{openvpn-server-configuration} parameter} gateway redirect-gateway?
2be1b471
JL
14787When true, the server will act as a gateway for its clients.
14788
14789Defaults to @samp{#f}.
14790
14791@end deftypevr
14792
1c17a863 14793@deftypevr {@code{openvpn-server-configuration} parameter} boolean client-to-client?
9fc221b5 14794When true, clients are allowed to talk to each other inside the VPN.
2be1b471
JL
14795
14796Defaults to @samp{#f}.
14797
14798@end deftypevr
14799
1c17a863 14800@deftypevr {@code{openvpn-server-configuration} parameter} keepalive keepalive
2be1b471
JL
14801Causes ping-like messages to be sent back and forth over the link so
14802that each side knows when the other side has gone down. @code{keepalive}
14803requires a pair. The first element is the period of the ping sending,
14804and the second element is the timeout before considering the other side
14805down.
14806
14807@end deftypevr
14808
1c17a863 14809@deftypevr {@code{openvpn-server-configuration} parameter} number max-clients
2be1b471
JL
14810The maximum number of clients.
14811
14812Defaults to @samp{100}.
14813
14814@end deftypevr
14815
1c17a863 14816@deftypevr {@code{openvpn-server-configuration} parameter} string status
2be1b471 14817The status file. This file shows a small report on current connection.
9fc221b5 14818It is truncated and rewritten every minute.
2be1b471
JL
14819
14820Defaults to @samp{"/var/run/openvpn/status"}.
14821
14822@end deftypevr
14823
1c17a863 14824@deftypevr {@code{openvpn-server-configuration} parameter} openvpn-ccd-list client-config-dir
2be1b471
JL
14825The list of configuration for some clients.
14826
14827Defaults to @samp{()}.
14828
14829Available @code{openvpn-ccd-configuration} fields are:
14830
1c17a863 14831@deftypevr {@code{openvpn-ccd-configuration} parameter} string name
2be1b471
JL
14832Client name.
14833
14834Defaults to @samp{"client"}.
14835
14836@end deftypevr
14837
1c17a863 14838@deftypevr {@code{openvpn-ccd-configuration} parameter} ip-mask iroute
2be1b471
JL
14839Client own network
14840
14841Defaults to @samp{#f}.
14842
14843@end deftypevr
14844
1c17a863 14845@deftypevr {@code{openvpn-ccd-configuration} parameter} ip-mask ifconfig-push
2be1b471
JL
14846Client VPN IP.
14847
14848Defaults to @samp{#f}.
14849
14850@end deftypevr
14851
14852@end deftypevr
14853
14854
14855@c %end of automatic openvpn-server documentation
14856
14857
eb419bc9
JD
14858@node Network File System
14859@subsubsection Network File System
14860@cindex NFS
fe1a39d3 14861
eb419bc9
JD
14862The @code{(gnu services nfs)} module provides the following services,
14863which are most commonly used in relation to mounting or exporting
14864directory trees as @dfn{network file systems} (NFS).
d6a07ee6
JD
14865
14866@subsubheading RPC Bind Service
14867@cindex rpcbind
14868
eb419bc9
JD
14869The RPC Bind service provides a facility to map program numbers into
14870universal addresses.
14871Many NFS related services use this facility. Hence it is automatically
14872started when a dependent service starts.
d6a07ee6
JD
14873
14874@defvr {Scheme Variable} rpcbind-service-type
14875A service type for the RPC portmapper daemon.
14876@end defvr
14877
14878
14879@deftp {Data Type} rpcbind-configuration
14880Data type representing the configuration of the RPC Bind Service.
14881This type has the following parameters:
14882@table @asis
14883@item @code{rpcbind} (default: @code{rpcbind})
14884The rpcbind package to use.
14885
14886@item @code{warm-start?} (default: @code{#t})
14887If this parameter is @code{#t}, then the daemon will read a
14888state file on startup thus reloading state information saved by a previous
14889instance.
14890@end table
14891@end deftp
14892
eb419bc9
JD
14893
14894@subsubheading Pipefs Pseudo File System
14895@cindex pipefs
14896@cindex rpc_pipefs
14897
14898The pipefs file system is used to transfer NFS related data
14899between the kernel and user space programs.
14900
14901@defvr {Scheme Variable} pipefs-service-type
14902A service type for the pipefs pseudo file system.
14903@end defvr
14904
14905@deftp {Data Type} pipefs-configuration
14906Data type representing the configuration of the pipefs pseudo file system service.
14907This type has the following parameters:
14908@table @asis
14909@item @code{mount-point} (default: @code{"/var/lib/nfs/rpc_pipefs"})
14910The directory to which the file system is to be attached.
14911@end table
14912@end deftp
14913
14914
14915@subsubheading GSS Daemon Service
14916@cindex GSSD
14917@cindex GSS
14918@cindex global security system
14919
14920The @dfn{global security system} (GSS) daemon provides strong security for RPC
14921based protocols.
14922Before exchanging RPC requests an RPC client must establish a security
14923context. Typically this is done using the Kerberos command @command{kinit}
859e367d 14924or automatically at login time using PAM services (@pxref{Kerberos Services}).
eb419bc9
JD
14925
14926@defvr {Scheme Variable} gss-service-type
14927A service type for the Global Security System (GSS) daemon.
14928@end defvr
14929
14930@deftp {Data Type} gss-configuration
14931Data type representing the configuration of the GSS daemon service.
14932This type has the following parameters:
14933@table @asis
14934@item @code{nfs-utils} (default: @code{nfs-utils})
14935The package in which the @command{rpc.gssd} command is to be found.
14936
14937@item @code{pipefs-directory} (default: @code{"/var/lib/nfs/rpc_pipefs"})
14938The directory where the pipefs file system is mounted.
14939
14940@end table
14941@end deftp
14942
14943
14944@subsubheading IDMAP Daemon Service
14945@cindex idmapd
14946@cindex name mapper
14947
14948The idmap daemon service provides mapping between user IDs and user names.
14949Typically it is required in order to access file systems mounted via NFSv4.
14950
14951@defvr {Scheme Variable} idmap-service-type
14952A service type for the Identity Mapper (IDMAP) daemon.
14953@end defvr
14954
14955@deftp {Data Type} idmap-configuration
14956Data type representing the configuration of the IDMAP daemon service.
14957This type has the following parameters:
14958@table @asis
14959@item @code{nfs-utils} (default: @code{nfs-utils})
14960The package in which the @command{rpc.idmapd} command is to be found.
14961
14962@item @code{pipefs-directory} (default: @code{"/var/lib/nfs/rpc_pipefs"})
14963The directory where the pipefs file system is mounted.
14964
14965@item @code{domain} (default: @code{#f})
14966The local NFSv4 domain name.
14967This must be a string or @code{#f}.
14968If it is @code{#f} then the daemon will use the host's fully qualified domain name.
14969
14970@end table
14971@end deftp
14972
a7cf4eb6
ML
14973@node Continuous Integration
14974@subsubsection Continuous Integration
14975
14976@cindex continuous integration
14977@uref{https://notabug.org/mthl/cuirass, Cuirass} is a continuous
14978integration tool for Guix. It can be used both for development and for
14979providing substitutes to others (@pxref{Substitutes}).
14980
14981The @code{(gnu services cuirass)} module provides the following service.
14982
231eddc8
LC
14983@defvr {Scheme Procedure} cuirass-service-type
14984The type of the Cuirass service. Its value must be a
14985@code{cuirass-configuration} object, as described below.
14986@end defvr
a7cf4eb6 14987
231eddc8
LC
14988To add build jobs, you have to set the @code{specifications} field of
14989the configuration. Here is an example of a service defining a build job
14990based on a specification that can be found in Cuirass source tree. This
14991service polls the Guix repository and builds a subset of the Guix
14992packages, as prescribed in the @file{gnu-system.scm} example spec:
a7cf4eb6
ML
14993
14994@example
8de938d5
LC
14995(let ((spec #~((#:name . "guix")
14996 (#:url . "git://git.savannah.gnu.org/guix.git")
14997 (#:load-path . ".")
14998
14999 ;; Here we must provide an absolute file name.
15000 ;; We take jobs from one of the examples provided
15001 ;; by Cuirass.
15002 (#:file . #$(file-append
15003 cuirass
15004 "/tests/gnu-system.scm"))
15005
15006 (#:proc . hydra-jobs)
15007 (#:arguments (subset . "hello"))
15008 (#:branch . "master"))))
231eddc8
LC
15009 (service cuirass-service-type
15010 (cuirass-configuration
15011 (specifications #~(list #$spec)))))
a7cf4eb6
ML
15012@end example
15013
231eddc8 15014While information related to build jobs is located directly in the
a7cf4eb6
ML
15015specifications, global settings for the @command{cuirass} process are
15016accessible in other @code{cuirass-configuration} fields.
15017
15018@deftp {Data Type} cuirass-configuration
15019Data type representing the configuration of Cuirass.
15020
15021@table @asis
b17e326f
LC
15022@item @code{log-file} (default: @code{"/var/log/cuirass.log"})
15023Location of the log file.
15024
463995da 15025@item @code{cache-directory} (default: @code{"/var/cache/cuirass"})
a7cf4eb6
ML
15026Location of the repository cache.
15027
15028@item @code{user} (default: @code{"cuirass"})
15029Owner of the @code{cuirass} process.
15030
15031@item @code{group} (default: @code{"cuirass"})
15032Owner's group of the @code{cuirass} process.
15033
15034@item @code{interval} (default: @code{60})
15035Number of seconds between the poll of the repositories followed by the
15036Cuirass jobs.
15037
15038@item @code{database} (default: @code{"/var/run/cuirass/cuirass.db"})
15039Location of sqlite database which contains the build results and previously
15040added specifications.
15041
11b7717d
MO
15042@item @code{port} (default: @code{8080})
15043Port number used by the HTTP server.
15044
8de938d5
LC
15045@item @code{specifications} (default: @code{#~'()})
15046A gexp (@pxref{G-Expressions}) that evaluates to a list of specifications,
15047where a specification is an association list
a7cf4eb6
ML
15048(@pxref{Associations Lists,,, guile, GNU Guile Reference Manual}) whose
15049keys are keywords (@code{#:keyword-example}) as shown in the example
15050above.
15051
15052@item @code{use-substitutes?} (default: @code{#f})
15053This allows using substitutes to avoid building every dependencies of a job
15054from source.
15055
15056@item @code{one-shot?} (default: @code{#f})
15057Only evaluate specifications and build derivations once.
379b6ba5 15058
c800fd56
MO
15059@item @code{fallback?} (default: @code{#f})
15060When substituting a pre-built binary fails, fall back to building
15061packages locally.
15062
eb122280
MO
15063@item @code{load-path} (default: @code{'()})
15064This allows users to define their own packages and make them visible to
15065cuirass as in @command{guix build} command.
15066
379b6ba5
LC
15067@item @code{cuirass} (default: @code{cuirass})
15068The Cuirass package to use.
a7cf4eb6
ML
15069@end table
15070@end deftp
eb419bc9 15071
bfbf6e1e
MO
15072@node Power management Services
15073@subsubsection Power management Services
15074
15075@cindex power management with TLP
15076The @code{(gnu services pm)} module provides a Guix service definition
15077for the Linux power management tool TLP.
15078
15079TLP enables various powersaving modes in userspace and kernel.
15080Contrary to @code{upower-service}, it is not a passive,
15081monitoring tool, as it will apply custom settings each time a new power
15082source is detected. More information can be found at
15083@uref{http://linrunner.de/en/tlp/tlp.html, TLP home page}.
15084
15085@deffn {Scheme Variable} tlp-service-type
15086The service type for the TLP tool. Its value should be a valid
3d3c5650
LC
15087TLP configuration (see below). To use the default settings, simply
15088write:
bfbf6e1e 15089@example
3d3c5650 15090(service tlp-service-type)
bfbf6e1e
MO
15091@end example
15092@end deffn
15093
15094By default TLP does not need much configuration but most TLP parameters
15095can be tweaked using @code{tlp-configuration}.
15096
15097Each parameter definition is preceded by its type; for example,
15098@samp{boolean foo} indicates that the @code{foo} parameter
15099should be specified as a boolean. Types starting with
15100@code{maybe-} denote parameters that won't show up in TLP config file
15101when their value is @code{'disabled}.
15102
15103@c The following documentation was initially generated by
15104@c (generate-tlp-documentation) in (gnu services pm). Manually maintained
15105@c documentation is better, so we shouldn't hesitate to edit below as
15106@c needed. However if the change you want to make to this documentation
15107@c can be done in an automated way, it's probably easier to change
15108@c (generate-documentation) than to make it below and have to deal with
15109@c the churn as TLP updates.
15110
15111Available @code{tlp-configuration} fields are:
15112
15113@deftypevr {@code{tlp-configuration} parameter} package tlp
15114The TLP package.
15115
15116@end deftypevr
15117
15118@deftypevr {@code{tlp-configuration} parameter} boolean tlp-enable?
15119Set to true if you wish to enable TLP.
15120
15121Defaults to @samp{#t}.
15122
15123@end deftypevr
15124
15125@deftypevr {@code{tlp-configuration} parameter} string tlp-default-mode
15126Default mode when no power supply can be detected. Alternatives are AC
15127and BAT.
15128
15129Defaults to @samp{"AC"}.
15130
15131@end deftypevr
15132
15133@deftypevr {@code{tlp-configuration} parameter} non-negative-integer disk-idle-secs-on-ac
15134Number of seconds Linux kernel has to wait after the disk goes idle,
15135before syncing on AC.
15136
15137Defaults to @samp{0}.
15138
15139@end deftypevr
15140
15141@deftypevr {@code{tlp-configuration} parameter} non-negative-integer disk-idle-secs-on-bat
15142Same as @code{disk-idle-ac} but on BAT mode.
15143
15144Defaults to @samp{2}.
15145
15146@end deftypevr
15147
15148@deftypevr {@code{tlp-configuration} parameter} non-negative-integer max-lost-work-secs-on-ac
15149Dirty pages flushing periodicity, expressed in seconds.
15150
15151Defaults to @samp{15}.
15152
15153@end deftypevr
15154
15155@deftypevr {@code{tlp-configuration} parameter} non-negative-integer max-lost-work-secs-on-bat
15156Same as @code{max-lost-work-secs-on-ac} but on BAT mode.
15157
15158Defaults to @samp{60}.
15159
15160@end deftypevr
15161
15162@deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list cpu-scaling-governor-on-ac
15163CPU frequency scaling governor on AC mode. With intel_pstate driver,
15164alternatives are powersave and performance. With acpi-cpufreq driver,
15165alternatives are ondemand, powersave, performance and conservative.
15166
15167Defaults to @samp{disabled}.
15168
15169@end deftypevr
15170
15171@deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list cpu-scaling-governor-on-bat
15172Same as @code{cpu-scaling-governor-on-ac} but on BAT mode.
15173
15174Defaults to @samp{disabled}.
15175
15176@end deftypevr
15177
15178@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-min-freq-on-ac
15179Set the min available frequency for the scaling governor on AC.
15180
15181Defaults to @samp{disabled}.
15182
15183@end deftypevr
15184
15185@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-max-freq-on-ac
15186Set the max available frequency for the scaling governor on AC.
15187
15188Defaults to @samp{disabled}.
15189
15190@end deftypevr
15191
15192@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-min-freq-on-bat
15193Set the min available frequency for the scaling governor on BAT.
15194
15195Defaults to @samp{disabled}.
15196
15197@end deftypevr
15198
15199@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-max-freq-on-bat
15200Set the max available frequency for the scaling governor on BAT.
15201
15202Defaults to @samp{disabled}.
15203
15204@end deftypevr
15205
15206@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-min-perf-on-ac
15207Limit the min P-state to control the power dissipation of the CPU, in AC
15208mode. Values are stated as a percentage of the available performance.
15209
15210Defaults to @samp{disabled}.
15211
15212@end deftypevr
15213
15214@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-max-perf-on-ac
15215Limit the max P-state to control the power dissipation of the CPU, in AC
15216mode. Values are stated as a percentage of the available performance.
15217
15218Defaults to @samp{disabled}.
15219
15220@end deftypevr
15221
15222@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-min-perf-on-bat
15223Same as @code{cpu-min-perf-on-ac} on BAT mode.
15224
15225Defaults to @samp{disabled}.
15226
15227@end deftypevr
15228
15229@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-max-perf-on-bat
15230Same as @code{cpu-max-perf-on-ac} on BAT mode.
15231
15232Defaults to @samp{disabled}.
15233
15234@end deftypevr
15235
15236@deftypevr {@code{tlp-configuration} parameter} maybe-boolean cpu-boost-on-ac?
15237Enable CPU turbo boost feature on AC mode.
15238
15239Defaults to @samp{disabled}.
15240
15241@end deftypevr
15242
15243@deftypevr {@code{tlp-configuration} parameter} maybe-boolean cpu-boost-on-bat?
15244Same as @code{cpu-boost-on-ac?} on BAT mode.
15245
15246Defaults to @samp{disabled}.
15247
15248@end deftypevr
15249
15250@deftypevr {@code{tlp-configuration} parameter} boolean sched-powersave-on-ac?
15251Allow Linux kernel to minimize the number of CPU cores/hyper-threads
15252used under light load conditions.
15253
15254Defaults to @samp{#f}.
15255
15256@end deftypevr
15257
15258@deftypevr {@code{tlp-configuration} parameter} boolean sched-powersave-on-bat?
15259Same as @code{sched-powersave-on-ac?} but on BAT mode.
15260
15261Defaults to @samp{#t}.
15262
15263@end deftypevr
15264
15265@deftypevr {@code{tlp-configuration} parameter} boolean nmi-watchdog?
15266Enable Linux kernel NMI watchdog.
15267
15268Defaults to @samp{#f}.
15269
15270@end deftypevr
15271
15272@deftypevr {@code{tlp-configuration} parameter} maybe-string phc-controls
15273For Linux kernels with PHC patch applied, change CPU voltages. An
15274example value would be @samp{"F:V F:V F:V F:V"}.
15275
15276Defaults to @samp{disabled}.
15277
15278@end deftypevr
15279
15280@deftypevr {@code{tlp-configuration} parameter} string energy-perf-policy-on-ac
15281Set CPU performance versus energy saving policy on AC. Alternatives are
15282performance, normal, powersave.
15283
15284Defaults to @samp{"performance"}.
15285
15286@end deftypevr
15287
15288@deftypevr {@code{tlp-configuration} parameter} string energy-perf-policy-on-bat
15289Same as @code{energy-perf-policy-ac} but on BAT mode.
15290
15291Defaults to @samp{"powersave"}.
15292
15293@end deftypevr
15294
15295@deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disks-devices
15296Hard disk devices.
15297
15298@end deftypevr
15299
15300@deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disk-apm-level-on-ac
15301Hard disk advanced power management level.
15302
15303@end deftypevr
15304
15305@deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disk-apm-level-on-bat
15306Same as @code{disk-apm-bat} but on BAT mode.
15307
15308@end deftypevr
15309
15310@deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-spindown-timeout-on-ac
15311Hard disk spin down timeout. One value has to be specified for each
15312declared hard disk.
15313
15314Defaults to @samp{disabled}.
15315
15316@end deftypevr
15317
15318@deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-spindown-timeout-on-bat
15319Same as @code{disk-spindown-timeout-on-ac} but on BAT mode.
15320
15321Defaults to @samp{disabled}.
15322
15323@end deftypevr
15324
15325@deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-iosched
15326Select IO scheduler for disk devices. One value has to be specified for
15327each declared hard disk. Example alternatives are cfq, deadline and
15328noop.
15329
15330Defaults to @samp{disabled}.
15331
15332@end deftypevr
15333
15334@deftypevr {@code{tlp-configuration} parameter} string sata-linkpwr-on-ac
15335SATA aggressive link power management (ALPM) level. Alternatives are
15336min_power, medium_power, max_performance.
15337
15338Defaults to @samp{"max_performance"}.
15339
15340@end deftypevr
15341
15342@deftypevr {@code{tlp-configuration} parameter} string sata-linkpwr-on-bat
15343Same as @code{sata-linkpwr-ac} but on BAT mode.
15344
15345Defaults to @samp{"min_power"}.
15346
15347@end deftypevr
15348
15349@deftypevr {@code{tlp-configuration} parameter} maybe-string sata-linkpwr-blacklist
15350Exclude specified SATA host devices for link power management.
15351
15352Defaults to @samp{disabled}.
15353
15354@end deftypevr
15355
15356@deftypevr {@code{tlp-configuration} parameter} maybe-on-off-boolean ahci-runtime-pm-on-ac?
15357Enable Runtime Power Management for AHCI controller and disks on AC
15358mode.
15359
15360Defaults to @samp{disabled}.
15361
15362@end deftypevr
15363
15364@deftypevr {@code{tlp-configuration} parameter} maybe-on-off-boolean ahci-runtime-pm-on-bat?
15365Same as @code{ahci-runtime-pm-on-ac} on BAT mode.
15366
15367Defaults to @samp{disabled}.
15368
15369@end deftypevr
15370
15371@deftypevr {@code{tlp-configuration} parameter} non-negative-integer ahci-runtime-pm-timeout
15372Seconds of inactivity before disk is suspended.
15373
15374Defaults to @samp{15}.
15375
15376@end deftypevr
15377
15378@deftypevr {@code{tlp-configuration} parameter} string pcie-aspm-on-ac
15379PCI Express Active State Power Management level. Alternatives are
15380default, performance, powersave.
15381
15382Defaults to @samp{"performance"}.
15383
15384@end deftypevr
15385
15386@deftypevr {@code{tlp-configuration} parameter} string pcie-aspm-on-bat
15387Same as @code{pcie-aspm-ac} but on BAT mode.
15388
15389Defaults to @samp{"powersave"}.
15390
15391@end deftypevr
15392
15393@deftypevr {@code{tlp-configuration} parameter} string radeon-power-profile-on-ac
15394Radeon graphics clock speed level. Alternatives are low, mid, high,
15395auto, default.
15396
15397Defaults to @samp{"high"}.
15398
15399@end deftypevr
15400
15401@deftypevr {@code{tlp-configuration} parameter} string radeon-power-profile-on-bat
15402Same as @code{radeon-power-ac} but on BAT mode.
15403
15404Defaults to @samp{"low"}.
15405
15406@end deftypevr
15407
15408@deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-state-on-ac
15409Radeon dynamic power management method (DPM). Alternatives are battery,
15410performance.
15411
15412Defaults to @samp{"performance"}.
15413
15414@end deftypevr
15415
15416@deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-state-on-bat
15417Same as @code{radeon-dpm-state-ac} but on BAT mode.
15418
15419Defaults to @samp{"battery"}.
15420
15421@end deftypevr
15422
15423@deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-perf-level-on-ac
15424Radeon DPM performance level. Alternatives are auto, low, high.
15425
15426Defaults to @samp{"auto"}.
15427
15428@end deftypevr
15429
15430@deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-perf-level-on-bat
15431Same as @code{radeon-dpm-perf-ac} but on BAT mode.
15432
15433Defaults to @samp{"auto"}.
15434
15435@end deftypevr
15436
15437@deftypevr {@code{tlp-configuration} parameter} on-off-boolean wifi-pwr-on-ac?
15438Wifi power saving mode.
15439
15440Defaults to @samp{#f}.
15441
15442@end deftypevr
15443
15444@deftypevr {@code{tlp-configuration} parameter} on-off-boolean wifi-pwr-on-bat?
15445Same as @code{wifi-power-ac?} but on BAT mode.
15446
15447Defaults to @samp{#t}.
15448
15449@end deftypevr
15450
15451@deftypevr {@code{tlp-configuration} parameter} y-n-boolean wol-disable?
15452Disable wake on LAN.
15453
15454Defaults to @samp{#t}.
15455
15456@end deftypevr
15457
15458@deftypevr {@code{tlp-configuration} parameter} non-negative-integer sound-power-save-on-ac
15459Timeout duration in seconds before activating audio power saving on
15460Intel HDA and AC97 devices. A value of 0 disables power saving.
15461
15462Defaults to @samp{0}.
15463
15464@end deftypevr
15465
15466@deftypevr {@code{tlp-configuration} parameter} non-negative-integer sound-power-save-on-bat
15467Same as @code{sound-powersave-ac} but on BAT mode.
15468
15469Defaults to @samp{1}.
15470
15471@end deftypevr
15472
15473@deftypevr {@code{tlp-configuration} parameter} y-n-boolean sound-power-save-controller?
15474Disable controller in powersaving mode on Intel HDA devices.
15475
15476Defaults to @samp{#t}.
15477
15478@end deftypevr
15479
15480@deftypevr {@code{tlp-configuration} parameter} boolean bay-poweroff-on-bat?
15481Enable optical drive in UltraBay/MediaBay on BAT mode. Drive can be
15482powered on again by releasing (and reinserting) the eject lever or by
15483pressing the disc eject button on newer models.
15484
15485Defaults to @samp{#f}.
15486
15487@end deftypevr
15488
15489@deftypevr {@code{tlp-configuration} parameter} string bay-device
15490Name of the optical drive device to power off.
15491
15492Defaults to @samp{"sr0"}.
15493
15494@end deftypevr
15495
15496@deftypevr {@code{tlp-configuration} parameter} string runtime-pm-on-ac
15497Runtime Power Management for PCI(e) bus devices. Alternatives are on
15498and auto.
15499
15500Defaults to @samp{"on"}.
15501
15502@end deftypevr
15503
15504@deftypevr {@code{tlp-configuration} parameter} string runtime-pm-on-bat
15505Same as @code{runtime-pm-ac} but on BAT mode.
15506
15507Defaults to @samp{"auto"}.
15508
15509@end deftypevr
15510
15511@deftypevr {@code{tlp-configuration} parameter} boolean runtime-pm-all?
15512Runtime Power Management for all PCI(e) bus devices, except blacklisted
15513ones.
15514
15515Defaults to @samp{#t}.
15516
15517@end deftypevr
15518
15519@deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list runtime-pm-blacklist
9fc221b5 15520Exclude specified PCI(e) device addresses from Runtime Power Management.
bfbf6e1e
MO
15521
15522Defaults to @samp{disabled}.
15523
15524@end deftypevr
15525
15526@deftypevr {@code{tlp-configuration} parameter} space-separated-string-list runtime-pm-driver-blacklist
15527Exclude PCI(e) devices assigned to the specified drivers from Runtime
15528Power Management.
15529
15530@end deftypevr
15531
15532@deftypevr {@code{tlp-configuration} parameter} boolean usb-autosuspend?
15533Enable USB autosuspend feature.
15534
15535Defaults to @samp{#t}.
15536
15537@end deftypevr
15538
15539@deftypevr {@code{tlp-configuration} parameter} maybe-string usb-blacklist
15540Exclude specified devices from USB autosuspend.
15541
15542Defaults to @samp{disabled}.
15543
15544@end deftypevr
15545
15546@deftypevr {@code{tlp-configuration} parameter} boolean usb-blacklist-wwan?
15547Exclude WWAN devices from USB autosuspend.
15548
15549Defaults to @samp{#t}.
15550
15551@end deftypevr
15552
15553@deftypevr {@code{tlp-configuration} parameter} maybe-string usb-whitelist
15554Include specified devices into USB autosuspend, even if they are already
15555excluded by the driver or via @code{usb-blacklist-wwan?}.
15556
15557Defaults to @samp{disabled}.
15558
15559@end deftypevr
15560
15561@deftypevr {@code{tlp-configuration} parameter} maybe-boolean usb-autosuspend-disable-on-shutdown?
15562Enable USB autosuspend before shutdown.
15563
15564Defaults to @samp{disabled}.
15565
15566@end deftypevr
15567
15568@deftypevr {@code{tlp-configuration} parameter} boolean restore-device-state-on-startup?
15569Restore radio device state (bluetooth, wifi, wwan) from previous
15570shutdown on system startup.
15571
15572Defaults to @samp{#f}.
15573
15574@end deftypevr
15575
d7fa39cc
CAW
15576
15577The @code{(gnu services pm)} module provides an interface to
15578thermald, a CPU frequency scaling service which helps prevent overheating.
15579
15580@defvr {Scheme Variable} thermald-service-type
15581This is the service type for
15582@uref{https://01.org/linux-thermal-daemon/, thermald}, the Linux
15583Thermal Daemon, which is responsible for controlling the thermal state
15584of processors and preventing overheating.
15585@end defvr
15586
15587@deftp {Data Type} thermald-configuration
15588Data type representing the configuration of @code{thermald-service-type}.
15589
15590@table @asis
15591@item @code{ignore-cpuid-check?} (default: @code{#f})
15592Ignore cpuid check for supported CPU models.
15593
15594@item @code{thermald} (default: @var{thermald})
15595Package object of thermald.
15596
15597@end table
15598@end deftp
15599
15600
eb419bc9
JD
15601@node Miscellaneous Services
15602@subsubsection Miscellaneous Services
15603
296bf4d5
SB
15604@cindex sysctl
15605@subsubheading System Control Service
15606
15607The @code{(gnu services sysctl)} provides a service to configure kernel
15608parameters at boot.
15609
15610@defvr {Scheme Variable} sysctl-service-type
15611The service type for @command{sysctl}, which modifies kernel parameters
15612under @file{/proc/sys/}. To enable IPv4 forwarding, it can be
15613instantiated as:
15614
15615@example
15616(service sysctl-service-type
15617 (sysctl-configuration
15618 (settings '(("net.ipv4.ip_forward" . "1")))))
15619@end example
15620@end defvr
15621
15622@deftp {Data Type} sysctl-configuration
15623The data type representing the configuration of @command{sysctl}.
15624
15625@table @asis
15626@item @code{sysctl} (default: @code{(file-append procps "/sbin/sysctl"})
15627The @command{sysctl} executable to use.
15628
15629@item @code{settings} (default: @code{'()})
15630An association list specifies kernel parameters and their values.
15631@end table
15632@end deftp
eb419bc9 15633
8ff4dcbe
DC
15634@cindex lirc
15635@subsubheading Lirc Service
15636
fe1a39d3
LC
15637The @code{(gnu services lirc)} module provides the following service.
15638
be1c2c54 15639@deffn {Scheme Procedure} lirc-service [#:lirc lirc] @
fe1a39d3
LC
15640 [#:device #f] [#:driver #f] [#:config-file #f] @
15641 [#:extra-options '()]
15642Return a service that runs @url{http://www.lirc.org,LIRC}, a daemon that
15643decodes infrared signals from remote controls.
15644
15645Optionally, @var{device}, @var{driver} and @var{config-file}
15646(configuration file name) may be specified. See @command{lircd} manual
15647for details.
15648
15649Finally, @var{extra-options} is a list of additional command-line options
15650passed to @command{lircd}.
15651@end deffn
15652
00f46905
DC
15653@cindex spice
15654@subsubheading Spice Service
15655
15656The @code{(gnu services spice)} module provides the following service.
15657
15658@deffn {Scheme Procedure} spice-vdagent-service [#:spice-vdagent]
15659Returns a service that runs @url{http://www.spice-space.org,VDAGENT}, a daemon
15660that enables sharing the clipboard with a vm and setting the guest display
15661resolution when the graphical console window resizes.
15662@end deffn
15663
c3d38b2b 15664@subsubsection Dictionary Services
e32171ee 15665@cindex dictionary
c3d38b2b
SB
15666The @code{(gnu services dict)} module provides the following service:
15667
15668@deffn {Scheme Procedure} dicod-service [#:config (dicod-configuration)]
15669Return a service that runs the @command{dicod} daemon, an implementation
15670of DICT server (@pxref{Dicod,,, dico, GNU Dico Manual}).
15671
15672The optional @var{config} argument specifies the configuration for
15673@command{dicod}, which should be a @code{<dicod-configuration>} object, by
15674default it serves the GNU Collaborative International Dictonary of English.
15675
15676You can add @command{open localhost} to your @file{~/.dico} file to make
15677@code{localhost} the default server for @command{dico} client
15678(@pxref{Initialization File,,, dico, GNU Dico Manual}).
15679@end deffn
15680
15681@deftp {Data Type} dicod-configuration
15682Data type representing the configuration of dicod.
15683
15684@table @asis
15685@item @code{dico} (default: @var{dico})
15686Package object of the GNU Dico dictionary server.
15687
a1b48465
LC
15688@item @code{interfaces} (default: @var{'("localhost")})
15689This is the list of IP addresses and ports and possibly socket file
15690names to listen to (@pxref{Server Settings, @code{listen} directive,,
15691dico, GNU Dico Manual}).
15692
9af7ecd9
HY
15693@item @code{handlers} (default: @var{'()})
15694List of @code{<dicod-handler>} objects denoting handlers (module instances).
15695
c3d38b2b
SB
15696@item @code{databases} (default: @var{(list %dicod-database:gcide)})
15697List of @code{<dicod-database>} objects denoting dictionaries to be served.
15698@end table
15699@end deftp
15700
9af7ecd9
HY
15701@deftp {Data Type} dicod-handler
15702Data type representing a dictionary handler (module instance).
c3d38b2b
SB
15703
15704@table @asis
15705@item @code{name}
9af7ecd9 15706Name of the handler (module instance).
c3d38b2b 15707
9af7ecd9
HY
15708@item @code{module} (default: @var{#f})
15709Name of the dicod module of the handler (instance). If it is @code{#f},
15710the module has the same name as the handler.
c3d38b2b
SB
15711(@pxref{Modules,,, dico, GNU Dico Manual}).
15712
15713@item @code{options}
15714List of strings or gexps representing the arguments for the module handler
9af7ecd9
HY
15715@end table
15716@end deftp
15717
15718@deftp {Data Type} dicod-database
15719Data type representing a dictionary database.
15720
15721@table @asis
15722@item @code{name}
15723Name of the database, will be used in DICT commands.
15724
15725@item @code{handler}
15726Name of the dicod handler (module instance) used by this database
c3d38b2b 15727(@pxref{Handlers,,, dico, GNU Dico Manual}).
9af7ecd9
HY
15728
15729@item @code{complex?} (default: @var{#f})
15730Whether the database configuration complex. The complex configuration
15731will need a corresponding @code{<dicod-handler>} object, otherwise not.
15732
15733@item @code{options}
15734List of strings or gexps representing the arguments for the database
15735(@pxref{Databases,,, dico, GNU Dico Manual}).
c3d38b2b
SB
15736@end table
15737@end deftp
15738
15739@defvr {Scheme Variable} %dicod-database:gcide
15740A @code{<dicod-database>} object serving the GNU Collaborative International
9fc221b5 15741Dictionary of English using the @code{gcide} package.
c3d38b2b 15742@end defvr
fe1a39d3 15743
9af7ecd9
HY
15744The following is an example @code{dicod-service} configuration.
15745
15746@example
15747(dicod-service #:config
15748 (dicod-configuration
15749 (handlers (list (dicod-handler
15750 (name "wordnet")
15751 (module "dictorg")
15752 (options
15753 (list #~(string-append "dbdir=" #$wordnet))))))
15754 (databases (list (dicod-database
15755 (name "wordnet")
15756 (complex? #t)
15757 (handler "wordnet")
15758 (options '("database=wn")))
15759 %dicod-database:gcide))))
15760@end example
15761
e01e2c6c 15762@subsubsection Version Control
15763
15764The @code{(gnu services version-control)} module provides the following services:
15765
15766@subsubheading Git daemon service
15767
15768@deffn {Scheme Procedure} git-daemon-service [#:config (git-daemon-configuration)]
15769
15770Return a service that runs @command{git daemon}, a simple TCP server to
9fc221b5 15771expose repositories over the Git protocol for anonymous access.
e01e2c6c 15772
15773The optional @var{config} argument should be a
15774@code{<git-daemon-configuration>} object, by default it allows read-only
15775access to exported@footnote{By creating the magic file
15776"git-daemon-export-ok" in the repository directory.} repositories under
15777@file{/srv/git}.
15778
15779@end deffn
15780
15781@deftp {Data Type} git-daemon-configuration
15782Data type representing the configuration for @code{git-daemon-service}.
15783
15784@table @asis
15785@item @code{package} (default: @var{git})
15786Package object of the Git distributed version control system.
15787
15788@item @code{export-all?} (default: @var{#f})
15789Whether to allow access for all Git repositories, even if they do not
15790have the @file{git-daemon-export-ok} file.
15791
15792@item @code{base-path} (default: @file{/srv/git})
15793Whether to remap all the path requests as relative to the given path.
15794If you run git daemon with @var{(base-path "/srv/git")} on example.com,
15795then if you later try to pull @code{git://example.com/hello.git}, git
15796daemon will interpret the path as @code{/srv/git/hello.git}.
15797
15798@item @code{user-path} (default: @var{#f})
15799Whether to allow @code{~user} notation to be used in requests. When
15800specified with empty string, requests to @code{git://host/~alice/foo} is
15801taken as a request to access @code{foo} repository in the home directory
15802of user @code{alice}. If @var{(user-path "path")} is specified, the
15803same request is taken as a request to access @code{path/foo} repository
15804in the home directory of user @code{alice}.
15805
15806@item @code{listen} (default: @var{'()})
15807Whether to listen on specific IP addresses or hostnames, defaults to
15808all.
15809
15810@item @code{port} (default: @var{#f})
15811Whether to listen on an alternative port, which defaults to 9418.
15812
15813@item @code{whitelist} (default: @var{'()})
15814If not empty, only allow access to this list of directories.
15815
15816@item @code{extra-options} (default: @var{'()})
15817Extra options will be passed to @code{git daemon}, please run
15818@command{man git-daemon} for more information.
15819
15820@end table
15821@end deftp
15822
0ae8c15a
LC
15823@node Setuid Programs
15824@subsection Setuid Programs
15825
15826@cindex setuid programs
15827Some programs need to run with ``root'' privileges, even when they are
15828launched by unprivileged users. A notorious example is the
4d40227c
LC
15829@command{passwd} program, which users can run to change their
15830password, and which needs to access the @file{/etc/passwd} and
0ae8c15a
LC
15831@file{/etc/shadow} files---something normally restricted to root, for
15832obvious security reasons. To address that, these executables are
15833@dfn{setuid-root}, meaning that they always run with root privileges
15834(@pxref{How Change Persona,,, libc, The GNU C Library Reference Manual},
f7e4ae7f 15835for more info about the setuid mechanism.)
0ae8c15a
LC
15836
15837The store itself @emph{cannot} contain setuid programs: that would be a
15838security issue since any user on the system can write derivations that
15839populate the store (@pxref{The Store}). Thus, a different mechanism is
15840used: instead of changing the setuid bit directly on files that are in
15841the store, we let the system administrator @emph{declare} which programs
15842should be setuid root.
15843
15844The @code{setuid-programs} field of an @code{operating-system}
15845declaration contains a list of G-expressions denoting the names of
15846programs to be setuid-root (@pxref{Using the Configuration System}).
15847For instance, the @command{passwd} program, which is part of the Shadow
15848package, can be designated by this G-expression (@pxref{G-Expressions}):
15849
15850@example
15851#~(string-append #$shadow "/bin/passwd")
15852@end example
15853
15854A default set of setuid programs is defined by the
15855@code{%setuid-programs} variable of the @code{(gnu system)} module.
15856
15857@defvr {Scheme Variable} %setuid-programs
15858A list of G-expressions denoting common programs that are setuid-root.
15859
15860The list includes commands such as @command{passwd}, @command{ping},
15861@command{su}, and @command{sudo}.
15862@end defvr
15863
15864Under the hood, the actual setuid programs are created in the
15865@file{/run/setuid-programs} directory at system activation time. The
15866files in this directory refer to the ``real'' binaries, which are in the
15867store.
15868
efb5e833
LC
15869@node X.509 Certificates
15870@subsection X.509 Certificates
15871
15872@cindex HTTPS, certificates
15873@cindex X.509 certificates
15874@cindex TLS
15875Web servers available over HTTPS (that is, HTTP over the transport-layer
15876security mechanism, TLS) send client programs an @dfn{X.509 certificate}
15877that the client can then use to @emph{authenticate} the server. To do
15878that, clients verify that the server's certificate is signed by a
15879so-called @dfn{certificate authority} (CA). But to verify the CA's
15880signature, clients must have first acquired the CA's certificate.
15881
15882Web browsers such as GNU@tie{}IceCat include their own set of CA
15883certificates, such that they are able to verify CA signatures
15884out-of-the-box.
15885
15886However, most other programs that can talk HTTPS---@command{wget},
15887@command{git}, @command{w3m}, etc.---need to be told where CA
15888certificates can be found.
15889
15890@cindex @code{nss-certs}
15891In GuixSD, this is done by adding a package that provides certificates
15892to the @code{packages} field of the @code{operating-system} declaration
15893(@pxref{operating-system Reference}). GuixSD includes one such package,
15894@code{nss-certs}, which is a set of CA certificates provided as part of
15895Mozilla's Network Security Services.
15896
15897Note that it is @emph{not} part of @var{%base-packages}, so you need to
15898explicitly add it. The @file{/etc/ssl/certs} directory, which is where
15899most applications and libraries look for certificates by default, points
15900to the certificates installed globally.
15901
b3129f2b
LC
15902Unprivileged users, including users of Guix on a foreign distro,
15903can also install their own certificate package in
efb5e833
LC
15904their profile. A number of environment variables need to be defined so
15905that applications and libraries know where to find them. Namely, the
15906OpenSSL library honors the @code{SSL_CERT_DIR} and @code{SSL_CERT_FILE}
15907variables. Some applications add their own environment variables; for
15908instance, the Git version control system honors the certificate bundle
b3129f2b
LC
15909pointed to by the @code{GIT_SSL_CAINFO} environment variable. Thus, you
15910would typically run something like:
efb5e833 15911
b3129f2b
LC
15912@example
15913$ guix package -i nss-certs
15914$ export SSL_CERT_DIR="$HOME/.guix-profile/etc/ssl/certs"
15915$ export SSL_CERT_FILE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
15916$ export GIT_SSL_CAINFO="$SSL_CERT_FILE"
15917@end example
efb5e833 15918
63657335
RW
15919As another example, R requires the @code{CURL_CA_BUNDLE} environment
15920variable to point to a certificate bundle, so you would have to run
15921something like this:
15922
15923@example
15924$ guix package -i nss-certs
15925$ export CURL_CA_BUNDLE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
15926@end example
15927
15928For other applications you may want to look up the required environment
15929variable in the relevant documentation.
15930
15931
996ed739
LC
15932@node Name Service Switch
15933@subsection Name Service Switch
15934
15935@cindex name service switch
15936@cindex NSS
15937The @code{(gnu system nss)} module provides bindings to the
1068f26b 15938configuration file of the libc @dfn{name service switch} or @dfn{NSS}
996ed739
LC
15939(@pxref{NSS Configuration File,,, libc, The GNU C Library Reference
15940Manual}). In a nutshell, the NSS is a mechanism that allows libc to be
15941extended with new ``name'' lookup methods for system databases, which
15942includes host names, service names, user accounts, and more (@pxref{Name
15943Service Switch, System Databases and Name Service Switch,, libc, The GNU
15944C Library Reference Manual}).
15945
15946The NSS configuration specifies, for each system database, which lookup
15947method is to be used, and how the various methods are chained
15948together---for instance, under which circumstances NSS should try the
15949next method in the list. The NSS configuration is given in the
15950@code{name-service-switch} field of @code{operating-system} declarations
15951(@pxref{operating-system Reference, @code{name-service-switch}}).
15952
4c9050c6
LC
15953@cindex nss-mdns
15954@cindex .local, host name lookup
996ed739 15955As an example, the declaration below configures the NSS to use the
4c9050c6
LC
15956@uref{http://0pointer.de/lennart/projects/nss-mdns/, @code{nss-mdns}
15957back-end}, which supports host name lookups over multicast DNS (mDNS)
15958for host names ending in @code{.local}:
996ed739
LC
15959
15960@example
15961(name-service-switch
15962 (hosts (list %files ;first, check /etc/hosts
15963
15964 ;; If the above did not succeed, try
15965 ;; with 'mdns_minimal'.
15966 (name-service
15967 (name "mdns_minimal")
15968
15969 ;; 'mdns_minimal' is authoritative for
15970 ;; '.local'. When it returns "not found",
15971 ;; no need to try the next methods.
15972 (reaction (lookup-specification
15973 (not-found => return))))
15974
15975 ;; Then fall back to DNS.
15976 (name-service
15977 (name "dns"))
15978
15979 ;; Finally, try with the "full" 'mdns'.
15980 (name-service
15981 (name "mdns")))))
15982@end example
15983
1068f26b
AE
15984Do not worry: the @code{%mdns-host-lookup-nss} variable (see below)
15985contains this configuration, so you will not have to type it if all you
15137a29
LC
15986want is to have @code{.local} host lookup working.
15987
4c9050c6
LC
15988Note that, in this case, in addition to setting the
15989@code{name-service-switch} of the @code{operating-system} declaration,
cc9c1f39
LC
15990you also need to use @code{avahi-service} (@pxref{Networking Services,
15991@code{avahi-service}}), or @var{%desktop-services}, which includes it
15992(@pxref{Desktop Services}). Doing this makes @code{nss-mdns} accessible
15993to the name service cache daemon (@pxref{Base Services,
15994@code{nscd-service}}).
15137a29
LC
15995
15996For convenience, the following variables provide typical NSS
15997configurations.
15998
15999@defvr {Scheme Variable} %default-nss
16000This is the default name service switch configuration, a
16001@code{name-service-switch} object.
16002@end defvr
16003
16004@defvr {Scheme Variable} %mdns-host-lookup-nss
16005This is the name service switch configuration with support for host name
16006lookup over multicast DNS (mDNS) for host names ending in @code{.local}.
16007@end defvr
4c9050c6 16008
996ed739 16009The reference for name service switch configuration is given below. It
1068f26b 16010is a direct mapping of the configuration file format of the C library , so
996ed739
LC
16011please refer to the C library manual for more information (@pxref{NSS
16012Configuration File,,, libc, The GNU C Library Reference Manual}).
1068f26b 16013Compared to the configuration file format of libc NSS, it has the advantage
996ed739 16014not only of adding this warm parenthetic feel that we like, but also
1068f26b 16015static checks: you will know about syntax errors and typos as soon as you
996ed739
LC
16016run @command{guix system}.
16017
996ed739
LC
16018@deftp {Data Type} name-service-switch
16019
16020This is the data type representation the configuration of libc's name
16021service switch (NSS). Each field below represents one of the supported
16022system databases.
16023
16024@table @code
16025@item aliases
16026@itemx ethers
16027@itemx group
16028@itemx gshadow
16029@itemx hosts
16030@itemx initgroups
16031@itemx netgroup
16032@itemx networks
16033@itemx password
16034@itemx public-key
16035@itemx rpc
16036@itemx services
16037@itemx shadow
16038The system databases handled by the NSS. Each of these fields must be a
1068f26b 16039list of @code{<name-service>} objects (see below).
996ed739
LC
16040@end table
16041@end deftp
16042
16043@deftp {Data Type} name-service
16044
16045This is the data type representing an actual name service and the
16046associated lookup action.
16047
16048@table @code
16049@item name
16050A string denoting the name service (@pxref{Services in the NSS
16051configuration,,, libc, The GNU C Library Reference Manual}).
16052
4aee6e60
LC
16053Note that name services listed here must be visible to nscd. This is
16054achieved by passing the @code{#:name-services} argument to
16055@code{nscd-service} the list of packages providing the needed name
16056services (@pxref{Base Services, @code{nscd-service}}).
16057
996ed739
LC
16058@item reaction
16059An action specified using the @code{lookup-specification} macro
16060(@pxref{Actions in the NSS configuration,,, libc, The GNU C Library
16061Reference Manual}). For example:
16062
16063@example
16064(lookup-specification (unavailable => continue)
16065 (success => return))
16066@end example
16067@end table
16068@end deftp
0ae8c15a 16069
fd1b1fa2
LC
16070@node Initial RAM Disk
16071@subsection Initial RAM Disk
16072
e32171ee
JD
16073@cindex initrd
16074@cindex initial RAM disk
fd1b1fa2
LC
16075For bootstrapping purposes, the Linux-Libre kernel is passed an
16076@dfn{initial RAM disk}, or @dfn{initrd}. An initrd contains a temporary
1068f26b 16077root file system as well as an initialization script. The latter is
fd1b1fa2
LC
16078responsible for mounting the real root file system, and for loading any
16079kernel modules that may be needed to achieve that.
16080
16081The @code{initrd} field of an @code{operating-system} declaration allows
16082you to specify which initrd you would like to use. The @code{(gnu
47bdc5a1
MO
16083system linux-initrd)} module provides three ways to build an initrd: the
16084high-level @code{base-initrd} procedure and the low-level
16085@code{raw-initrd} and @code{expression->initrd} procedures.
fd1b1fa2
LC
16086
16087The @code{base-initrd} procedure is intended to cover most common uses.
16088For example, if you want to add a bunch of kernel modules to be loaded
16089at boot time, you can define the @code{initrd} field of the operating
16090system declaration like this:
16091
16092@example
52ac153e 16093(initrd (lambda (file-systems . rest)
027981d6
LC
16094 ;; Create a standard initrd that has modules "foo.ko"
16095 ;; and "bar.ko", as well as their dependencies, in
16096 ;; addition to the modules available by default.
52ac153e 16097 (apply base-initrd file-systems
027981d6 16098 #:extra-modules '("foo" "bar")
52ac153e 16099 rest)))
fd1b1fa2
LC
16100@end example
16101
52ac153e 16102The @code{base-initrd} procedure also handles common use cases that
1068f26b
AE
16103involves using the system as a QEMU guest, or as a ``live'' system with
16104volatile root file system.
fd1b1fa2 16105
47bdc5a1
MO
16106The @code{base-initrd} procedure is built from @code{raw-initrd} procedure.
16107Unlike @code{base-initrd}, @code{raw-initrd} doesn't do anything high-level,
16108such as trying to guess which kernel modules and packages should be included
16109to the initrd. An example use of @code{raw-initrd} is when a user has
16110a custom Linux kernel configuration and default kernel modules included by
16111@code{base-initrd} are not available.
16112
16113The initial RAM disk produced by @code{base-initrd} or @code{raw-initrd}
16114honors several options passed on the Linux kernel command line
16115(that is, arguments passed @i{via} the @code{linux} command of GRUB, or the
4af2fafd 16116@code{-append} option of QEMU), notably:
e90cf6c1
LC
16117
16118@table @code
16119@item --load=@var{boot}
16120Tell the initial RAM disk to load @var{boot}, a file containing a Scheme
16121program, once it has mounted the root file system.
16122
16123GuixSD uses this option to yield control to a boot program that runs the
dd17bc38 16124service activation programs and then spawns the GNU@tie{}Shepherd, the
e90cf6c1
LC
16125initialization system.
16126
16127@item --root=@var{root}
1068f26b 16128Mount @var{root} as the root file system. @var{root} can be a
e90cf6c1
LC
16129device name like @code{/dev/sda1}, a partition label, or a partition
16130UUID.
16131
16132@item --system=@var{system}
16133Have @file{/run/booted-system} and @file{/run/current-system} point to
16134@var{system}.
16135
16136@item modprobe.blacklist=@var{modules}@dots{}
16137@cindex module, black-listing
16138@cindex black list, of kernel modules
16139Instruct the initial RAM disk as well as the @command{modprobe} command
16140(from the kmod package) to refuse to load @var{modules}. @var{modules}
16141must be a comma-separated list of module names---e.g.,
16142@code{usbkbd,9pnet}.
16143
16144@item --repl
16145Start a read-eval-print loop (REPL) from the initial RAM disk before it
16146tries to load kernel modules and to mount the root file system. Our
16147marketing team calls it @dfn{boot-to-Guile}. The Schemer in you will
16148love it. @xref{Using Guile Interactively,,, guile, GNU Guile Reference
16149Manual}, for more information on Guile's REPL.
16150
16151@end table
16152
16153Now that you know all the features that initial RAM disks produced by
47bdc5a1
MO
16154@code{base-initrd} and @code{raw-initrd} provide,
16155here is how to use it and customize it further.
e90cf6c1 16156
e32171ee
JD
16157@cindex initrd
16158@cindex initial RAM disk
47bdc5a1
MO
16159@deffn {Monadic Procedure} raw-initrd @var{file-systems} @
16160 [#:linux-modules '()] [#:mapped-devices '()] @
16161 [#:helper-packages '()] [#:qemu-networking? #f] [#:volatile-root? #f]
16162Return a monadic derivation that builds a raw initrd. @var{file-systems} is
1068f26b 16163a list of file systems to be mounted by the initrd, possibly in addition to
fd1b1fa2 16164the root file system specified on the kernel command line via @code{--root}.
47bdc5a1 16165@var{linux-modules} is a list of kernel modules to be loaded at boot time.
52ac153e
LC
16166@var{mapped-devices} is a list of device mappings to realize before
16167@var{file-systems} are mounted (@pxref{Mapped Devices}).
47bdc5a1
MO
16168@var{helper-packages} is a list of packages to be copied in the initrd. It may
16169include @code{e2fsck/static} or other packages needed by the initrd to check
16170root partition.
fd1b1fa2
LC
16171
16172When @var{qemu-networking?} is true, set up networking with the standard QEMU
1068f26b
AE
16173parameters. When @var{virtio?} is true, load additional modules so that the
16174initrd can be used as a QEMU guest with para-virtualized I/O drivers.
fd1b1fa2
LC
16175
16176When @var{volatile-root?} is true, the root file system is writable but any changes
16177to it are lost.
47bdc5a1
MO
16178@end deffn
16179
16180@deffn {Monadic Procedure} base-initrd @var{file-systems} @
16181 [#:mapped-devices '()] [#:qemu-networking? #f] [#:volatile-root? #f]@
16182 [#:virtio? #t] [#:extra-modules '()]
16183Return a monadic derivation that builds a generic initrd. @var{file-systems} is
16184a list of file systems to be mounted by the initrd like for @code{raw-initrd}.
16185@var{mapped-devices}, @var{qemu-networking?} and @var{volatile-root?}
16186also behaves as in @code{raw-initrd}.
16187
16188When @var{virtio?} is true, load additional modules so that the
16189initrd can be used as a QEMU guest with para-virtualized I/O drivers.
fd1b1fa2
LC
16190
16191The initrd is automatically populated with all the kernel modules necessary
16192for @var{file-systems} and for the given options. However, additional kernel
16193modules can be listed in @var{extra-modules}. They will be added to the initrd, and
16194loaded at boot time in the order in which they appear.
16195@end deffn
16196
16197Needless to say, the initrds we produce and use embed a
16198statically-linked Guile, and the initialization program is a Guile
16199program. That gives a lot of flexibility. The
16200@code{expression->initrd} procedure builds such an initrd, given the
16201program to run in that initrd.
16202
16203@deffn {Monadic Procedure} expression->initrd @var{exp} @
4ee96a79 16204 [#:guile %guile-static-stripped] [#:name "guile-initrd"]
fd1b1fa2
LC
16205Return a derivation that builds a Linux initrd (a gzipped cpio archive)
16206containing @var{guile} and that evaluates @var{exp}, a G-expression,
df650fa8
LC
16207upon booting. All the derivations referenced by @var{exp} are
16208automatically copied to the initrd.
fd1b1fa2
LC
16209@end deffn
16210
74e64724
MO
16211@node Bootloader Configuration
16212@subsection Bootloader Configuration
88faf933 16213
74e64724 16214@cindex bootloader
88faf933
LC
16215@cindex boot loader
16216
74e64724
MO
16217The operating system supports multiple bootloaders. The bootloader is
16218configured using @code{bootloader-configuration} declaration. All the
16219fields of this structure are bootloader agnostic except for one field,
16220@code{bootloader} that indicates the bootloader to be configured and
16221installed.
88faf933 16222
74e64724
MO
16223Some of the bootloaders do not honor every field of
16224@code{bootloader-configuration}. For instance, the extlinux
16225bootloader does not support themes and thus ignores the @code{theme}
16226field.
16227
16228@deftp {Data Type} bootloader-configuration
16229The type of a bootloader configuration declaration.
88faf933
LC
16230
16231@table @asis
16232
74e64724
MO
16233@item @code{bootloader}
16234@cindex EFI, bootloader
16235@cindex UEFI, bootloader
16236@cindex BIOS, bootloader
16237The bootloader to use, as a @code{bootloader} object. For now
8d858010
DM
16238@code{grub-bootloader}, @code{grub-efi-bootloader},
16239@code{extlinux-bootloader} and @code{u-boot-bootloader} are supported.
16240@code{grub-efi-bootloader} allows to boot on modern systems using the
16241@dfn{Unified Extensible Firmware Interface} (UEFI).
74e64724
MO
16242
16243Available bootloaders are described in @code{(gnu bootloader @dots{})}
16244modules.
16245
88faf933
LC
16246@item @code{device}
16247This is a string denoting the boot device. It must be a device name
74e64724
MO
16248understood by the bootloader @command{installer} command, such as
16249@code{/dev/sda} or @code{(hd0)} (for GRUB, @pxref{Invoking grub-install,,, grub,
88faf933
LC
16250GNU GRUB Manual}).
16251
16252@item @code{menu-entries} (default: @code{()})
16253A possibly empty list of @code{menu-entry} objects (see below), denoting
74e64724 16254entries to appear in the bootloader menu, in addition to the current
88faf933 16255system entry and the entry pointing to previous system generations.
74e64724 16256generations.
88faf933
LC
16257
16258@item @code{default-entry} (default: @code{0})
1068f26b
AE
16259The index of the default boot menu entry. Index 0 is for the entry of the
16260current system.
88faf933
LC
16261
16262@item @code{timeout} (default: @code{5})
16263The number of seconds to wait for keyboard input before booting. Set to
162640 to boot immediately, and to -1 to wait indefinitely.
16265
74e64724
MO
16266@item @code{theme} (default: @var{#f})
16267The bootloader theme object describing the theme to use. If no theme
16268is provided, some bootloaders might use a default theme, that's true
16269for GRUB.
e0b2e930
LF
16270
16271@item @code{terminal-outputs} (default: @code{'gfxterm})
74e64724
MO
16272The output terminals used for the bootloader boot menu, as a list of
16273symbols. GRUB accepts the values: @code{console}, @code{serial},
16274@code{serial_@{0-3@}}, @code{gfxterm}, @code{vga_text},
16275@code{mda_text}, @code{morse}, and @code{pkmodem}. This field
16276corresponds to the GRUB variable GRUB_TERMINAL_OUTPUT (@pxref{Simple
16277configuration,,, grub,GNU GRUB manual}).
e0b2e930
LF
16278
16279@item @code{terminal-inputs} (default: @code{'()})
74e64724
MO
16280The input terminals used for the bootloader boot menu, as a list of
16281symbols. For GRUB, the default is the native platform terminal as
16282determined at run-time. GRUB accepts the values: @code{console},
16283@code{serial}, @code{serial_@{0-3@}}, @code{at_keyboard}, and
16284@code{usb_keyboard}. This field corresponds to the GRUB variable
16285GRUB_TERMINAL_INPUT (@pxref{Simple configuration,,, grub,GNU GRUB
16286manual}).
e0b2e930
LF
16287
16288@item @code{serial-unit} (default: @code{#f})
74e64724
MO
16289The serial unit used by the bootloader, as an integer from 0 to 3.
16290For GRUB it is choosen at run-time; currently GRUB chooses 0, which
e0b2e930
LF
16291corresponds to COM1 (@pxref{Serial terminal,,, grub,GNU GRUB manual}).
16292
16293@item @code{serial-speed} (default: @code{#f})
74e64724
MO
16294The speed of the serial interface, as an integer. For GRUB, the
16295default value is chosen at run-time; currently GRUB chooses
162969600@tie{}bps (@pxref{Serial terminal,,, grub,GNU GRUB manual}).
88faf933
LC
16297@end table
16298
16299@end deftp
16300
44d5f54e
LC
16301@cindex dual boot
16302@cindex boot menu
88faf933
LC
16303Should you want to list additional boot menu entries @i{via} the
16304@code{menu-entries} field above, you will need to create them with the
44d5f54e
LC
16305@code{menu-entry} form. For example, imagine you want to be able to
16306boot another distro (hard to imagine!), you can define a menu entry
16307along these lines:
16308
16309@example
16310(menu-entry
16311 (label "The Other Distro")
16312 (linux "/boot/old/vmlinux-2.6.32")
16313 (linux-arguments '("root=/dev/sda2"))
16314 (initrd "/boot/old/initrd"))
16315@end example
16316
16317Details below.
88faf933
LC
16318
16319@deftp {Data Type} menu-entry
74e64724 16320The type of an entry in the bootloader menu.
88faf933
LC
16321
16322@table @asis
16323
16324@item @code{label}
35ed9306 16325The label to show in the menu---e.g., @code{"GNU"}.
88faf933
LC
16326
16327@item @code{linux}
44d5f54e
LC
16328The Linux kernel image to boot, for example:
16329
16330@example
16331(file-append linux-libre "/bzImage")
16332@end example
88faf933 16333
74e64724
MO
16334For GRUB, it is also possible to specify a device explicitly in the
16335file path using GRUB's device naming convention (@pxref{Naming
16336convention,,, grub, GNU GRUB manual}), for example:
1ef8b72a
CM
16337
16338@example
16339"(hd0,msdos1)/boot/vmlinuz"
16340@end example
16341
16342If the device is specified explicitly as above, then the @code{device}
16343field is ignored entirely.
16344
88faf933
LC
16345@item @code{linux-arguments} (default: @code{()})
16346The list of extra Linux kernel command-line arguments---e.g.,
16347@code{("console=ttyS0")}.
16348
16349@item @code{initrd}
16350A G-Expression or string denoting the file name of the initial RAM disk
16351to use (@pxref{G-Expressions}).
1ef8b72a 16352@item @code{device} (default: @code{#f})
74e64724 16353The device where the kernel and initrd are to be found---i.e., for GRUB,
1ef8b72a
CM
16354@dfn{root} for this menu entry (@pxref{root,,, grub, GNU GRUB manual}).
16355
16356This may be a file system label (a string), a file system UUID (a
74e64724
MO
16357bytevector, @pxref{File Systems}), or @code{#f}, in which case
16358the bootloader will search the device containing the file specified by
16359the @code{linux} field (@pxref{search,,, grub, GNU GRUB manual}). It
16360must @emph{not} be an OS device name such as @file{/dev/sda1}.
1ef8b72a 16361
88faf933
LC
16362@end table
16363@end deftp
16364
16365@c FIXME: Write documentation once it's stable.
74e64724
MO
16366Fow now only GRUB has theme support. GRUB themes are created using
16367the @code{grub-theme} form, which is not documented yet.
88faf933
LC
16368
16369@defvr {Scheme Variable} %default-theme
74e64724
MO
16370This is the default GRUB theme used by the operating system if no
16371@code{theme} field is specified in @code{bootloader-configuration}
16372record.
16373
16374It comes with a fancy background image displaying the GNU and Guix
16375logos.
88faf933
LC
16376@end defvr
16377
16378
cf4a9129
LC
16379@node Invoking guix system
16380@subsection Invoking @code{guix system}
0918e64a 16381
1068f26b 16382Once you have written an operating system declaration as seen in the
cf4a9129
LC
16383previous section, it can be @dfn{instantiated} using the @command{guix
16384system} command. The synopsis is:
4af2447e 16385
cf4a9129
LC
16386@example
16387guix system @var{options}@dots{} @var{action} @var{file}
16388@end example
4af2447e 16389
cf4a9129
LC
16390@var{file} must be the name of a file containing an
16391@code{operating-system} declaration. @var{action} specifies how the
a40424bd 16392operating system is instantiated. Currently the following values are
cf4a9129 16393supported:
4af2447e 16394
cf4a9129
LC
16395@table @code
16396@item reconfigure
16397Build the operating system described in @var{file}, activate it, and
8074b330
CM
16398switch to it@footnote{This action (and the related actions
16399@code{switch-generation} and @code{roll-back}) are usable only on
16400systems already running GuixSD.}.
4af2447e 16401
cf4a9129
LC
16402This effects all the configuration specified in @var{file}: user
16403accounts, system services, global package list, setuid programs, etc.
240b57f0
LC
16404The command starts system services specified in @var{file} that are not
16405currently running; if a service is currently running, it does not
1068f26b 16406attempt to upgrade it since this would not be possible without stopping it
240b57f0 16407first.
4af2447e 16408
067a2e2d
CM
16409This command creates a new generation whose number is one greater than
16410the current generation (as reported by @command{guix system
16411list-generations}). If that generation already exists, it will be
16412overwritten. This behavior mirrors that of @command{guix package}
16413(@pxref{Invoking guix package}).
16414
74e64724
MO
16415It also adds a bootloader menu entry for the new OS configuration,
16416---unless @option{--no-bootloader} is passed. For GRUB, it moves
16417entries for older configurations to a submenu, allowing you to choose
16418an older system generation at boot time should you need it.
4af2447e 16419
240b57f0 16420@quotation Note
bf2479c7
LC
16421@c The paragraph below refers to the problem discussed at
16422@c <http://lists.gnu.org/archive/html/guix-devel/2014-08/msg00057.html>.
16423It is highly recommended to run @command{guix pull} once before you run
16424@command{guix system reconfigure} for the first time (@pxref{Invoking
16425guix pull}). Failing to do that you would see an older version of Guix
16426once @command{reconfigure} has completed.
240b57f0 16427@end quotation
bf2479c7 16428
8074b330 16429@item switch-generation
e32171ee 16430@cindex generations
8074b330 16431Switch to an existing system generation. This action atomically
74e64724
MO
16432switches the system profile to the specified system generation. It
16433also rearranges the system's existing bootloader menu entries. It
16434makes the menu entry for the specified system generation the default,
16435and it moves the entries for the other generatiors to a submenu, if
16436supported by the bootloader being used. The next time the system
16437boots, it will use the specified system generation.
16438
16439The bootloader itself is not being reinstalled when using this
16440command. Thus, the installed bootloader is used with an updated
16441configuration file.
8074b330
CM
16442
16443The target generation can be specified explicitly by its generation
16444number. For example, the following invocation would switch to system
16445generation 7:
16446
16447@example
16448guix system switch-generation 7
16449@end example
16450
16451The target generation can also be specified relative to the current
16452generation with the form @code{+N} or @code{-N}, where @code{+3} means
16453``3 generations ahead of the current generation,'' and @code{-1} means
16454``1 generation prior to the current generation.'' When specifying a
16455negative value such as @code{-1}, you must precede it with @code{--} to
16456prevent it from being parsed as an option. For example:
16457
16458@example
16459guix system switch-generation -- -1
16460@end example
16461
16462Currently, the effect of invoking this action is @emph{only} to switch
74e64724
MO
16463the system profile to an existing generation and rearrange the
16464bootloader menu entries. To actually start using the target system
16465generation, you must reboot after running this action. In the future,
16466it will be updated to do the same things as @command{reconfigure},
16467like activating and deactivating services.
8074b330
CM
16468
16469This action will fail if the specified generation does not exist.
16470
16471@item roll-back
e32171ee 16472@cindex rolling back
8074b330
CM
16473Switch to the preceding system generation. The next time the system
16474boots, it will use the preceding system generation. This is the inverse
16475of @command{reconfigure}, and it is exactly the same as invoking
16476@command{switch-generation} with an argument of @code{-1}.
16477
16478Currently, as with @command{switch-generation}, you must reboot after
16479running this action to actually start using the preceding system
16480generation.
16481
cf4a9129 16482@item build
1068f26b 16483Build the derivation of the operating system, which includes all the
cf4a9129
LC
16484configuration files and programs needed to boot and run the system.
16485This action does not actually install anything.
113daf62 16486
cf4a9129
LC
16487@item init
16488Populate the given directory with all the files necessary to run the
16489operating system specified in @var{file}. This is useful for first-time
4705641f 16490installations of GuixSD. For instance:
113daf62
LC
16491
16492@example
cf4a9129 16493guix system init my-os-config.scm /mnt
113daf62
LC
16494@end example
16495
cf4a9129
LC
16496copies to @file{/mnt} all the store items required by the configuration
16497specified in @file{my-os-config.scm}. This includes configuration
16498files, packages, and so on. It also creates other essential files
16499needed for the system to operate correctly---e.g., the @file{/etc},
16500@file{/var}, and @file{/run} directories, and the @file{/bin/sh} file.
113daf62 16501
74e64724
MO
16502This command also installs bootloader on the device specified in
16503@file{my-os-config}, unless the @option{--no-bootloader} option was
16504passed.
113daf62 16505
cf4a9129
LC
16506@item vm
16507@cindex virtual machine
0276f697 16508@cindex VM
f535dcbe 16509@anchor{guix system vm}
1068f26b 16510Build a virtual machine that contains the operating system declared in
cf4a9129 16511@var{file}, and return a script to run that virtual machine (VM).
03317cbf
LC
16512Arguments given to the script are passed to QEMU as in the example
16513below, which enables networking and requests 1@tie{}GiB of RAM for the
16514emulated machine:
16515
16516@example
16517$ /gnu/store/@dots{}-run-vm.sh -m 1024 -net user
16518@end example
113daf62 16519
cf4a9129 16520The VM shares its store with the host system.
113daf62 16521
0276f697
LC
16522Additional file systems can be shared between the host and the VM using
16523the @code{--share} and @code{--expose} command-line options: the former
16524specifies a directory to be shared with write access, while the latter
16525provides read-only access to the shared directory.
16526
16527The example below creates a VM in which the user's home directory is
16528accessible read-only, and where the @file{/exchange} directory is a
1068f26b 16529read-write mapping of @file{$HOME/tmp} on the host:
0276f697
LC
16530
16531@example
16532guix system vm my-config.scm \
16533 --expose=$HOME --share=$HOME/tmp=/exchange
16534@end example
16535
6aa260af
LC
16536On GNU/Linux, the default is to boot directly to the kernel; this has
16537the advantage of requiring only a very tiny root disk image since the
1068f26b 16538store of the host can then be mounted.
6aa260af
LC
16539
16540The @code{--full-boot} option forces a complete boot sequence, starting
16541with the bootloader. This requires more disk space since a root image
16542containing at least the kernel, initrd, and bootloader data files must
16543be created. The @code{--image-size} option can be used to specify the
1068f26b 16544size of the image.
ab11f0be 16545
cf4a9129
LC
16546@item vm-image
16547@itemx disk-image
16548Return a virtual machine or disk image of the operating system declared
a8ac4f08
LC
16549in @var{file} that stands alone. By default, @command{guix system}
16550estimates the size of the image needed to store the system, but you can
16551use the @option{--image-size} option to specify a value.
113daf62 16552
3f4d8a7f 16553You can specify the root file system type by using the
3b6e7d86 16554@option{--file-system-type} option. It defaults to @code{ext4}.
3f4d8a7f 16555
cf4a9129 16556When using @code{vm-image}, the returned image is in qcow2 format, which
97d76250
LF
16557the QEMU emulator can efficiently use. @xref{Running GuixSD in a VM},
16558for more information on how to run the image in a virtual machine.
113daf62 16559
cf4a9129
LC
16560When using @code{disk-image}, a raw disk image is produced; it can be
16561copied as is to a USB stick, for instance. Assuming @code{/dev/sdc} is
1068f26b 16562the device corresponding to a USB stick, one can copy the image to it
cf4a9129 16563using the following command:
113daf62 16564
cf4a9129
LC
16565@example
16566# dd if=$(guix system disk-image my-os.scm) of=/dev/sdc
16567@end example
113daf62 16568
1c8a81b1
DT
16569@item container
16570Return a script to run the operating system declared in @var{file}
16571within a container. Containers are a set of lightweight isolation
16572mechanisms provided by the kernel Linux-libre. Containers are
16573substantially less resource-demanding than full virtual machines since
16574the kernel, shared objects, and other resources can be shared with the
16575host system; this also means they provide thinner isolation.
16576
16577Currently, the script must be run as root in order to support more than
16578a single user and group. The container shares its store with the host
16579system.
16580
16581As with the @code{vm} action (@pxref{guix system vm}), additional file
16582systems to be shared between the host and container can be specified
16583using the @option{--share} and @option{--expose} options:
16584
16585@example
16586guix system container my-config.scm \
16587 --expose=$HOME --share=$HOME/tmp=/exchange
16588@end example
16589
0f252e26 16590@quotation Note
cfd35b4e 16591This option requires Linux-libre 3.19 or newer.
0f252e26
DT
16592@end quotation
16593
cf4a9129 16594@end table
113daf62 16595
ccd7158d
LC
16596@var{options} can contain any of the common build options (@pxref{Common
16597Build Options}). In addition, @var{options} can contain one of the
16598following:
113daf62 16599
cf4a9129
LC
16600@table @option
16601@item --system=@var{system}
16602@itemx -s @var{system}
1068f26b 16603Attempt to build for @var{system} instead of the host system type.
cf4a9129 16604This works as per @command{guix build} (@pxref{Invoking guix build}).
113daf62 16605
f3f427c2
LC
16606@item --derivation
16607@itemx -d
16608Return the derivation file name of the given operating system without
16609building anything.
16610
3f4d8a7f
DM
16611@item --file-system-type=@var{type}
16612@itemx -t @var{type}
16613For the @code{disk-image} action, create a file system of the given
16614@var{type} on the image.
16615
16616When this option is omitted, @command{guix system} uses @code{ext4}.
16617
16618@cindex ISO-9660 format
16619@cindex CD image format
16620@cindex DVD image format
16621@code{--file-system-type=iso9660} produces an ISO-9660 image, suitable
16622for burning on CDs and DVDs.
16623
cf4a9129
LC
16624@item --image-size=@var{size}
16625For the @code{vm-image} and @code{disk-image} actions, create an image
16626of the given @var{size}. @var{size} may be a number of bytes, or it may
4a44d7bb
LC
16627include a unit as a suffix (@pxref{Block size, size specifications,,
16628coreutils, GNU Coreutils}).
db030303 16629
a8ac4f08
LC
16630When this option is omitted, @command{guix system} computes an estimate
16631of the image size as a function of the size of the system declared in
16632@var{file}.
16633
5ea69d9a
CM
16634@item --root=@var{file}
16635@itemx -r @var{file}
16636Make @var{file} a symlink to the result, and register it as a garbage
16637collector root.
16638
db030303
LC
16639@item --on-error=@var{strategy}
16640Apply @var{strategy} when an error occurs when reading @var{file}.
16641@var{strategy} may be one of the following:
16642
16643@table @code
16644@item nothing-special
16645Report the error concisely and exit. This is the default strategy.
16646
16647@item backtrace
16648Likewise, but also display a backtrace.
16649
16650@item debug
16651Report the error and enter Guile's debugger. From there, you can run
16652commands such as @code{,bt} to get a backtrace, @code{,locals} to
1068f26b
AE
16653display local variable values, and more generally inspect the state of the
16654program. @xref{Debug Commands,,, guile, GNU Guile Reference Manual}, for
db030303
LC
16655a list of available debugging commands.
16656@end table
113daf62 16657@end table
113daf62 16658
eca69fc0
LC
16659@quotation Note
16660All the actions above, except @code{build} and @code{init},
16661can use KVM support in the Linux-libre kernel. Specifically, if the
16662machine has hardware virtualization support, the corresponding
cf4a9129 16663KVM kernel module should be loaded, and the @file{/dev/kvm} device node
1068f26b 16664must exist and be readable and writable by the user and by the
eca69fc0
LC
16665build users of the daemon (@pxref{Build Environment Setup}).
16666@end quotation
8451a568 16667
65797bff
LC
16668Once you have built, configured, re-configured, and re-re-configured
16669your GuixSD installation, you may find it useful to list the operating
16670system generations available on disk---and that you can choose from the
74e64724 16671bootloader boot menu:
65797bff
LC
16672
16673@table @code
16674
16675@item list-generations
16676List a summary of each generation of the operating system available on
16677disk, in a human-readable way. This is similar to the
16678@option{--list-generations} option of @command{guix package}
16679(@pxref{Invoking guix package}).
16680
16681Optionally, one can specify a pattern, with the same syntax that is used
16682in @command{guix package --list-generations}, to restrict the list of
16683generations displayed. For instance, the following command displays
1068f26b 16684generations that are up to 10 days old:
65797bff
LC
16685
16686@example
16687$ guix system list-generations 10d
16688@end example
16689
16690@end table
16691
d6c3267a
LC
16692The @command{guix system} command has even more to offer! The following
16693sub-commands allow you to visualize how your system services relate to
16694each other:
16695
16696@anchor{system-extension-graph}
16697@table @code
16698
16699@item extension-graph
16700Emit in Dot/Graphviz format to standard output the @dfn{service
16701extension graph} of the operating system defined in @var{file}
16702(@pxref{Service Composition}, for more information on service
16703extensions.)
16704
16705The command:
16706
16707@example
16708$ guix system extension-graph @var{file} | dot -Tpdf > services.pdf
16709@end example
16710
16711produces a PDF file showing the extension relations among services.
16712
710fa231
AK
16713@anchor{system-shepherd-graph}
16714@item shepherd-graph
6f305ea5 16715Emit in Dot/Graphviz format to standard output the @dfn{dependency
dd17bc38
AK
16716graph} of shepherd services of the operating system defined in
16717@var{file}. @xref{Shepherd Services}, for more information and for an
16718example graph.
6f305ea5 16719
d6c3267a
LC
16720@end table
16721
97d76250 16722@node Running GuixSD in a VM
70ac09a5 16723@subsection Running GuixSD in a Virtual Machine
97d76250 16724
e32171ee 16725@cindex virtual machine
4b236c88
LF
16726To run GuixSD in a virtual machine (VM), one can either use the
16727pre-built GuixSD VM image distributed at
16728@indicateurl{ftp://alpha.gnu.org/guix/guixsd-vm-image-@value{VERSION}.@var{system}.tar.xz}
16729, or build their own virtual machine image using @command{guix system
16730vm-image} (@pxref{Invoking guix system}). The returned image is in
16731qcow2 format, which the @uref{http://qemu.org/, QEMU emulator} can
16732efficiently use.
97d76250 16733
e32171ee 16734@cindex QEMU
4b236c88
LF
16735If you built your own image, you must copy it out of the store
16736(@pxref{The Store}) and give yourself permission to write to the copy
16737before you can use it. When invoking QEMU, you must choose a system
16738emulator that is suitable for your hardware platform. Here is a minimal
16739QEMU invocation that will boot the result of @command{guix system
16740vm-image} on x86_64 hardware:
97d76250
LF
16741
16742@example
16743$ qemu-system-x86_64 \
16744 -net user -net nic,model=virtio \
16745 -enable-kvm -m 256 /tmp/qemu-image
16746@end example
16747
16748Here is what each of these options means:
16749
16750@table @code
16751@item qemu-system-x86_64
16752This specifies the hardware platform to emulate. This should match the
16753host.
16754
16755@item -net user
16756Enable the unprivileged user-mode network stack. The guest OS can
16757access the host but not vice versa. This is the simplest way to get the
58806e6f 16758guest OS online.
97d76250
LF
16759
16760@item -net nic,model=virtio
1068f26b 16761You must create a network interface of a given model. If you do not
97d76250
LF
16762create a NIC, the boot will fail. Assuming your hardware platform is
16763x86_64, you can get a list of available NIC models by running
16764@command{qemu-system-x86_64 -net nic,model=help}.
16765
16766@item -enable-kvm
16767If your system has hardware virtualization extensions, enabling the
1068f26b 16768virtual machine support (KVM) of the Linux kernel will make things run
97d76250
LF
16769faster.
16770
16771@item -m 256
16772RAM available to the guest OS, in mebibytes. Defaults to 128@tie{}MiB,
7414de0a 16773which may be insufficient for some operations.
97d76250
LF
16774
16775@item /tmp/qemu-image
16776The file name of the qcow2 image.
16777@end table
d6c3267a 16778
9fc221b5 16779The default @command{run-vm.sh} script that is returned by an invocation of
3ddc50db
DC
16780@command{guix system vm} does not add a @command{-net user} flag by default.
16781To get network access from within the vm add the @code{(dhcp-client-service)}
16782to your system definition and start the VM using
16783@command{`guix system vm config.scm` -net user}. An important caveat of using
16784@command{-net user} for networking is that @command{ping} will not work, because
16785it uses the ICMP protocol. You'll have to use a different command to check for
4100698d 16786network connectivity, for example @command{guix download}.
3ddc50db
DC
16787
16788@subsubsection Connecting Through SSH
16789
e32171ee
JD
16790@cindex SSH
16791@cindex SSH server
3ddc50db
DC
16792To enable SSH inside a VM you need to add a SSH server like @code{(dropbear-service)}
16793or @code{(lsh-service)} to your VM. The @code{(lsh-service}) doesn't currently
16794boot unsupervised. It requires you to type some characters to initialize the
16795randomness generator. In addition you need to forward the SSH port, 22 by
16796default, to the host. You can do this with
16797
16798@example
16799`guix system vm config.scm` -net user,hostfwd=tcp::10022-:22
16800@end example
16801
16802To connect to the VM you can run
16803
16804@example
16805ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 10022
16806@end example
16807
16808The @command{-p} tells @command{ssh} the port you want to connect to.
16809@command{-o UserKnownHostsFile=/dev/null} prevents @command{ssh} from complaining
16810every time you modify your @command{config.scm} file and the
16811@command{-o StrictHostKeyChecking=no} prevents you from having to allow a
16812connection to an unknown host every time you connect.
16813
16814@subsubsection Using @command{virt-viewer} with Spice
16815
16816As an alternative to the default @command{qemu} graphical client you can
16817use the @command{remote-viewer} from the @command{virt-viewer} package. To
16818connect pass the @command{-spice port=5930,disable-ticketing} flag to
16819@command{qemu}. See previous section for further information on how to do this.
16820
16821Spice also allows you to do some nice stuff like share your clipboard with your
16822VM. To enable that you'll also have to pass the following flags to @command{qemu}:
16823
16824@example
16825-device virtio-serial-pci,id=virtio-serial0,max_ports=16,bus=pci.0,addr=0x5
16826-chardev spicevmc,name=vdagent,id=vdagent
16827-device virtserialport,nr=1,bus=virtio-serial0.0,chardev=vdagent,
16828name=com.redhat.spice.0
16829@end example
16830
16831You'll also need to add the @pxref{Miscellaneous Services, Spice service}.
16832
cf4a9129
LC
16833@node Defining Services
16834@subsection Defining Services
8451a568 16835
eb524192 16836The previous sections show the available services and how one can combine
0adfe95a
LC
16837them in an @code{operating-system} declaration. But how do we define
16838them in the first place? And what is a service anyway?
8451a568 16839
0adfe95a
LC
16840@menu
16841* Service Composition:: The model for composing services.
16842* Service Types and Services:: Types and services.
16843* Service Reference:: API reference.
dd17bc38 16844* Shepherd Services:: A particular type of service.
0adfe95a
LC
16845@end menu
16846
16847@node Service Composition
16848@subsubsection Service Composition
16849
16850@cindex services
16851@cindex daemons
16852Here we define a @dfn{service} as, broadly, something that extends the
1068f26b 16853functionality of the operating system. Often a service is a process---a
0adfe95a
LC
16854@dfn{daemon}---started when the system boots: a secure shell server, a
16855Web server, the Guix build daemon, etc. Sometimes a service is a daemon
16856whose execution can be triggered by another daemon---e.g., an FTP server
16857started by @command{inetd} or a D-Bus service activated by
16858@command{dbus-daemon}. Occasionally, a service does not map to a
16859daemon. For instance, the ``account'' service collects user accounts
16860and makes sure they exist when the system runs; the ``udev'' service
16861collects device management rules and makes them available to the eudev
1068f26b
AE
16862daemon; the @file{/etc} service populates the @file{/etc} directory
16863of the system.
0adfe95a 16864
d6c3267a 16865@cindex service extensions
0adfe95a 16866GuixSD services are connected by @dfn{extensions}. For instance, the
1068f26b 16867secure shell service @emph{extends} the Shepherd---the GuixSD
dd17bc38
AK
16868initialization system, running as PID@tie{}1---by giving it the command
16869lines to start and stop the secure shell daemon (@pxref{Networking
16870Services, @code{lsh-service}}); the UPower service extends the D-Bus
16871service by passing it its @file{.service} specification, and extends the
16872udev service by passing it device management rules (@pxref{Desktop
16873Services, @code{upower-service}}); the Guix daemon service extends the
16874Shepherd by passing it the command lines to start and stop the daemon,
16875and extends the account service by passing it a list of required build
16876user accounts (@pxref{Base Services}).
0adfe95a
LC
16877
16878All in all, services and their ``extends'' relations form a directed
16879acyclic graph (DAG). If we represent services as boxes and extensions
16880as arrows, a typical system might provide something like this:
16881
16882@image{images/service-graph,,5in,Typical service extension graph.}
16883
d62e201c
LC
16884@cindex system service
16885At the bottom, we see the @dfn{system service}, which produces the
16886directory containing everything to run and boot the system, as returned
16887by the @command{guix system build} command. @xref{Service Reference},
16888to learn about the other service types shown here.
d6c3267a
LC
16889@xref{system-extension-graph, the @command{guix system extension-graph}
16890command}, for information on how to generate this representation for a
16891particular operating system definition.
0adfe95a
LC
16892
16893@cindex service types
16894Technically, developers can define @dfn{service types} to express these
16895relations. There can be any number of services of a given type on the
16896system---for instance, a system running two instances of the GNU secure
16897shell server (lsh) has two instances of @var{lsh-service-type}, with
16898different parameters.
16899
16900The following section describes the programming interface for service
16901types and services.
16902
16903@node Service Types and Services
16904@subsubsection Service Types and Services
16905
16906A @dfn{service type} is a node in the DAG described above. Let us start
16907with a simple example, the service type for the Guix build daemon
16908(@pxref{Invoking guix-daemon}):
16909
16910@example
16911(define guix-service-type
16912 (service-type
16913 (name 'guix)
16914 (extensions
d4053c71 16915 (list (service-extension shepherd-root-service-type guix-shepherd-service)
0adfe95a 16916 (service-extension account-service-type guix-accounts)
1bb895ea
LC
16917 (service-extension activation-service-type guix-activation)))
16918 (default-value (guix-configuration))))
0adfe95a 16919@end example
8451a568 16920
cf4a9129 16921@noindent
1bb895ea 16922It defines three things:
0adfe95a
LC
16923
16924@enumerate
16925@item
16926A name, whose sole purpose is to make inspection and debugging easier.
16927
16928@item
16929A list of @dfn{service extensions}, where each extension designates the
1068f26b
AE
16930target service type and a procedure that, given the parameters of the
16931service, returns a list of objects to extend the service of that type.
0adfe95a
LC
16932
16933Every service type has at least one service extension. The only
16934exception is the @dfn{boot service type}, which is the ultimate service.
1bb895ea
LC
16935
16936@item
16937Optionally, a default value for instances of this type.
0adfe95a
LC
16938@end enumerate
16939
16940In this example, @var{guix-service-type} extends three services:
16941
16942@table @var
d4053c71
AK
16943@item shepherd-root-service-type
16944The @var{guix-shepherd-service} procedure defines how the Shepherd
16945service is extended. Namely, it returns a @code{<shepherd-service>}
16946object that defines how @command{guix-daemon} is started and stopped
16947(@pxref{Shepherd Services}).
0adfe95a
LC
16948
16949@item account-service-type
16950This extension for this service is computed by @var{guix-accounts},
16951which returns a list of @code{user-group} and @code{user-account}
16952objects representing the build user accounts (@pxref{Invoking
16953guix-daemon}).
16954
16955@item activation-service-type
16956Here @var{guix-activation} is a procedure that returns a gexp, which is
16957a code snippet to run at ``activation time''---e.g., when the service is
16958booted.
16959@end table
16960
16961A service of this type is instantiated like this:
16962
16963@example
16964(service guix-service-type
16965 (guix-configuration
16966 (build-accounts 5)
16967 (use-substitutes? #f)))
16968@end example
16969
16970The second argument to the @code{service} form is a value representing
16971the parameters of this specific service instance.
16972@xref{guix-configuration-type, @code{guix-configuration}}, for
1bb895ea
LC
16973information about the @code{guix-configuration} data type. When the
16974value is omitted, the default value specified by
16975@code{guix-service-type} is used:
16976
16977@example
16978(service guix-service-type)
16979@end example
0adfe95a
LC
16980
16981@var{guix-service-type} is quite simple because it extends other
16982services but is not extensible itself.
16983
16984@c @subsubsubsection Extensible Service Types
16985
16986The service type for an @emph{extensible} service looks like this:
16987
16988@example
16989(define udev-service-type
16990 (service-type (name 'udev)
16991 (extensions
d4053c71
AK
16992 (list (service-extension shepherd-root-service-type
16993 udev-shepherd-service)))
0adfe95a
LC
16994
16995 (compose concatenate) ;concatenate the list of rules
16996 (extend (lambda (config rules)
16997 (match config
16998 (($ <udev-configuration> udev initial-rules)
16999 (udev-configuration
17000 (udev udev) ;the udev package to use
17001 (rules (append initial-rules rules)))))))))
17002@end example
17003
17004This is the service type for the
17005@uref{https://wiki.gentoo.org/wiki/Project:Eudev, eudev device
17006management daemon}. Compared to the previous example, in addition to an
d4053c71 17007extension of @var{shepherd-root-service-type}, we see two new fields:
0adfe95a
LC
17008
17009@table @code
17010@item compose
17011This is the procedure to @dfn{compose} the list of extensions to
17012services of this type.
17013
17014Services can extend the udev service by passing it lists of rules; we
17015compose those extensions simply by concatenating them.
17016
17017@item extend
1068f26b 17018This procedure defines how the value of the service is @dfn{extended} with
0adfe95a
LC
17019the composition of the extensions.
17020
17021Udev extensions are composed into a list of rules, but the udev service
17022value is itself a @code{<udev-configuration>} record. So here, we
a40424bd 17023extend that record by appending the list of rules it contains to the
0adfe95a
LC
17024list of contributed rules.
17025@end table
17026
17027There can be only one instance of an extensible service type such as
17028@var{udev-service-type}. If there were more, the
17029@code{service-extension} specifications would be ambiguous.
17030
17031Still here? The next section provides a reference of the programming
17032interface for services.
17033
17034@node Service Reference
17035@subsubsection Service Reference
17036
17037We have seen an overview of service types (@pxref{Service Types and
17038Services}). This section provides a reference on how to manipulate
17039services and service types. This interface is provided by the
17040@code{(gnu services)} module.
17041
1bb895ea 17042@deffn {Scheme Procedure} service @var{type} [@var{value}]
0adfe95a
LC
17043Return a new service of @var{type}, a @code{<service-type>} object (see
17044below.) @var{value} can be any object; it represents the parameters of
17045this particular service instance.
1bb895ea
LC
17046
17047When @var{value} is omitted, the default value specified by @var{type}
17048is used; if @var{type} does not specify a default value, an error is
17049raised.
17050
17051For instance, this:
17052
17053@example
17054(service openssh-service-type)
17055@end example
17056
17057@noindent
17058is equivalent to this:
17059
17060@example
17061(service openssh-service-type
17062 (openssh-configuration))
17063@end example
17064
17065In both cases the result is an instance of @code{openssh-service-type}
17066with the default configuration.
0adfe95a
LC
17067@end deffn
17068
17069@deffn {Scheme Procedure} service? @var{obj}
17070Return true if @var{obj} is a service.
17071@end deffn
8451a568 17072
0adfe95a
LC
17073@deffn {Scheme Procedure} service-kind @var{service}
17074Return the type of @var{service}---i.e., a @code{<service-type>} object.
17075@end deffn
17076
efe7d19a 17077@deffn {Scheme Procedure} service-value @var{service}
0adfe95a
LC
17078Return the value associated with @var{service}. It represents its
17079parameters.
17080@end deffn
17081
17082Here is an example of how a service is created and manipulated:
17083
17084@example
17085(define s
17086 (service nginx-service-type
17087 (nginx-configuration
17088 (nginx nginx)
17089 (log-directory log-directory)
17090 (run-directory run-directory)
17091 (file config-file))))
17092
17093(service? s)
17094@result{} #t
17095
17096(eq? (service-kind s) nginx-service-type)
17097@result{} #t
17098@end example
17099
cd6f6c22
LC
17100The @code{modify-services} form provides a handy way to change the
17101parameters of some of the services of a list such as
4d343a14 17102@var{%base-services} (@pxref{Base Services, @code{%base-services}}). It
7414de0a 17103evaluates to a list of services. Of course, you could always use
4d343a14
CM
17104standard list combinators such as @code{map} and @code{fold} to do that
17105(@pxref{SRFI-1, List Library,, guile, GNU Guile Reference Manual});
17106@code{modify-services} simply provides a more concise form for this
17107common pattern.
cd6f6c22
LC
17108
17109@deffn {Scheme Syntax} modify-services @var{services} @
17110 (@var{type} @var{variable} => @var{body}) @dots{}
17111
17112Modify the services listed in @var{services} according to the given
17113clauses. Each clause has the form:
17114
17115@example
17116(@var{type} @var{variable} => @var{body})
17117@end example
17118
4d343a14
CM
17119where @var{type} is a service type---e.g.,
17120@code{guix-service-type}---and @var{variable} is an identifier that is
17121bound within the @var{body} to the service parameters---e.g., a
17122@code{guix-configuration} instance---of the original service of that
17123@var{type}.
cd6f6c22 17124
4d343a14
CM
17125The @var{body} should evaluate to the new service parameters, which will
17126be used to configure the new service. This new service will replace the
17127original in the resulting list. Because a service's service parameters
7414de0a 17128are created using @code{define-record-type*}, you can write a succinct
4d343a14
CM
17129@var{body} that evaluates to the new service parameters by using the
17130@code{inherit} feature that @code{define-record-type*} provides.
17131
b53daad0 17132@xref{Using the Configuration System}, for example usage.
cd6f6c22 17133
cd6f6c22
LC
17134@end deffn
17135
17136Next comes the programming interface for service types. This is
17137something you want to know when writing new service definitions, but not
17138necessarily when simply looking for ways to customize your
17139@code{operating-system} declaration.
17140
0adfe95a
LC
17141@deftp {Data Type} service-type
17142@cindex service type
17143This is the representation of a @dfn{service type} (@pxref{Service Types
17144and Services}).
17145
17146@table @asis
17147@item @code{name}
17148This is a symbol, used only to simplify inspection and debugging.
17149
17150@item @code{extensions}
1068f26b 17151A non-empty list of @code{<service-extension>} objects (see below).
0adfe95a
LC
17152
17153@item @code{compose} (default: @code{#f})
17154If this is @code{#f}, then the service type denotes services that cannot
17155be extended---i.e., services that do not receive ``values'' from other
17156services.
17157
17158Otherwise, it must be a one-argument procedure. The procedure is called
17159by @code{fold-services} and is passed a list of values collected from
17160extensions. It must return a value that is a valid parameter value for
17161the service instance.
17162
17163@item @code{extend} (default: @code{#f})
17164If this is @code{#f}, services of this type cannot be extended.
17165
17166Otherwise, it must be a two-argument procedure: @code{fold-services}
1068f26b 17167calls it, passing it the initial value of the service as the first argument
0adfe95a
LC
17168and the result of applying @code{compose} to the extension values as the
17169second argument.
17170@end table
17171
17172@xref{Service Types and Services}, for examples.
17173@end deftp
17174
17175@deffn {Scheme Procedure} service-extension @var{target-type} @
17176 @var{compute}
17177Return a new extension for services of type @var{target-type}.
17178@var{compute} must be a one-argument procedure: @code{fold-services}
17179calls it, passing it the value associated with the service that provides
17180the extension; it must return a valid value for the target service.
17181@end deffn
17182
17183@deffn {Scheme Procedure} service-extension? @var{obj}
17184Return true if @var{obj} is a service extension.
17185@end deffn
17186
71654dfd
LC
17187Occasionally, you might want to simply extend an existing service. This
17188involves creating a new service type and specifying the extension of
17189interest, which can be verbose; the @code{simple-service} procedure
17190provides a shorthand for this.
17191
17192@deffn {Scheme Procedure} simple-service @var{name} @var{target} @var{value}
17193Return a service that extends @var{target} with @var{value}. This works
17194by creating a singleton service type @var{name}, of which the returned
17195service is an instance.
17196
17197For example, this extends mcron (@pxref{Scheduled Job Execution}) with
17198an additional job:
17199
17200@example
17201(simple-service 'my-mcron-job mcron-service-type
17202 #~(job '(next-hour (3)) "guix gc -F 2G"))
17203@end example
17204@end deffn
17205
0adfe95a
LC
17206At the core of the service abstraction lies the @code{fold-services}
17207procedure, which is responsible for ``compiling'' a list of services
d62e201c
LC
17208down to a single directory that contains everything needed to boot and
17209run the system---the directory shown by the @command{guix system build}
17210command (@pxref{Invoking guix system}). In essence, it propagates
17211service extensions down the service graph, updating each node parameters
17212on the way, until it reaches the root node.
0adfe95a
LC
17213
17214@deffn {Scheme Procedure} fold-services @var{services} @
d62e201c 17215 [#:target-type @var{system-service-type}]
0adfe95a
LC
17216Fold @var{services} by propagating their extensions down to the root of
17217type @var{target-type}; return the root service adjusted accordingly.
17218@end deffn
17219
17220Lastly, the @code{(gnu services)} module also defines several essential
17221service types, some of which are listed below.
17222
d62e201c
LC
17223@defvr {Scheme Variable} system-service-type
17224This is the root of the service graph. It produces the system directory
17225as returned by the @command{guix system build} command.
17226@end defvr
17227
0adfe95a 17228@defvr {Scheme Variable} boot-service-type
d62e201c
LC
17229The type of the ``boot service'', which produces the @dfn{boot script}.
17230The boot script is what the initial RAM disk runs when booting.
0adfe95a
LC
17231@end defvr
17232
17233@defvr {Scheme Variable} etc-service-type
17234The type of the @file{/etc} service. This service can be extended by
17235passing it name/file tuples such as:
17236
17237@example
17238(list `("issue" ,(plain-file "issue" "Welcome!\n")))
17239@end example
17240
17241In this example, the effect would be to add an @file{/etc/issue} file
17242pointing to the given file.
17243@end defvr
17244
17245@defvr {Scheme Variable} setuid-program-service-type
17246Type for the ``setuid-program service''. This service collects lists of
17247executable file names, passed as gexps, and adds them to the set of
17248setuid-root programs on the system (@pxref{Setuid Programs}).
17249@end defvr
17250
af4c3fd5
LC
17251@defvr {Scheme Variable} profile-service-type
17252Type of the service that populates the @dfn{system profile}---i.e., the
17253programs under @file{/run/current-system/profile}. Other services can
17254extend it by passing it lists of packages to add to the system profile.
17255@end defvr
17256
0adfe95a 17257
dd17bc38
AK
17258@node Shepherd Services
17259@subsubsection Shepherd Services
0adfe95a 17260
e32171ee 17261@cindex shepherd services
0adfe95a
LC
17262@cindex PID 1
17263@cindex init system
a40424bd
CM
17264The @code{(gnu services shepherd)} module provides a way to define
17265services managed by the GNU@tie{}Shepherd, which is the GuixSD
17266initialization system---the first process that is started when the
1068f26b
AE
17267system boots, also known as PID@tie{}1
17268(@pxref{Introduction,,, shepherd, The GNU Shepherd Manual}).
6f305ea5 17269
dd17bc38
AK
17270Services in the Shepherd can depend on each other. For instance, the
17271SSH daemon may need to be started after the syslog daemon has been
17272started, which in turn can only happen once all the file systems have
17273been mounted. The simple operating system defined earlier (@pxref{Using
17274the Configuration System}) results in a service graph like this:
6f305ea5 17275
710fa231 17276@image{images/shepherd-graph,,5in,Typical shepherd service graph.}
6f305ea5
LC
17277
17278You can actually generate such a graph for any operating system
710fa231
AK
17279definition using the @command{guix system shepherd-graph} command
17280(@pxref{system-shepherd-graph, @command{guix system shepherd-graph}}).
6f305ea5 17281
d4053c71
AK
17282The @var{%shepherd-root-service} is a service object representing
17283PID@tie{}1, of type @var{shepherd-root-service-type}; it can be extended
17284by passing it lists of @code{<shepherd-service>} objects.
0adfe95a 17285
d4053c71 17286@deftp {Data Type} shepherd-service
dd17bc38 17287The data type representing a service managed by the Shepherd.
0adfe95a
LC
17288
17289@table @asis
17290@item @code{provision}
17291This is a list of symbols denoting what the service provides.
17292
dd17bc38
AK
17293These are the names that may be passed to @command{herd start},
17294@command{herd status}, and similar commands (@pxref{Invoking herd,,,
17295shepherd, The GNU Shepherd Manual}). @xref{Slots of services, the
17296@code{provides} slot,, shepherd, The GNU Shepherd Manual}, for details.
0adfe95a
LC
17297
17298@item @code{requirements} (default: @code{'()})
dd17bc38 17299List of symbols denoting the Shepherd services this one depends on.
0adfe95a
LC
17300
17301@item @code{respawn?} (default: @code{#t})
17302Whether to restart the service when it stops, for instance when the
17303underlying process dies.
17304
17305@item @code{start}
17306@itemx @code{stop} (default: @code{#~(const #f)})
dd17bc38
AK
17307The @code{start} and @code{stop} fields refer to the Shepherd's
17308facilities to start and stop processes (@pxref{Service De- and
17309Constructors,,, shepherd, The GNU Shepherd Manual}). They are given as
17310G-expressions that get expanded in the Shepherd configuration file
17311(@pxref{G-Expressions}).
0adfe95a
LC
17312
17313@item @code{documentation}
17314A documentation string, as shown when running:
17315
17316@example
dd17bc38 17317herd doc @var{service-name}
0adfe95a
LC
17318@end example
17319
17320where @var{service-name} is one of the symbols in @var{provision}
dd17bc38 17321(@pxref{Invoking herd,,, shepherd, The GNU Shepherd Manual}).
fae685b9
LC
17322
17323@item @code{modules} (default: @var{%default-modules})
17324This is the list of modules that must be in scope when @code{start} and
17325@code{stop} are evaluated.
17326
0adfe95a
LC
17327@end table
17328@end deftp
17329
d4053c71 17330@defvr {Scheme Variable} shepherd-root-service-type
dd17bc38 17331The service type for the Shepherd ``root service''---i.e., PID@tie{}1.
0adfe95a
LC
17332
17333This is the service type that extensions target when they want to create
dd17bc38 17334shepherd services (@pxref{Service Types and Services}, for an example).
d4053c71 17335Each extension must pass a list of @code{<shepherd-service>}.
0adfe95a
LC
17336@end defvr
17337
d4053c71 17338@defvr {Scheme Variable} %shepherd-root-service
0adfe95a
LC
17339This service represents PID@tie{}1.
17340@end defvr
8451a568 17341
8451a568 17342
31f1f593
LC
17343@node Documentation
17344@section Documentation
17345
17346@cindex documentation, searching for
17347@cindex searching for documentation
17348@cindex Info, documentation format
17349@cindex man pages
17350@cindex manual pages
17351In most cases packages installed with Guix come with documentation.
17352There are two main documentation formats: ``Info'', a browseable
17353hypertext format used for GNU software, and ``manual pages'' (or ``man
17354pages''), the linear documentation format traditionally found on Unix.
17355Info manuals are accessed with the @command{info} command or with Emacs,
17356and man pages are accessed using @command{man}.
17357
17358You can look for documentation of software installed on your system by
17359keyword. For example, the following command searches for information
17360about ``TLS'' in Info manuals:
17361
17362@example
17363$ info -k TLS
17364"(emacs)Network Security" -- STARTTLS
17365"(emacs)Network Security" -- TLS
17366"(gnutls)Core TLS API" -- gnutls_certificate_set_verify_flags
17367"(gnutls)Core TLS API" -- gnutls_certificate_set_verify_function
17368@dots{}
17369@end example
17370
17371@noindent
17372The command below searches for the same keyword in man pages:
17373
17374@example
17375$ man -k TLS
17376SSL (7) - OpenSSL SSL/TLS library
17377certtool (1) - GnuTLS certificate tool
17378@dots {}
17379@end example
17380
17381These searches are purely local to your computer so you have the
17382guarantee that documentation you find corresponds to what you have
17383actually installed, you can access it off-line, and your privacy is
17384respected.
17385
17386Once you have these results, you can view the relevant documentation by
17387running, say:
17388
17389@example
17390$ info "(gnutls)Core TLS API"
17391@end example
17392
17393@noindent
17394or:
17395
17396@example
17397$ man certtool
17398@end example
17399
17400Info manuals contain sections and indices as well as hyperlinks like
17401those found in Web pages. The @command{info} reader (@pxref{Top, Info
17402reader,, info-stnd, Stand-alone GNU Info}) and its Emacs counterpart
17403(@pxref{Misc Help,,, emacs, The GNU Emacs Manual}) provide intuitive key
17404bindings to navigate manuals. @xref{Getting Started,,, info, Info: An
17405Introduction}, for an introduction to Info navigation.
17406
cf4a9129
LC
17407@node Installing Debugging Files
17408@section Installing Debugging Files
8451a568 17409
cf4a9129
LC
17410@cindex debugging files
17411Program binaries, as produced by the GCC compilers for instance, are
17412typically written in the ELF format, with a section containing
17413@dfn{debugging information}. Debugging information is what allows the
17414debugger, GDB, to map binary code to source code; it is required to
17415debug a compiled program in good conditions.
8451a568 17416
cf4a9129
LC
17417The problem with debugging information is that is takes up a fair amount
17418of disk space. For example, debugging information for the GNU C Library
17419weighs in at more than 60 MiB. Thus, as a user, keeping all the
17420debugging info of all the installed programs is usually not an option.
17421Yet, space savings should not come at the cost of an impediment to
17422debugging---especially in the GNU system, which should make it easier
17423for users to exert their computing freedom (@pxref{GNU Distribution}).
8451a568 17424
cf4a9129
LC
17425Thankfully, the GNU Binary Utilities (Binutils) and GDB provide a
17426mechanism that allows users to get the best of both worlds: debugging
17427information can be stripped from the binaries and stored in separate
17428files. GDB is then able to load debugging information from those files,
17429when they are available (@pxref{Separate Debug Files,,, gdb, Debugging
17430with GDB}).
8451a568 17431
cf4a9129
LC
17432The GNU distribution takes advantage of this by storing debugging
17433information in the @code{lib/debug} sub-directory of a separate package
17434output unimaginatively called @code{debug} (@pxref{Packages with
17435Multiple Outputs}). Users can choose to install the @code{debug} output
17436of a package when they need it. For instance, the following command
17437installs the debugging information for the GNU C Library and for GNU
17438Guile:
8451a568
LC
17439
17440@example
cf4a9129 17441guix package -i glibc:debug guile:debug
8451a568
LC
17442@end example
17443
cf4a9129
LC
17444GDB must then be told to look for debug files in the user's profile, by
17445setting the @code{debug-file-directory} variable (consider setting it
17446from the @file{~/.gdbinit} file, @pxref{Startup,,, gdb, Debugging with
17447GDB}):
8451a568 17448
cf4a9129
LC
17449@example
17450(gdb) set debug-file-directory ~/.guix-profile/lib/debug
17451@end example
8451a568 17452
cf4a9129
LC
17453From there on, GDB will pick up debugging information from the
17454@code{.debug} files under @file{~/.guix-profile/lib/debug}.
8451a568 17455
cf4a9129
LC
17456In addition, you will most likely want GDB to be able to show the source
17457code being debugged. To do that, you will have to unpack the source
17458code of the package of interest (obtained with @code{guix build
17459--source}, @pxref{Invoking guix build}), and to point GDB to that source
17460directory using the @code{directory} command (@pxref{Source Path,
17461@code{directory},, gdb, Debugging with GDB}).
8451a568 17462
cf4a9129
LC
17463@c XXX: keep me up-to-date
17464The @code{debug} output mechanism in Guix is implemented by the
17465@code{gnu-build-system} (@pxref{Build Systems}). Currently, it is
1068f26b
AE
17466opt-in---debugging information is available only for the packages
17467with definitions explicitly declaring a @code{debug} output. This may be
17468changed to opt-out in the future if our build farm servers can handle
cf4a9129
LC
17469the load. To check whether a package has a @code{debug} output, use
17470@command{guix package --list-available} (@pxref{Invoking guix package}).
8451a568 17471
8451a568 17472
05962f29
LC
17473@node Security Updates
17474@section Security Updates
17475
09866b39
LC
17476@cindex security updates
17477@cindex security vulnerabilities
17478Occasionally, important security vulnerabilities are discovered in software
17479packages and must be patched. Guix developers try hard to keep track of
17480known vulnerabilities and to apply fixes as soon as possible in the
17481@code{master} branch of Guix (we do not yet provide a ``stable'' branch
17482containing only security updates.) The @command{guix lint} tool helps
17483developers find out about vulnerable versions of software packages in the
17484distribution:
17485
17486@smallexample
17487$ guix lint -c cve
e30c2be1
LC
17488gnu/packages/base.scm:652:2: glibc@@2.21: probably vulnerable to CVE-2015-1781, CVE-2015-7547
17489gnu/packages/gcc.scm:334:2: gcc@@4.9.3: probably vulnerable to CVE-2015-5276
17490gnu/packages/image.scm:312:2: openjpeg@@2.1.0: probably vulnerable to CVE-2016-1923, CVE-2016-1924
09866b39
LC
17491@dots{}
17492@end smallexample
17493
17494@xref{Invoking guix lint}, for more information.
17495
843858b8 17496@quotation Note
09866b39
LC
17497As of version @value{VERSION}, the feature described below is considered
17498``beta''.
843858b8 17499@end quotation
05962f29 17500
09866b39 17501Guix follows a functional
05962f29
LC
17502package management discipline (@pxref{Introduction}), which implies
17503that, when a package is changed, @emph{every package that depends on it}
17504must be rebuilt. This can significantly slow down the deployment of
17505fixes in core packages such as libc or Bash, since basically the whole
17506distribution would need to be rebuilt. Using pre-built binaries helps
17507(@pxref{Substitutes}), but deployment may still take more time than
17508desired.
17509
17510@cindex grafts
1068f26b 17511To address this, Guix implements @dfn{grafts}, a mechanism that allows
05962f29
LC
17512for fast deployment of critical updates without the costs associated
17513with a whole-distribution rebuild. The idea is to rebuild only the
17514package that needs to be patched, and then to ``graft'' it onto packages
17515explicitly installed by the user and that were previously referring to
17516the original package. The cost of grafting is typically very low, and
17517order of magnitudes lower than a full rebuild of the dependency chain.
17518
17519@cindex replacements of packages, for grafts
17520For instance, suppose a security update needs to be applied to Bash.
17521Guix developers will provide a package definition for the ``fixed''
17522Bash, say @var{bash-fixed}, in the usual way (@pxref{Defining
17523Packages}). Then, the original package definition is augmented with a
17524@code{replacement} field pointing to the package containing the bug fix:
17525
17526@example
17527(define bash
17528 (package
17529 (name "bash")
17530 ;; @dots{}
17531 (replacement bash-fixed)))
17532@end example
17533
c22a1324
LC
17534From there on, any package depending directly or indirectly on Bash---as
17535reported by @command{guix gc --requisites} (@pxref{Invoking guix
17536gc})---that is installed is automatically ``rewritten'' to refer to
05962f29 17537@var{bash-fixed} instead of @var{bash}. This grafting process takes
1068f26b 17538time proportional to the size of the package, usually less than a
c22a1324
LC
17539minute for an ``average'' package on a recent machine. Grafting is
17540recursive: when an indirect dependency requires grafting, then grafting
17541``propagates'' up to the package that the user is installing.
05962f29 17542
57bdd79e
LC
17543Currently, the length of the name and version of the graft and that of
17544the package it replaces (@var{bash-fixed} and @var{bash} in the example
17545above) must be equal. This restriction mostly comes from the fact that
17546grafting works by patching files, including binary files, directly.
05962f29
LC
17547Other restrictions may apply: for instance, when adding a graft to a
17548package providing a shared library, the original shared library and its
17549replacement must have the same @code{SONAME} and be binary-compatible.
17550
59a4dd50
LC
17551The @option{--no-grafts} command-line option allows you to forcefully
17552avoid grafting (@pxref{Common Build Options, @option{--no-grafts}}).
17553Thus, the command:
17554
17555@example
17556guix build bash --no-grafts
17557@end example
17558
17559@noindent
17560returns the store file name of the original Bash, whereas:
17561
17562@example
17563guix build bash
17564@end example
17565
17566@noindent
17567returns the store file name of the ``fixed'', replacement Bash. This
17568allows you to distinguish between the two variants of Bash.
17569
17570To verify which Bash your whole profile refers to, you can run
17571(@pxref{Invoking guix gc}):
17572
17573@example
17574guix gc -R `readlink -f ~/.guix-profile` | grep bash
17575@end example
17576
17577@noindent
17578@dots{} and compare the store file names that you get with those above.
17579Likewise for a complete GuixSD system generation:
17580
17581@example
17582guix gc -R `guix system build my-config.scm` | grep bash
17583@end example
17584
17585Lastly, to check which Bash running processes are using, you can use the
17586@command{lsof} command:
17587
17588@example
17589lsof | grep /gnu/store/.*bash
17590@end example
17591
05962f29 17592
cf4a9129
LC
17593@node Package Modules
17594@section Package Modules
8451a568 17595
cf4a9129
LC
17596From a programming viewpoint, the package definitions of the
17597GNU distribution are provided by Guile modules in the @code{(gnu packages
17598@dots{})} name space@footnote{Note that packages under the @code{(gnu
17599packages @dots{})} module name space are not necessarily ``GNU
17600packages''. This module naming scheme follows the usual Guile module
17601naming convention: @code{gnu} means that these modules are distributed
17602as part of the GNU system, and @code{packages} identifies modules that
17603define packages.} (@pxref{Modules, Guile modules,, guile, GNU Guile
17604Reference Manual}). For instance, the @code{(gnu packages emacs)}
17605module exports a variable named @code{emacs}, which is bound to a
17606@code{<package>} object (@pxref{Defining Packages}).
113daf62 17607
300868ba 17608The @code{(gnu packages @dots{})} module name space is
cf4a9129
LC
17609automatically scanned for packages by the command-line tools. For
17610instance, when running @code{guix package -i emacs}, all the @code{(gnu
17611packages @dots{})} modules are scanned until one that exports a package
17612object whose name is @code{emacs} is found. This package search
17613facility is implemented in the @code{(gnu packages)} module.
113daf62 17614
300868ba 17615@cindex customization, of packages
8689901f 17616@cindex package module search path
cf4a9129 17617Users can store package definitions in modules with different
60142854 17618names---e.g., @code{(my-packages emacs)}@footnote{Note that the file
c95ded7e
LC
17619name and module name must match. For instance, the @code{(my-packages
17620emacs)} module must be stored in a @file{my-packages/emacs.scm} file
17621relative to the load path specified with @option{--load-path} or
17622@code{GUIX_PACKAGE_PATH}. @xref{Modules and the File System,,,
17623guile, GNU Guile Reference Manual}, for details.}. These package definitions
1068f26b
AE
17624will not be visible by default. Users can invoke commands such as
17625@command{guix package} and @command{guix build} with the
c95ded7e
LC
17626@code{-e} option so that they know where to find the package. Better
17627yet, they can use the
300868ba 17628@code{-L} option of these commands to make those modules visible
8689901f
LC
17629(@pxref{Invoking guix build, @code{--load-path}}), or define the
17630@code{GUIX_PACKAGE_PATH} environment variable. This environment
17631variable makes it easy to extend or customize the distribution and is
17632honored by all the user interfaces.
17633
17634@defvr {Environment Variable} GUIX_PACKAGE_PATH
1068f26b
AE
17635This is a colon-separated list of directories to search for additional
17636package modules. Directories listed in this variable take precedence
17637over the own modules of the distribution.
8689901f 17638@end defvr
ef5dd60a 17639
cf4a9129
LC
17640The distribution is fully @dfn{bootstrapped} and @dfn{self-contained}:
17641each package is built based solely on other packages in the
17642distribution. The root of this dependency graph is a small set of
17643@dfn{bootstrap binaries}, provided by the @code{(gnu packages
17644bootstrap)} module. For more information on bootstrapping,
081145cf 17645@pxref{Bootstrapping}.
ef5dd60a 17646
cf4a9129
LC
17647@node Packaging Guidelines
17648@section Packaging Guidelines
ef5dd60a 17649
e32171ee 17650@cindex packages, creating
cf4a9129
LC
17651The GNU distribution is nascent and may well lack some of your favorite
17652packages. This section describes how you can help make the distribution
17653grow. @xref{Contributing}, for additional information on how you can
17654help.
ef5dd60a 17655
cf4a9129
LC
17656Free software packages are usually distributed in the form of
17657@dfn{source code tarballs}---typically @file{tar.gz} files that contain
17658all the source files. Adding a package to the distribution means
17659essentially two things: adding a @dfn{recipe} that describes how to
17660build the package, including a list of other packages required to build
f97c9175 17661it, and adding @dfn{package metadata} along with that recipe, such as a
cf4a9129 17662description and licensing information.
ef5dd60a 17663
cf4a9129
LC
17664In Guix all this information is embodied in @dfn{package definitions}.
17665Package definitions provide a high-level view of the package. They are
17666written using the syntax of the Scheme programming language; in fact,
17667for each package we define a variable bound to the package definition,
17668and export that variable from a module (@pxref{Package Modules}).
17669However, in-depth Scheme knowledge is @emph{not} a prerequisite for
17670creating packages. For more information on package definitions,
081145cf 17671@pxref{Defining Packages}.
ef5dd60a 17672
cf4a9129
LC
17673Once a package definition is in place, stored in a file in the Guix
17674source tree, it can be tested using the @command{guix build} command
17675(@pxref{Invoking guix build}). For example, assuming the new package is
c71979f4
LC
17676called @code{gnew}, you may run this command from the Guix build tree
17677(@pxref{Running Guix Before It Is Installed}):
ef5dd60a
LC
17678
17679@example
cf4a9129 17680./pre-inst-env guix build gnew --keep-failed
ef5dd60a 17681@end example
ef5dd60a 17682
cf4a9129
LC
17683Using @code{--keep-failed} makes it easier to debug build failures since
17684it provides access to the failed build tree. Another useful
17685command-line option when debugging is @code{--log-file}, to access the
17686build log.
ef5dd60a 17687
cf4a9129
LC
17688If the package is unknown to the @command{guix} command, it may be that
17689the source file contains a syntax error, or lacks a @code{define-public}
17690clause to export the package variable. To figure it out, you may load
17691the module from Guile to get more information about the actual error:
ef5dd60a 17692
cf4a9129
LC
17693@example
17694./pre-inst-env guile -c '(use-modules (gnu packages gnew))'
17695@end example
ef5dd60a 17696
cf4a9129
LC
17697Once your package builds correctly, please send us a patch
17698(@pxref{Contributing}). Well, if you need help, we will be happy to
17699help you too. Once the patch is committed in the Guix repository, the
17700new package automatically gets built on the supported platforms by
2b1cee21 17701@url{http://hydra.gnu.org/jobset/gnu/master, our continuous integration
cf4a9129 17702system}.
ef5dd60a 17703
cf4a9129
LC
17704@cindex substituter
17705Users can obtain the new package definition simply by running
17706@command{guix pull} (@pxref{Invoking guix pull}). When
17707@code{hydra.gnu.org} is done building the package, installing the
17708package automatically downloads binaries from there
17709(@pxref{Substitutes}). The only place where human intervention is
17710needed is to review and apply the patch.
ef5dd60a 17711
ef5dd60a 17712
cf4a9129 17713@menu
ec0339cd
LC
17714* Software Freedom:: What may go into the distribution.
17715* Package Naming:: What's in a name?
17716* Version Numbers:: When the name is not enough.
cbd02397 17717* Synopses and Descriptions:: Helping users find the right package.
fb4d6f6c 17718* Python Modules:: A touch of British comedy.
ec0339cd 17719* Perl Modules:: Little pearls.
e1c963bf 17720* Java Packages:: Coffee break.
ec0339cd 17721* Fonts:: Fond of fonts.
cf4a9129 17722@end menu
ef5dd60a 17723
cf4a9129
LC
17724@node Software Freedom
17725@subsection Software Freedom
ef5dd60a 17726
cf4a9129 17727@c Adapted from http://www.gnu.org/philosophy/philosophy.html.
e32171ee 17728@cindex free software
cf4a9129
LC
17729The GNU operating system has been developed so that users can have
17730freedom in their computing. GNU is @dfn{free software}, meaning that
17731users have the @url{http://www.gnu.org/philosophy/free-sw.html,four
17732essential freedoms}: to run the program, to study and change the program
17733in source code form, to redistribute exact copies, and to distribute
17734modified versions. Packages found in the GNU distribution provide only
17735software that conveys these four freedoms.
c11a6eb1 17736
cf4a9129
LC
17737In addition, the GNU distribution follow the
17738@url{http://www.gnu.org/distros/free-system-distribution-guidelines.html,free
17739software distribution guidelines}. Among other things, these guidelines
17740reject non-free firmware, recommendations of non-free software, and
17741discuss ways to deal with trademarks and patents.
ef5dd60a 17742
1068f26b
AE
17743Some otherwise free upstream package sources contain a small and optional
17744subset that violates the above guidelines, for instance because this subset
17745is itself non-free code. When that happens, the offending items are removed
17746with appropriate patches or code snippets in the @code{origin} form of the
17747package (@pxref{Defining Packages}). This way, @code{guix
cf4a9129
LC
17748build --source} returns the ``freed'' source rather than the unmodified
17749upstream source.
ef5dd60a 17750
ef5dd60a 17751
cf4a9129
LC
17752@node Package Naming
17753@subsection Package Naming
ef5dd60a 17754
e32171ee 17755@cindex package name
cf4a9129
LC
17756A package has actually two names associated with it:
17757First, there is the name of the @emph{Scheme variable}, the one following
17758@code{define-public}. By this name, the package can be made known in the
17759Scheme code, for instance as input to another package. Second, there is
17760the string in the @code{name} field of a package definition. This name
17761is used by package management commands such as
17762@command{guix package} and @command{guix build}.
ef5dd60a 17763
cf4a9129
LC
17764Both are usually the same and correspond to the lowercase conversion of
17765the project name chosen upstream, with underscores replaced with
17766hyphens. For instance, GNUnet is available as @code{gnunet}, and
17767SDL_net as @code{sdl-net}.
927097ef 17768
cf4a9129 17769We do not add @code{lib} prefixes for library packages, unless these are
081145cf 17770already part of the official project name. But @pxref{Python
cf4a9129
LC
17771Modules} and @ref{Perl Modules} for special rules concerning modules for
17772the Python and Perl languages.
927097ef 17773
1b366ee4 17774Font package names are handled differently, @pxref{Fonts}.
7fec52b7 17775
ef5dd60a 17776
cf4a9129
LC
17777@node Version Numbers
17778@subsection Version Numbers
ef5dd60a 17779
e32171ee 17780@cindex package version
cf4a9129
LC
17781We usually package only the latest version of a given free software
17782project. But sometimes, for instance for incompatible library versions,
17783two (or more) versions of the same package are needed. These require
17784different Scheme variable names. We use the name as defined
17785in @ref{Package Naming}
17786for the most recent version; previous versions use the same name, suffixed
17787by @code{-} and the smallest prefix of the version number that may
17788distinguish the two versions.
ef5dd60a 17789
cf4a9129
LC
17790The name inside the package definition is the same for all versions of a
17791package and does not contain any version number.
ef5dd60a 17792
cf4a9129 17793For instance, the versions 2.24.20 and 3.9.12 of GTK+ may be packaged as follows:
ef5dd60a 17794
cf4a9129
LC
17795@example
17796(define-public gtk+
17797 (package
17d8e33f
ML
17798 (name "gtk+")
17799 (version "3.9.12")
17800 ...))
cf4a9129
LC
17801(define-public gtk+-2
17802 (package
17d8e33f
ML
17803 (name "gtk+")
17804 (version "2.24.20")
17805 ...))
cf4a9129
LC
17806@end example
17807If we also wanted GTK+ 3.8.2, this would be packaged as
17808@example
17809(define-public gtk+-3.8
17810 (package
17d8e33f
ML
17811 (name "gtk+")
17812 (version "3.8.2")
17813 ...))
cf4a9129 17814@end example
ef5dd60a 17815
880d647d
LC
17816@c See <https://lists.gnu.org/archive/html/guix-devel/2016-01/msg00425.html>,
17817@c for a discussion of what follows.
17818@cindex version number, for VCS snapshots
17819Occasionally, we package snapshots of upstream's version control system
17820(VCS) instead of formal releases. This should remain exceptional,
17821because it is up to upstream developers to clarify what the stable
17822release is. Yet, it is sometimes necessary. So, what should we put in
17823the @code{version} field?
17824
17825Clearly, we need to make the commit identifier of the VCS snapshot
17826visible in the version string, but we also need to make sure that the
17827version string is monotonically increasing so that @command{guix package
17828--upgrade} can determine which version is newer. Since commit
17829identifiers, notably with Git, are not monotonically increasing, we add
17830a revision number that we increase each time we upgrade to a newer
17831snapshot. The resulting version string looks like this:
17832
17833@example
178342.0.11-3.cabba9e
17835 ^ ^ ^
17836 | | `-- upstream commit ID
17837 | |
17838 | `--- Guix package revision
17839 |
17840latest upstream version
17841@end example
17842
17843It is a good idea to strip commit identifiers in the @code{version}
17844field to, say, 7 digits. It avoids an aesthetic annoyance (assuming
17845aesthetics have a role to play here) as well as problems related to OS
17846limits such as the maximum shebang length (127 bytes for the Linux
17847kernel.) It is best to use the full commit identifiers in
561360a5
LC
17848@code{origin}s, though, to avoid ambiguities. A typical package
17849definition may look like this:
17850
17851@example
17852(define my-package
6e42660b 17853 (let ((commit "c3f29bc928d5900971f65965feaae59e1272a3f7")
17854 (revision "1")) ;Guix package revision
561360a5 17855 (package
6e42660b 17856 (version (string-append "0.9-" revision "."
561360a5
LC
17857 (string-take commit 7)))
17858 (source (origin
17859 (method git-fetch)
17860 (uri (git-reference
17861 (url "git://example.org/my-package.git")
17862 (commit commit)))
17863 (sha256 (base32 "1mbikn@dots{}"))
17864 (file-name (string-append "my-package-" version
17865 "-checkout"))))
17866 ;; @dots{}
17867 )))
17868@end example
880d647d 17869
cbd02397
LC
17870@node Synopses and Descriptions
17871@subsection Synopses and Descriptions
17872
e32171ee
JD
17873@cindex package description
17874@cindex package synopsis
cbd02397
LC
17875As we have seen before, each package in GNU@tie{}Guix includes a
17876synopsis and a description (@pxref{Defining Packages}). Synopses and
17877descriptions are important: They are what @command{guix package
17878--search} searches, and a crucial piece of information to help users
17879determine whether a given package suits their needs. Consequently,
17880packagers should pay attention to what goes into them.
17881
17882Synopses must start with a capital letter and must not end with a
17883period. They must not start with ``a'' or ``the'', which usually does
17884not bring anything; for instance, prefer ``File-frobbing tool'' over ``A
17885tool that frobs files''. The synopsis should say what the package
17886is---e.g., ``Core GNU utilities (file, text, shell)''---or what it is
17887used for---e.g., the synopsis for GNU@tie{}grep is ``Print lines
17888matching a pattern''.
17889
17890Keep in mind that the synopsis must be meaningful for a very wide
17891audience. For example, ``Manipulate alignments in the SAM format''
17892might make sense for a seasoned bioinformatics researcher, but might be
17893fairly unhelpful or even misleading to a non-specialized audience. It
17894is a good idea to come up with a synopsis that gives an idea of the
17895application domain of the package. In this example, this might give
17896something like ``Manipulate nucleotide sequence alignments'', which
17897hopefully gives the user a better idea of whether this is what they are
17898looking for.
17899
cbd02397
LC
17900Descriptions should take between five and ten lines. Use full
17901sentences, and avoid using acronyms without first introducing them.
762e54b7
LC
17902Please avoid marketing phrases such as ``world-leading'',
17903``industrial-strength'', and ``next-generation'', and avoid superlatives
17904like ``the most advanced''---they are not helpful to users looking for a
17905package and may even sound suspicious. Instead, try to be factual,
17906mentioning use cases and features.
17907
17908@cindex Texinfo markup, in package descriptions
cbd02397
LC
17909Descriptions can include Texinfo markup, which is useful to introduce
17910ornaments such as @code{@@code} or @code{@@dfn}, bullet lists, or
ba7d6c76
ML
17911hyperlinks (@pxref{Overview,,, texinfo, GNU Texinfo}). However you
17912should be careful when using some characters for example @samp{@@} and
17913curly braces which are the basic special characters in Texinfo
17914(@pxref{Special Characters,,, texinfo, GNU Texinfo}). User interfaces
17915such as @command{guix package --show} take care of rendering it
17916appropriately.
cbd02397
LC
17917
17918Synopses and descriptions are translated by volunteers
17919@uref{http://translationproject.org/domain/guix-packages.html, at the
17920Translation Project} so that as many users as possible can read them in
17921their native language. User interfaces search them and display them in
17922the language specified by the current locale.
17923
17924Translation is a lot of work so, as a packager, please pay even more
17925attention to your synopses and descriptions as every change may entail
ba7d6c76 17926additional work for translators. In order to help them, it is possible
36743e71 17927to make recommendations or instructions visible to them by inserting
ba7d6c76
ML
17928special comments like this (@pxref{xgettext Invocation,,, gettext, GNU
17929Gettext}):
17930
17931@example
17932;; TRANSLATORS: "X11 resize-and-rotate" should not be translated.
17933(description "ARandR is designed to provide a simple visual front end
17934for the X11 resize-and-rotate (RandR) extension. @dots{}")
17935@end example
cbd02397 17936
ef5dd60a 17937
cf4a9129
LC
17938@node Python Modules
17939@subsection Python Modules
ef5dd60a 17940
e32171ee 17941@cindex python
cf4a9129
LC
17942We currently package Python 2 and Python 3, under the Scheme variable names
17943@code{python-2} and @code{python} as explained in @ref{Version Numbers}.
17944To avoid confusion and naming clashes with other programming languages, it
17945seems desirable that the name of a package for a Python module contains
17946the word @code{python}.
ef5dd60a 17947
cf4a9129
LC
17948Some modules are compatible with only one version of Python, others with both.
17949If the package Foo compiles only with Python 3, we name it
17950@code{python-foo}; if it compiles only with Python 2, we name it
17951@code{python2-foo}. If it is compatible with both versions, we create two
17952packages with the corresponding names.
ef5dd60a 17953
cf4a9129
LC
17954If a project already contains the word @code{python}, we drop this;
17955for instance, the module python-dateutil is packaged under the names
99c866a0
HG
17956@code{python-dateutil} and @code{python2-dateutil}. If the project name
17957starts with @code{py} (e.g. @code{pytz}), we keep it and prefix it as
17958described above.
113daf62 17959
e940a271
HG
17960@subsubsection Specifying Dependencies
17961@cindex inputs, for Python packages
17962
17963Dependency information for Python packages is usually available in the
17964package source tree, with varying degrees of accuracy: in the
17965@file{setup.py} file, in @file{requirements.txt}, or in @file{tox.ini}.
17966
17967Your mission, when writing a recipe for a Python package, is to map
17968these dependencies to the appropriate type of ``input'' (@pxref{package
17969Reference, inputs}). Although the @code{pypi} importer normally does a
17970good job (@pxref{Invoking guix import}), you may want to check the
17971following check list to determine which dependency goes where.
17972
17973@itemize
17974
aaf75c89
HG
17975@item
17976We currently package Python 2 with @code{setuptools} and @code{pip}
17977installed like Python 3.4 has per default. Thus you don't need to
891a843d
HG
17978specify either of these as an input. @command{guix lint} will warn you
17979if you do.
aaf75c89 17980
e940a271
HG
17981@item
17982Python dependencies required at run time go into
17983@code{propagated-inputs}. They are typically defined with the
17984@code{install_requires} keyword in @file{setup.py}, or in the
17985@file{requirements.txt} file.
17986
17987@item
17988Python packages required only at build time---e.g., those listed with
17989the @code{setup_requires} keyword in @file{setup.py}---or only for
17990testing---e.g., those in @code{tests_require}---go into
17991@code{native-inputs}. The rationale is that (1) they do not need to be
17992propagated because they are not needed at run time, and (2) in a
17993cross-compilation context, it's the ``native'' input that we'd want.
17994
aaf75c89 17995Examples are the @code{pytest}, @code{mock}, and @code{nose} test
e940a271
HG
17996frameworks. Of course if any of these packages is also required at
17997run-time, it needs to go to @code{propagated-inputs}.
17998
17999@item
18000Anything that does not fall in the previous categories goes to
18001@code{inputs}, for example programs or C libraries required for building
18002Python packages containing C extensions.
18003
18004@item
18005If a Python package has optional dependencies (@code{extras_require}),
18006it is up to you to decide whether to add them or not, based on their
18007usefulness/overhead ratio (@pxref{Submitting Patches, @command{guix
18008size}}).
18009
18010@end itemize
18011
18012
cf4a9129
LC
18013@node Perl Modules
18014@subsection Perl Modules
523e4896 18015
e32171ee 18016@cindex perl
cf4a9129
LC
18017Perl programs standing for themselves are named as any other package,
18018using the lowercase upstream name.
18019For Perl packages containing a single class, we use the lowercase class name,
18020replace all occurrences of @code{::} by dashes and prepend the prefix
18021@code{perl-}.
18022So the class @code{XML::Parser} becomes @code{perl-xml-parser}.
18023Modules containing several classes keep their lowercase upstream name and
18024are also prepended by @code{perl-}. Such modules tend to have the word
18025@code{perl} somewhere in their name, which gets dropped in favor of the
18026prefix. For instance, @code{libwww-perl} becomes @code{perl-libwww}.
523e4896 18027
523e4896 18028
e1c963bf
HG
18029@node Java Packages
18030@subsection Java Packages
18031
e32171ee 18032@cindex java
e1c963bf
HG
18033Java programs standing for themselves are named as any other package,
18034using the lowercase upstream name.
18035
18036To avoid confusion and naming clashes with other programming languages,
18037it is desirable that the name of a package for a Java package is
18038prefixed with @code{java-}. If a project already contains the word
18039@code{java}, we drop this; for instance, the package @code{ngsjava} is
18040packaged under the name @code{java-ngs}.
18041
18042For Java packages containing a single class or a small class hierarchy,
18043we use the lowercase class name, replace all occurrences of @code{.} by
18044dashes and prepend the prefix @code{java-}. So the class
18045@code{apache.commons.cli} becomes package
18046@code{java-apache-commons-cli}.
18047
18048
7fec52b7
AE
18049@node Fonts
18050@subsection Fonts
18051
e32171ee 18052@cindex fonts
7fec52b7
AE
18053For fonts that are in general not installed by a user for typesetting
18054purposes, or that are distributed as part of a larger software package,
18055we rely on the general packaging rules for software; for instance, this
18056applies to the fonts delivered as part of the X.Org system or fonts that
18057are part of TeX Live.
18058
18059To make it easier for a user to search for fonts, names for other packages
18060containing only fonts are constructed as follows, independently of the
18061upstream package name.
18062
18063The name of a package containing only one font family starts with
18064@code{font-}; it is followed by the foundry name and a dash @code{-}
18065if the foundry is known, and the font family name, in which spaces are
18066replaced by dashes (and as usual, all upper case letters are transformed
18067to lower case).
18068For example, the Gentium font family by SIL is packaged under the name
18069@code{font-sil-gentium}.
18070
18071For a package containing several font families, the name of the collection
18072is used in the place of the font family name.
18073For instance, the Liberation fonts consist of three families,
18074Liberation Sans, Liberation Serif and Liberation Mono.
18075These could be packaged separately under the names
18076@code{font-liberation-sans} and so on; but as they are distributed together
18077under a common name, we prefer to package them together as
18078@code{font-liberation}.
18079
18080In the case where several formats of the same font family or font collection
18081are packaged separately, a short form of the format, prepended by a dash,
18082is added to the package name. We use @code{-ttf} for TrueType fonts,
1b366ee4 18083@code{-otf} for OpenType fonts and @code{-type1} for PostScript Type 1
7fec52b7
AE
18084fonts.
18085
18086
b25937e3 18087
cf4a9129
LC
18088@node Bootstrapping
18089@section Bootstrapping
b25937e3 18090
cf4a9129 18091@c Adapted from the ELS 2013 paper.
b25937e3 18092
cf4a9129 18093@cindex bootstrapping
7889394e 18094
cf4a9129
LC
18095Bootstrapping in our context refers to how the distribution gets built
18096``from nothing''. Remember that the build environment of a derivation
18097contains nothing but its declared inputs (@pxref{Introduction}). So
18098there's an obvious chicken-and-egg problem: how does the first package
18099get built? How does the first compiler get compiled? Note that this is
18100a question of interest only to the curious hacker, not to the regular
18101user, so you can shamelessly skip this section if you consider yourself
18102a ``regular user''.
72b9d60d 18103
cf4a9129
LC
18104@cindex bootstrap binaries
18105The GNU system is primarily made of C code, with libc at its core. The
18106GNU build system itself assumes the availability of a Bourne shell and
18107command-line tools provided by GNU Coreutils, Awk, Findutils, `sed', and
18108`grep'. Furthermore, build programs---programs that run
18109@code{./configure}, @code{make}, etc.---are written in Guile Scheme
18110(@pxref{Derivations}). Consequently, to be able to build anything at
18111all, from scratch, Guix relies on pre-built binaries of Guile, GCC,
18112Binutils, libc, and the other packages mentioned above---the
18113@dfn{bootstrap binaries}.
72b9d60d 18114
cf4a9129
LC
18115These bootstrap binaries are ``taken for granted'', though we can also
18116re-create them if needed (more on that later).
72b9d60d 18117
cf4a9129 18118@unnumberedsubsec Preparing to Use the Bootstrap Binaries
c79d54fe 18119
cf4a9129
LC
18120@c As of Emacs 24.3, Info-mode displays the image, but since it's a
18121@c large image, it's hard to scroll. Oh well.
18122@image{images/bootstrap-graph,6in,,Dependency graph of the early bootstrap derivations}
523e4896 18123
cf4a9129
LC
18124The figure above shows the very beginning of the dependency graph of the
18125distribution, corresponding to the package definitions of the @code{(gnu
d33fa0c7
LC
18126packages bootstrap)} module. A similar figure can be generated with
18127@command{guix graph} (@pxref{Invoking guix graph}), along the lines of:
18128
18129@example
18130guix graph -t derivation \
18131 -e '(@@@@ (gnu packages bootstrap) %bootstrap-gcc)' \
18132 | dot -Tps > t.ps
18133@end example
18134
18135At this level of detail, things are
cf4a9129
LC
18136slightly complex. First, Guile itself consists of an ELF executable,
18137along with many source and compiled Scheme files that are dynamically
18138loaded when it runs. This gets stored in the @file{guile-2.0.7.tar.xz}
18139tarball shown in this graph. This tarball is part of Guix's ``source''
18140distribution, and gets inserted into the store with @code{add-to-store}
18141(@pxref{The Store}).
2e7b5cea 18142
cf4a9129
LC
18143But how do we write a derivation that unpacks this tarball and adds it
18144to the store? To solve this problem, the @code{guile-bootstrap-2.0.drv}
18145derivation---the first one that gets built---uses @code{bash} as its
18146builder, which runs @code{build-bootstrap-guile.sh}, which in turn calls
18147@code{tar} to unpack the tarball. Thus, @file{bash}, @file{tar},
18148@file{xz}, and @file{mkdir} are statically-linked binaries, also part of
18149the Guix source distribution, whose sole purpose is to allow the Guile
18150tarball to be unpacked.
fb729425 18151
cf4a9129
LC
18152Once @code{guile-bootstrap-2.0.drv} is built, we have a functioning
18153Guile that can be used to run subsequent build programs. Its first task
18154is to download tarballs containing the other pre-built binaries---this
18155is what the @code{.tar.xz.drv} derivations do. Guix modules such as
18156@code{ftp-client.scm} are used for this purpose. The
18157@code{module-import.drv} derivations import those modules in a directory
18158in the store, using the original layout. The
18159@code{module-import-compiled.drv} derivations compile those modules, and
18160write them in an output directory with the right layout. This
18161corresponds to the @code{#:modules} argument of
18162@code{build-expression->derivation} (@pxref{Derivations}).
fb729425 18163
cf4a9129
LC
18164Finally, the various tarballs are unpacked by the
18165derivations @code{gcc-bootstrap-0.drv}, @code{glibc-bootstrap-0.drv},
18166etc., at which point we have a working C tool chain.
fb729425 18167
fb729425 18168
cf4a9129 18169@unnumberedsubsec Building the Build Tools
523e4896 18170
cf4a9129
LC
18171Bootstrapping is complete when we have a full tool chain that does not
18172depend on the pre-built bootstrap tools discussed above. This
18173no-dependency requirement is verified by checking whether the files of
18174the final tool chain contain references to the @file{/gnu/store}
18175directories of the bootstrap inputs. The process that leads to this
18176``final'' tool chain is described by the package definitions found in
1f6f57df 18177the @code{(gnu packages commencement)} module.
df2ce343 18178
d33fa0c7
LC
18179The @command{guix graph} command allows us to ``zoom out'' compared to
18180the graph above, by looking at the level of package objects instead of
18181individual derivations---remember that a package may translate to
18182several derivations, typically one derivation to download its source,
18183one to build the Guile modules it needs, and one to actually build the
18184package from source. The command:
18185
18186@example
18187guix graph -t bag \
18188 -e '(@@@@ (gnu packages commencement)
18189 glibc-final-with-bootstrap-bash)' | dot -Tps > t.ps
18190@end example
18191
18192@noindent
18193produces the dependency graph leading to the ``final'' C
18194library@footnote{You may notice the @code{glibc-intermediate} label,
18195suggesting that it is not @emph{quite} final, but as a good
18196approximation, we will consider it final.}, depicted below.
18197
18198@image{images/bootstrap-packages,6in,,Dependency graph of the early packages}
18199
cf4a9129
LC
18200@c See <http://lists.gnu.org/archive/html/gnu-system-discuss/2012-10/msg00000.html>.
18201The first tool that gets built with the bootstrap binaries is
d33fa0c7
LC
18202GNU@tie{}Make---noted @code{make-boot0} above---which is a prerequisite
18203for all the following packages. From there Findutils and Diffutils get
18204built.
523e4896 18205
cf4a9129
LC
18206Then come the first-stage Binutils and GCC, built as pseudo cross
18207tools---i.e., with @code{--target} equal to @code{--host}. They are
18208used to build libc. Thanks to this cross-build trick, this libc is
18209guaranteed not to hold any reference to the initial tool chain.
4af2447e 18210
d33fa0c7
LC
18211From there the final Binutils and GCC (not shown above) are built.
18212GCC uses @code{ld}
cf4a9129
LC
18213from the final Binutils, and links programs against the just-built libc.
18214This tool chain is used to build the other packages used by Guix and by
18215the GNU Build System: Guile, Bash, Coreutils, etc.
4af2447e 18216
cf4a9129
LC
18217And voilà! At this point we have the complete set of build tools that
18218the GNU Build System expects. These are in the @code{%final-inputs}
dd164244
MW
18219variable of the @code{(gnu packages commencement)} module, and are
18220implicitly used by any package that uses @code{gnu-build-system}
1f6f57df 18221(@pxref{Build Systems, @code{gnu-build-system}}).
4af2447e 18222
4af2447e 18223
cf4a9129 18224@unnumberedsubsec Building the Bootstrap Binaries
4af2447e 18225
e32171ee 18226@cindex bootstrap binaries
cf4a9129
LC
18227Because the final tool chain does not depend on the bootstrap binaries,
18228those rarely need to be updated. Nevertheless, it is useful to have an
18229automated way to produce them, should an update occur, and this is what
18230the @code{(gnu packages make-bootstrap)} module provides.
4af2447e 18231
cf4a9129
LC
18232The following command builds the tarballs containing the bootstrap
18233binaries (Guile, Binutils, GCC, libc, and a tarball containing a mixture
18234of Coreutils and other basic command-line tools):
4b2615e1 18235
cf4a9129
LC
18236@example
18237guix build bootstrap-tarballs
18238@end example
18239
18240The generated tarballs are those that should be referred to in the
18241@code{(gnu packages bootstrap)} module mentioned at the beginning of
18242this section.
18243
18244Still here? Then perhaps by now you've started to wonder: when do we
18245reach a fixed point? That is an interesting question! The answer is
18246unknown, but if you would like to investigate further (and have
18247significant computational and storage resources to do so), then let us
18248know.
18249
18250@node Porting
18251@section Porting to a New Platform
18252
18253As discussed above, the GNU distribution is self-contained, and
18254self-containment is achieved by relying on pre-built ``bootstrap
18255binaries'' (@pxref{Bootstrapping}). These binaries are specific to an
18256operating system kernel, CPU architecture, and application binary
18257interface (ABI). Thus, to port the distribution to a platform that is
18258not yet supported, one must build those bootstrap binaries, and update
18259the @code{(gnu packages bootstrap)} module to use them on that platform.
18260
18261Fortunately, Guix can @emph{cross compile} those bootstrap binaries.
18262When everything goes well, and assuming the GNU tool chain supports the
18263target platform, this can be as simple as running a command like this
18264one:
18265
18266@example
18267guix build --target=armv5tel-linux-gnueabi bootstrap-tarballs
18268@end example
18269
1c0c417d
LC
18270For this to work, the @code{glibc-dynamic-linker} procedure in
18271@code{(gnu packages bootstrap)} must be augmented to return the right
18272file name for libc's dynamic linker on that platform; likewise,
18273@code{system->linux-architecture} in @code{(gnu packages linux)} must be
18274taught about the new platform.
18275
cf4a9129 18276Once these are built, the @code{(gnu packages bootstrap)} module needs
1c0c417d
LC
18277to be updated to refer to these binaries on the target platform. That
18278is, the hashes and URLs of the bootstrap tarballs for the new platform
18279must be added alongside those of the currently supported platforms. The
18280bootstrap Guile tarball is treated specially: it is expected to be
03d0e2d2 18281available locally, and @file{gnu/local.mk} has rules do download it for
1c0c417d
LC
18282the supported architectures; a rule for the new platform must be added
18283as well.
cf4a9129
LC
18284
18285In practice, there may be some complications. First, it may be that the
18286extended GNU triplet that specifies an ABI (like the @code{eabi} suffix
18287above) is not recognized by all the GNU tools. Typically, glibc
18288recognizes some of these, whereas GCC uses an extra @code{--with-abi}
18289configure flag (see @code{gcc.scm} for examples of how to handle this).
18290Second, some of the required packages could fail to build for that
18291platform. Lastly, the generated binaries could be broken for some
18292reason.
4af2447e 18293
9bf3c1a7 18294@c *********************************************************************
8c01b9d0 18295@include contributing.texi
c78bd12b 18296
568717fd
LC
18297@c *********************************************************************
18298@node Acknowledgments
18299@chapter Acknowledgments
18300
136787cb
LC
18301Guix is based on the @uref{http://nixos.org/nix/, Nix package manager},
18302which was designed and
4c7ac9aa
LC
18303implemented by Eelco Dolstra, with contributions from other people (see
18304the @file{nix/AUTHORS} file in Guix.) Nix pioneered functional package
568717fd
LC
18305management, and promoted unprecedented features, such as transactional
18306package upgrades and rollbacks, per-user profiles, and referentially
18307transparent build processes. Without this work, Guix would not exist.
18308
18309The Nix-based software distributions, Nixpkgs and NixOS, have also been
18310an inspiration for Guix.
18311
4c7ac9aa
LC
18312GNU@tie{}Guix itself is a collective work with contributions from a
18313number of people. See the @file{AUTHORS} file in Guix for more
18314information on these fine people. The @file{THANKS} file lists people
18315who have helped by reporting bugs, taking care of the infrastructure,
18316providing artwork and themes, making suggestions, and more---thank you!
18317
18318
568717fd
LC
18319@c *********************************************************************
18320@node GNU Free Documentation License
18321@appendix GNU Free Documentation License
e32171ee 18322@cindex license, GNU Free Documentation License
568717fd
LC
18323@include fdl-1.3.texi
18324
18325@c *********************************************************************
18326@node Concept Index
18327@unnumbered Concept Index
18328@printindex cp
18329
a85b83d2
LC
18330@node Programming Index
18331@unnumbered Programming Index
18332@syncodeindex tp fn
18333@syncodeindex vr fn
568717fd
LC
18334@printindex fn
18335
18336@bye
18337
18338@c Local Variables:
18339@c ispell-local-dictionary: "american";
18340@c End: