Mastodon Skip to content

rpm-ostree

The rpm-ostree module offers pseudo-declarative package and repository management using rpm-ostree.

The module first downloads the repository files from URLs declared under repos: into /etc/yum.repos.d/. The magic string %OS_VERSION% is substituted with the current VERSION_ID (major Fedora version), which can be used, for example, for pulling correct versions of repositories from Fedora’s Copr.

You can also add repository files directly into your git repository if URLs are not provided. For example:

repos:
- my-repository.repo # copies in .repo file from files/rpm-ostree/my-repository.repo to /etc/yum.repos.d/

If you use a repo that requires adding custom keys (eg. Brave Browser), you can import the keys by declaring the key URLs under keys:. The magic string acts the same as it does in repos.

Then the module installs the packages declared under install: using rpm-ostree install, it removes the packages declared under remove: using rpm-ostree override remove. If there are packages declared under both install: and remove: a hybrid command rpm-ostree remove <packages> --install <packages> is used, which should allow you to switch required packages for other ones.

Installing RPM packages directly from a http(s) url that points to the RPM file is also supported, you can just put the URLs under install: and they’ll be installed along with the other packages. The magic string %OS_VERSION% is substituted with the current VERSION_ID (major Fedora version) like with the repos: property.

If an RPM is not available in a repository or as an URL, you can also install it directly from a file in your git repository. For example:

install:
- weird-package.rpm # tries to install files/rpm-ostree/weird-package.rpm

The module can also replace base RPM packages with packages from COPR repo. Under replace:, the module finds every pair of keys - from-repo: and packages:. (Multiple pairs are supported.) The module downloads the COPR repository file declared by - from-repo: into /etc/yum.repos.d/, and from that repository replaces packages declared under packages: using the command rpm-ostree override replace. The COPR repository file is then deleted. The magic string %OS_VERSION% is substituted with the current VERSION_ID (major Fedora version) as already said above. At the moment, only COPR repo is supported.

Additionally, the rpm-ostree module supports a temporary (waiting for rpm-ostree issue #233) fix for packages that install into /opt/. Installation for packages that install into folder names declared under optfix: are fixed using some symlinks.

Known issues

When removing certain packages, some problem probably in upstream rpm-ostree causes a depsolve issue similar to below.

Resolving dependencies...done
error: Could not depsolve transaction; 1 problem detected:
Problem: conflicting requests

Example configuration

type: rpm-ostree
repos:
- https://copr.fedorainfracloud.org/coprs/atim/starship/repo/fedora-%OS_VERSION%/atim-starship-fedora-%OS_VERSION%.repo # when including COPR repos, use the %OS_VERSION% magic string
- https://brave-browser-rpm-release.s3.brave.com/brave-browser.repo
keys:
- https://brave-browser-rpm-release.s3.brave.com/brave-core.asc
optfix:
- Tabby # needed because tabby installs into /opt/Tabby
install:
- starship
- brave-browser
- https://github.com/Eugeny/tabby/releases/download/v1.0.209/tabby-1.0.209-linux-x64.rpm
remove:
- firefox
- firefox-langpacks
replace:
- from-repo: https://copr.fedorainfracloud.org/coprs/trixieua/mutter-patched/repo/fedora-%OS_VERSION%/trixieua-mutter-patched-fedora-%OS_VERSION%.repo
packages:
- mutter
- mutter-common
- gdm

Configuration options

repos: (optional array)

List of links to .repo files to download into /etc/yum.repos.d/.

keys: (optional array)

List of links to key files to import for installing from custom repositories.

optfix: (optional array)

List of folder names under /opt/ to enable for installing into.

install: (optional array)

List of RPM packages to install.

remove: (optional array)

List of RPM packages to remove.

replace: (optional array)

List of configurations for rpm-ostree override replaceing packages.