diff --git a/nixos/lib/make-multi-disk-zfs-image.nix b/nixos/lib/make-multi-disk-zfs-image.nix index dd49009450a0..86256673f5f9 100644 --- a/nixos/lib/make-multi-disk-zfs-image.nix +++ b/nixos/lib/make-multi-disk-zfs-image.nix @@ -262,7 +262,8 @@ let "virtiofs" "zfs" ]; - kernel = modulesTree; + kernel = config.boot.kernelPackages.kernel; + kernelModules = modulesTree; }).runInLinuxVM ( pkgs.runCommand name diff --git a/nixos/lib/make-single-disk-zfs-image.nix b/nixos/lib/make-single-disk-zfs-image.nix index 8c71fbd2c13d..27efc9783793 100644 --- a/nixos/lib/make-single-disk-zfs-image.nix +++ b/nixos/lib/make-single-disk-zfs-image.nix @@ -250,7 +250,8 @@ let "virtiofs" "zfs" ]; - kernel = modulesTree; + kernel = config.boot.kernelPackages.kernel; + kernelModules = modulesTree; }).runInLinuxVM ( pkgs.runCommand name diff --git a/pkgs/build-support/vm/default.nix b/pkgs/build-support/vm/default.nix index 4a70df24fbf5..ad2e50b1a7b7 100644 --- a/pkgs/build-support/vm/default.nix +++ b/pkgs/build-support/vm/default.nix @@ -30,7 +30,22 @@ # ---------------------------- customQemu ? null, kernel ? linux, - img ? kernel.target, + # Name of the kernel image file inside the `kernel` output. + kernelImage ? + kernel.target or (throw '' + vmTools: the `kernel` argument (${kernel.name or ""}) has no + `target` attribute, so the kernel image filename cannot be determined. + + If you are passing a module tree (e.g. from `pkgs.aggregateModules`) to + make extra modules available, pass it via `kernelModules` instead and + keep `kernel` pointing at a real kernel derivation. Alternatively, pass + `kernelImage` explicitly with the path of the bootable image relative + to the `kernel` derivation output (e.g. "bzImage" or "Image"). + ''), + # Package providing `lib/modules` for the VM initrd. Override this (e.g. + # with `pkgs.aggregateModules [ ... ]`) to make extra kernel modules + # available inside the VM without replacing the boot kernel. + kernelModules ? kernel, storeDir ? builtins.storeDir, rootModules ? [ "virtio_pci" @@ -50,9 +65,9 @@ let qemu = buildPackages.qemu_kvm; modulesClosure = makeModulesClosure { - kernel = lib.getOutput "modules" kernel; + kernel = lib.getOutput "modules" kernelModules; inherit rootModules; - firmware = kernel; + firmware = kernelModules; }; hd = "vda"; # either "sda" or "vda" @@ -260,7 +275,7 @@ let -chardev socket,id=xchg,path=virtio-xchg.sock \ -device vhost-user-fs-pci,chardev=xchg,tag=xchg \ ''${diskImage:+-drive file=$diskImage,if=virtio,cache=unsafe,werror=report} \ - -kernel ${kernel}/${img} \ + -kernel ${kernel}/${kernelImage} \ -initrd ${initrd}/initrd \ -append "console=${qemu-common.qemuSerialDevice} panic=1 command=${stage2Init} mountDisk=$mountDisk loglevel=4" \ $QEMU_OPTS