|
|
#!/bin/bash |
|
|
set -e |
|
|
|
|
|
DISK="/opt/qemu/alpine.raw" |
|
|
SEED="/opt/qemu/seed.iso" |
|
|
|
|
|
RAM="8G" |
|
|
CORES=4 |
|
|
|
|
|
echo "Starting VM (Q35, 4 cores, CPU max, cache=unsafe)..." |
|
|
qemu-system-x86_64 \ |
|
|
-smp $CORES,sockets=1,cores=$CORES \ |
|
|
-cpu max \ |
|
|
-m "$RAM" \ |
|
|
-drive file="$DISK",format=raw,if=virtio,cache=unsafe,aio=threads,discard=unmap \ |
|
|
-drive file="$SEED",format=raw,if=virtio,cache=unsafe \ |
|
|
-netdev user,id=net0,hostfwd=tcp::2222-:22 \ |
|
|
-device virtio-net,netdev=net0 \ |
|
|
-vga virtio \ |
|
|
-display vnc=:0 \ |
|
|
-daemonize \ |
|
|
-machine pc-q35-7.2,accel=tcg \ |
|
|
-rtc base=localtime,clock=host \ |
|
|
-no-shutdown \ |
|
|
-no-reboot |
|
|
|
|
|
|
|
|
websockify --web=/novnc 7860 localhost:5900 & |
|
|
|
|
|
echo "================================================" |
|
|
echo " π₯οΈ VNC: http://localhost:7860/vnc.html" |
|
|
echo " π SSH: ssh alpine@localhost -p 2222" |
|
|
echo " π§Ύ Login: alpine / root" |
|
|
echo "================================================" |
|
|
|
|
|
|
|
|
for i in {1..30}; do |
|
|
nc -z localhost 2222 && echo "β
VM ready!" && break |
|
|
echo "β³ Waiting SSH..." |
|
|
sleep 2 |
|
|
done |
|
|
|
|
|
wait |
|
|
|