Declarative system changes
For historical reasons, the build side of rpm-ostree is fully declarative; it accepts treefiles as input. The client side is imperative, with a CLI and DBus API.
The goal of this feature is to unify things by supporting declarative client-side changes. The current implementation just exposes treefiles. Instead of typing e.g.
rpm-ostree install foo, you can add treefiles into
/etc/rpm-ostree/origin.d, and invoke
rpm-ostree ex rebuild to declaratively reconcile the system to that state.
For more background on this, see https://github.com/coreos/rpm-ostree/issues/2326
Example: Installing and removing packages as an atomic unit
$ mkdir -p /etc/rpm-ostree/origin.d $ cat > /etc/rpm-ostree/origin.d/mycustom.yaml <<EOF packages: - vim - NetworkManager-wifi override-remove: - moby-engine EOF $ rpm-ostree ex rebuild
Previously, this required a CLI invocation like
$ rpm-ostree override remove moby-engine --install vim --install NetworkManager-wifi
which is comparatively awkward and not very discoverable.
Note: Origin files are consumed after use
In the current design, these origin files are deleted after they are successfully used. The idea behind this is to avoid adding leftover files into the generated “image” state.
This semantic is still being debated and may change in the future.