nixos(spamassassin): provide /etc/spamassassin to fix sa-learn et al

Spamassassin expects its system-wide configuration at /etc/spamassassin, and
some user tools (like sa-learn) need to read those configuration files.
Therefore, we provide a symlink from /etc/spamassassin to the appropriate Nix
store path to make sure those tools work without the user having to pass an
elaborate --siteconfig path that, potentially, changes every time the system
updates.

Fixes https://github.com/NixOS/nixpkgs/issues/29414.

Changed files
+5 -6
nixos
modules
services
+5 -6
nixos/modules/services/mail/spamassassin.nix
···
config = mkIf cfg.enable {
# Allow users to run 'spamc'.
-
environment.systemPackages = [ pkgs.spamassassin ];
users.extraUsers = singleton {
name = "spamd";
···
# 0 and 1 no error, exitcode > 1 means error:
# https://spamassassin.apache.org/full/3.1.x/doc/sa-update.html#exit_codes
preStart = ''
-
# this abstraction requires no centralized config at all
-
if [ -d /etc/spamassassin ]; then
-
echo "This spamassassin does not support global '/etc/spamassassin' folder for configuration as this would be impure. Merge your configs into 'services.spamassassin' and remove the '/etc/spamassassin' folder to make this service work. Also see 'https://github.com/NixOS/nixpkgs/pull/26470'.";
-
exit 1
-
fi
echo "Recreating '/var/lib/spamasassin' with creating '3.004001' (or similar) and 'sa-update-keys'"
mkdir -p /var/lib/spamassassin
chown spamd:spamd /var/lib/spamassassin -R
···
config = mkIf cfg.enable {
# Allow users to run 'spamc'.
+
+
environment = {
+
etc = singleton { source = spamdEnv; target = "spamassassin"; };
+
systemPackages = [ pkgs.spamassassin ];
+
};
users.extraUsers = singleton {
name = "spamd";
···
# 0 and 1 no error, exitcode > 1 means error:
# https://spamassassin.apache.org/full/3.1.x/doc/sa-update.html#exit_codes
preStart = ''
echo "Recreating '/var/lib/spamasassin' with creating '3.004001' (or similar) and 'sa-update-keys'"
mkdir -p /var/lib/spamassassin
chown spamd:spamd /var/lib/spamassassin -R