2021.1
rpm-ostree ex apply-live
In this release, the functionality formerly known as rpm-ostree ex livefs
is now known as rpm-ostree ex apply-live
, and it's been placed on a much firmer technical foundation and is considered much safer to use. It's still under ex
because we may make some interface changes, and we hope to gather feedback.
Concretely apply-live
now uses a "transient" overlayfs
instead of mutating any persistent filesystem. This makes it robust against power loss while the running filesystem is being changed. We no longer push a rollback deployment, etc. Stated a different way: if something goes wrong, all you need to do is reboot.
Countme support
rpm-ostree now ships an rpm-ostree-countme.timer
unit which fulfills the same purpose as the DNF countme feature. This will allow Fedora counting of installed systems to include rpm-ostree-based variants like Fedora CoreOS, Fedora Silverblue, and Fedora IoT, while still preserving user privacy.
Note the unit is currently not enabled by default. For more information, including how to disable it, see the docs.
override replace directly from Bodhi/Koji
Another notable feature in this release is support for directly pulling builds from current Fedora testing/build tools Bodhi and Koji.
Now with rpm-ostree v2021.1 you can run e.g.:
$ rpm-ostree override replace https://bodhi.fedoraproject.org/updates/FEDORA-2020-2908628031
to directly pull in a single Bodhi update applied relative to your booted system (presumably a stable
stream) without changing anything else. You can also pull in Koji builds (that may or may not be in a Bodhi update):
$ rpm-ostree override replace https://koji.fedoraproject.org/koji/buildinfo?buildID=1625029
This allows you to more directly interact with Bodhi's current model of testing individual updates.
Note that like all usage of override replace
, these versions are "pinned" until explicitly removed with a variant of rpm-ostree override reset
.
(This does combine with apply-live
so you can more easily test out changes)
Default to sqlite in F34+
Fedora 34 rpm-ostree based systems will switch to the sqlite backend by default, silencing a warning about use of the bdb backend.
Shared library "hollowed out"
Quite a while ago rpm-ostree started shipping a shared library librpmostree-1.so.1.0.0
; mainly it's used by e.g. gnome-software to display package diffs between ostree commits. However this created a problem later because we duplicated a lot of code between our binary and the shared library, and that in turn caused unnecessary bloat. The build system and implementation of the shared library was reworked to fork off the binary and parse its output. This reduced the size (debug symbols stripped) from ~2.6MB to 320k (-~88%).
Internals: FFI and Rust
Large portions of rpm-ostree have already been ported to the Rust programming language, in order to improve the overall level of safety and resilience of the project.
To further accelerate this transition, since the last release we are using cxx.rs as a code generation helper, which has the compelling feature of supporting fully safe bidirectional calls between C++ and Rust.
This required switching the C code to "C that builds in C++ mode". For the sake of clarity though, the goal here is to accelerate our transition to Rust, not to rewrite rpm-ostree code in modern C++.
Colin Walters (123):
main: Convert to C++
Port rpmostree-sysroot-upgrader to C++
Port rpmostree-sysroot-core to C++
Port rpmostree-deployment-utils to C++
Port rpmostreed-os to C++
Port rpmostreed-transaction-types to C++
Rename `ex livefs` to `ex apply-live`
apply-live: Print a success message
service: Explicitly RequiresMountsFor=/boot
transaction: Also log to journal when processes connect to txn
msrv: Bump to Rust 1.48.0
daemon: Record the agent ID in the journal
spec: Propagate Fedora default rustflags
Port rpmostree-output to C++
Port rpmostree-composeutil to C++
Port rpmostree-passwd-util to C++
shlib: Make basearch APIs call `/usr/bin/rpm-ostree shlib-backend`
lib: Drop dependencies on internal librpmostree-priv
buildsys: Compile daemon code directly with binary
tests: Disable C unit tests
buildsys: Unify build of binary and internal shared library
lib: Make varsubst_basearch propagate errors
More C++ porting, round 6
Port rojig2commit to C++
Port compose-builtin-rojig to C++
Port rpmostree-util to C++
Port rpmostree-libbuiltin to C++
Port rpmostreed-transaction-livefs to C++
Port rpmostree-refts to C++
Port rpmostree-libarchive-input-stream to C++
Port rpmostree-scripts to C++
Port rpmostree-unpacker-core to C++
Port rpmostree-importer to C++
Port rpmostree-rojig-client to C++
Port rpmostree-origin to C++
Port rpmostree-rojig-assembler to C++
Run rustfmt, and fix CI check for it
Port rpmostree-json-parsing to C++
Port rpmostree-editor to C++
Port rpmostree-pkg-builtins to C++
Port rpmostree-builtin-reset to C++
Port rpmostree-builtin-override to C++
Port rpmostree-builtin-usroverlay to C++
Port rpmostree-builtin-refresh-md to C++
Port rpmostree-builtin-livefs to C++
Port rpmostree-builtin-upgrade to C++
Port rpmostree-builtin-rollback to C++
Port rpmostree-builtin-deploy to C++
Port rpmostree-builtin-reload to C++
Port rpmostree-builtin-rebase to C++
Port rpmostree-builtin-cancel to C++
Port rpmostree-builtin-cliwrap to C++
Port rpmostree-builtin-cleanup to C++
Port rpmostree-builtin-initramfs to C++
Port rpmostree-builtin-initramfs-etc to C++
Port rpmostree-builtin-status to C++
Port rpmostree-builtin-ex to C++
Port rpmostree-builtin-testutils to C++
Port rpmostree-builtin-shlib-backend to C++
Port rpmostree-builtin-db to C++
Port rpmostree-builtin-start-daemon to C++
Finish removing `ex container` code
Port rpmostree-builtin-finalize-deployment to C++
Port rpmostree-db-builtin-dif to C++
Port rpmostree-db-builtin-list to C++
Port rpmostree-db-builtin-version to C++
Port rpmostree-override-builtins to C++
Port rpmostree-polkit-agent to C++
Port rpmostree-builtin-kargs to C++
Port rpmostree-builtin-compose to C++
Port rpmostreed-daemon to C++
Port rpmostreed-utils to C++
Port rpmostreed-sysroot to C++
Port rpmostreed-errors to C++
Port rpmostree-package-variants to C++
Port rpmostreed-os-experimental to C++
build-sys: Remove --enable-installed-tests
build-sys: Remove --with-bubblewrap
build-sys: Remove RHEL7 autotools backport
build-sys: Drop autoconf bits to find dbus service directory
apply-live: Print a package diff
buildsys: Make one big rpmostreeinternals.la, enable unit tests again
ci: Introduce install-extra-builddeps.sh
Use cxx-rs for core.rs
Use cxx-rs for utils.rs download_to_fd
Use cxx-rs instead of gresources
Move "ignored script list" to Rust, drop gperf
Rework bindgen/cxx.rs usage and CI build
Makefile.bindings: Use content-based change detection
Add a partial reimplementation of origin parsing in Rust
ci: Don't run autotools twice
Add support for some GObject bridging to cxx-rs
Bump to cxx-rs 1.0.20
Use cxx-rs for live-apply
lib: Cleanup `#include <>`s
Port initramfs Rust code to cxx-rs
util: Remove `#ifdef __cplusplus`
Move some client argument handling to Rust
Complete move to cxx-rs for utils
Port cliwrap FFI to cxx-rs
Port composepost to cxx-rs
tests: Fix rsync of base rpmdb with sqlite
Port Rust journal bits to cxx-rs
Add fedora-integration: Support `override replace https://bodhi/...`
Also print Rust-side features/cfg in `rpm-ostree --version`
With vendored source, use cargo build --offline
configure: Update contact email
Rename livefs → apply-live in more places
journal: Add filters for _UID=0
testutils: Port to cxx-rs
Add a Rust helper to create a sealed memfd, use in shlib backend
scripts: Pass script as a memfd
testutils: Add script-shell, remove shell wrapper
apply-live: Avoid clobbering changes in /etc
rust: Add CxxResult
rust: Update to openat-ext 0.1.10
rust: Fix a pub(crate) warning, add a few doc comments
apply-live: Extend /etc test case
rust: Port progress.rs to cxx-rs
scripts: Use bwrap --ro-bind-data rather than mutating target
scripts: Rework /var/lib/rpm-state creation, port to new style
Release 2021.1
Update configure.ac
Jonathan Lebon (8):
Default to sqlite rpmdb backend on f34
Makefile-rpm-ostree: fix path to cbindgen.toml
spec: Minor tweaks
ci/install-extra-builddeps: Drop --root=/usr arg
ci: Add `~/.cargo/bin` to PATH in Prow path as well
Makefile-rpm-ostree: Link to librt
core: Allow overriding downloaded RPMs target dir
app/compose: Drop rojig-related prototypes
Luca BRUNO (1):
libpriv/passwd: move passwd database to Rust
Timothée Ravier (3):
countme: Add DNF Count Me support
Cargo.lock: Update for DNF Count Me support
Remove now unused mkdocs.yml
dependabot[bot] (4):
build(deps): bump libdnf from `028bc35` to `0aa50cc`
build(deps): bump libdnf from `0aa50cc` to `2ee2a47`
build(deps): bump cbindgen from 0.15.0 to 0.16.0 in /tooling
build(deps): bump libdnf from `2ee2a47` to `45981d5`