Xiaofeng Wang [Fri, 20 Mar 2026 08:50:58 +0000 (16:50 +0800)]
ci: Add Packit CI with RPM builds and TMT integration tests
Add Packit-based CI pipeline that builds RPMs via COPR and runs TMT
integration tests on bootc image-mode systems. This follows the
bootc-dev/bootc pattern of per-plan VM isolation using bcvk.
Key changes:
- Dockerfile: Add rpmbuild stage, use RPM overlay for rootfs, run
provision-derived.sh for VM provisioning (cloud-init, rsync, etc.)
- Justfile: Add package target, test-tmt target with bcvk per-plan VMs,
longer SSH wait for cloud-init first boot
- .github/workflows/bootc.yaml: Split into unit-tests and integration
jobs, archive TMT logs with PR number in artifact name
- .packit.yaml: COPR builds + TMT tests for centos-stream-9/10 and
fedora-43/44 on x86_64/aarch64
- tmt/: FMF test plans and shell-based tests (booted verification,
privileged ostree tests) translated from Rust integration tests
- hack/: Packit provisioning scripts to convert package-mode VMs to
image-mode via bootc install to-filesystem
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Xiaofeng Wang <henrywangxf@me.com>
Colin Walters [Thu, 19 Mar 2026 00:48:48 +0000 (20:48 -0400)]
Merge pull request #3573 from cgwalters/test-revamp
ci/tests: Revamp bootc integration test suite with bcvk VM support
Colin Walters [Tue, 17 Mar 2026 21:00:34 +0000 (21:00 +0000)]
ci: Revamp bootc integration test suite with bcvk VM support
the old privtest CI job with a new tests/bootc-integration
Rust crate that runs inside a bcvk VM. The old tests/inst crate is
preserved for tests not yet ported.
Tests are split into two tiers based on what they need:
- booted_test!: needs a fully deployed ostree system. Dispatches via
`bcvk libvirt run` which does `bootc install to-disk`.
- privileged_test!: just needs root. Dispatches via the faster
`bcvk ephemeral run-ssh`.
The Justfile provides `integration-container` (full suite) and
`integration-ephemeral` (fast privileged-only path). JUnit XML output
is supported via the JUNIT_OUTPUT env var using quick-junit;
integration-container captures results to target/integration-results.xml.
Drop the vendored bootc-ubuntu-setup action in favor of the upstream
bootc-dev/actions/bootc-ubuntu-setup@main.
Assisted-by: OpenCode (Claude claude-opus-4-6)
Signed-off-by: Colin Walters <walters@verbum.org>
Colin Walters [Mon, 16 Mar 2026 15:36:23 +0000 (11:36 -0400)]
Merge pull request #3575 from igoropaniuk/fix/respect_tmpdir_in_tests
tests: Respect TEST_TMPDIR for temporary directories
Igor Opaniuk [Mon, 9 Mar 2026 11:04:07 +0000 (12:04 +0100)]
tests: Respect TEST_TMPDIR for temporary directories
Several C tests hardcoded /var/tmp as the base path for temporary
working directories, ignoring the TEST_TMPDIR environment variable
used by the shell test suite.
This caused tests to create their ostree repos on the overlayfs
filesystem even when TEST_TMPDIR points to a real filesystem,
bypassing the intended workaround for overlayfs's inaccurate
free-space reporting. As a result, ostree's min-free-space-percent
check (default 3%) would fire when writing content objects, making
tests fail in containerized environments where the rootfs is overlayfs.
Fix by reading TEST_TMPDIR at runtime and falling back to /var/tmp
when it is not set, consistent with how the shell test suite handles
this. Affected tests:
- tests/test-libarchive-import.c
- tests/test-basic-c.c
Signed-off-by: Igor Opaniuk <igor.opaniuk@foundries.io>
Colin Walters [Fri, 6 Mar 2026 14:21:25 +0000 (09:21 -0500)]
Merge pull request #3572 from pvalena/patch-1
boot/dracut: use systemdsystemunitdir instead of systemdsystemconfdir
Pavel Valena [Fri, 6 Mar 2026 12:09:32 +0000 (13:09 +0100)]
boot/dracut: use systemdsystemunitdir instead of systemdsystemconfdir
since dracut-109 [*], the systemdsystemconfdir exists only in hostonly mode, which leads to unbootable system; as documented here:
https://src.fedoraproject.org/rpms/dracut/pull-request/90
[*] https://github.com/dracut-ng/dracut-ng/commit/
2991f74a
Colin Walters [Mon, 9 Feb 2026 20:57:33 +0000 (15:57 -0500)]
Merge pull request #3569 from lxnay/main
status: Include deployment origin refspec as refspec in JSON output
Fabio Erculiani [Mon, 9 Feb 2026 14:31:47 +0000 (15:31 +0100)]
status: Include deployment origin refspec as refspec in JSON output
Colin Walters [Fri, 30 Jan 2026 14:20:06 +0000 (09:20 -0500)]
Merge pull request #3559 from cgwalters/archive-utf8
libarchive: Handle UTF-8 filenames without locale dependency
Colin Walters [Thu, 8 Jan 2026 21:24:14 +0000 (16:24 -0500)]
libarchive: Handle UTF-8 filenames without locale dependency
When importing archives (including OCI container layers), libarchive
attempts to convert filenames from UTF-8 to the current locale charset.
In POSIX/C locale (which uses ASCII), this conversion fails for any
non-ASCII UTF-8 characters, returning ARCHIVE_WARN.
This is triggered by Python 3.14 which creates a "𝜋thon" symlink in
venvs, and affects bootc installations in environments where LANG is
not set (defaulting to POSIX locale).
Fix this by:
1. Using archive_entry_pathname_utf8() and archive_entry_symlink_utf8()
which return UTF-8 directly without locale conversion
2. Falling back to the regular accessors with explicit UTF-8 validation
when the _utf8 variants return NULL
3. Accepting ARCHIVE_WARN from archive_read_next_header() since we now
validate UTF-8 ourselves rather than relying on libarchive charset
conversion
This matches the behavior of GNU tar which treats filenames as opaque
bytes without charset conversion.
Closes: https://github.com/ostreedev/ostree/issues/3431
Dusty Mabe [Mon, 19 Jan 2026 20:57:52 +0000 (15:57 -0500)]
Merge pull request #3562 from dustymabe/dusty-uid-0
ci: drop running COSA as UID 0
Dusty Mabe [Fri, 16 Jan 2026 16:58:39 +0000 (11:58 -0500)]
ci: drop cosa fetch
Now that we are building via container tools `cosa fetch` isn't
meaningful any longer.
Dusty Mabe [Fri, 16 Jan 2026 02:48:43 +0000 (21:48 -0500)]
ci: drop running COSA as UID 0
With some changes made upstream to COSA [1] and a few fixups here
to make sure the directory tree for our built software doesn't have
setgid files we shouldn't need to runAsUser: 0 any longer.
[1] https://github.com/coreos/coreos-assembler/pull/4410
Colin Walters [Tue, 6 Jan 2026 23:24:29 +0000 (00:24 +0100)]
Merge pull request #3556 from jmarrero/ci-fix
ci: Sync bootc-ubuntu-setup action from bootc-dev/infra
Joseph Marrero Corchado [Wed, 17 Dec 2025 19:27:16 +0000 (14:27 -0500)]
Merge pull request #3555 from jmarrero/overlay-fix
state-overlay: Fix ENODATA handling for GLib < 2.74
Joseph Marrero Corchado [Wed, 17 Dec 2025 18:15:44 +0000 (13:15 -0500)]
ci: Sync bootc-ubuntu-setup action from bootc-dev/infra
The CI was failing because we were pulling podman/crun/skopeo
from Debian testing which has become unreliable. The bootc-dev/infra
repository maintains a reusable action that uses Ubuntu's plucky
repository instead, which is more appropriate for ubuntu-24.04 runners.
This also brings in additional improvements from the shared action:
- Disk space cleanup on the runner
- Unprivileged /dev/kvm access setup
- Optional libvirt stack support
Assisted-by: ClaudeCode (Claude Opus 4.5)
Joseph Marrero Corchado [Tue, 16 Dec 2025 19:30:47 +0000 (14:30 -0500)]
state-overlay: Fix ENODATA handling for GLib < 2.74
The state overlay feature fails on first boot with:
error: lgetxattr(user.ostree.deploymentcsum): No data available
This happens because `lgetxattrat_allow_noent()` checks for
`G_IO_ERROR_INVALID_DATA` to detect when an xattr doesn't exist.
However, GLib's `g_io_error_from_errno()` only maps `ENODATA` to
`G_IO_ERROR_INVALID_DATA` since GLib 2.74. Older versions (such as
GLib 2.68 shipped in CentOS Stream 9) return `G_IO_ERROR_FAILED`
instead, causing the check to fail and the error to propagate.
This creates a chicken-and-egg problem: the code tries to read the
`user.ostree.deploymentcsum` xattr before it can set it, but the read
fails on fresh overlay directories where the xattr hasn't been set yet.
Fix this by checking `errno == ENODATA` directly after the failed call,
which is portable across all GLib versions. Also rename the function
from `lgetxattrat_allow_noent` to `lgetxattrat_allow_nodata` to more
accurately reflect its purpose (ENODATA vs ENOENT).
This bug has existed since the state overlay feature was introduced in
v2024.1 but was masked on systems with GLib >= 2.74 (e.g., Fedora,
CentOS Stream 10) where the mapping happens to exist.
Assisted-by: Claude Code (Opus 4.5)
Signed-off-by: Joseph Marrero Corchado <jmarrero@redhat.com>
Colin Walters [Tue, 11 Nov 2025 22:46:06 +0000 (17:46 -0500)]
Merge pull request #3551 from jmarrero/release-20257
Release 2025.7
Joseph Marrero Corchado [Mon, 10 Nov 2025 19:24:49 +0000 (14:24 -0500)]
configure: post-release version bump
Joseph Marrero Corchado [Mon, 10 Nov 2025 19:23:43 +0000 (14:23 -0500)]
Release 2025.7
Joseph Marrero Corchado [Mon, 10 Nov 2025 19:21:56 +0000 (14:21 -0500)]
otcore-prepare-root: Fix formatting with clang-format
Colin Walters [Thu, 6 Nov 2025 21:02:02 +0000 (16:02 -0500)]
Merge pull request #3549 from cgwalters/fix-missing-colon
Add missing `:` to the gtk-doc in a few places
Colin Walters [Thu, 6 Nov 2025 19:35:04 +0000 (14:35 -0500)]
Add missing `:` to the gtk-doc in a few places
This is SUCH a giant trap. I am not totally sure why it's
working for me in a fedora-42 build env, but it seems like
it may have broken in a different build environment in
https://github.com/ostreedev/ostree/pull/3548#discussion_r2500278890
I used Sonnet to audit for similar instances beyond
`read_blob` and it found some, fix those too.
Signed-off-by: Colin Walters <walters@verbum.org>
Colin Walters [Tue, 4 Nov 2025 18:10:57 +0000 (13:10 -0500)]
Merge pull request #3537 from alyssais/formatting
docs: fix formatting
Colin Walters [Fri, 24 Oct 2025 20:47:56 +0000 (16:47 -0400)]
Merge pull request #3540 from miabbott/doc_adapting_existing_fix
docs: fixed dead link
Micah Abbott [Wed, 22 Oct 2025 20:22:56 +0000 (16:22 -0400)]
docs: fixed dead link
Fixes: #3534
Signed-off-by: Micah Abbott <miabbott@redhat.com>
Colin Walters [Mon, 20 Oct 2025 14:05:16 +0000 (10:05 -0400)]
Merge pull request #3538 from alexlarsson/signature-crash-fix
prepare-root: Fix crash if no valid signatures
Alexander Larsson [Mon, 20 Oct 2025 10:26:50 +0000 (12:26 +0200)]
prepare-root: Fix crash if no valid signatures
We didn't set error if there were zero valid signatures, which caused
a crash prefixing the error. While fixing this, the error messages were
slightly reworded to make it nicer.
Alyssa Ross [Sun, 19 Oct 2025 14:49:02 +0000 (16:49 +0200)]
docs: fix formatting
Colin Walters [Wed, 15 Oct 2025 14:10:36 +0000 (10:10 -0400)]
Merge pull request #3532 from ckyrouac/softreboot-fix
deploy: Use delete_if_present in can_soft_reboot
ckyrouac [Wed, 8 Oct 2025 19:52:28 +0000 (15:52 -0400)]
deploy: Use delete_if_present in can_soft_reboot
This avoids a dump when trying to delete the ostree= karg if it isn't
present. This is an issue with bootc factory reset.
Signed-off-by: ckyrouac <ckyrouac@redhat.com>
Colin Walters [Mon, 13 Oct 2025 15:36:00 +0000 (11:36 -0400)]
Merge pull request #3533 from champtar/fix-ci-stream
ci,Justfile: fix building with the right stream
Etienne Champetier [Fri, 10 Oct 2025 22:26:53 +0000 (18:26 -0400)]
ci,Justfile: fix building with the right stream
Part of the `e2e (stream10)` was running stream9.
As `just` doesn't support named parameters yet,
use `STREAM` env var to select between stream9 and stream10
Colin Walters [Wed, 8 Oct 2025 12:08:15 +0000 (08:08 -0400)]
Merge pull request #3531 from champtar/fix-ci-libsoup
ci: use libsoup 3 by default
Etienne Champetier [Wed, 8 Oct 2025 02:06:47 +0000 (22:06 -0400)]
ci: use libsoup 3 by default
libsoup-3.0-dev is present in all supported debian versions
libsoup2.4-dev is not present in testing anymore (forkie)
Etienne Champetier [Wed, 8 Oct 2025 01:52:33 +0000 (21:52 -0400)]
Remove no longer used .lgtm.yml
Colin Walters [Mon, 29 Sep 2025 14:30:30 +0000 (10:30 -0400)]
Merge pull request #3529 from cgwalters/rust-release
Rust release
Colin Walters [Mon, 29 Sep 2025 12:43:03 +0000 (14:43 +0200)]
rust: Release 0.20.5
Signed-off-by: Colin Walters <walters@verbum.org>
Colin Walters [Mon, 29 Sep 2025 12:21:53 +0000 (14:21 +0200)]
rust: Fix Rust 1.89 lifetime lint
Colin Walters [Fri, 26 Sep 2025 15:10:23 +0000 (11:10 -0400)]
Merge pull request #3527 from alexlarsson/fix-sign-bindings
Fix various things around signatures and their use in rust
Alexander Larsson [Fri, 26 Sep 2025 13:37:50 +0000 (15:37 +0200)]
rust: Regenerate and release 0.20.5
This adds the new bindings for signing and composefs use.
Alexander Larsson [Fri, 26 Sep 2025 08:02:59 +0000 (10:02 +0200)]
rust-binding: Extend bindings to support composefs and signing
This adds GLib.VariantDict, which is needed for
ostree_repo_commit_add_composefs_metadata(), and OSTree.BlobReader
which are needed for ostree_sign_read_sk().
With these we can sign ostree commits with composefs digests in them.
Alexander Larsson [Fri, 26 Sep 2025 11:24:41 +0000 (13:24 +0200)]
gir: Add (nullable) to ostree_blob_reader_read_blob return value
This adds api docs to ostree_blob_reader_read_blob() so that we
can mark the return value as nullable. This is needed, because
this function can return NULL without setting error, and this
needs to be handled in bindings (such as the rust ones).
Alexander Larsson [Fri, 26 Sep 2025 13:12:16 +0000 (15:12 +0200)]
ostree-sign.
ed25519/spki: Fix double free in set_sk()
When the gvariant is G_VARIANT_TYPE_BYTESTRING we need to duplicate
the data we get from g_variant_get_fixed_array(), otherwise we will
double-free it when we later free sign->secret_key.
Colin Walters [Sat, 20 Sep 2025 17:46:10 +0000 (13:46 -0400)]
Merge pull request #3526 from lcook/status-index-json
status: Include deployment index in JSON output
Lewis Cook [Sat, 20 Sep 2025 08:55:49 +0000 (09:55 +0100)]
status: Include deployment index in JSON output
Colin Walters [Thu, 18 Sep 2025 18:38:54 +0000 (14:38 -0400)]
Merge pull request #3523 from alexlarsson/signed-composefs-with-bootc
Support using composefs signatures also with bootc commits
Alexander Larsson [Mon, 15 Sep 2025 09:33:16 +0000 (11:33 +0200)]
Support using composefs signatures also with bootc commits
When using bootc, if you convert a signed ostree commit into an OCI
image `rpm-ostree compose container-encapsulate` you end up with a new
commit that isn't signed. However, the base commit object, and its
commitmeta are still in the image and will end up the repo, and
since https://github.com/bootc-dev/bootc/pull/1600 the base commit
id is available as the parent commit.
So, we change ostree-prepare-root to fall back to using the base
commit+commitmeta to find the expected composefs digest if the main
commit is not signed.
Note: This will only work with ostree-only commits. If you have any
layered data, then the content will change, and the composefs digest
in the base commit will not match the deployed one. This is expected
with such sealed commits though. If you want to layer, either disable
sealing, or create a new sealed ostree commit for the new image.
Alexander Larsson [Mon, 15 Sep 2025 08:04:59 +0000 (10:04 +0200)]
prepare-root: add allow_noent argument to load_variant
This is a minor preparation for a later change. Instead of
hand-rolling the G_FILE_ERROR_NOENT error check we add
a new allow_noent option.
Additionally, we move the handling of a no commitmeta being
an error to the caller of load_commit_for_deploy(), because
this check will be slightly more complex in the future.
Colin Walters [Thu, 11 Sep 2025 23:20:11 +0000 (19:20 -0400)]
Merge pull request #3524 from jlebon/pr/state-overlays-exp
man/ostree-state-overlay: drop experimental but link to bootc docs
Jonathan Lebon [Thu, 11 Sep 2025 19:28:34 +0000 (15:28 -0400)]
man/ostree-state-overlay: drop experimental but link to bootc docs
This has baked for long enough now so drop the experimental flag. But do
explain that symlinks are preferred and link to the bootc docs.
Colin Walters [Fri, 5 Sep 2025 21:12:54 +0000 (17:12 -0400)]
Merge pull request #3521 from cgwalters/release
Release 2025.6
Colin Walters [Fri, 5 Sep 2025 19:20:40 +0000 (15:20 -0400)]
configure: post-release version bump
Colin Walters [Fri, 5 Sep 2025 19:19:33 +0000 (15:19 -0400)]
Release 2025.6
Colin Walters [Fri, 5 Sep 2025 18:46:20 +0000 (14:46 -0400)]
Merge pull request #3518 from champtar/remove-mount-cycle
Rework mounts to fix sysroot.mount umount
Etienne Champetier [Wed, 3 Sep 2025 18:22:39 +0000 (14:22 -0400)]
Revert "Add ostree-shutdown.service: hide /sysroot and make /etc read-only"
Instead of adding a shutdown service, we rework how we create the mounts.
After the 2 previous commits, sysroot.mount umount works, and
systemd-shutdown will take care of remounting etc.mount read-only and
calling sync() as needed.
This reverts commit
d0c454c23637dceda6d7395dd2141b564e3efa47.
Etienne Champetier [Wed, 3 Sep 2025 18:12:27 +0000 (14:12 -0400)]
ostree-soft-reboot: fix sysroot.mount umount
The composefs at /run/nextboot uses /sysroot, so systemd fails to
umount sysroot.mount during soft-reboot.
Create a temporary bind-mount, use it to prepare /run/nextboot
and MNT_DETACH it when we are done.
Etienne Champetier [Tue, 2 Sep 2025 21:33:00 +0000 (17:33 -0400)]
ostree-prepare-root: avoid mount cycle
Moving the physical root at /sysroot, we end up
with a mount cycle between / and /sysroot, forcing us to use
MS_DETACH during shutdown (
d0c454c23637dceda6d7395dd2141b564e3efa47).
We can replace ostree-shutdown.service by reworking how we mount
/sysroot, in short use MS_BIND instead of MS_MOVE.
Colin Walters [Thu, 4 Sep 2025 12:13:57 +0000 (08:13 -0400)]
Merge pull request #3517 from jozzsi/3495
Move dracut module from 98 ordering to the recommended 50 ordering
Jo Zzsi [Sun, 31 Aug 2025 04:56:10 +0000 (00:56 -0400)]
Move dracut module from 98 ordering to the recommended 50 ordering
In dracut release v108 or later the recommended ordering for out
out of tree modules is 50. The following is a section from dracut
documentation:
> Not using the 50-59 range for out of tree dracut modules will likely
> lead to unintended errors in the initramfs generation process as your
> dracut module will either run too early or too late in the generation process.
> You have been warned.
Fixes: https://github.com/ostreedev/ostree/issues/3495
Etienne Champetier [Fri, 29 Aug 2025 22:27:38 +0000 (18:27 -0400)]
Merge pull request #3516 from cgwalters/remount-shutdown
Add ostree-shutdown.service: hide /sysroot and make /etc read-only
Colin Walters [Thu, 28 Aug 2025 17:53:14 +0000 (13:53 -0400)]
Add ostree-shutdown.service: hide /sysroot and make /etc read-only
We have a lot of bind mounts; these are usually set up in the initramfs.
So far during shutdown we've let systemd just try to sort things out
via auto-generated mount units i.e. `sysroot.mount` and `etc.mount`
and so on.
systemd has some special casing for `-.mount` (i.e. `/`) and `etc.mount`
https://github.com/systemd/systemd/blob/
e91bfad241799b449df73efc30d833b9c5937001/src/shared/fstab-util.c#L72
However it doesn't special case `/sysroot` - which is currently
an ostree-specific invention (when used in the real root).
We cannot actually unmount `/sysroot` while it's in use, and it
is because `/etc` is a bind mount into it. And we can't tear
down `/etc` because it's just expected that e.g. pid 1 and other
things hold open references to it - until things finally
transition into systemd-shutdown.
What we can do though is explicitly detach it during the shutdown
phase; this ensures that systemd won't try to clean it up then,
suppressing errors about its inability to do so.
While we're here, let's also remount `/etc` read-only; while
systemd itself will try to do so during systemd-shutdown.
Per comments if this service fails, it's a bug in something
else to be fixed.
Closes: https://github.com/ostreedev/ostree/issues/3513
Signed-off-by: Colin Walters <walters@verbum.org>
Colin Walters [Fri, 29 Aug 2025 20:07:17 +0000 (16:07 -0400)]
Merge pull request #3515 from HastD/xattrs-double-free
fix: double free in checkout_tree_at_recurse
Daniel Hast [Fri, 29 Aug 2025 18:17:15 +0000 (14:17 -0400)]
fix: double free in checkout_tree_at_recurse
Both `xattrs` and `modified_xattrs` are declared with `g_autoptr`, but
`xattrs` is later simply assigned to be equal to `modified_xattrs`,
meaning the automatic cleanup is a double-free.
This is fixed by instead using `g_steal_pointer` to assign the old value
of `xattrs` to a temporary variable, which is used to create the new
value.
I believe this is the cause of issue #3303, and this should fix #3303.
(I can consistently reproduce the issue by attempting to deploy a
rechunked image with bootc, and with this patch, the issue no longer
occurs and the deployment succeeds.)
Signed-off-by: Daniel Hast <hast.daniel@protonmail.com>
Etienne Champetier [Wed, 27 Aug 2025 17:25:17 +0000 (13:25 -0400)]
Merge pull request #3514 from cgwalters/finalize-needs-etc
ostree-finalize-staged.service: RequiresMountsFor=/etc
Colin Walters [Wed, 27 Aug 2025 14:38:11 +0000 (10:38 -0400)]
ostree-finalize-staged.service: RequiresMountsFor=/etc
I've seen in some cases systemd try to unmount /etc quite early
and then fail because it's in use.
It's confusing because I don't see this in all scenarios.
But regardless, in the situations where it does occur,
this fixes it.
Signed-off-by: Colin Walters <walters@verbum.org>
Colin Walters [Tue, 26 Aug 2025 15:00:12 +0000 (11:00 -0400)]
Merge pull request #3512 from champtar/OSTREE_SUPPRESS_SYNCFS
libostree: remove OSTREE_SUPPRESS_SYNCFS
Etienne Champetier [Tue, 26 Aug 2025 13:10:21 +0000 (09:10 -0400)]
libostree: remove OSTREE_SUPPRESS_SYNCFS
This workaround was needed for the old valgrind version in EL 7
Colin Walters [Mon, 25 Aug 2025 21:01:05 +0000 (17:01 -0400)]
Merge pull request #3509 from cgwalters/sysroot-sync-repo
Deduplicate repo+sysroot syncfs logic
Colin Walters [Mon, 25 Aug 2025 15:07:26 +0000 (11:07 -0400)]
Merge pull request #3510 from cgwalters/release
Release 2025.5
Colin Walters [Thu, 21 Aug 2025 09:57:03 +0000 (11:57 +0200)]
Deduplicate repo+sysroot syncfs logic
This is a followup to https://github.com/ostreedev/ostree/pull/3504/commits/
6e5a27a29d33d50a2a4380c406405435d919b6b4
which I believe is correct as is. However, we already have a file
descriptor open for the ostree repo, which *must* be on
the same filesystem as `/sysroot/ostree` (the deployment
code forces hardlinking today).
It's hence cleaner to reuse that extant fd instead of opening
a new one - we know we did writes to that fd.
But going farther here, there already is logic to use syncfs
for the repo when downloading objects (in a common case
we actually syncfs twice).
Since these are really the same operation, unify them:
- Add journaling to the repo one syncfs case
- Change the sysroot case to just call it
- Since we log consistently to the journal for all syncfs/fsfreeze
operations now, drop the SyncStats bits which was a way
to add info about that to a later journal message
Additionally, let's add an extra check when we're
opening the repo that it's on the same device just on general
principle.
Signed-off-by: Colin Walters <walters@verbum.org>
Colin Walters [Mon, 25 Aug 2025 12:49:34 +0000 (08:49 -0400)]
configure: Post-release version bump
Signed-off-by: Colin Walters <walters@verbum.org>
Colin Walters [Mon, 25 Aug 2025 12:46:57 +0000 (08:46 -0400)]
Release 2025.5
Signed-off-by: Colin Walters <walters@verbum.org>
Joseph Marrero Corchado [Thu, 21 Aug 2025 16:08:02 +0000 (12:08 -0400)]
Merge pull request #3507 from cgwalters/aboot-chdir
aboot: Use fd and not absolute path
Joseph Marrero Corchado [Thu, 21 Aug 2025 14:04:48 +0000 (10:04 -0400)]
Merge pull request #3508 from cgwalters/switchroot-journal
prepare-root: Log to journal, not stdout
Colin Walters [Wed, 20 Aug 2025 13:51:10 +0000 (15:51 +0200)]
prepare-root: Log to journal, not stdout
Since this can now be used as part of the shared library for
soft reboots, we shouldn't have a library write to stdout.
I noticed this in bootc. Use the journal instead.
Signed-off-by: Colin Walters <walters@verbum.org>
Colin Walters [Tue, 19 Aug 2025 13:16:35 +0000 (15:16 +0200)]
aboot: Use fd and not absolute path
Motivated by https://github.com/bootc-dev/bootc/pull/1532/commits/
6d2eb2aaa92e23f434c47e3d0ebadc0307d45289
(We need to have a shared helper for this stuff at some point)
Colin Walters [Tue, 19 Aug 2025 13:10:24 +0000 (15:10 +0200)]
Merge pull request #3506 from cgwalters/adapt-cosa
ci: Adapt to cosa change
Colin Walters [Tue, 19 Aug 2025 09:47:53 +0000 (11:47 +0200)]
ci: Adapt to cosa change
It seems to have stopped building qemu by default.
Signed-off-by: Colin Walters <walters@verbum.org>
Colin Walters [Tue, 19 Aug 2025 07:10:29 +0000 (09:10 +0200)]
Merge pull request #3504 from champtar/syncfs-ostree
deploy: call syncfs() for /ostree instead of /
Etienne Champetier [Mon, 18 Aug 2025 21:41:37 +0000 (17:41 -0400)]
deploy: call syncfs() for /ostree instead of /
In full_system_sync we were calling syncfs(/) expecting
all the recent modification in /ostree to be synced to disk.
With / now being composefs, syncfs(/) is a noop, so call
syncfs(/ostree) as that is what we really want.
Colin Walters [Wed, 6 Aug 2025 15:40:45 +0000 (11:40 -0400)]
Merge pull request #3494 from alexlarsson/remove-aboot-dead-code
deploy: Remove some dead aboot code
Alexander Larsson [Wed, 6 Aug 2025 13:06:25 +0000 (15:06 +0200)]
deploy: Remove some dead aboot code
The code in get_kernel_from_tree_usrlib_modules() that checks for an
"aboot.cfg" does nothing with it (and in fact may leak the fd in case
its there). In practice, /usr/lib/modules never has an aboot.cfg, so
this is just completely dead code.
Signed-off-by: Alexander Larsson <alexl@redhat.com>
Colin Walters [Wed, 6 Aug 2025 12:25:53 +0000 (08:25 -0400)]
Merge pull request #3493 from alexlarsson/fix-aboot-updates
deploy: Fix path to aboot.cfg in BLS files
Alexander Larsson [Wed, 6 Aug 2025 10:16:34 +0000 (12:16 +0200)]
deploy: Fix path to aboot.cfg in BLS files
The change in https://github.com/ostreedev/ostree/pull/3413/ was meant
to change when the abootcfg option is set in the BLS file. However,
it also changed the value of this key, using the wrong directory
(bootcsumdir instead of /usr/lib/ostree-boot).
This means that during update, aboot-update gets the wrong path to the
config and cannot correctly write the aboot partition.
Signed-off-by: Alexander Larsson <alexl@redhat.com>
Colin Walters [Thu, 24 Jul 2025 17:21:55 +0000 (13:21 -0400)]
Merge pull request #3487 from cgwalters/soft-reboot-boot-mnt
soft-reboot: Also handle /boot
Colin Walters [Tue, 22 Jul 2025 21:38:41 +0000 (17:38 -0400)]
soft-reboot: Also handle /boot
Closes: https://github.com/ostreedev/ostree/issues/3486
Signed-off-by: Colin Walters <walters@verbum.org>
Colin Walters [Tue, 22 Jul 2025 20:41:49 +0000 (16:41 -0400)]
switchroot: Refactor /boot mounting into helper function
So it can be shared with soft reboots.
Signed-off-by: Colin Walters <walters@verbum.org>
Colin Walters [Thu, 24 Jul 2025 12:56:04 +0000 (08:56 -0400)]
Merge pull request #3485 from cgwalters/test-boot-bind
tests: verify /boot mount with prepare root
Colin Walters [Tue, 22 Jul 2025 21:17:05 +0000 (17:17 -0400)]
tests-unit-container: Verify /boot mount point
Prep for further changes.
Signed-off-by: Colin Walters <walters@verbum.org>
Colin Walters [Tue, 22 Jul 2025 21:16:39 +0000 (17:16 -0400)]
justfile: Add a target to iterate on container unit tests quickly
We need to split these into two container builds probably...
Colin Walters [Tue, 22 Jul 2025 20:55:09 +0000 (16:55 -0400)]
tests: Fix negative check for transient etc
This test was passing for the wrong reason. Just noticed when
reviewing.
Colin Walters [Tue, 22 Jul 2025 15:36:01 +0000 (11:36 -0400)]
Merge pull request #3484 from cgwalters/bump-sys
Two rust patches
Colin Walters [Tue, 22 Jul 2025 14:52:45 +0000 (10:52 -0400)]
rust: Fix a few warnings
- Unused imports because we weren't actually exporting the structs
from those modules
- glib prelude is empty now?
- mount namespace usage is conditional
Signed-off-by: Colin Walters <walters@verbum.org>
Colin Walters [Tue, 22 Jul 2025 14:48:28 +0000 (10:48 -0400)]
rust: Bump sys crate version too
Should have happened in the other PR.
Colin Walters [Tue, 22 Jul 2025 14:07:09 +0000 (10:07 -0400)]
Merge pull request #3479 from cgwalters/test-etc-transient
tests: Add a test case for etc.transient
Colin Walters [Tue, 22 Jul 2025 14:03:53 +0000 (10:03 -0400)]
Merge pull request #3482 from cgwalters/release-rust
rust: Regenerate and release 0.20.4
Colin Walters [Tue, 22 Jul 2025 14:03:30 +0000 (10:03 -0400)]
Merge pull request #3481 from cgwalters/release
Release 2025.4
Colin Walters [Mon, 21 Jul 2025 20:50:24 +0000 (16:50 -0400)]
configure: post-release version bump