fix: UEFI boot (#291)

* fix: UEFI boot
This commit is contained in:
Kroese 2023-12-29 21:21:26 +01:00 committed by GitHub
parent f7237254c4
commit b8b958046b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 39 additions and 14 deletions

View file

@ -1,34 +1,59 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -Eeuo pipefail set -Eeuo pipefail
OVMF="/usr/share/OVMF"
# Docker environment variables # Docker environment variables
: ${BOOT_MODE:='legacy'} # Boot mode : ${BOOT_MODE:='legacy'} # Boot mode
SECURE=""
BOOT_OPTS=""
case "${BOOT_MODE,,}" in case "${BOOT_MODE,,}" in
uefi) uefi)
VARS="$OVMF/OVMF_VARS_4M.fd" ROM="OVMF_CODE_4M.fd"
[ ! -f "$VARS" ] && error "UEFI vars file ($VARS) not found!" && exit 44 VARS="OVMF_VARS_4M.fd"
[ ! -f "$STORAGE/uefi.vars" ] && cp "$VARS" "$STORAGE/uefi.vars"
BOOT_OPTS="-bios $OVMF/OVMF_CODE_4M.fd"
BOOT_OPTS="$BOOT_OPTS -drive file=$STORAGE/uefi.vars,if=pflash,format=raw"
;; ;;
secure) secure)
VARS="$OVMF/OVMF_VARS_4M.secboot.fd" ROM="OVMF_CODE_4M.secboot.fd"
[ ! -f "$VARS" ] && error "UEFI vars file ($VARS) not found!" && exit 44 VARS="OVMF_VARS_4M.secboot.fd"
[ ! -f "$STORAGE/uefi.vars" ] && cp "$VARS" "$STORAGE/uefi.vars" ;;
BOOT_OPTS="-bios $OVMF/OVMF_CODE_4M.secboot.fd" windows)
BOOT_OPTS="$BOOT_OPTS -drive file=$STORAGE/uefi.vars,if=pflash,format=raw" ROM="OVMF_CODE_4M.ms.fd"
VARS="OVMF_VARS_4M.ms.fd"
;; ;;
legacy) legacy)
BOOT_OPTS="" BOOT_OPTS=""
;; ;;
*) *)
info "Unknown boot mode '${BOOT_MODE}', defaulting to 'legacy'" info "Unknown boot mode '${BOOT_MODE}', defaulting to 'legacy'"
BOOT_OPTS="" BOOT_MODE="legacy"
;; ;;
esac esac
if [[ "${BOOT_MODE,,}" != "legacy" ]]; then
BOOT_OPTS=""
OVMF="/usr/share/OVMF"
DEST="$STORAGE/${BOOT_MODE,,}"
if [ ! -f "$DEST.rom" ]; then
[ ! -f "$OVMF/$ROM" ] && error "UEFI boot file ($OVMF/$ROM) not found!" && exit 44
cp "$OVMF/$ROM" "$DEST.rom"
fi
if [ ! -f "$DEST.vars" ]; then
[ ! -f "$OVMF/$VARS" ] && error "UEFI vars file ($OVMF/$VARS) not found!" && exit 45
cp "$OVMF/$VARS" "$DEST.vars"
fi
if [[ "${BOOT_MODE,,}" != "uefi" ]]; then
SECURE=",smm=on"
BOOT_OPTS="$BOOT_OPTS -global driver=cfi.pflash01,property=secure,value=on"
fi
BOOT_OPTS="$BOOT_OPTS -drive file=$DEST.rom,if=pflash,unit=0,format=raw,readonly=on"
BOOT_OPTS="$BOOT_OPTS -drive file=$DEST.vars,if=pflash,unit=1,format=raw"
fi
return 0 return 0

View file

@ -6,7 +6,7 @@ SERIAL_OPTS="-serial mon:stdio"
MON_OPTS="-monitor telnet:localhost:7100,server,nowait,nodelay" MON_OPTS="-monitor telnet:localhost:7100,server,nowait,nodelay"
RAM_OPTS=$(echo "-m $RAM_SIZE" | sed 's/MB/M/g;s/GB/G/g;s/TB/T/g') RAM_OPTS=$(echo "-m $RAM_SIZE" | sed 's/MB/M/g;s/GB/G/g;s/TB/T/g')
CPU_OPTS="-cpu $CPU_MODEL -smp $CPU_CORES,sockets=1,dies=1,cores=$CPU_CORES,threads=1" CPU_OPTS="-cpu $CPU_MODEL -smp $CPU_CORES,sockets=1,dies=1,cores=$CPU_CORES,threads=1"
MAC_OPTS="-machine type=q35,graphics=off,usb=off,dump-guest-core=off,hpet=off${KVM_OPTS}" MAC_OPTS="-machine type=q35${SECURE},graphics=off,usb=off,dump-guest-core=off,hpet=off${KVM_OPTS}"
DEV_OPTS="-device virtio-balloon-pci,id=balloon0,bus=pcie.0,addr=0x4" DEV_OPTS="-device virtio-balloon-pci,id=balloon0,bus=pcie.0,addr=0x4"
DEV_OPTS="$DEV_OPTS -object rng-random,id=objrng0,filename=/dev/urandom" DEV_OPTS="$DEV_OPTS -object rng-random,id=objrng0,filename=/dev/urandom"
DEV_OPTS="$DEV_OPTS -device virtio-rng-pci,rng=objrng0,id=rng0,bus=pcie.0,addr=0x1c" DEV_OPTS="$DEV_OPTS -device virtio-rng-pci,rng=objrng0,id=rng0,bus=pcie.0,addr=0x1c"