Files
2026-09-21 13:41:40 +09:00

26 lines
1.5 KiB
Python

#!/usr/bin/env python3
"""Disposable local Ubuntu validation VM helper; no host package installation."""
import os
from pathlib import Path
import subprocess,json,socket
r=Path(os.environ.get('DOCVIEW_VM_WORK', 'build-ubuntu-vm')).resolve()
with socket.socket() as port_probe:
port_probe.bind(('127.0.0.1',22224))
cmd=['qemu-system-x86_64','-name','docview-ubuntu2404-validation',
'-machine','q35,accel=kvm','-cpu','host','-smp','4','-m','8192',
'-display','none','-monitor','none','-serial','file:'+str(r/'private/serial.log'),
'-pidfile',str(r/'qemu.pid'),'-qmp','unix:'+str(r/'qmp.sock')+',server=on,wait=off',
'-drive','if=pflash,format=raw,readonly=on,file=/usr/share/edk2-ovmf/x64/OVMF_CODE.4m.fd',
'-drive','if=pflash,format=raw,file='+str(r/'OVMF_VARS.4m.fd'),
'-drive','if=virtio,format=qcow2,file='+str(r/'guest.qcow2'),
'-drive','if=virtio,format=raw,readonly=on,file='+str(r/'private/seed.iso'),
'-netdev','user,id=net0,hostfwd=tcp:127.0.0.1:22224-:22',
'-device','virtio-net-pci,netdev=net0','-device','virtio-rng-pci',
'-sandbox','on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny']
(r/'metadata/qemu-active-command.json').write_text(json.dumps(cmd,indent=2)+'\n')
print('Running dedicated Ubuntu guest; 4 vCPU / 8 GiB / 24 GiB / SSH 127.0.0.1:22224',flush=True)
with (r/'logs/qemu-runtime.txt').open('ab') as log:
p=subprocess.run(cmd,stdout=log,stderr=subprocess.STDOUT)
print('QEMU exit',p.returncode,flush=True)
raise SystemExit(p.returncode)