nixos/zed: use global sendmail if configured

This simplifies the setup to receive emails from the ZFS Event Daemon
by relying on the sendmail wrapper defined by other modules such as
msmtp or Postfix.

This is more similar to how other modules like smartd deal with email
configuration.

The user is no longer required to define and rebuild their own ZFS
package to add email support.

GitHub: closes https://github.com/NixOS/nixpkgs/issues/132464
This commit is contained in:
pacien 2023-12-17 17:17:24 +01:00
parent 1272bba187
commit cf6d89525f
2 changed files with 19 additions and 12 deletions

View File

@ -79,6 +79,9 @@ The pre-existing [services.ankisyncd](#opt-services.ankisyncd.enable) has been m
- [](#opt-boot.kernel.sysctl._net.core.wmem_max_) changed from a string to an integer because of the addition of a custom merge option (taking the highest value defined to avoid conflicts between 2 services trying to set that value), just as [](#opt-boot.kernel.sysctl._net.core.rmem_max_) since 22.11. - [](#opt-boot.kernel.sysctl._net.core.wmem_max_) changed from a string to an integer because of the addition of a custom merge option (taking the highest value defined to avoid conflicts between 2 services trying to set that value), just as [](#opt-boot.kernel.sysctl._net.core.rmem_max_) since 22.11.
- `services.zfs.zed.enableMail` now uses the global `sendmail` wrapper defined by an email module
(such as msmtp or Postfix). It no longer requires using a special ZFS build with email support.
- Gitea 1.21 upgrade has several breaking changes, including: - Gitea 1.21 upgrade has several breaking changes, including:
- Custom themes and other assets that were previously stored in `custom/public/*` now belong in `custom/public/assets/*` - Custom themes and other assets that were previously stored in `custom/public/*` now belong in `custom/public/assets/*`
- New instances of Gitea using MySQL now ignore the `[database].CHARSET` config option and always use the `utf8mb4` charset, existing instances should migrate via the `gitea doctor convert` CLI command. - New instances of Gitea using MySQL now ignore the `[database].CHARSET` config option and always use the `utf8mb4` charset, existing instances should migrate via the `gitea doctor convert` CLI command.

View File

@ -508,9 +508,15 @@ in
}; };
services.zfs.zed = { services.zfs.zed = {
enableMail = mkEnableOption (lib.mdDoc "ZED's ability to send emails") // { enableMail = mkOption {
default = cfgZfs.package.enableMail; type = types.bool;
defaultText = literalExpression "config.${optZfs.package}.enableMail"; default = config.services.mail.sendmailSetuidWrapper != null;
defaultText = literalExpression ''
config.services.mail.sendmailSetuidWrapper != null
'';
description = mdDoc ''
Whether to enable ZED's ability to send emails.
'';
}; };
settings = mkOption { settings = mkOption {
@ -550,14 +556,6 @@ in
assertion = cfgZfs.modulePackage.version == cfgZfs.package.version; assertion = cfgZfs.modulePackage.version == cfgZfs.package.version;
message = "The kernel module and the userspace tooling versions are not matching, this is an unsupported usecase."; message = "The kernel module and the userspace tooling versions are not matching, this is an unsupported usecase.";
} }
{
assertion = cfgZED.enableMail -> cfgZfs.package.enableMail;
message = ''
To allow ZED to send emails, ZFS needs to be configured to enable
this. To do so, one must override the `zfs` package and set
`enableMail` to true.
'';
}
{ {
assertion = config.networking.hostId != null; assertion = config.networking.hostId != null;
message = "ZFS requires networking.hostId to be set"; message = "ZFS requires networking.hostId to be set";
@ -671,7 +669,13 @@ in
}; };
services.zfs.zed.settings = { services.zfs.zed.settings = {
ZED_EMAIL_PROG = mkIf cfgZED.enableMail (mkDefault "${pkgs.mailutils}/bin/mail"); ZED_EMAIL_PROG = mkIf cfgZED.enableMail (mkDefault (
config.security.wrapperDir + "/" +
config.services.mail.sendmailSetuidWrapper.program
));
# subject in header for sendmail
ZED_EMAIL_OPTS = mkIf cfgZED.enableMail (mkDefault "@ADDRESS@");
PATH = lib.makeBinPath [ PATH = lib.makeBinPath [
cfgZfs.package cfgZfs.package
pkgs.coreutils pkgs.coreutils