Files
eco_os/isotest/run-test.sh
2026-01-09 09:41:47 +00:00

81 lines
2.3 KiB
Bash
Executable File

#!/bin/bash
set -e
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_ROOT="$SCRIPT_DIR/.."
VM_DIR="$PROJECT_ROOT/.nogit/vm"
ISO_PATH="$PROJECT_ROOT/.nogit/iso/ecoos.iso"
DISK_PATH="$VM_DIR/test-disk.qcow2"
MONITOR_SOCK="$VM_DIR/qemu-monitor.sock"
SERIAL_SOCK="$VM_DIR/serial.sock"
SERIAL_LOG="$VM_DIR/serial.log"
PID_FILE="$VM_DIR/qemu.pid"
# Create VM directory if not exists
mkdir -p "$VM_DIR"
# Check if ISO exists
if [ ! -f "$ISO_PATH" ]; then
echo "ERROR: ISO not found at $ISO_PATH"
echo "Run 'pnpm run build' first to create the ISO"
exit 1
fi
# Create test disk if not exists
if [ ! -f "$DISK_PATH" ]; then
echo "Creating test disk (20GB)..."
qemu-img create -f qcow2 "$DISK_PATH" 20G
fi
# Check if already running
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
if kill -0 "$PID" 2>/dev/null; then
echo "QEMU already running (PID: $PID)"
echo "Run 'pnpm run test:stop' to stop it first"
exit 1
fi
fi
echo "Starting QEMU with EcoOS ISO..."
# Check if KVM is available
KVM_OPTS=""
if [ -e /dev/kvm ] && [ -r /dev/kvm ] && [ -w /dev/kvm ]; then
KVM_OPTS="-enable-kvm -cpu host"
echo "Using KVM acceleration"
else
echo "KVM not available, using software emulation (slower)"
fi
# Start QEMU with VirtIO-GPU (VirGL OpenGL acceleration) and serial console
> "$SERIAL_LOG" # Clear old log
qemu-system-x86_64 \
$KVM_OPTS \
-m 4G \
-smp 4 \
-bios /usr/share/qemu/OVMF.fd \
-drive file="$ISO_PATH",media=cdrom \
-drive file="$DISK_PATH",format=qcow2,if=virtio \
-device virtio-vga \
-display none \
-spice port=5930,disable-ticketing=on \
-serial unix:"$SERIAL_SOCK",server,nowait \
-monitor unix:"$MONITOR_SOCK",server,nowait \
-nic user,model=virtio-net-pci,hostfwd=tcp::3006-:3006,hostfwd=tcp::2222-:22 \
-pidfile "$PID_FILE" &
echo ""
sleep 1
echo "=== EcoOS Test VM Started ==="
echo "PID: $(cat $PID_FILE 2>/dev/null || echo 'running')"
echo "SPICE: spicy -h localhost -p 5930"
echo "Serial Log: $SERIAL_LOG"
echo "Management UI: http://localhost:3006"
echo ""
echo "Commands:"
echo " pnpm run test:screenshot - Take screenshot"
echo " pnpm run test:stop - Stop VM"
echo " tail -f $SERIAL_LOG - Watch serial console"
echo " socat - UNIX-CONNECT:$SERIAL_SOCK - Interactive serial"