nixos/tasks/lvm: add dmeventd and lvmthin support
Introduce a pkgs.lvm2_dmeventd that contains dmeventd support, and enable if services.lvm.dmeventd.enable is true.
This commit is contained in:
parent
9f83907013
commit
1a1e7237de
@ -1,17 +1,70 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
with lib;
|
with lib;
|
||||||
|
let
|
||||||
{
|
cfg = config.services.lvm;
|
||||||
|
in {
|
||||||
###### implementation
|
options.services.lvm = {
|
||||||
|
package = mkOption {
|
||||||
config = mkIf (!config.boot.isContainer) {
|
type = types.package;
|
||||||
|
default = if cfg.dmeventd.enable then pkgs.lvm2_dmeventd else pkgs.lvm2;
|
||||||
environment.systemPackages = [ pkgs.lvm2 ];
|
internal = true;
|
||||||
|
defaultText = "pkgs.lvm2";
|
||||||
services.udev.packages = [ pkgs.lvm2 ];
|
description = ''
|
||||||
|
This option allows you to override the LVM package that's used on the system
|
||||||
|
(udev rules, tmpfiles, systemd services).
|
||||||
|
Defaults to pkgs.lvm2, or pkgs.lvm2_dmeventd if dmeventd is enabled.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
dmeventd.enable = mkEnableOption "the LVM dmevent daemon";
|
||||||
|
boot.thin.enable = mkEnableOption "support for booting from ThinLVs";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
config = mkMerge [
|
||||||
|
(mkIf (!config.boot.isContainer) {
|
||||||
|
environment.etc."tmpfiles.d/lvm2.conf".source = "${cfg.package}/lib/tmpfiles.d/lvm2.conf";
|
||||||
|
environment.systemPackages = [ cfg.package ];
|
||||||
|
systemd.packages = [ cfg.package ];
|
||||||
|
|
||||||
|
# TODO: update once https://github.com/NixOS/nixpkgs/pull/93006 was merged
|
||||||
|
services.udev.packages = [ cfg.package.out ];
|
||||||
|
})
|
||||||
|
(mkIf cfg.dmeventd.enable {
|
||||||
|
systemd.sockets."dm-event".wantedBy = [ "sockets.target" ];
|
||||||
|
systemd.services."lvm2-monitor".wantedBy = [ "sysinit.target" ];
|
||||||
|
|
||||||
|
environment.etc."lvm/lvm.conf".text = ''
|
||||||
|
dmeventd/executable = "${cfg.package}/bin/dmeventd"
|
||||||
|
'';
|
||||||
|
})
|
||||||
|
(mkIf cfg.boot.thin.enable {
|
||||||
|
boot.initrd = {
|
||||||
|
kernelModules = [ "dm-snapshot" "dm-thin-pool" ];
|
||||||
|
|
||||||
|
extraUtilsCommands = ''
|
||||||
|
copy_bin_and_libs ${pkgs.thin-provisioning-tools}/bin/pdata_tools
|
||||||
|
copy_bin_and_libs ${pkgs.thin-provisioning-tools}/bin/thin_check
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.etc."lvm/lvm.conf".text = ''
|
||||||
|
global/thin_check_executable = "${pkgs.thin-provisioning-tools}/bin/thin_check"
|
||||||
|
'';
|
||||||
|
})
|
||||||
|
(mkIf (cfg.dmeventd.enable || cfg.boot.thin.enable) {
|
||||||
|
boot.initrd.preLVMCommands = ''
|
||||||
|
mkdir -p /etc/lvm
|
||||||
|
cat << EOF >> /etc/lvm/lvm.conf
|
||||||
|
${optionalString cfg.boot.thin.enable ''
|
||||||
|
global/thin_check_executable = "$(command -v thin_check)"
|
||||||
|
''}
|
||||||
|
${optionalString cfg.dmeventd.enable ''
|
||||||
|
dmeventd/executable = "$(command -v false)"
|
||||||
|
activation/monitoring = 0
|
||||||
|
''}
|
||||||
|
EOF
|
||||||
|
'';
|
||||||
|
})
|
||||||
|
];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -16817,7 +16817,7 @@ in
|
|||||||
|
|
||||||
directvnc = callPackage ../os-specific/linux/directvnc { };
|
directvnc = callPackage ../os-specific/linux/directvnc { };
|
||||||
|
|
||||||
dmraid = callPackage ../os-specific/linux/dmraid { };
|
dmraid = callPackage ../os-specific/linux/dmraid { lvm2 = lvm2_dmeventd; };
|
||||||
|
|
||||||
drbd = callPackage ../os-specific/linux/drbd { };
|
drbd = callPackage ../os-specific/linux/drbd { };
|
||||||
|
|
||||||
@ -17520,6 +17520,10 @@ in
|
|||||||
lsscsi = callPackage ../os-specific/linux/lsscsi { };
|
lsscsi = callPackage ../os-specific/linux/lsscsi { };
|
||||||
|
|
||||||
lvm2 = callPackage ../os-specific/linux/lvm2 { };
|
lvm2 = callPackage ../os-specific/linux/lvm2 { };
|
||||||
|
lvm2_dmeventd = callPackage ../os-specific/linux/lvm2 {
|
||||||
|
enable_dmeventd = true;
|
||||||
|
enable_cmdlib = true;
|
||||||
|
};
|
||||||
|
|
||||||
mbpfan = callPackage ../os-specific/linux/mbpfan { };
|
mbpfan = callPackage ../os-specific/linux/mbpfan { };
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user