nixosTests.limine.bios: init

This patch adds a NixOS test for Limine on BIOS systems. It also fixes
some formatting in `nixos/lib/make-disk-image.nix`.

Signed-off-by: John Titor <50095635+JohnRTitor@users.noreply.github.com>

sanana c156a809 95355b4d

Changed files
+53 -12
nixos
lib
modules
virtualisation
tests
+21 -12
nixos/lib/make-disk-image.nix
···
''}
${lib.optionalString installBootLoader ''
-
# In this throwaway resource, we only have /dev/vda, but the actual VM may refer to another disk for bootloader, e.g. /dev/vdb
-
# Use this option to create a symlink from vda to any arbitrary device you want.
-
${lib.optionalString (config.boot.loader.grub.enable) (
-
lib.concatMapStringsSep " " (
-
device:
-
lib.optionalString (device != "/dev/vda") ''
-
mkdir -p "$(dirname ${device})"
-
ln -s /dev/vda ${device}
-
''
-
) config.boot.loader.grub.devices
-
)}
+
# In this throwaway resource, we only have /dev/vda, but the actual VM may refer to another disk for bootloader, e.g. /dev/vdb
+
# Use this option to create a symlink from vda to any arbitrary device you want.
+
${lib.optionalString (config.boot.loader.grub.enable) (
+
lib.concatMapStringsSep " " (
+
device:
+
lib.optionalString (device != "/dev/vda") ''
+
mkdir -p "$(dirname ${device})"
+
ln -s /dev/vda ${device}
+
''
+
) config.boot.loader.grub.devices
+
)}
+
${
+
let
+
limine = config.boot.loader.limine;
+
in
+
lib.optionalString (limine.enable && limine.biosSupport && limine.biosDevice != "/dev/vda") ''
+
mkdir -p "$(dirname ${limine.biosDevice})"
+
ln -s /dev/vda ${limine.biosDevice}
+
''
+
}
-
# Set up core system link, bootloader (sd-boot, GRUB, uboot, etc.), etc.
+
# Set up core system link, bootloader (sd-boot, GRUB, uboot, etc.), etc.
# NOTE: systemd-boot-builder.py calls nix-env --list-generations which
# clobbers $HOME/.nix-defexpr/channels/nixos This would cause a folder
+3
nixos/modules/virtualisation/qemu-vm.nix
···
`useBootLoader` useless. You might want to disable one of those options.
'';
+
# Install Limine on the bootloader device
+
boot.loader.limine.biosDevice = cfg.bootLoaderDevice;
+
# In UEFI boot, we use a EFI-only partition table layout, thus GRUB will fail when trying to install
# legacy and UEFI. In order to avoid this, we have to put "nodev" to force UEFI-only installs.
# Otherwise, we set the proper bootloader device for this.
+28
nixos/tests/limine/bios.nix
···
+
{ lib, ... }:
+
{
+
name = "bios";
+
meta.maintainers = with lib.maintainers; [
+
lzcunt
+
phip1611
+
programmerlexi
+
];
+
meta.platforms = [
+
"i686-linux"
+
"x86_64-linux"
+
];
+
nodes.machine =
+
{ ... }:
+
{
+
virtualisation.useBootLoader = true;
+
virtualisation.useBootPartition = true;
+
boot.loader.limine.enable = true;
+
boot.loader.limine.efiSupport = false;
+
boot.loader.timeout = 0;
+
};
+
+
testScript = ''
+
machine.start()
+
with subtest('Machine boots correctly'):
+
machine.wait_for_unit('multi-user.target')
+
'';
+
}
+1
nixos/tests/limine/default.nix
···
...
}:
{
+
bios = runTest ./bios.nix;
checksum = runTest ./checksum.nix;
secureBoot = runTest ./secure-boot.nix;
specialisations = runTest ./specialisations.nix;