Phase 101 — build onix-branding
At a glance
| Field | Value |
|---|---|
| Phase family | Phase 1 — first stones |
| Run command | make phase 101 |
| Underlying make target/script | vm/phase1/build-branding-stone.sh |
| Runs on | guest over SSH |
| Main proof/artifact | Builds and verifies the onix-branding stone. |
Builds the recipe at:
recipes/onix-branding/stone.yaml
inside the forge, then verifies:
- the
.stonepassesmoss inspect --check /usr/lib/os-info.jsonexists- Moss generates
/usr/lib/os-releasefrom that metadata during install /usr/share/onix/branding/logo.txtcontains the plain terminal ONIX logo/usr/share/onix/branding/logo.ansicontains the ANSI-colored terminal logo- default
/etctext lives under/usr/share/defaults/etc/ - installing into a disposable target root works
Boulder currently ignores non-/usr payload files in this layout. That means
onix-branding ships the canonical input metadata at /usr/lib/os-info.json.
Moss uses that to generate /usr/lib/os-release during install. Later image
assembly or first-boot glue creates the compatibility symlink:
/etc/os-release -> ../usr/lib/os-release
The branding colors come from the real ONIX logo assets:
orange: #e7590f / 38;2;231;89;15
blue: #4f6e91 / 38;2;79;110;145
ANSI_COLOR in os-release uses the ONIX blue. The default MOTD includes the
terminal logo with orange on the left and blue on the right.
Why defaults under /usr/share/defaults/etc?
The final ONIX contract is:
moss owns the machine plane
local admin/user changes live outside the immutable package payload
So for mutable configuration text like issue and motd, the package ships
defaults under:
/usr/share/defaults/etc/
Later boot/install glue can copy or merge those into /etc if needed. The
package still ships the canonical /usr/lib/os-info.json; Moss generates
/usr/lib/os-release, and image assembly creates the standard /etc/os-release
compatibility symlink outside the .stone.