30 lines
1.4 KiB
Bash
Executable File
30 lines
1.4 KiB
Bash
Executable File
#!/bin/bash
|
|
# Boots the built image in a window, to try it as a team would. Changes made
|
|
# in this window are discarded when it closes (snapshot mode).
|
|
#
|
|
# ./run_vm.sh # build/acpc2026.qcow2
|
|
# ./run_vm.sh path/to/image.img # another image
|
|
# DISPLAY_OPT="-display none -vnc 127.0.0.1:7" ./run_vm.sh # without a window
|
|
cd "$(dirname "$0")"
|
|
IMG=${1:-build/acpc2026.qcow2}
|
|
[ -f "$IMG" ] || { echo "Image not found: $IMG (run ./build.sh first)" >&2; exit 1; }
|
|
FORMAT=$(qemu-img info --output=json "$IMG" | python3 -I -c 'import json, sys; print(json.load(sys.stdin)["format"])')
|
|
|
|
for dir in /usr/share/edk2/x64 /usr/share/OVMF /usr/share/edk2/ovmf; do
|
|
for code in OVMF_CODE.4m.fd OVMF_CODE_4M.fd OVMF_CODE.fd; do
|
|
[ -f "$dir/$code" ] && { OVMF_CODE=$dir/$code; OVMF_VARS=$dir/${code/CODE/VARS}; break 2; }
|
|
done
|
|
done
|
|
[ -n "${OVMF_CODE:-}" ] || { echo "UEFI firmware (OVMF) not found" >&2; exit 1; }
|
|
VARS=$(mktemp)
|
|
cp "$OVMF_VARS" "$VARS"
|
|
trap 'rm -f "$VARS"' EXIT
|
|
|
|
# shellcheck disable=SC2086
|
|
qemu-system-x86_64 -name acpc2026-try -machine q35,accel=kvm -cpu host -m 4096 -smp 4 \
|
|
-drive if=pflash,format=raw,readonly=on,file="$OVMF_CODE" \
|
|
-drive if=pflash,format=raw,file="$VARS" \
|
|
-drive file="$IMG",format="$FORMAT",if=virtio,snapshot=on \
|
|
-netdev user,id=net0 -device virtio-net-pci,netdev=net0 \
|
|
-vga virtio ${DISPLAY_OPT:--display gtk} ${QEMU_EXTRA:-}
|