From 52a7570e09faacdf81ff5f876491bcc3cb3a61df Mon Sep 17 00:00:00 2001 From: Andrew Marshall Date: Wed, 14 Aug 2024 12:51:27 -0400 Subject: [PATCH 1/3] zfs_unstable: remove unused param --- pkgs/os-specific/linux/zfs/generic.nix | 1 - pkgs/os-specific/linux/zfs/unstable.nix | 1 - 2 files changed, 2 deletions(-) diff --git a/pkgs/os-specific/linux/zfs/generic.nix b/pkgs/os-specific/linux/zfs/generic.nix index 3adcb97f6a69..51149ce36a0c 100644 --- a/pkgs/os-specific/linux/zfs/generic.nix +++ b/pkgs/os-specific/linux/zfs/generic.nix @@ -27,7 +27,6 @@ let , kernelModuleAttribute , extraPatches ? [] , rev ? "zfs-${version}" - , isUnstable ? false , latestCompatibleLinuxPackages , kernelCompatible ? null , maintainers ? (with lib.maintainers; [ amarshall ]) diff --git a/pkgs/os-specific/linux/zfs/unstable.nix b/pkgs/os-specific/linux/zfs/unstable.nix index 50e1cc1459e9..6996c0e77df0 100644 --- a/pkgs/os-specific/linux/zfs/unstable.nix +++ b/pkgs/os-specific/linux/zfs/unstable.nix @@ -26,7 +26,6 @@ callPackage ./generic.nix args { version = "2.2.5"; # rev = ""; - isUnstable = true; tests = [ nixosTests.zfs.unstable ]; From 222e62af5414b43afaaed5009c062f9ae5a735a9 Mon Sep 17 00:00:00 2001 From: Andrew Marshall Date: Wed, 14 Aug 2024 12:51:52 -0400 Subject: [PATCH 2/3] linux: add passthru.isVanilla MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit For use by consumers that want to iterate over all Linux Kernel packages to, e.g., find the latest “vanilla” version that matches some version constraint. (E.g. This will soon be used by ZFS’s latestCompatibleLinuxPackages) --- pkgs/os-specific/linux/kernel/generic.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/os-specific/linux/kernel/generic.nix b/pkgs/os-specific/linux/kernel/generic.nix index 74e603623412..a6067439a8f3 100644 --- a/pkgs/os-specific/linux/kernel/generic.nix +++ b/pkgs/os-specific/linux/kernel/generic.nix @@ -230,6 +230,7 @@ kernel.overrideAttrs (finalAttrs: previousAttrs: { passthru = previousAttrs.passthru or { } // basicArgs // { features = kernelFeatures; inherit commonStructuredConfig structuredExtraConfig extraMakeFlags isZen isHardened isLibre; + isVanilla = !(isHardened || isLibre || isZen); isXen = lib.warn "The isXen attribute is deprecated. All Nixpkgs kernels that support it now have Xen enabled." true; # Adds dependencies needed to edit the config: From 7fa05c77b7d53652cdd6a12011bb78c63bd785c7 Mon Sep 17 00:00:00 2001 From: Andrew Marshall Date: Wed, 14 Aug 2024 12:54:16 -0400 Subject: [PATCH 3/3] zfs: dynamically determine latestCompatibleLinuxPackages This removes the need to micromanage this value, instead we simply find the correct one based on the existing kernelCompatible attr (though that is now a function). This not only simplifies ZFS upgrades, but also whenever Kernel versions are removed due to EOL. --- pkgs/os-specific/linux/zfs/2_1.nix | 5 +---- pkgs/os-specific/linux/zfs/2_2.nix | 5 +---- pkgs/os-specific/linux/zfs/generic.nix | 12 +++++++++--- pkgs/os-specific/linux/zfs/unstable.nix | 5 +---- 4 files changed, 12 insertions(+), 15 deletions(-) diff --git a/pkgs/os-specific/linux/zfs/2_1.nix b/pkgs/os-specific/linux/zfs/2_1.nix index 97173a5154a5..d950f5cac15d 100644 --- a/pkgs/os-specific/linux/zfs/2_1.nix +++ b/pkgs/os-specific/linux/zfs/2_1.nix @@ -1,7 +1,6 @@ { callPackage , kernel ? null , stdenv -, linuxKernel , lib , nixosTests , ... @@ -15,9 +14,7 @@ callPackage ./generic.nix args { # this attribute is the correct one for this package. kernelModuleAttribute = "zfs_2_1"; # check the release notes for compatible kernels - kernelCompatible = kernel.kernelOlder "6.8"; - - latestCompatibleLinuxPackages = linuxKernel.packages.linux_6_6; + kernelCompatible = kernel: kernel.kernelOlder "6.8"; # This is a fixed version to the 2.1.x series, move only # if the 2.1.x series moves. diff --git a/pkgs/os-specific/linux/zfs/2_2.nix b/pkgs/os-specific/linux/zfs/2_2.nix index 9e3fde0780f0..469b1cca0968 100644 --- a/pkgs/os-specific/linux/zfs/2_2.nix +++ b/pkgs/os-specific/linux/zfs/2_2.nix @@ -2,7 +2,6 @@ , kernel ? null , stdenv , lib -, linuxKernel , nixosTests , ... } @ args: @@ -15,9 +14,7 @@ callPackage ./generic.nix args { # this attribute is the correct one for this package. kernelModuleAttribute = "zfs_2_2"; # check the release notes for compatible kernels - kernelCompatible = kernel.kernelOlder "6.10"; - - latestCompatibleLinuxPackages = linuxKernel.packages.linux_6_6; + kernelCompatible = kernel: kernel.kernelOlder "6.10"; # this package should point to the latest release. version = "2.2.5"; diff --git a/pkgs/os-specific/linux/zfs/generic.nix b/pkgs/os-specific/linux/zfs/generic.nix index 51149ce36a0c..b6e0a6d9882e 100644 --- a/pkgs/os-specific/linux/zfs/generic.nix +++ b/pkgs/os-specific/linux/zfs/generic.nix @@ -2,6 +2,7 @@ let genericBuild = { pkgs, lib, stdenv, fetchFromGitHub , autoreconfHook269, util-linux, nukeReferences, coreutils + , linuxKernel , perl , configFile ? "all" @@ -27,7 +28,6 @@ let , kernelModuleAttribute , extraPatches ? [] , rev ? "zfs-${version}" - , latestCompatibleLinuxPackages , kernelCompatible ? null , maintainers ? (with lib.maintainers; [ amarshall ]) , tests @@ -198,7 +198,13 @@ let outputs = [ "out" ] ++ optionals buildUser [ "dev" ]; passthru = { - inherit enableMail latestCompatibleLinuxPackages kernelModuleAttribute; + inherit enableMail kernelModuleAttribute; + latestCompatibleLinuxPackages = lib.pipe linuxKernel.packages [ + builtins.attrValues + (builtins.filter (kPkgs: (builtins.tryEval kPkgs).success && kPkgs ? kernel && kPkgs.kernel.passthru.isVanilla && kernelCompatible kPkgs.kernel)) + (builtins.sort (a: b: (lib.versionOlder a.kernel.version b.kernel.version))) + lib.last + ]; # The corresponding userspace tools to this instantiation # of the ZFS package set. userspaceTools = genericBuild (outerArgs // { @@ -235,7 +241,7 @@ let mainProgram = "zfs"; # If your Linux kernel version is not yet supported by zfs, try zfs_unstable. # On NixOS set the option `boot.zfs.package = pkgs.zfs_unstable`. - broken = buildKernel && (kernelCompatible != null) && !kernelCompatible; + broken = buildKernel && (kernelCompatible != null) && !(kernelCompatible kernel); }; }; in diff --git a/pkgs/os-specific/linux/zfs/unstable.nix b/pkgs/os-specific/linux/zfs/unstable.nix index 6996c0e77df0..8ca88c71303c 100644 --- a/pkgs/os-specific/linux/zfs/unstable.nix +++ b/pkgs/os-specific/linux/zfs/unstable.nix @@ -1,7 +1,6 @@ { callPackage , kernel ? null , stdenv -, linuxKernel , nixosTests , fetchpatch , ... @@ -15,9 +14,7 @@ callPackage ./generic.nix args { # this attribute is the correct one for this package. kernelModuleAttribute = "zfs_unstable"; # check the release notes for compatible kernels - kernelCompatible = kernel.kernelOlder "6.11"; - - latestCompatibleLinuxPackages = linuxKernel.packages.linux_6_10; + kernelCompatible = kernel: kernel.kernelOlder "6.11"; # this package should point to a version / git revision compatible with the latest kernel release # IMPORTANT: Always use a tagged release candidate or commits from the