Skip to content

Releases: coreos/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

2021.1

19 Jan 15:08
v2021.1
Compare
Choose a tag to compare

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

dependa...
Read more

2020.10

11 Dec 19:29
v2020.10
Compare
Choose a tag to compare

A quick fixup on top of https://github.com/coreos/rpm-ostree/releases/tag/v2020.9

Colin Walters (4):
      rust: Add deny(unused_must_use)
      Port rpmostree-kernel to C++
      Fix and improve support for rpmostree-rust.h being pre-generated
      Release 2020.10

2020.9

11 Dec 12:54
v2020.9
Compare
Choose a tag to compare

rpm-ostree v2020.9

Client

The ex livefs command was completely rewritten and moved to a much safer foundation.

Bugfixes:

Composing

No real changes.

Internals

  • Our CI is now on Fedora (CoreOS) 33 and tests were fixed for that
  • Investigating https://cxx.rs/ and moving some code to C++, but the end game is mostly Rust!
  • Some further small parts were rewritten in Rust.
Colin Walters (20):
      Rewrite livefs
      service: Enable ProtectHome=true
      livefs: Fix --target, add --reset and print diff
      tree-wide: Add extern "C" wrapping to our headers
      scripts: Neuter RHEL8 nvme-cli %post
      Convert some code to compile in C++ mode
      Remove ex-container
      compose: Use static enablement for ostree systemd services
      bindgen: Bump to 0.15
      tests: Add case for running rpm -q in a %post
      Add a helper move_nullify
      app: Port dbus-helpers to C++
      Port rpmostree-postprocess to C++
      Port rpmostree-core to C++
      Port rpmostreed-transaction to C++
      Move bindgen into tooling/, add dependabot
      Move the main Rust infra (i.e. Cargo.toml) to the toplevel
      upgrader: Inject --no-hostonly again if no initramfs-args
      livefs: Fix GVariant refcounting
      Release 2020.9

Jonathan Lebon (6):
      core: Disable libdnf plugin loading
      rust: Move to new systemd journal API for opening
      daemon: Drop CreateOSName
      app/history: Limit entries to print to 3
      history: Use shorthand struct initialization
      libpriv/scripts: Fix uint64 printing

Luca BRUNO (4):
      tests/jsonutil: update invalid specifier
      Revert "ci: Freeze FCOS commit to f32"
      tests/override-kernel: support f33
      core: add a guard for temporary-etc context and move to Rust

Prajna Sariputra (1):
      docs: Update links to the OSTree documentation

Timothée Ravier (1):
      rust: Fix various clippy warnings

dependabot[bot] (16):
    ...omitted...

2020.8

14 Nov 14:50
v2020.8
Compare
Choose a tag to compare

Mainly two compose side fixes that will help coreos-assembler.

Besides that, some smaller code cleanups.

Colin Walters (7):
      daemon: Rewrite some core initramfs-overlay logic in Rust
      rust/lockfile: Use from_glib_full to avoid manual free
      scripts: Link to lua issue on error
      treefile: Fix hashing of externals
      compose: Add --previous-commit
      Remove coreos-rootfs command
      Release 2020.8

Jonathan Lebon (2):
      Drop use of `volatile`
      ci: Freeze FCOS commit to f32

Luca BRUNO (1):
      sh: fix bash shebang

dependabot[bot] (2):
      build(deps): bump anyhow from 1.0.33 to 1.0.34 in /rust
      build(deps): bump libglnx from `1dd01d5` to `493d399`


Git-EVTag-v0-SHA512: 6e4c1d1752195dfdef2c80f0c9d5d7091b6c5abfe0d96bf499a3a7fe717b5ae05ab560341a80e1391a579e36c204299abd8db88c59f847353874836e808c3d02

v2020.7

02 Nov 16:14
v2020.7
Compare
Choose a tag to compare

Minor release to fix an undefined behaviour bug found by
Fedora rawhide's GCC (#2301).

Colin Walters (2):
      upgrader: Fix potential use of NULL value
      OWNERS: extend/reorder approvers section

Jonathan Lebon (1):
      Release 2020.7

v2020.6

30 Oct 14:58
v2020.6
Compare
Choose a tag to compare

There is a new ex initramfs-etc command that can be used
to inject local configuration from /etc into an additional initramfs
image. This is still experimental, but we plan to use it
for "complex root devices" for Fedora CoreOS at least, and it can
also be used for cases like dracut LUKS keyboard layouts.
PR: #2170

The "rojig" (embed ostree in RPM) functionality is now
disabled by default.
(If you are using it, please tell us!)

