#!/usr/bin/env python3 """Disposable local Ubuntu validation VM helper; no host package installation.""" import os from pathlib import Path import os,sys,subprocess,shutil,io,json r=Path(os.environ.get('DOCVIEW_VM_WORK', 'build-ubuntu-vm')).resolve() sys.path.insert(0,str(r/'tools/python')) import pycdlib key=r/'private/id_ed25519' if not key.exists():subprocess.run(['ssh-keygen','-q','-t','ed25519','-N','','-C','docview-ubuntu-vm-local','-f',str(key)],check=True) os.chmod(key,0o600) public=key.with_suffix('.pub').read_text().strip() userdata='#cloud-config\nhostname: docview-ubuntu2404\nmanage_etc_hosts: true\nssh_pwauth: false\ndisable_root: true\nssh_quiet_keygen: true\nno_ssh_fingerprints: true\nssh_publish_hostkeys:\n enabled: false\nusers:\n - name: docview\n groups: [adm, sudo]\n shell: /bin/bash\n lock_passwd: true\n sudo: ALL=(ALL) NOPASSWD:ALL\n ssh_authorized_keys:\n - '+public+'\n' userdata += '\nssh:\n emit_keys_to_console: false\nruncmd:\n - [sh, -c, \"systemctl restart ssh.service; echo DOCVIEW_SSH_DIAG; ip -4 addr show; ss -ltn; systemctl --no-pager status ssh.service; journalctl -u ssh.service -n 20 --no-pager\"]\n' metadata='instance-id: docview-ubuntu2404-20260919b\nlocal-hostname: docview-ubuntu2404\n' iso=pycdlib.PyCdlib();iso.new(interchange_level=3,joliet=3,rock_ridge='1.09',vol_ident='CIDATA') for data,short,long in [(userdata,'USER_DAT.;1','user-data'),(metadata,'META_DAT.;1','meta-data')]: b=data.encode();iso.add_fp(io.BytesIO(b),len(b),iso_path='/'+short,rr_name=long,joliet_path='/'+long) iso.write(str(r/'private/seed.iso'));iso.close();os.chmod(r/'private/seed.iso',0o600) qimg=str(r/'tools/usr/bin/qemu-img') subprocess.run([qimg,'--version'],check=True) base=r/'downloads/noble-server-cloudimg-amd64.img';base.chmod(0o444) overlay=r/'guest.qcow2' if not overlay.exists():subprocess.run([qimg,'create','-f','qcow2','-F','qcow2','-b',str(base),str(overlay),'24G'],check=True) subprocess.run([qimg,'check',str(overlay)],check=True) vars=r/'OVMF_VARS.4m.fd' if not vars.exists():shutil.copyfile('/usr/share/edk2-ovmf/x64/OVMF_VARS.4m.fd',vars) print('Created dedicated SSH key, seed ISO and 24 GiB qcow2 overlay; no key contents logged.')