goldboot/src/builder/os/— one module per supported OSgoldboot/src/builder/options/— shared config types (Locale,Timezone,Ntp,Packages,UnixUsers, etc.)goldboot-image/— image format librarygoldboot-macros/— proc macros (#[Os(...)],#[derive(Prompt)])
- Create
goldboot/src/builder/os/<name>/mod.rs. - Annotate the struct with
#[goldboot_macros::Os(architectures(...))]and deriveClone, Serialize, Deserialize, Validate, Debug, SmartDefault, goldboot_macros::Prompt. - Use shared option types from
builder::optionswhere applicable (hostname, locale, timezone, ntp, packages, unix_users, root_password, iso, size, arch). - Implement
BuildImagewith abuild()method. We need to manipulate the VM until we get to a shell so we can finish the install via SSH. To wait for given text, preferwait_text_serial!when the guest can direct output to the serial console (e.g. by piping installer output throughtee /dev/ttyS0); fall back towait_text_ocr!, which OCRs the screen and is much more compute intensive. - Register the module in
goldboot/src/builder/os/mod.rs.
- Add the new release variant to the release enum (e.g.
V3_24,Bookworm) at the top of the enum so it sorts newest-first. - Keep EOL releases
- Update the default variant to the newest stable release.
- Update the default ISO — find the new ISO filename, URL, and sha256
checksum from the upstream mirror and update the
#[default(Iso { ... })]on theisofield. - Run
cargo checkto confirm everything compiles.
This project has been in development for a long time and we need to rapidly move toward a MVP and then a stable 1.0 release afterwards. This roadmap outlines our overall requirements in no particular order.
- Rename "Provisioners" to "PostSteps" (split into
PreStep/PostStepinbuilder/steps/) - Get ansible PostStep working again
- PostSteps run over SSH after the initial build has completed (see the
nixbuilder for the reference wiring)
- PostSteps run over SSH after the initial build has completed (see the
- Create "PreStep" facility that allows the context directory to be
customized before build (pre-steps run against an ephemeral copy of the
context directory — the "effective context dir" — so they're free to make
changes; the
AnsibleLocalPreStep renders config templates there)- TODO: replace the context-dir copy with an overlayfs mount (behind the
same
effective_context_dirabstraction) to avoid copying large contexts - TODO: convert ISO (install media) download to a "built in" PreStep?
- TODO: replace the context-dir copy with an overlayfs mount (behind the
same
- Figure out how to package goldboot.efi so it's available to
goldboot install - Finish remaining builders
- Finish multiboot builds