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 2021-03-28 11:54:05 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/transactional-update (Old) and /work/SRC/openSUSE:Factory/.transactional-update.new.2401 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "transactional-update" Sun Mar 28 11:54:05 2021 rev:72 rq:881412 version:3.3.0 Changes: -------- --- /work/SRC/openSUSE:Factory/transactional-update/transactional-update.changes 2021-03-21 23:20:08.936734688 +0100 +++ /work/SRC/openSUSE:Factory/.transactional-update.new.2401/transactional-update.changes 2021-03-28 11:54:14.392111203 +0200 @@ -1,0 +2,9 @@ +Thu Mar 25 22:13:59 UTC 2021 - Ignaz Forster <ifors...@suse.com> + +- Version 3.3.0 + - Add support for more package managers by bind mounting their directories + - Support snapshots without dedicated overlay [boo#1183539], [bsc#1183539] + - Link RPM database correctly with older zypper versions [boo#1183521] + - Don't discard manual changes in fstab [boo#1183856] + +------------------------------------------------------------------- Old: ---- transactional-update-3.2.2.tar.gz New: ---- transactional-update-3.3.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ transactional-update.spec ++++++ --- /var/tmp/diff_new_pack.9hWqDV/_old 2021-03-28 11:54:14.908111660 +0200 +++ /var/tmp/diff_new_pack.9hWqDV/_new 2021-03-28 11:54:14.908111660 +0200 @@ -26,7 +26,7 @@ %{!?_distconfdir: %global _distconfdir %{_prefix}%{_sysconfdir}} Name: transactional-update -Version: 3.2.2 +Version: 3.3.0 Release: 0 Summary: Transactional Updates with btrfs and snapshots License: GPL-2.0-or-later AND LGPL-2.1-or-later @@ -137,7 +137,6 @@ Adds a zypper rule to prevent accidental uninstallation of transactional-update. - %prep %autosetup -p1 ++++++ transactional-update-3.2.2.tar.gz -> transactional-update-3.3.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transactional-update-3.2.2/NEWS new/transactional-update-3.3.0/NEWS --- old/transactional-update-3.2.2/NEWS 2021-03-12 14:05:13.000000000 +0100 +++ new/transactional-update-3.3.0/NEWS 2021-03-25 23:12:19.000000000 +0100 @@ -2,6 +2,12 @@ Copyright (C) 2016-2020 Thorsten Kukuk, Ignaz Forster et al. +Version 3.3.0 +* Add support for more package managers by bind mounting their directories +* Support snapshots without dedicated overlay [boo#1183539], [bsc#1183539] +* Link RPM database correctly with older zypper versions [boo#1183521] +* Don't discard manual changes in fstab [boo#1183856] + Version 3.2.2 * Don't skip patches with rebootSuggested flag diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transactional-update-3.2.2/configure.ac new/transactional-update-3.3.0/configure.ac --- old/transactional-update-3.2.2/configure.ac 2021-03-12 14:05:13.000000000 +0100 +++ new/transactional-update-3.3.0/configure.ac 2021-03-25 23:12:19.000000000 +0100 @@ -1,9 +1,9 @@ dnl Process this file with autoconf to produce a configure script. -AC_INIT(transactional-update, 3.2.2) +AC_INIT(transactional-update, 3.3.0) # Increase on any interface change and reset revision LIBTOOL_CURRENT=2 # Increase or reset on any VERSION update -LIBTOOL_REVISION=1 +LIBTOOL_REVISION=2 # Increase if interface change is backwards compatible, reset otherwise LIBTOOL_AGE=2 AC_CANONICAL_SYSTEM diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transactional-update-3.2.2/lib/Overlay.cpp new/transactional-update-3.3.0/lib/Overlay.cpp --- old/transactional-update-3.2.2/lib/Overlay.cpp 2021-03-12 14:05:13.000000000 +0100 +++ new/transactional-update-3.3.0/lib/Overlay.cpp 2021-03-25 23:12:19.000000000 +0100 @@ -35,7 +35,6 @@ * For new overlays `create` has to be called afterwards with a base. */ Overlay::Overlay(string snapshot): - upperdir(fs::path{config.get("OVERLAY_DIR")} / snapshot / "etc"), workdir(fs::path{config.get("OVERLAY_DIR")} / snapshot / "work-etc") { fs::create_directories(fs::path{workdir}); @@ -50,7 +49,9 @@ snap->open(snapshot); Mount mntEtc{"/etc"}; mntEtc.setTabSource(snap->getRoot() / "etc" / "fstab"); + // Read data from fstab if this is an existing snapshot, just use the defaults otherwise try { + upperdir = regex_replace(mntEtc.getOption("upperdir"), std::regex("^" + config.get("DRACUT_SYSROOT")), ""); const string fstabLowerdirs = mntEtc.getOption("lowerdir"); string lowerdir; stringstream ss(fstabLowerdirs); @@ -88,7 +89,7 @@ return false; } -void Overlay::sync(string base, string snapshot) { +void Overlay::sync(string base, fs::path snapRoot) { Overlay baseOverlay = Overlay{base}; auto previousSnapId = baseOverlay.getPreviousSnapshotOvlId(); if (previousSnapId.empty()) { @@ -116,7 +117,7 @@ string syncSource = string(previousOvl.upperdir.parent_path() / "sync" / "etc") + "/"; string rsyncExtraArgs; previousEtc->mount(previousOvl.upperdir.parent_path() / "sync"); - tulog.info("Syncing /etc of previous snapshot ", previousSnapId, " as base into new snapshot ", snapshot); + tulog.info("Syncing /etc of previous snapshot ", previousSnapId, " as base into new snapshot ", snapRoot); if (is_selinux_enabled()) { tulog.info("SELinux is enabled."); // Ignore the SELinux attributes when synchronizing pre-SELinux files, @@ -129,7 +130,7 @@ } } } - Util::exec("rsync --quiet --archive --inplace --xattrs --exclude='/fstab' " + rsyncExtraArgs + " --acls --delete " + syncSource + " " + snapshot + "/etc"); + Util::exec("rsync --quiet --archive --inplace --xattrs --exclude='/fstab' " + rsyncExtraArgs + " --acls --delete " + syncSource + " " + string(snapRoot) + "/etc"); } void Overlay::setMountOptions(unique_ptr<Mount>& mount) { @@ -180,7 +181,8 @@ mount->setOption("workdir", workdir); } -void Overlay::create(string base, string snapshot) { +void Overlay::create(string base, string snapshot, fs::path snapRoot) { + upperdir = fs::path{config.get("OVERLAY_DIR")} / snapshot / "etc"; Overlay parent = Overlay{base}; // Remove overlay directory if it already exists (e.g. after the snapshot was deleted) @@ -204,7 +206,7 @@ } } else { lowerdirs.push_back(parent.lowerdirs.back()); - sync(base, snapshot); + sync(base, snapRoot); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transactional-update-3.2.2/lib/Overlay.hpp new/transactional-update-3.3.0/lib/Overlay.hpp --- old/transactional-update-3.2.2/lib/Overlay.hpp 2021-03-12 14:05:13.000000000 +0100 +++ new/transactional-update-3.3.0/lib/Overlay.hpp 2021-03-25 23:12:19.000000000 +0100 @@ -19,10 +19,10 @@ public: Overlay(std::string snapshot); virtual ~Overlay() = default; - void create(std::string base, std::string snapshot); + void create(std::string base, std::string snapshot, std::filesystem::path snapRoot); std::string getPreviousSnapshotOvlId(); bool references(std::string snapshot); - void sync(std::string base, std::string snapshot); + void sync(std::string base, std::filesystem::path snapRoot); void setMountOptions(std::unique_ptr<Mount>& mount); void setMountOptionsForMount(std::unique_ptr<Mount>& mount); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transactional-update-3.2.2/lib/Transaction.cpp new/transactional-update-3.3.0/lib/Transaction.cpp --- old/transactional-update-3.2.2/lib/Transaction.cpp 2021-03-12 14:05:13.000000000 +0100 +++ new/transactional-update-3.3.0/lib/Transaction.cpp 2021-03-25 23:12:19.000000000 +0100 @@ -85,7 +85,8 @@ Mount mntVar{"/var"}; if (mntVar.isMount()) { dirsToMount.push_back(std::make_unique<BindMount>("/var/cache")); - dirsToMount.push_back(std::make_unique<BindMount>("/var/lib/zypp")); + if (fs::is_directory("/var/lib/zypp")) + dirsToMount.push_back(std::make_unique<BindMount>("/var/lib/zypp")); dirsToMount.push_back(std::make_unique<BindMount>("/var/lib/ca-certificates")); if (fs::is_directory("/var/lib/alternatives")) dirsToMount.push_back(std::make_unique<BindMount>("/var/lib/alternatives")); @@ -143,10 +144,17 @@ supplements.addDir(fs::path{"/var/tmp"}); supplements.addLink(fs::path{"/run"}, fs::path{"/var/run"}); } - supplements.addLink(fs::path{"/usr/lib/sysimage/rpm"}, fs::path{"/var/lib/rpm"}); + supplements.addLink(fs::path{"../../usr/lib/sysimage/rpm"}, fs::path{"/var/lib/rpm"}); supplements.addFile(fs::path{"/run/netconfig"}); supplements.addFile(fs::path{"/run/systemd/resolve"}); - supplements.addDir(fs::path{"/var/cache/zypp"}); + if (fs::is_directory("/var/cache/dnf")) + supplements.addDir(fs::path{"/var/cache/dnf"}); + if (fs::is_directory("/var/cache/yum")) + supplements.addDir(fs::path{"/var/cache/yum"}); + if (fs::is_directory("/var/cache/PackageKit")) + supplements.addDir(fs::path{"/var/cache/PackageKit"}); + if (fs::is_directory("/var/cache/zypp")) + supplements.addDir(fs::path{"/var/cache/zypp"}); supplements.addDir(fs::path{"/var/spool"}); } @@ -163,8 +171,13 @@ std::unique_ptr<Mount> mntEtc{new Mount{"/etc"}}; if (mntEtc->isMount() && mntEtc->getFilesystem() == "overlay") { Overlay overlay = Overlay{pImpl->snapshot->getUid()}; - overlay.create(base, pImpl->snapshot->getRoot()); + overlay.create(base, pImpl->snapshot->getUid(), pImpl->snapshot->getRoot()); overlay.setMountOptions(mntEtc); + // Copy current fstab into root in case the user modified it + if (fs::exists(fs::path{overlay.lowerdirs[0] / "fstab"})) { + fs::copy(fs::path{overlay.lowerdirs[0] / "fstab"}, fs::path{pImpl->snapshot->getRoot() / "etc"}, fs::copy_options::overwrite_existing); + } + mntEtc->persist(pImpl->snapshot->getRoot() / "etc" / "fstab"); // Make sure both the snapshot and the overlay contain all relevant fstab data, i.e.