Hello community,

here is the log from the commit of package transactional-update for 
openSUSE:Factory checked in at 2020-08-05 20:25:53
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/transactional-update (Old)
 and      /work/SRC/openSUSE:Factory/.transactional-update.new.3592 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "transactional-update"

Wed Aug  5 20:25:53 2020 rev:57 rq:823772 version:2.23

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/transactional-update/transactional-update.changes    
    2020-07-29 17:15:59.964339031 +0200
+++ 
/work/SRC/openSUSE:Factory/.transactional-update.new.3592/transactional-update.changes
      2020-08-05 20:25:56.595017046 +0200
@@ -1,0 +2,10 @@
+Fri Jul 31 16:11:04 UTC 2020 - Ignaz Forster <ifors...@suse.com>
+
+- Version 2.23
+  - Add "run" command to be able to execute a single command in a new snapshot
+  - Add "--drop-if-no-change" option to discard snapshots if no changes were
+    perfomed (BETA, required for Salt integration)
+  - Removed previous CaaSP Salt support (gh#openSUSE/transactional-update#33)
+  - Avoid "file not found" message on systems without /var subvol
+
+-------------------------------------------------------------------

Old:
----
  transactional-update-2.22.tar.gz

New:
----
  transactional-update-2.23.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ transactional-update.spec ++++++
--- /var/tmp/diff_new_pack.YBSbQX/_old  2020-08-05 20:25:57.763017416 +0200
+++ /var/tmp/diff_new_pack.YBSbQX/_new  2020-08-05 20:25:57.763017416 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           transactional-update
-Version:        2.22
+Version:        2.23
 Release:        0
 Summary:        Transactional Updates with btrfs and snapshots
 License:        GPL-2.0-or-later

++++++ transactional-update-2.22.tar.gz -> transactional-update-2.23.tar.gz 
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/transactional-update-2.22/NEWS 
new/transactional-update-2.23/NEWS
--- old/transactional-update-2.22/NEWS  2020-06-23 16:51:24.000000000 +0200
+++ new/transactional-update-2.23/NEWS  2020-07-31 18:08:35.000000000 +0200
@@ -2,6 +2,13 @@
 
 Copyright (C) 2016-2019 Thorsten Kukuk et al.
 
+Version 2.23
+* Add "run" command to be able to execute a single command in a new snapshot
+* Add "--drop-if-no-change" option to discard snapshots if no changes were
+  perfomed (BETA, required for Salt integration)
+* Removed previous CaaSP Salt support
+* Avoid "file not found" message on systems without /var subvol
+
 Version 2.22
 * Use pkgconf to determine installation paths
 * Enable SSL connections in update shell [boo#1149131]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/transactional-update-2.22/configure.ac 
new/transactional-update-2.23/configure.ac
--- old/transactional-update-2.22/configure.ac  2020-06-23 16:51:24.000000000 
+0200
+++ new/transactional-update-2.23/configure.ac  2020-07-31 18:08:35.000000000 
+0200
@@ -1,5 +1,5 @@
 dnl Process this file with autoconf to produce a configure script.
-AC_INIT(transactional-update, 2.22)
+AC_INIT(transactional-update, 2.23)
 AM_INIT_AUTOMAKE
 AC_PREFIX_DEFAULT(/usr)
 
@@ -15,12 +15,10 @@
 PKG_CHECK_VAR([UDEVDIR], [udev], [udevdir], [],
        [AC_MSG_ERROR([Could not determine value for 'udevdir' - is the 
'udev.pc' file installed?])])
 
-ISSUEDIR=${exec_prefix}/issue.d
 UDEVRULESDIR=${UDEVDIR}/rules.d
 LOGROTATEDDIR=${sysconfdir}/logrotate.d
 
 AC_SUBST(TMPFILESDIR)
-AC_SUBST(ISSUEDIR)
 AC_SUBST(UDEVRULESDIR)
 AC_SUBST(SYSTEMDDIR)
 AC_SUBST(DRACUTDIR)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/transactional-update-2.22/man/transactional-update.8.xml 
new/transactional-update-2.23/man/transactional-update.8.xml
--- old/transactional-update-2.22/man/transactional-update.8.xml        
2020-06-23 16:51:24.000000000 +0200
+++ new/transactional-update-2.23/man/transactional-update.8.xml        
2020-07-31 18:08:35.000000000 +0200
@@ -226,6 +226,21 @@
     </listitem>
   </varlistentry>
   <varlistentry>
+    <term><option>run</option> <replaceable>cmd</replaceable></term>
+    <listitem>
+      <para>
+       Execute the the command <replaceable>cmd</replaceable> inside
+       a new snapshot. By default this snaphot will remain, but if
+       <option>--drop-if-no-chage</option> is set, the new snapshot
+       will be dropped if there is no change in the file system.
+      </para>
+      <para>
+       This command consumes all the remaining parameters, so should
+       be placed the in the last position.
+      </para>
+    </listitem>
+  </varlistentry>
+  <varlistentry>
     <term><option>shell</option></term>
     <listitem>
       <para>
@@ -420,6 +435,14 @@
     </listitem>
   </varlistentry>
   <varlistentry>
+    <term><option>--drop-if-no-change</option></term>
+    <term><option>-d</option></term>
+    <listitem>
+      <para>If the action does not produce a change in the underlying
+      file system, the snapshot will be dropped.</para>
+    </listitem>
+  </varlistentry>
+  <varlistentry>
     <term><option>--quiet</option></term>
     <listitem>
       <para>Don't print warnings and informational messages to stdout.</para>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/transactional-update-2.22/man/transactional-update.conf.5.xml 
new/transactional-update-2.23/man/transactional-update.conf.5.xml
--- old/transactional-update-2.22/man/transactional-update.conf.5.xml   
2020-06-23 16:51:24.000000000 +0200
+++ new/transactional-update-2.23/man/transactional-update.conf.5.xml   
2020-07-31 18:08:35.000000000 +0200
@@ -99,15 +99,6 @@
               </listitem>
             </varlistentry>
             <varlistentry>
-              <term><literal>salt</literal></term>
-              <listitem>
-                <para>
-                  Will create a Salt grain for signaling Velum to reboot the
-                  system.
-                </para>
-              </listitem>
-            </varlistentry>
-            <varlistentry>
               <term><literal>rebootmgr</literal></term>
               <listitem>
                 <para>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/transactional-update-2.22/sbin/transactional-update.in 
new/transactional-update-2.23/sbin/transactional-update.in
--- old/transactional-update-2.22/sbin/transactional-update.in  2020-06-23 
16:51:24.000000000 +0200
+++ new/transactional-update-2.23/sbin/transactional-update.in  2020-07-31 
18:08:35.000000000 +0200
@@ -37,12 +37,13 @@
 DO_ROLLBACK=0
 DO_SELF_UPDATE=1
 DO_REGISTRATION=0
+DO_RUN=0
 REGISTRATION_ARGS=""
 ROLLBACK_SNAPSHOT=0
 REBOOT_AFTERWARDS=0
 REBOOT_METHOD="auto"
+RUN_CMD=""
 RUN_SHELL=0
-USE_SALT_GRAINS=0
 USE_TELEMETRICS=0
 TELEM_PAYLOAD="PACKAGE_NAME=transactional-update\nPACKAGE_VERSION=@VERSION@"
 TELEM_CLASS=""
@@ -56,6 +57,8 @@
 ZYPPER_AUTO_IMPORT_KEYS=0
 
ETC_OVERLAY_PATTERN='^[^[:space:]]\+[[:space:]]\+\/etc[[:space:]]\+overlay[[:space:]]\+\([^[:space:]]*,\|\)workdir=\/sysroot\/var\/lib\/overlay\/work-etc[,[:space:]]'
 NON_ROOTFS_WHITELIST=("/var/lib/rpm" "/var/lib/systemd/migrated" 
"/var/run/zypp.pid")
+DROP_IF_NO_CHANGE=0
+INOTIFY_EXCLUDES=""
 
 # Load config
 if [ -r ${SYSTEMCONFFILE} ]; then
@@ -78,6 +81,7 @@
 TMPFILE=""
 ETC_OVERLAY_DIR=""
 ETC_OVERLAY_WORK_DIR=""
+INOTIFY_PID=""
 
 # Create stderr alias for things that shouldn't be logged into logfile
 if [ ! -e /proc/$$/fd/4 ]; then
@@ -128,6 +132,7 @@
     echo "kdump                      Regenerate kdump initrd"
     echo "shell                      Open rw shell in new snapshot before 
exiting"
     echo "reboot                     Reboot after update"
+    echo "run <cmd>                  Run a command in a new snapshot"
     echo ""
     echo "Package Commands:"
     echo "Defaults: (i) interactive command; (n) non-interactive command"
@@ -148,6 +153,7 @@
     echo "--non-interactive, -n      Use non-interactive mode for package 
command"
     echo "--continue [<number>], -c  Use latest or given snapshot as base"
     echo "--no-selfupdate            Skip checking for newer version"
+    echo "--drop-if-no-change, -d    Drop the snapshot if there is no change"
     echo "--quiet                    Don't print warnings and infos to stdout"
     echo "--help, -h                 Display this help and exit"
     echo "--version                  Display version and exit"
@@ -266,20 +272,6 @@
        fi
        rm -rf "${ETC_OVERLAY_DIR%/*}" |& tee -a ${LOGFILE}
     fi
-    if [ $USE_SALT_GRAINS -eq 1 ]; then
-       if [ -f /etc/salt/grains ]; then
-           grep -q tx_update_failed /etc/salt/grains
-           if [ $? -ne 0 ]; then
-               # Add variable to existing salt grains
-               echo "tx_update_failed: true" >> /etc/salt/grains
-           else
-               # modify variable in existing salt grains
-               sed -i -e 's|tx_update_failed:.*|tx_update_failed: true|g' 
/etc/salt/grains
-           fi
-       else
-           echo "tx_update_failed: true" > /etc/salt/grains
-       fi
-    fi
     telem_finish $1
     log_info "transactional-update finished"
     exit $1
@@ -291,6 +283,14 @@
     # Unset variable
     unset TRANSACTIONAL_UPDATE
 
+    # Roll back snapshot if no changes were performed
+    if [ -n "${INOTIFY_PID}" ] && sync "${SNAPSHOT_DIR}" && ps -q 
${INOTIFY_PID} 2>&1 >/dev/null; then
+       kill ${INOTIFY_PID}
+       log_info "The snapshot does not contain any changed files."
+       INOTIFY_PID=""
+       quit 0
+    fi
+
     # Cleanup temporary files
     rm -f ${TMPFILE}
 
@@ -346,34 +346,15 @@
        rm -rf ${SNAPSHOT_DIR}/var/cache/*
     fi
     # Remove temporary mount point
-    rmdir --ignore-fail-on-non-empty ${SNAPSHOT_DIR}/var/lib/ca-certificates
+    if [ -e ${SNAPSHOT_DIR}/var/lib/ca-certificates ]; then
+       rmdir --ignore-fail-on-non-empty ${SNAPSHOT_DIR}/var/lib/ca-certificates
+    fi
     # systemd-tmpfiles creates directories/files even if /run is no tmpfs:
     rm -rf ${SNAPSHOT_DIR}/run/*
     # WARNING: /var/spool/ can contain changes through RPM!
     rm -rf ${SNAPSHOT_DIR}/var/spool/*
 }
 
-reboot_via_salt() {
-    log_info "transactional-update finished - created salt grains"
-    if [ -f /etc/salt/grains ]; then
-       grep -q tx_update_reboot_needed /etc/salt/grains
-       if [ $? -ne 0 ]; then
-           # Add variable to existing salt grains
-           echo "tx_update_reboot_needed: true" >> /etc/salt/grains
-       else
-           # modify variable in existing salt grains
-           sed -i -e 's|tx_update_reboot_needed:.*|tx_update_reboot_needed: 
true|g' /etc/salt/grains
-       fi
-    else
-       echo "tx_update_reboot_needed: true" > /etc/salt/grains
-    fi
-    # Reset tx_update_failed if exist
-    sed -i -e 's|tx_update_failed:.*|tx_update_failed: false|g' 
/etc/salt/grains
-    TELEM_PAYLOAD="${TELEM_PAYLOAD}\nreboot=salt"
-    telem_finish 0
-    exit 0
-}
-
 reboot_via_rebootmgr() {
     /usr/sbin/rebootmgrctl is-active --quiet
     if [ $? -eq 0 ]; then
@@ -664,11 +645,18 @@
                shift
            fi
            ;;
-       salt)
-           REBOOT_AFTERWARDS=1
-           USE_SALT_GRAINS=1
-           REBOOT_METHOD="salt"
+       run)
+           test -z "$TELEM_CLASS" && TELEM_CLASS="shell"
+           DO_RUN=1
            shift
+
+           # Collect arguments for run
+           if [ $# -eq 0 ]; then
+               usage 1
+           fi
+
+           RUN_CMD="$@"
+           break
            ;;
        -i|--interactive)
            ZYPPER_NONINTERACTIVE=""
@@ -692,6 +680,10 @@
            DO_SELF_UPDATE=0
            shift
            ;;
+       -d|--drop-if-no-change)
+           DROP_IF_NO_CHANGE=1
+           shift
+           ;;
        --quiet)
            VERBOSITY=1
            shift
@@ -951,8 +943,8 @@
 
 if [ -n "${ZYPPER_ARG}" -o ${REWRITE_GRUB_CFG} -eq 1 \
     -o ${REWRITE_INITRD} -eq 1 -o ${REBUILD_KDUMP_INITRD} -eq 1 \
-    -o ${RUN_SHELL} -eq 1 -o ${REWRITE_BOOTLOADER} -eq 1 \
-    -o ${DO_REGISTRATION} -eq 1 ]; then
+    -o ${RUN_SHELL} -eq 1 -o ${DO_RUN} -eq 1 \
+    -o ${REWRITE_BOOTLOADER} -eq 1 -o ${DO_REGISTRATION} -eq 1 ]; then
 
     if [ "${DEFAULT_SNAPSHOT_ID}" -ne "${BASE_SNAPSHOT_ID}" ]; then
        log_info "WARNING: You are creating a snapshot from a different base 
(${BASE_SNAPSHOT_ID}) than the"
@@ -1173,6 +1165,14 @@
     mount -o rbind ${SNAPSHOT_DIR} ${MOUNT_DIR}
     mount -o bind,ro /.snapshots ${MOUNT_DIR}/.snapshots
 
+    if [ $DROP_IF_NO_CHANGE -eq 1 ]; then
+       #TODO: Handle directories with special characters (space, newline, 
apostrophe etc)
+       for snapmount in `findmnt --noheadings --submounts --target 
"${SNAPSHOT_DIR}" --output TARGET --raw | grep "${SNAPSHOT_DIR}"`; do
+           INOTIFY_EXCLUDES="${INOTIFY_EXCLUDES} @${snapmount}"
+       done
+       INOTIFY_PID=$( ( inotifywait -r -e modify -e move -e create -e delete 
-e attrib "${SNAPSHOT_DIR}" ${INOTIFY_EXCLUDES} 2>&1 & echo "PID: $!" ) | ( 
grep -m1 '^PID: ' | cut -d ' ' -f 2 && grep -q "Watches established" ) )
+    fi
+
     # Set indicator for RPM pre/post sections to detect whether we run in a
     # transactional update
     export TRANSACTIONAL_UPDATE=true
@@ -1199,14 +1199,6 @@
            
TELEM_PAYLOAD="${TELEM_PAYLOAD}\npackages=${NUM_OF_UPDATES}\ndownload_size=${PACKAGE_UPDATES}\nspace-usage=${SIZE_OF_UPDATES}"
            if [ "${NUM_OF_UPDATES}" = "0" ] || [ -z "${NUM_OF_UPDATES}" -a 
"${PACKAGE_UPDATES}" = "0" -a "${SIZE_OF_UPDATES}" = "0" ]; then
                log_info "zypper: nothing to update"
-               if [ $USE_SALT_GRAINS -eq 1 ]; then
-                   log_info "Updating salt grains"
-                   if [ -f /etc/salt/grains ]; then
-                       # Reset tx_update_failed if it exists. Could have been 
set due to wrong
-                       # repository configuration or another temporary error 
before.
-                       sed -i -e 's|tx_update_failed:.*|tx_update_failed: 
false|g' /etc/salt/grains
-                   fi
-               fi
                quit 0
            fi
 
@@ -1284,6 +1276,10 @@
        fi
     fi
 
+    if [ ${DO_RUN} -eq 1 ]; then
+       chroot ${MOUNT_DIR} ${RUN_CMD}
+    fi
+
     if [ ${RUN_SHELL} -eq 1 ]; then
        echo "Opening chroot in snapshot ${SNAPSHOT_ID}, continue with 'exit'"
        env PS1="transactional update # " chroot ${MOUNT_DIR} bash 2>&4
@@ -1374,9 +1370,6 @@
            kured)
                reboot_via_kured
                ;;
-           salt)
-               reboot_via_salt
-               ;;
            rebootmgr)
                reboot_via_rebootmgr
                ;;


Reply via email to