mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-07-09 12:05:50 +03:00
Merge pull request #267640 from Madouura/pr/bcachefs
This commit is contained in:
commit
66a09f19cd
6 changed files with 106 additions and 11 deletions
|
@ -30,6 +30,9 @@
|
||||||
|
|
||||||
[`sudo-rs`]: https://github.com/memorysafety/sudo-rs/
|
[`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.
|
- 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`.
|
- [ROCm](https://rocm.docs.amd.com/en/latest/) package attribute sets are versioned: `rocmPackages` -> `rocmPackages_5`.
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,8 @@
|
||||||
{ config, lib, pkgs, utils, ... }:
|
{ config, lib, pkgs, utils, ... }:
|
||||||
|
|
||||||
with lib;
|
|
||||||
|
|
||||||
let
|
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 = ''
|
commonFunctions = ''
|
||||||
prompt() {
|
prompt() {
|
||||||
|
@ -56,7 +54,7 @@ let
|
||||||
# remove this adaptation when bcachefs implements mounting by filesystem uuid
|
# remove this adaptation when bcachefs implements mounting by filesystem uuid
|
||||||
# also, implement automatic waiting for the constituent devices when that happens
|
# 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)
|
# 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: ''
|
openCommand = name: fs: ''
|
||||||
tryUnlock ${name} ${firstDevice 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
|
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
|
# needed for systemd-remount-fs
|
||||||
system.fsPackages = [ pkgs.bcachefs-tools ];
|
system.fsPackages = [ pkgs.bcachefs-tools ];
|
||||||
|
|
||||||
# use kernel package with bcachefs support until it's in mainline
|
# FIXME: Replace this with `linuxPackages_testing` after NixOS 23.11 is released
|
||||||
# TODO replace with requireKernelConfig
|
# 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 = pkgs.linuxPackages_testing_bcachefs;
|
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);
|
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
|
# chacha20 and poly1305 are required only for decryption attempts
|
||||||
boot.initrd.availableKernelModules = [ "bcachefs" "sha256" "chacha20" "poly1305" ];
|
boot.initrd.availableKernelModules = [ "bcachefs" "sha256" "chacha20" "poly1305" ];
|
||||||
boot.initrd.systemd.extraBin = {
|
boot.initrd.systemd.extraBin = {
|
||||||
|
@ -121,7 +142,7 @@ in
|
||||||
$out/bin/bcachefs version
|
$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;
|
boot.initrd.systemd.services = lib.mapAttrs' (mkUnits "/sysroot") bootFs;
|
||||||
})
|
})
|
||||||
|
|
|
@ -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
|
# Test using labels to identify volumes in grub
|
||||||
simpleLabels = makeInstallerTest "simpleLabels" {
|
simpleLabels = makeInstallerTest "simpleLabels" {
|
||||||
createPartitions = ''
|
createPartitions = ''
|
||||||
|
|
|
@ -81,7 +81,13 @@ stdenv.mkDerivation (finalAttrs: {
|
||||||
passthru = {
|
passthru = {
|
||||||
tests = {
|
tests = {
|
||||||
smoke-test = nixosTests.bcachefs;
|
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" ''
|
updateScript = writeScript "update-bcachefs-tools-and-cargo-lock.sh" ''
|
||||||
|
|
|
@ -28106,6 +28106,7 @@ with pkgs;
|
||||||
linuxPackages_testing = linuxKernel.packages.linux_testing;
|
linuxPackages_testing = linuxKernel.packages.linux_testing;
|
||||||
linux_testing = linuxKernel.kernels.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;
|
linuxPackages_testing_bcachefs = linuxKernel.packages.linux_testing_bcachefs;
|
||||||
linux_testing_bcachefs = linuxKernel.kernels.linux_testing_bcachefs;
|
linux_testing_bcachefs = linuxKernel.kernels.linux_testing_bcachefs;
|
||||||
|
|
||||||
|
|
|
@ -201,6 +201,7 @@ in {
|
||||||
then latest
|
then latest
|
||||||
else testing;
|
else testing;
|
||||||
|
|
||||||
|
# FIXME: Remove after 23.11 is released
|
||||||
linux_testing_bcachefs = callPackage ../os-specific/linux/kernel/linux-testing-bcachefs.nix {
|
linux_testing_bcachefs = callPackage ../os-specific/linux/kernel/linux-testing-bcachefs.nix {
|
||||||
# Pinned on the last version which Kent's commits can be cleany rebased up.
|
# Pinned on the last version which Kent's commits can be cleany rebased up.
|
||||||
kernel = linux_6_5;
|
kernel = linux_6_5;
|
||||||
|
@ -612,6 +613,7 @@ in {
|
||||||
|
|
||||||
# Intentionally lacks recurseIntoAttrs, as -rc kernels will quite likely break out-of-tree modules and cause failed Hydra builds.
|
# Intentionally lacks recurseIntoAttrs, as -rc kernels will quite likely break out-of-tree modules and cause failed Hydra builds.
|
||||||
linux_testing = packagesFor kernels.linux_testing;
|
linux_testing = packagesFor kernels.linux_testing;
|
||||||
|
# FIXME: Remove after 23.11 is released
|
||||||
linux_testing_bcachefs = recurseIntoAttrs (packagesFor kernels.linux_testing_bcachefs);
|
linux_testing_bcachefs = recurseIntoAttrs (packagesFor kernels.linux_testing_bcachefs);
|
||||||
|
|
||||||
linux_hardened = recurseIntoAttrs (packagesFor kernels.linux_hardened);
|
linux_hardened = recurseIntoAttrs (packagesFor kernels.linux_hardened);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue