Skip to main content

Fedora 45

A shipped DeskOS platform, compiled onto Fedora's own Silverblue bootc image. GNOME 51 comes from the vendor, so the desktop is the one Fedora validates rather than one DeskOS assembles from fedora-bootc.

The base​

quay.io/deskos/fedora-silverblue:45, a mirror of the vendor image, pinned by digest in resources/platforms/fedora-45.yaml.

Fedora publishes only moving tags and stops serving an old digest within days, so a commit that pins the vendor's digest stops resolving. The mirror copies the current image into DeskOS's namespace with --all --preserve-digests, keeping the vendor's index digest and every manifest. It is refreshed by a person, never on a schedule:

gh workflow run mirror-fedora.yml --repo deskosproject/deskos-core --ref main

The job prints the source digest. Bumping the pin is a pull request: set spec.bootc.image to the mirror and spec.bootc.digest to that digest.

Silverblue, not quay.io/fedora/fedora-bootc: measured on the minimal base (:44 and :45, 2026-10-17), it has no gnome-shell, no gdm, no gnome-initial-setup, no Flatpak, no Plymouth, no fedora-logos and no gtk-update-icon-cache. A DeskOS workstation on it would be a desktop DeskOS invented. Silverblue carries all of them as distribution packages: gnome-shell 51.0, gdm 51.0, nautilus 51.0.1, gnome-software 51.0 and firefox 158.0.1 (measured 2026-10-30), 1509 packages in total.

Repositories​

The base enables fedora, updates, updates-archive and Fedora's openh264 repository, read from /usr/share/dnf5/repos.d rather than /etc/yum.repos.d, and it does not enable updates-testing. The resource decides which compose a build gets; the repositories follow the pinned image.

Fedora 45 moved those definitions with Changes/RelocateRpmRepoConfigsToUsr. bootc-image-builder still reads /etc/yum.repos.d when it builds the installer, and stopped with NoReposError: There are no enabled repositories (run 41140733589). The platform declares repoConfigDirs: [/usr/share/dnf5/repos.d], so the image carries the same files in both places and dnf5 keeps reading the new one.

Silverblue keeps OSTree's strict layout: /opt is a symlink to var/opt and /usr/local to ../var/usrlocal, so a package or artifact that installs there writes to /var, which an image does not ship. The platform declares imageOwnedDirs: [/opt, /usr/local] and the build replaces both symlinks with real directories before the first package transaction. Content an installed machine had in /var/opt or /var/usrlocal stays there and is not moved (migrations).

What DeskOS adds​

The GNOME base stays distribution packages; only an organization's extra applications go to Flatpak (ADR 0005). Fedora's own firefox RPM is the browser, not a Flatpak: it is already in the base, and naming it in PackageSet/firefox keeps the same browser on every flavor. The platform installs workstation-product-environment to complete the desktop, removes GNOME Software so Bazaar is the application store (ADR 0022), and declares the terminal, the extensions and the boot arguments as facts, the same way the EL10 platforms do.

The workstation carries deskos-look, so Fedora boots with the DeskOS splash: Plymouth's stock spinner frames from the vendor package, made the default theme and copied into the initramfs, which the build asserts. Fedora's own wallpaper is replaced by the DeskOS one, the same as on every flavor (desktop parity); a workstation that wants only the boot behaviour and not the look takes deskos-boot. The platform also names Adwaita Sans and Adwaita Mono, the families its base already ships, so the desktop is drawn in the same families as CentOS Stream 10.

Status​

Composes and rendersvalidated by the compiler tests and checks.yml
Image builtCI, every pull request
Booted and checkedCI: GNOME, session check
Published imagenot yet
System Flatpakpreinstall

The package manifest (ADR 0028) is not declared yet: the group resolution has to be measured on the mirrored digest and committed, which is the next step before publication.