Modprobe: FATAL: Module bcachefs not found in directory /nix/store/[hash]-linux-5.16.11-modules/lib/modules/5.16.11

Hello!

With the following configuration.nix:

{ config, lib, pkgs, ... }: with builtins; with lib;

let
  nixos-hardware = builtins.fetchGit { url = "https://github.com/nixos/nixos-hardware.git"; ref = "master"; };
in {
  imports =
    [ # Include the results of the hardware scan.
      ./hardware-configuration.nix
      "${nixos-hardware}/microsoft/surface"
    ];

  ...

  boot = {
      loader = {
          systemd-boot.enable = true;
          efi = {
              canTouchEfiVariables = true;
              efiSysMountPoint = "/boot/efi";
          };
          grub.copyKernels = true;
      };
      zfs = {
          enableUnstable = true;
          devNodes = "/dev/";
      };
      kernelParams = [ "nohibernate" ];
      initrd.supportedFilesystems = [ "zfs" "bcachefs" ];
      supportedFilesystems = config.boot.initrd.supportedFilesystems;
  };

  ...

  nix = {
      useSandbox = false;
      package = pkgs.nixUnstable;
  };

  hardware.enableRedistributableFirmware = lib.mkDefault true;

  ...

  system.stateVersion = "21.11";

  boot.kernelPatches = [ {
      name = "bcachefs-6ddf061e68560a2bb263b126af7e894a6c1afb5f";

      patch = fetchpatch {
        name = "bcachefs-6ddf061e68560a2bb263b126af7e894a6c1afb5f.diff";
        url = "https://evilpiepirate.org/git/bcachefs.git/rawdiff/?id=6ddf061e68560a2bb263b126af7e894a6c1afb5f&id2=v5.16";
        sha256 = "1nkrr1cxavw0rqxlyiz7pf9igvqay0d5kk7194v9ph3fcp9rz5kc";
      };

      extraConfig = "BCACHEFS_FS m";
    } ];
}

And the following bcachefs.nix, in a forked repo of nixpkgs:

{ config, lib, pkgs, utils, ... }:

with lib;

let

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

  commonFunctions = ''
    prompt() {
        local name="$1"
        printf "enter passphrase for $name: "
    }
    tryUnlock() {
        local name="$1"
        local path="$2"
        if bcachefs unlock -c $path > /dev/null 2> /dev/null; then    # test for encryption
            prompt $name
            until bcachefs unlock $path 2> /dev/null; do              # repeat until sucessfully unlocked
                printf "unlocking failed!\n"
                prompt $name
            done
            printf "unlocking successful.\n"
        fi
    }
  '';

  openCommand = name: fs:
    let
      # we need only unlock one device manually, and cannot pass multiple at once
      # 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 = head (splitString ":" fs.device);
    in
      ''
        tryUnlock ${name} ${firstDevice}
      '';

in

{
  config = mkIf (elem "bcachefs" config.boot.supportedFilesystems) (mkMerge [
    {
      system.fsPackages = [ pkgs.bcachefs-tools ];

      # use kernel package with bcachefs support until it's in mainline
      # boot.kernelPackages = pkgs.linuxPackages_testing_bcachefs;
    }

    (mkIf ((elem "bcachefs" config.boot.initrd.supportedFilesystems) || (bootFs != {})) {
      # chacha20 and poly1305 are required only for decryption attempts
      boot.initrd.availableKernelModules = [ "bcachefs" "sha256" "chacha20" "poly1305" ];

      boot.initrd.extraUtilsCommands = ''
        copy_bin_and_libs ${pkgs.bcachefs-tools}/bin/bcachefs
      '';
      boot.initrd.extraUtilsCommandsTest = ''
        $out/bin/bcachefs version
      '';

      boot.initrd.postDeviceCommands = commonFunctions + concatStrings (mapAttrsToList openCommand bootFs);
    })
  ]);
}

I’m getting the following error:

building Nix...
building the system configuration...
these 4 derivations will be built:
  /nix/store/9f0b1iwk44pj2czf94vl95r4csxyb0rp-linux-5.16.11-modules-shrunk.drv
  /nix/store/vdlbc5gly53xabn3n0dk4j0xr8spknhn-stage-1-init.sh.drv
  /nix/store/c3cdcix05adv5imm82pzgvrz46slnx8i-initrd-linux-5.16.11.drv
  /nix/store/qvnqqmvpbaibky8q1bscdb7vm0hcnzzy-nixos-system-sandshrew-22.05.git.cf37c07a41bM.drv
