Skip to content

Commit

Permalink
nixos/tasks/lvm: add dmeventd and lvmthin support
Browse files Browse the repository at this point in the history
Introduce a pkgs.lvm2_dmeventd that contains dmeventd support, and
enable if services.lvm.dmeventd.enable is true.
  • Loading branch information
ajs124 authored and flokli committed Jul 14, 2020
1 parent 9f83907 commit 1a1e723
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 8 deletions.
67 changes: 60 additions & 7 deletions nixos/modules/tasks/lvm.nix
@@ -1,17 +1,70 @@
{ config, lib, pkgs, ... }:

with lib;
let
cfg = config.services.lvm;
in {
options.services.lvm = {
package = mkOption {
type = types.package;
default = if cfg.dmeventd.enable then pkgs.lvm2_dmeventd else pkgs.lvm2;
internal = true;
defaultText = "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";
};

{

###### implementation
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 ];

config = mkIf (!config.boot.isContainer) {
# 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.systemPackages = [ pkgs.lvm2 ];
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" ];

services.udev.packages = [ pkgs.lvm2 ];
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
'';
})
];

}
6 changes: 5 additions & 1 deletion pkgs/top-level/all-packages.nix
Expand Up @@ -16817,7 +16817,7 @@ in

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 { };

Expand Down Expand Up @@ -17520,6 +17520,10 @@ in
lsscsi = callPackage ../os-specific/linux/lsscsi { };

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 { };

Expand Down

0 comments on commit 1a1e723

Please sign in to comment.