nixos/qemu-vm: make it possible to use UEFI without bootloaders
`useEFIBoot` is somewhat misleading, but we should make it possible to enable UEFI environment / firmware without buying into a bootloader. This makes it possible.
This commit is contained in:
parent
1d5ff2163e
commit
6e8248c8b2
|
@ -169,18 +169,26 @@ let
|
||||||
# Create a directory for exchanging data with the VM.
|
# Create a directory for exchanging data with the VM.
|
||||||
mkdir -p "$TMPDIR/xchg"
|
mkdir -p "$TMPDIR/xchg"
|
||||||
|
|
||||||
${lib.optionalString cfg.useBootLoader
|
${lib.optionalString cfg.useEFIBoot
|
||||||
''
|
''
|
||||||
|
# Expose EFI variables, it's useful even when we are not using a bootloader (!).
|
||||||
|
# We might be interested in having EFI variable storage present even if we aren't booting via UEFI, hence
|
||||||
|
# no guard against `useBootLoader`. Examples:
|
||||||
|
# - testing PXE boot or other EFI applications
|
||||||
|
# - directbooting LinuxBoot, which `kexec()s` into a UEFI environment that can boot e.g. Windows
|
||||||
NIX_EFI_VARS=$(readlink -f "''${NIX_EFI_VARS:-${config.system.name}-efi-vars.fd}")
|
NIX_EFI_VARS=$(readlink -f "''${NIX_EFI_VARS:-${config.system.name}-efi-vars.fd}")
|
||||||
|
# VM needs writable EFI vars
|
||||||
${lib.optionalString cfg.useEFIBoot
|
if ! test -e "$NIX_EFI_VARS"; then
|
||||||
''
|
${if cfg.useBootLoader then
|
||||||
# VM needs writable EFI vars
|
# We still need the EFI var from the make-disk-image derivation
|
||||||
if ! test -e "$NIX_EFI_VARS"; then
|
# because our "switch-to-configuration" process might
|
||||||
cp ${systemImage}/efi-vars.fd "$NIX_EFI_VARS"
|
# write into it and we want to keep this data.
|
||||||
chmod 0644 "$NIX_EFI_VARS"
|
''cp ${systemImage}/efi-vars.fd "$NIX_EFI_VARS"''
|
||||||
fi
|
else
|
||||||
''}
|
''cp ${cfg.efi.variables} "$NIX_EFI_VARS"''
|
||||||
|
}
|
||||||
|
chmod 0644 "$NIX_EFI_VARS"
|
||||||
|
fi
|
||||||
''}
|
''}
|
||||||
|
|
||||||
cd "$TMPDIR"
|
cd "$TMPDIR"
|
||||||
|
|
Loading…
Reference in a new issue