Skip to content

RTFM · Image Creator

Targets: pick a row, get a machine.

A target names a boot method, an init system and a profile. Assembly is common; only the partition plan, the bootloader invocation and the init preparation differ per target.

Saphira Linux dragon mascot

Target matrix

TargetBootInitProfileInstall to disk
bios-openrcBIOSOpenRCminimal-openrcYes
bios-systemdBIOSsystemdminimal-systemdYes
bios-saphiraBIOSOpenRCsaphira-openrcYes
bios-saphiradBIOSsystemdsaphirad-systemdYes
uefi-openrcUEFIOpenRCminimal-openrcYes
uefi-systemdUEFIsystemdminimal-systemdYes
uefi-saphiraUEFIOpenRCsaphira-openrcYes
uefi-saphiradUEFIsystemdsaphirad-systemdYes
usb-installerHybridsystemdusb-installerBuild only
  • bios-openrc: Minimal Saphira image for BIOS machines.
  • bios-systemd: Minimal SaphiraD image for BIOS machines.
  • bios-saphira: Full Saphira product image for BIOS machines.
  • bios-saphirad: Full SaphiraD product image for BIOS machines.
  • uefi-openrc: Minimal Saphira image for UEFI machines.
  • uefi-systemd: Minimal SaphiraD image for UEFI machines.
  • uefi-saphira: Full Saphira product image for UEFI machines.
  • uefi-saphirad: Full SaphiraD product image for UEFI machines; the profile demonstrated on physical hardware.
  • usb-installer: Installer medium, not an installed system: boots BIOS and UEFI into a text-menu installer. Build only; install-to-disk refuses it.
saphira-image list-targets

The matrix

Eight matrix targets cover both boot methods, both init systems and both the minimal and product profiles, plus one installer-media target. saphira-image list-targets prints this table on any machine, with no privileges needed:

saphira-image list-targets
# TARGET            BOOT    INIT       PROFILE
# bios-openrc       bios    openrc     minimal-openrc
# bios-systemd      bios    systemd    minimal-systemd
# bios-saphira      bios    openrc     saphira-openrc
# bios-saphirad     bios    systemd    saphirad-systemd
# uefi-openrc       uefi    openrc     minimal-openrc
# uefi-systemd      uefi    systemd    minimal-systemd
# uefi-saphira      uefi    openrc     saphira-openrc
# uefi-saphirad     uefi    systemd    saphirad-systemd
# usb-installer     hybrid  systemd    usb-installer
  • minimal-* profiles carry exactly what a bootable, manageable machine needs; each entry is justified in the profile file itself.
  • saphira-openrc and saphirad-systemd are the full product profiles, the Saphira and SaphiraD seeds.
  • usb-installer is installer media, not an installed system: one hybrid medium (BIOS boot block plus ESP plus installer root) boots both firmwares into the installer menu. The installed machine's init is chosen in the menu, never here. Build-only: install-to-disk refuses it outright.

Three axes in every name

Target names are self-descriptive. The boot half tells you the firmware: bios, uefi and hybrid. The init half tells you what manages services once the machine is up: openrc or systemd. And the profile behind the row tells you how much machine you are getting: minimal rows carry exactly what boots and stays manageable, while saphira-* and saphirad-* rows build the full product images. Saphira is the OpenRC offering and SaphiraD is its systemd counterpart; the pairing is a choice, not an accident of characters.

Which row is yours?

  • A modern machine or a virtual machine: anything with UEFI firmware wants a uefi-* row, and most x86_64 hardware and hypervisors qualify.
  • An older x86_64 board that starts only in BIOS mode wants a bios-* row.
  • An Arm machine, such as a single-board computer: uefi-* with --arch aarch64; BIOS targets are refused on aarch64.
  • An installer key to hand to someone: usb-installer, built once, boots on both firmwares, and installs whichever init the person at the menu chooses.
  • Not sure at all: build uefi-saphirad first; it is the row that has been installed and booted end to end on real hardware in this documentation.

Init is a choice, never a detection

The init system is an explicit operator choice carried by the target. Packages ship both init definitions unconditionally: unit files are inert where systemd is not installed and OpenRC scripts are inert where it is. What differs between an -openrc and a -systemd image is which set is enabled and whether the boot path is consistent with what is on disk. Nothing infers the active init from installed files.

  • OpenRC targets: /etc/inittab is checked to select /sbin/openrc, and enabled services are written as /etc/runlevels/default symlinks rather than by invoking rc-update, which expects a running init.
  • systemd targets: default.target points at multi-user.target, and services are enabled offline with systemctl --root=/ enable. Nothing is ever started: an image has no running init, and enabling records intent.
  • Upstream systemd-firstboot is masked on SaphiraD targets so it can never prompt on the same console as Saphira's own first-boot wizard. Locale and timezone are post-install concerns; the hostname is baked at build.

Architectures

Targets build for x86_64 and aarch64. The architecture selects the repository's architecture, the packages installed into the image, and the bootloader target platform. BIOS is an x86 firmware concept, so BIOS targets are refused on aarch64 rather than silently producing something unbootable; the hybrid layout carries a BIOS boot partition and is refused there for the same reason.

saphira-image build --target uefi-saphirad --arch aarch64 --size 4G --output saphirad-arm64.raw