5 Commits

Author SHA1 Message Date
4d8e27cd50 Fix OVMF 4m variant detection and Gentoo dep atom parsing
1. host.ovmf: Arch edk2-ovmf 202508+ uses OVMF_CODE.4m.fd (4MB variant)
   instead of OVMF_CODE.fd. Added .4m.fd paths to the search list and
   updated the find fallback to match OVMF_CODE*.fd glob.

2. test_parse_dep_atoms: The single-regex approach with lazy quantifiers
   failed on atoms like "sys-libs/zlib" at end-of-string. Rewrote
   parse_dep_atoms to split on whitespace first, strip [:slot] and [USE]
   suffixes, then match category/name with a simple anchored regex.
   This is more robust and easier to reason about.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 16:40:52 +01:00
658289dc51 Fix 4 test failures from Proxmox VM report
1. converter panic (5 unit tests): "FIXME_CHECKSUM".repeat(4) is only
   56 chars but was sliced to [..64], causing index-out-of-bounds panic.
   Both crux.rs and gentoo.rs converters now use "a".repeat(64) as the
   placeholder checksum instead.

2. dpack list/check exit code 1: these commands call PackageDb::open()
   which tries to create /var/lib/dpack/db — fails without root.
   Test runner now creates a temp dpack.conf pointing at a writable
   temp directory with repos symlinked from the project. Also added
   search and info smoke tests.

3. host.ovmf: not a code bug — edk2-ovmf just needs to be installed
   on the test VM (sudo pacman -S edk2-ovmf --noconfirm).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 16:37:34 +01:00
8f9fa9f00e Fix OVMF detection for Arch Linux (split CODE/VARS files)
Arch's edk2-ovmf package installs split files (OVMF_CODE.fd +
OVMF_VARS.fd) instead of a single OVMF.fd. Updated the search
to check OVMF_CODE.fd paths first, with a find fallback.

QEMU boot command now handles both formats:
- Split: -drive if=pflash,format=raw,readonly=on,file=OVMF_CODE.fd
         -drive if=pflash,format=raw,file=OVMF_VARS.fd
- Single: -bios OVMF.fd

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 16:32:06 +01:00
c35ba5dc0f Use tmux for test runner — detachable SSH sessions
Tests now run inside a tmux session so you can disconnect and
reconnect without interrupting multi-hour test runs.

Changes:
- create-vm.sh: cloud-init no longer auto-runs tests, just provisions
  packages and clones the repo. Installs a `darkforge-test` command
  in /usr/local/bin that wraps run-in-vm.sh in tmux.
- run-in-vm.sh: detects when called as `darkforge-test` and re-execs
  inside a tmux session named "darkforge". --tmux flag for internal use.
- README updated with tmux workflow (detach/reattach instructions).

Workflow:
  ssh darkforge@<ip>
  darkforge-test --quick    # starts in tmux
  Ctrl+B D                  # detach, go do other things
  tmux attach -t darkforge  # come back later

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 13:59:52 +01:00
c464e0eec9 Add Proxmox test environment (VM creation + automated test suite)
Tests everything possible without the target hardware:

create-vm.sh (runs on Proxmox host):
- Creates Arch Linux VM (VMID 900, 8 cores, 16GB RAM, 100GB disk)
- UEFI boot with OVMF (for nested QEMU testing)
- Cloud-init auto-installs packages, clones repo, runs tests
- Nested virtualization enabled for QEMU-in-QEMU boot tests

run-in-vm.sh (runs inside the VM, 9 test suites):
1. Host environment validation
2. dpack build + unit tests + CLI smoke tests
3. Package definition validation (154 packages, dep resolution)
4. Script syntax checking (toolchain, init, installer, ISO)
5. Kernel config validation (critical options)
6. Package signing test (download zlib, compute SHA256)
7. Toolchain bootstrap (LFS Ch.5 cross-compiler build)
8. ISO generation
9. Nested QEMU boot test (UEFI boot, kernel + userspace check)

Modes: --quick (30min, suites 1-5), --no-build (1hr), full (2-6hr)
Generates report.json + report.txt for automated debugging.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 13:32:01 +01:00