Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package transactional-update for openSUSE:Factory checked in at 2025-07-23 16:32:18 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/transactional-update (Old) and /work/SRC/openSUSE:Factory/.transactional-update.new.8875 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "transactional-update" Wed Jul 23 16:32:18 2025 rev:121 rq:1295281 version:5.0.7 Changes: -------- --- /work/SRC/openSUSE:Factory/transactional-update/transactional-update.changes 2025-07-10 23:15:07.012710100 +0200 +++ /work/SRC/openSUSE:Factory/.transactional-update.new.8875/transactional-update.changes 2025-07-23 16:32:40.505757981 +0200 @@ -1,0 +2,20 @@ +Wed Jul 23 10:54:17 UTC 2025 - Ignaz Forster <ifors...@suse.com> + +- Add journalmount.patch to bind mount systemd journal only when + available + +------------------------------------------------------------------- +Mon Jul 21 10:06:43 UTC 2025 - Ignaz Forster <ifors...@suse.com> + +- Version 5.0.7 + - Add sysext compatibility [bsc#1246140] + - Fix soft-reboot with btrfs subvolume based /etc + - Sync /etc layers also on soft-reboot + - Bind mount /run/systemd/journal to allow log calls + [gh#openSUSE/transactional-update#149] + - Use rootlesskit instead of fakeroot for tests + - Small coding style fixes +- Temporarily disabling the testsuite because it doesn't run in + the build environment so far + +------------------------------------------------------------------- Old: ---- transactional-update-5.0.6.tar.gz New: ---- journalmount.patch transactional-update-5.0.7.tar.gz ----------(New B)---------- New: - Add journalmount.patch to bind mount systemd journal only when available ----------(New E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ transactional-update.spec ++++++ --- /var/tmp/diff_new_pack.m8pOvo/_old 2025-07-23 16:32:41.337792792 +0200 +++ /var/tmp/diff_new_pack.m8pOvo/_new 2025-07-23 16:32:41.337792792 +0200 @@ -26,7 +26,7 @@ %{!?_distconfdir: %global _distconfdir %{_prefix}%{_sysconfdir}} Name: transactional-update -Version: 5.0.6 +Version: 5.0.7 Release: 0 Summary: Transactional Updates with btrfs and snapshots License: GPL-2.0-or-later AND LGPL-2.1-or-later @@ -34,6 +34,7 @@ URL: https://github.com/openSUSE/transactional-update Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz Source1: transactional-update.check +Patch0: journalmount.patch BuildRequires: acl BuildRequires: attr @@ -42,7 +43,6 @@ BuildRequires: automake BuildRequires: bats BuildRequires: docbook-xsl-stylesheets -BuildRequires: fakeroot BuildRequires: fdupes %if %{?suse_version} <= 1500 BuildRequires: gcc10-c++ @@ -50,6 +50,7 @@ BuildRequires: gcc-c++ %endif BuildRequires: libtool +BuildRequires: libxml2-tools BuildRequires: libzypp BuildRequires: make BuildRequires: suse-module-tools @@ -64,7 +65,6 @@ BuildRequires: pkgconfig(systemd) BuildRequires: pkgconfig(udev) # Cannot use python3dist() names yet... -BuildRequires: libxml2-tools BuildRequires: python3-lxml BuildRequires: w3m BuildRequires: xsltproc @@ -358,8 +358,4 @@ %config(noreplace) %{_sysconfdir}/zypp/systemCheck.d/transactional-update.check %check -if ! %{__make} check; then - cat tests/test-suite.log - exit 1 -fi ++++++ journalmount.patch ++++++ diff --git a/lib/Transaction.cpp b/lib/Transaction.cpp index 1977ea3..ebe96a7 100644 --- a/lib/Transaction.cpp +++ b/lib/Transaction.cpp @@ -177,7 +177,8 @@ void Transaction::impl::snapMount() { mntRun->setType("tmpfs"); mntRun->setSource("tmpfs"); dirsToMount.push_back(std::move(mntRun)); - dirsToMount.push_back(std::make_unique<BindMount>("/run/systemd/journal")); + if (fs::exists("/run/systemd/journal")) + dirsToMount.push_back(std::make_unique<BindMount>("/run/systemd/journal")); std::unique_ptr<Mount> mntVarTmp{new Mount{"/var/tmp"}}; mntVarTmp->setType("tmpfs"); mntVarTmp->setSource("tmpfs"); ++++++ transactional-update-5.0.6.tar.gz -> transactional-update-5.0.7.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transactional-update-5.0.6/ChangeLog new/transactional-update-5.0.7/ChangeLog --- old/transactional-update-5.0.6/ChangeLog 1970-01-01 01:00:00.000000000 +0100 +++ new/transactional-update-5.0.7/ChangeLog 2025-07-23 16:32:41.421796307 +0200 @@ -0,0 +1 @@ +symbolic link to NEWS diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transactional-update-5.0.6/NEWS new/transactional-update-5.0.7/NEWS --- old/transactional-update-5.0.6/NEWS 2025-07-09 16:28:10.000000000 +0200 +++ new/transactional-update-5.0.7/NEWS 2025-07-21 11:46:30.000000000 +0200 @@ -2,6 +2,15 @@ Copyright (C) 2016-2025 Thorsten Kukuk, Ignaz Forster et al. +Version 5.0.7 (2025-07-21) +* Add sysext compatibility [bsc#1246140] +* Fix soft-reboot with btrfs subvolume based /etc +* Sync /etc layers also on soft-reboot +* Bind mount /run/systemd/journal to allow log calls + [gh#openSUSE/transactional-update#149] +* Use rootlesskit instead of fakeroot for tests +* Small coding style fixes + Version 5.0.6 (2025-07-09) * Fix missing x-initrd.mount in fstab on migration [boo#1246139] When migrating overlayfs based /etc to btrfs subvolumes, then the diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transactional-update-5.0.6/configure.ac new/transactional-update-5.0.7/configure.ac --- old/transactional-update-5.0.6/configure.ac 2025-07-09 16:28:10.000000000 +0200 +++ new/transactional-update-5.0.7/configure.ac 2025-07-21 11:46:30.000000000 +0200 @@ -1,11 +1,11 @@ dnl Process this file with autoconf to produce a configure script. -AC_INIT([transactional-update],[5.0.6]) +AC_INIT([transactional-update],[5.0.7]) # Increase on any interface change and reset revision LIBTOOL_CURRENT=6 # On interface change increase if backwards compatible, reset otherwise LIBTOOL_AGE=2 # Increase on *any* C/C++ library code change, reset at interface change -LIBTOOL_REVISION=8 +LIBTOOL_REVISION=9 AC_CANONICAL_TARGET AM_INIT_AUTOMAKE([foreign]) AC_CONFIG_FILES([tukit.pc]) @@ -114,9 +114,9 @@ test "x$enable_man" != "xno" -a "x$with_doc" != "xno") AC_PATH_PROG([BATS], [bats]) -AC_PATH_PROG([FAKEROOT], [fakeroot]) -AS_IF([test -z "$BATS" -o -z "$FAKEROOT"], [AC_MSG_WARN([To run tests please install - bats and fakeroot.])]) +AC_PATH_PROG([ROOTLESSKIT], [rootlesskit]) +AS_IF([test -z "$BATS" -o -z "$ROOTLESSKIT"], [AC_MSG_WARN([To run tests please install + bats and rootlesskit.])]) AC_CONFIG_FILES([Makefile lib/Makefile tukit/Makefile sbin/Makefile man/Makefile \ systemd/Makefile logrotate/Makefile dracut/Makefile doc/Makefile \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transactional-update-5.0.6/lib/Snapshot/Snapper.cpp new/transactional-update-5.0.7/lib/Snapshot/Snapper.cpp --- old/transactional-update-5.0.6/lib/Snapshot/Snapper.cpp 2025-07-09 16:28:10.000000000 +0200 +++ new/transactional-update-5.0.7/lib/Snapshot/Snapper.cpp 2025-07-21 11:46:30.000000000 +0200 @@ -107,10 +107,14 @@ std::smatch match; // snapper doesn't support the `apply` command for now, so use findmnt directly. - std::string id = Util::exec("findmnt --target /usr --raw --noheadings --output FSROOT --first-only --direction backward"); + std::string id = Util::exec("findmnt --target /usr --raw --noheadings --output FSROOT --first-only --direction backward --types btrfs"); bool found = std::regex_search(id, match, std::regex(".*.snapshots/(.*)/snapshot.*")); - if (!found) - throw std::runtime_error{"Couldn't determine current snapshot number"}; + if (!found) { + id = Util::exec("findmnt --target / --raw --noheadings --output FSROOT --first-only --direction backward --types btrfs"); + found = std::regex_search(id, match, std::regex(".*.snapshots/(.*)/snapshot.*")); + if (!found) + throw std::runtime_error{"Couldn't determine current snapshot number"}; + } return match[1].str(); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transactional-update-5.0.6/lib/Snapshot.hpp new/transactional-update-5.0.7/lib/Snapshot.hpp --- old/transactional-update-5.0.6/lib/Snapshot.hpp 2025-07-09 16:28:10.000000000 +0200 +++ new/transactional-update-5.0.7/lib/Snapshot.hpp 2025-07-21 11:46:30.000000000 +0200 @@ -16,7 +16,7 @@ class Snapshot { public: - Snapshot(std::string id): snapshotId{id} {}; + Snapshot(std::string id): snapshotId{id} {} virtual ~Snapshot() = default; virtual void close() = 0; virtual void abort() = 0; @@ -25,7 +25,7 @@ virtual bool isReadOnly() = 0; virtual void setDefault() = 0; virtual void setReadOnly(bool readonly) = 0; - std::string getUid() { return snapshotId; }; + std::string getUid() { return snapshotId; } protected: std::string snapshotId; std::string snapshotDate; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transactional-update-5.0.6/lib/Transaction.cpp new/transactional-update-5.0.7/lib/Transaction.cpp --- old/transactional-update-5.0.6/lib/Transaction.cpp 2025-07-09 16:28:10.000000000 +0200 +++ new/transactional-update-5.0.7/lib/Transaction.cpp 2025-07-21 11:46:30.000000000 +0200 @@ -177,6 +177,7 @@ mntRun->setType("tmpfs"); mntRun->setSource("tmpfs"); dirsToMount.push_back(std::move(mntRun)); + dirsToMount.push_back(std::make_unique<BindMount>("/run/systemd/journal")); std::unique_ptr<Mount> mntVarTmp{new Mount{"/var/tmp"}}; mntVarTmp->setType("tmpfs"); mntVarTmp->setSource("tmpfs"); @@ -524,8 +525,8 @@ Util::exec("rsync --archive --inplace --xattrs --acls --exclude 'fstab' --exclude 'etc.syncpoint' --delete --quiet '" + this->pImpl->bindDir.native() + "/etc/' " + targetRoot.native() + "/etc"); } - TransactionalUpdate::Plugins plugins_without_transaction{nullptr}; - plugins_without_transaction.run("finalize-post", pImpl->snapshot->getUid() + " " + "discarded"); + TransactionalUpdate::Plugins plugins_without_transaction{nullptr}; + plugins_without_transaction.run("finalize-post", pImpl->snapshot->getUid() + " " + "discarded"); return; } if (fs::exists(getRoot() / "discardIfNoChange")) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transactional-update-5.0.6/sbin/transactional-update.in new/transactional-update-5.0.7/sbin/transactional-update.in --- old/transactional-update-5.0.6/sbin/transactional-update.in 2025-07-09 16:28:10.000000000 +0200 +++ new/transactional-update-5.0.7/sbin/transactional-update.in 2025-07-21 11:46:30.000000000 +0200 @@ -312,7 +312,7 @@ log_error "ERROR during apply: Couldn't create mount directory." fi - sourcedevice="$(findmnt --target /usr --raw --noheadings --output SOURCE --nofsroot | tail -n 1)" + sourcedevice="$(findmnt --target / --raw --noheadings --output SOURCE --nofsroot --first-only)" # Mount new snapshot as base if ! mount "${sourcedevice}" "${APPLYWORKDIR}/mount"; then log_error "ERROR during apply: Mounting ${sourcedevice} to ${APPLYWORKDIR}/mount failed." @@ -362,6 +362,10 @@ quit 2 fi + if [ "$(systemd-sysext | tail -n +2 | grep " none " | wc -l)" -ne 2 ]; then + REFRESH_SYSEXTS=1 + fi + if [ -e /usr/libexec/transactional-update-sync-etc-state ] && [ -e "/.snapshots/${NEW_DEFAULT_SNAPSHOT_ID}/snapshot/etc/etc.syncpoint" ] ; then log_info "Syncing /etc state from old snapshot..." /usr/libexec/transactional-update-sync-etc-state /etc "/.snapshots/${NEW_DEFAULT_SNAPSHOT_ID}/snapshot/etc" "/.snapshots/${NEW_DEFAULT_SNAPSHOT_ID}/snapshot/etc/etc.syncpoint" @@ -383,6 +387,11 @@ rbinddir_done="${rbinddir_done} ${rbinddir}" done + if [ "${REFRESH_SYSEXTS}" ]; then + log_info "Refreshing sysexts..." + systemd-sysext refresh + fi + umount --lazy "${APPLYWORKDIR}/mount" rmdir "${APPLYWORKDIR}/mount" rmdir "${APPLYWORKDIR}" @@ -903,7 +912,10 @@ fi BOOTED_SNAPSHOT_ID=$(grep subvol=/@/.snapshots/ /proc/mounts | grep "/ btrfs" | sed -e 's|.*.snapshots/\(.*\)/snapshot.*|\1|g') -CURRENT_SNAPSHOT_ID=$(findmnt --target /usr --raw --noheadings --output FSROOT | tail -n 1 | sed -e 's|.*.snapshots/\(.*\)/snapshot.*|\1|g') +CURRENT_SNAPSHOT_ID=$(findmnt --target /usr --raw --noheadings --output FSROOT --first-only --direction backward --types btrfs | sed -e 's|.*.snapshots/\(.*\)/snapshot.*|\1|g') +if [ -z "${CURRENT_SNAPSHOT_ID}" ]; then + CURRENT_SNAPSHOT_ID=$(findmnt --target / --raw --noheadings --output FSROOT --first-only --direction backward --types btrfs | sed -e 's|.*.snapshots/\(.*\)/snapshot.*|\1|g') +fi DEFAULT_SNAPSHOT_ID=$(btrfs subvolume get-default / | sed -e 's|.*.snapshots/\(.*\)/snapshot|\1|g') RO_ROOT=$(btrfs property get / ro | sed -e 's|ro=||') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transactional-update-5.0.6/systemd/prepare-nextroot-for-softreboot new/transactional-update-5.0.7/systemd/prepare-nextroot-for-softreboot --- old/transactional-update-5.0.6/systemd/prepare-nextroot-for-softreboot 2025-07-09 16:28:10.000000000 +0200 +++ new/transactional-update-5.0.7/systemd/prepare-nextroot-for-softreboot 2025-07-21 11:46:30.000000000 +0200 @@ -20,7 +20,13 @@ findmnt --noheadings / | awk '{ sub("subvol=/@/[^,]*", "", $4); sub("subvolid=[^,]*", "", $4); sub("\\[.*\\]", "", $2); system("mount -o \x27" $4 "\x27 " $2 " /run/nextroot") }' # Perform all mounts marked with x-initrd.mount inside /run/nextroot -awk '$1 !~ /^#/ && $4 ~ /(\<|,)x-initrd\.mount(\>|,)/ { +awk '$1 !~ /^#/ && $4 !~ /(\<|,)bind(\>|,)/ && $4 ~ /(\<|,)x-initrd\.mount(\>|,)/ { gsub(/sysroot\//,"run/nextroot/", $4); # The /etc overlay mount hardcodes /sysroot paths in options if(system("findmnt /run/nextroot" $2 " >/dev/null || mount --target-prefix /run/nextroot --fstab /run/nextroot/etc/fstab --options-mode ignore -o \x27" $4 "\x27 " $2) != 0) exit 1; }' /run/nextroot/etc/fstab + +if [ -d /run/nextroot/etc/etc.syncpoint ]; then + mount --bind /run/nextroot/etc /run/nextroot/etc + mount -o remount,rw /run/nextroot/etc + /usr/libexec/transactional-update-sync-etc-state /etc /run/nextroot/etc /run/nextroot/etc/etc.syncpoint +fi diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transactional-update-5.0.6/systemd/prepare-nextroot-for-softreboot.service.in new/transactional-update-5.0.7/systemd/prepare-nextroot-for-softreboot.service.in --- old/transactional-update-5.0.6/systemd/prepare-nextroot-for-softreboot.service.in 2025-07-09 16:28:10.000000000 +0200 +++ new/transactional-update-5.0.7/systemd/prepare-nextroot-for-softreboot.service.in 2025-07-21 11:46:30.000000000 +0200 @@ -2,6 +2,7 @@ Description=Mount next snapshot for soft-reboot DefaultDependencies=no Before=systemd-soft-reboot.service +Before=basic.target [Service] ExecStart=@libexecdir@/prepare-nextroot-for-softreboot diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transactional-update-5.0.6/tests/Makefile.am new/transactional-update-5.0.7/tests/Makefile.am --- old/transactional-update-5.0.6/tests/Makefile.am 2025-07-09 16:28:10.000000000 +0200 +++ new/transactional-update-5.0.7/tests/Makefile.am 2025-07-21 11:46:30.000000000 +0200 @@ -1,12 +1,9 @@ # SPDX-License-Identifier: GPL-2.0-or-later # SPDX-FileCopyrightText: Copyright SUSE LLC -BATS_LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) $(top_srcdir)/tap-driver.sh -AM_BATS_LOG_DRIVER_FLAGS = -- bats --tap --filter-tags '!needroot' --output -ROOT_LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) $(top_srcdir)/tap-driver.sh -AM_ROOT_LOG_DRIVER_FLAGS = -- fakeroot bats --tap --filter-tags 'needroot' --output +LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) $(top_srcdir)/tap-driver.sh +LOG_DRIVER_FLAGS = -- rootlesskit bats --tap --output -TEST_EXTENSIONS = .bats .root -TESTS = etc_changes.bats etc_changes_as.root +TESTS = etc_changes.bats EXTRA_DIST = $(TESTS) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transactional-update-5.0.6/tests/etc_changes.bats new/transactional-update-5.0.7/tests/etc_changes.bats --- old/transactional-update-5.0.6/tests/etc_changes.bats 2025-07-09 16:28:10.000000000 +0200 +++ new/transactional-update-5.0.7/tests/etc_changes.bats 2025-07-21 11:46:30.000000000 +0200 @@ -150,7 +150,7 @@ } # bats test_tags=needroot -@test "File contents and properties (with fakeroot)" { +@test "File contents and properties (needs root)" { shopt -s globstar dotglob FILES=(File0.txt) createFilesIn "${mockdir_old_etc}" "${FILES[@]}" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transactional-update-5.0.6/tests/etc_changes_as.root new/transactional-update-5.0.7/tests/etc_changes_as.root --- old/transactional-update-5.0.6/tests/etc_changes_as.root 2025-07-23 16:32:41.417796139 +0200 +++ new/transactional-update-5.0.7/tests/etc_changes_as.root 1970-01-01 01:00:00.000000000 +0100 @@ -1 +0,0 @@ -symbolic link to etc_changes.bats