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. 108
      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
if [ ! -z "${EFI_CODE}" ] || [ ! -e "${EFI_CODE}" ]; then
case ${secureboot} in case ${secureboot} in
on) on)
if [ -e "/usr/share/OVMF/OVMF_CODE_4M.secboot.fd" ]; then ovmfs=("/usr/share/OVMF/OVMF_CODE_4M.secboot.fd","/usr/share/OVMF/OVMF_VARS_4M.fd" \
EFI_CODE="/usr/share/OVMF/OVMF_CODE_4M.secboot.fd" "/usr/share/edk2/ovmf/OVMF_CODE.secboot.fd","/usr/share/edk2/ovmf/OVMF_VARS.fd" \
efi_vars "/usr/share/OVMF/OVMF_VARS_4M.fd" "${EFI_VARS}" "/usr/share/OVMF/x64/OVMF_CODE.secboot.fd","/usr/share/OVMF/x64/OVMF_VARS.fd" \
elif [ -e "/usr/share/edk2/ovmf/OVMF_CODE.secboot.fd" ]; then "/usr/share/edk2-ovmf/OVMF_CODE.secboot.fd","/usr/share/edk2-ovmf/OVMF_VARS.fd" \
EFI_CODE="/usr/share/edk2/ovmf/OVMF_CODE.secboot.fd" "/usr/share/qemu/ovmf-x86_64-smm-ms-code.bin","/usr/share/qemu/ovmf-x86_64-smm-ms-vars.bin" \
efi_vars "/usr/share/edk2/ovmf/OVMF_VARS.fd" "${EFI_VARS}" "/usr/share/qemu/edk2-x86_64-secure-code.fd","/usr/share/qemu/edk2-x86_64-code.fd" \
elif [ -e "/usr/share/OVMF/x64/OVMF_CODE.secboot.fd" ]; then "/usr/share/edk2-ovmf/x64/OVMF_CODE.secboot.fd","/usr/share/edk2-ovmf/x64/OVMF_VARS.fd"
EFI_CODE="/usr/share/OVMF/x64/OVMF_CODE.secboot.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}"
elif [ -e "/usr/share/qemu/ovmf-x86_64-smm-ms-code.bin" ]; then
EFI_CODE="/usr/share/qemu/ovmf-x86_64-smm-ms-code.bin"
efi_vars "/usr/share/qemu/ovmf-x86_64-smm-ms-vars.bin" "${EFI_VARS}"
elif [ -e "/usr/share/qemu/edk2-x86_64-secure-code.fd" ]; then
EFI_CODE="/usr/share/qemu/edk2-x86_64-secure-code.fd"
efi_vars "/usr/share/qemu/edk2-x86_64-code.fd" "${EFI_VARS}"
# Solus new place to hide
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}"
else
echo "ERROR! SecureBoot was requested but no SecureBoot capable firmware was found."
echo " Please install OVMF firmware."
exit 1
fi
;; ;;
*) *)
if [ -e "/usr/share/OVMF/OVMF_CODE_4M.fd" ]; then ovmfs=("/usr/share/OVMF/OVMF_CODE_4M.fd","/usr/share/OVMF/OVMF_VARS_4M.fd" \
EFI_CODE="/usr/share/OVMF/OVMF_CODE_4M.fd" "/usr/share/edk2/ovmf/OVMF_CODE.fd","/usr/share/edk2/ovmf/OVMF_VARS.fd" \
efi_vars "/usr/share/OVMF/OVMF_VARS_4M.fd" "${EFI_VARS}" "/usr/share/OVMF/OVMF_CODE.fd","/usr/share/OVMF/OVMF_VARS.fd" \
elif [ -e "/usr/share/edk2/ovmf/OVMF_CODE.fd" ]; then "/usr/share/OVMF/x64/OVMF_CODE.fd","/usr/share/OVMF/x64/OVMF_VARS.fd" \
EFI_CODE="/usr/share/edk2/ovmf/OVMF_CODE.fd" "/usr/share/edk2-ovmf/OVMF_CODE.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-4m-code.bin","/usr/share/qemu/ovmf-x86_64-4m-vars.bin" \
elif [ -e "/usr/share/OVMF/OVMF_CODE.fd" ]; then "/usr/share/qemu/edk2-x86_64-code.fd","/usr/share/qemu/edk2-x86_64-code.fd" \
EFI_CODE="/usr/share/OVMF/OVMF_CODE.fd" "/usr/share/edk2-ovmf/x64/OVMF_CODE.fd","/usr/share/edk2-ovmf/x64/OVMF_VARS.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" esac
efi_vars "/usr/share/OVMF/x64/OVMF_VARS.fd" "${EFI_VARS}" # Attempt each EFI_CODE file one by one, selecting the corresponding code and vars
elif [ -e "/usr/share/edk2-ovmf/OVMF_CODE.fd" ]; then # when an existing file is found.
EFI_CODE="/usr/share/edk2-ovmf/OVMF_CODE.fd" _IFS=$IFS
efi_vars "/usr/share/edk2-ovmf/OVMF_VARS.fd" "${EFI_VARS}" IFS=","
elif [ -e "/usr/share/qemu/ovmf-x86_64-4m-code.bin" ]; then for f in "${ovmfs[@]}"; do
EFI_CODE="/usr/share/qemu/ovmf-x86_64-4m-code.bin" set -- $f;
efi_vars "/usr/share/qemu/ovmf-x86_64-4m-vars.bin" "${EFI_VARS}" if [ -e "${1}" ]; then
elif [ -e "/usr/share/qemu/edk2-x86_64-code.fd" ]; then EFI_CODE="${1}"
EFI_CODE="/usr/share/qemu/edk2-x86_64-code.fd" EFI_EXTRA_VARS="${2}"
efi_vars "/usr/share/qemu/edk2-x86_64-code.fd" "${EFI_VARS}" fi
# Solus done
elif [ -e "/usr/share/edk2-ovmf/x64/OVMF_CODE.fd" ]; then IFS=$_IFS
EFI_CODE="/usr/share/edk2-ovmf/x64/OVMF_CODE.fd" fi
efi_vars "/usr/share/edk2-ovmf/x64/OVMF_VARS.fd" "${EFI_VARS}" 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 else
echo "ERROR! EFI boot requested but no EFI firmware found." echo "ERROR! EFI boot requested but no EFI firmware found."
fi
echo " Please install OVMF firmware." echo " Please install OVMF firmware."
exit 1 exit 1
fi fi
;; if [ ! -z "${EFI_EXTRA_VARS}" ]; then
esac 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