diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index 6f941cc254ad..fae441d28e20 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -286,6 +286,7 @@ in { drawterm = discoverTests (import ./drawterm.nix); drbd = handleTest ./drbd.nix {}; druid = handleTestOn [ "x86_64-linux" ] ./druid {}; + drbd-driver = handleTest ./drbd-driver.nix {}; dublin-traceroute = handleTest ./dublin-traceroute.nix {}; earlyoom = handleTestOn ["x86_64-linux"] ./earlyoom.nix {}; early-mount-options = handleTest ./early-mount-options.nix {}; diff --git a/nixos/tests/drbd-driver.nix b/nixos/tests/drbd-driver.nix new file mode 100644 index 000000000000..9ba7c438eabc --- /dev/null +++ b/nixos/tests/drbd-driver.nix @@ -0,0 +1,24 @@ +import ./make-test-python.nix ( + { lib, pkgs, ... }: + { + name = "drbd-driver"; + meta.maintainers = with pkgs.lib.maintainers; [ birkb ]; + + nodes = { + machine = + { config, pkgs, ... }: + { + boot = { + kernelModules = [ "drbd" ]; + extraModulePackages = with config.boot.kernelPackages; [ drbd ]; + kernelPackages = pkgs.linuxPackages; + }; + }; + }; + + testScript = '' + machine.start(); + machine.succeed("modinfo drbd | grep --extended-regexp '^version:\s+${pkgs.linuxPackages.drbd.version}$'") + ''; + } +) diff --git a/pkgs/os-specific/linux/drbd/driver.nix b/pkgs/os-specific/linux/drbd/driver.nix index 106bcf71cd98..cba11ba5946d 100644 --- a/pkgs/os-specific/linux/drbd/driver.nix +++ b/pkgs/os-specific/linux/drbd/driver.nix @@ -1,12 +1,12 @@ -{ stdenv, lib, fetchurl, kernel, flex, coccinelle, python3 }: +{ stdenv, lib, fetchurl, kernel, nixosTests, flex, coccinelle, python3 }: -stdenv.mkDerivation rec { - name = "drbd-${version}-${kernel.version}"; - version = "9.2.8"; +stdenv.mkDerivation (finalAttrs: { + pname = "drbd"; + version = "9.2.9"; src = fetchurl { - url = "https://pkg.linbit.com//downloads/drbd/9/drbd-${version}.tar.gz"; - hash = "sha256-LqK1lPucab7wKvcB4VKGdvBIq+K9XtuO2m0DP5XtK3M="; + url = "https://pkg.linbit.com//downloads/drbd/9/drbd-${finalAttrs.version}.tar.gz"; + hash = "sha256-MLG0hGvAjjkNxhszbpnb8fkzWUQC1zPhkeOaU0V5x3g="; }; hardeningDisable = [ "pic" ]; @@ -18,40 +18,22 @@ stdenv.mkDerivation rec { python3 ]; - makeFlags = [ + makeFlags = kernel.makeFlags ++ [ "KDIR=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build" + "KVER=${kernel.version}" + "INSTALL_MOD_PATH=${placeholder "out"}" + "M=$(sourceRoot)" "SPAAS=false" ]; - # 6.4 and newer provide a in-tree version of the handshake module https://www.kernel.org/doc/html/v6.4/networking/tls-handshake.html - installPhase = '' - runHook preInstall - install -D drbd/drbd.ko -t $out/lib/modules/${kernel.modDirVersion}/kernel/drivers/block/drbd9 - install -D drbd/drbd_transport_tcp.ko -t $out/lib/modules/${kernel.modDirVersion}/kernel/drivers/block/drbd9 - install -D drbd/drbd_transport_lb-tcp.ko -t $out/lib/modules/${kernel.modDirVersion}/kernel/drivers/block/drbd9 - install -D drbd/drbd_transport_rdma.ko -t $out/lib/modules/${kernel.modDirVersion}/kernel/drivers/block/drbd9 - ${lib.optionalString (lib.versionOlder kernel.version "6.4") '' - install -D drbd/drbd-kernel-compat/handshake/handshake.ko -t $out/lib/modules/${kernel.modDirVersion}/kernel/drivers/block/drbd9 - ''} - runHook postInstall - ''; + installFlags = [ "INSTALL_MOD_PATH=${placeholder "out"}" ]; postPatch = '' patchShebangs . substituteInPlace Makefile --replace 'SHELL=/bin/bash' 'SHELL=${builtins.getEnv "SHELL"}' ''; - # builder.pl had complained about the same file (drbd.ko.xz) provided by two different packages - # builder.pl also had complained about different permissions between the files from the two packages - # The compression is required because the kernel has the CONFIG_MODULE_COMPRESS_XZ option enabled - postFixup = '' - for ko in $out/lib/modules/${kernel.modDirVersion}/kernel/drivers/block/drbd9/*.ko; do - xz --compress -6 --threads=0 $ko - chmod 0444 $ko.xz - done - ''; - - enableParallelBuilding = true; + passthru.tests.drbd-driver = nixosTests.drbd-driver; meta = with lib; { homepage = "https://github.com/LINBIT/drbd"; @@ -60,9 +42,8 @@ stdenv.mkDerivation rec { platforms = platforms.linux; maintainers = with maintainers; [ birkb ]; longDescription = '' - DRBD is a software-based, shared-nothing, replicated storage solution - mirroring the content of block devices (hard disks, partitions, logical volumes, and so on) between hosts. + DRBD is a software-based, shared-nothing, replicated storage solution + mirroring the content of block devices (hard disks, partitions, logical volumes, and so on) between hosts. ''; - broken = lib.versionAtLeast kernel.version "6.8"; # wait until next DRBD release for 6.8 support https://github.com/LINBIT/drbd/issues/87#issuecomment-2059323084 }; -} +})