forked from mirrors/nixpkgs
Convert "postfix"
svn path=/nixos/branches/fix-style/; revision=14392
This commit is contained in:
parent
e5fd3f271e
commit
32ec389b15
|
@ -479,144 +479,6 @@ in
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
postfix = {
|
|
||||||
enable = mkOption {
|
|
||||||
default = false;
|
|
||||||
description ="
|
|
||||||
Whether to run the Postfix mail server.
|
|
||||||
";
|
|
||||||
};
|
|
||||||
user = mkOption {
|
|
||||||
default = "postfix";
|
|
||||||
description = "
|
|
||||||
How to call postfix user (must be used only for postfix).
|
|
||||||
";
|
|
||||||
};
|
|
||||||
group = mkOption {
|
|
||||||
default = "postfix";
|
|
||||||
description = "
|
|
||||||
How to call postfix group (must be used only for postfix).
|
|
||||||
";
|
|
||||||
};
|
|
||||||
setgidGroup = mkOption {
|
|
||||||
default = "postdrop";
|
|
||||||
description = "
|
|
||||||
How to call postfix setgid group (for postdrop). Should
|
|
||||||
be uniquely used group.
|
|
||||||
";
|
|
||||||
};
|
|
||||||
networks = mkOption {
|
|
||||||
default = null;
|
|
||||||
example = ["192.168.0.1/24"];
|
|
||||||
description = "
|
|
||||||
Net masks for trusted - allowed to relay mail to third parties -
|
|
||||||
hosts. Leave empty to use mynetworks_style configuration or use
|
|
||||||
default (localhost-only).
|
|
||||||
";
|
|
||||||
};
|
|
||||||
networksStyle = mkOption {
|
|
||||||
default = "";
|
|
||||||
description = "
|
|
||||||
Name of standard way of trusted network specification to use,
|
|
||||||
leave blank if you specify it explicitly or if you want to use
|
|
||||||
default (localhost-only).
|
|
||||||
";
|
|
||||||
};
|
|
||||||
hostname = mkOption {
|
|
||||||
default = "";
|
|
||||||
description ="
|
|
||||||
Hostname to use. Leave blank to use just the hostname of machine.
|
|
||||||
It should be FQDN.
|
|
||||||
";
|
|
||||||
};
|
|
||||||
domain = mkOption {
|
|
||||||
default = "";
|
|
||||||
description ="
|
|
||||||
Domain to use. Leave blank to use hostname minus first component.
|
|
||||||
";
|
|
||||||
};
|
|
||||||
origin = mkOption {
|
|
||||||
default = "";
|
|
||||||
description ="
|
|
||||||
Origin to use in outgoing e-mail. Leave blank to use hostname.
|
|
||||||
";
|
|
||||||
};
|
|
||||||
destination = mkOption {
|
|
||||||
default = null;
|
|
||||||
example = ["localhost"];
|
|
||||||
description = "
|
|
||||||
Full (!) list of domains we deliver locally. Leave blank for
|
|
||||||
acceptable Postfix default.
|
|
||||||
";
|
|
||||||
};
|
|
||||||
relayDomains = mkOption {
|
|
||||||
default = null;
|
|
||||||
example = ["localdomain"];
|
|
||||||
description = "
|
|
||||||
List of domains we agree to relay to. Default is the same as
|
|
||||||
destination.
|
|
||||||
";
|
|
||||||
};
|
|
||||||
relayHost = mkOption {
|
|
||||||
default = "";
|
|
||||||
description = "
|
|
||||||
Mail relay for outbound mail.
|
|
||||||
";
|
|
||||||
};
|
|
||||||
lookupMX = mkOption {
|
|
||||||
default = false;
|
|
||||||
description = "
|
|
||||||
Whether relay specified is just domain whose MX must be used.
|
|
||||||
";
|
|
||||||
};
|
|
||||||
postmasterAlias = mkOption {
|
|
||||||
default = "root";
|
|
||||||
description = "
|
|
||||||
Who should receive postmaster e-mail.
|
|
||||||
";
|
|
||||||
};
|
|
||||||
rootAlias = mkOption {
|
|
||||||
default = "";
|
|
||||||
description = "
|
|
||||||
Who should receive root e-mail. Blank for no redirection.
|
|
||||||
";
|
|
||||||
};
|
|
||||||
extraAliases = mkOption {
|
|
||||||
default = "";
|
|
||||||
description = "
|
|
||||||
Additional entries to put verbatim into aliases file.
|
|
||||||
";
|
|
||||||
};
|
|
||||||
|
|
||||||
sslCert = mkOption {
|
|
||||||
default = "";
|
|
||||||
description = "
|
|
||||||
SSL certificate to use.
|
|
||||||
";
|
|
||||||
};
|
|
||||||
sslCACert = mkOption {
|
|
||||||
default = "";
|
|
||||||
description = "
|
|
||||||
SSL certificate of CA.
|
|
||||||
";
|
|
||||||
};
|
|
||||||
sslKey = mkOption {
|
|
||||||
default = "";
|
|
||||||
description ="
|
|
||||||
SSL key to use.
|
|
||||||
";
|
|
||||||
};
|
|
||||||
|
|
||||||
recipientDelimiter = mkOption {
|
|
||||||
default = "";
|
|
||||||
example = "+";
|
|
||||||
description = "
|
|
||||||
Delimiter for address extension: so mail to user+test can be handled by ~user/.forward+test
|
|
||||||
";
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
dovecot = {
|
dovecot = {
|
||||||
enable = mkOption {
|
enable = mkOption {
|
||||||
default = false;
|
default = false;
|
||||||
|
@ -784,6 +646,7 @@ in
|
||||||
(import ../upstart-jobs/mysql.nix)
|
(import ../upstart-jobs/mysql.nix)
|
||||||
(import ../upstart-jobs/postgresql.nix)
|
(import ../upstart-jobs/postgresql.nix)
|
||||||
(import ../upstart-jobs/openfire.nix)
|
(import ../upstart-jobs/openfire.nix)
|
||||||
|
(import ../upstart-jobs/postfix.nix)
|
||||||
|
|
||||||
# nix
|
# nix
|
||||||
(import ../upstart-jobs/nix.nix) # nix options and daemon
|
(import ../upstart-jobs/nix.nix) # nix options and daemon
|
||||||
|
|
|
@ -131,12 +131,6 @@ let
|
||||||
inherit config;
|
inherit config;
|
||||||
})
|
})
|
||||||
|
|
||||||
# Postfix mail server.
|
|
||||||
++ optional config.services.postfix.enable
|
|
||||||
(import ../upstart-jobs/postfix.nix {
|
|
||||||
inherit config pkgs;
|
|
||||||
})
|
|
||||||
|
|
||||||
# Dovecot POP3/IMAP server.
|
# Dovecot POP3/IMAP server.
|
||||||
++ optional config.services.dovecot.enable
|
++ optional config.services.dovecot.enable
|
||||||
(import ../upstart-jobs/dovecot.nix {
|
(import ../upstart-jobs/dovecot.nix {
|
||||||
|
|
|
@ -1,4 +1,154 @@
|
||||||
{config, pkgs} :
|
{pkgs, config, ...}:
|
||||||
|
|
||||||
|
###### interface
|
||||||
|
let
|
||||||
|
inherit (pkgs.lib) mkOption mkIf;
|
||||||
|
|
||||||
|
options = {
|
||||||
|
services = {
|
||||||
|
postfix = {
|
||||||
|
enable = mkOption {
|
||||||
|
default = false;
|
||||||
|
description ="
|
||||||
|
Whether to run the Postfix mail server.
|
||||||
|
";
|
||||||
|
};
|
||||||
|
user = mkOption {
|
||||||
|
default = "postfix";
|
||||||
|
description = "
|
||||||
|
How to call postfix user (must be used only for postfix).
|
||||||
|
";
|
||||||
|
};
|
||||||
|
group = mkOption {
|
||||||
|
default = "postfix";
|
||||||
|
description = "
|
||||||
|
How to call postfix group (must be used only for postfix).
|
||||||
|
";
|
||||||
|
};
|
||||||
|
setgidGroup = mkOption {
|
||||||
|
default = "postdrop";
|
||||||
|
description = "
|
||||||
|
How to call postfix setgid group (for postdrop). Should
|
||||||
|
be uniquely used group.
|
||||||
|
";
|
||||||
|
};
|
||||||
|
networks = mkOption {
|
||||||
|
default = null;
|
||||||
|
example = ["192.168.0.1/24"];
|
||||||
|
description = "
|
||||||
|
Net masks for trusted - allowed to relay mail to third parties -
|
||||||
|
hosts. Leave empty to use mynetworks_style configuration or use
|
||||||
|
default (localhost-only).
|
||||||
|
";
|
||||||
|
};
|
||||||
|
networksStyle = mkOption {
|
||||||
|
default = "";
|
||||||
|
description = "
|
||||||
|
Name of standard way of trusted network specification to use,
|
||||||
|
leave blank if you specify it explicitly or if you want to use
|
||||||
|
default (localhost-only).
|
||||||
|
";
|
||||||
|
};
|
||||||
|
hostname = mkOption {
|
||||||
|
default = "";
|
||||||
|
description ="
|
||||||
|
Hostname to use. Leave blank to use just the hostname of machine.
|
||||||
|
It should be FQDN.
|
||||||
|
";
|
||||||
|
};
|
||||||
|
domain = mkOption {
|
||||||
|
default = "";
|
||||||
|
description ="
|
||||||
|
Domain to use. Leave blank to use hostname minus first component.
|
||||||
|
";
|
||||||
|
};
|
||||||
|
origin = mkOption {
|
||||||
|
default = "";
|
||||||
|
description ="
|
||||||
|
Origin to use in outgoing e-mail. Leave blank to use hostname.
|
||||||
|
";
|
||||||
|
};
|
||||||
|
destination = mkOption {
|
||||||
|
default = null;
|
||||||
|
example = ["localhost"];
|
||||||
|
description = "
|
||||||
|
Full (!) list of domains we deliver locally. Leave blank for
|
||||||
|
acceptable Postfix default.
|
||||||
|
";
|
||||||
|
};
|
||||||
|
relayDomains = mkOption {
|
||||||
|
default = null;
|
||||||
|
example = ["localdomain"];
|
||||||
|
description = "
|
||||||
|
List of domains we agree to relay to. Default is the same as
|
||||||
|
destination.
|
||||||
|
";
|
||||||
|
};
|
||||||
|
relayHost = mkOption {
|
||||||
|
default = "";
|
||||||
|
description = "
|
||||||
|
Mail relay for outbound mail.
|
||||||
|
";
|
||||||
|
};
|
||||||
|
lookupMX = mkOption {
|
||||||
|
default = false;
|
||||||
|
description = "
|
||||||
|
Whether relay specified is just domain whose MX must be used.
|
||||||
|
";
|
||||||
|
};
|
||||||
|
postmasterAlias = mkOption {
|
||||||
|
default = "root";
|
||||||
|
description = "
|
||||||
|
Who should receive postmaster e-mail.
|
||||||
|
";
|
||||||
|
};
|
||||||
|
rootAlias = mkOption {
|
||||||
|
default = "";
|
||||||
|
description = "
|
||||||
|
Who should receive root e-mail. Blank for no redirection.
|
||||||
|
";
|
||||||
|
};
|
||||||
|
extraAliases = mkOption {
|
||||||
|
default = "";
|
||||||
|
description = "
|
||||||
|
Additional entries to put verbatim into aliases file.
|
||||||
|
";
|
||||||
|
};
|
||||||
|
|
||||||
|
sslCert = mkOption {
|
||||||
|
default = "";
|
||||||
|
description = "
|
||||||
|
SSL certificate to use.
|
||||||
|
";
|
||||||
|
};
|
||||||
|
sslCACert = mkOption {
|
||||||
|
default = "";
|
||||||
|
description = "
|
||||||
|
SSL certificate of CA.
|
||||||
|
";
|
||||||
|
};
|
||||||
|
sslKey = mkOption {
|
||||||
|
default = "";
|
||||||
|
description ="
|
||||||
|
SSL key to use.
|
||||||
|
";
|
||||||
|
};
|
||||||
|
|
||||||
|
recipientDelimiter = mkOption {
|
||||||
|
default = "";
|
||||||
|
example = "+";
|
||||||
|
description = "
|
||||||
|
Delimiter for address extension: so mail to user+test can be handled by ~user/.forward+test
|
||||||
|
";
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
|
||||||
|
###### implementation
|
||||||
|
|
||||||
let
|
let
|
||||||
startingDependency = if config.services.gw6c.enable then "gw6c" else "network-interfaces";
|
startingDependency = if config.services.gw6c.enable then "gw6c" else "network-interfaces";
|
||||||
|
|
||||||
|
@ -103,62 +253,76 @@ let
|
||||||
mainCfFile = pkgs.writeText "postfix-main.cf" mainCf;
|
mainCfFile = pkgs.writeText "postfix-main.cf" mainCf;
|
||||||
|
|
||||||
in
|
in
|
||||||
{
|
|
||||||
name = "postfix";
|
mkIf config.services.postfix.enable {
|
||||||
users = [
|
require = [
|
||||||
{ name = user;
|
options
|
||||||
description = "Postfix mail server user";
|
|
||||||
uid = idList.uids.postfix;
|
|
||||||
group = group;
|
|
||||||
}
|
|
||||||
];
|
];
|
||||||
|
|
||||||
groups = [
|
environment = {
|
||||||
{ name = group;
|
etc = [{
|
||||||
gid = idList.gids.postfix;
|
source = "/var/postfix/conf";
|
||||||
}
|
|
||||||
{ name = setgidGroup;
|
|
||||||
gid = idList.gids.postdrop;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
|
|
||||||
# I copy _lots_ of shipped configuration filed
|
|
||||||
# that can be left as is. I am afraid the exact
|
|
||||||
# will list slightly change in next Postfix
|
|
||||||
# release, so listing them all one-by-one in an
|
|
||||||
# accurate way is unlikely to be better.
|
|
||||||
job = ''
|
|
||||||
description "Postfix mail server job"
|
|
||||||
|
|
||||||
start on ${startingDependency}/started
|
|
||||||
stop on never
|
|
||||||
|
|
||||||
script
|
|
||||||
if ! [ -d /var/spool/postfix ]; then
|
|
||||||
${pkgs.coreutils}/bin/mkdir -p /var/spool/mail /var/postfix/conf /var/postfix/queue
|
|
||||||
fi
|
|
||||||
|
|
||||||
${pkgs.coreutils}/bin/chown -R ${user}.${group} /var/postfix
|
|
||||||
${pkgs.coreutils}/bin/chown -R ${user}.${setgidGroup} /var/postfix/queue
|
|
||||||
${pkgs.coreutils}/bin/chmod -R ug+rwX /var/postfix/queue
|
|
||||||
${pkgs.coreutils}/bin/chown root.root /var/spool/mail
|
|
||||||
${pkgs.coreutils}/bin/chmod a+rwxt /var/spool/mail
|
|
||||||
|
|
||||||
ln -sf ${pkgs.postfix}/share/postfix/conf/* /var/postfix/conf
|
|
||||||
|
|
||||||
ln -sf ${aliasesFile} /var/postfix/conf/aliases
|
|
||||||
ln -sf ${mainCfFile} /var/postfix/conf/main.cf
|
|
||||||
|
|
||||||
${pkgs.postfix}/sbin/postalias -c /var/postfix/conf /var/postfix/conf/aliases
|
|
||||||
|
|
||||||
${pkgs.postfix}/sbin/postfix -c /var/postfix/conf start
|
|
||||||
end script
|
|
||||||
'';
|
|
||||||
|
|
||||||
extraEtc = [
|
|
||||||
{ source = "/var/postfix/conf";
|
|
||||||
target = "postfix";
|
target = "postfix";
|
||||||
}
|
}];
|
||||||
];
|
};
|
||||||
|
|
||||||
|
users = {
|
||||||
|
extraUsers = [
|
||||||
|
{ name = user;
|
||||||
|
description = "Postfix mail server user";
|
||||||
|
uid = idList.uids.postfix;
|
||||||
|
group = group;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
extraGroups = [
|
||||||
|
{ name = group;
|
||||||
|
gid = idList.gids.postfix;
|
||||||
|
}
|
||||||
|
{ name = setgidGroup;
|
||||||
|
gid = idList.gids.postdrop;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
services = {
|
||||||
|
extraJobs = [{
|
||||||
|
name = "postfix";
|
||||||
|
|
||||||
|
|
||||||
|
# I copy _lots_ of shipped configuration filed
|
||||||
|
# that can be left as is. I am afraid the exact
|
||||||
|
# will list slightly change in next Postfix
|
||||||
|
# release, so listing them all one-by-one in an
|
||||||
|
# accurate way is unlikely to be better.
|
||||||
|
job = ''
|
||||||
|
description "Postfix mail server job"
|
||||||
|
|
||||||
|
start on ${startingDependency}/started
|
||||||
|
stop on never
|
||||||
|
|
||||||
|
script
|
||||||
|
if ! [ -d /var/spool/postfix ]; then
|
||||||
|
${pkgs.coreutils}/bin/mkdir -p /var/spool/mail /var/postfix/conf /var/postfix/queue
|
||||||
|
fi
|
||||||
|
|
||||||
|
${pkgs.coreutils}/bin/chown -R ${user}.${group} /var/postfix
|
||||||
|
${pkgs.coreutils}/bin/chown -R ${user}.${setgidGroup} /var/postfix/queue
|
||||||
|
${pkgs.coreutils}/bin/chmod -R ug+rwX /var/postfix/queue
|
||||||
|
${pkgs.coreutils}/bin/chown root.root /var/spool/mail
|
||||||
|
${pkgs.coreutils}/bin/chmod a+rwxt /var/spool/mail
|
||||||
|
|
||||||
|
ln -sf ${pkgs.postfix}/share/postfix/conf/* /var/postfix/conf
|
||||||
|
|
||||||
|
ln -sf ${aliasesFile} /var/postfix/conf/aliases
|
||||||
|
ln -sf ${mainCfFile} /var/postfix/conf/main.cf
|
||||||
|
|
||||||
|
${pkgs.postfix}/sbin/postalias -c /var/postfix/conf /var/postfix/conf/aliases
|
||||||
|
|
||||||
|
${pkgs.postfix}/sbin/postfix -c /var/postfix/conf start
|
||||||
|
end script
|
||||||
|
'';
|
||||||
|
|
||||||
|
}];
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue