Remove guest runtime prefix shim dependency

This commit is contained in:
2026-04-02 17:35:12 +02:00
parent 377a6e49ff
commit 1b3e49fbf7
5 changed files with 317 additions and 18 deletions

View File

@@ -2541,3 +2541,81 @@ Next recommended step:
1. focus directly on eliminating the remaining Guile / Shepherd compatibility-prefix shims from the guest runtime
2. preserve `shepherd-pid1` as an experimental selectable boot mode while that cleanup proceeds
3. once the runtime-prefix issue is reduced, reassess whether `shepherd-pid1` should replace the older `freebsd-init+rc.d-shepherd` path as the preferred Fruix boot architecture
## 2026-04-02 — Post-Phase-10: removed runtime dependence on `/tmp` Guile / Shepherd compatibility-prefix shims
Completed work:
- removed the generated guest's runtime dependence on the old `/tmp` compatibility-prefix symlinks for Guile, guile-extra, and Shepherd
- wrote the subphase report:
- `docs/reports/postphase10-runtime-prefix-shims-freebsd.md`
- updated the prefix materializer in:
- `modules/fruix/system/freebsd.scm`
- bumped the prefix-materializer revision
- added deterministic post-copy sanitation for staged runtime prefixes
- removed activation-time recreation of these guest-side shims from the generated activation path:
- `/tmp/guile-freebsd-validate-install`
- `/tmp/guile-gnutls-freebsd-validate-install`
- `/tmp/shepherd-freebsd-validate-install`
- sanitized the staged guile-extra runtime so it no longer depends on those old prefixes for key module loading:
- patched `fibers/config.scm` to use `GUILE_EXTENSIONS_PATH`
- patched `gnutls.scm` to fall back to `GUILE_EXTENSIONS_PATH`
- removed stale compiled cache files that would otherwise retain the old prefix behavior:
- `fibers/config.go`
- `gnutls.go`
- sanitized the staged Shepherd runtime so it no longer depends on the old temporary prefix for `shepherd config`:
- patched `share/guile/site/3.0/shepherd/config.scm`
- removed stale compiled cache file:
- `shepherd/config.go`
- extended the real XCP-ng validation harnesses so they now explicitly check for:
- absence of the `/tmp` compatibility-prefix trees
- successful Guile module loading from the store-backed runtime
- updated:
- `tests/system/run-phase9-xcpng-boot.sh`
- `tests/system/run-phase11-shepherd-pid1-xcpng.sh`
Validation:
- `tests/system/run-phase9-xcpng-boot.sh` passes on the real VM with:
- workdir: `/tmp/noshim-phase9-smoke-1775143001`
- `compat_prefix_shims=absent`
- `guile_module_smoke=ok`
- `ready_marker=ready`
- `shepherd_status=running`
- `sshd_status=running`
- `tests/system/run-phase11-shepherd-pid1-xcpng.sh` passes on the real VM with:
- workdir: `/tmp/noshim-phase11-smoke-1775142712`
- `compat_prefix_shims=absent`
- `guile_module_smoke=ok`
- `ready_marker=ready`
- `shepherd_pid=1`
- `shepherd_status=running`
- `sshd_status=running`
- a direct manual guest probe also confirmed that all three `/tmp` compatibility-prefix paths are absent while Guile can still load:
- `(fibers config)`
- `(gnutls)`
- `(shepherd config)`
Important findings:
- the remaining native-runtime problem was narrower than the earlier boot-manager issue:
- boot was already solved
- PID 1 was already solved
- the next real dependency to remove was the guest's reliance on temporary compatibility aliases
- deleting the stale compiled cache files for the affected modules was important; otherwise Guile could continue using prefix-baked compiled forms even after the source modules were patched
- this subphase removes runtime dependence on the old `/tmp` compatibility shims, but it does not yet guarantee that every embedded historical prefix string has disappeared from every binary or metadata artifact
Current assessment:
- Fruix now boots and runs from a store-backed Guile / Shepherd runtime arrangement on FreeBSD without needing guest-side `/tmp` compatibility-prefix symlinks
- this now holds for both validated real-VM boot modes:
- `freebsd-init+rc.d-shepherd`
- `shepherd-pid1`
- the main remaining cleanup is deeper and lower-level:
- move the local Guile / guile-extra / Shepherd build/install flow itself closer to a truly store-native prefix so the remaining baked strings disappear from the artifacts rather than merely becoming runtime-irrelevant
Next recommended step:
1. keep `shepherd-pid1` available as the stronger experimental boot architecture
2. start pushing the local Guile / guile-extra / Shepherd build/install process itself toward a truly store-native prefix layout
3. clean up the remaining historical prefix strings still present in binaries, libtool metadata, and pkg-config metadata where they still matter for developer/operator workflows