Complete Phase 9 Fruix boot on XCP-ng
This commit is contained in:
@@ -2217,3 +2217,77 @@ Next recommended step:
|
||||
- deterministic boot readiness
|
||||
- in-guest Shepherd validation
|
||||
- minimal operator usability
|
||||
|
||||
## 2026-04-02 — Phase 9 completed on the active XCP-ng FreeBSD track
|
||||
|
||||
Completed work:
|
||||
|
||||
- resolved the in-guest Guile/Shepherd blocker that remained after the earlier DHCP+SSH checkpoint
|
||||
- wrote the completion report:
|
||||
- `docs/reports/phase9-xcpng-ready-boot-freebsd.md`
|
||||
- extended the staged runtime again in:
|
||||
- `modules/fruix/packages/freebsd.scm`
|
||||
- added `/usr/sbin/daemon`
|
||||
- added `/usr/share/locale/C.UTF-8/LC_CTYPE`
|
||||
- completed the guest runtime integration in:
|
||||
- `modules/fruix/system/freebsd.scm`
|
||||
- activation now recreates compatibility symlinks for the currently locally built Guile / guile-extra / Shepherd prefixes, but points them at the real `/frx/store` items in the guest
|
||||
- the rootfs now exposes `/usr/share/locale`
|
||||
- the generated Shepherd config no longer relies on missing `mkdir-p` or unsupported `call-with-output-file #:append` behavior
|
||||
- the Shepherd rc script now exports `LANG=C.UTF-8` / `LC_ALL=C.UTF-8`
|
||||
- the Shepherd rc script now exports explicit Guile system/site path variables
|
||||
- Shepherd is now started through FreeBSD `daemon(8)` so it remains alive after rc/session teardown
|
||||
- corrected the XCP-ng harness in:
|
||||
- `tests/system/run-phase9-xcpng-boot.sh`
|
||||
- it now uses a distinct SSH private key file for login instead of incorrectly trying to authenticate with the public key file
|
||||
|
||||
Important findings:
|
||||
|
||||
- the original guest Guile failure had multiple layers:
|
||||
- missing UTF-8 locale data in the image
|
||||
- baked-in temporary install-prefix references inside the copied Guile / guile-extra / Shepherd artifacts
|
||||
- and Shepherd process lifetime issues caused by a fragile shell-background startup path
|
||||
- reproducing the problem in a host-side chroot into the generated image root partition made the final debugging loop much tighter than repeated full VM imports alone
|
||||
- after locale staging and compatibility-prefix recreation, Guile and Shepherd became runnable in the guest, but Shepherd still exited too early on the real boot path until it was launched via `daemon(8)`
|
||||
- after those fixes, the full ready-marker path became reliable enough for end-to-end XCP-ng validation
|
||||
|
||||
Final validation:
|
||||
|
||||
- `tests/system/run-phase9-xcpng-boot.sh` now passes end-to-end against:
|
||||
- VM `90490f2e-e8fc-4b7a-388e-5c26f0157289`
|
||||
- VDI `0f1f90d3-48ca-4fa2-91d8-fc6339b95743`
|
||||
- passing run workdir:
|
||||
- `/tmp/phase9-xcpng-pass-1775113189`
|
||||
- passing real-guest metadata confirmed:
|
||||
- `ready_marker=ready`
|
||||
- `shepherd_status=running`
|
||||
- `sshd_status=running`
|
||||
- `run_current_system_target=/frx/store/0fe459ea22156510e64cea794b7a001151b59625bd5f12a488d6851e1c6d2198-fruix-system-fruix-freebsd`
|
||||
- `operator_home_listing=/home/operator`
|
||||
- `logger_log=fruix-shepherd-started`
|
||||
|
||||
Current assessment:
|
||||
|
||||
- Phase 9 is now complete for the active FreeBSD prototype track, using the XCP-ng replacement path adopted for this environment
|
||||
- the generated Fruix image now reaches all currently required first-boot milestones on the real VM:
|
||||
- kernel boot: yes
|
||||
- root mount: yes
|
||||
- DHCP: yes
|
||||
- SSH: yes
|
||||
- Shepherd: yes
|
||||
- ready marker: yes
|
||||
- minimal operator usability: yes
|
||||
- this establishes the first real Fruix-on-FreeBSD VM that:
|
||||
- boots from the declaratively generated image,
|
||||
- reaches the generated ready state,
|
||||
- keeps Shepherd running,
|
||||
- and remains inspectable over SSH as a minimally usable system
|
||||
|
||||
Next recommended step:
|
||||
|
||||
1. begin the next post-Phase-9 cleanup/native-integration pass from `docs/PLAN_2.md` Optional Phase 10
|
||||
2. prioritize replacing the current compatibility shims for locally built Guile / Shepherd prefixes with a more native store-path-aware Fruix runtime arrangement
|
||||
3. clean up remaining non-fatal boot noise observed during Phase 9, such as:
|
||||
- login-class warnings around `daemon`
|
||||
- the `gpart: Unknown command: show` rc noise
|
||||
- residual syslog/cron/runtime polish issues where they still matter
|
||||
|
||||
Reference in New Issue
Block a user