building '/nix/store/9f0b1iwk44pj2czf94vl95r4csxyb0rp-linux-5.16.11-modules-shrunk.drv'...
kernel version is 5.16.11
root module: xhci_pci
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/drivers/usb/common/usb-common.ko.xz
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/drivers/usb/core/usbcore.ko.xz
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/drivers/usb/host/xhci-hcd.ko.xz
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/drivers/usb/host/xhci-pci-renesas.ko.xz
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/drivers/usb/host/xhci-pci.ko.xz
root module: nvme
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/crypto/crct10dif_common.ko.xz
  dependency already copied: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/crypto/crct10dif_common.ko.xz
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/arch/x86/crypto/crct10dif-pclmul.ko.xz
  dependency already copied: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/crypto/crct10dif_common.ko.xz
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/crypto/crct10dif_generic.ko.xz
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/lib/crc-t10dif.ko.xz
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/block/t10-pi.ko.xz
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/drivers/nvme/host/nvme-core.ko.xz
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/drivers/nvme/host/nvme.ko.xz
root module: uas
  dependency already copied: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/drivers/usb/common/usb-common.ko.xz
  dependency already copied: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/drivers/usb/core/usbcore.ko.xz
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/drivers/scsi/scsi_common.ko.xz
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/drivers/scsi/scsi_mod.ko.xz
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/drivers/usb/storage/usb-storage.ko.xz
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/drivers/usb/storage/uas.ko.xz
root module: sd_mod
  dependency already copied: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/crypto/crct10dif_common.ko.xz
  dependency already copied: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/crypto/crct10dif_common.ko.xz
  dependency already copied: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/arch/x86/crypto/crct10dif-pclmul.ko.xz
  dependency already copied: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/crypto/crct10dif_common.ko.xz
  dependency already copied: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/crypto/crct10dif_generic.ko.xz
  dependency already copied: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/lib/crc-t10dif.ko.xz
  dependency already copied: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/drivers/scsi/scsi_common.ko.xz
  dependency already copied: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/drivers/scsi/scsi_mod.ko.xz
  dependency already copied: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/block/t10-pi.ko.xz
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/drivers/scsi/sd_mod.ko.xz
root module: hyperv_keyboard
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/drivers/hv/hv_vmbus.ko.xz
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/drivers/input/serio/serio.ko.xz
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/drivers/input/serio/hyperv-keyboard.ko.xz
root module: md_mod
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/drivers/md/md-mod.ko.xz
root module: raid0
  dependency already copied: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/drivers/md/md-mod.ko.xz
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/drivers/md/raid0.ko.xz
root module: raid1
  dependency already copied: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/drivers/md/md-mod.ko.xz
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/drivers/md/raid1.ko.xz
root module: raid10
  dependency already copied: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/drivers/md/md-mod.ko.xz
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/drivers/md/raid10.ko.xz
root module: raid456
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/arch/x86/crypto/crc32c-intel.ko.xz
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/crypto/crc32c_generic.ko.xz
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/lib/libcrc32c.ko.xz
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/lib/raid6/raid6_pq.ko.xz
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/crypto/xor.ko.xz
  dependency already copied: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/drivers/md/md-mod.ko.xz
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/crypto/async_tx/async_tx.ko.xz
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/crypto/async_tx/async_xor.ko.xz
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/crypto/async_tx/async_pq.ko.xz
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/crypto/async_tx/async_memcpy.ko.xz
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/crypto/async_tx/async_raid6_recov.ko.xz
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/drivers/md/raid456.ko.xz
root module: ext2
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/fs/mbcache.ko.xz
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/fs/ext2/ext2.ko.xz
root module: ext4
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/fs/jbd2/jbd2.ko.xz
  dependency already copied: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/fs/mbcache.ko.xz
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/lib/crc16.ko.xz
  dependency already copied: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/arch/x86/crypto/crc32c-intel.ko.xz
  dependency already copied: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/crypto/crc32c_generic.ko.xz
  copying dependency: /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11/kernel/fs/ext4/ext4.ko.xz
root module: bcachefs
modprobe: FATAL: Module bcachefs not found in directory /nix/store/ibx3n5f2af7l645n6a5v909si6b2xl2z-linux-5.16.11-modules/lib/modules/5.16.11
error: builder for '/nix/store/9f0b1iwk44pj2czf94vl95r4csxyb0rp-linux-5.16.11-modules-shrunk.drv' failed with exit code 1
error: 1 dependencies of derivation '/nix/store/vdlbc5gly53xabn3n0dk4j0xr8spknhn-stage-1-init.sh.drv' failed to build
error: 1 dependencies of derivation '/nix/store/c3cdcix05adv5imm82pzgvrz46slnx8i-initrd-linux-5.16.11.drv' failed to build
error: 1 dependencies of derivation '/nix/store/qvnqqmvpbaibky8q1bscdb7vm0hcnzzy-nixos-system-sandshrew-22.05.git.cf37c07a41bM.drv' failed to build

As far as I can tell, this is more or less how the bcachefs test kernel is built as well; why isn’t the bcachefs module being found for this surface kernel, as built from ${nixos-hardware}/microsoft/surface?

Thank you kindly for the help!

You shouldn’t have to patch the kernel yourself. Just add bcachefs to boot.supportedFilesystems. It will take care of the patching.

Actually, by default it uses the testing kernel for bcachefs, since it isn’t mainlined yet, which is why I commented out the appropriate line in default config:

# use kernel package with bcachefs support until it's in mainline
# boot.kernelPackages = pkgs.linuxPackages_testing_bcachefs;

However, this also means I have to patch the surface kernel manually.