4325590686
Includes: init (PID 1), hiperiso-lib.sh, qemu_launch.sh, hw_collect.sh, kvm_check.sh, fallback_boot.sh, log_flush.sh, conf_replace.sh, make_floppy.sh. 13-phase boot timing, 18 QEMU HMP commands, network pcap capture.
95 lines
3.5 KiB
Bash
Executable File
95 lines
3.5 KiB
Bash
Executable File
#!/bin/sh
|
|
# ============================================================
|
|
# fallback_boot.sh -- Structured failure capture when KVM absent
|
|
#
|
|
# Called by init when hardware virtualization is unavailable
|
|
# and hiperiso_fallback is not "1". Writes structured session
|
|
# metadata (session.json, status.json, FAILURE.txt) so the boot
|
|
# attempt is captured even though no QEMU guest was launched,
|
|
# then warns the user and offers to reboot.
|
|
# ============================================================
|
|
|
|
. /hiperiso-lib.sh
|
|
|
|
# ── Capture structured failure data ───────────────────────────
|
|
if [ -n "${LOG_DIR:-}" ] && [ -d "$LOG_DIR" ]; then
|
|
hiperiso_log "FALLBACK: KVM unavailable -- capturing failure session"
|
|
|
|
hiperiso_write_session_meta "failed"
|
|
hiperiso_write_status "failed" "fallback_no_kvm"
|
|
|
|
{
|
|
printf '========================================\n'
|
|
printf ' hiperiso FAILURE: KVM Unavailable\n'
|
|
printf '========================================\n\n'
|
|
printf 'ISO: %s\n' "${HIPERISO_ISO_PATH:-unknown}"
|
|
printf 'Session: %s\n' "$(hiperiso_session_id)"
|
|
printf 'Timestamp: %s\n' "$(hiperiso_utc_iso)"
|
|
printf 'Reason: KVM not detected (VT-x/AMD-V unavailable)\n\n'
|
|
printf 'No QEMU guest was launched. No serial.log or\n'
|
|
printf 'trace.bin was produced for this session.\n'
|
|
printf '========================================\n'
|
|
} > "${LOG_DIR}/FAILURE.txt"
|
|
sync "${LOG_DIR}/FAILURE.txt" 2>/dev/null || sync
|
|
|
|
hiperiso_run_report
|
|
# Finalize so the failed session gets a canonical manifest and an
|
|
# entry in the global JSONL index (failed sessions are indexed too).
|
|
hiperiso_finalize_session "failed" "" "fallback_no_kvm"
|
|
fi
|
|
|
|
# Clear the terminal
|
|
printf '\033[2J\033[H'
|
|
|
|
printf '\n'
|
|
printf '======================================================\n'
|
|
printf ' WARNING: Hardware Virtualization (KVM) Unavailable \n'
|
|
printf '======================================================\n'
|
|
printf '\n'
|
|
printf ' hiperiso requires KVM (Intel VT-x or AMD-V) to run\n'
|
|
printf ' an ISO as a guest virtual machine.\n'
|
|
printf '\n'
|
|
printf ' KVM was NOT detected on this system, so this ISO\n'
|
|
printf ' cannot be booted in hypervisor mode.\n'
|
|
printf '\n'
|
|
printf ' Possible reasons:\n'
|
|
printf ' 1. The CPU does not support VT-x / AMD-V\n'
|
|
printf ' 2. Virtualization is disabled in BIOS/UEFI\n'
|
|
printf ' 3. KVM kernel modules failed to load\n'
|
|
printf '\n'
|
|
printf ' How to proceed:\n'
|
|
printf ' - Reboot, enable VT-x/AMD-V in BIOS/UEFI, retry\n'
|
|
printf ' - Use a direct-boot tool (e.g. Rufus, balenaEtcher) for this ISO\n'
|
|
printf ' - Reboot with hiperiso_fallback=1 on the kernel\n'
|
|
printf ' command line to force TCG emulation (very slow)\n'
|
|
printf '\n'
|
|
if [ -n "${LOG_DIR:-}" ] && [ -d "$LOG_DIR" ]; then
|
|
printf ' Failure session captured: %s\n' "$LOG_DIR"
|
|
printf '\n'
|
|
fi
|
|
printf '======================================================\n'
|
|
printf '\n'
|
|
|
|
printf ' Press ENTER to reboot to the boot menu,\n'
|
|
printf ' or type "shell" for a recovery shell: '
|
|
|
|
read -r _choice
|
|
case "$_choice" in
|
|
shell|sh)
|
|
printf '\nDropping to recovery shell...\n'
|
|
exec /bin/sh
|
|
;;
|
|
*)
|
|
printf '\nRebooting...\n'
|
|
sync
|
|
if command -v reboot >/dev/null 2>&1; then
|
|
reboot -f
|
|
else
|
|
# Fallback: magic SysRq
|
|
printf 'b' > /proc/sysrq-trigger 2>/dev/null
|
|
fi
|
|
# Should not reach here
|
|
exit 0
|
|
;;
|
|
esac
|