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-10 23:14:55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/transactional-update (Old) and /work/SRC/openSUSE:Factory/.transactional-update.new.7373 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "transactional-update" Thu Jul 10 23:14:55 2025 rev:120 rq:1291508 version:5.0.6 Changes: -------- --- /work/SRC/openSUSE:Factory/transactional-update/transactional-update.changes 2025-06-20 16:48:28.805953275 +0200 +++ /work/SRC/openSUSE:Factory/.transactional-update.new.7373/transactional-update.changes 2025-07-10 23:15:07.012710100 +0200 @@ -1,0 +2,18 @@ +Wed Jul 9 14:32:31 UTC 2025 - Ignaz Forster <ifors...@suse.com> + +- Version 5.0.6 + - Fix missing x-initrd.mount in fstab on migration [boo#1246139] + When migrating overlayfs based /etc to btrfs subvolumes, then + the attribute was not set - this may result in failures from + services operating on /etc during initrd phase such as SELinux + relabelling + - Optimize execution time of tests + +------------------------------------------------------------------- +Fri Jul 4 11:53:08 UTC 2025 - Ignaz Forster <ifors...@suse.com> + +- Version 5.0.5 + - Add support for kdump 2.1.0 [bsc#1243758] + - Integrate test to support `make check` + +------------------------------------------------------------------- Old: ---- transactional-update-5.0.4.tar.gz New: ---- transactional-update-5.0.6.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ transactional-update.spec ++++++ --- /var/tmp/diff_new_pack.0jgGhp/_old 2025-07-10 23:15:07.496730261 +0200 +++ /var/tmp/diff_new_pack.0jgGhp/_new 2025-07-10 23:15:07.496730261 +0200 @@ -26,7 +26,7 @@ %{!?_distconfdir: %global _distconfdir %{_prefix}%{_sysconfdir}} Name: transactional-update -Version: 5.0.4 +Version: 5.0.6 Release: 0 Summary: Transactional Updates with btrfs and snapshots License: GPL-2.0-or-later AND LGPL-2.1-or-later @@ -35,10 +35,14 @@ Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz Source1: transactional-update.check +BuildRequires: acl +BuildRequires: attr BuildRequires: autoconf BuildRequires: autoconf-archive BuildRequires: automake +BuildRequires: bats BuildRequires: docbook-xsl-stylesheets +BuildRequires: fakeroot BuildRequires: fdupes %if %{?suse_version} <= 1500 BuildRequires: gcc10-c++ @@ -80,6 +84,7 @@ Recommends: rebootmgr Suggests: tukitd = %{version}-%{release} Conflicts: health-checker < 1.8 +Conflicts: kdump < 2.1.0 # Support for /etc as subvolume Conflicts: read-only-root-fs < 1.0+git20250410 Conflicts: sdbootutil < 1+git20250409 @@ -353,4 +358,8 @@ %config(noreplace) %{_sysconfdir}/zypp/systemCheck.d/transactional-update.check %check +if ! %{__make} check; then + cat tests/test-suite.log + exit 1 +fi ++++++ transactional-update-5.0.4.tar.gz -> transactional-update-5.0.6.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transactional-update-5.0.4/.gitignore new/transactional-update-5.0.6/.gitignore --- old/transactional-update-5.0.4/.gitignore 2025-06-12 16:03:48.000000000 +0200 +++ new/transactional-update-5.0.6/.gitignore 2025-07-09 16:28:10.000000000 +0200 @@ -30,8 +30,11 @@ libtool ltmain.sh m4 +tap-driver.sh test-driver test-suite.log +tests/*.log +tests/*.trs check-output.* tukit.pc tukitd @@ -51,6 +54,8 @@ man/transactional-update.timer.8.html man/transactional-update.conf.5.html man/transactional-update.index.html +man/tukit.conf.5 +man/tukit.conf.5.html transactional-update-*.tar.* doc/html/* doc/transactional-update.txt diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transactional-update-5.0.4/NEWS new/transactional-update-5.0.6/NEWS --- old/transactional-update-5.0.4/NEWS 2025-06-12 16:03:48.000000000 +0200 +++ new/transactional-update-5.0.6/NEWS 2025-07-09 16:28:10.000000000 +0200 @@ -2,6 +2,17 @@ Copyright (C) 2016-2025 Thorsten Kukuk, Ignaz Forster et al. +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 + attribute was not set - this may result in failures from services + operating on /etc during initrd phase such as SELinux relabelling +* Optimize execution time of tests + +Version 5.0.5 (2025-07-04) +* Add support for kdump 2.1.0 [bsc#1243758] +* Integrate test to support `make check` + Version 5.0.4 (2025-06-12) * Don't override soft-reboot with hard reboot * Fix stdio when returning from selfupdate diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transactional-update-5.0.4/configure.ac new/transactional-update-5.0.6/configure.ac --- old/transactional-update-5.0.4/configure.ac 2025-06-12 16:03:48.000000000 +0200 +++ new/transactional-update-5.0.6/configure.ac 2025-07-09 16:28:10.000000000 +0200 @@ -1,14 +1,15 @@ dnl Process this file with autoconf to produce a configure script. -AC_INIT([transactional-update],[5.0.4]) +AC_INIT([transactional-update],[5.0.6]) # 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=7 +LIBTOOL_REVISION=8 AC_CANONICAL_TARGET AM_INIT_AUTOMAKE([foreign]) AC_CONFIG_FILES([tukit.pc]) +AC_REQUIRE_AUX_FILE([tap-driver.sh]) AC_PREFIX_DEFAULT(/usr) AC_SUBST(PACKAGE) @@ -47,6 +48,7 @@ AC_SUBST(DBUSSYSTEMBUSSERVICEDIR) AC_PROG_CXX +AC_PROG_AWK AX_CXX_COMPILE_STDCXX_17(, mandatory) AC_PROG_CC AC_PROG_INSTALL @@ -111,6 +113,11 @@ AM_CONDITIONAL(ENABLE_REGENERATE_MAN, 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_CONFIG_FILES([Makefile lib/Makefile tukit/Makefile sbin/Makefile man/Makefile \ systemd/Makefile logrotate/Makefile dracut/Makefile doc/Makefile \ etc/Makefile dbus/Makefile snapper/Makefile tests/Makefile \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transactional-update-5.0.4/man/Makefile.am new/transactional-update-5.0.6/man/Makefile.am --- old/transactional-update-5.0.4/man/Makefile.am 2025-06-12 16:03:48.000000000 +0200 +++ new/transactional-update-5.0.6/man/Makefile.am 2025-07-09 16:28:10.000000000 +0200 @@ -4,7 +4,7 @@ CLEANFILES = $(MANS) $(DATA) transactional-update.index.xml EXTRA_DIST = $(MANS) $(XMLS) $(DATA) custom-html.xsl make-man-index.py \ - xml_helper.py transactional-update.index.xml + xml_helper.py transactional-update.index.xml custom-man.xsl XMLS = transactional-update.8.xml transactional-update.conf.5.xml tukit.conf.5.xml diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transactional-update-5.0.4/sbin/transactional-update.in new/transactional-update-5.0.6/sbin/transactional-update.in --- old/transactional-update-5.0.4/sbin/transactional-update.in 2025-06-12 16:03:48.000000000 +0200 +++ new/transactional-update-5.0.6/sbin/transactional-update.in 2025-07-09 16:28:10.000000000 +0200 @@ -1287,25 +1287,21 @@ if [ ${SETUP_KDUMP} -eq 1 ]; then if [ -z "${KDUMP_LOW}" ]; then - KDUMP_CALIBRATION="$(tukit -q call "${SNAPSHOT_ID}" kdumptool calibrate)" - KDUMP_LOW="$(echo "$KDUMP_CALIBRATION" | grep ^Low: | cut -d ' ' -f 2)" - KDUMP_HIGH="$(echo "$KDUMP_CALIBRATION" | grep ^High: | cut -d ' ' -f 2)" - fi - - if [[ ${KDUMP_HIGH} -gt 0 ]]; then - KDUMP_PARAM="crashkernel=${KDUMP_LOW}M,low crashkernel=${KDUMP_HIGH}M,high" + KDUMP_PARAM="auto" else - KDUMP_PARAM="crashkernel=${KDUMP_LOW}M" + if [[ ${KDUMP_HIGH} -gt 0 ]]; then + KDUMP_PARAM="crashkernel=${KDUMP_LOW}M,low crashkernel=${KDUMP_HIGH}M,high" + else + KDUMP_PARAM="crashkernel=${KDUMP_LOW}M" + fi fi + tukit ${TUKIT_OPTS} call "${SNAPSHOT_ID}" sed -i -e 's/^KDUMP_CRASHKERNEL=.*/KDUMP_CRASHKERNEL="'"${KDUMP_PARAM}"'"/' /etc/sysconfig/kdump - if is_bls; then - tukit ${TUKIT_OPTS} call "${SNAPSHOT_ID}" sed -i -e 's/ *crashkernel[^ "]\+//g' -e 's|$| '"${KDUMP_PARAM}"'|' /etc/kernel/cmdline - else - tukit ${TUKIT_OPTS} call "${SNAPSHOT_ID}" sed -i -e '/^GRUB_CMDLINE_LINUX_DEFAULT=/s/ *crashkernel[^ "]\+//g' -e 's|\(^GRUB_CMDLINE_LINUX_DEFAULT=.*\)"|\1 '"${KDUMP_PARAM}"'"|g' "/etc/default/grub" - REWRITE_GRUB_CFG=1 - fi + # prevent kdump-commandline.service from trying to update bootloader + tukit ${TUKIT_OPTS} call "${SNAPSHOT_ID}" sed -i -e 's/^KDUMP_UPDATE_BOOTLOADER=.*/KDUMP_UPDATE_BOOTLOADER="false"/' /etc/sysconfig/kdump tukit ${TUKIT_OPTS} call "${SNAPSHOT_ID}" systemctl enable kdump + tukit ${TUKIT_OPTS} call "${SNAPSHOT_ID}" kdumptool commandline -u fi if [ ${REWRITE_INITRD} -eq 1 ]; then diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transactional-update-5.0.4/snapper/50-etc new/transactional-update-5.0.6/snapper/50-etc --- old/transactional-update-5.0.4/snapper/50-etc 2025-06-12 16:03:48.000000000 +0200 +++ new/transactional-update-5.0.6/snapper/50-etc 2025-07-09 16:28:10.000000000 +0200 @@ -75,12 +75,15 @@ # Add entry for /etc sed -i '/^overlay[[:space:]]\+\/etc[[:space:]]/d' "/.snapshots/${snapshot}/snapshot/etc/fstab" - echo "/etc /etc none bind 0 0" >> "/.snapshots/${snapshot}/snapshot/etc/fstab" + echo "/etc /etc none bind,x-initrd.mount 0 0" >> "/.snapshots/${snapshot}/snapshot/etc/fstab" # Clean up potential conflicting overlay cruft rm -rf "/var/lib/overlay/${snapshot}" fi + # Bugfix: Older versions didn't include the x-initrd.mount flag + awk -i inplace '$2 == "/etc" && $4 !~ /x-initrd.mount/ { $4 = $4 ",x-initrd.mount" } { print }' /etc/fstab + reset_snapshot_writability } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transactional-update-5.0.4/tests/Makefile.am new/transactional-update-5.0.6/tests/Makefile.am --- old/transactional-update-5.0.4/tests/Makefile.am 2025-06-12 16:03:48.000000000 +0200 +++ new/transactional-update-5.0.6/tests/Makefile.am 2025-07-09 16:28:10.000000000 +0200 @@ -1,7 +1,12 @@ # SPDX-License-Identifier: GPL-2.0-or-later # SPDX-FileCopyrightText: Copyright SUSE LLC -TESTS = etc_changes.sh -check_SCRIPTS = etc_changes.sh +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 -EXTRA_DIST = $(SCRIPTS) +TEST_EXTENSIONS = .bats .root +TESTS = etc_changes.bats etc_changes_as.root + +EXTRA_DIST = $(TESTS) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transactional-update-5.0.4/tests/etc_changes.bats new/transactional-update-5.0.6/tests/etc_changes.bats --- old/transactional-update-5.0.4/tests/etc_changes.bats 2025-06-12 16:03:48.000000000 +0200 +++ new/transactional-update-5.0.6/tests/etc_changes.bats 2025-07-09 16:28:10.000000000 +0200 @@ -37,12 +37,9 @@ } syncTimestamps() { - local referencefile + local referencedate="$(date -d "-10 seconds" +"%Y%m%d%H%M.%S")" for file in "$@"; do - if [ -z "${referencefile}" ]; then - referencefile="${file}" - fi - touch --reference="${referencefile}" -- "$file" + touch --no-dereference -t "${referencedate}" -- "$file" done } @@ -96,14 +93,12 @@ @test "File contents and properties" { shopt -s globstar dotglob - FILES=(File0.txt File1.txt File2.txt File3.txt File4.txt File5.txt File6.txt File7.txt File8.txt) + FILES=(File0.txt File1.txt File2.txt File3.txt File4.txt File5.txt) createFilesIn "${mockdir_old_etc}" "${FILES[@]}" createFilesIn "${mockdir_new_etc}" "${FILES[@]}" createFilesIn "${mockdir_syncpoint}" "${FILES[@]}" syncTimestamps "${mockdir_old_etc}"/** "${mockdir_new_etc}"/** "${mockdir_syncpoint}"/** - sleep 2 # Sleep for one second to get different UNIX timestamps on file modifications - # File contents (added) echo "more file contents" >> "${mockdir_old_etc}/${FILES[0]}" touch --reference="${mockdir_syncpoint}/${FILES[0]}" "${mockdir_old_etc}/${FILES[0]}" @@ -122,10 +117,6 @@ chmod 777 "${mockdir_old_etc}/${FILES[5]}" touch --reference="${mockdir_syncpoint}/${FILES[5]}" "${mockdir_new_etc}/${FILES[5]}" - # Ownership - chown :audio "${mockdir_old_etc}/${FILES[6]}" - touch --reference="${mockdir_syncpoint}/${FILES[6]}" "${mockdir_new_etc}/${FILES[6]}" - run $totest --keep-syncpoint "${mockdir_old_etc}" "${mockdir_new_etc}" "${mockdir_syncpoint}" echo "# Verifying appending contents to 'File0.txt' is detected" @@ -140,8 +131,6 @@ [[ "${lines[*]}" != *'"./File4.txt"'* ]] echo "# Verifying changing permissions of 'File5.txt' is detected" [[ "${lines[*]}" == *'File changed: "'${mockdir_old_etc}'/./File5.txt"'* ]] - echo "# Verifying changing group of 'File6.txt' is detected" - [[ "${lines[*]}" == *'File changed: "'${mockdir_old_etc}'/./File6.txt"'* ]] echo "# Verify changes to just atime are ignored" # The human-readable %x/%y format has higher precision than %X/%Y @@ -156,8 +145,27 @@ [ "$(stat -c %y "${mockdir_new_etc}/${FILES[3]}")" != "$(stat -c %y "${mockdir_syncpoint}/${FILES[3]}")" ] echo "# Verify that mode changes are detected and applied properly" [ "$(stat -c %a "${mockdir_new_etc}/${FILES[5]}")" = "777" ] + + rm -r "${mockdir_syncpoint}" +} + +# bats test_tags=needroot +@test "File contents and properties (with fakeroot)" { + shopt -s globstar dotglob + FILES=(File0.txt) + createFilesIn "${mockdir_old_etc}" "${FILES[@]}" + createFilesIn "${mockdir_new_etc}" "${FILES[@]}" + createFilesIn "${mockdir_syncpoint}" "${FILES[@]}" + syncTimestamps "${mockdir_old_etc}"/** "${mockdir_new_etc}"/** "${mockdir_syncpoint}"/** + + # Ownership - running in fakeroot because the user may not be part of any non-default group + chown :audio "${mockdir_old_etc}/${FILES[0]}" + touch --reference="${mockdir_syncpoint}/${FILES[0]}" "${mockdir_new_etc}/${FILES[0]}" + + run $totest --keep-syncpoint "${mockdir_old_etc}" "${mockdir_new_etc}" "${mockdir_syncpoint}" + echo "# Verify that owner changes are detected and applied properly" - [ "$(stat -c %G "${mockdir_new_etc}/${FILES[6]}")" = "audio" ] + [ "$(stat -c %G "${mockdir_new_etc}/${FILES[0]}")" = "audio" ] rm -r "${mockdir_syncpoint}" } @@ -168,7 +176,6 @@ createFilesIn "${mockdir_new_etc}" "${FILES[@]}" createFilesIn "${mockdir_syncpoint}" "${FILES[@]}" syncTimestamps "${mockdir_old_etc}"/** "${mockdir_new_etc}"/** "${mockdir_syncpoint}"/** - sleep 2 setfattr --name="user.test" --value="test" "${mockdir_old_etc}/${FILES[0]}" mkdir "${mockdir_old_etc}/Dir0" @@ -198,8 +205,6 @@ done syncTimestamps "${mockdir_old_etc}"/** "${mockdir_new_etc}"/** "${mockdir_syncpoint}"/** - sleep 2 - cd "${mockdir_old_etc}" echo "Test" > File1 touch --no-dereference File3 @@ -239,8 +244,7 @@ echo old > "${dir}/Dir7/ChangeInNew" echo old > "${dir}/Dir7/noChange" done - - sleep 2 + syncTimestamps "${mockdir_old_etc}"/** "${mockdir_new_etc}"/** "${mockdir_syncpoint}"/** # Create a new directory in both old and new mkdir "${mockdir_old_etc}/Dir2/DirInOld" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transactional-update-5.0.4/tests/etc_changes_as.root new/transactional-update-5.0.6/tests/etc_changes_as.root --- old/transactional-update-5.0.4/tests/etc_changes_as.root 1970-01-01 01:00:00.000000000 +0100 +++ new/transactional-update-5.0.6/tests/etc_changes_as.root 2025-07-10 23:15:07.564733094 +0200 @@ -0,0 +1 @@ +symbolic link to etc_changes.bats