tests: validate installer ISO on XCP-ng

This commit is contained in:
2026-04-04 19:06:48 +02:00
parent 604ad82f4f
commit 43c155bb9f
3 changed files with 553 additions and 25 deletions

View File

@@ -24,6 +24,8 @@ Fruix currently has:
- `fruix system install`
- a bootable Fruix-managed installer environment:
- `fruix system installer`
- a bootable Fruix-managed installer ISO:
- `fruix system installer-iso`
Validated boot modes still are:
@@ -36,45 +38,44 @@ The validated Phase 18 installation work currently uses:
## Latest completed achievement
### 2026-04-04 — Phase 18.2 completed
### 2026-04-04 — Phase 18.3 completed
Fruix now boots a minimal installer environment and installs a target system from inside it.
Fruix now builds a bootable installer ISO, boots it, installs from it, and boots the installed target successfully.
Highlights:
- added in `modules/fruix/system/freebsd.scm`:
- `installer-operating-system`
- `operating-system-installer-image-spec`
- `materialize-installer-image`
- `operating-system-installer-iso-spec`
- `materialize-installer-iso`
- added CLI support in `scripts/fruix.scm`:
- `fruix system installer`
- `--install-target-device DEVICE`
- the installer image now carries:
- its own installer closure
- `fruix system installer-iso`
- the installer ISO now carries:
- a UEFI El Torito boot image
- `/boot/root.img` as the installer mdroot payload
- the installer closure
- the selected target closure
- the target store closure
- a staged target rootfs payload
- the target runtime store closure needed for installation
- in-guest installer state/log/scripts
- validated workflow:
- boot installer image in QEMU/UEFI/TCG
- reach installer over SSH
- install target system onto second disk from inside the guest
- boot the installed target successfully
- validated workflows:
- local QEMU/UEFI/TCG boot, install, and installed-target reboot
- real XCP-ng VM boot, install, and installed-target reboot
- a platform-specific installer detail is now recorded in-tree:
- QEMU ISO path installs onto `/dev/vtbd0`
- XCP-ng ISO path installs onto `/dev/ada0`
Validation:
- `PASS phase18-installer-environment`
- regression re-checks:
- `PASS phase18-system-install`
- `PASS phase17-source-revisions-qemu`
- `PASS phase18-installer-iso`
- `PASS phase18-installer-iso-xcpng`
Report:
- `docs/reports/phase18-installer-environment-freebsd.md`
- `docs/reports/phase18-installer-iso-freebsd.md`
Commit:
Commits:
- `1d00907``Add Fruix bootable installer environment`
- `1970c5c``system: add UEFI installer ISO builder`
- `604ad82``system: validate UEFI installer ISO boot path`
## Recent major milestones

View File

@@ -163,7 +163,7 @@ installer_iso_install=ok
installed_target_boot=ok
```
Notable ISO-specific validation detail:
Notable QEMU-specific ISO validation detail:
- unlike the disk-image-style installer environment from Phase 18.2, the ISO boots from `cd0`, so the target virtio disk appears as:
- `/dev/vtbd0`
@@ -194,6 +194,75 @@ The harness verified all of the following:
- `sshd` is running
- activation completed successfully
### Real XCP-ng validation
Added:
- `tests/system/run-phase18-installer-iso-xcpng.sh`
This harness validates the same installer-iso workflow on the approved real XCP-ng path:
- VM: `90490f2e-e8fc-4b7a-388e-5c26f0157289`
- ISO SR: `537a6219-8452-7cb5-8d56-5eed6910c7a2`
- target VDIs:
- `0f1f90d3-48ca-4fa2-91d8-fc6339b95743`
- `7061d761-3639-4bec-87f7-2ba1af924eaa`
Because the current `xo-cli disk.import @=/path/to.iso` path returned an HTTP 500 error in this environment, the harness imports the ISO into the ISO SR via a temporary local HTTP URL, then inserts the resulting ISO VDI into the VM's CD drive.
Passing validation:
- `PASS phase18-installer-iso-xcpng`
Validated result summary:
```text
vm_id=90490f2e-e8fc-4b7a-388e-5c26f0157289
iso_id=<temporary-imported-iso-vdi>
guest_ip=192.168.213.62
installer_state=done
installer_target_device=/dev/ada0
kern_disks=cd0 ada1 ada0
installer_run_current_system=/frx/store/16969e825dbb65b5c27180030d4a7d98821893460fb3dccdc863ff6156ed61e0-fruix-system-fruix-freebsd-installer
installer_sshd_status=running
target_run_current_system=/frx/store/a98d3af6a1afbc4a927d47cea6458d5a70747b051ed994e5d9ff1ae79c4f2b42-fruix-system-fruix-freebsd
target_sshd_status=running
target_shepherd_status=running
```
Important XCP-ng-specific details:
- the installer ISO still boots from:
- `cd0`
- on this Xen HVM path, the primary target disk is exposed through Xen block front as `xbd0` and appears to FreeBSD as:
- `/dev/ada0`
- therefore the XCP-ng installer-iso path must target:
- `/dev/ada0`
rather than QEMU's:
- `/dev/vtbd0`
- the visible EFI console can appear to stop at:
- `console vidconsole is unavailable`
but boot still continues and the installer becomes reachable over SSH; that message was not the actual failure mode on XCP-ng
The harness verified all of the following on the real VM path:
1. `fruix system installer-iso` builds a bootable ISO with `--install-target-device /dev/ada0`
2. the ISO can be imported into the operator-approved ISO SR and attached to the approved VM
3. the VM boots the Fruix installer ISO successfully under UEFI
4. the installer environment becomes reachable over SSH
5. inside the installer guest:
- `kern.disks` includes `cd0` and `ada0`
- `/run/current-system` points at the installer closure
- the installer reaches `state=done`
6. the installed target on `ada0` is partitioned and formatted correctly
7. after ejecting the ISO and rebooting, the installed target boots successfully on the same XCP-ng VM
8. after target boot:
- `/run/current-system` points at the target closure
- shepherd is running
- `sshd` is running
- activation completed successfully
- `/var/lib/fruix/install.scm` still records the materialized source store provenance
## Result
Phase 18.3 is complete.
@@ -202,4 +271,7 @@ Fruix now has a validated bootable UEFI installer ISO on FreeBSD that can:
- boot into a Fruix-managed installer environment from ISO media
- perform the non-interactive installation flow onto a target disk
- and boot the installed target successfully
- boot the installed target successfully
- and do so on both:
- local `QEMU/UEFI/TCG`
- the approved real `XCP-ng` VM path