| name | factory-integration | ||||||
|---|---|---|---|---|---|---|---|
| description | Understand Bluefin Server's role as the core OS for an image-based CI/OS factory and how optional workloads run on it. | ||||||
| metadata |
|
Bluefin Server is not a generic server distribution; it is the core operating system for an image-based CI/OS factory.
The factory pattern is broader than a single host: a downstream CI lab or OS factory uses Bluefin Server as the base OS for automated provisioning, image-based updates, and optional runtime workloads. That environment shapes the design of this repository.
┌─────────────────────────────────────────────────────────────┐
│ Downstream CI lab / OS factory │
│ GitOps-style testing and automation for image-based OSes │
│ • k0s control plane / workload orchestration │
│ • VM or container workloads │
│ • OCI/bootc image pipelines / release automation │
└─────────────────────────────────────────────────────────────┘
│
▼ runs on
┌─────────────────────────────────────────────────────────────┐
│ Bluefin Server (this repo) │
│ Core server OS: DDI-first, image-updated │
│ • systemd-sysupdate for atomic A/B updates │
│ • systemd-sysext for optional layers (k0s, extensions) │
└─────────────────────────────────────────────────────────────┘
Kubernetes is not baked into the base /usr image. The base image stays small and stateless; k0s is delivered as a systemd-sysext EROFS image that overlays /usr/ at runtime.
elements/oci/k0s-sysext.bstbuilds the sysext.files/os/sysupdate.k0s.d/70-k0s.transferenables component-scoped OTA updates of the sysext.files/os/justfileprovides thejust k8sentrypoint.
See k0s-sysext.md for details.
The workloads the factory tests and ships live in other repositories or image pipelines. No container runtime ships in the base /usr image (hard rule 4); the only runtime we ship is containerd, inside the opt-in kubeadm sysext (see kubeadm-sysext.md). Everything else runs in system containers or in the workload images themselves.
Bluefin Server is the factory floor; optional workloads and variant images run on that floor.
| Factory need | Server decision |
|---|---|
| Fully automated, unattended installs and rebuilds | Diskless network boot; a booted node installs itself with systemd-sysinstall |
| Atomic, rollback-capable updates | Image-based A/B updates via systemd-sysupdate; diskless nodes update by rebooting |
| Minimal attack surface / lean base OS | Verity-sealed read-only /usr with bash; optional tools as sysexts |
| Kubernetes control plane on every node | k0s delivered as systemd-sysext |
| Container workloads | containerd via the opt-in kubeadm sysext; anything else runs in system containers |
| Signed, verifiable release artifacts | Signed UKIs + SHA256SUMS signed in-element, verified against /etc/systemd/import-pubring.pgp |
sshdis present in the OS image for on-demand diagnostics and bring-up troubleshooting, but is disabled by default viadisable sshd.servicein systemd presets. Operators can start it on-demand withsystemctl start sshdor enable it when remote access is required. Login is key-only (PermitRootLogin prohibit-password,PasswordAuthentication no), and root ships locked; provision keys per node as described under "Node access" in tpm2-credential-sealing.md.
- Explaining why a server feature exists (diskless-first boot, sysext-first design, image updates).
- Deciding whether a new component belongs in the base /usr image or in a standalone
systemd-sysext. - Integrating server builds with the factory CI repository or image-factory pipeline.
- Onboarding a contributor who asks “what is Bluefin Server for?”
- For desktop variant questions — see those repos or image pipelines.
- For container image authoring — see the relevant packaging or build docs.
- For lab operational troubleshooting — see the factory CI repository maintainer documentation.
| Rationalization | Reality |
|---|---|
| “k0s should be in the base image.” | Keep the base /usr minimal. k0s is optional and delivered OTA as a sysext. |
| “The USB installer needs its own installer logic.” | It is the same image booted from a stick into stock systemd-sysinstall.service; the install path and the installed disk are identical to a diskless install. |
| “Let’s add heavy debug tools.” | Base OS includes bash for login; heavy developer/debug tools belong in sysexts or system containers. |
| “Package updates are small patches.” | Image-based updates are whole-OS replacements; the rollback unit is the OS image, not a package delta. |
- Adding a workload dependency to
elements/bluefin-server/os-stack.bstthat could ship as asystemd-sysext. - Treating Bluefin Server as a generic Fedora/RHEL replacement rather than the factory core OS.
- Putting Kubernetes tooling in the base /usr image instead of the k0s sysext.
- Designing install/update paths that require interactive human steps in the factory.
- Any new base-image dependency can be justified by the factory core-OS role.
- Optional capabilities are modeled as sysexts or system containers.
- The k0s sysext still builds and updates independently of the base image.
-
systemd-sysupdatetransfer files are present for every OTA-delivered artifact (usr, usr-verity, UKI, k0s sysext).
- k0s-sysext.md — building and delivering the k0s sysext.
- ddi-installer.md — boot, install, and update architecture.
- CONTEXT.md — canonical project domain glossary.