services: Add opensmtpd service.
* gnu/services/mail.scm (<opensmtpd-configuration>): New record type. (%default-opensmtpd-config-file, %opensmtpd-accounts): New variables. (opensmtpd-shepherd-service, opensmtpd-activation): New procedures. (opensmtpd-service-type): New variable. * doc/guix.texi (Mail Services): Document it.
This commit is contained in:
parent
0959478c72
commit
f88371e866
|
@ -10075,16 +10075,11 @@ For MariaDB, the root password is empty.
|
||||||
@cindex mail
|
@cindex mail
|
||||||
@cindex email
|
@cindex email
|
||||||
The @code{(gnu services mail)} module provides Guix service definitions
|
The @code{(gnu services mail)} module provides Guix service definitions
|
||||||
for mail services. Currently the only implemented service is Dovecot,
|
for email services: IMAP, POP3, and LMTP servers, as well as mail
|
||||||
an IMAP, POP3, and LMTP server.
|
transport agents (MTAs). Lots of acronyms! These services are detailed
|
||||||
|
in the subsections below.
|
||||||
|
|
||||||
Guix does not yet have a mail transfer agent (MTA), although for some
|
@subsubheading Dovecot Service
|
||||||
lightweight purposes the @code{esmtp} relay-only MTA may suffice. Help
|
|
||||||
is needed to properly integrate a full MTA, such as Postfix. Patches
|
|
||||||
welcome!
|
|
||||||
|
|
||||||
To add an IMAP/POP3 server to a GuixSD system, add a
|
|
||||||
@code{dovecot-service} to the operating system definition:
|
|
||||||
|
|
||||||
@deffn {Scheme Procedure} dovecot-service [#:config (dovecot-configuration)]
|
@deffn {Scheme Procedure} dovecot-service [#:config (dovecot-configuration)]
|
||||||
Return a service that runs the Dovecot IMAP/POP3/LMTP mail server.
|
Return a service that runs the Dovecot IMAP/POP3/LMTP mail server.
|
||||||
|
@ -11440,6 +11435,35 @@ could instantiate a dovecot service like this:
|
||||||
(string "")))
|
(string "")))
|
||||||
@end example
|
@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
|
@node Kerberos Services
|
||||||
@subsubsection Kerberos Services
|
@subsubsection Kerberos Services
|
||||||
|
|
|
@ -51,7 +51,12 @@
|
||||||
protocol-configuration
|
protocol-configuration
|
||||||
plugin-configuration
|
plugin-configuration
|
||||||
mailbox-configuration
|
mailbox-configuration
|
||||||
namespace-configuration))
|
namespace-configuration
|
||||||
|
|
||||||
|
opensmtpd-configuration
|
||||||
|
opensmtpd-configuration?
|
||||||
|
opensmtpd-service-type
|
||||||
|
%default-opensmtpd-config-file))
|
||||||
|
|
||||||
;;; Commentary:
|
;;; Commentary:
|
||||||
;;;
|
;;;
|
||||||
|
@ -1691,3 +1696,78 @@ by @code{dovecot-configuration}. @var{config} may also be created by
|
||||||
(format #t "@end deftypevr\n\n")))
|
(format #t "@end deftypevr\n\n")))
|
||||||
fields))))
|
fields))))
|
||||||
(generate 'dovecot-configuration))
|
(generate 'dovecot-configuration))
|
||||||
|
|
||||||
|
|
||||||
|
;;;
|
||||||
|
;;; OpenSMTPD.
|
||||||
|
;;;
|
||||||
|
|
||||||
|
(define-record-type* <opensmtpd-configuration>
|
||||||
|
opensmtpd-configuration make-opensmtpd-configuration
|
||||||
|
opensmtpd-configuration?
|
||||||
|
(package opensmtpd-configuration-package
|
||||||
|
(default opensmtpd))
|
||||||
|
(config-file opensmtpd-configuration-config-file
|
||||||
|
(default %default-opensmtpd-config-file)))
|
||||||
|
|
||||||
|
(define %default-opensmtpd-config-file
|
||||||
|
(plain-file "smtpd.conf" "
|
||||||
|
listen on lo
|
||||||
|
accept from any for local deliver to mbox
|
||||||
|
accept from local for any relay
|
||||||
|
"))
|
||||||
|
|
||||||
|
(define opensmtpd-shepherd-service
|
||||||
|
(match-lambda
|
||||||
|
(($ <opensmtpd-configuration> package config-file)
|
||||||
|
(list (shepherd-service
|
||||||
|
(provision '(smtpd))
|
||||||
|
(requirement '(loopback))
|
||||||
|
(documentation "Run the OpenSMTPD daemon.")
|
||||||
|
(start (let ((smtpd (file-append package "/sbin/smtpd")))
|
||||||
|
#~(make-forkexec-constructor
|
||||||
|
(list #$smtpd "-f" #$config-file)
|
||||||
|
#:pid-file "/var/run/smtpd.pid")))
|
||||||
|
(stop #~(make-kill-destructor)))))))
|
||||||
|
|
||||||
|
(define %opensmtpd-accounts
|
||||||
|
(list (user-group
|
||||||
|
(name "smtpq")
|
||||||
|
(system? #t))
|
||||||
|
(user-account
|
||||||
|
(name "smtpd")
|
||||||
|
(group "nogroup")
|
||||||
|
(system? #t)
|
||||||
|
(comment "SMTP Daemon")
|
||||||
|
(home-directory "/var/empty")
|
||||||
|
(shell (file-append shadow "/sbin/nologin")))
|
||||||
|
(user-account
|
||||||
|
(name "smtpq")
|
||||||
|
(group "smtpq")
|
||||||
|
(system? #t)
|
||||||
|
(comment "SMTPD Queue")
|
||||||
|
(home-directory "/var/empty")
|
||||||
|
(shell (file-append shadow "/sbin/nologin")))))
|
||||||
|
|
||||||
|
(define opensmtpd-activation
|
||||||
|
(match-lambda
|
||||||
|
(($ <opensmtpd-configuration> package config-file)
|
||||||
|
(let ((smtpd (file-append package "/sbin/smtpd")))
|
||||||
|
#~(begin
|
||||||
|
;; Create mbox and spool directories.
|
||||||
|
(mkdir-p "/var/mail")
|
||||||
|
(mkdir-p "/var/spool/smtpd")
|
||||||
|
(chmod "/var/spool/smtpd" #o711))))))
|
||||||
|
|
||||||
|
(define opensmtpd-service-type
|
||||||
|
(service-type
|
||||||
|
(name 'opensmtpd)
|
||||||
|
(extensions
|
||||||
|
(list (service-extension account-service-type
|
||||||
|
(const %opensmtpd-accounts))
|
||||||
|
(service-extension activation-service-type
|
||||||
|
opensmtpd-activation)
|
||||||
|
(service-extension profile-service-type
|
||||||
|
(compose list opensmtpd-configuration-package))
|
||||||
|
(service-extension shepherd-root-service-type
|
||||||
|
opensmtpd-shepherd-service)))))
|
||||||
|
|
Loading…
Reference in New Issue