Ensure you're using boot-location: modules, as the current default
boot-location: new is deprecated.
The only reason to use boot-location: new is if you care
about upgrading directly from very old versions of ostree.
At some point it's likely that this configuration option will
be removed entirely.

This release also contains portability bugfixes (for 32bits ARM) and
improvements to the transaction logic, enhancing overall reliability.

Documentation is cleaned up and moved from readthedocs.io to
Github pages, the new site is: https://coreos.github.io/rpm-ostree/

Various CI fixes.

Various Rust cleanups (particularly around FFI).

Colin Walters (18):
      tests: Loosen regexp for French date
      transaction: Port to declare-and-initialize style
      sysroot: Log when forcibly closing a transaction
      client: Close DBus connection before calling reload
      transaction: Unlock more reliably at txn finish
      daemon: Defer reload to an idle
      Add --enable-rojig, disable by default
      Make /run a directory in scripts
      sysroot: Fix usage of sd_journal_send on 32 bit
      compose: Print a warning with boot-location: new
      Update to openat-ext 0.1.8, use new file writing API
      rust: Enable lto by default
      Remove ffi_view_str/ffi_new_string functions
      composepost: Fix to use write_all()
      treefile: Directly write to String
      rust: Use Borrow<GString> in a few places
      Disable `boot-location: new` test
      Release 2020.6

Jonathan Lebon (11):
      rust: adapt to new systemd journal API
      ci: Run C unit tests too
      README.md: Keep it short and sweet
      tests/compose: Bump FCOS config commit to test
      rust/treefile: Use shorthand initialization for Treefile
      tests/compose: Drop FCOS postprocess scripts
      tests/compose: Check filecaps of arping instead of ping
      dependabot: Drop pull request limit to 3
      rust: Update deps
      rust/libdnf-sys: Drop Cargo.lock
      Add new `ex initramfs-etc` command

Luca BRUNO (2):
      daemon: drop an unused sysroot parameter
      daemon/syscore: push livefs introspection to Rust

Timothée Ravier (10):
      docs: Add Jekyll and theme config
      docs: Unify and update README and Index page
      docs: Update Contributing page
      docs: Update Repo Structure page
      docs: Move and update Background page
      docs: Move and update Client administration page
      docs: Move and update Compose server page
      docs: Move and update Treefile page
      docs: Import Hacking page
      docs: Import Release page

v2020.5

15 Sep 14:09
v2020.5
Compare
Choose a tag to compare

This is mostly a bugfix release.

One important fix is adapting to the change in Fedora to transition the rpmdb
to SQLite
. This would
result in Fedora 33 composes using the new backend, making it harder for users
with layered packages to rebase (see
bugzilla.redhat.com/show_bug.cgi?id=1876194#c3).

As a result, there is now an rpmdb key in the treefile which can take e.g.,
bdb or sqlite but which defaults to bdb. This means that f33 composes
will for now keep using BDB, allowing for smoother rebases. Content providers
can opt into the new SQLite backend when convenient.

Another fix worth mentioning is a major improvement in how layered packages are
handled: rpm-ostree now correctly picks older versions of layered packages if
needed to satisfy base packages. This will help solve the "split base/layered
package mismatch"
in
combination with pending work in Fedora at least to publish older versions of
RPMs. Additionally, when a solution is not possible, the error message prints
exactly what the conflict is.

Otherwise, there is the usual churn around CI. For example, the MSRV is now
1.45.2. There are some preparations for using
ostree-rs more extensively in the future.


Colin Walters (11):
      Add testutils generate-synthetic-upgrade
      core: Clearly show when no rpm-md repos are enabled
      util: Remove an (effectively) unused GCancellable
      rust: Fix deprecation warnings
      deploy: Don't leak file descriptor passed for local rebases
      db-list|version: Remove code to parse `..`
      Move the "cbindgen typedefs" to their own file
      ci: Use ostree from lockfile
      compose: Use user mode checkout for sepolicy
      Use ostree-rs, and oxidize more treefile checksumming
      compose: Add rpmdb option, default to bdb

Jeff Law (1):
      spec: Disable LTO

Jonathan Lebon (9):
      app/ex: Drop `reset` alias
      libpriv/origin: Factor out helper to set key from hash table
      libpriv/kernel: Link initramfs into place earlier
      src/{daemon,libpriv}: Better error prefixing
      libpriv/kernel: Allow optional initramfs tmpf
      ci: bump compose tests timeout to 60 minutes
      ci: Bump MSRV to 1.45.2
      core: Use SOLVER_LOCK for locking base packages
      Release 2020.5

Kelvin Fan (1):
      treefile: change `remove-from-packages` implementation