Unverified Commit 66a09f19 authored by Ryan Lahfa's avatar Ryan Lahfa Committed by GitHub
Browse files

Merge pull request #267640 from Madouura/pr/bcachefs

parents ab3c49d8 05b65184
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -30,6 +30,9 @@

[`sudo-rs`]: https://github.com/memorysafety/sudo-rs/

- `linuxPackages_testing_bcachefs` is now soft-deprecated by `linuxPackages_testing`.
  - Please consider changing your NixOS configuration's `boot.kernelPackages` to `linuxPackages_testing` until a stable kernel with bcachefs support is released.

- All [ROCm](https://rocm.docs.amd.com/en/latest/) packages have been updated to 5.7.0.
  - [ROCm](https://rocm.docs.amd.com/en/latest/) package attribute sets are versioned: `rocmPackages` -> `rocmPackages_5`.

+31 −10
Original line number Diff line number Diff line
{ config, lib, pkgs, utils, ... }:

with lib;

let

  bootFs = filterAttrs (n: fs: (fs.fsType == "bcachefs") && (utils.fsNeededForBoot fs)) config.fileSystems;
  bootFs = lib.filterAttrs (n: fs: (fs.fsType == "bcachefs") && (utils.fsNeededForBoot fs)) config.fileSystems;

  commonFunctions = ''
    prompt() {
@@ -56,7 +54,7 @@ let
  # remove this adaptation when bcachefs implements mounting by filesystem uuid
  # also, implement automatic waiting for the constituent devices when that happens
  # bcachefs does not support mounting devices with colons in the path, ergo we don't (see #49671)
  firstDevice = fs: head (splitString ":" fs.device);
  firstDevice = fs: lib.head (lib.splitString ":" fs.device);

  openCommand = name: fs: ''
    tryUnlock ${name} ${firstDevice fs}
@@ -90,22 +88,45 @@ let
    };
  };

  assertions = [
    {
      assertion = let
        kernel = config.boot.kernelPackages.kernel;
      in (
        kernel.kernelAtLeast "6.7" || (
          lib.elem (kernel.structuredExtraConfig.BCACHEFS_FS or null) [
            lib.kernel.module
            lib.kernel.yes
            lib.kernel.option.yes
          ]
        )
      );

      message = "Linux 6.7-rc1 at minimum or a custom linux kernel with bcachefs support is required";
    }
  ];
in

{
  config = mkIf (elem "bcachefs" config.boot.supportedFilesystems) (mkMerge [
  config = lib.mkIf (lib.elem "bcachefs" config.boot.supportedFilesystems) (lib.mkMerge [
    {
      inherit assertions;
      # needed for systemd-remount-fs
      system.fsPackages = [ pkgs.bcachefs-tools ];

      # use kernel package with bcachefs support until it's in mainline
      # TODO replace with requireKernelConfig
      boot.kernelPackages = pkgs.linuxPackages_testing_bcachefs;
      # FIXME: Replace this with `linuxPackages_testing` after NixOS 23.11 is released
      # FIXME: Replace this with `linuxPackages_latest` when 6.7 is released, remove this line when the LTS version is at least 6.7
      boot.kernelPackages = lib.mkDefault (
        # FIXME: Remove warning after NixOS 23.11 is released
        lib.warn "Please upgrade to Linux 6.7-rc1 or later: 'linuxPackages_testing_bcachefs' is deprecated. Use 'boot.kernelPackages = pkgs.linuxPackages_testing;' to silence this warning"
        pkgs.linuxPackages_testing_bcachefs
      );

      systemd.services = lib.mapAttrs' (mkUnits "") (lib.filterAttrs (n: fs: (fs.fsType == "bcachefs") && (!utils.fsNeededForBoot fs)) config.fileSystems);
    }

    (mkIf ((elem "bcachefs" config.boot.initrd.supportedFilesystems) || (bootFs != {})) {
    (lib.mkIf ((lib.elem "bcachefs" config.boot.initrd.supportedFilesystems) || (bootFs != {})) {
      inherit assertions;
      # chacha20 and poly1305 are required only for decryption attempts
      boot.initrd.availableKernelModules = [ "bcachefs" "sha256" "chacha20" "poly1305" ];
      boot.initrd.systemd.extraBin = {
@@ -121,7 +142,7 @@ in
        $out/bin/bcachefs version
      '';

      boot.initrd.postDeviceCommands = lib.mkIf (!config.boot.initrd.systemd.enable) (commonFunctions + concatStrings (mapAttrsToList openCommand bootFs));
      boot.initrd.postDeviceCommands = lib.mkIf (!config.boot.initrd.systemd.enable) (commonFunctions + lib.concatStrings (lib.mapAttrsToList openCommand bootFs));

      boot.initrd.systemd.services = lib.mapAttrs' (mkUnits "/sysroot") bootFs;
    })
+62 −0
Original line number Diff line number Diff line
@@ -991,6 +991,68 @@ in {
    '';
  };

  bcachefsLinuxTesting = makeInstallerTest "bcachefs-linux-testing" {
    extraInstallerConfig = {
      imports = [ no-zfs-module ];

      boot = {
        supportedFilesystems = [ "bcachefs" ];
        kernelPackages = pkgs.linuxPackages_testing;
      };
    };

    extraConfig = ''
      boot.kernelPackages = pkgs.linuxPackages_testing;
    '';

    createPartitions = ''
      machine.succeed(
        "flock /dev/vda parted --script /dev/vda -- mklabel msdos"
        + " mkpart primary ext2 1M 100MB"          # /boot
        + " mkpart primary linux-swap 100M 1024M"  # swap
        + " mkpart primary 1024M -1s",             # /
        "udevadm settle",
        "mkswap /dev/vda2 -L swap",
        "swapon -L swap",
        "mkfs.bcachefs -L root /dev/vda3",
        "mount -t bcachefs /dev/vda3 /mnt",
        "mkfs.ext3 -L boot /dev/vda1",
        "mkdir -p /mnt/boot",
        "mount /dev/vda1 /mnt/boot",
      )
    '';
  };

  bcachefsUpgradeToLinuxTesting = makeInstallerTest "bcachefs-upgrade-to-linux-testing" {
    extraInstallerConfig = {
      imports = [ no-zfs-module ];
      boot.supportedFilesystems = [ "bcachefs" ];
      # We don't have network access in the VM, we need this for `nixos-install`
      system.extraDependencies = [ pkgs.linux_testing ];
    };

    extraConfig = ''
      boot.kernelPackages = pkgs.linuxPackages_testing;
    '';

    createPartitions = ''
      machine.succeed(
        "flock /dev/vda parted --script /dev/vda -- mklabel msdos"
        + " mkpart primary ext2 1M 100MB"          # /boot
        + " mkpart primary linux-swap 100M 1024M"  # swap
        + " mkpart primary 1024M -1s",             # /
        "udevadm settle",
        "mkswap /dev/vda2 -L swap",
        "swapon -L swap",
        "mkfs.bcachefs -L root /dev/vda3",
        "mount -t bcachefs /dev/vda3 /mnt",
        "mkfs.ext3 -L boot /dev/vda1",
        "mkdir -p /mnt/boot",
        "mount /dev/vda1 /mnt/boot",
      )
    '';
  };

  # Test using labels to identify volumes in grub
  simpleLabels = makeInstallerTest "simpleLabels" {
    createPartitions = ''
+7 −1
Original line number Diff line number Diff line
@@ -81,7 +81,13 @@ stdenv.mkDerivation (finalAttrs: {
  passthru = {
    tests = {
      smoke-test = nixosTests.bcachefs;
      inherit (nixosTests.installer) bcachefsSimple bcachefsEncrypted bcachefsMulti;

      inherit (nixosTests.installer)
        bcachefsSimple
        bcachefsEncrypted
        bcachefsMulti
        bcachefsLinuxTesting
        bcachefsUpgradeToLinuxTesting;
    };

    updateScript = writeScript "update-bcachefs-tools-and-cargo-lock.sh" ''
+1 −0
Original line number Diff line number Diff line
@@ -28106,6 +28106,7 @@ with pkgs;
  linuxPackages_testing = linuxKernel.packages.linux_testing;
  linux_testing = linuxKernel.kernels.linux_testing;
  # FIXME: Remove and alias to `linux(Packages)_testing`` after 23.11 is released
  linuxPackages_testing_bcachefs = linuxKernel.packages.linux_testing_bcachefs;
  linux_testing_bcachefs = linuxKernel.kernels.linux_testing_bcachefs;
Loading