Skip to content

Commit

Permalink
Merge pull request #269452 from RaitoBezarius/zfs-superstable
Browse files Browse the repository at this point in the history
  • Loading branch information
RaitoBezarius authored Nov 24, 2023
2 parents 6fb31ec + b026c45 commit 58fdc49
Show file tree
Hide file tree
Showing 9 changed files with 339 additions and 234 deletions.
5 changes: 2 additions & 3 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -322,9 +322,8 @@ pkgs/applications/version-management/forgejo @bendlas @emilylange
/pkgs/development/ocaml-modules @ulrikstrid

# ZFS
pkgs/os-specific/linux/zfs @raitobezarius
nixos/lib/make-single-disk-zfs-image.nix @raitobezarius
nixos/lib/make-multi-disk-zfs-image.nix @raitobezarius
pkgs/os-specific/linux/zfs/2_1.nix @raitobezarius
pkgs/os-specific/linux/zfs/generic.nix @raitobezarius
nixos/modules/tasks/filesystems/zfs.nix @raitobezarius
nixos/tests/zfs.nix @raitobezarius

Expand Down
31 changes: 19 additions & 12 deletions nixos/modules/tasks/filesystems/zfs.nix
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ let
cfgTrim = config.services.zfs.trim;
cfgZED = config.services.zfs.zed;

selectModulePackage = package: config.boot.kernelPackages.${package.kernelModuleAttribute};
inInitrd = any (fs: fs == "zfs") config.boot.initrd.supportedFilesystems;
inSystem = any (fs: fs == "zfs") config.boot.supportedFilesystems;

Expand Down Expand Up @@ -210,11 +211,17 @@ in
options = {
boot.zfs = {
package = mkOption {
readOnly = true;
type = types.package;
default = if config.boot.zfs.enableUnstable then pkgs.zfsUnstable else pkgs.zfs;
defaultText = literalExpression "if config.boot.zfs.enableUnstable then pkgs.zfsUnstable else pkgs.zfs";
description = lib.mdDoc "Configured ZFS userland tools package.";
default = if cfgZfs.enableUnstable then pkgs.zfsUnstable else pkgs.zfs;
defaultText = literalExpression "if zfsUnstable is enabled then pkgs.zfsUnstable else pkgs.zfs";
description = lib.mdDoc "Configured ZFS userland tools package, use `pkgs.zfsUnstable` if you want to track the latest staging ZFS branch.";
};

modulePackage = mkOption {
internal = true; # It is supposed to be selected automatically, but can be overridden by expert users.
default = selectModulePackage cfgZfs.package;
type = types.package;
description = lib.mdDoc "Configured ZFS kernel module package.";
};

enabled = mkOption {
Expand Down Expand Up @@ -533,6 +540,10 @@ in
config = mkMerge [
(mkIf cfgZfs.enabled {
assertions = [
{
assertion = cfgZfs.modulePackage.version == cfgZfs.package.version;
message = "The kernel module and the userspace tooling versions are not matching, this is an unsupported usecase.";
}
{
assertion = cfgZED.enableMail -> cfgZfs.package.enableMail;
message = ''
Expand Down Expand Up @@ -571,18 +582,14 @@ in
# https://github.com/NixOS/nixpkgs/issues/106093
kernelParams = lib.optionals (!config.boot.zfs.allowHibernation) [ "nohibernate" ];

extraModulePackages = let
kernelPkg = if config.boot.zfs.enableUnstable then
config.boot.kernelPackages.zfsUnstable
else
config.boot.kernelPackages.zfs;
in [
(kernelPkg.override { inherit (cfgZfs) removeLinuxDRM; })
extraModulePackages = [
(cfgZfs.modulePackage.override { inherit (cfgZfs) removeLinuxDRM; })
];
};

boot.initrd = mkIf inInitrd {
kernelModules = [ "zfs" ] ++ optional (!cfgZfs.enableUnstable) "spl";
# spl has been removed in ≥ 2.2.0.
kernelModules = [ "zfs" ] ++ lib.optional (lib.versionOlder "2.2.0" version) "spl";
extraUtilsCommands =
mkIf (!config.boot.initrd.systemd.enable) ''
copy_bin_and_libs ${cfgZfs.package}/sbin/zfs
Expand Down
10 changes: 8 additions & 2 deletions nixos/tests/zfs.nix
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ let
else pkgs.linuxPackages
, enableUnstable ? false
, enableSystemdStage1 ? false
, zfsPackage ? if enableUnstable then pkgs.zfs else pkgs.zfsUnstable
, extraTest ? ""
}:
makeTest {
Expand All @@ -21,7 +22,7 @@ let
maintainers = [ adisbladis elvishjerricco ];
};

nodes.machine = { pkgs, lib, ... }:
nodes.machine = { config, pkgs, lib, ... }:
let
usersharePath = "/var/lib/samba/usershares";
in {
Expand All @@ -35,8 +36,8 @@ let
boot.loader.efi.canTouchEfiVariables = true;
networking.hostId = "deadbeef";
boot.kernelPackages = kernelPackage;
boot.zfs.package = zfsPackage;
boot.supportedFilesystems = [ "zfs" ];
boot.zfs.enableUnstable = enableUnstable;
boot.initrd.systemd.enable = enableSystemdStage1;

environment.systemPackages = [ pkgs.parted ];
Expand Down Expand Up @@ -193,6 +194,11 @@ let

in {

# maintainer: @raitobezarius
series_2_1 = makeZfsTest "2.1-series" {
zfsPackage = pkgs.zfs_2_1;
};

stable = makeZfsTest "stable" { };

unstable = makeZfsTest "unstable" {
Expand Down
49 changes: 49 additions & 0 deletions pkgs/os-specific/linux/zfs/2_1.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
{ callPackage
, kernel ? null
, stdenv
, linuxKernel
, removeLinuxDRM ? false
, lib
, nixosTests
, fetchpatch
, ...
} @ args:

let
stdenv' = if kernel == null then stdenv else kernel.stdenv;
in
callPackage ./generic.nix args {
# You have to ensure that in `pkgs/top-level/linux-kernels.nix`
# this attribute is the correct one for this package.
kernelModuleAttribute = "zfs_2_1";
# check the release notes for compatible kernels
kernelCompatible =
if stdenv'.isx86_64 || removeLinuxDRM
then kernel.kernelOlder "6.6"
else kernel.kernelOlder "6.2";

latestCompatibleLinuxPackages = if stdenv'.isx86_64 || removeLinuxDRM
then linuxKernel.packages.linux_6_5
else linuxKernel.packages.linux_6_1;

# This is a fixed version to the 2.1.x series, move only
# if the 2.1.x series moves.
version = "2.1.13";

extraPatches = [
(fetchpatch {
# https://github.com/openzfs/zfs/pull/15571
# Remove when it's backported to 2.1.x.
url = "https://github.com/robn/zfs/commit/617c990a4cf1157b0f8332f35672846ad16ca70a.patch";
hash = "sha256-j5YSrud7BaWk2npBl31qwFFLYltbut3CUjI1cjZOpag=";
})
];

hash = "sha256-tqUCn/Hf/eEmyWRQthWQdmTJK2sDspnHiiEfn9rz2Kc=";

tests = [
nixosTests.zfs.series_2_1
];

maintainers = [ lib.maintainers.raitobezarius ];
}
Loading

0 comments on commit 58fdc49

Please sign in to comment.