nixos/stage-1: create initramfs /lib at build time

Modules built in to the kernel can attempt to load firmware before
init is started.  To guarantee the firmware is accessible to them
where they expect, /lib has to exist in the initramfs — it can't be
created later by init, because by that point the module may already
have tried and given up.
This commit is contained in:
Alyssa Ross 2023-10-30 08:57:17 +01:00
parent e55c73a6f4
commit d9105c28c8
2 changed files with 4 additions and 4 deletions

View file

@ -253,9 +253,6 @@ done
@setHostId@
# Load the required kernel modules.
mkdir -p /lib
ln -s @modulesClosure@/lib/modules /lib/modules
ln -s @modulesClosure@/lib/firmware /lib/firmware
echo @extraUtils@/bin/modprobe > /proc/sys/kernel/modprobe
for i in @kernelModules@; do
info "loading module $(basename $i)..."

View file

@ -307,7 +307,7 @@ let
${pkgs.buildPackages.busybox}/bin/ash -n $target
'';
inherit linkUnits udevRules extraUtils modulesClosure;
inherit linkUnits udevRules extraUtils;
inherit (config.boot) resumeDevice;
@ -349,6 +349,9 @@ let
[ { object = bootStage1;
symlink = "/init";
}
{ object = "${modulesClosure}/lib";
symlink = "/lib";
}
{ object = pkgs.runCommand "initrd-kmod-blacklist-ubuntu" {
src = "${pkgs.kmod-blacklist-ubuntu}/modprobe.conf";
preferLocalBuild = true;