Skip to content

Base

Base is the shared foundation of every Frostyard image. Snow, Snowfield, Sundog, and Floe each build on it, then add a bootc runtime, their own software, and a kernel. Base is not an installer choice: Firn offers only Snow, Snowfield, Sundog, and Floe.

Every image gets the same update stager, the same status tool, and the same system-extension definitions from Base. They behave the same on a desktop and on a server.

A Frostyard image is built in five layers. Each product profile includes them in this order:

Layer What it adds
Base Debian Trixie userspace, systemd, the update stager, Updex, and the system-extension definitions
Bootc runtime bootc, libostree-1-1, the packages OCI bootc needs, and the bootc security setup
Product composition The desktop or server payload, its services, and its core Flatpak list, when it has one
Kernel The product’s kernel, firmware, and Mesa
Output format The directory output that mkosi writes

The product profile selects the composition and the kernel. Snow and Floe use the backports kernel, Snowfield uses the linux-surface kernel, and Sundog uses the backports kernel with a KDE composition. The other layers are shared.

Base holds the parts that should work the same everywhere: the Debian Trixie userspace, systemd, the update stager, the status tool, Updex, the system-extension definitions, microcode and firmware updates, networking, and the command-line tools.

The system keeps /usr immutable, manages /etc across deployments, and keeps /var persistent. The image ships no service enablement links in /etc. Presets create them at first boot.

Base builds as a directory image. The root build is not bootable, and it has no installer entry.

Every image runs the same stager. bootc-update-stage.timer fires every hour, with a random delay of up to 15 minutes. It pulls the image it follows with Podman, verifies the staged digest, and stages the new version. The version starts at your next normal reboot. The stager does not force a reboot.

Check the state on any image:

Terminal window
sudo snosi-update-status
sudo snosi-update-status --check
sudo snosi-update-status --pkg-diff
systemctl list-timers bootc-update-stage.timer

snosi-update-status must run as root. It prints the running version, the image the host follows, the result of the last check, and any staged update. --check also queries the registry and compares versions, never digests. --pkg-diff lists the Debian package changes between the running image and the staged one.

The stager records its result in /run/snosi/update-check and /run/snosi/update-staged. The files do not survive a reboot. The login message on a headless system reports a staged update or a failed check. For a failure, run journalctl -u bootc-update-stage.service.

The stager’s service starts only when the kernel command line has composefs. On a host that bootc does not manage, the stager exits without changes.

Base carries the system-extension definitions in /usr/lib/sysupdate.<name>.d/. Each component has a .transfer file that downloads its image from https://repository.frostyard.org/ext/<name>/ and verifies the signed SHA256SUMS, and a .feature file that sets Enabled=false. docker and tailscale are two examples.

Every extension starts switched off. Turn one on with Updex; the catalog lists every extension.

The preset 05-updex.preset enables updex-update.timer on every image. Enabled extensions update on their own: a new version is staged and starts at the next boot. See Automatic updates.

After systemd-sysext.service merges the enabled extensions, reload-sysext.service runs systemd-sysusers and systemd-tmpfiles. It then reapplies the kernel limits for fs.aio-max-nr, inotify, and kernel.keys from the merged configuration, and runs systemctl daemon-reload.

Group What it includes
Userspace Debian Trixie, systemd, dracut, sudo, systemd-cryptsetup, systemd-zram-generator, tpm2-tools, efibootmgr, and shim-signed
Updates bootc-update-stage.timer, the stager, snosi-update-status, frostyard-updex, and updex-update.timer
Extensions The definitions under /usr/lib/sysupdate.*.d/ and reload-sysext.service
Firmware and microcode amd64-microcode, intel-microcode, fwupd, and wireless-regdb
Network network-manager, wpasupplicant, openssh-server, and systemd-resolved
Tools git, curl, rsync, vim, jq, gcc, make, skopeo, and qemu-system-x86

The presets start NetworkManager, reload-sysext.service, bootc-update-stage.timer, and updex-update.timer. They turn off the APT daily update and upgrade timers, bootc-fetch-apply-updates.timer, and rsync.service.

  • No desktop and no server payload. The product composition adds them.
  • No kernel. Each product adds one.
  • No core Flatpak set of its own. Snow and Snowfield share one list, Sundog has its own, and Floe has none.
  • No product name. Each product profile sets its own ImageId.

Firn offers only these four bootc products. Base is not one of them.

Product Role Page
Snow General-purpose GNOME desktop Snow
Snowfield GNOME desktop for Microsoft Surface devices Snowfield
Sundog KDE Plasma desktop, bootc only Sundog
Floe Headless server image Floe

Snowfield is untested on representative Surface hardware. The Snow page compares the products.

Reviewed 2026-10-27 against snosi commit b2858ca0222814c395cf8248db98f3e096d57dc9.