opendkim: automated key generation (no manual changes for service initialization required anymore)

Changed files
+26 -3
nixos
modules
services
+3
nixos/modules/rename.nix
···
(mkAliasOptionModule [ "environment" "checkConfigurationOptions" ] [ "_module" "check" ])
# XBMC
(mkRenamedOptionModule [ "services" "xserver" "windowManager" "xbmc" ] [ "services" "xserver" "desktopManager" "kodi" ])
(mkRenamedOptionModule [ "services" "xserver" "desktopManager" "xbmc" ] [ "services" "xserver" "desktopManager" "kodi" ])
···
(mkAliasOptionModule [ "environment" "checkConfigurationOptions" ] [ "_module" "check" ])
+
# opendkim
+
(mkRenamedOptionModule [ "services" "opendkim" "keyFile" ] [ "services" "opendkim" "keyPath" ])
+
# XBMC
(mkRenamedOptionModule [ "services" "xserver" "windowManager" "xbmc" ] [ "services" "xserver" "desktopManager" "kodi" ])
(mkRenamedOptionModule [ "services" "xserver" "desktopManager" "xbmc" ] [ "services" "xserver" "desktopManager" "kodi" ])
+23 -3
nixos/modules/services/mail/opendkim.nix
···
defaultSock = "local:/run/opendkim/opendkim.sock";
args = [ "-f" "-l"
"-p" cfg.socket
"-d" cfg.domains
-
"-k" cfg.keyFile
"-s" cfg.selector
] ++ optionals (cfg.configFile != null) [ "-x" cfg.configFile ];
···
'';
};
-
keyFile = mkOption {
type = types.path;
-
description = "Secret key file used for signing messages.";
};
selector = mkOption {
···
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
ExecStart = "${pkgs.opendkim}/bin/opendkim ${escapeShellArgs args}";
User = cfg.user;
Group = cfg.group;
RuntimeDirectory = optional (cfg.socket == defaultSock) "opendkim";
};
};
···
defaultSock = "local:/run/opendkim/opendkim.sock";
+
keyFile = "${cfg.keyPath}/${cfg.selector}.private";
+
args = [ "-f" "-l"
"-p" cfg.socket
"-d" cfg.domains
+
"-k" keyFile
"-s" cfg.selector
] ++ optionals (cfg.configFile != null) [ "-x" cfg.configFile ];
···
'';
};
+
keyPath = mkOption {
type = types.path;
+
description = ''
+
The path that opendkim should put its generated private keys into.
+
The DNS settings will be found in this directory with the name selector.txt.
+
'';
+
default = "/var/lib/opendkim/keys";
};
selector = mkOption {
···
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
+
preStart = ''
+
mkdir -p "${cfg.keyPath}"
+
cd "${cfg.keyPath}"
+
if ! test -f ${cfg.selector}.private; then
+
${pkgs.opendkim}/bin/opendkim-genkey -s ${cfg.selector} -d all-domains-generic-key
+
echo "Generated OpenDKIM key! Please update your DNS settings:\n"
+
echo "-------------------------------------------------------------"
+
cat ${cfg.selector}.txt
+
echo "-------------------------------------------------------------"
+
fi
+
chown ${cfg.user}:${cfg.group} ${cfg.selector}.private
+
'';
+
serviceConfig = {
ExecStart = "${pkgs.opendkim}/bin/opendkim ${escapeShellArgs args}";
User = cfg.user;
Group = cfg.group;
RuntimeDirectory = optional (cfg.socket == defaultSock) "opendkim";
+
PermissionsStartOnly = true;
};
};