Skip to content

Releases: coreos/rpm-ostree

2021.12

06 Oct 17:17
v2021.12
Compare
Choose a tag to compare

There's a notable new feature in this release from our Outreachy intern, which
is that override replace learned experimental support for fetching from
rpm-md repos. This makes it a bit easier to find newer (or older) packages
from repos.
PR: #3092

A notable bugfix is that rpm-ostree rebase now accepts ostree:// as a
prefix again, which fixes gnome-software:
PR: #3157

Other fixes include kernel overrides with newer depmod, and a docs tweak.

Thanks to all contributors!

Colin Walters (6):
      rust: Use `opt-level=1` for default `dev`
      extensions: Add support for per-extension repos and modules
      main: Remove pointless `async { ... }` + `.await` pair
      main: Remove lots of `Some` matching
      rebase: Parse `ostree://` prefix again
      Release 2021.12

Jonathan Lebon (2):
      libpriv/kernel: Handle new modules.builtin.alias.bin depmod file
      libpriv/kernel: Point to depmod source of truth

Rafael G. Ruiz (1):
      override replace: add experimental options

Zhangyuan Nie (1):
      docs: fix hyperlinks in architecture-daemon.md

dependabot[bot] (10):
      build(deps): bump tokio from 1.11.0 to 1.12.0
      build(deps): bump subprocess from 0.2.7 to 0.2.8
      build(deps): bump libc from 0.2.102 to 0.2.103
      build(deps): bump cxx from 1.0.54 to 1.0.55
      build(deps): bump tracing from 0.1.27 to 0.1.28
      build(deps): bump serde_json from 1.0.67 to 1.0.68
      build(deps): bump system-deps from 4.0.0 to 5.0.0
      build(deps): bump cxx-build from 1.0.54 to 1.0.55
      build(deps): bump nix from 0.22.1 to 0.23.0
      build(deps): bump curl from 0.4.38 to 0.4.39

Git-EVTag-v0-SHA512: dd71cae4fab04ce0b8e1ab495afb2d3b5ed6620510bf71ce1eb7666d1b50cc873e53da4f1174905985e0b989c7f88159ca82cb9a441f730d04ca98e449a8441b

2021.11

24 Sep 18:10
v2021.11
3e787ce
Compare
Choose a tag to compare

Mainly smaller minor fixes; the main new feature here is support for modularity in extensions.

Support for the still-experimental "ostree native containers" is updated to the latest 0.3 release of https://crates.io/crates/ostree-ext

Colin Walters (12):
      rust: Fix some clippy lints
      treefile: Fix a clippy lint
      rust: Fix clippy lint for extra `&`
      Add --enable-bin-unit-tests
      rust: Fix misc clippy lints
      rust: Fix two clippy errors
      rust: Fix more clippy lints
      rust: Allow a few clippy lints
      rust: Fix a clippy lint about manual `strip_prefix()`
      tests/misc: Update regexp to match fixed ostree error
      Bump to ostree-rs-ext 0.3
      Release 2021.11

Evan Anderson (1):
      scripts: Ignore glibc-gconv-extra lua script in %post

Jonathan Lebon (2):
      extensions: support enabling/installing modules
      tests/kolainst: Check layering of `cri-o:1.20/default`

Timothée Ravier (1):
      gitignore: Add /api-doc/Makefile{,.in}

dependabot[bot] (21):
      build(deps): bump cxx-build from 1.0.52 to 1.0.54
      build(deps): update system-deps requirement in /rust/libdnf-sys
      build(deps): bump cxx from 1.0.52 to 1.0.54
      build(deps): bump libc from 0.2.100 to 0.2.101
      build(deps): bump libdnf from `387bd99` to `c8ccabc`
      build(deps): bump system-deps from 3.2.0 to 4.0.0
      build(deps): bump serde_json from 1.0.66 to 1.0.67
      build(deps): bump tokio from 1.10.0 to 1.11.0
      build(deps): bump serde_yaml from 0.8.19 to 0.8.20
      build(deps): bump futures from 0.3.16 to 0.3.17
      build(deps): bump structopt from 0.3.22 to 0.3.23
      build(deps): bump serde from 1.0.128 to 1.0.130
      build(deps): bump libdnf from `c8ccabc` to `4c7511c`
      build(deps): bump memfd from 0.4.0 to 0.4.1
      build(deps): bump anyhow from 1.0.43 to 1.0.44
      build(deps): bump tracing-subscriber from 0.2.20 to 0.2.22
      build(deps): bump serde_yaml from 0.8.20 to 0.8.21
      build(deps): bump tracing from 0.1.26 to 0.1.27
      build(deps): bump libdnf from `4c7511c` to `e5ecbc1`
      build(deps): bump tracing-subscriber from 0.2.22 to 0.2.24
      build(deps): bump libc from 0.2.101 to 0.2.102

2021.10

26 Aug 15:11
v2021.10
Compare
Choose a tag to compare

