First Login

Filesystem Layout

The root filesystem has the immutable attribute set on OSTree installations, so /, /usr and everything below it is readonly. /var is where all the runtime state is kept. There are some symlinks that put the state-carrying directories in their traditional, expected place:

  • /home/var/home

  • /opt/var/opt

  • /srv/var/srv

  • /root/var/roothome

  • /usr/local/var/usrlocal

  • /mnt/var/mnt

  • /tmp/sysroot/tmp

and so on. If you have a separate home partition on your system, it should be mounted on /var/home.

For a more detailed explanation of the system layout, refer to the excellent libostree documentation on this subject.

Packaging: ostree, rpms, flatpaks and containers

ostree is responsible for deploying and updating the OS image (ie everything below / that is not symlinked into /var). ostree also contains the necessary logic to update grub.cfg entries to point to the current image.

rpm-ostree builds on top of ostree, and makes it possible to install rpms as a 'layer' on top of an ostree image. In practice, that means you can install rpms as usual, just use rpm-ostree install instead of dnf install. What happens under the covers is that rpm-ostree will compose a new OS image by adding the rpm payload to the existing OS image, and creating a new, combined image. To see the newly installed rpms, you have to reboot into the new image. rpm-ostree also takes care of recreating the layered image whenever you update the base OS image.

flatpak uses container technologies to deploy and run desktop applications isolated from the underlying OS.

You can of course use other container tools like podman or buildah to run other containers on a Silverblue system.

Using Flatpak

If you don’t want to use the flatpak commandline tools, GNOME Software has excellent support for installing Flatpaks. There are several repositories that provide Flatpaks.

Once you have repositories enabled, you can use GNOME Software’s excellent support for searching Flatpaks. Or you can use flatpak search command.

Using Package Layering

Package layering works by re-composing the OS image locally, while adding extra rpm packages to it. This is done with the rpm-ostree install command. Once a package has been layered, rpm-ostree will keep it up-to-date for you and recreate the layer when you install a newer OS image.

You can also remove a package from OS image. The command to do this is rpm-ostree override remove.

rpm-ostree does not currently have an equivalent to the dnf search command for finding packages in the configured repositories. As a workaround, you can run dnf in a temporary container like this:

$ sudo podman run --rm fedora:28 dnf search (1)
1 provide your search term

Enabling third-party RPM Repositories

Silverblue installs a number of yum repositories containing useful software that is not part of Fedora proper for various reasons. You can enable these repositories either during the initial setup of an new install, or from the "Software Repositories" dialog in GNOME Software.