Snow
Snow is Frostyard’s GNOME desktop. It is a Debian Trixie bootc/composefs image for x86-64 machines with UEFI, built from the same Base as the other Frostyard images. You install it with Firn.
The system lives in a read-only /usr that updates as one piece, and you can
roll back to the previous version. Image and system-extension applications
live under /usr. Your homes, Flatpak data, containers, and update state live
under /var.
Install
Section titled “Install”Firn is the installer. It needs UEFI and erases the disk you pick. It works with or without Secure Boot, TPM 2.0, and disk encryption, and asks you about each one. Use a disk of at least 30 GiB, and more if you plan to keep Flatpaks, containers, and several updates. The installer runs from RAM and needs at least 4.5 GiB of memory.
- Download the installer and its checksums:
- Check the signing key’s fingerprint and the ISO, then write the ISO to a
USB stick. The
installation guide
has the exact
gpgvandsha256sumcommands and the commands to write the stick. Read its warning on picking the right device. - Boot the stick. In Firn, pick the bootc Snow product, review the recipe Firn builds, and confirm the exact target disk.
- If Firn shows a recovery key, store it somewhere other than this disk before you continue.
- If Secure Boot is on, enroll the MOK when asked. Without it, the MOK-signed boot stage is not trusted while Secure Boot is enforced.
The native in the ISO address is an old folder name. It does not mean an
A/B install.
First boot
Section titled “First boot”Log in at the GDM screen with the user you created in Firn. Firn can install the chosen core Flatpak set as part of the recipe; if yours included it, the apps are already there. The image itself carries only the list.
At your first login, ChairLift’s first-login setup opens. It sets the light or dark style and offers Flatpak apps to install for your user. After you finish it, it does not open again. If you finished SNOW First Setup on an older Snow image, it does not open at all.
Check that the system is healthy:
systemctl is-system-runningsudo bootc statussudo snosi-update-status --checksystemctl list-timers bootc-update-stage.timerbootc status shows the booted and staged deployments, and names the image
it follows. If it shows null instead, see
Troubleshooting. snosi-update-status --check tells you
whether a newer image is published. The timer is listed with its next run.
Install applications as Flatpaks or as system extensions.
Do not install APT packages into /usr: an image update does not keep them.
The package lists in the build are not a package manager you can add to.
Updates and rollback
Section titled “Updates and rollback”Updates are automatic. Every hour, bootc-update-stage.timer checks for a
new image, pulls it with Podman, and stages it. The new version starts at your
next normal reboot. The stager does not force a reboot.
Enabled system extensions update on their own. A new version is staged and starts at the next boot. See Automatic updates.
The stager runs the bootc commands itself. You do not need to run them. On
the first staged update, while the host does not yet follow the image from
containers-storage, it runs bootc switch --transport containers-storage.
From then on, in steady state, it runs bootc upgrade, because a second
bootc switch to the same image would do nothing. Both paths verify the
staged digest before they report success.
To go back to the previous version:
sudo bootc rollbacksudo systemctl rebootHomes and container data in /var are shared by all versions, so a rollback
keeps them. After a rollback, the updater does not stage the version you
rolled back from again. It waits for the next published image.
Keep about twice the image size free in /var. The updater pulls each new
image into /var before it stages it.
Problems
Section titled “Problems”Snow checks itself for problems 3 to 8 minutes after boot, then about every hour. It records:
- a system service that failed
- an image update that could not be staged
- a system-extension update that failed
- a boot into an older image
- an encrypted disk that the TPM opened only after a retry, or that needed a passphrase or the recovery key
- an integrity error
- a crash of a system program
- a problem that a Frostyard system service recorded
The records stay on this computer.
To see them, open ChairLift and select Problems. The page comes with ChairLift v0.14.0. Each row says what happened and when. Expand a row for a hint, the details, and the Copy details and Dismiss buttons. A dismissed problem shows again if it happens again. The page also lists crashes of your own programs and problems that Frostyard apps recorded in the last 90 days. ChairLift sends nothing until you turn reporting on.
To read the system list in a terminal:
snosi-health --listEach line shows when the problem was last seen, its kind, a short summary,
and how many times it was seen. With no problems, it prints
No problems recorded and the time of the last check. If the command is
missing, the image is older than this feature: let it update, then reboot.
If ChairLift has no Problems page, the image may carry a ChairLift older
than v0.14.0: let it update, then reboot. On an image with ChairLift v0.14.0
or later, ChairLift hides the page when /etc/chairlift/config.yml
turns off all 3 of its groups, or when it shows a configuration error. Fix
the file and restart ChairLift.
Send problem reports
Section titled “Send problem reports”From ChairLift v0.15.0, the Problems page has a Send problem reports switch. It is off until you turn it on, and each user decides for themselves. Ask each time shows you each report before it goes. Send automatically sends without asking. Sent reports lists the 50 newest reports it sent. Crash records stay on this computer. The image gets ChairLift v0.15.0 with the next image release. The first-run setup can also show a Reporting step, with the switch off.
If there is no switch, the image may carry a ChairLift older than v0.15.0
(let it update, then reboot), or /etc/chairlift/config.yml turns off problems_reporting_group.
Read what a report holds and how to have one deleted in
Problem reports. Read how ChairLift decides what
to send in ChairLift ADR-0015.
A crash keeps no core file. The journal keeps the crash entry. It has a stack
trace only when the core is 1 GiB or smaller. To keep core files while you
debug a crash, set Storage=external in
/etc/systemd/coredump.conf.d/90-debug.conf:
[Coredump]Storage=externalThe image sets Storage=none in 50-snosi.conf, and the file that sorts last
wins. Give your file a name that sorts after 50-snosi.conf.
Apply it before you reproduce the crash:
sudo systemctl reload systemd-coredumpd.serviceIf that service is not running, there is nothing to reload: each crash then reads the file. A reboot also applies it.
What ships
Section titled “What ships”Snow is Base plus the bootc runtime, the bootc security setup, the Snow desktop, a kernel, and the image output format.
| Layer | What you get |
|---|---|
| Base | Debian Trixie userspace, systemd, the hourly update stager, Updex, and the system-extension definitions |
| Bootc runtime | bootc, libostree-1-1, and the packages OCI bootc needs |
| Desktop | GNOME Shell, GDM, Nautilus, Ptyxis, PipeWire, CUPS, Flatpak, and the desktop integration packages |
| Kernel | linux-image-amd64/forky for now, with most firmware and Mesa from trixie-backports |
| Core Flatpak set | Bazaar, Mission Center, Extension Manager, DistroShelf, and a set of GNOME apps. The image carries the list and an OCI label; Firn installs the apps when the recipe includes the core set. |
| Containers | Podman and Distrobox, plus systemd-container and the Frostyard Intune integration |
The table shows the main layers only. Snow also carries Homebrew
integration, frostyard-chairlift with its first-login setup, the Snow
Plymouth theme, the hotedge and Logo Menu GNOME extensions, and the Bazaar companion
build.
Snow uses the linux-image-amd64/forky kernel until the Trixie backports
kernel is complete. The build file for it is still called backports; the
name is out of date. Mesa and most firmware come from trixie-backports,
pinned in the same file. If you build Snow yourself, do not add second, unpinned copies
of them to the Snow package list.
The core Flatpak list is fixed at build time, and each build checks that the image’s copy matches it. Flathub may no longer offer every app on the list when you install.
Choose Snow
Section titled “Choose Snow”Choose Snow for a GNOME desktop. Do not use it as a server; Floe is the server image. The other products are:
- Snowfield: GNOME for Microsoft Surface devices. It is untested on representative Surface hardware; its hardware gate was waived for catalog inclusion.
- Sundog: KDE Plasma, bootc only.
- Floe: a headless server.
Base is the shared foundation, not a fifth installer choice. Snow has the Trixie userspace with a newer kernel. No per-product application test list exists yet.
Troubleshooting
Section titled “Troubleshooting”| Symptom | Check | Fix |
|---|---|---|
bootc status shows spec.image: null |
The host is not managed by bootc. It is most likely an old nbc or native A/B install. | See Moving from an nbc or A/B install. |
| No update is staged | systemctl list-timers bootc-update-stage.timer and journalctl -u bootc-update-stage.service |
Wait for the hourly run. Check the network and the free space in /var. |
| Staging fails for lack of space | Compare the free space in /var with the image size |
Free space or grow the disk. The updater needs room for the download, the new version, and the previous one. |
| Secure Boot or TPM does not behave as you expect | bootc status and the firmware settings |
Check the firmware settings, then read the Bootc Secure Operations runbook. Secure Boot is not production-ready yet. |
| You need to know how Snowfield behaves on a Surface | The Snowfield page and installer notes | Snowfield is a different image and is untested on Surface hardware. Snow results do not carry over. |
Moving from an nbc or A/B install
Section titled “Moving from an nbc or A/B install”Old nbc and native A/B installs get no new images or updates after 2026-09-30. There is no in-place conversion. Back up, install fresh with Firn, and restore your data.
The
migration runbook
lists what to save: your /etc changes, homes, Podman volumes, and
/var/lib/tailscale if you use Tailscale. Check the backup from another
machine before you erase the disk.
See also
Section titled “See also”- Install a Frostyard image
- Install, update, and roll back
- Docker system extension
- Incus system extension
- Tailscale system extension
- nbc to bootc migration runbook
- Bootc Secure Operations runbook
Sources
Section titled “Sources”Reviewed 2026-10-27 against snosi commit
b2858ca0222814c395cf8248db98f3e096d57dc9.
README.mdmkosi.profiles/snow/mkosi.confshared/composition/snow/mkosi.confshared/packages/snow/mkosi.confshared/packages/bootc/mkosi.confshared/kernel/backports/mkosi.confmkosi.images/base/mkosi.confflatpaks/snow.jsonflatpaks/core-flatpaks.pyshared/composition/core-flatpaks.postoutputmkosi.images/base/mkosi.extra/usr/libexec/bootc-update-stagedocs/installing.mddocs/bootc-secure-operations.mddocs/nbc-to-bootc-migration.mdmkosi.images/base/mkosi.extra/usr/lib/systemd/system-preset/05-updex.presetdocs/design/sysexts.md- First-login setup, reviewed 2026-11-05 against snosi commit
770f9a3c82c4bb7348f6c477fce08febf25554af(snosi#1224):docs/adr/0028-first-login-runs-chairlift-first-run.md,shared/snow/tree/etc/xdg/autostart/org.frostyard.ChairLift.FirstRun.desktop,shared/snow/tree/usr/share/snow/first-run/apps.json,shared/packages/snow/mkosi.conf
The Problems section was reviewed 2026-11-05 against snosi commit
b6e5e0769c605b920686c12bc7f0962caac10586 and ChairLift release v0.14.0
commit 54124831081796ffdadd4e10644fdc20719bf723
(release).
docs/adr/0029-snosi-health-records-problems.mddocs/integration-contracts.mdmkosi.images/base/mkosi.extra/usr/bin/snosi-healthmkosi.images/base/mkosi.extra/usr/lib/systemd/system/snosi-health.timermkosi.images/base/mkosi.extra/usr/lib/systemd/system/snosi-health.serviceshared/bootc-secure/mkosi.confshared/bootc-secure/tree/usr/lib/systemd/coredump.conf.d/50-snosi.conf- systemd v262
man/coredump.conf.xml(drop-in order,ProcessSizeMax=, reloadingsystemd-coredumpd.service) - ChairLift
README.md - ChairLift
docs/adr/0015-problems-page-and-opt-in-reporting.md - ChairLift
docs/specs/problems-page.md - ChairLift
config.yml - ChairLift
CONFIG.md - ChairLift
internal/views/pageview/problems.go
The reporting part was reviewed 2026-11-05 against ChairLift release v0.15.0
commit e3e434a2843512c99538c08070bafd1c965eb7f8
(release).