Release 2021.10

This is a small release mostly to fix a bug in the modularity code. Other
notable changes are:

  • container pulls now respect cancellation
  • systemctl status when called from the client to diagnose daemon failures now
    uses --no-pager
Colin Walters (4):
      Set up Tokio runtime in main()
      upgrader: Make container pulls cancellable
      client: Use `--no-pager` for `systemctl status`
      rust: Drop use of ostree-rs-ext VariantDictExt, bump glib

Jonathan Lebon (2):
      Merge pull request #3093 from coreos/dependabot/submodules/libdnf-387bd99
      Release 2021.10

2021.9

19 Aug 19:51
v2021.9
1c90027
Compare
Choose a tag to compare

Procedural note: We tagged v2021.8, but never made it an official release because it was belatedly noticed that modularity support wasn't flagged sufficiently experimental. So the logical history is now v2021.7..v2021.9.

Client side

The biggest change here is initial support for modularity, both on the compose side (via a new modules: treefile key) and on the client side (via e.g. rpm-ostree ex module install) (#2760). Note that support for modules is still experimental.

The daemon now periodically logs download progress for the base ostree to the systemd journal.

A new experimental rpm-ostree override replace --ex-pin-from-repos $package is now available (new contributor @Razaloc). This makes it easier to pull in packages newer than are in the base image for testing. (#2905)

The daemon now works when polkit is not available (#3019).

Some smaller fixes for "ostree-in-container" integration (#3010, #3011).

Build/compose side

The rpmdb key now supports two new keys: host and target (#3002). The latter causes the rpmdb of the compose to use the native format of the rpm version in the compose itself. In general, one probably always wants target, which is the new default. See documentation for full details.

Internals

Some smaller ongoing oxidation (conversion of C/C++ to Rust) on the order of 500 lines.

The codebase now more consistently uses GError on the C/C++ side instead of exceptions. Related to this, a number of "error prefixing" changes landed which will help debug errors.

Updated to ostree-rs-ext 0.2.2.

Various CI improvements.

Thanks to all contributors!

Benjamin Gilbert (2):
      workflows: bump lint toolchain
      workflows: limit permissions to reading repo contents

Colin Walters (43):
      Directly invoke cliwrap code from Rust
      daemon: Move more deployment-variant bits to Rust using treefile
      rust/main: Move all real logic into inner_main()
      Move all error printing into Rust
      main: Add comment noting to use inner_main()
      docs: Add experimental/cliwrap
      upgrader: Inline the check for local assembly
      transactions: Only open up sepolicy once when importing
      Support `rpmdb: host` and default to `target`
      upgrader: Print messages when we're fetching container bits
      Add container image digest and print it in status
      compose: Add error prefixing when writing compose JSON
      db: Prefix error when we fail to load the rpmdb
      os: Minor code style cleanup
      daemon: Authorize uid 0 when polkit is not available
      Move `usroverlay` code into Rust
      compose: Add error prefixing for local pull
      ci: Install system deps before cxxbridge
      build-sys: Install cxxbridge in target/
      Add .copr/Makefile
      Update to glib 0.14 + ostree 0.8 + ostree-rs-ext 0.2
      postprocess: Oxidize directory size counting
      rust: Almost entirely empty out our variant_utils.rs
      origin: Change change handling to saturate at `TRUE`
      Add some more debugging bits when replacing kernel
      deploy: Only hold local variant pointer, not in struct
      origin: Make some package/module mutation functions no-ops for NULL
      daemon: Move more deploy transaction init into execute()
      deploy: Move local_repo_remote_dfd into function scope
      deploy: Move install_local_pkgs into function scope
      deploy: Move package overrides into function scope
      origin: Change add_packages to ignore NULL
      Use gobject-sys via re-exported `glib::gobject_ffi`
      Use gio-sys via re-exported `gio::ffi`
      Use glib-sys via re-exported `glib::ffi`
      rust: Update to ostree-ext 0.2.2 (and deps), use unified import
      daemon: Inline variable declarations for txn progress
      daemon: Inline parsing of ostree progress
      daemon: Fix elapsed_secs
      Oxidize transaction progress rendering
      libdnf-sys: Drop glib dependency
      daemon: Emit transaction progress to journal every 15s (if changed)
      Release 2021.8

Jonathan Lebon (10):
      rust/utils: Mark `:` as shell-safe
      rust/utils: Add safe wrapper for print_treepkg_diff_from_sysroot_path
      daemon/upgrader: Drop unused variable
      core: Drop duplicate querying for enabled repos
      tests/kolainst: Nuke `tests/kola` before regenerating
      Add support for modules
      src: Wrap all throwable CXX calls in try-catch
      src: Simplify CXX_TRY_VAL macro
      core: Disable all modules upfront
      core: Use new API for disabling all modules

Luca BRUNO (7):
      builtins/compose: move /dev preparation to Rust
      builtins/compose: move basearch and pretty-print logic to Rust
      builtins/compose: always return computed input-hash
      builtins/compose: drop an automatic-error-prefix macro
      compose/commit: decouple JSON summary logic, move stats to Rust
      clientlib: add more error contexts
      libpriv/diff: allow missing rpmdb

Rafael G. Ruiz (1):
      override replace: add experimental option ex-pin-from-repos

v2021.7

19 Jul 13:54
v2021.7
Compare
Choose a tag to compare

rpm-ostree now has experimental support for rebasing and updating directly
from a container registry. This leverages the recent work to encapsulate OSTree
commits into bona fide OCI images. The idea is to make the process of
publishing, mirroring, and updating similar to other container images in
environments where they are the primary transport, such as OCP.

There are improvements to status reporting when the daemon fails to start.
First, the client will now explicitly perform a systemctl start rpm-ostreed
before trying to contact the daemon and print its output if the daemon failed to
start. Second, the daemon now sets any startup errors as the status of the
rpm-ostreed.service unit to make it easier to see.

Composes now support targeting a system using the bdb rpmdb backend even if
the build environment's rpm does not support writing it. This is important for
being able to compose RHEL8 from Fedora (as done by coreos-assembler for RHEL
CoreOS).

The rpm-ostree install --apply-live option has now been stabilized at the
D-Bus API level.

As usual, there are a lot internal work happening. More code has been moved to
Rust. Also, various representations of the system's state are being deduplicated
and standardized on the treefile format.

And of course, many other fixes and minor improvements!

Benjamin Gilbert (1):
      OWNERS: remove

Colin Walters (34):
      spec: Disable LTO on 32 bit architectures
      origin: Remove unnecessary sync
      Add derivation fields to treefile, map origin → treefile
      rust/treefile: Add derives for PartialEq+Eq
      rust/origin: Triple check roundtrip of treefile
      rust/origin: Validate that we have refspec/baserefspec
      daemon: If we encounter a startup error, set it as our unit status text
      clientlib: Use atomics for mainloop completion
      treefile: Rename `from` to `base_refspec`
      Stabilize `apply-live` flag for deploy, use in `rpm-ostree install -A`
      client: Explicitly `systemctl start rpm-ostreed` if root, dump status
      core: Remove ignore-scripts check
      core: Remove skip-sanity-check treespec support
      Use treefile instead of treespec for local layering
      treefile: Add an API to generate an empty config
      util: Add an API to convert `char **` → `rust::Vec<rust::String>`
      extensions: Add a method to convert to treefile
      compose,core: Read exclude-packages directly from treefile
      core: Factor out rpmdb writing function
      core: Split out low level creation method
      rust/origin: Don't mutate input origin, do translate override
      Demote origin roundtrip warning to a debug message
      Error out if sqlite is default, but configured for something else
      treefile: Parse `rpmdb: b-d-b`
      core: Log repository solvables
      compose: Fix RPMOSTREE_PRESERVE_TMPDIR
      compose/extensions: Use generated subset treefile, not treespec
      core,compose: Finish removing treespec
      build-sys: Switch compile flag to --enable-bdb-rpmdb-default
      upgrader: Generate "computed" origin
      compose: Support writing rpmdb with target rootfs to support RHEL8+bdb
      Use the `fail` crate for error injection
      daemon: Correctly abort not-started transactions after client exit
      main: Cleanly error out on arguments that are not valid UTF-8

Jakub Čajka (1):
      rust/utils: Handle PowerPC endianity in rpm_basearch

Jonathan Lebon (4):
      tests/vm.sh: New script to make spawning test VMs easier
      rust/initramfs: Include parent directories in initramfs-etc overlay
      rust/initramfs: Check if path already in set before cloning
      Release 2021.7

Kelvin Fan (5):
      daemon: Set transaction title earlier
      os: Factor out `rpmostreed_sysroot_set_txn_and_title()`
      rebase: Remove support for providing prefixes
      Allow rebase to OSTree commits in container images
      upgrade: Check imgref digest before pulling image

Luca BRUNO (12):
      console_progress: adapt to new indicatif APIs
      compose: add some error prefixes
      cxxrs: bind OstreeRepoTransactionStats
      libpriv/importer: move mode-tweaking logic to Rust
      libpriv/importer: move filtering logic to Rust
      importer: minor fixes and review followups
      cargo: add regex
      lockfile: refresh after manifest changes
      importer: unify tmpfiles.d translation logic
      importer: add unit tests for tmpfiles.d translation
      libpriv/importer: clarify semantics of some internal structures
      importer: drop some unreachable logic for /opt handling

2021.6

22 Jun 18:15
v2021.6
Compare
Choose a tag to compare

Client side

Any reboots initiated by rpm-ostree now opt-in by default to respecting systemd reboot blocking inhibitors. For example, an administrator can now run systemd-inhibit bash on a login shell on a Fedora CoreOS system and know that zincati's attempt to reboot (via rpm-ostree) will be blocked until the shell exits.
PR: #2862

rpm-ostree override replace now supports directly replacing existing overrides.
PR: #2863

rpm-ostree override replace with Fedora Bodhi/Koji URLs now directly speaks XML-RPC to Koji instead of using a redirector service that was intended to be temporary (and is no longer accessible).

There is experimental support for rpm-ostree deploy --ex-cliwrap=true which opts-in to having rpm-ostree intercept some other command line tools such as rpm, yum/dnf, and dracut. Use rpm-ostree ex apply-live to apply the change live, and rpm-ostree deploy --ex-cliwrap=false to disable again.

Compose side

There is a new experimental rpm-ostree ex-container CLI that uses the new ostree-rs-ext code to bidirectionally map between ostree commits and containers.

The /usr/sbin/sss_cache binary is temporarily removed (if present) at build time to avoid a spam of errors from sssd.

Internals

Current rpm-ostree now compiles again on RHEL8.4.

libdnf is updated, and several fixes to the RPM %_dbpath handling were made to ensure that osbuild correctly generates an rpmdb in /usr/share/rpm.

The rojig code has been removed. On the balance, the future direction of rpm-ostree will be more oriented towards the image side (particularly with containers). But, it's possible that the idea of rojig (and some of the code) may come back too.

Many dependent crates were updated; most notably openssl which now supports OpenSSL 3.0 as will be used soon by several distributions.

Colin Walters (40):
      passwd: Make default perms 0644
      Update to ostree-ext v0.1.2, add new `ex-container` command
      Remove large chunks of rojig code
      daemon: If we can't figure out auth rule, use override
      Add support for `rpm-ostree deploy --ex-cliwrap=true`
      importer: Remove rojig bits
      core: Remove rojig bits
      daemon/sysroot: Replace some rojig code with g_assert_not_reached()
      origin: Remove rojig bits
      rust/origin: Remove rojig bits
      util: Remove rojig cache branch mapping functions
      rust/treefile: Remove rojig spec writing
      tree-wide: Remove (almost) all remaining rojig bits
      rust: Port some bits to new ostree_ext::variant_utils
      daemon: Make actually initiating reboot asynchronous
      daemon: Remove support for session bus
      importer: Remove traces of unprivileged import
      Use new `ostree_commit_metadata_for_bootable()` API
      daemon: Remove even more session bus code
      Update to ostree-ext 0.1.3
      daemon/isolation: Clean up failed units too
      util: Fix missing error in decompose_sha256_nevra
      rust/utils: Fix ordering of decompose_sha256_nevra
      Drop use of koji redirector, use XML-RPC API
      daemon: Die if /var/lib/rpm exists and is not a symlink
      cliwrap: Add initial yum/dnf wrapper
      core: Neuter /usr/sbin/sss_cache during compose/layering
      origin: Switch baserefspec → refspec when de-layering
      core: Add error prefixing when applying rpmfi overrides
      test-installroot: Validate we don't have /var/lib/rpm
      core: Fix comment and link to SSSD issue
      docs: Minor admin-handbook tweaks
      cliwrap/yumdnf: Indent rpm-ostree install info
      cliwrap: Unify yum/dnf+rpm message about ostree
      cliwrap/yumdnf: Remove duplicated print of IMAGEBASED
      cliwrap/yumdnf: Fix up indentation
      core: Move systemctl interception into Rust, fix wrapping only for scripts
      rust: Fix misc clippy lints
      builtin/tree: explicitly set _dbpath macro in global libdnf initialization
      Release 2021.6

Jonathan Lebon (5):
      man/rpm-ostree: Document `install --idempotent`
      HACKING: Add section about using GDB with rpm-ostree
      daemon/deploy: Handle resetting inactive replacement overrides by name
      tests/kolainst: Copy to rpm-repos/ last
      tests/kolainst: Add `make localinstall`

Kelvin Fan (1):
      daemon: Respect systemd inhibitor locks

Luca BRUNO (18):
      docs: update release step
      importer: align /var/lib/rpm handling
      packaging/spec: require rpm >= 4.16.0
      packaging/spec: misc cleanups
      lib: temporarily fork rpmver logic
      lib/rpmver: replace tabs with spaces
      packaging/spec: relax minimum librpm version
      makefile/lib: filter out private sources from gir list
      libdnf-sys/build: gracefully handle older gpgme versions
      libdnf-sys/build: auto-enable zchunk if present
      daemon/transaction: perform upfront null check on upgrader
      app/clientlib: initialize bus_name
      builtin/tree: inject _dbpath macro file in postprocessing step
      libpriv/core: set _dbpath macro in dnf context
      builtin/compose: move commit-id write logic to Rust
      passwd: reduce the amount of log messages for new entries
      composepost: minor cleanups and tests for dbpath macro injection
      lockfile: bump openssl crate to latest version

Rafael G. Ruiz (1):
      daemon/deploy: Allow replacing existing overrides without first resetting

Timothée Ravier (3):
      *: rename master branch to main
      *: rename master branch to main (external repos)
      docs: Split pages into three main categories

v2021.5

11 May 16:02
v2021.5
2f75135
Compare
Choose a tag to compare

This is mostly a bugfix release, with a few new user-facing features.

Client

Kernel arguments can now be updated in an idempotent fashion, via the new kargs flags --append-if-missing and --delete-if-present.

It is now possible to skip on-branch checks when deploying a specific revision by commit hash. This will be used by Zincati in Fedora CoreOS.

The Count Me feature from DNF is now fully disabled by default in all repo queries and will only be triggered by the corresponding rpm-ostree-countme.timer and rpm-ostree-countme.service units. See https://coreos.github.io/rpm-ostree/countme/ for details.

Compose

Among notable changes, the post-processing logic now understands the IMA extended attribute user.ima. When such xattr is found, it is automatically translated to security.ima in the final OSTree content.

The treefile got a new repo-packages field. It can be used to pin a set of packages to a specific repository.

The legacy unified-core logic proceeds on its path to deprecation, with an increased artificial delay to encourage remaining consumers to migrate away.

Internals

Several cleanups of internal treefile handling were completed with the goal of having the client side use treefiles as well.

Special thanks to our first-time contributors Rafael G. Ruiz and Stefan Berger!


Benjamin Gilbert (1):
      docs: fix "Edit this page on GitHub" links

Colin Walters (25):
      compose: Pass treefile directly in rpmostree_context_new_tree()
      Read treefile directly for `documentation` flag
      Read treefile directly for `selinux` and `recommends` flags
      compose: Remove unused helper functions
      Read treefile directly for `releasever`
      Move `ref` parsing into core
      build-sys: Drop git.mk, hardcode .gitignore
      core: Rename context_new_system() to context_new_client()
      core: Rename context_new_tree() to context_new_compose()
      build-sys: Avoid re-building + re-linking cxx-rs C++ bits each build
      compose: Move repos/lockfile-repos validation to Rust
      daemon: Always write `staged` JSON field
      core: Remove cancellable/error from context creation APIs
      core: Split off a method to set the treespec
      Expose more from treefile via cxx-rs; adapt _install_langs to use it
      bwrap: Fix selftest to be truly immutable
      core: Fix tempetc guard to be no-op if /etc exists
      Require ostree v2021.2, use ostree-ext crate
      tests/compose: Bump pinned fcos commit
      Fix bwrap usage for mutate-os-release
      Add Rust tracing crate usage
      compose: Bump timeout for non-unified-core to 10s
      Add and use the `camino` library for UTF-8 paths
      composepost: Fix race condition in timestamp checking
      treefile: Minor cleanup of handle_repo_packages_overrides()

Dusty Mabe (1):
      lib/package: Fix rpm version comparison

Jonathan Lebon (35):
      .gitignore: add compose-{cache,logs} dirs
      rust/passwd: Fix handling of `previous` mode
      tests/compose: Change rpmdb test to check for sqlite
      tests/compose: Adapt chrony autovar for newer FCOS
      rust/main: Pass CLI args to command entrypoints
      rust: Drop includes.rs
      libpriv: Bridge print_treepkg_diff_from_sysroot_path()
      rust/treefile: Fix minor comment typo
      core: Add comment about SERVER_BASE commits
      treefile: Add new `repo-packages` field for pinning packages to repos
      tests/vmcheck/misc-2: Update error message to grep for
      treefile: Fix rpmdb backend casing
      app/deploy: Add --skip-branch-check
      lockfile: Add missing serde(deny_unknown_fields)
      lockfile: Allow `metadata` field in locked packages

Kelvin Fan (1):
      app/clientlib: Don't error if update driver "stopped"

Luca BRUNO (12):
      composepost: uniform results and visibility for cxxbridge
      tests/compose: add more autovar testcases
      postprocess: move /var tmpfiles.d translation logic to Rust
      tests/compose: check symlinks injected into the rootfs
      composepost: move rootfs symlinks creation to Rust
      composepost: optimize disk roundtrips
      composepost: expand unit test surface
      composepost: fix fchmod flags for tmpdir (glibc compat)
      composepost: move SELinux workaround logic to Rust
      composepost: move rpmdb linking logic to Rust
      tests/override-kernel: add f34 kernel
      libpriv/importer: move path-checking logic to Rust

Rafael G. Ruiz (3):
      kargs: add CLI switches --append-if-missing and --delete-if-present
      kargs: Add CLI switch --unchanged-exit-77
      kargs: Simplify conditional statements

Stefan Berger (1):
      Support hardcoded user.ima to security.ima translation

Timothée Ravier (3):
      countme: Force disable Count Me logic in DNF
      daemon: Only update idle status every 10 seconds
      countme: Drop SELinux workaround/unpriv copy of rpm-ostree

v2021.4

12 Apr 20:22
v2021.4
Compare
Choose a tag to compare

Core changes

This release picks up a security fix from libdnf for: https://bugzilla.redhat.com/show_bug.cgi?id=1932079 (CVE-2021-3445).

Our internal bindings for using bubblewrap (/usr/bin/bwrap) to run scripts (including e.g. RPM scripts) has been ported to Rust.

Client

The client now tells users to run rpm-ostree cancel if another transaction is in progress. Thanks to our new contributor Ukpai Ugochi for this patch!

The client now detects if it's inside a container and emits a clearer error message.

The documentation now describes how to disable the "DNF Count Me" functionality.

Compose

Lockfiles can now lock by source RPM version rather than binary RPM version. This may end up being used in Fedora CoreOS to further simplify RPM overrides.

Composed OSTree commits now include security advisories in the commit metadata. The goal is to make it cheaper to query this information in clients, as well as in downstream pipelines (and eventually re-use this information to semi-automatically generate release notes).

Correspondingly, rpm-ostree db list and rpm-ostree db diff now have both learned the --advisories option.

Several improvements to the compose documentation were contributed by Alexander Wellbrock.

Oxidation continues

  • Our internal bindings for using bubblewrap (/usr/bin/bwrap) to run scripts (including e.g. RPM scripts) has been ported to Rust.
  • More code for /etc/passwd and /etc/group has been ported to Rust.
  • Parts of the postprocessing code, e.g. bits to inject OSTREE_VERSION in /usr/lib/os-release have been ported to Rust.
Alexander Wellbrock (5):
      docs/compose: move container section to bottom
      docs/compose: add a introductory section
      docs/compose: add section on the granular approach
      docs/compose: apply review; unify repo paths
      Fix ambigous compose postprocess man entry

Colin Walters (36):
      rust: Fix minor clippy warnings
      ci: Add a Github Action for Rust lints
      treefile: Add an allow(dead_code)
      compose: Move mutate-os-release string code to Rust
      compose: Move `remove-files` code to Rust
      rust: Factor out an ostree-host crate
      rust/ostree-host: Add SysrootExt trait
      rust/ostree-host: Add README.md and license files
      kernel: Avoid using bwrap child setup
      postprocess: Migrate `mutate-os-release` to Rust
      Cargo.lock: Bump openat
      bwrap,scripts: Add and use cleaner APIs for standard descriptors
      clientlib: Strip GDBus remote error before throwing exception
      ci: Update to use new buildroot pod
      Add a helper API to detect running in systemd
      tests: Add infinite loop package to kolainst-build
      rust: Use indoc crate
      bwrap: Initial Rust stub
      Rewrite bwrap code in Rust
      bwrap: Create a RoFilesMount struct
      bwrap: Clean up capability additions
      bwrap: Clean up /sys ro binds
      bwrap: Add more docstrings
      compose: Fix leak of Rust treefile object
      Migrate `depmod` helper to core.rs
      rust: More usage of indoc
      composeutil: Clarify which dev failed to create
      postprocess: Move more code into Rust
      ci/prow: Update to use new buildroot image
      rust/client: Make status be a method
      tests: Stop running test-lib-introspection.sh
      Oxidize more of postprocess.cxx
      client: Provide more useful error if we're in a container
      core: Fix the "is_system" variable
      treefile: Make all members pub(crate)
      treefile: derive(Default)

Jonathan Lebon (15):
      lockfile: Allow locking by source RPM EVR
      lockfile: Make `packages` optional
      RELEASE: Add step to update libdnf's deps
      spec: Add more deps from libdnf
      docs: Add page about the daemon interface
      build(deps): bump cxx and cxx-build from 1.0.33 to 1.0.41
      rust/treefile: Drop unnecessary semi-colons
      daemon: Move advisory GVariant generation to libpriv
      libpriv/util: Add g_variant_byteswap helpers
      app/clientlib: Make function for printing advisories public
      app/clientlib: Support printing advisories without padding
      compose: Bake advisory information into commit metadata
      app/db: Add `db list --advisories`
      app/db: Add `db diff --advisories`
      Release 2021.4

Luca BRUNO (5):
      rust/treefile: tweak check-passwd/check-groups data
      libpriv/passwd: move pre-commit validation hooks to Rust
      passwd: optimize validation logic
      libpriv/json-parsing: remove dead code
      passwd: aling all bridge functions to return CxxResult

Stefan Berger (1):
      libpriv: Remove unnecessary builder causing memory leak

Timothée Ravier (1):
      docs: Update instructions to disable countme

Ukpai Ugochi (1):
      Help text on error: Transaction in progress #2341

2021.3

17 Mar 14:21
v2021.3
d24f7bb
Compare
Choose a tag to compare

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

2021.2

17 Feb 20:25
v2021.2
Compare
Choose a tag to compare

Release 2021.2

Client side changes

The client now supports a --register-driver command which will be used by Fedora CoreOS and zincati.service to tell rpm-ostree that another service is actively "driving" updates. In concert with this, rpm-ostree upgrade now emits an error message if a driver is active.
PRs: #2459 and #2566

Compose

There is a new rpm-ostree compose extensions which will be used by RHEL CoreOS, but is intended to be generally usable by rpm-ostree users that want to more cleanly split their builds into "base OS image" + "optional extensions (RPMs)", while reusing the same declarative manifest format.
PR: #2439

Core changes

rpm-ostree now better supports a newer libsolv that uses %{_dbpath} to find the rpm database.
(This fix was already backported into Fedora)
Issue: #2548

Internals

Change main entrypoint to be Rust is a huge milestone - rpm-ostree is now a Rust application with an internal C++ library. We now do bidirectional calls. The transition to Rust is accelerating!

Other oxidation progress:

  • Much of the code around handling /etc/{passwd,group} is now in Rust; PR: #2580

A lot of CI fixes and cleanups; most notably we now test some with AddressSanitizer which caught one bug.

Colin Walters (81):
      Make `make check` work again
      rust: Port history to cxx-rs
      rust/fedora_integration: Support export RPMOSTREE_KOJI_JSON_API_HOST=...
      Remove some uses of `goto out`
      rust: Add a bit more info on cxx, move up StringMapping
      ci: Make msrv test do full build + unit tests
      cxxrs: Work around failure with -Werror=missing-declarations
      rust: Link to our C/C++ dependencies and internal library
      Move nevra parsing to Rust, first use of `extern "C++"`
      libmain: Avoid use of goto out
      rust: Add some allow(dead_code)
      compose: Remove unused treefile_rs parameter
      tests/layering-fedorainfra: Update rpm-ostree build
      tests: Fix compliation
      ci: Re-enable `make check`
      Makefile.bindings: Also generate pure rust/cxx.h
      lockfile: Note that comment is JSON
      lib: Don't link to libdnf
      vagrant: Remove this
      scripts: Remove, not used
      cliwrap: Fix indentation
      Bridge "next version" API to Rust, use it for unit tests
      build: Use -std=c++17
      tree-wide: Convert g_return.*if_fail to g_assert
      ci: Drop testuser creation
      ci: Split clang into separate script, run it in CoreOS CI
      ci: Drop custom msrv checking
      Change main entrypoint to be Rust
      build-sys: Move some linkage purely to Rust
      build-sys: Rebuild on C++ changes
      ci/build-check: Don't make install
      ci: Skip installing deps if non-root
      scripts: Fix a stack use-after-free
      ci: Add a commit validation entrypoint
      Also export PATH here
      ci: Ensure HOME is set
      ci: Also test for HOME being writable
      ci: Don't assume HEAD exists
      ci: Consistently source libbuild
      ci: Propagate make jobs to clang build too
      build-sys: Explicit workspace, move libdnf deps to crate
      Move libdnf build over to Cargo
      build-sys: Drop Fedora 25+ rpm version check
      build-sys: Delete duplicate Rust pkg-config dependencies
      build-sys: Cleanly split up deps of public shlib vs internals
      ci: Drop clang and unit tests from here
      libdnf: Various buildsys fixes
      ci: Add clang-analyzer.sh
      tree-wide: Fix some spurious "Dead assignment" from clang-analyzer
      tree-wide: Fix some "Dead assignment" from clang-analyzer
      util: Annotate our "throw" wrappers as `[[ noreturn ]]`
      libmain: Refactor to fix analyzer warning
      tree-wide: Pacify some clang-analyzer "Dead nested assignment"
      tree-wide: Squash some clang-analyzer found unused variables
      Make failure to find packages fatal, add more error prefixing
      ci/clang-analyzer: Install deps
      tree-wide: Fix clang -Wgnu-designator/-Wunused-variable
      transaction: Fix missing return in error case
      build-sys: Add --enable-werror, rework compiler flags
      build-sys: Statically link binary against shlib code
      Rename internal Rust progress to console_
      Bind output core into Rust, use in apply-live
      scripts: Bind /usr/share/empty over /usr/share/rpm
      build: Drop introspection+clang hack
      Add --enable-sanitizers (not on by default yet)
      tree-wide: Include GLib headers before libdnf
      rust: Add module doc headers
      Switch to using cxx-rs for treefile
      tree-wide: Fix C++ range iteration to use references
      build-sys: Always run `make` → `cargo build`
      Misc doc tweaks/cleanups
      tests/layering-non-root-caps: Adapt to new libcap output
      ci: Drop: distro-sync, continuous repo
      ci: Add `time` prefixing before most commands
      build-sys: Ignore .cosa
      ci: Rework build/test dependency install
      tests: Fix bodhi link
      Add an rpmostree-client sub-crate
      compose: Add missing #include <optional>
      libdnf-sys: Include gio.h before libdnf.h
      Release 2021.2

Jonathan Lebon (31):
      spec: Add BuildRequires: make
      ci: Set RPM_BUILD_NCPUS when building RPMs
      docs/HACKING: drop reference to `make vmcheck HOSTS=...`
      .editorconfig: Adjust for CXX files
      Revert "core: Allow overriding downloaded RPMs target dir"
      app: Add `rpm-ostree compose extensions`
      rust: Fix clippy warnings
      core: Set _dbpath back to /usr/share/rpm after writing rpmdb
      extensions: Write JSON to output dir
      core: Factor out function to set repos on pkgs
      core: Factor out function to download pkgs
      core: Fix handling of local packages when downloading
      extensions: Support enabling additional repos
      extensions: Fix missing CxxResult
      app/compose: Add comment about pkgcache
      rust/treefile: Drop unnecessary #[serde(rename)]
      extensions: Add support for development extensions
      tests/compose.sh: Always rebuild supermin appliance
      Makefile-rpm-ostree: Drop hardcoded `release` path
      Makefile-rpm-ostree: Fix setting of `cargo_target_dir`
      Makefiles: Drop unnecessary `cd rust/` and `CARGO_TARGET_DIR`
      core: Don't allow noent when resolving pkgcache rev
      ci: Temporarily use libsolv-0.7.17
      Add /usr/lib/rpm/macros.d/macros.rpm-ostree to set %_dbpath to /usr/share/rpm
      lib/package: Fix comment about rpmdb checkout
      libpriv/rpm-util: Add /usr/lib/sysimage/rpm symlink in rpmdb checkout
      libpriv/rpm-util: Use /usr/share/rpm for base rpmdb query
      ci: Re-add CARGO_BUILD_JOBS
      extensions: Don't try to chown RPM packages
      libdnf-sys: Drop C API, replace with cxx.rs bridge
      lockfile: Move ror_lockfile_read to cxx.rs

Kelvin Fan (13):
      daemon: Record agent's systemd service
      vmcheck/test-misc-2: Fix $cursor variable
      HACKING: Update vmcheck instructions
      docs/HACKING: Update kola ext test instructions
      Add `register-driver` option to UpdateDeployment D-Bus API
      app/status: Display update driver info
      deploy: Allow empty string argument if `--register-driver`
      daemon/rpmostreed-daemon: Look up sd unit if caller not registered
      app/status: Show update driver's state and status
      app/status: Use `AutomaticUpdatesDriver` if updates driven by external driver
      tests/common/libvm: Print error if bad tests/vmcheck/image.qcow2
      app/status: factor out get_sd_unit_objpath() function
      app/upgrade: Do not upgrade if updates driver registered

Luca BRUNO (11):
      libpriv/passwd: move RPM layering logic to Rust
      github: update dependabot config
      ci: fix install-extra logic
      testutils: port to new 'rand' library API
      rust/passwd: finish moving group and passwd parsers
      rust/passwd: minor cleanup, switch to copy_file_at
      libpriv/passwd-util: move migration logic to Rust
      rust/passwd: minor cleanup, use write_file_with_sync
      libpriv/passwd: move entries deduplication logic to Rust
      make/rust-test: fix linking and loading
      libpriv/postprocess: get rid of goto statements

dependabot[bot] (20):
      build(deps): bump libdnf from `45981d5` to `1ebad38`
      build(deps): bump serde_json from 1.0.60 to 1.0.61
      build(deps): bump serde from 1.0.118 to 1.0.120
      build(deps): bump serde from 1.0.120 to 1.0.122
      build(deps): bump anyhow from 1.0.35 to 1.0.38
      build(deps): bump libc from 0.2.81 to 0.2.82
      build(deps): bump serde_yaml from 0.8.14 to 0.8.15
      build(deps): bump systemd from 0.8.1 to 0.8.2
      build(deps): bump tempfile from 3.1.0 to 3.2.0
      build(deps): bump rust-ini from 0.16.0 to 0.16.1
      build(deps): bump cxx from 1.0.20 to 1.0.28
      build(deps): bump rand from 0.7.3 to 0.8.2
      build(deps): bump serde from 1.0.122 to 1.0.123
      build(deps): bump rand from 0.8.2 to 0.8.3
      build(deps): bump libdnf from `1ebad38` to `e92a15a`
      build(deps): bump libc from 0.2.82 to 0.2.84
      build(deps): bump cxx from 1.0.28 to 1.0.29
      build(deps): bump cxx from 1.0.29 to 1.0.30
      build(deps): bump serde_json from 1.0.61 to 1.0.62
      build(deps): bump serde_yaml from 0.8.15 to 0.8.16

Git-EVTag-v0-SHA512: 098fda1600aeecee9d355bec6d30b6a32e6c346d2ff5e025eae7599430d784e5b4270d9bb4858c1034ff2776cc80e34722cd7c164fe199b0aacfef4b48a38587