diff options
Diffstat (limited to 'nixos/modules/tasks/lvm.nix')
-rw-r--r-- | nixos/modules/tasks/lvm.nix | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/nixos/modules/tasks/lvm.nix b/nixos/modules/tasks/lvm.nix index 35316603c38f2..59711f90dce3d 100644 --- a/nixos/modules/tasks/lvm.nix +++ b/nixos/modules/tasks/lvm.nix @@ -7,17 +7,18 @@ in { options.services.lvm = { package = mkOption { type = types.package; - default = if cfg.dmeventd.enable then pkgs.lvm2_dmeventd else pkgs.lvm2; + default = pkgs.lvm2; internal = true; defaultText = literalExpression "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. + Defaults to pkgs.lvm2, pkgs.lvm2_dmeventd if dmeventd or pkgs.lvm2_vdo if vdo is enabled. ''; }; dmeventd.enable = mkEnableOption "the LVM dmevent daemon"; boot.thin.enable = mkEnableOption "support for booting from ThinLVs"; + boot.vdo.enable = mkEnableOption "support for booting from VDOLVs"; }; config = mkMerge [ @@ -40,6 +41,7 @@ in { environment.etc."lvm/lvm.conf".text = '' dmeventd/executable = "${cfg.package}/bin/dmeventd" ''; + services.lvm.package = mkDefault pkgs.lvm2_dmeventd; }) (mkIf cfg.boot.thin.enable { boot.initrd = { @@ -61,6 +63,32 @@ in { environment.etc."lvm/lvm.conf".text = concatMapStringsSep "\n" (bin: "global/${bin}_executable = ${pkgs.thin-provisioning-tools}/bin/${bin}") [ "thin_check" "thin_dump" "thin_repair" "cache_check" "cache_dump" "cache_repair" ]; + + environment.systemPackages = [ pkgs.thin-provisioning-tools ]; + }) + (mkIf cfg.boot.vdo.enable { + boot = { + initrd = { + kernelModules = [ "kvdo" ]; + + extraUtilsCommands = '' + ls ${pkgs.vdo}/bin/ | grep -v adaptLVMVDO | while read BIN; do + copy_bin_and_libs ${pkgs.vdo}/bin/$BIN + done + ''; + + extraUtilsCommandsTest = '' + ls ${pkgs.vdo}/bin/ | grep -v adaptLVMVDO | while read BIN; do + $out/bin/$(basename $BIN) --help > /dev/null + done + ''; + }; + extraModulePackages = [ config.boot.kernelPackages.kvdo ]; + }; + + services.lvm.package = mkOverride 999 pkgs.lvm2_vdo; # this overrides mkDefault + + environment.systemPackages = [ pkgs.vdo ]; }) (mkIf (cfg.dmeventd.enable || cfg.boot.thin.enable) { boot.initrd.preLVMCommands = '' |