#!/usr/bin/env python3 """Disposable local Ubuntu validation VM helper; no host package installation.""" import os from pathlib import Path import subprocess,json,time r=Path(os.environ.get('DOCVIEW_VM_WORK', 'build-ubuntu-vm')).resolve() ssh=['ssh','-i',str(r/'private/id_ed25519'),'-p','22224','-o','IdentitiesOnly=yes','-o','BatchMode=yes','-o','PasswordAuthentication=no','-o','StrictHostKeyChecking=accept-new','-o','UserKnownHostsFile='+str(r/'private/known_hosts'),'-o','ConnectTimeout=3','docview@127.0.0.1'] probe='import subprocess,json,pathlib,ctypes,platform,os\nlibc=ctypes.CDLL(None,use_errno=True);abi=libc.syscall(444,0,0,1)\nresult={\'osRelease\':pathlib.Path(\'/etc/os-release\').read_text(),\'uname\':platform.uname()._asdict(),\'uid\':os.getuid(),\'landlockABI\':abi,\'landlockErrno\':ctypes.get_errno()}\ncommands={\'lsm\':[\'sudo\',\'cat\',\'/sys/kernel/security/lsm\'],\'kernelConfig\':[\'bash\',\'-c\',\'grep -E "^CONFIG_(SECURITY_LANDLOCK|SECCOMP|SECCOMP_FILTER|USER_NS|SECURITY_APPARMOR)=" /boot/config-$(uname -r)\'],\'apparmor\':[\'sudo\',\'aa-status\',\'--json\'],\'sysctls\':[\'sysctl\',\'kernel.unprivileged_userns_clone\',\'kernel.apparmor_restrict_unprivileged_userns\'],\'unprivilegedUserNamespace\':[\'unshare\',\'--user\',\'--map-root-user\',\'true\'],\'disk\':[\'df\',\'-h\',\'/\'],\'cloudInit\':[\'cloud-init\',\'status\']}\nfor k,v in commands.items():\n p=subprocess.run(v,capture_output=True,text=True);result[k]={\'command\':v,\'exitCode\':p.returncode,\'stdout\':p.stdout,\'stderr\':p.stderr}\nprint(json.dumps(result,indent=2))\n' for attempt in range(10): p=subprocess.run(ssh+['python3','-'],input=probe,capture_output=True,text=True) if p.returncode==0: (r/'metadata/guest-probe.json').write_text(p.stdout);(r/'logs/ssh-probe.txt').write_text(p.stderr);j=json.loads(p.stdout);print('Guest ready:',j['uname']['release'],'Landlock ABI',j['landlockABI'],'unprivileged namespace exit',j['unprivilegedUserNamespace']['exitCode']);break time.sleep(2) else:print(p.stderr);raise SystemExit(p.returncode)