diff --git a/boot.nix b/boot.nix index 16d07d8..6f110b9 100644 --- a/boot.nix +++ b/boot.nix @@ -60,6 +60,7 @@ in x32abi = { enable = mkEnableOption "X32 kernel ABI"; }; + kvdo.enable = mkEnableOption "dm-kvdo kernel module"; efi = mkOption rec { description = "Use EFI bootloader"; default = builtins.pathExists "/sys/firmware/efi"; @@ -114,6 +115,9 @@ in kernelPatches = concatLists [ (optional cfg.x32abi.enable customKernelPatches.enableX32ABI) ]; + extraModulePackages = concatLists [ + (optional cfg.kvdo.enable pkgs.kvdo) + ]; loader.grub.enable = cfg.useGrub || (!cfg.efi); loader.grub = { diff --git a/overlays.nix b/overlays.nix index 6eb3139..f96e371 100644 --- a/overlays.nix +++ b/overlays.nix @@ -127,6 +127,8 @@ in # chromium = self.ungoogled-chromium; myFirefox = (import ./packages/firefox.nix { pkgs = self; inherit lib; }); + + kvdo = config.boot.kernelPackages.callPackage ./packages/kvdo.nix { }; }) ]; diff --git a/packages/kvdo.nix b/packages/kvdo.nix new file mode 100644 index 0000000..4aecacc --- /dev/null +++ b/packages/kvdo.nix @@ -0,0 +1,53 @@ +{ stdenv, lib, fetchFromGitHub, kernel }: + +stdenv.mkDerivation rec { + pname = "kvdo"; + + _tag = "8.1.1.371"; + version = "${_tag}-${kernel.version}"; + + src = fetchFromGitHub { + owner = "dm-vdo"; + repo = "kvdo"; + rev = "${_tag}"; + sha256 = "sha256:1nwprbyql5vzhhgl2zmgnp5ax50ys7crgq8ff11zr8fhcna4fmmw"; + }; + + nativeBuildInputs = kernel.moduleBuildDependencies; + + KERNEL_DIR = "${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"; + + enableParallelBuilding = true; + dontConfigure = true; + + MAKEFLAGS = with lib; concatStringsSep " " ( + [] + ++ optional enableParallelBuilding "-j$(nproc)" + ++ optional enableParallelBuilding "-l$(nproc)" + ); + + buildPhase = '' + BASE_DIR=$(pwd) + make -C ${KERNEL_DIR} M=$BASE_DIR/uds modules + make -C ${KERNEL_DIR} M=$BASE_DIR/vdo \ + KBUILD_EXTRA_SYMBOLS=$BASE_DIR/uds/Module.symvers modules + ''; + + installPhase = '' + modDir=$out/lib/modules/${kernel.modDirVersion}/kernel/drivers/block/ + mkdir -p $modDir + for d in uds vdo; do + mv -v $d/*.ko $modDir/ + done + ''; + + hardeningDisable = [ "pic" ]; + + meta = with lib; { + description = "A pair of kernel modules which provide pools of deduplicated and/or compressed block storage"; + homepage = "https://github.com/dm-vdo/kvdo"; + license = licenses.gpl2Only; + # maintainers = [ maintainers.makefu ]; + platforms = platforms.linux; + }; +}