v0.0.1 - Reorganize ISO build tree, add docs/plans/scripts, and stage Phase 2 Slice B+C service integration artifacts
75 lines
2.4 KiB
Bash
Executable File
75 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
ISO_PATH="${ISO_PATH:-$REPO_ROOT/iso/live-image-amd64.hybrid.iso}"
|
|
HTTPS_PORT="${HTTPS_PORT:-2443}"
|
|
RELAY_PORT="${RELAY_PORT:-28888}"
|
|
CPUS="${CPUS:-2}"
|
|
MEM_MB="${MEM_MB:-2048}"
|
|
|
|
USE_UEFI="${USE_UEFI:-0}"
|
|
HEADLESS="${HEADLESS:-0}"
|
|
|
|
if [[ ! -f "$ISO_PATH" ]]; then
|
|
echo "[run-iso] missing ISO: $ISO_PATH" >&2
|
|
echo "[run-iso] build first: ./build.sh --clean" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if ! command -v qemu-system-x86_64 >/dev/null 2>&1; then
|
|
echo "[run-iso] missing qemu-system-x86_64. Install: sudo apt-get install -y qemu-system-x86 ovmf" >&2
|
|
exit 1
|
|
fi
|
|
|
|
QEMU_FW_ARGS=()
|
|
if [[ "$USE_UEFI" == "1" ]]; then
|
|
if [[ -f /usr/share/ovmf/OVMF.fd ]]; then
|
|
# Monolithic OVMF image (works with -bios)
|
|
QEMU_FW_ARGS=(-bios /usr/share/ovmf/OVMF.fd)
|
|
elif [[ -f /usr/share/OVMF/OVMF_CODE_4M.fd && -f /usr/share/OVMF/OVMF_VARS_4M.fd ]]; then
|
|
# Split OVMF image (CODE + writable VARS)
|
|
VARS_TMP="${TMPDIR:-/tmp}/n-os-tr-ovmf-vars-$$.fd"
|
|
cp /usr/share/OVMF/OVMF_VARS_4M.fd "$VARS_TMP"
|
|
QEMU_FW_ARGS=(
|
|
-drive if=pflash,format=raw,readonly=on,file=/usr/share/OVMF/OVMF_CODE_4M.fd
|
|
-drive if=pflash,format=raw,file="$VARS_TMP"
|
|
)
|
|
else
|
|
echo "[run-iso] no usable OVMF firmware found" >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
ACCEL_ARGS=()
|
|
if [[ -r /dev/kvm && -w /dev/kvm ]]; then
|
|
ACCEL_ARGS=(-enable-kvm -machine q35,accel=kvm -cpu host)
|
|
else
|
|
echo "[run-iso] /dev/kvm not accessible; using TCG emulation" >&2
|
|
ACCEL_ARGS=(-machine q35,accel=tcg -cpu max)
|
|
fi
|
|
|
|
echo "[run-iso] booting: $ISO_PATH"
|
|
echo "[run-iso] firmware mode: $([[ "$USE_UEFI" == "1" ]] && echo uefi || echo bios)"
|
|
echo "[run-iso] host forwards: https://127.0.0.1:${HTTPS_PORT} -> guest:443, tcp://127.0.0.1:${RELAY_PORT} -> guest:8888"
|
|
|
|
EXTRA_DISPLAY_ARGS=()
|
|
if [[ "$HEADLESS" == "1" ]]; then
|
|
echo "[run-iso] mode: headless serial (Ctrl-a x to quit, Ctrl-a c monitor)"
|
|
EXTRA_DISPLAY_ARGS=(-nographic -serial mon:stdio)
|
|
else
|
|
echo "[run-iso] mode: graphical window"
|
|
EXTRA_DISPLAY_ARGS=()
|
|
fi
|
|
|
|
exec qemu-system-x86_64 \
|
|
"${ACCEL_ARGS[@]}" \
|
|
"${QEMU_FW_ARGS[@]}" \
|
|
-boot order=d,menu=off \
|
|
-smp "$CPUS" \
|
|
-m "$MEM_MB" \
|
|
-drive file="$ISO_PATH",format=raw,if=ide,media=cdrom,readonly=on \
|
|
-netdev user,id=n0,hostfwd=tcp::${HTTPS_PORT}-:443,hostfwd=tcp::${RELAY_PORT}-:8888 \
|
|
-device virtio-net-pci,netdev=n0 \
|
|
"${EXTRA_DISPLAY_ARGS[@]}"
|