| .. | ||
| test-runs | ||
| auto-install-keymap.sh | ||
| auto-install.sh | ||
| boot-checklist.md | ||
| METHOD-CHANGELOG.md | ||
| README.md | ||
| run-vm.sh | ||
| TESTING.md | ||
test/
Test harnesses for veilor-os ISO builds.
Files
| File | Purpose |
|---|---|
run-vm.sh |
Manual smoke test — boot the latest ISO interactively in QEMU/KVM. SSH key injection via cloud-init seed + monitor sendkey fallback for live-image login. |
auto-install.sh |
Autonomous end-to-end install test. Boots ISO, drives the gum installer via QEMU monitor sendkey, waits for anaconda to finish + reboot, SSHs into the installed system, runs validation checklist. Prints PASS/FAIL summary. |
auto-install-keymap.sh |
Sourced helper. Provides km_send_str, km_send_chord, km_send_key, km_screendump, km_wait_socket, etc. Reusable by other automation. |
boot-checklist.md |
Manual post-install checklist (run on a real spare laptop). |
Running the autonomous installer test
./test/auto-install.sh build/out/veilor-os-*.iso
Hardcoded inputs (deterministic — do not edit during a test run):
- Disk: first
/dev/vda(the only disk in QEMU) - Hostname:
veilor(installer hardcoded since v0.5.4) - LUKS passphrase:
testpass1234 - Admin password:
adminpass1234 - Locale:
en_GB.UTF-8
Expected runtime: 20–30 minutes wall clock (anaconda dominates).
Outputs
/tmp/veilor-auto-install.log— full driver log/tmp/veilor-auto-install-NN-<step>.png— milestone screenshots/tmp/veilor-auto-install-final-ssh.txt— final SSH session capture (uname/lsblk/cmdline/failed units)
Exit codes
0— all validation checks passed1— any failure (anaconda crashed, SSH never came up, validation check failed)2— preflight failure (missing tool, bad ISO arg, missing OVMF)
Prerequisites
qemu-system-x86_64,qemu-img,socat,ssh,ssh-keygenedk2-ovmf(OVMF UEFI firmware at/usr/share/edk2/ovmf/OVMF_{CODE,VARS}.fd)mkisofsorxorriso(for cloud-init seed ISO; harness falls back to TTY1 driving if seed cannot be built or cloud-init does not run on the installed system)convertfrom ImageMagick (optional — converts PPM screendumps to PNG; harness keeps PPM if absent)- KVM access (
/dev/kvmreadable by the user)
What it validates
Post-install on the booted system:
/etc/os-release→NAME=veilor-oshostnamectl --static→veilorsystemctl is-active→activeforsshd fail2ban usbguard tuned auditd firewalld chronyd sddmgetenforce→Enforcing(preferred) orPermissive(acceptable for v0.5.x)lsblk -fshowscrypto_LUKS+btrfs/etc/crypttabhas a LUKS entrygetent passwd adminreturns the user/usr/local/bin/{veilor-power,veilor-doctor,veilor-update}are present and executable/proc/cmdlinecontainsinit_on_alloc=1
Troubleshooting
- Stuck at boot banner: ISO didn't autostart
veilor-installeron tty1. Checkserial.logandauto-install-vm-NN-*.pngscreenshots. The harness aborts after 5 minutes of identical screen frames. - SSH never up: cloud-init may not have run on the installed system (no
cidatamount). The harness falls back to TTY1 driving — typing the LUKS passphrase, logging in as admin, and hand-injecting the SSH key. If both paths fail, validation cannot proceed. screendumpproduces unreadable PPM: install ImageMagick (dnf install ImageMagick) so the harness converts to PNG.