2021.3
rpm-ostree v2021.3
Client side improvements
A new rpm-ostree-countme.timer
unit is introduced. This implements https://fedoraproject.org/wiki/Changes/DNF_Better_Counting so that rpm-ostree based host systems can be counted in the same way. There are plans to enable this by default for Fedora 34.
An additional flag rpm-ostree install -A/--apply-live <packages>
stabilizes a subset of rpm-ostree ex apply-live
to queue a change for the next boot and also apply that change live.
Update driver checking
For many systems, rpm-ostree
is just a "backend" for OS updates being controlled by an external process. This was formalized a bit in the previous release with the addition of --register-driver
. In addition to rpm-ostree upgrade
, deploy
and rebase
will now also error out if an upgrade driver is registered; this check can be skipped with --bypass-driver
.
Overall
Several new documentation pages:
As well as updates to the man pages and README.md
.
Internals
Compared to 2020.8, the share of Rust code increased from ~10% to ~18%, and C/C++ decreased correspondingly from 88% to 79%. This is the result of new features that have been directly implemented in Rust, plus some existing core logic that has been ported over.
In particular, chunks of the compose side postprocessing such as handling of the /etc/{passwd,group}
has been almost completely ported to Rust, as well as the apply-live
functionality. Instead, the new countme
logic has been directly implemented in Rust.
More internal APIs for e.g. progress output and RPM diffing are exposed to Rust, which will make it much easier to port further code.
We dropped use of cbindgen
, so we now use only one bridge API cxx.rs internally. Though glib-rs is heavily used as well.
Thanks to all contributors!
Timothée Ravier (7):
countme: Persist last timer trigger to handle system suspends
Install rpm-ostree sysusers config and countme units
rust: Relicense some GPL-2.0-or-later to Apache-2.0 OR MIT
Remove rpm-ostree sysusers config
countme: Refuse to run as root
rpm-ostree-countme.timer: Fix AccuracySec and add OnBootSec
Install a temporary copy of rpm-ostree for unprivileged use
Jonathan Lebon (11):
Finish moving lockfile to cxx.rs
app/override: Hint at `rpm-ostree override reset`
compose/extensions: Handle no --base-rev
lockfile: Allow specifying EVR rather than EVRA
lockfile: Drop ror_ prefix
lockfile: Return LockfileConfig rather than Vec<StringMapping>
Kelvin Fan (3):
app/dbus-helpers: Factor out updates driver-related functions
app/{deploy,rebase}: Do not deploy/rebase if updates driver registered
app/dbus-helpers: Don't error out if caller is updates driver
Luca BRUNO (9):
rust: add missing SPDX-License-Identifier tag
libpriv/passwd: move compose preparation to Rust
libpriv/passwd: remove unused functions
treefile: add getters for check-passwd and check-groups
libpriv/passwd: move UID/GID checker to Rust
cargo: sort dependencies
cargo: add maplit
rust/treefile: add support for check-passwd/groups data entries
passwd: minor cleanups
Colin Walters (78):
rust: Fix some misc clippy lints
rust: Quiet clippy Vec<Foo> arg
rust/extensions: Fix two clippy lints
rust/countme: Fix clippy lint by refactoring serialization
Add gobj_rewrap() API to pass glib-rs objects back to C++
ci: Add Prow e2e testing
daemon: Refactor deployment variant generation code
Add daemon.rs with one helper function, use it from C++
app: Rename livefs.cxx → apply-live.cxx
daemon: Rename transaction_livefs → transaction_apply_live
Add a C++ rpmdb-diff API wrapping the C one, bind in Rust
Fix progress API to have "output message" separate from task
apply-live: Move client-side finish to Rust
apply-live: Delete code to check for live commit post-txn
codestyle: Remove tabdamage.txt in OK case
rust: Add SPDX-License-Identifier and validate it in ci/codestyle.sh
lockfile: Be robust to non-seconds-since-epoch repodata
docs/HACKING.md: Various updates
daemon: Move some "deployment variant" generation to Rust
ci: Drop tests/vmcheck/image.qcow2, use COSA_DIR/.cosa
ostree_utils: Add a workaround for optional ref
apply-live: Rework to use refs to store state
docs/architecture-core.md: New file
daemon: Heap allocate GVariantDict to pass to Rust
daemon: Fix crash on upgrade with remote:checksum
client: Remove peer_pid value from option parsing
tests/vmcheck: Use .cosa over COSA_DIR
ex: Drop erroneous REQUIRES_ROOT flag on apply-live, initramfs-etc
tests/apply-live: Upgrade+liveapply no-package changes
cxxrsutil: Generalize cxxrs_bind! macro
tests: Add RPMs to installed kola tests, port layering-local
Introduce CxxGObjectArray, use in lockfile code
Remove cbindgen
app: Rename dbus-helpers to clientlib
app: Factor out a helper function to register as a client
Add basic Rust CLI bindings for DBus
Add more client Rust bindings, port apply-live builtin
apply-live: Fix --target option
man: Add docs for apply-live
design/package-layering.md: Remove
rust/client: Extend with more metadata for zincati
rust/client: Add a CliClient with agent ID, require for status
rust/client: Add methods to find/require booted deployment
rust/client: Add Deployment/get_base_commit() API
client: Add API to fetch base commit metadata
rust/client: derive(Debug, Clone)
daemon: Move a bit more deployment-variant code to Rust
live: Pass options GVariant down
live: Use a shared constant for option
live: Hold a single sysroot object
tests: Port apply-live to kola ext tests
live: Disallow replacement/removal by default, add --allow-replacement
install: Add --apply-live
Move some small daemon layering lookup into Rust
ci/prow: Install in target cosa, also install and run our tests
rust: Add and use fn-error-context
rust: Support context attribute on CxxResult, use it more
docs: Add apply-live
tests: Drain vmcheck/test-misc-1 into kola/misc.sh
live: Don't output "services restart" for pure package additions
ci: Add composepost-checks.sh, drop a compose test
daemon: Fix serialization of unlocked state
Oxidize postprocessing `altfiles` addition to `/etc/nsswitch.conf`
Move high level bwrap postprocess interface to C++
postprocess: Move script execution to Rust
postprocess: Move add-files handling to Rust
postprocess: Move treefile externals sanitycheck to Rust
Move units/machineid-compat checking to treefile in Rust
Move writing /usr/share/rpm-ostree/treefile.json to Rust
rust: Introduce systemd-run based isolation mod, use in live
composepost: Clean up imports
rust: Rename progress.rs to console_progress.rs
Add Rust progress task wrapper
postprocess: Use a single entrypoint to Rust
postprocess: Move rpmdb symlink to Rust
postprocess: Remove redundant renames of etc -> usr/etc
rust/composepost: Cleanup Treefile import
Move `units` and `default-target` processing to Rust