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 2026-03-20 21:19:52
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/transactional-update (Old)
and /work/SRC/openSUSE:Factory/.transactional-update.new.8177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "transactional-update"
Fri Mar 20 21:19:52 2026 rev:127 rq:1341186 version:6.0.7
Changes:
--------
---
/work/SRC/openSUSE:Factory/transactional-update/transactional-update.changes
2026-01-21 14:11:30.724220708 +0100
+++
/work/SRC/openSUSE:Factory/.transactional-update.new.8177/transactional-update.changes
2026-03-20 21:20:19.402788168 +0100
@@ -1,0 +2,17 @@
+Thu Mar 19 11:16:06 UTC 2026 - Ignaz Forster <[email protected]>
+
+- Version 6.0.7:
+ * libtukit: Fix --drop-if-no-change after `apply`
+ * libtukit: Remove stale snapshot after --discard
+ * systemd: Read from snippet directory in service file
+ [jsc#PED-15786]
+ * t-u: Allow overwriting the location of some files
+ * README: Update link to libdnf-plugin-txnupd
+- Remove %suse_version checks (jsc#PED-15786):
+ * The SELinux check is not required any more, the SELinux package
+ version was adjusted in the corresponding releases.
+ * Setting whether the distribution has to be updated by up or dup
+ was changed into a generic RPM dependency and a corresponding
+ configuration file snippet in a separte package.
+
+-------------------------------------------------------------------
Old:
----
transactional-update-6.0.6.tar.gz
New:
----
transactional-update-6.0.7.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ transactional-update.spec ++++++
--- /var/tmp/diff_new_pack.RbEuz5/_old 2026-03-20 21:20:20.798846331 +0100
+++ /var/tmp/diff_new_pack.RbEuz5/_new 2026-03-20 21:20:20.806846664 +0100
@@ -26,7 +26,7 @@
%{!?_distconfdir: %global _distconfdir %{_prefix}%{_sysconfdir}}
Name: transactional-update
-Version: 6.0.6
+Version: 6.0.7
Release: 0
Summary: Transactional Updates with btrfs and snapshots
License: GPL-2.0-or-later AND LGPL-2.1-or-later
@@ -77,6 +77,7 @@
Requires: psmisc
Requires: tukit = %{version}-%{release}
Requires: zypper
+Requires: (transactional-update-up-as-default if (distribution-release
without (product-update() = dup)))
Requires: (tukit-snapper-plugin if (snapper and read-only-root-fs))
# Parameter --drop-if-no-change requires it
Recommends: inotify-tools
@@ -87,17 +88,22 @@
# Support for /etc as subvolume
Conflicts: read-only-root-fs < 1.0+git20250410
Conflicts: sdbootutil < 1+git20250409
-# Includes policy for the 50-etc snapper plugin
-%if 0%{?suse_version} == 1600 && !0%{?is_opensuse}
-Conflicts: selinux-policy < 20241031+git652.e1d5a07e
-%else
-Conflicts: selinux-policy < 20250411
-%endif
%description
transactional-update is a tool to update a system in an atomic
way with zypper, btrfs and snapshots.
+%package up-as-default
+Summary: Sets 'up' as default update mechanism for transactional-update
+Group: System/Base
+Requires: transactional-update
+BuildArch: noarch
+
+%description up-as-default
+In some cases, especially for the update timer, transactional-update has to
+know which update method to use. If the installed system is not using 'dup'
+as the default, then this package should be installed.
+
%package -n tukit
Summary: Tool for doing transactional updates using Btrfs snapshots
License: GPL-2.0-or-later
@@ -189,9 +195,8 @@
%make_build
# Use "up" for non-rolling releases
-%if (%{defined sle_version} && %{undefined is_susecasp}) || 0%{?suse_version}
== 1600
-sed -i 's/^UPDATE_METHOD=.*/UPDATE_METHOD=up/' etc/transactional-update.conf
-%endif
+echo '# Overwrite default update method
+UPDATE_METHOD=up' >> 10-use-up-as-default.conf
# Enable soft-reboot by default
sed -i 's/^REBOOT_ALLOW_SOFT_REBOOT=.*/REBOOT_ALLOW_SOFT_REBOOT=false/'
etc/tukit.conf
@@ -205,6 +210,9 @@
mkdir -p %{buildroot}%{_sysconfdir}/zypp/systemCheck.d/
install -m 644 %{SOURCE1} %{buildroot}%{_sysconfdir}/zypp/systemCheck.d/
+mkdir -p %{buildroot}%{_distconfdir}/transactional-update.conf.d/
+install -m 644 10-use-up-as-default.conf
%{buildroot}%{_distconfdir}/transactional-update.conf.d/
+
# Delete libtool cruft
rm -rf %{buildroot}%{_libdir}/*.la
@@ -303,12 +311,16 @@
%{_unitdir}/transactional-update-cleanup.timer
%{_sbindir}/transactional-update
%{_distconfdir}/transactional-update.conf
+%dir %{_distconfdir}/transactional-update.conf.d
%{_mandir}/man5/transactional-update.conf.5*
%{_mandir}/man8/transactional-update.8*
%{_mandir}/man8/transactional-update.timer.8*
%{_mandir}/man8/transactional-update.service.8*
%ghost %attr(0644,root,root) %{_localstatedir}/log/transactional-update.log
+%files up-as-default
+%{_distconfdir}/transactional-update.conf.d/10-use-up-as-default.conf
+
%files -n tukit
%license COPYING gpl-2.0.txt
%doc README.md NEWS
++++++ transactional-update-6.0.6.tar.gz -> transactional-update-6.0.7.tar.gz
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/transactional-update-6.0.6/NEWS
new/transactional-update-6.0.7/NEWS
--- old/transactional-update-6.0.6/NEWS 2026-01-19 19:42:46.000000000 +0100
+++ new/transactional-update-6.0.7/NEWS 2026-03-19 16:31:09.000000000 +0100
@@ -2,6 +2,13 @@
Copyright (C) 2016-2025 Thorsten Kukuk, Ignaz Forster et al.
+Version 6.0.7 (2026-03-19)
+* libtukit: Fix --drop-if-no-change after `apply`
+* libtukit: Remove stale snapshot after --discard
+* systemd: Read from snippet directory in service file [jsc#PED-15786]
+* t-u: Allow overwriting the location of some files
+* README: Update link to libdnf-plugin-txnupd
+
Version 6.0.6 (2026-01-19)
* t-u: Use pattern to download correct libtukit[0-9]+ for selfupdate
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/transactional-update-6.0.6/README.md
new/transactional-update-6.0.7/README.md
--- old/transactional-update-6.0.6/README.md 2026-01-19 19:42:46.000000000
+0100
+++ new/transactional-update-6.0.7/README.md 2026-03-19 16:31:09.000000000
+0100
@@ -45,7 +45,7 @@
transactional-update was originally developed for the **openSUSE project** as
the update mechanism for all transactional / read-only systems ([openSUSE
MicroOS](https://microos.opensuse.org/), [SUSE Linux Enterprise
Micro](https://www.suse.com/products/micro/), SUSE Linux Enterprise Server /
openSUSE Leap / openSUSE Tumbleweed "Transactional Server" role) and is used as
the update mechanism there.
Additionally the following components support transactional-update directly:
-* **dnf**, Fedora's package management system, supports transactional systems
directly via the
[libdnf-plugin-txnupd](https://code.opensuse.org/microos/libdnf-plugin-txnupd)
plugin (libtukit).
+* **dnf**, Fedora's package management system, supports transactional systems
directly via the
[libdnf-plugin-txnupd](https://gitlab.com/VelocityLimitless/Projects/libdnf-plugin-txnupd)
plugin (libtukit).
* **Cockpit** can update transactional systems via the
[cockpit-tukit](https://github.com/openSUSE/cockpit-tukit) plugin (tukitd).
* **Salt** contains the
[salt.executors.transactional\_update](https://docs.saltproject.io/en/latest/ref/executors/all/salt.executors.transactional_update.html)
executor (transactional-update).
* **Ansible** also supports transactional-update via the the
[community.general.zypper](https://docs.ansible.com/ansible/latest/collections/community/general/zypper_module.html)
module (transactional-update).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/transactional-update-6.0.6/configure.ac
new/transactional-update-6.0.7/configure.ac
--- old/transactional-update-6.0.6/configure.ac 2026-01-19 19:42:46.000000000
+0100
+++ new/transactional-update-6.0.7/configure.ac 2026-03-19 16:31:09.000000000
+0100
@@ -1,12 +1,12 @@
dnl Process this file with autoconf to produce a configure script.
# Semantic versioning, increase major version on incompatible interface change
-AC_INIT([transactional-update],[6.0.6])
+AC_INIT([transactional-update],[6.0.7])
# Increase on any interface change and reset revision
LIBTOOL_CURRENT=8
# On interface change increase if backwards compatible, reset otherwise
LIBTOOL_AGE=0
# Increase on *any* C/C++ library code change, reset at interface change
-LIBTOOL_REVISION=1
+LIBTOOL_REVISION=2
AC_CANONICAL_TARGET
AM_INIT_AUTOMAKE([foreign])
AC_CONFIG_FILES([tukit.pc])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/transactional-update-6.0.6/doc/transactional-update.xml
new/transactional-update-6.0.7/doc/transactional-update.xml
--- old/transactional-update-6.0.6/doc/transactional-update.xml 2026-01-19
19:42:46.000000000 +0100
+++ new/transactional-update-6.0.7/doc/transactional-update.xml 2026-03-19
16:31:09.000000000 +0100
@@ -205,7 +205,7 @@
Applications such as package managers are expected to use this library
for easily supporting transactional systems. DNF for example is
supporting transactional systems via the
- <ulink
url="https://code.opensuse.org/microos/libdnf-plugin-txnupd">libdnf-plugin-txnupd</ulink>
+ <ulink
url="https://gitlab.com/VelocityLimitless/Projects/libdnf-plugin-txnupd">libdnf-plugin-txnupd</ulink>
plugin.
</para>
<para>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/transactional-update-6.0.6/lib/Transaction.cpp
new/transactional-update-6.0.7/lib/Transaction.cpp
--- old/transactional-update-6.0.6/lib/Transaction.cpp 2026-01-19
19:42:46.000000000 +0100
+++ new/transactional-update-6.0.7/lib/Transaction.cpp 2026-03-19
16:31:09.000000000 +0100
@@ -16,6 +16,7 @@
#include "Snapshot.hpp"
#include "Supplement.hpp"
#include "Util.hpp"
+#include <algorithm>
#include <cerrno>
#include <cstdlib>
#include <cstring>
@@ -381,10 +382,19 @@
// Recursively register all directories of the root file system
inotifyExcludes = MountList::getList(snapshot->getRoot());
+
+ // /usr is always part of the root fs, so never exclude it (e.g. on
apply)
+ auto itr = std::find(inotifyExcludes.begin(), inotifyExcludes.end(),
(snapshot->getRoot() / "usr"));
+ if (itr != inotifyExcludes.end()) inotifyExcludes.erase(itr);
+
+ // On rw systems, /etc may be a separate mount after 'apply', though
it's
+ // also part of the root file system
std::unique_ptr<Mount> mntEtc{new Mount{"/etc"}};
- if (mntEtc->isMount()) {
- inotifyExcludes.push_back(snapshot->getRoot() / "etc");
+ if (! mntEtc->isMount()) {
+ auto itr = std::find(inotifyExcludes.begin(),
inotifyExcludes.end(), (snapshot->getRoot() / "etc"));
+ if (itr != inotifyExcludes.end()) inotifyExcludes.erase(itr);
}
+
nftw(snapshot->getRoot().c_str(), inotifyAdd, 20, FTW_MOUNT |
FTW_PHYS);
}
@@ -567,6 +577,7 @@
TransactionalUpdate::Plugins plugins_without_transaction{nullptr,
keepIfError};
plugins_without_transaction.run("finalize-post", snapshot->getUid() +
" " + "discarded");
+ snapshot->abort();
return;
}
if (fs::exists(snapshot->getRoot() / "discardIfNoChange")) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/transactional-update-6.0.6/sbin/transactional-update.in
new/transactional-update-6.0.7/sbin/transactional-update.in
--- old/transactional-update-6.0.6/sbin/transactional-update.in 2026-01-19
19:42:46.000000000 +0100
+++ new/transactional-update-6.0.7/sbin/transactional-update.in 2026-03-19
16:31:09.000000000 +0100
@@ -46,12 +46,6 @@
SETUP_KDUMP=0
SETUP_SELINUX=0
UPDATE_METHOD="up"
-CONFFILE="@sysconfdir@/transactional-update.conf"
-SYSTEMCONFFILE="@prefix@@sysconfdir@/transactional-update.conf"
-LOGFILE="/var/log/transactional-update.log"
-STATE_FILE="/var/lib/misc/transactional-update.state"
-NEEDS_RESTARTING_FILE="/run/reboot-needed"
-LOCKFILE="/var/run/transactional-update.pid"
ZYPPER_AUTO_IMPORT_KEYS=0
NON_ROOTFS_WHITELIST=("/var/lib/YaST2/cookies" "/var/lib/rpm"
"/var/lib/systemd/migrated" "/var/run/zypp.pid")
OCI_RSYNC_ARGS="-a --hard-links --xattrs --acls --inplace"
@@ -63,19 +57,25 @@
ZYPPER_FORCE_REFRESH=0
IS_BLS=""
-TMPDIR=${TMPDIR:-/tmp}
+CONFFILE="${TU_CONFFILE:-@sysconfdir@/transactional-update.conf}"
+CONFFILESYSTEM="${TU_CONFFILESYSTEM:-@prefix@@sysconfdir@/transactional-update.conf}"
+LOCKFILE="${TU_LOCKFILE:-/var/run/transactional-update.pid}"
+LOGFILE="${TU_LOGFILE:-/var/log/transactional-update.log}"
+NEEDS_RESTARTING_FILE="${TU_NEEDS_RESTARTING_FILE:-/run/reboot-needed}"
+STATE_FILE="${TU_STATE_FILE:-/var/lib/misc/transactional-update.state}"
+TMPDIR="${TMPDIR:-/tmp}"
# Load config
-if [ -r ${SYSTEMCONFFILE} ]; then
- . ${SYSTEMCONFFILE}
+if [ -r "${CONFFILESYSTEM}" ]; then
+ . "${CONFFILESYSTEM}"
fi
-for snippet in "${SYSTEMCONFFILE}.d"/*; do
+for snippet in "${CONFFILESYSTEM}.d"/*; do
if [ -f "${snippet}" ]; then
. "${snippet}"
fi
done
-if [ -r ${CONFFILE} ]; then
- . ${CONFFILE}
+if [ -r "${CONFFILE}" ]; then
+ . "${CONFFILE}"
fi
# Initialize internal variables
@@ -203,10 +203,10 @@
log_to_file() {
if [ $# -gt 0 ]; then
- echo -e "$(date "+%Y-%m-%d %T")" "$@" >> ${LOGFILE}
+ echo -e "$(date "+%Y-%m-%d %T")" "$@" >> "${LOGFILE}"
else # input via pipe
while read -r line; do
- echo -e "$(date "+%Y-%m-%d %T")" "${line}" >> ${LOGFILE}
+ echo -e "$(date "+%Y-%m-%d %T")" "${line}" >> "${LOGFILE}"
done
fi
}
@@ -279,29 +279,29 @@
}
save_state_file() {
- echo "LAST_WORKING_SNAPSHOTS=\"${LAST_WORKING_SNAPSHOTS}\"" > ${STATE_FILE}
- echo "UNUSED_SNAPSHOTS=\"${UNUSED_SNAPSHOTS}\"" >> ${STATE_FILE}
+ echo "LAST_WORKING_SNAPSHOTS=\"${LAST_WORKING_SNAPSHOTS}\"" >
"${STATE_FILE}"
+ echo "UNUSED_SNAPSHOTS=\"${UNUSED_SNAPSHOTS}\"" >> "${STATE_FILE}"
if [ "${LAST_BOOTED}" != "${BOOTED_SNAPSHOT_ID}" ]; then
declare -A REBOOT_ASSOCS
fi
- echo "LAST_BOOTED=\"${BOOTED_SNAPSHOT_ID}\"" >> ${STATE_FILE}
+ echo "LAST_BOOTED=\"${BOOTED_SNAPSHOT_ID}\"" >> "${STATE_FILE}"
if [ -n "${SNAPSHOT_ID}" ]; then
REBOOT_ASSOCS[${SNAPSHOT_ID}]=${REBOOT_LEVEL}
fi
for key in "${!REBOOT_ASSOCS[@]}"; do
- echo "REBOOT_ASSOCS[${key}]=${REBOOT_ASSOCS[${key}]}" >> ${STATE_FILE}
+ echo "REBOOT_ASSOCS[${key}]=${REBOOT_ASSOCS[${key}]}" >>
"${STATE_FILE}"
done
- echo "FORCE_REFRESH=\"${FORCE_REFRESH}\"" >> ${STATE_FILE}
+ echo "FORCE_REFRESH=\"${FORCE_REFRESH}\"" >> "${STATE_FILE}"
if [ "$1" -ne 0 ] && [ ${HAS_SEPARATE_VAR} -eq 0 ]; then
# If /var/lib/misc is not a seperate partition / subvolume, copy the
# state file into the new snapshot as it will contain an outdated
# version from before taking the snapshot otherwise.
if ! grep -q var.lib.misc /proc/mounts; then
- cp -a ${STATE_FILE} "/.snapshots/$1/snapshot${STATE_FILE}"
+ cp -a "${STATE_FILE}" "/.snapshots/$1/snapshot${STATE_FILE}"
fi
fi
}
@@ -924,8 +924,8 @@
fi
# Load old state file
-if [ -f ${STATE_FILE} ]; then
- . ${STATE_FILE}
+if [ -f "${STATE_FILE}" ]; then
+ . "${STATE_FILE}"
fi
# If we need to refresh the repositories, save this var into the state
# as t-u might not create/save a snapshot in this call
@@ -1425,7 +1425,7 @@
searchdirs+="${SNAPSHOT_DIR}${mountdir} "
done
if [ -n "${searchdirs}" ]; then
- filelist="$(find ${searchdirs} -cnewer ${LOCKFILE} -not -type d
2>/dev/null | grep -v "${SNAPSHOT_DIR}/etc")"
+ filelist="$(find ${searchdirs} -cnewer "${LOCKFILE}" -not -type d
2>/dev/null | grep -v "${SNAPSHOT_DIR}/etc")"
# Filter acceptable hits
whitelist=""
for wlentry in "${NON_ROOTFS_WHITELIST[@]}"; do
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/transactional-update-6.0.6/systemd/transactional-update.service.in
new/transactional-update-6.0.7/systemd/transactional-update.service.in
--- old/transactional-update-6.0.6/systemd/transactional-update.service.in
2026-01-19 19:42:46.000000000 +0100
+++ new/transactional-update-6.0.7/systemd/transactional-update.service.in
2026-03-19 16:31:09.000000000 +0100
@@ -9,6 +9,7 @@
Type=oneshot
Environment=UPDATE_METHOD=dup
EnvironmentFile=-@prefix@@sysconfdir@/transactional-update.conf
+EnvironmentFile=-@prefix@@sysconfdir@/transactional-update.conf.d/*
EnvironmentFile=-@sysconfdir@/transactional-update.conf
ExecStart=@sbindir@/transactional-update cleanup ${UPDATE_METHOD} reboot
IOSchedulingClass=best-effort