142 lines
3.9 KiB
Markdown
142 lines
3.9 KiB
Markdown
# Phase 15.1: make the FreeBSD base version a declarative Fruix input
|
|
|
|
Date: 2026-04-03
|
|
|
|
## Goal
|
|
|
|
Phase 15.1 made the FreeBSD base an explicit declarative part of the Fruix system model instead of leaving it as an implicit property of whatever `/usr/src` happened to be present on the builder host.
|
|
|
|
## Implementation
|
|
|
|
### New declarative base record
|
|
|
|
Added in `modules/fruix/packages/freebsd.scm`:
|
|
|
|
- `freebsd-base`
|
|
- `freebsd-base?`
|
|
- accessors for:
|
|
- `name`
|
|
- `version-label`
|
|
- `release`
|
|
- `branch`
|
|
- `source-root`
|
|
- `target`
|
|
- `target-arch`
|
|
- `kernconf`
|
|
- `make-flags`
|
|
- `%default-freebsd-base`
|
|
|
|
This gives Fruix an explicit model for the base input used by native FreeBSD artifacts.
|
|
|
|
### Native package constructors now accept a declared base
|
|
|
|
Added package constructors:
|
|
|
|
- `freebsd-native-kernel-for`
|
|
- `freebsd-native-world-for`
|
|
- `freebsd-native-runtime-for`
|
|
- `freebsd-native-bootloader-for`
|
|
- `freebsd-native-headers-for`
|
|
- `freebsd-native-system-packages-for`
|
|
- `freebsd-native-development-profile-packages-for`
|
|
|
|
The existing exported package variables remain as the `%default-freebsd-base` instances:
|
|
|
|
- `freebsd-native-kernel`
|
|
- `freebsd-native-world`
|
|
- `freebsd-native-runtime`
|
|
- `freebsd-native-bootloader`
|
|
- `freebsd-native-headers`
|
|
|
|
That preserves the validated Phase 14 path while making alternative declared bases possible.
|
|
|
|
### Operating-system model now records the declared base
|
|
|
|
Added to `modules/fruix/system/freebsd.scm`:
|
|
|
|
- `operating-system-freebsd-base`
|
|
- new `#:freebsd-base` field on `operating-system`
|
|
|
|
The declared base is now recorded in:
|
|
|
|
- `operating-system-closure-spec`
|
|
- `operating-system-image-spec`
|
|
- `metadata/freebsd-base.scm`
|
|
- `metadata/store-layout.scm`
|
|
|
|
### CLI metadata now exposes the declared base
|
|
|
|
`scripts/fruix.scm` now emits, for `fruix system build` and `image`:
|
|
|
|
- `freebsd_base_name`
|
|
- `freebsd_base_version_label`
|
|
- `freebsd_base_release`
|
|
- `freebsd_base_branch`
|
|
- `freebsd_base_source_root`
|
|
- `freebsd_base_target`
|
|
- `freebsd_base_target_arch`
|
|
- `freebsd_base_kernconf`
|
|
- `freebsd_base_file`
|
|
|
|
### Native build metadata now records the declared base
|
|
|
|
Native build manifests and `.freebsd-native-build-info.scm` now carry a `declared-base` block so the native artifacts themselves record the declarative base choice.
|
|
|
|
## New files
|
|
|
|
Added:
|
|
|
|
- `tests/system/phase15-declarative-base-pid1-operating-system.scm.in`
|
|
- `tests/system/run-phase15-declarative-base-build.sh`
|
|
|
|
## Validation
|
|
|
|
Passing run:
|
|
|
|
- `PASS phase15-declarative-base-build`
|
|
- workdir: `/tmp/phase15-1-build-1775202535`
|
|
|
|
The harness used an explicit declared base:
|
|
|
|
```scheme
|
|
(freebsd-base
|
|
#:name "stable-default"
|
|
#:version-label "15.0-STABLE-declarative"
|
|
#:release "15.0-STABLE"
|
|
#:branch "stable/15"
|
|
#:source-root "/usr/src"
|
|
#:target "amd64"
|
|
#:target-arch "amd64"
|
|
#:kernconf "GENERIC")
|
|
```
|
|
|
|
Confirmed:
|
|
|
|
```text
|
|
kernel_store=/frx/store/8fcef04c7e507e86ea5e92f251fe3c6ac1aa3bcf4809fa77ddd8b92854bfcde0-freebsd-native-kernel-15.0-STABLE-declarative
|
|
bootloader_store=/frx/store/7a0ba431e487dc35a8f6318108da16a37c8426c43e77e7a7f91404ba1d980eef-freebsd-native-bootloader-15.0-STABLE-declarative
|
|
runtime_store=/frx/store/17c24ad20ddcb136c39352b68e758deae0b480258ba0128a5546f696a7eba0a6-freebsd-native-runtime-15.0-STABLE-declarative
|
|
native_base_store_count=3
|
|
host_base_store_count=0
|
|
freebsd_base_name=stable-default
|
|
freebsd_base_version_label=15.0-STABLE-declarative
|
|
freebsd_base_release=15.0-STABLE
|
|
freebsd_base_branch=stable/15
|
|
freebsd_base_source_root=/usr/src
|
|
freebsd_base_kernconf=GENERIC
|
|
declarative_base_input=ok
|
|
```
|
|
|
|
The harness also confirmed:
|
|
|
|
- `metadata/freebsd-base.scm` exists
|
|
- `parameters.scm` records the declared base
|
|
- `metadata/store-layout.scm` records the declared base
|
|
- native build info files record the declared base version/branch
|
|
|
|
## Result
|
|
|
|
Phase 15.1 is complete.
|
|
|
|
Fruix now has an explicit declarative FreeBSD base input in the system model, while still allowing the current validated `/usr/src`-based path to work unchanged by default.
|