# rpm-ostree

| Name       | Base distribution  |
| ---------- | ------------------ |
| Kinoite    | Fedora KDE         |
| Silverblue | Fedora Workstation |

## TL;DR

Changes to the base layer are executed in a new bootable filesystem root. This means that the system must be rebooted after a package has been layered.

```sh
# Check for available upgrades.
rpm-ostree upgrade --check

# Upgrade the system.
rpm-ostree upgrade

# Install packages.
rpm-ostree install kmod-nvidia xorg-x11-drv-nvidia

# Override packages.
rpm-ostree override replace \
  local/path/to/podman-3.1.2-1.fc34.x86_64.rpm \
  https://kojipkgs.fedoraproject.org/packages/podman/3.1.2/1.fc34/x86_64/podman-plugins-3.1.2-1.fc34.x86_64.rpm

# Remove packages.
# Packages will still exist in the undelying base layer, but will not appear
# in the booted root.
rpm-ostree override remove nano

# Rollback.
rpm-ostree rollback

# Make changes to the kernel's boot arguments.
rpm-ostree kargs \
  --append=rd.driver.blacklist=nouveau \
  --append=modprobe.blacklist=nouveau \
  --append=nvidia-drm.modeset=1

# Preview changes on the current filesystem.
rpm-ostree ex apply-live
```

## Package layering

Package layering works by modifying your Silverblue installation by extending the packages from which Silverblue is composed.

Using package layering creates a new _deployment_, or bootable filesystem root which **does not** affect your current root. This means that the system must be rebooted after a package has been layered.

If you don't want to reboot your system to switch to the new deployment, you can use `rpm-ostree ex apply-live` to update the current filesystem and be able to see the changes from the new deployment. It's generally expected that you use package layering sparingly, and use [flatpak]s and [toolbox].

## Further readings

- [rpm-ostree]
- [Fedora Silverblue user guide]
- [Flatpak]
- [Toolbox]

[flatpak]: flatpak.md
[toolbox]: toolbox.md

[fedora silverblue user guide]: https://docs.fedoraproject.org/en-US/fedora-silverblue/
[rpm-ostree]: https://coreos.github.io/rpm-ostree/
