Skip to content
Snippets Groups Projects
guix.texi 538 KiB
Newer Older
  • Learn to ignore specific revisions
  • Andy Wingo's avatar
    Andy Wingo committed
    @samp{mail-chroot} or auth chroot settings.  If this setting is empty,
    "/./" in home dirs are ignored.  WARNING: Never add directories here
    which local users can modify, that may lead to root exploit.  Usually
    this should be done only if you don't allow shell access for users.
    <doc/wiki/Chrooting.txt>.
    Defaults to @samp{()}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} string mail-chroot
    Default chroot directory for mail processes.  This can be overridden
    for specific users in user database by giving /./ in user's home
    directory (e.g. /home/./user chroots into /home).  Note that usually
    there is no real need to do chrooting, Dovecot doesn't allow users to
    access files outside their mail directory anyway.  If your home
    directories are prefixed with the chroot directory, append "/." to
    @samp{mail-chroot}.  <doc/wiki/Chrooting.txt>.
    Defaults to @samp{""}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} file-name auth-socket-path
    UNIX socket path to master authentication server to find users.
    This is used by imap (for shared users) and lda.
    Defaults to @samp{"/var/run/dovecot/auth-userdb"}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} file-name mail-plugin-dir
    Directory where to look up mail plugins.
    Defaults to @samp{"/usr/lib/dovecot"}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mail-plugins
    List of plugins to load for all services.  Plugins specific to IMAP,
    LDA, etc. are added to this list in their own .conf files.
    Defaults to @samp{()}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-cache-min-mail-count
    The minimum number of mails in a mailbox before updates are done to
    cache file.  This allows optimizing Dovecot's behavior to do less disk
    writes at the cost of more disk reads.
    Defaults to @samp{0}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} string mailbox-idle-check-interval
    When IDLE command is running, mailbox is checked once in a while to
    see if there are any new mails or other changes.  This setting defines
    the minimum time to wait between those checks.  Dovecot can also use
    dnotify, inotify and kqueue to find out immediately when changes
    occur.
    Defaults to @samp{"30 secs"}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} boolean mail-save-crlf?
    Save mails with CR+LF instead of plain LF.  This makes sending those
    mails take less CPU, especially with sendfile() syscall with Linux and
    FreeBSD.  But it also creates a bit more disk I/O which may just make it
    slower.  Also note that if other software reads the mboxes/maildirs,
    they may handle the extra CRs wrong and cause problems.
    Defaults to @samp{#f}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} boolean maildir-stat-dirs?
    By default LIST command returns all entries in maildir beginning
    with a dot.  Enabling this option makes Dovecot return only entries
    which are directories.  This is done by stat()ing each entry, so it
    causes more disk I/O.
     (For systems setting struct @samp{dirent->d_type} this check is free
    and it's done always regardless of this setting).
    Defaults to @samp{#f}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} boolean maildir-copy-with-hardlinks?
    When copying a message, do it with hard links whenever possible.
    This makes the performance much better, and it's unlikely to have any
    side effects.
    Defaults to @samp{#t}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} boolean maildir-very-dirty-syncs?
    Assume Dovecot is the only MUA accessing Maildir: Scan cur/
    directory only when its mtime changes unexpectedly or when we can't find
    the mail otherwise.
    Defaults to @samp{#f}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mbox-read-locks
    Which locking methods to use for locking mbox.  There are four
    available:
    
    @table @code
    @item dotlock
    Create <mailbox>.lock file.  This is the oldest and most NFS-safe
    solution.  If you want to use /var/mail/ like directory, the users will
    need write access to that directory.
    @item dotlock-try
    Same as dotlock, but if it fails because of permissions or because there
    isn't enough disk space, just skip it.
    @item fcntl
    Use this if possible.  Works with NFS too if lockd is used.
    @item flock
    
    May not exist in all systems.  Doesn't work with NFS.
    
    Andy Wingo's avatar
    Andy Wingo committed
    @item lockf
    May not exist in all systems.  Doesn't work with NFS.
    @end table
    
    You can use multiple locking methods; if you do the order they're declared
    in is important to avoid deadlocks if other MTAs/MUAs are using multiple
    locking methods as well.  Some operating systems don't allow using some of
    them simultaneously.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mbox-write-locks
    
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} string mbox-lock-timeout
    Maximum time to wait for lock (all of them) before aborting.
    Defaults to @samp{"5 mins"}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} string mbox-dotlock-change-timeout
    If dotlock exists but the mailbox isn't modified in any way,
    override the lock file after this much time.
    Defaults to @samp{"2 mins"}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} boolean mbox-dirty-syncs?
    When mbox changes unexpectedly we have to fully read it to find out
    what changed.  If the mbox is large this can take a long time.  Since
    the change is usually just a newly appended mail, it'd be faster to
    simply read the new mails.  If this setting is enabled, Dovecot does
    this but still safely fallbacks to re-reading the whole mbox file
    whenever something in mbox isn't how it's expected to be.  The only real
    downside to this setting is that if some other MUA changes message
    flags, Dovecot doesn't notice it immediately.  Note that a full sync is
    done with SELECT, EXAMINE, EXPUNGE and CHECK commands.
    Defaults to @samp{#t}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} boolean mbox-very-dirty-syncs?
    Like @samp{mbox-dirty-syncs}, but don't do full syncs even with SELECT,
    EXAMINE, EXPUNGE or CHECK commands.  If this is set,
    @samp{mbox-dirty-syncs} is ignored.
    Defaults to @samp{#f}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} boolean mbox-lazy-writes?
    Delay writing mbox headers until doing a full write sync (EXPUNGE
    and CHECK commands and when closing the mailbox).  This is especially
    useful for POP3 where clients often delete all mails.  The downside is
    that our changes aren't immediately visible to other MUAs.
    Defaults to @samp{#t}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mbox-min-index-size
    If mbox size is smaller than this (e.g. 100k), don't write index
    files.  If an index file already exists it's still read, just not
    updated.
    Defaults to @samp{0}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mdbox-rotate-size
    Maximum dbox file size until it's rotated.
    Defaults to @samp{2000000}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} string mdbox-rotate-interval
    Maximum dbox file age until it's rotated.  Typically in days.  Day
    begins from midnight, so 1d = today, 2d = yesterday, etc.  0 = check
    disabled.
    Defaults to @samp{"1d"}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} boolean mdbox-preallocate-space?
    When creating new mdbox files, immediately preallocate their size to
    @samp{mdbox-rotate-size}.  This setting currently works only in Linux
    
    with some file systems (ext4, xfs).
    
    Andy Wingo's avatar
    Andy Wingo committed
    Defaults to @samp{#f}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-dir
    sdbox and mdbox support saving mail attachments to external files,
    which also allows single instance storage for them.  Other backends
    don't support this for now.
    
    WARNING: This feature hasn't been tested much yet.  Use at your own risk.
    
    Directory root where to store mail attachments.  Disabled, if empty.
    Defaults to @samp{""}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-attachment-min-size
    Attachments smaller than this aren't saved externally.  It's also
    possible to write a plugin to disable saving specific attachments
    externally.
    Defaults to @samp{128000}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-fs
    
    File system backend to use for saving attachments:
    
    Andy Wingo's avatar
    Andy Wingo committed
    @table @code
    @item posix
    No SiS done by Dovecot (but this might help FS's own deduplication)
    @item sis posix
    SiS with immediate byte-by-byte comparison during saving
    @item sis-queue posix
    SiS with delayed comparison and deduplication.
    @end table
    Defaults to @samp{"sis posix"}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-hash
    Hash format to use in attachment filenames.  You can add any text and
    variables: @code{%@{md4@}}, @code{%@{md5@}}, @code{%@{sha1@}},
    @code{%@{sha256@}}, @code{%@{sha512@}}, @code{%@{size@}}.  Variables can be
    truncated, e.g. @code{%@{sha256:80@}} returns only first 80 bits.
    Defaults to @samp{"%@{sha1@}"}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-process-limit
    
    Defaults to @samp{100}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-client-limit
    
    Defaults to @samp{1000}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-vsz-limit
    Default VSZ (virtual memory size) limit for service processes.
    This is mainly intended to catch and kill processes that leak memory
    before they eat up everything.
    Defaults to @samp{256000000}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} string default-login-user
    Login user is internally used by login processes.  This is the most
    untrusted user in Dovecot system.  It shouldn't have access to anything
    at all.
    Defaults to @samp{"dovenull"}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} string default-internal-user
    Internal user is used by unprivileged processes.  It should be
    separate from login user, so that login processes can't disturb other
    processes.
    Defaults to @samp{"dovecot"}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} string ssl?
    SSL/TLS support: yes, no, required.  <doc/wiki/SSL.txt>.
    Defaults to @samp{"required"}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} string ssl-cert
    PEM encoded X.509 SSL/TLS certificate (public key).
    Defaults to @samp{"</etc/dovecot/default.pem"}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} string ssl-key
    PEM encoded SSL/TLS private key.  The key is opened before
    dropping root privileges, so keep the key file unreadable by anyone but
    root.
    Defaults to @samp{"</etc/dovecot/private/default.pem"}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} string ssl-key-password
    If key file is password protected, give the password here.
    Alternatively give it when starting dovecot with -p parameter.  Since
    this file is often world-readable, you may want to place this setting
    instead to a different.
    Defaults to @samp{""}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} string ssl-ca
    PEM encoded trusted certificate authority.  Set this only if you
    intend to use @samp{ssl-verify-client-cert? #t}.  The file should
    contain the CA certificate(s) followed by the matching
    CRL(s).  (e.g. @samp{ssl-ca </etc/ssl/certs/ca.pem}).
    Defaults to @samp{""}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} boolean ssl-require-crl?
    Require that CRL check succeeds for client certificates.
    Defaults to @samp{#t}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} boolean ssl-verify-client-cert?
    Request client to send a certificate.  If you also want to require
    it, set @samp{auth-ssl-require-client-cert? #t} in auth section.
    Defaults to @samp{#f}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} string ssl-cert-username-field
    Which field from certificate to use for username.  commonName and
    x500UniqueIdentifier are the usual choices.  You'll also need to set
    @samp{auth-ssl-username-from-cert? #t}.
    Defaults to @samp{"commonName"}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} hours ssl-parameters-regenerate
    How often to regenerate the SSL parameters file.  Generation is
    quite CPU intensive operation.  The value is in hours, 0 disables
    regeneration entirely.
    Defaults to @samp{168}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} string ssl-protocols
    SSL protocols to use.
    Defaults to @samp{"!SSLv2"}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} string ssl-cipher-list
    SSL ciphers to use.
    Defaults to @samp{"ALL:!LOW:!SSLv2:!EXP:!aNULL"}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} string ssl-crypto-device
    SSL crypto device to use, for valid values run "openssl engine".
    Defaults to @samp{""}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} string postmaster-address
    Address to use when sending rejection mails.
    
    %d expands to recipient domain.
    Defaults to @samp{"postmaster@@%d"}.
    
    Andy Wingo's avatar
    Andy Wingo committed
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} string hostname
    Hostname to use in various parts of sent mails (e.g. in Message-Id)
    and in LMTP replies.  Default is the system's real hostname@@domain.
    Defaults to @samp{""}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} boolean quota-full-tempfail?
    If user is over quota, return with temporary failure instead of
    bouncing the mail.
    Defaults to @samp{#f}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} file-name sendmail-path
    Binary to use for sending mails.
    Defaults to @samp{"/usr/sbin/sendmail"}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} string submission-host
    If non-empty, send mails via this SMTP host[:port] instead of
    sendmail.
    Defaults to @samp{""}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} string rejection-subject
    Subject: header to use for rejection mails.  You can use the same
    variables as for @samp{rejection-reason} below.
    Defaults to @samp{"Rejected: %s"}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} string rejection-reason
    Human readable error message for rejection mails.  You can use
    variables:
    
    @table @code
    @item %n
    CRLF
    @item %r
    reason
    @item %s
    original subject
    @item %t
    recipient
    @end table
    Defaults to @samp{"Your message to <%t> was automatically rejected:%n%r"}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} string recipient-delimiter
    Delimiter character between local-part and detail in email
    address.
    Defaults to @samp{"+"}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} string lda-original-recipient-header
    Header where the original recipient address (SMTP's RCPT TO:
    address) is taken from if not available elsewhere.  With dovecot-lda -a
    parameter overrides this.  A commonly used header for this is
    X-Original-To.
    Defaults to @samp{""}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} boolean lda-mailbox-autocreate?
    Should saving a mail to a nonexistent mailbox automatically create
    it?.
    Defaults to @samp{#f}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} boolean lda-mailbox-autosubscribe?
    Should automatically created mailboxes be also automatically
    subscribed?.
    Defaults to @samp{#f}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer imap-max-line-length
    Maximum IMAP command line length.  Some clients generate very long
    command lines with huge mailboxes, so you may need to raise this if you
    get "Too long argument" or "IMAP command line too large" errors
    often.
    Defaults to @samp{64000}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} string imap-logout-format
    IMAP logout format string:
    @table @code
    @item %i
    total number of bytes read from client
    @item %o
    total number of bytes sent to client.
    @end table
    Defaults to @samp{"in=%i out=%o"}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} string imap-capability
    Override the IMAP CAPABILITY response.  If the value begins with '+',
    add the given capabilities on top of the defaults (e.g. +XFOO XBAR).
    Defaults to @samp{""}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} string imap-idle-notify-interval
    How long to wait between "OK Still here" notifications when client
    is IDLEing.
    Defaults to @samp{"2 mins"}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} string imap-id-send
    ID field names and values to send to clients.  Using * as the value
    makes Dovecot use the default value.  The following fields have default
    values currently: name, version, os, os-version, support-url,
    support-email.
    Defaults to @samp{""}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} string imap-id-log
    ID fields sent by client to log.  * means everything.
    Defaults to @samp{""}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list imap-client-workarounds
    Workarounds for various client bugs:
    
    @table @code
    @item delay-newmail
    Send EXISTS/RECENT new mail notifications only when replying to NOOP and
    CHECK commands.  Some clients ignore them otherwise, for example OSX
    Mail (<v2.1).  Outlook Express breaks more badly though, without this it
    may show user "Message no longer in server" errors.  Note that OE6
    still breaks even with this workaround if synchronization is set to
    "Headers Only".
    
    @item tb-extra-mailbox-sep
    Thunderbird gets somehow confused with LAYOUT=fs (mbox and dbox) and
    adds extra @samp{/} suffixes to mailbox names.  This option causes Dovecot to
    ignore the extra @samp{/} instead of treating it as invalid mailbox name.
    
    @item tb-lsub-flags
    Show \Noselect flags for LSUB replies with LAYOUT=fs (e.g. mbox).
    This makes Thunderbird realize they aren't selectable and show them
    greyed out, instead of only later giving "not selectable" popup error.
    @end table
    Defaults to @samp{()}.
    @end deftypevr
    
    @deftypevr {@code{dovecot-configuration} parameter} string imap-urlauth-host
    Host allowed in URLAUTH URLs sent by client.  "*" allows all.
    Defaults to @samp{""}.
    @end deftypevr
    
    
    Whew!  Lots of configuration options.  The nice thing about it though is
    that GuixSD has a complete interface to Dovecot's configuration
    language.  This allows not only a nice way to declare configurations,
    but also offers reflective capabilities as well: users can write code to
    inspect and transform configurations from within Scheme.
    
    However, it could be that you just want to get a @code{dovecot.conf} up
    and running.  In that case, you can pass an
    
    Alex Kost's avatar
    Alex Kost committed
    @code{opaque-dovecot-configuration} as the @code{#:config} parameter to
    
    Andy Wingo's avatar
    Andy Wingo committed
    @code{dovecot-service}.  As its name indicates, an opaque configuration
    does not have easy reflective capabilities.
    
    Available @code{opaque-dovecot-configuration} fields are:
    
    @deftypevr {@code{opaque-dovecot-configuration} parameter} package dovecot
    The dovecot package.
    @end deftypevr
    
    @deftypevr {@code{opaque-dovecot-configuration} parameter} string string
    The contents of the @code{dovecot.conf}, as a string.
    @end deftypevr
    
    For example, if your @code{dovecot.conf} is just the empty string, you
    could instantiate a dovecot service like this:
    
    @example
    (dovecot-service #:config
                     (opaque-dovecot-configuration
                      (string "")))
    @end example
    
    
    @subsubheading OpenSMTPD Service
    
    @deffn {Scheme Variable} opensmtpd-service-type
    This is the type of the @uref{https://www.opensmtpd.org, OpenSMTPD}
    service, whose value should be an @code{opensmtpd-configuration} object
    as in this example:
    
    @example
    (service opensmtpd-service-type
             (opensmtpd-configuration
               (config-file (local-file "./my-smtpd.conf"))))
    @end example
    @end deffn
    
    @deftp {Data Type} opensmtpd-configuration
    Data type regresenting the configuration of opensmtpd.
    
    @table @asis
    @item @code{package} (default: @var{opensmtpd})
    Package object of the OpenSMTPD SMTP server.
    
    @item @code{config-file} (default: @var{%default-opensmtpd-file})
    File-like object of the OpenSMTPD configuration file to use.  By default
    it listens on the loopback network interface, and allows for mail from
    users and daemons on the local machine, as well as permitting email to
    remote servers.  Run @command{man smtpd.conf} for more information.
    
    @end table
    @end deftp
    
    
    @node Kerberos Services
    @subsubsection Kerberos Services
    @cindex Kerberos
    
    
    The @code{(gnu services kerberos)} module provides services relating to
    
    the authentication protocol @dfn{Kerberos}.
    
    
    @subsubheading Krb5 Service
    
    Programs using a Kerberos client library normally
    expect a configuration file in @file{/etc/krb5.conf}.
    This service generates such a file from a definition provided in the
    operating system declaration.
    It does not cause any daemon to be started.
    
    No ``keytab'' files are provided by this service---you must explicitly create them.
    This service is known to work with the MIT client library, @code{mit-krb5}.
    Other implementations have not been tested.
    
    @defvr {Scheme Variable} krb5-service-type
    A service type for Kerberos 5 clients.
    @end defvr
    
    @noindent
    Here is an example of its use:
    @lisp
    (service krb5-service-type
             (krb5-configuration
              (default-realm "EXAMPLE.COM")
              (allow-weak-crypto? #t)
              (realms (list
                       (krb5-realm
                        (name "EXAMPLE.COM")
                        (admin-server "groucho.example.com")
                        (kdc "karl.example.com"))
                       (krb5-realm
                        (name "ARGRX.EDU")
                        (admin-server "kerb-admin.argrx.edu")
                        (kdc "keys.argrx.edu"))))))
    @end lisp
    
    @noindent
    This example provides a Kerberos@tie{}5 client configuration which:
    @itemize
    @item Recognizes two realms, @i{viz:} ``EXAMPLE.COM'' and ``ARGRX.EDU'', both
    of which have distinct administration servers and key distribution centers;
    @item Will default to the realm ``EXAMPLE.COM'' if the realm is not explicitly
    specified by clients;
    @item Accepts services which only support encryption types known to be weak.
    @end itemize
    
    The @code{krb5-realm} and @code{krb5-configuration} types have many fields.
    Only the most commonly used ones are described here.
    For a full list, and more detailed explanation of each, see the MIT
    @uref{http://web.mit.edu/kerberos/krb5-devel/doc/admin/conf_files/krb5_conf.html,,krb5.conf}
    documentation.
    
    
    @deftp {Data Type} krb5-realm
    @cindex realm, kerberos
    @table @asis
    @item @code{name}
    This field is a string identifying the name of the realm.
    A common convention is to use the fully qualified DNS name of your organization,
    converted to upper case.
    
    @item @code{admin-server}
    This field is a string identifying the host where the administration server is
    running.
    
    @item @code{kdc}
    This field is a string identifying the key distribution center
    for the realm.
    @end table
    @end deftp
    
    @deftp {Data Type} krb5-configuration
    
    @table @asis
    @item @code{allow-weak-crypto?} (default: @code{#f})
    If this flag is @code{#t} then services which only offer encryption algorithms
    known to be weak will be accepted.
    
    @item @code{default-realm} (default: @code{#f})
    This field should be a string identifying the default Kerberos
    realm for the client.
    You should set this field to the name of your Kerberos realm.
    If this value is @code{#f}
    then a realm must be specified with every Kerberos principal when invoking programs
    such as @command{kinit}.
    
    @item @code{realms}
    This should be a non-empty list of @code{krb5-realm} objects, which clients may
    access.
    Normally, one of them will have a @code{name} field matching the @code{default-realm}
    field.
    @end table
    @end deftp
    
    
    
    @subsubheading PAM krb5 Service
    @cindex pam-krb5
    
    
    The @code{pam-krb5} service allows for login authentication and password
    
    management via Kerberos.
    You will need this service if you want PAM enabled applications to authenticate
    users using Kerberos.
    
    @defvr {Scheme Variable} pam-krb5-service-type
    A service type for the Kerberos 5 PAM module.
    @end defvr
    
    @deftp {Data Type} pam-krb5-configuration
    Data type representing the configuration of the Kerberos 5 PAM module
    This type has the following parameters:
    @table @asis
    @item @code{pam-krb5} (default: @code{pam-krb5})
    The pam-krb5 package to use.
    
    @item @code{minimum-uid} (default: @code{1000})
    The smallest user ID for which Kerberos authentications should be attempted.
    Local accounts with lower values will silently fail to authenticate.
    @end table
    @end deftp
    
    
    
    @node Web Services
    @subsubsection Web Services
    
    
    @cindex web
    @cindex www
    @cindex HTTP
    
    The @code{(gnu services web)} module provides the following service:
    
    
    @deffn {Scheme Procedure} nginx-service [#:nginx nginx] @
    
           [#:log-directory ``/var/log/nginx''] @
           [#:run-directory ``/var/run/nginx''] @
    
           [#:vhost-list (list (nginx-vhost-configuration))] @
    
           [#:config-file]
    
    Return a service that runs @var{nginx}, the nginx web server.
    
    The nginx daemon loads its runtime configuration from @var{config-file}.
    Log files are written to @var{log-directory} and temporary runtime data
    files are written to @var{run-directory}.  For proper operation, these
    arguments should match what is in @var{config-file} to ensure that the
    directories are created when the service is activated.
    
    
    As an alternative to using a @var{config-file}, @var{vhost-list} can be
    used to specify the list of @dfn{virtual hosts} required on the host.  For
    this to work, use the default value for @var{config-file}.
    
    
    @deftp {Data Type} nginx-vhost-configuration
    Data type representing the configuration of an nginx virtual host.
    This type has the following parameters:
    
    @table @asis
    @item @code{http-port} (default: @code{80})
    Nginx will listen for HTTP connection on this port.  Set it at @code{#f} if
    nginx should not listen for HTTP (non secure) connection for this
    @dfn{virtual host}.
    
    @item @code{https-port} (default: @code{443})
    Nginx will listen for HTTPS connection on this port.  Set it at @code{#f} if
    nginx should not listen for HTTPS (secure) connection for this @dfn{virtual host}.
    
    Note that nginx can listen for HTTP and HTTPS connections in the same
    @dfn{virtual host}.
    
    @item @code{server-name} (default: @code{(list 'default)})
    A list of server names this vhost represents. @code{'default} represents the
    default vhost for connections matching no other vhost.
    
    @item @code{root} (default: @code{"/srv/http"})
    Root of the website nginx will serve.
    
    @item @code{index} (default: @code{(list "index.html")})
    Index files to look for when clients ask for a directory.  If it cannot be found,
    Nginx will send the list of files in the directory.
    
    @item @code{ssl-certificate} (default: @code{"/etc/nginx/cert.pem"})
    Where to find the certificate for secure connections.  Set it to @code{#f} if
    you don't have a certificate or you don't want to use HTTPS.
    
    @item @code{ssl-certificate-key} (default: @code{"/etc/nginx/key.pem"})
    Where to find the private key for secure connections.  Set it to @code{#f} if
    you don't have a key or you don't want to use HTTPS.
    
    @item @code{server-tokens?} (default: @code{#f})
    Whether the server should add its configuration to response.
    
    @end table
    @end deftp
    
    
    @node Network File System
    @subsubsection Network File System
    @cindex NFS
    
    The @code{(gnu services nfs)} module provides the following services,
    which are most commonly used in relation to mounting or exporting
    directory trees as @dfn{network file systems} (NFS).
    
    
    @subsubheading RPC Bind Service
    @cindex rpcbind
    
    
    The RPC Bind service provides a facility to map program numbers into
    universal addresses.
    Many NFS related services use this facility.  Hence it is automatically
    started when a dependent service starts.
    
    
    @defvr {Scheme Variable} rpcbind-service-type
    A service type  for the RPC portmapper daemon.
    @end defvr
    
    
    @deftp {Data Type} rpcbind-configuration
    Data type representing the configuration of the RPC Bind Service.
    This type has the following parameters:
    @table @asis
    @item @code{rpcbind} (default: @code{rpcbind})
    The rpcbind package to use.
    
    @item @code{warm-start?} (default: @code{#t})
    If this parameter is @code{#t}, then the daemon will read a
    state file on startup thus reloading state information saved by a previous
    instance.
    @end table
    @end deftp
    
    
    
    @subsubheading Pipefs Pseudo File System
    @cindex pipefs
    @cindex rpc_pipefs
    
    The pipefs file system is used to transfer NFS related data
    between the kernel and user space programs.
    
    @defvr {Scheme Variable} pipefs-service-type
    A service type for the pipefs pseudo file system.
    @end defvr
    
    @deftp {Data Type} pipefs-configuration
    Data type representing the configuration of the pipefs pseudo file system service.
    This type has the following parameters:
    @table @asis
    @item @code{mount-point} (default: @code{"/var/lib/nfs/rpc_pipefs"})
    The directory to which the file system is to be attached.
    @end table
    @end deftp
    
    
    @subsubheading GSS Daemon Service
    @cindex GSSD
    @cindex GSS
    @cindex global security system
    
    The @dfn{global security system} (GSS) daemon provides strong security for RPC
    based protocols.
    Before exchanging RPC requests an RPC client must establish a security
    context.  Typically this is done using the Kerberos command @command{kinit}
    
    or automatically at login time using PAM services (@pxref{Kerberos Services}).
    
    
    @defvr {Scheme Variable} gss-service-type
    A service type for the Global Security System (GSS) daemon.
    @end defvr
    
    @deftp {Data Type} gss-configuration
    Data type representing the configuration of the GSS daemon service.
    This type has the following parameters:
    @table @asis
    @item @code{nfs-utils} (default: @code{nfs-utils})
    The package in which the @command{rpc.gssd} command is to be found.
    
    @item @code{pipefs-directory} (default: @code{"/var/lib/nfs/rpc_pipefs"})
    The directory where the pipefs file system is mounted.
    
    @end table
    @end deftp
    
    
    @subsubheading IDMAP Daemon Service
    @cindex idmapd
    @cindex name mapper
    
    The idmap daemon service provides mapping between user IDs and user names.
    Typically it is required in order to access file systems mounted via NFSv4.
    
    @defvr {Scheme Variable} idmap-service-type
    A service type for the Identity Mapper (IDMAP) daemon.
    @end defvr
    
    @deftp {Data Type} idmap-configuration
    Data type representing the configuration of the IDMAP daemon service.
    This type has the following parameters:
    @table @asis
    @item @code{nfs-utils} (default: @code{nfs-utils})
    The package in which the @command{rpc.idmapd} command is to be found.
    
    @item @code{pipefs-directory} (default: @code{"/var/lib/nfs/rpc_pipefs"})
    The directory where the pipefs file system is mounted.
    
    @item @code{domain} (default: @code{#f})
    The local NFSv4 domain name.
    This must be a string or @code{#f}.
    If it is @code{#f} then the daemon will use the host's fully qualified domain name.
    
    @end table
    @end deftp
    
    
    @node Continuous Integration
    @subsubsection Continuous Integration
    
    @cindex continuous integration
    @uref{https://notabug.org/mthl/cuirass, Cuirass} is a continuous
    integration tool for Guix.  It can be used both for development and for
    providing substitutes to others (@pxref{Substitutes}).
    
    The @code{(gnu services cuirass)} module provides the following service.
    
    @deffn {Scheme Procedure} cuirass-service @
           [#:config @code{(cuirass-configuration)}]
    Return a service that runs @command{cuirass}.
    
    The @var{#:config} keyword argument specifies the configuration for
    @command{cuirass}, which must be a @code{<cuirass-configuration>}
    object, by default it doesn't provide any build job.  If you want to
    provide your own configuration you will most likely use the
    @code{cuirass-configuration} special form which returns such objects.
    @end deffn
    
    In order to add build jobs you will have to set the
    @code{specifications} field.  Here is an example of a cuirass service
    defining a build job based on a specification that can be found in
    Cuirass source tree.
    
    @example
    (let ((spec `((#:name . "guix")
                  (#:url . "git://git.savannah.gnu.org/guix.git")
                  (#:load-path . ".")
                  ;; Adapt to a valid absolute file name.
                  (#:file . "/.../cuirass/tests/gnu-system.scm")
                  (#:proc . hydra-jobs)
                  (#:arguments (subset . "hello"))
                  (#:branch . "master"))))
      (cuirass-service #:config (cuirass-configuration
                                 (specifications (list spec)))))
    @end example
    
    While information related to build jobs are located directly in the
    specifications, global settings for the @command{cuirass} process are
    accessible in other @code{cuirass-configuration} fields.
    
    @deftp {Data Type} cuirass-configuration
    Data type representing the configuration of Cuirass.
    
    @table @asis
    @item @code{cache-directory} (default: @code{""})
    Location of the repository cache.
    
    @item @code{user} (default: @code{"cuirass"})
    Owner of the @code{cuirass} process.
    
    @item @code{group} (default: @code{"cuirass"})
    Owner's group of the @code{cuirass} process.
    
    @item @code{interval} (default: @code{60})
    Number of seconds between the poll of the repositories followed by the
    Cuirass jobs.
    
    @item @code{database} (default: @code{"/var/run/cuirass/cuirass.db"})
    Location of sqlite database which contains the build results and previously
    added specifications.
    
    @item @code{specifications} (default: @code{'()})
    A list of specifications, where a specification is an association list
    (@pxref{Associations Lists,,, guile, GNU Guile Reference Manual}) whose
    keys are keywords (@code{#:keyword-example}) as shown in the example
    above.
    
    @item @code{use-substitutes?} (default: @code{#f})
    This allows using substitutes to avoid building every dependencies of a job
    from source.
    
    @item @code{one-shot?} (default: @code{#f})
    Only evaluate specifications and build derivations once.
    @end table
    @end deftp
    
    
    @node Miscellaneous Services
    @subsubsection Miscellaneous Services
    
    
    
    The @code{(gnu services lirc)} module provides the following service.
    
    
    @deffn {Scheme Procedure} lirc-service [#:lirc lirc] @
    
           [#:device #f] [#:driver #f] [#:config-file #f] @
           [#:extra-options '()]
    Return a service that runs @url{http://www.lirc.org,LIRC}, a daemon that
    decodes infrared signals from remote controls.
    
    Optionally, @var{device}, @var{driver} and @var{config-file}
    (configuration file name) may be specified.  See @command{lircd} manual
    for details.
    
    Finally, @var{extra-options} is a list of additional command-line options
    passed to @command{lircd}.
    @end deffn
    
    
    @cindex spice
    @subsubheading Spice Service
    
    The @code{(gnu services spice)} module provides the following service.
    
    @deffn {Scheme Procedure} spice-vdagent-service [#:spice-vdagent]
    Returns a service that runs @url{http://www.spice-space.org,VDAGENT}, a daemon
    that enables sharing the clipboard with a vm and setting the guest display
    resolution when the graphical console window resizes.
    @end deffn
    
    
    @subsubsection Dictionary Services
    
    @cindex dictionary
    
    The @code{(gnu services dict)} module provides the following service:
    
    @deffn {Scheme Procedure} dicod-service [#:config (dicod-configuration)]
    Return a service that runs the @command{dicod} daemon, an implementation
    of DICT server (@pxref{Dicod,,, dico, GNU Dico Manual}).
    
    The optional @var{config} argument specifies the configuration for
    @command{dicod}, which should be a @code{<dicod-configuration>} object, by
    default it serves the GNU Collaborative International Dictonary of English.
    
    You can add @command{open localhost} to your @file{~/.dico} file to make
    @code{localhost} the default server for @command{dico} client
    (@pxref{Initialization File,,, dico, GNU Dico Manual}).
    @end deffn
    
    @deftp {Data Type} dicod-configuration
    Data type representing the configuration of dicod.
    
    @table @asis
    @item @code{dico} (default: @var{dico})
    Package object of the GNU Dico dictionary server.
    
    
    @item @code{interfaces} (default: @var{'("localhost")})
    This is the list of IP addresses and ports and possibly socket file
    names to listen to (@pxref{Server Settings, @code{listen} directive,,
    dico, GNU Dico Manual}).
    
    
    @item @code{databases} (default: @var{(list %dicod-database:gcide)})
    List of @code{<dicod-database>} objects denoting dictionaries to be served.
    @end table
    @end deftp
    
    @deftp {Data Type} dicod-database
    Data type representing a dictionary database.
    
    @table @asis
    @item @code{name}