Skip to content

2021.3

Compare
Choose a tag to compare
@cgwalters cgwalters released this 17 Mar 14:21
v2021.3
d24f7bb

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