Allow overriding some VM arguments via env vars (#519)

* allow overriding MACHINE_TYPE,MAC_DISK_DEV,NET_DEVICE,SMM via env vars

* allow overriding EFI_CODE,EFI_EXTRA_VARS
pull/534/head
3nprob 2 years ago committed by GitHub
parent 1b1bd84e6a
commit 8e8c65eac6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 124
      quickemu

@ -212,7 +212,7 @@ function vm_boot() {
local DISK_USED="" local DISK_USED=""
local DISPLAY_DEVICE="" local DISPLAY_DEVICE=""
local DISPLAY_RENDER="" local DISPLAY_RENDER=""
local EFI_CODE="" local EFI_CODE="${EFI_CODE}"
local EFI_VARS="" local EFI_VARS=""
local GUEST_CPU_CORES="" local GUEST_CPU_CORES=""
local GUEST_CPU_LOGICAL_CORES="" local GUEST_CPU_LOGICAL_CORES=""
@ -226,13 +226,13 @@ function vm_boot() {
local KERNEL_NODE="" local KERNEL_NODE=""
local KERNEL_VER="?" local KERNEL_VER="?"
local LSB_DESCRIPTION="Unknown OS" local LSB_DESCRIPTION="Unknown OS"
local MACHINE_TYPE="q35" local MACHINE_TYPE="${MACHINE_TYPE:-q35}"
local MAC_BOOTLOADER="" local MAC_BOOTLOADER=""
local MAC_MISSING="" local MAC_MISSING=""
local MAC_DISK_DEV="ide-hd,bus=ahci.2" local MAC_DISK_DEV="${MAC_DISK_DEV:-ide-hd,bus=ahci.2}"
local NET_DEVICE="virtio-net" local NET_DEVICE="${NET_DEVICE:-virtio-net}"
local OSK="" local OSK=""
local SMM="off" local SMM="${SMM:-off}"
local USB_HOST_PASSTHROUGH_CONTROLLER="qemu-xhci" local USB_HOST_PASSTHROUGH_CONTROLLER="qemu-xhci"
local VIDEO="" local VIDEO=""
@ -379,69 +379,59 @@ function vm_boot() {
# does not support SMM. # does not support SMM.
# https://bugzilla.redhat.com/show_bug.cgi?id=1929357#c5 # https://bugzilla.redhat.com/show_bug.cgi?id=1929357#c5
case ${secureboot} in if [ ! -z "${EFI_CODE}" ] || [ ! -e "${EFI_CODE}" ]; then
on) case ${secureboot} in
if [ -e "/usr/share/OVMF/OVMF_CODE_4M.secboot.fd" ]; then on)
EFI_CODE="/usr/share/OVMF/OVMF_CODE_4M.secboot.fd" ovmfs=("/usr/share/OVMF/OVMF_CODE_4M.secboot.fd","/usr/share/OVMF/OVMF_VARS_4M.fd" \
efi_vars "/usr/share/OVMF/OVMF_VARS_4M.fd" "${EFI_VARS}" "/usr/share/edk2/ovmf/OVMF_CODE.secboot.fd","/usr/share/edk2/ovmf/OVMF_VARS.fd" \
elif [ -e "/usr/share/edk2/ovmf/OVMF_CODE.secboot.fd" ]; then "/usr/share/OVMF/x64/OVMF_CODE.secboot.fd","/usr/share/OVMF/x64/OVMF_VARS.fd" \
EFI_CODE="/usr/share/edk2/ovmf/OVMF_CODE.secboot.fd" "/usr/share/edk2-ovmf/OVMF_CODE.secboot.fd","/usr/share/edk2-ovmf/OVMF_VARS.fd" \
efi_vars "/usr/share/edk2/ovmf/OVMF_VARS.fd" "${EFI_VARS}" "/usr/share/qemu/ovmf-x86_64-smm-ms-code.bin","/usr/share/qemu/ovmf-x86_64-smm-ms-vars.bin" \
elif [ -e "/usr/share/OVMF/x64/OVMF_CODE.secboot.fd" ]; then "/usr/share/qemu/edk2-x86_64-secure-code.fd","/usr/share/qemu/edk2-x86_64-code.fd" \
EFI_CODE="/usr/share/OVMF/x64/OVMF_CODE.secboot.fd" "/usr/share/edk2-ovmf/x64/OVMF_CODE.secboot.fd","/usr/share/edk2-ovmf/x64/OVMF_VARS.fd"
efi_vars "/usr/share/OVMF/x64/OVMF_VARS.fd" "${EFI_VARS}" )
elif [ -e "/usr/share/edk2-ovmf/OVMF_CODE.secboot.fd" ]; then ;;
EFI_CODE="/usr/share/edk2-ovmf/OVMF_CODE.secboot.fd" *)
efi_vars "/usr/share/edk2-ovmf/OVMF_VARS.fd" "${EFI_VARS}" ovmfs=("/usr/share/OVMF/OVMF_CODE_4M.fd","/usr/share/OVMF/OVMF_VARS_4M.fd" \
elif [ -e "/usr/share/qemu/ovmf-x86_64-smm-ms-code.bin" ]; then "/usr/share/edk2/ovmf/OVMF_CODE.fd","/usr/share/edk2/ovmf/OVMF_VARS.fd" \
EFI_CODE="/usr/share/qemu/ovmf-x86_64-smm-ms-code.bin" "/usr/share/OVMF/OVMF_CODE.fd","/usr/share/OVMF/OVMF_VARS.fd" \
efi_vars "/usr/share/qemu/ovmf-x86_64-smm-ms-vars.bin" "${EFI_VARS}" "/usr/share/OVMF/x64/OVMF_CODE.fd","/usr/share/OVMF/x64/OVMF_VARS.fd" \
elif [ -e "/usr/share/qemu/edk2-x86_64-secure-code.fd" ]; then "/usr/share/edk2-ovmf/OVMF_CODE.fd","/usr/share/edk2-ovmf/OVMF_VARS.fd" \
EFI_CODE="/usr/share/qemu/edk2-x86_64-secure-code.fd" "/usr/share/qemu/ovmf-x86_64-4m-code.bin","/usr/share/qemu/ovmf-x86_64-4m-vars.bin" \
efi_vars "/usr/share/qemu/edk2-x86_64-code.fd" "${EFI_VARS}" "/usr/share/qemu/edk2-x86_64-code.fd","/usr/share/qemu/edk2-x86_64-code.fd" \
# Solus new place to hide "/usr/share/edk2-ovmf/x64/OVMF_CODE.fd","/usr/share/edk2-ovmf/x64/OVMF_VARS.fd"
elif [ -e "/usr/share/edk2-ovmf/x64/OVMF_CODE.secboot.fd" ]; then )
EFI_CODE="/usr/share/edk2-ovmf/x64/OVMF_CODE.secboot.fd" ;;
efi_vars "/usr/share/edk2-ovmf/x64/OVMF_VARS.fd" "${EFI_VARS}" esac
else # Attempt each EFI_CODE file one by one, selecting the corresponding code and vars
echo "ERROR! SecureBoot was requested but no SecureBoot capable firmware was found." # when an existing file is found.
echo " Please install OVMF firmware." _IFS=$IFS
exit 1 IFS=","
fi for f in "${ovmfs[@]}"; do
;; set -- $f;
*) if [ -e "${1}" ]; then
if [ -e "/usr/share/OVMF/OVMF_CODE_4M.fd" ]; then EFI_CODE="${1}"
EFI_CODE="/usr/share/OVMF/OVMF_CODE_4M.fd" EFI_EXTRA_VARS="${2}"
efi_vars "/usr/share/OVMF/OVMF_VARS_4M.fd" "${EFI_VARS}"
elif [ -e "/usr/share/edk2/ovmf/OVMF_CODE.fd" ]; then
EFI_CODE="/usr/share/edk2/ovmf/OVMF_CODE.fd"
efi_vars "/usr/share/edk2/ovmf/OVMF_VARS.fd" "${EFI_VARS}"
elif [ -e "/usr/share/OVMF/OVMF_CODE.fd" ]; then
EFI_CODE="/usr/share/OVMF/OVMF_CODE.fd"
efi_vars "/usr/share/OVMF/OVMF_VARS.fd" "${EFI_VARS}"
elif [ -e "/usr/share/OVMF/x64/OVMF_CODE.fd" ]; then
EFI_CODE="/usr/share/OVMF/x64/OVMF_CODE.fd"
efi_vars "/usr/share/OVMF/x64/OVMF_VARS.fd" "${EFI_VARS}"
elif [ -e "/usr/share/edk2-ovmf/OVMF_CODE.fd" ]; then
EFI_CODE="/usr/share/edk2-ovmf/OVMF_CODE.fd"
efi_vars "/usr/share/edk2-ovmf/OVMF_VARS.fd" "${EFI_VARS}"
elif [ -e "/usr/share/qemu/ovmf-x86_64-4m-code.bin" ]; then
EFI_CODE="/usr/share/qemu/ovmf-x86_64-4m-code.bin"
efi_vars "/usr/share/qemu/ovmf-x86_64-4m-vars.bin" "${EFI_VARS}"
elif [ -e "/usr/share/qemu/edk2-x86_64-code.fd" ]; then
EFI_CODE="/usr/share/qemu/edk2-x86_64-code.fd"
efi_vars "/usr/share/qemu/edk2-x86_64-code.fd" "${EFI_VARS}"
# Solus
elif [ -e "/usr/share/edk2-ovmf/x64/OVMF_CODE.fd" ]; then
EFI_CODE="/usr/share/edk2-ovmf/x64/OVMF_CODE.fd"
efi_vars "/usr/share/edk2-ovmf/x64/OVMF_VARS.fd" "${EFI_VARS}"
else
echo "ERROR! EFI boot requested but no EFI firmware found."
echo " Please install OVMF firmware."
exit 1
fi fi
;; done
esac IFS=$_IFS
fi
if [ -z "${EFI_CODE}" ] || [ ! -e "${EFI_CODE}" ]; then
if [ "$secureboot" == "on" ]; then
echo "ERROR! SecureBoot was requested but no SecureBoot capable firmware was found."
else
echo "ERROR! EFI boot requested but no EFI firmware found."
fi
echo " Please install OVMF firmware."
exit 1
fi
if [ ! -z "${EFI_EXTRA_VARS}" ]; then
if [ ! -e "${EFI_EXTRA_VARS}" ]; then
echo " - EFI: ERROR! EFI_EXTRA_VARS file ${EFI_EXTRA_VARS} does not exist."
exit 1
fi
efi_vars "${EFI_EXTRA_VARS}" "${EFI_VARS}"
fi
# Make sure EFI_VARS references an actual, writeable, file # Make sure EFI_VARS references an actual, writeable, file
if [ ! -f "${EFI_VARS}" ] || [ ! -w "${EFI_VARS}" ]; then if [ ! -f "${EFI_VARS}" ] || [ ! -w "${EFI_VARS}" ]; then

Loading…
Cancel
Save