Hello community,

here is the log from the commit of package transactional-update for 
openSUSE:Factory checked in at 2019-02-08 13:45:58
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/transactional-update (Old)
 and      /work/SRC/openSUSE:Factory/.transactional-update.new.28833 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "transactional-update"

Fri Feb  8 13:45:58 2019 rev:36 rq:671126 version:2.12

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/transactional-update/transactional-update.changes    
    2018-11-19 23:33:57.943053965 +0100
+++ 
/work/SRC/openSUSE:Factory/.transactional-update.new.28833/transactional-update.changes
     2019-02-08 13:45:59.690824134 +0100
@@ -1,0 +2,24 @@
+Mon Jan 28 19:05:42 UTC 2019 - ifors...@suse.com
+
+- Update to version 2.12
+  - Implements support for needs-restart (Fate#326451)
+  - Adds easy rollback to last known working snapshot by using "last"
+    as the snapshot number
+  - Migrate /etc/fstab.sys entires to /etc/fstab for systemd being
+    able to create mount units; this will prevent errors on unmount
+  - Remove implicit --no-allow-vendor-change - this option can be
+    configured in zypper's configuration file now
+  - Add support for mounting the /etc overlay file system as a systemd
+    unit in /etc/fstab on a read-only system (replacing /etc/fstab.sys
+    in the long run)
+  - Various bugfixes:
+    - Only remove /etc overlays on read-only root file systems
+      [boo#1122455]
+    - Disable "Persistent" flag in systemd timer unit to prevent
+      updates during or immediately after the boot phase
+    - Don't set global zypper options during migration - this is not
+      supported by the migration plugin
+    - Fix error handling when interrupting while rsync is running
+    - Filter out security.selinux attributes during rsync
+
+-------------------------------------------------------------------

Old:
----
  transactional-update-2.11.tar.xz

New:
----
  transactional-update-2.12.tar.xz

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

Other differences:
------------------
++++++ transactional-update.spec ++++++
--- /var/tmp/diff_new_pack.Ve11vc/_old  2019-02-08 13:46:00.566823863 +0100
+++ /var/tmp/diff_new_pack.Ve11vc/_new  2019-02-08 13:46:00.586823857 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package transactional-update
 #
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -12,12 +12,12 @@
 # license that conforms to the Open Source Definition (Version 1.9)
 # published by the Open Source Initiative.
 
-# Please submit bugfixes or comments via https://bugs.opensuse.org/
+# Please submit bugfixes or comments via http://bugs.opensuse.org/
 #
 
 
 Name:           transactional-update
-Version:        2.11
+Version:        2.12
 Release:        0
 Summary:        Transactional Updates with btrfs and snapshots
 License:        GPL-2.0-or-later
@@ -103,7 +103,7 @@
 %exclude %{_docdir}/%{name}/*.html
 
 %package zypp-config
-Summary:        zypper rule to prevent uninstallation of transactional-update
+Summary:        Zypper rule to prevent uninstallation of transactional-update
 Group:          System/Base
 BuildArch:      noarch
 Requires:       transactional-update

++++++ transactional-update-2.11.tar.xz -> transactional-update-2.12.tar.xz 
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/transactional-update-2.11/NEWS 
new/transactional-update-2.12/NEWS
--- old/transactional-update-2.11/NEWS  2018-11-13 15:13:20.000000000 +0100
+++ new/transactional-update-2.12/NEWS  2019-02-04 14:40:40.000000000 +0100
@@ -2,9 +2,33 @@
 
 Copyright (C) 2016, 2017, 2018 Thorsten Kukuk
 
+Version 2.12
+* Implements support for needs-restart (Fate#326451)
+* Adds easy rollback to last known working snapshot by using "last"
+  as the snapshot number
+* Migrate /etc/fstab.sys entires to /etc/fstab for systemd being
+  able to create mount units; this will prevent errors on unmount
+  during shutdown for /var and /etc
+* Remove implicit --no-allow-vendor-change - this option can be
+  configured in zypper's configuration file now
+* Add support for mounting the /etc overlay file system as a systemd
+  unit in /etc/fstab on a read-only system (replacing /etc/fstab.sys
+  in the long run)
+* Various bugfixes:
+  * Only remove /etc overlays on read-only root file systems
+    [boo#1122455]
+  * Disable "Persistent" flag in systemd timer unit to prevent
+    updates during or immediately after the boot phase
+  * Don't set global zypper options during migration - this is not
+    supported by the migration plugin
+  * Fix error handling when interrupting while rsync is running
+  * Filter out security.selinux attributes during rsync
+
 Version 2.11
 * Update man page to explain new /etc overlay handling
 * Add special handling for migrating away from old overlay directory
+* Read default update method for systemd service from config file
+  (boo#1111321)
 
 Version 2.10
 * Introduce /etc overlays
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/transactional-update-2.11/configure 
new/transactional-update-2.12/configure
--- old/transactional-update-2.11/configure     2018-11-13 15:20:46.000000000 
+0100
+++ new/transactional-update-2.12/configure     2019-02-04 14:44:16.000000000 
+0100
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for transactional-update 2.11.
+# Generated by GNU Autoconf 2.69 for transactional-update 2.12.
 #
 #
 # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -576,8 +576,8 @@
 # Identity of this package.
 PACKAGE_NAME='transactional-update'
 PACKAGE_TARNAME='transactional-update'
-PACKAGE_VERSION='2.11'
-PACKAGE_STRING='transactional-update 2.11'
+PACKAGE_VERSION='2.12'
+PACKAGE_STRING='transactional-update 2.12'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL=''
 
@@ -1249,7 +1249,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures transactional-update 2.11 to adapt to many kinds of 
systems.
+\`configure' configures transactional-update 2.12 to adapt to many kinds of 
systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1316,7 +1316,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of transactional-update 2.11:";;
+     short | recursive ) echo "Configuration of transactional-update 2.12:";;
    esac
   cat <<\_ACEOF
 
@@ -1421,7 +1421,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-transactional-update configure 2.11
+transactional-update configure 2.12
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1476,7 +1476,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by transactional-update $as_me 2.11, which was
+It was created by transactional-update $as_me 2.12, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2339,7 +2339,7 @@
 
 # Define the identity of the package.
  PACKAGE='transactional-update'
- VERSION='2.11'
+ VERSION='2.12'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -4650,7 +4650,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by transactional-update $as_me 2.11, which was
+This file was extended by transactional-update $as_me 2.12, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -4707,7 +4707,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; 
s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-transactional-update config.status 2.11
+transactional-update config.status 2.12
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/transactional-update-2.11/configure.ac 
new/transactional-update-2.12/configure.ac
--- old/transactional-update-2.11/configure.ac  2018-11-13 15:20:27.000000000 
+0100
+++ new/transactional-update-2.12/configure.ac  2019-02-04 14:14:22.000000000 
+0100
@@ -1,5 +1,5 @@
 dnl Process this file with autoconf to produce a configure script.
-AC_INIT(transactional-update, 2.11)
+AC_INIT(transactional-update, 2.12)
 AM_INIT_AUTOMAKE
 AC_CONFIG_SRCDIR([sbin/transactional-update.in])
 AC_PREFIX_DEFAULT(/usr)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/transactional-update-2.11/doc/transactional-update.txt 
new/transactional-update-2.12/doc/transactional-update.txt
--- old/transactional-update-2.11/doc/transactional-update.txt  2018-10-05 
17:12:05.000000000 +0200
+++ new/transactional-update-2.12/doc/transactional-update.txt  2019-02-04 
14:44:19.000000000 +0100
@@ -4,13 +4,21 @@
 
 <ku...@thkukuk.de>
 
-Version 0.1, 15. December 2017
+Ignaz Forster
+
+<ifors...@suse.com>
+
+Version 0.9, 15. December 2018
 
 Abstract
 
-This documentation describes how transactional update with btrfs works, what an
-administrator needs to know about the system setup and what a packager needs to
-know for his package.
+This is the documentation for transactional-update and is intended for users,
+administrators and packagers.
+
+It describes how transactional-update with Btrfs works by giving an overview of
+the design, what an administrator needs to know about setting up and operating
+such a system and what a packager needs to know for creating compatible
+packages.
 
 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 
@@ -19,16 +27,23 @@
     1.1. Description
     1.2. Definition
     1.3. Why transactional updates?
+    1.4. Comparison with rpm-ostree
 
 2. How it works
 
     2.1. Filesystem
-    2.2. Update
-    2.3. Commands used
+    2.2. Package Management
+    2.3. Update
+    2.4. Simplified workflow
+
+3. System setup
+
+    3.1. Read-only file system
+    3.2. /etc
+    3.3. /var
 
-3. Setup of system
-4. Porting to other systems
-5. Files
+4. Files
+5. Porting to other systems
 6. Author/acknowledgments
 7. Copyright information for this document
 
@@ -36,86 +51,125 @@
 
 1.1. Description
 
-transactional-update is an application that allows to apply intrusive updates
-to a running system in an atomic way without influencing the running system,
-taking the system down for a longer period or blocks the boot process. It is
-not a package manager, while implemented for zypper with RPMs, it can be
-changed to use other package managers and package formats. The idea and reason
-for this is, that you can continue to use your existing packages and tool chain
-to deliver and apply updates.
-
-To archive this, transactional-update creates for every update a new snapshot
-with btrfs and updates this to the latest version of the product. Since
-snapshots contain only the difference between two versions and thus are mostly
-very small, this is very space efficient. Which also means you can have more
-parallel installations than just two bootable root partitions.
+transactional-update is an application that allows to update a Linux system and
+its applications in an atomic way: The update will be performed in the
+background, not influencing the currently running system. The update will be
+activated by a reboot instead, similar to rpm-ostree or CoreOS' previous
+Container OS. transactional-update however is not another package manager, but
+is reusing the existing system tools such as RPM as the packaging format and 
+zypper as the package manager. It does however rely on Btrfs due to its
+snapshotting and copy-on-write features. The idea and reason behind this is the
+ability to contiue using your existing packages and tool chain to deliver and
+apply updates. While currently only implemented for (open)SUSE environments the
+concept is vendor independent and may also be implemented for other package
+managers and package formats. the running system, taking the system down for a
+longer period of time or blocking the boot process.
+
+To achieve this, transactional-update creates a new snapshot with btrfs before
+performing an update and uses this snapshot for any modification. Since
+snapshots contain only the difference between two versions and thus are usually
+very small transactional-update is very space efficient. This also means
+several snapshots can be installed at the same time without a problem -
+removing the limit of only two bootable root partitions as usually seen in
+other systems.
 
 1.2. Definition
 
-A transactional update is a kind of update that:
+A transactional update (also called atomic upgrade by some distributions) is a
+kind of update that:
 
   • is atomic
 
-      □ the update does not influence your running system.
+      □ The update does not influence the running system.
 
-      □ you can at every time power off your machine. If you power it on again,
-        either you have your unmodified old state, or the complete new one.
+      □ The machine can be powered off at any time. When powered on again
+        either the unmodified old state or the new state is active, but no
+        state in between.
 
   • can be rolled back
 
-      □ if the upgrade fails or if the newer software version is not compatible
-        with your infrastructure, you can quickly restore the situation as it
-        was before the upgrade.
+      □ If the upgrade fails or if a newer software version turns out to not be
+        compatible with your infrastructure, the system can quickly be restored
+        to a previous state.
 
 1.3. Why transactional updates?
 
-Linux distributions have working update mechanism since many, many years, why
-do we need something new? There are different users, which have different
-requirements. We have the Desktop user on a very stable distribution, for whom
-the current update mechanism good enough. But we also have the bleeding edge
-distribtuion with rolling updates and the enterprise customer with critical
-applications, which have different requirements.
-
-Distributions wit "rolling" updates face the problem: how should intrusive
-updates be applied in a running system? Without breaking the update mechanism
-itself? Like the migration from SysV init to systemd. Or the big version update
-of the Desktop while the Desktop is running. Very likely will this update kill
-the currently running Desktop, which would kill the update process, which
-leaves the system in a broken, undefined state. Additional, if an update breaks
-such a system, there needs to be a quick way to rollback the system to the last
-working state.
-
-On mission critical systems, the update is not allowed to interrupt the running
-services. On such systems, interrupting running services is more expensive than
-a scheduled reboot. And the system needs always to be in a defined state. Which
-means, the updates are applied without error or no change is done. E.g. if a
-post-install script of a RPM fails, the system is in an undefined state, which
-should never happen.
-
-Sometimes, new software versions of the kernel or software are incompatible
-with your hardware or other software. In this case, there should be a quick and
-easy way to rollback to the state before the update was applied.
+Linux distributions have had working update mechanisms for many, many years -
+why do we need something new? As the distributions evolved, so did the user's
+requirements: For a desktop user on a very stable distribution the current
+update mechanism will be good enough. But we also have the bleeding edge
+distributions with rolling updates and occasionally unstable software, and
+there are enterprise customers with critical applications and the desire to
+mimimize the probability of service outages.
+
+Distributions with rolling updates face the problem: how should intrusive
+updates be applied to a running system - without breaking the update mechanism
+itself? Examples like the migration from SysV init to systemd, a major version
+update of a desktop environment while the desktop is still running or even only
+a small update to D-Bus may give a good idea of the problem. The desktop
+environment may simply terminate, killing the update process and leaving the
+system in a broken, undefined state. If any update breaks such a system there
+needs to be a quick way to roll back the system to the last working state.
+
+On mission critical systems you want to make sure that no service or user
+behaviour interferes with the update of the system. And conversely the update
+should not modify the system, e.g. by uncontrolled restarts of services or
+unexpected modifications to the system in post scripts. Potential interruptions
+are deferred to a defined maintenance window instead. For really critical
+systems the update can be verified (e.g. using snapper diff) or discarded
+before actually booting into the new system. If an update encounters an error
+the new snapshot will be discarded automatically.
+
+For cluster nodes it is important that the system is always in a consistent
+state, requires no manual interaction and is able to recover itself from error
+conditions. For these systems transactional-updates provides automatic updates;
+snapshots with failed updates will be automatically removed. Automatic reboots
+can be triggered using a variety of different reboot methods (e.g. rebootmgr,
+kured or systemd), making the appliance of the updates cluster aware.
+
+Sometimes new kernel versions or software updates are incompatible with your
+hardware or other software. In this case there should be a quick and easy way
+to roll back to the state before the update was applied.
 
 There are other solutions available for the above problems, like downloading
 all RPMs upfront and apply them during the boot phase. But this blocks the user
 from using his PC if there is something urgently todo.
 
+1.4. Comparison with rpm-ostree
+
+* Supports more than one backup state * Based on plain RPMs and repositories,
+no new technology required * No dedicated server side component required * No
+3-way merges * Space efficient (storing just the difference between snapshots
+instead of keeping two separate partitions) * No increased reboot time * Only
+supports Btrfs General: It is typically used for containerized systems
+nowadays. You want to make sure that no service or user behaviour interferes
+with the update of the system. Examples: Services restarting, post scripts
+modifying the system. Potential interruptions are deferred to a defined
+maintenance window. Another example: Dbus dies because of an update. You can
+patch it live, patch everything up, do a snapper diff to check for
+modifications and boot into the new system only when you verified everything is
+in the expected state.
+
 Chapter 2. How it works
 
 2.1. Filesystem
 
-For transactional updates the snapshot functionality of btrfs is used. Btrfs is
-a general purpose Copy-on-Write (Cow) filesystem. The main feature of btrfs is,
-that it provides subvolumes. This looks like a directory, but behave like a
-mount point. They can be accessed from the parent subvolume like a directory,
-or they can be mounted on other directories of the same filesytem. Snapshots
-will be created from existing subvolumes, excluding other subvolumes inside of
-it, and are by default read-only.
+For transactional updates the snapshot functionality of Btrfs is used. Btrfs is
+a general purpose Copy-on-Write (Cow) filesystem with subvolume support.
+Subvolumes look like a directory, but behave like a mount point. They can be
+accessed from the parent subvolume like a directory, or they can be mounted on
+other directories of the same filesytem. Snapshots will be created from
+existing subvolumes, excluding other subvolumes inside of it, and are by
+default read-only.
 
 In theory this can be implemented with any CoW filesystem, as long as it
-provides snapshot functionality.
+provides snapshot functionality and the ability to boot from snapshots.
 
-2.2. Update
+2.2. Package Management
+
+transactional-update is
+
+2.3. Update
 
 List of snapshots
 
@@ -136,7 +190,8 @@
 will be updated with zypper.
 
 In the third step the snapshot will be updated. This can be zypper up or zypper
-dup.
+dup, the installation or removal of a package or any other modification to the
+root file system.
 
 List of snapshots with the clone again read-only.
 
@@ -146,26 +201,30 @@
 List of snapshots with the read-only Clone the new default.
 
 The last step is to mark the updated snapshot as new root filesystem. This is
-now the atomic step: If the power would have been pulled before, the unchanged
-old system would have been booted. Now the new, updated system will boot.
+the atomic step: If the power would have been pulled before, the unchanged old
+system would have been booted. Now the new, updated system will boot.
 
 List of snapshots with the current root filesystem as newest at the end.
 
-After reboot, the newly prepared snapshot is the new root filesystem. If
-something bad happens, we can rollback to any of the older snapshots.
+After reboot, the newly prepared snapshot is the new root filesystem. If case
+anything goes wrong a rollback to any of the older snapshots can be performed.
 
 List of snapshots with a read-write Clone of current root filesystem, which
 will be updated with zypper.
 
-If we don't reboot and call transactional-update again, a new snapshot will be
-created and updated. This new snapshot is based again on the current running
-root filesystem. It is not based on newer snapshots. Newer snapshots cannot be
-used as base for the next snapshot, since we don't know if they work or not. It
-could be, that the admin found out that a newer snapshot did not boot and made
-a rollback. If we always base our new snapshots on the latest one, it could
-happen that the system ends in a non-working, non-fixable state.
+If the system is not rebooted and transactional-update is called again a new
+snapshot will be created and updated. This new snapshot is again based on the 
+current running root filesystem, not on the new default snapshot! As it is not
+known whether that snapshot would be working it is not suitable as newer
+snapshots cannot be used as base for the next snapshot, since we don't know if
+they work or not. It could be, that the admin found out that a newer snapshot
+did not boot and made a rollback. If we always base our new snapshots on the
+latest one, it could happen that the system ends in a non-working, non-fixable
+state. For stacking changes (i.e. if several commands are supposed to be
+combined in one single snapshot) the shell can be used to perform any number of
+operations.
 
-2.3. Commands used
+2.4. Simplified workflow
 
 In the end, creating and updating snapshots are only a few commands:
 
@@ -175,7 +234,7 @@
   • btrfs property set ${SNAPSHOT_DIR} ro false
 
 
-  • zypper -R ${SNAPSHOT_DIR} up|patch|dup
+  • zypper -R ${SNAPSHOT_DIR} up|patch|dup|...
 
 
   • btrfs property set ${SNAPSHOT_DIR} ro true
@@ -184,41 +243,49 @@
   • btrfs subvol set-default ${SNAPSHOT_DIR}
 
 
-    or with a read-write root filesystem:
+  • systemctl reboot
 
-    snapper rollback ${SNAPSHOT_ID}
 
+Chapter 3. System setup
 
-  • systemctl reboot
+3.1. Read-only file system
 
+Transactional-update is typically used on a read-only root file system (but
+will also work with read-write file systems).
 
-Chapter 3.  Setup of system
+3.2. /etc
 
-Read-only root filesystem or Read-Write filesystem? Requirements for RPMs, what
-is allowed and what not. Config files in /etc with overlayfs. Special handling
-for passwd, shadow, group. Rollback. Strict seperation from data and
-applications.
+Transactional-update is typically used on a
 
-Chapter 4. Porting to other systems
+3.3. /var
 
-You need a CoW filesystem (or anything else with snapshots and rollback), else
-this should work with every package manager.
+Transactional-update is typically used on a
 
-Chapter 5. Files
+Chapter 4. Files
 
-/usr/include/security/pam_appl.h
+/usr/etc/transactional-update.conf
 
     Header file with interfaces for Linux-PAM applications.
 
-/usr/include/security/pam_misc.h
+/etc/transactional-update.conf
+
+    Header file for useful library functions for making applications easier to
+    write.
+
+/var/lib/overlay/
 
     Header file for useful library functions for making applications easier to
     write.
 
+Chapter 5. Porting to other systems
+
+You need a CoW filesystem (or anything else with snapshots and rollback), else
+this should work with every package manager.
+
 Chapter 6. Author/acknowledgments
 
 This document was written by Thorsten Kukuk <ku...@suse.com> with many
-contributions from ...
+contributions from Ignaz Forster <ifors...@suse.com>.
 
 Chapter 7. Copyright information for this document
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/transactional-update-2.11/doc/transactional-update.xml 
new/transactional-update-2.12/doc/transactional-update.xml
--- old/transactional-update-2.11/doc/transactional-update.xml  2018-10-05 
10:45:13.000000000 +0200
+++ new/transactional-update-2.12/doc/transactional-update.xml  2019-02-04 
14:14:22.000000000 +0100
@@ -10,13 +10,22 @@
         <surname>Kukuk</surname>
         <email>ku...@thkukuk.de</email>
       </author>
+      <author>
+        <firstname>Ignaz</firstname>
+        <surname>Forster</surname>
+        <email>ifors...@suse.com</email>
+      </author>
     </authorgroup>
-    <releaseinfo>Version 0.1, 15. December 2017</releaseinfo>
+    <releaseinfo>Version 0.9, 15. December 2018</releaseinfo>
     <abstract>
       <para>
-       This documentation describes how transactional update with btrfs
-       works, what an administrator needs to know about the system setup and
-       what a packager needs to know for his package.
+       This is the documentation for transactional-update and is intended for
+       users, administrators and packagers.
+      </para>
+      <para> It describes how transactional-update with Btrfs works by giving
+       an overview of the design, what an administrator needs to know about
+       setting up and operating such a system and what a packager needs to
+       know for creating compatible packages.
       </para>
     </abstract>
   </bookinfo>
@@ -27,30 +36,44 @@
       <title>Description</title>
       <para>
         <emphasis remap='B'>transactional-update</emphasis>
-       is an application that allows to apply intrusive updates to a running
-       system in an <emphasis>atomic</emphasis> way without influencing the
-       running system, taking the system down for a longer period or blocks
-       the boot process. It is not a package manager, while implemented for
-       zypper with RPMs, it can be changed to use other package managers
-       and package formats. The idea and reason for this is, that you can
-       continue to use your existing packages and tool chain to deliver
-       and apply updates.
-      </para>
-      <para>
-       To archive this, <emphasis remap='B'>transactional-update</emphasis>
-       creates for every update a new snapshot with
-       <emphasis>btrfs</emphasis> and updates this to the latest version of
-       the product. Since snapshots contain only the difference between two
-       versions and thus are mostly very small, this is very space efficient.
-        Which also means you can have more parallel installations than just
-        two bootable root partitions.
+       is an application that allows to update a Linux system and its
+       applications in an <emphasis>atomic</emphasis> way: The update will
+       be performed in the background, not influencing the currently
+       running system. The update will be activated by a reboot instead,
+       similar to
+       <ulink 
url="https://rpm-ostree.readthedocs.io/en/latest/";>rpm-ostree</ulink>
+       or CoreOS' previous Container OS. transactional-update however is not
+       another package manager, but is reusing the existing system tools such
+       as <emphasis>RPM</emphasis> as the packaging format and
+       <emphasis>zypper</emphasis> as the package manager. It does however
+       rely on <emphasis>Btrfs</emphasis> due to its snapshotting and
+       copy-on-write features. The idea and reason behind this is the ability
+       to contiue using your existing packages and tool chain to deliver and
+       apply updates. While currently only implemented for (open)SUSE
+       environments the concept is vendor independent and may also be
+       implemented for other package managers and package formats.
+
+the running system, taking the system down for a longer period of time or
+       blocking the boot process.
+      </para>
+      <para>
+       To achieve this, <emphasis remap='B'>transactional-update</emphasis>
+       creates a new snapshot with <emphasis>btrfs</emphasis> before
+       performing an update and uses this snapshot for any modification.
+       Since snapshots contain only the difference between two versions and
+       thus are usually very small transactional-update is very space
+       efficient.
+       This also means several snapshots can be installed at the same time
+       without a problem - removing the limit of only two bootable root
+       partitions as usually seen in other systems.
       </para>
     </section>
 
     <section id="tu-introduction-definition">
       <title>Definition</title>
       <para>
-       A <emphasis>transactional update</emphasis> is a kind of update that:
+       A <emphasis>transactional update</emphasis> (also called atomic upgrade
+       by some distributions) is a kind of update that:
       </para>
       <itemizedlist>
        <listitem>
@@ -60,14 +83,14 @@
          <itemizedlist>
            <listitem>
              <para>
-               the update does not influence your running system.
+               The update does not influence the running system.
              </para>
            </listitem>
            <listitem>
              <para>
-               you can at every time power off your machine. If you power it
-               on again, either you have your unmodified old state, or the
-               complete new one.
+               The machine can be powered off at any time. When powered on
+               again either the unmodified old state or the new state is
+               active, but no state in between.
              </para>
            </listitem>
          </itemizedlist>
@@ -79,9 +102,9 @@
          <itemizedlist>
            <listitem>
              <para>
-               if the upgrade fails or if the newer software
-               version is not compatible with your infrastructure, you can
-               quickly  restore the situation as it was before the upgrade.
+               If the upgrade fails or if a newer software version turns out
+               to not be compatible with your infrastructure, the system can
+               quickly be restored to a previous state.
              </para>
            </listitem>
          </itemizedlist>
@@ -92,37 +115,52 @@
     <section id="tu-introduction-reason">
       <title>Why transactional updates?</title>
       <para>
-       Linux distributions have working update mechanism since many, many
-       years, why do we need something new? There are different users,
-       which have different requirements. We have the Desktop user on a very
-       stable distribution, for whom the current update mechanism good
-       enough. But we also have the bleeding edge distribtuion with rolling
-       updates and the enterprise customer with critical applications, which
-       have different requirements.
-      </para>
-      <para>
-       Distributions wit "rolling" updates face the problem: how should
-       intrusive updates be applied in a running system? Without breaking the
-       update mechanism itself? Like the migration from SysV init to
-       systemd. Or the big version update of the Desktop while the Desktop is
-       running. Very likely will this update kill the currently running
-       Desktop, which would kill the update process, which leaves the system
-       in a broken, undefined state. Additional, if an update breaks such a
-       system, there needs to be a quick way to rollback the system to the
-       last working state.
-      </para>
-      <para>
-       On mission critical systems, the update is not allowed to interrupt
-       the running services. On such systems, interrupting running services
-       is more expensive than a scheduled reboot. And the system needs always
-       to be in a defined state. Which means, the updates are applied without
-       error or no change is done. E.g. if a post-install script of a RPM
-       fails, the system is in an undefined state, which should never happen.
-      </para>
-      <para>
-       Sometimes, new software versions of the kernel or software are
-       incompatible with your hardware or other software. In this case, there
-       should be a quick and easy way to rollback to the state before the
+       Linux distributions have had working update mechanisms for many, many
+       years - why do we need something new? As the distributions evolved,
+       so did the user's requirements: For a desktop user on a very
+       stable distribution the current update mechanism will be good
+       enough. But we also have the bleeding edge distributions with rolling
+       updates and occasionally unstable software, and there are enterprise
+       customers with critical applications and the desire to mimimize the
+       probability of service outages.
+      </para>
+      <para>
+       Distributions with <emphasis role="bold">rolling updates</emphasis> face
+       the problem: how should intrusive updates be applied to a running system
+       - without breaking the
+       update mechanism itself? Examples like the migration from SysV init to
+       systemd, a major version update of a desktop environment while the
+       desktop is still running or even only a small update to D-Bus may give
+       a good idea of the problem. The desktop environment may simply
+       terminate, killing the update process and leaving the system in a
+       broken, undefined state. If any update breaks such a system there needs
+       to be a quick way to roll back the system to the last working state.
+      </para>
+      <para>
+       On <emphasis role="bold">mission critical systems</emphasis> you want 
to make sure that no service or
+       user behaviour interferes with the update of the system. And conversely
+       the update should not modify the system, e.g. by uncontrolled restarts
+       of services or unexpected modifications to the system in post scripts.
+       Potential interruptions are deferred to a defined maintenance window
+       instead. For really critical systems the update can be verified (e.g.
+       using <command>snapper diff</command>) or discarded before actually
+       booting into the new system. If an update encounters an error the
+       new snapshot will be discarded automatically.
+      </para>
+      <para>
+       For <emphasis role="bold">cluster nodes</emphasis> it is important that
+       the system is always in a consistent state, requires no manual
+       interaction and is able to recover itself from error conditions.
+       For these systems transactional-updates provides automatic
+       updates; snapshots with failed updates will be automatically removed.
+       Automatic reboots can be triggered using a variety of different reboot
+       methods (e.g. rebootmgr, kured or systemd), making the appliance of
+       the updates cluster aware.
+      </para>
+      <para>
+       Sometimes new kernel versions or software updates are
+       incompatible with your hardware or other software. In this case there
+       should be a quick and easy way to roll back to the state before the
        update was applied.
       </para>
       <para>
@@ -132,6 +170,21 @@
        todo.
       </para>
     </section>
+    <section id="tu-introduction-comparison">
+      <title>Comparison with rpm-ostree</title>
+      <para>
+       * Supports more than one backup state
+       * Based on plain RPMs and repositories, no new technology required
+       * No dedicated server side component required
+       * No 3-way merges
+       * Space efficient (storing just the difference between snapshots 
instead of keeping two separate partitions)
+       * No increased reboot time
+       * Only supports Btrfs
+General:
+       It is typically used for containerized systems nowadays.
+       You want to make sure that no service or user behaviour interferes with 
the update of the system. Examples: Services restarting, post scripts modifying 
the system. Potential interruptions are deferred to a defined maintenance 
window. Another example: Dbus dies because of an update. You can patch it live, 
patch everything up, do a snapper diff to check for modifications and boot into 
the new system only when you verified everything is in the expected state.
+      </para>
+    </section>
   </chapter>
 
   <chapter id="tu-howitworks">
@@ -140,18 +193,24 @@
       <title>Filesystem</title>
       <para>
        For transactional updates the snapshot functionality of
-       <emphasis>btrfs</emphasis> is used. <emphasis>Btrfs</emphasis> is a
-       general purpose Copy-on-Write (Cow) filesystem. The main feature of
-       <emphasis>btrfs</emphasis> is, that it provides subvolumes. This looks
-       like a directory, but behave like a mount point. They can be accessed
-       from the parent subvolume like a directory, or they can be mounted on
-       other directories of the same filesytem.
+       <emphasis>Btrfs</emphasis> is used. <emphasis>Btrfs</emphasis> is a
+       general purpose Copy-on-Write (Cow) filesystem with subvolume support.
+       Subvolumes look like a directory, but behave like a mount point. They
+       can be accessed from the parent subvolume like a directory, or they can
+       be mounted on other directories of the same filesytem.
        Snapshots will be created from existing subvolumes, excluding other
        subvolumes inside of it, and are by default read-only.
       </para>
       <para>
        In theory this can be implemented with any CoW filesystem, as long as
-       it provides snapshot functionality.
+       it provides snapshot functionality and the ability to boot from
+       snapshots.
+      </para>
+    </section>
+    <section id="tu-howitworks-packages">
+      <title>Package Management</title>
+      <para>
+       transactional-update is 
       </para>
     </section>
     <section id="tu-howitworks-update">
@@ -209,7 +268,9 @@
        <caption>
          <para>
            In the third step the snapshot will be updated. This can be
-           <emphasis>zypper up</emphasis> or <emphasis>zypper dup</emphasis>.
+           <emphasis>zypper up</emphasis> or <emphasis>zypper dup</emphasis>,
+           the installation or removal of a package or any other modification
+           to the root file system.
          </para>
        </caption>
       </mediaobject>
@@ -237,7 +298,7 @@
        <caption>
          <para>
            The last step is to mark the updated snapshot as new root
-           filesystem. This is now the atomic step: If the power would have
+           filesystem. This is the atomic step: If the power would have
            been pulled before, the unchanged old system would have been
            booted. Now the new, updated system will boot.
          </para>
@@ -254,8 +315,8 @@
        <caption>
          <para>
            After reboot, the newly prepared snapshot is the new root
-           filesystem. If something bad happens, we can rollback to any of
-           the older snapshots.
+           filesystem. If case anything goes wrong a rollback to any of
+           the older snapshots can be performed.
          </para>
        </caption>
       </mediaobject>
@@ -269,22 +330,26 @@
         </textobject>
        <caption>
          <para>
-           If we don't reboot and call
-           <emphasis>transactional-update</emphasis> again, a new snapshot
-           will be created and updated. This new snapshot is based again on
-           the current running root filesystem. It is not based on newer
-           snapshots. Newer snapshots cannot be used as base for the next
-           snapshot, since we don't know if they work or not. It could be,
-           that the admin found out that a newer snapshot did not boot and
-           made a rollback. If we always base our new snapshots on the latest
-           one, it could happen that the system ends in a non-working,
-           non-fixable state.
+           If the system is not rebooted and
+           <emphasis>transactional-update</emphasis> is called again a new
+           snapshot will be created and updated. This new snapshot is again
+           based on the <emphasis>current</emphasis> running root filesystem,
+           <emphasis>not</emphasis> on the new default snapshot! As it is not
+           known whether that snapshot would be working it is not suitable as
+           newer snapshots cannot be used as base for the next snapshot, since
+           we don't know if they work or not. It could be, that the admin
+           found out that a newer snapshot did not boot and made a rollback.
+           If we always base our new snapshots on the latest one, it could
+           happen that the system ends in a non-working, non-fixable state.
+           For stacking changes (i.e. if several commands are supposed to be
+           combined in one single snapshot) the <option>shell</option> can be
+           used to perform any number of operations.
          </para>
        </caption>
       </mediaobject>
     </section>
     <section id="tu-howitworks-commands">
-      <title>Commands used</title>
+      <title>Simplified workflow</title>
       <para>
        In the end, creating and updating snapshots are only a few commands:
       </para>
@@ -301,7 +366,7 @@
        </listitem>
        <listitem>
          <programlisting>
-zypper -R ${SNAPSHOT_DIR} up|patch|dup
+zypper -R ${SNAPSHOT_DIR} up|patch|dup|...
          </programlisting>
        </listitem>
        <listitem>
@@ -313,12 +378,6 @@
          <programlisting>
 btrfs subvol set-default ${SNAPSHOT_DIR}
          </programlisting>
-         <para>
-           or with a read-write root filesystem:
-         </para>
-         <programlisting>
-snapper rollback ${SNAPSHOT_ID}
-         </programlisting>
        </listitem>
        <listitem>
          <programlisting>
@@ -330,28 +389,40 @@
   </chapter>
 
   <chapter id="tu-setup">
-    <title> Setup of system </title>
+    <title>System setup</title>
+    <section id="tu-setup-readonly">
+      <title>Read-only file system</title>
+      <para>
+       Transactional-update is typically used on a read-only root file system 
(but will also work with read-write file systems).
+      </para>
+    </section>
+    <section id="tu-setup-etc">
+      <title>/etc</title>
+      <para>
+       Transactional-update is typically used on a 
+      </para>
+    </section>
+    <section id="tu-setup-var">
+      <title>/var</title>
+      <para>
+       Transactional-update is typically used on a 
+      </para>
+    </section>
+<!--
     <para>
       Read-only root filesystem or Read-Write filesystem? Requirements for
       RPMs, what is allowed and what not. Config files in /etc with
       overlayfs. Special handling for passwd, shadow, group. Rollback. Strict
       seperation from data and applications.
     </para>
-  </chapter>
-
-  <chapter id='tu-porting'>
-    <title>Porting to other systems</title>
-    <para>
-      You need a CoW filesystem (or anything else with snapshots
-      and rollback), else this should work with every package manager.
-    </para>
+-->
   </chapter>
 
   <chapter id='tu-files'>
     <title>Files</title>
     <variablelist>
       <varlistentry>
-        <term><filename>/usr/include/security/pam_appl.h</filename></term>
+        <term><filename>/usr/etc/transactional-update.conf</filename></term>
         <listitem>
           <para>
             Header file with interfaces for
@@ -360,7 +431,16 @@
         </listitem>
       </varlistentry>
       <varlistentry>
-        <term><filename>/usr/include/security/pam_misc.h</filename></term>
+        <term><filename>/etc/transactional-update.conf</filename></term>
+        <listitem>
+          <para>
+            Header file for useful library functions for making
+            applications easier to write.
+          </para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term><filename>/var/lib/overlay/</filename></term>
         <listitem>
           <para>
             Header file for useful library functions for making
@@ -371,11 +451,19 @@
     </variablelist>
   </chapter>
 
+  <chapter id='tu-porting'>
+    <title>Porting to other systems</title>
+    <para>
+      You need a CoW filesystem (or anything else with snapshots
+      and rollback), else this should work with every package manager.
+    </para>
+  </chapter>
+
   <chapter id='tu-author'>
     <title>Author/acknowledgments</title>
     <para>
       This document was written by Thorsten Kukuk &lt;ku...@suse.com&gt;
-      with many contributions from ...
+      with many contributions from Ignaz Forster &lt;ifors...@suse.com&gt;.
     </para>
   </chapter>
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/transactional-update-2.11/man/transactional-update.8 
new/transactional-update-2.12/man/transactional-update.8
--- old/transactional-update-2.11/man/transactional-update.8    2018-11-13 
15:19:44.000000000 +0100
+++ new/transactional-update-2.12/man/transactional-update.8    2019-01-28 
19:45:21.000000000 +0100
@@ -2,12 +2,12 @@
 .\"     Title: transactional-update
 .\"    Author: Thorsten Kukuk <ku...@suse.com>
 .\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
-.\"      Date: 11/13/2018
+.\"      Date: 01/28/2019
 .\"    Manual: transactional-update
 .\"    Source: transactional-update
 .\"  Language: English
 .\"
-.TH "TRANSACTIONAL\-UPDAT" "8" "11/13/2018" "transactional-update" 
"transactional-update"
+.TH "TRANSACTIONAL\-UPDAT" "8" "01/28/2019" "transactional-update" 
"transactional-update"
 .\" -----------------------------------------------------------------
 .\" * Define some portability stuff
 .\" -----------------------------------------------------------------
@@ -158,7 +158,7 @@
 .PP
 \fBshell\fR
 .RS 4
-After all actions are done, before the snapshot with the changes is unmounted 
and switched to read\-only, a shell is started in the new snapshot as chroot 
environment for testing and debugging\&.
+Opens a shell to execute commands like zypper manually\&. After all actions 
are done, before the snapshot with the changes is unmounted and switched to 
read\-only, a shell is started in the new snapshot as chroot environment for 
testing and debugging\&.
 .RE
 .SS "Package Commands"
 .PP
@@ -261,20 +261,26 @@
 \fBbtrfs\fR\&. On read\-write systems
 \fBsnapper\fR(8)
 \fBrollback\fR
-is called\&. If no snapshot number is given the current root file system is 
made the new default root file system\&. Otherwise the snapshot with
-\fBnumber\fR
-is made the new default root filesystem\&.
+is called\&.
+.sp
+If no snapshot number is given, the current root file system is set as the new 
default root file system\&. Otherwise
+\fInumber\fR
+can either be a snapshot number (as displayed by
+\fBsnapper list\fR) or the word
+\fBlast\fR\&.
+\fBlast\fR
+will try to reset to the latest working snapshot\&.
 .RE
 .SH "OPTIONS"
 .PP
 \fB\-\-interactive\fR, \fB\-i\fR
 .RS 4
-Ignores package command categorization, calls zypper in interactive mode\&.
+Calls zypper in interactive mode, even if the default for this command is 
non\-interactive\&.
 .RE
 .PP
 \fB\-\-non\-interactive\fR, \fB\-n\fR
 .RS 4
-Ignores package command categorization, calls zypper in non\-interactive 
mode\&.
+Calls zypper in non\-interactive mode, even if the default for this command is 
interactive\&.
 .RE
 .PP
 \fB\-\-no\-selfupdate\fR
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/transactional-update-2.11/man/transactional-update.8.html 
new/transactional-update-2.12/man/transactional-update.8.html
--- old/transactional-update-2.11/man/transactional-update.8.html       
2018-11-13 15:19:44.000000000 +0100
+++ new/transactional-update-2.12/man/transactional-update.8.html       
2019-01-28 19:45:21.000000000 +0100
@@ -15,7 +15,7 @@
     h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, 
dt:hover > a.headerlink {
       visibility: visible;
     }
-  </style><a xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common"; 
href="transactional-update.index.html">Index </a><span 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common"; style="float:right">transactional-update 
2.10</span><hr xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><div class="refentry"><a 
name="transactional-update.8"></a><div class="titlepage"></div><div 
class="refnamediv"><a name="name"></a><h2>Name</h2><p>transactional-update, 
transactional-update.service, transactional-update.timer — Apply updates to the 
system in an atomic way via transactional
+  </style><a xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common"; 
href="transactional-update.index.html">Index </a><span 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common"; style="float:right">transactional-update 
2.11</span><hr xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><div class="refentry"><a 
name="transactional-update.8"></a><div class="titlepage"></div><div 
class="refnamediv"><a name="name"></a><h2>Name</h2><p>transactional-update, 
transactional-update.service, transactional-update.timer — Apply updates to the 
system in an atomic way via transactional
     updates.</p></div><div class="refsynopsisdiv"><a 
name="synopsis"></a><h2>Synopsis</h2><div class="cmdsynopsis"><p><code 
class="command">transactional-update</code>  [<em 
class="replaceable"><code>options</code></em>...] [<em 
class="replaceable"><code>general-command</code></em>...] [<em 
class="replaceable"><code>package-command</code></em>
          [<em class="replaceable"><code>command-argument</code></em>...]
       ]</p></div><div class="cmdsynopsis"><p><code 
class="command">transactional-update</code>  [<em 
class="replaceable"><code>options</code></em>...]  <em 
class="replaceable"><code>standalone-command</code></em> 
</p></div><p>transactional-update.service</p><p>transactional-update.timer</p></div><div
 class="refsect1"><a name="description"></a><h2 id="DESCRIPTION">DESCRIPTION<a 
class="headerlink" title="Permalink to this headline" 
href="#DESCRIPTION">¶</a></h2><p><span 
class="command"><strong>transactional-update</strong></span> updates the system
@@ -103,6 +103,7 @@
        daemon to reboot the system according to the configured policies. Else
        <span class="command"><strong>systemctl reboot</strong></span> is 
called.
       </p></dd><dt id="shell"><span class="term"><code 
class="option">shell</code></span><a class="headerlink" title="Permalink to 
this term" href="#shell">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>
+       Opens a shell to execute commands like zypper manually.
        After all actions are done, before the snapshot with the changes is
        unmounted and switched to read-only, a shell is started in the new
        snapshot as chroot environment for testing and debugging.
@@ -170,11 +171,15 @@
        file system is set directly using <span 
class="command"><strong>btrfs</strong></span>. On
        read-write systems
        <a href="http://snapper.io/manpages/snapper.html";><span 
class="citerefentry"><span class="refentrytitle">snapper</span>(8)</span></a>
-       <code class="option">rollback</code> is called. If no snapshot number 
is given
-       the current root file system is made the new default root file system.
-       Otherwise the snapshot with <code class="option">number</code> is made 
the
-       new default root filesystem.
-      </p></dd></dl></div></div></div><div class="refsect1"><a 
name="options"></a><h2 id="OPTIONS">OPTIONS<a class="headerlink" 
title="Permalink to this headline" href="#OPTIONS">¶</a></h2><div 
class="variablelist"><dl class="variablelist"><dt id="--interactive"><span 
class="term"><code class="option">--interactive</code>, </span><span 
class="term"><code class="option">-i</code></span><a class="headerlink" 
title="Permalink to this term" href="#--interactive">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>Ignores package command categorization, 
calls zypper in interactive mode.</p></dd><dt id="--non-interactive"><span 
class="term"><code class="option">--non-interactive</code>, </span><span 
class="term"><code class="option">-n</code></span><a class="headerlink" 
title="Permalink to this term" href="#--non-interactive">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>Ignores package command categorization, 
calls zypper in non-interactive mode.</p></dd><dt id="--no-selfupdate"><span 
class="term"><code class="option">--no-selfupdate</code></span><a 
class="headerlink" title="Permalink to this term" 
href="#--no-selfupdate">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>Skip checking for newer 
transactional-update versions.</p></dd><dt id="--quiet"><span 
class="term"><code class="option">--quiet</code></span><a class="headerlink" 
title="Permalink to this term" href="#--quiet">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>Don't print warnings and informational 
messages to stdout.</p></dd><dt id="--help"><span class="term"><code 
class="option">--help</code>, </span><span class="term"><code 
class="option">-h</code></span><a class="headerlink" title="Permalink to this 
term" href="#--help">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>Display help and exit</p></dd><dt 
id="--version"><span class="term"><code 
class="option">--version</code></span><a class="headerlink" title="Permalink to 
this term" href="#--version">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>Output version information and 
exit</p></dd></dl></div></div><div class="refsect1"><a name="important"></a><h2 
id="IMPORTANT">IMPORTANT<a class="headerlink" title="Permalink to this 
headline" href="#IMPORTANT">¶</a></h2><p>
+       <code class="option">rollback</code> is called.
+      </p><p>
+       If no snapshot number is given, the current root file system is set as
+       the new default root file system.
+       Otherwise <em class="replaceable"><code>number</code></em> can either 
be a snapshot
+       number (as displayed by <span class="command"><strong>snapper 
list</strong></span>) or the word
+       <code class="option">last</code>. <code class="option">last</code> will 
try to reset to the
+       latest working snapshot.
+      </p></dd></dl></div></div></div><div class="refsect1"><a 
name="options"></a><h2 id="OPTIONS">OPTIONS<a class="headerlink" 
title="Permalink to this headline" href="#OPTIONS">¶</a></h2><div 
class="variablelist"><dl class="variablelist"><dt id="--interactive"><span 
class="term"><code class="option">--interactive</code>, </span><span 
class="term"><code class="option">-i</code></span><a class="headerlink" 
title="Permalink to this term" href="#--interactive">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>Calls zypper in interactive mode, even 
if the default for this command is non-interactive.</p></dd><dt 
id="--non-interactive"><span class="term"><code 
class="option">--non-interactive</code>, </span><span class="term"><code 
class="option">-n</code></span><a class="headerlink" title="Permalink to this 
term" href="#--non-interactive">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>Calls zypper in non-interactive mode, 
even if the default for this command is interactive.</p></dd><dt 
id="--no-selfupdate"><span class="term"><code 
class="option">--no-selfupdate</code></span><a class="headerlink" 
title="Permalink to this term" href="#--no-selfupdate">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>Skip checking for newer 
transactional-update versions.</p></dd><dt id="--quiet"><span 
class="term"><code class="option">--quiet</code></span><a class="headerlink" 
title="Permalink to this term" href="#--quiet">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>Don't print warnings and informational 
messages to stdout.</p></dd><dt id="--help"><span class="term"><code 
class="option">--help</code>, </span><span class="term"><code 
class="option">-h</code></span><a class="headerlink" title="Permalink to this 
term" href="#--help">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>Display help and exit</p></dd><dt 
id="--version"><span class="term"><code 
class="option">--version</code></span><a class="headerlink" title="Permalink to 
this term" href="#--version">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>Output version information and 
exit</p></dd></dl></div></div><div class="refsect1"><a name="important"></a><h2 
id="IMPORTANT">IMPORTANT<a class="headerlink" title="Permalink to this 
headline" href="#IMPORTANT">¶</a></h2><p>
   Only RPMs which are fully part of the root filesystem and
   /etc can be updated. There is also
   limited handling for adding files and directories to
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/transactional-update-2.11/man/transactional-update.8.xml 
new/transactional-update-2.12/man/transactional-update.8.xml
--- old/transactional-update-2.11/man/transactional-update.8.xml        
2018-11-13 12:02:13.000000000 +0100
+++ new/transactional-update-2.12/man/transactional-update.8.xml        
2019-01-28 19:16:31.000000000 +0100
@@ -210,6 +210,7 @@
     <term><option>shell</option></term>
     <listitem>
       <para>
+       Opens a shell to execute commands like zypper manually.
        After all actions are done, before the snapshot with the changes is
        unmounted and switched to read-only, a shell is started in the new
        snapshot as chroot environment for testing and debugging.
@@ -352,12 +353,16 @@
        Sets the default root file system. On a read-only system the root
        file system is set directly using <command>btrfs</command>. On
        read-write systems
-       <citerefentry
-           
project='snapper'><refentrytitle>snapper</refentrytitle><manvolnum>8</manvolnum></citerefentry>
-       <option>rollback</option> is called. If no snapshot number is given
-       the current root file system is made the new default root file system.
-       Otherwise the snapshot with <option>number</option> is made the
-       new default root filesystem.
+       <citerefentry 
project='snapper'><refentrytitle>snapper</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+       <option>rollback</option> is called.
+      </para>
+      <para>
+       If no snapshot number is given, the current root file system is set as
+       the new default root file system.
+       Otherwise <replaceable>number</replaceable> can either be a snapshot
+       number (as displayed by <command>snapper list</command>) or the word
+       <option>last</option>. <option>last</option> will try to reset to the
+       latest working snapshot.
       </para>
     </listitem>
   </varlistentry>
@@ -370,14 +375,14 @@
     <term><option>--interactive</option></term>
     <term><option>-i</option></term>
     <listitem>
-      <para>Ignores package command categorization, calls zypper in 
interactive mode.</para>
+      <para>Calls zypper in interactive mode, even if the default for this 
command is non-interactive.</para>
     </listitem>
   </varlistentry>
   <varlistentry>
     <term><option>--non-interactive</option></term>
     <term><option>-n</option></term>
     <listitem>
-      <para>Ignores package command categorization, calls zypper in 
non-interactive mode.</para>
+      <para>Calls zypper in non-interactive mode, even if the default for this 
command is interactive.</para>
     </listitem>
   </varlistentry>
   <varlistentry>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/transactional-update-2.11/man/transactional-update.index.html 
new/transactional-update-2.12/man/transactional-update.index.html
--- old/transactional-update-2.11/man/transactional-update.index.html   
2018-11-13 15:19:45.000000000 +0100
+++ new/transactional-update-2.12/man/transactional-update.index.html   
2019-01-28 19:45:21.000000000 +0100
@@ -15,4 +15,4 @@
     h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, 
dt:hover > a.headerlink {
       visibility: visible;
     }
-  </style><a xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common"; 
href="transactional-update.index.html">Index </a><span 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common"; style="float:right">transactional-update 
2.10</span><hr xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><div class="refentry"><a 
name="transactional-update.index"></a><div class="titlepage"></div><div 
class="refnamediv"><h2>Name</h2><p>transactional-update.index — List all 
manpages from the transactional-update project</p></div><div 
class="refsect1"><a name="id-1.4"></a><h2 id="T">T<a class="headerlink" 
title="Permalink to this headline" href="#T">¶</a></h2><p><a 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common"; href="transactional-update.8.html"><span 
class="citerefentry"><span 
class="refentrytitle">transactional-update</span>(8)</span></a> -- Apply 
updates to the system in an atomic way via transactional updates.<br><a 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common"; 
href="transactional-update.conf.5.html"><span class="citerefentry"><span 
class="refentrytitle">transactional-update.conf</span>(5)</span></a> -- 
transactional-update configuration file<br><a 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common"; 
href="transactional-update.service.8.html"><span class="citerefentry"><span 
class="refentrytitle">transactional-update.service</span>(8)</span></a> -- 
Apply updates to the system in an atomic way via transactional updates.<br><a 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common"; 
href="transactional-update.timer.8.html"><span class="citerefentry"><span 
class="refentrytitle">transactional-update.timer</span>(8)</span></a> -- Apply 
updates to the system in an atomic way via transactional 
updates.<br></p></div><div class="refsect1"><a name="id-1.5"></a><p><a 
name="counts"></a>This index contains 4 entries, referring to 2 individual 
manual pages.</p></div></div></body></html>
+  </style><a xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common"; 
href="transactional-update.index.html">Index </a><span 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common"; style="float:right">transactional-update 
2.11</span><hr xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><div class="refentry"><a 
name="transactional-update.index"></a><div class="titlepage"></div><div 
class="refnamediv"><h2>Name</h2><p>transactional-update.index — List all 
manpages from the transactional-update project</p></div><div 
class="refsect1"><a name="id-1.4"></a><h2 id="T">T<a class="headerlink" 
title="Permalink to this headline" href="#T">¶</a></h2><p><a 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common"; href="transactional-update.8.html"><span 
class="citerefentry"><span 
class="refentrytitle">transactional-update</span>(8)</span></a> -- Apply 
updates to the system in an atomic way via transactional updates.<br><a 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common"; 
href="transactional-update.conf.5.html"><span class="citerefentry"><span 
class="refentrytitle">transactional-update.conf</span>(5)</span></a> -- 
transactional-update configuration file<br><a 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common"; 
href="transactional-update.service.8.html"><span class="citerefentry"><span 
class="refentrytitle">transactional-update.service</span>(8)</span></a> -- 
Apply updates to the system in an atomic way via transactional updates.<br><a 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common"; 
href="transactional-update.timer.8.html"><span class="citerefentry"><span 
class="refentrytitle">transactional-update.timer</span>(8)</span></a> -- Apply 
updates to the system in an atomic way via transactional 
updates.<br></p></div><div class="refsect1"><a name="id-1.5"></a><p><a 
name="counts"></a>This index contains 4 entries, referring to 2 individual 
manual pages.</p></div></div></body></html>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/transactional-update-2.11/man/transactional-update.service.8.html 
new/transactional-update-2.12/man/transactional-update.service.8.html
--- old/transactional-update-2.11/man/transactional-update.service.8.html       
2018-11-13 15:19:44.000000000 +0100
+++ new/transactional-update-2.12/man/transactional-update.service.8.html       
2019-01-28 19:45:21.000000000 +0100
@@ -15,7 +15,7 @@
     h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, 
dt:hover > a.headerlink {
       visibility: visible;
     }
-  </style><a xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common"; 
href="transactional-update.index.html">Index </a><span 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common"; style="float:right">transactional-update 
2.10</span><hr xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><div class="refentry"><a 
name="transactional-update.8"></a><div class="titlepage"></div><div 
class="refnamediv"><a name="name"></a><h2>Name</h2><p>transactional-update, 
transactional-update.service, transactional-update.timer — Apply updates to the 
system in an atomic way via transactional
+  </style><a xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common"; 
href="transactional-update.index.html">Index </a><span 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common"; style="float:right">transactional-update 
2.11</span><hr xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><div class="refentry"><a 
name="transactional-update.8"></a><div class="titlepage"></div><div 
class="refnamediv"><a name="name"></a><h2>Name</h2><p>transactional-update, 
transactional-update.service, transactional-update.timer — Apply updates to the 
system in an atomic way via transactional
     updates.</p></div><div class="refsynopsisdiv"><a 
name="synopsis"></a><h2>Synopsis</h2><div class="cmdsynopsis"><p><code 
class="command">transactional-update</code>  [<em 
class="replaceable"><code>options</code></em>...] [<em 
class="replaceable"><code>general-command</code></em>...] [<em 
class="replaceable"><code>package-command</code></em>
          [<em class="replaceable"><code>command-argument</code></em>...]
       ]</p></div><div class="cmdsynopsis"><p><code 
class="command">transactional-update</code>  [<em 
class="replaceable"><code>options</code></em>...]  <em 
class="replaceable"><code>standalone-command</code></em> 
</p></div><p>transactional-update.service</p><p>transactional-update.timer</p></div><div
 class="refsect1"><a name="description"></a><h2 id="DESCRIPTION">DESCRIPTION<a 
class="headerlink" title="Permalink to this headline" 
href="#DESCRIPTION">¶</a></h2><p><span 
class="command"><strong>transactional-update</strong></span> updates the system
@@ -103,6 +103,7 @@
        daemon to reboot the system according to the configured policies. Else
        <span class="command"><strong>systemctl reboot</strong></span> is 
called.
       </p></dd><dt id="shell"><span class="term"><code 
class="option">shell</code></span><a class="headerlink" title="Permalink to 
this term" href="#shell">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>
+       Opens a shell to execute commands like zypper manually.
        After all actions are done, before the snapshot with the changes is
        unmounted and switched to read-only, a shell is started in the new
        snapshot as chroot environment for testing and debugging.
@@ -170,11 +171,15 @@
        file system is set directly using <span 
class="command"><strong>btrfs</strong></span>. On
        read-write systems
        <a href="http://snapper.io/manpages/snapper.html";><span 
class="citerefentry"><span class="refentrytitle">snapper</span>(8)</span></a>
-       <code class="option">rollback</code> is called. If no snapshot number 
is given
-       the current root file system is made the new default root file system.
-       Otherwise the snapshot with <code class="option">number</code> is made 
the
-       new default root filesystem.
-      </p></dd></dl></div></div></div><div class="refsect1"><a 
name="options"></a><h2 id="OPTIONS">OPTIONS<a class="headerlink" 
title="Permalink to this headline" href="#OPTIONS">¶</a></h2><div 
class="variablelist"><dl class="variablelist"><dt id="--interactive"><span 
class="term"><code class="option">--interactive</code>, </span><span 
class="term"><code class="option">-i</code></span><a class="headerlink" 
title="Permalink to this term" href="#--interactive">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>Ignores package command categorization, 
calls zypper in interactive mode.</p></dd><dt id="--non-interactive"><span 
class="term"><code class="option">--non-interactive</code>, </span><span 
class="term"><code class="option">-n</code></span><a class="headerlink" 
title="Permalink to this term" href="#--non-interactive">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>Ignores package command categorization, 
calls zypper in non-interactive mode.</p></dd><dt id="--no-selfupdate"><span 
class="term"><code class="option">--no-selfupdate</code></span><a 
class="headerlink" title="Permalink to this term" 
href="#--no-selfupdate">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>Skip checking for newer 
transactional-update versions.</p></dd><dt id="--quiet"><span 
class="term"><code class="option">--quiet</code></span><a class="headerlink" 
title="Permalink to this term" href="#--quiet">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>Don't print warnings and informational 
messages to stdout.</p></dd><dt id="--help"><span class="term"><code 
class="option">--help</code>, </span><span class="term"><code 
class="option">-h</code></span><a class="headerlink" title="Permalink to this 
term" href="#--help">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>Display help and exit</p></dd><dt 
id="--version"><span class="term"><code 
class="option">--version</code></span><a class="headerlink" title="Permalink to 
this term" href="#--version">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>Output version information and 
exit</p></dd></dl></div></div><div class="refsect1"><a name="important"></a><h2 
id="IMPORTANT">IMPORTANT<a class="headerlink" title="Permalink to this 
headline" href="#IMPORTANT">¶</a></h2><p>
+       <code class="option">rollback</code> is called.
+      </p><p>
+       If no snapshot number is given, the current root file system is set as
+       the new default root file system.
+       Otherwise <em class="replaceable"><code>number</code></em> can either 
be a snapshot
+       number (as displayed by <span class="command"><strong>snapper 
list</strong></span>) or the word
+       <code class="option">last</code>. <code class="option">last</code> will 
try to reset to the
+       latest working snapshot.
+      </p></dd></dl></div></div></div><div class="refsect1"><a 
name="options"></a><h2 id="OPTIONS">OPTIONS<a class="headerlink" 
title="Permalink to this headline" href="#OPTIONS">¶</a></h2><div 
class="variablelist"><dl class="variablelist"><dt id="--interactive"><span 
class="term"><code class="option">--interactive</code>, </span><span 
class="term"><code class="option">-i</code></span><a class="headerlink" 
title="Permalink to this term" href="#--interactive">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>Calls zypper in interactive mode, even 
if the default for this command is non-interactive.</p></dd><dt 
id="--non-interactive"><span class="term"><code 
class="option">--non-interactive</code>, </span><span class="term"><code 
class="option">-n</code></span><a class="headerlink" title="Permalink to this 
term" href="#--non-interactive">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>Calls zypper in non-interactive mode, 
even if the default for this command is interactive.</p></dd><dt 
id="--no-selfupdate"><span class="term"><code 
class="option">--no-selfupdate</code></span><a class="headerlink" 
title="Permalink to this term" href="#--no-selfupdate">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>Skip checking for newer 
transactional-update versions.</p></dd><dt id="--quiet"><span 
class="term"><code class="option">--quiet</code></span><a class="headerlink" 
title="Permalink to this term" href="#--quiet">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>Don't print warnings and informational 
messages to stdout.</p></dd><dt id="--help"><span class="term"><code 
class="option">--help</code>, </span><span class="term"><code 
class="option">-h</code></span><a class="headerlink" title="Permalink to this 
term" href="#--help">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>Display help and exit</p></dd><dt 
id="--version"><span class="term"><code 
class="option">--version</code></span><a class="headerlink" title="Permalink to 
this term" href="#--version">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>Output version information and 
exit</p></dd></dl></div></div><div class="refsect1"><a name="important"></a><h2 
id="IMPORTANT">IMPORTANT<a class="headerlink" title="Permalink to this 
headline" href="#IMPORTANT">¶</a></h2><p>
   Only RPMs which are fully part of the root filesystem and
   /etc can be updated. There is also
   limited handling for adding files and directories to
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/transactional-update-2.11/man/transactional-update.timer.8.html 
new/transactional-update-2.12/man/transactional-update.timer.8.html
--- old/transactional-update-2.11/man/transactional-update.timer.8.html 
2018-11-13 15:19:44.000000000 +0100
+++ new/transactional-update-2.12/man/transactional-update.timer.8.html 
2019-01-28 19:45:21.000000000 +0100
@@ -15,7 +15,7 @@
     h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, 
dt:hover > a.headerlink {
       visibility: visible;
     }
-  </style><a xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common"; 
href="transactional-update.index.html">Index </a><span 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common"; style="float:right">transactional-update 
2.10</span><hr xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><div class="refentry"><a 
name="transactional-update.8"></a><div class="titlepage"></div><div 
class="refnamediv"><a name="name"></a><h2>Name</h2><p>transactional-update, 
transactional-update.service, transactional-update.timer — Apply updates to the 
system in an atomic way via transactional
+  </style><a xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common"; 
href="transactional-update.index.html">Index </a><span 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common"; style="float:right">transactional-update 
2.11</span><hr xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><div class="refentry"><a 
name="transactional-update.8"></a><div class="titlepage"></div><div 
class="refnamediv"><a name="name"></a><h2>Name</h2><p>transactional-update, 
transactional-update.service, transactional-update.timer — Apply updates to the 
system in an atomic way via transactional
     updates.</p></div><div class="refsynopsisdiv"><a 
name="synopsis"></a><h2>Synopsis</h2><div class="cmdsynopsis"><p><code 
class="command">transactional-update</code>  [<em 
class="replaceable"><code>options</code></em>...] [<em 
class="replaceable"><code>general-command</code></em>...] [<em 
class="replaceable"><code>package-command</code></em>
          [<em class="replaceable"><code>command-argument</code></em>...]
       ]</p></div><div class="cmdsynopsis"><p><code 
class="command">transactional-update</code>  [<em 
class="replaceable"><code>options</code></em>...]  <em 
class="replaceable"><code>standalone-command</code></em> 
</p></div><p>transactional-update.service</p><p>transactional-update.timer</p></div><div
 class="refsect1"><a name="description"></a><h2 id="DESCRIPTION">DESCRIPTION<a 
class="headerlink" title="Permalink to this headline" 
href="#DESCRIPTION">¶</a></h2><p><span 
class="command"><strong>transactional-update</strong></span> updates the system
@@ -103,6 +103,7 @@
        daemon to reboot the system according to the configured policies. Else
        <span class="command"><strong>systemctl reboot</strong></span> is 
called.
       </p></dd><dt id="shell"><span class="term"><code 
class="option">shell</code></span><a class="headerlink" title="Permalink to 
this term" href="#shell">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>
+       Opens a shell to execute commands like zypper manually.
        After all actions are done, before the snapshot with the changes is
        unmounted and switched to read-only, a shell is started in the new
        snapshot as chroot environment for testing and debugging.
@@ -170,11 +171,15 @@
        file system is set directly using <span 
class="command"><strong>btrfs</strong></span>. On
        read-write systems
        <a href="http://snapper.io/manpages/snapper.html";><span 
class="citerefentry"><span class="refentrytitle">snapper</span>(8)</span></a>
-       <code class="option">rollback</code> is called. If no snapshot number 
is given
-       the current root file system is made the new default root file system.
-       Otherwise the snapshot with <code class="option">number</code> is made 
the
-       new default root filesystem.
-      </p></dd></dl></div></div></div><div class="refsect1"><a 
name="options"></a><h2 id="OPTIONS">OPTIONS<a class="headerlink" 
title="Permalink to this headline" href="#OPTIONS">¶</a></h2><div 
class="variablelist"><dl class="variablelist"><dt id="--interactive"><span 
class="term"><code class="option">--interactive</code>, </span><span 
class="term"><code class="option">-i</code></span><a class="headerlink" 
title="Permalink to this term" href="#--interactive">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>Ignores package command categorization, 
calls zypper in interactive mode.</p></dd><dt id="--non-interactive"><span 
class="term"><code class="option">--non-interactive</code>, </span><span 
class="term"><code class="option">-n</code></span><a class="headerlink" 
title="Permalink to this term" href="#--non-interactive">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>Ignores package command categorization, 
calls zypper in non-interactive mode.</p></dd><dt id="--no-selfupdate"><span 
class="term"><code class="option">--no-selfupdate</code></span><a 
class="headerlink" title="Permalink to this term" 
href="#--no-selfupdate">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>Skip checking for newer 
transactional-update versions.</p></dd><dt id="--quiet"><span 
class="term"><code class="option">--quiet</code></span><a class="headerlink" 
title="Permalink to this term" href="#--quiet">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>Don't print warnings and informational 
messages to stdout.</p></dd><dt id="--help"><span class="term"><code 
class="option">--help</code>, </span><span class="term"><code 
class="option">-h</code></span><a class="headerlink" title="Permalink to this 
term" href="#--help">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>Display help and exit</p></dd><dt 
id="--version"><span class="term"><code 
class="option">--version</code></span><a class="headerlink" title="Permalink to 
this term" href="#--version">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>Output version information and 
exit</p></dd></dl></div></div><div class="refsect1"><a name="important"></a><h2 
id="IMPORTANT">IMPORTANT<a class="headerlink" title="Permalink to this 
headline" href="#IMPORTANT">¶</a></h2><p>
+       <code class="option">rollback</code> is called.
+      </p><p>
+       If no snapshot number is given, the current root file system is set as
+       the new default root file system.
+       Otherwise <em class="replaceable"><code>number</code></em> can either 
be a snapshot
+       number (as displayed by <span class="command"><strong>snapper 
list</strong></span>) or the word
+       <code class="option">last</code>. <code class="option">last</code> will 
try to reset to the
+       latest working snapshot.
+      </p></dd></dl></div></div></div><div class="refsect1"><a 
name="options"></a><h2 id="OPTIONS">OPTIONS<a class="headerlink" 
title="Permalink to this headline" href="#OPTIONS">¶</a></h2><div 
class="variablelist"><dl class="variablelist"><dt id="--interactive"><span 
class="term"><code class="option">--interactive</code>, </span><span 
class="term"><code class="option">-i</code></span><a class="headerlink" 
title="Permalink to this term" href="#--interactive">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>Calls zypper in interactive mode, even 
if the default for this command is non-interactive.</p></dd><dt 
id="--non-interactive"><span class="term"><code 
class="option">--non-interactive</code>, </span><span class="term"><code 
class="option">-n</code></span><a class="headerlink" title="Permalink to this 
term" href="#--non-interactive">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>Calls zypper in non-interactive mode, 
even if the default for this command is interactive.</p></dd><dt 
id="--no-selfupdate"><span class="term"><code 
class="option">--no-selfupdate</code></span><a class="headerlink" 
title="Permalink to this term" href="#--no-selfupdate">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>Skip checking for newer 
transactional-update versions.</p></dd><dt id="--quiet"><span 
class="term"><code class="option">--quiet</code></span><a class="headerlink" 
title="Permalink to this term" href="#--quiet">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>Don't print warnings and informational 
messages to stdout.</p></dd><dt id="--help"><span class="term"><code 
class="option">--help</code>, </span><span class="term"><code 
class="option">-h</code></span><a class="headerlink" title="Permalink to this 
term" href="#--help">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>Display help and exit</p></dd><dt 
id="--version"><span class="term"><code 
class="option">--version</code></span><a class="headerlink" title="Permalink to 
this term" href="#--version">¶</a></dt><dd 
xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0"; 
xmlns:exsl="http://exslt.org/common";><p>Output version information and 
exit</p></dd></dl></div></div><div class="refsect1"><a name="important"></a><h2 
id="IMPORTANT">IMPORTANT<a class="headerlink" title="Permalink to this 
headline" href="#IMPORTANT">¶</a></h2><p>
   Only RPMs which are fully part of the root filesystem and
   /etc can be updated. There is also
   limited handling for adding files and directories to
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/transactional-update-2.11/sbin/transactional-update.in 
new/transactional-update-2.12/sbin/transactional-update.in
--- old/transactional-update-2.11/sbin/transactional-update.in  2018-11-13 
17:35:03.000000000 +0100
+++ new/transactional-update-2.12/sbin/transactional-update.in  2019-02-04 
13:38:55.000000000 +0100
@@ -47,6 +47,7 @@
 LOGFILE="/var/log/transactional-update.log"
 STATE_FILE="/var/lib/misc/transactional-update.state"
 NEW_SNAPSHOT_FLAG="/var/lib/overlay/transactional-update.newsnapshot"
+NEEDS_RESTARTING_FILE="/var/run/reboot-needed"
 ZYPPER_AUTO_IMPORT_KEYS=0
 
ETC_OVERLAY_PATTERN='^[^[:space:]]\+[[:space:]]\+\/etc[[:space:]]\+overlay[[:space:]]\+\([^[:space:]]*,\|\)workdir=\/sysroot\/var\/lib\/overlay\/work-etc[,[:space:]]'
 
@@ -59,7 +60,7 @@
 fi
 
 # Initialize internal variables
-HAS_SEPARATE_ETC=0
+ETC_IS_OVERLAY=0
 HAS_SEPARATE_VAR=0
 VAR_CACHE_CLEANUP=0
 FORCE_NONINTERACTIVE=""
@@ -120,7 +121,7 @@
     echo "reboot                 Reboot after update"
     echo ""
     echo "Package Commands:"
-    echo "dup                    Call 'zypper dup --no-allow-vendor-change' 
(n)"
+    echo "dup                    Call 'zypper dup' (n)"
     echo "up                     Call 'zypper up' (n)"
     echo "patch                  Call 'zypper patch' (n)"
     echo "migration              Updates systems registered via SCC / SMT (i)"
@@ -130,7 +131,8 @@
     echo "Defaults: (i) interactive command; (n) non-interactive command"
     echo ""
     echo "Standalone Commands:"
-    echo "rollback <number>      Set given snapshot as default snapshot"
+    echo "rollback [<number>]    Set the current or given snapshot as default 
snapshot"
+    echo "rollback last          Set the last working snapshot as default 
snapshot"
     echo ""
     echo "Options:"
     echo "--interactive, -i      Use interactive mode for package command"
@@ -230,6 +232,7 @@
     fi
     if [ -n "${ETC_OVERLAY_DIR}" ] ; then
        log_error "Removing overlay directory ${ETC_OVERLAY_DIR%/*}..."
+       umount "${ETC_OVERLAY_DIR}"
        rm -rf "${ETC_OVERLAY_DIR%/*}" |& tee -a ${LOGFILE}
     fi
     if [ $USE_SALT_GRAINS -eq 1 ]; then
@@ -383,36 +386,36 @@
 }
 
 check_registration_on_next_reboot() {
-    if [ ${HAS_SEPARATE_VAR} -eq 0 ]; then
-       # /var own subvolume, not mounted during update, so touch the
-       # file in the running system.
-       test -d  /var/lib/rollback || mkdir -p /var/lib/rollback
-       touch /var/lib/rollback/check-registration
-    else
-       # check if /var/lib/rollback is own subvolume
-       grep -q "[[:space:]]/var/lib/rollback[[:space:]]" /proc/mounts
-       if [ $? -eq 0 ]; then
-           # Extra subvolume, not mounted in chroot, touch outside.
-           touch /var/lib/rollback/check-registration
-       else
-           # no subvolumes,
-           test -d ${MOUNT_DIR}/var/lib/rollback || mkdir -p 
${MOUNT_DIR}/var/lib/rollback
-           touch ${MOUNT_DIR}/var/lib/rollback/check-registration
-       fi
+    local VARDIR="/var/lib/rollback"
+    # If VARDIR is part of the root file system (usually on rw systems), then
+    # create the file in the new snapshot
+    if [ "$(findmnt --noheadings --output TARGET --target "${VARDIR}")" = "/" 
]; then
+       VARDIR="${MOUNT_DIR}/${VARDIR}"
     fi
+    test -d "${VARDIR}" || mkdir -p "${VARDIR}"
+    touch "${VARDIR}/check-registration"
 }
 
 get_etc_overlay_from() {
-    local fstab="$1"
-    local overlay_options="`sed -n "/${ETC_OVERLAY_PATTERN}/p" "${fstab}" | 
cut -d ' ' -f 4`"
+    local overlay_options
     local option lowerdir overlay_id
 
+    fstab=""
     fstab_active_lowerdirs=()
     fstab_lowerdirs=()
     fstab_upper=""
     fstab_oldest_active_snapshot=""
     fstab_otheroptions=""
 
+    # Check for /etc overlay
+    for fstab in "$1"/etc/fstab{,.sys}; do
+       if [ -e "$fstab" ] ; then
+           overlay_options="`awk '$2 == "/etc" && $3 == "overlay" && $4 ~ 
"workdir=/sysroot/var/lib/overlay/work-etc" { print $4 }' "$fstab"`"
+           [ -n "${overlay_options}" ] && break
+       fi
+    done
+    [ -n "${overlay_options}" ] || return
+
     for option in `echo ${overlay_options} | tr ',' ' '`; do
        case "${option%=*}" in
            upperdir)
@@ -423,8 +426,8 @@
                    overlay_id=`echo "${lowerdir#/sysroot}" | sed -n 
's#^/var/lib/overlay/\([[:digit:]]\+\)/etc$#\1#p'`
 
                    # Special handling for old overlay location
-                   if [ "${lowerdir}" = "/var/lib/overlay/etc" ]; then
-                       if [ "${fstab_lowerdirs[@]}" = 
"${fstab_active_lowerdirs[@]}" ]; then
+                   if [ "${lowerdir}" = "/sysroot/var/lib/overlay/etc" ]; then
+                       if [ "${fstab_lowerdirs[*]}" = 
"${fstab_active_lowerdirs[*]}" ]; then
                            fstab_active_lowerdirs+=("${lowerdir}")
                        fi
                    # Add common directories and directories of existing 
snapshots
@@ -440,6 +443,8 @@
                ;;
            workdir)
                ;;
+           x-systemd.requires-mounts-for|x-initrd.mount)
+               ;;
            *)
                fstab_otheroptions="${fstab_otheroptions}${option},"
                ;;
@@ -451,21 +456,21 @@
 # Sync /etc mount contents to target directory
 sync_etc() {
     log_info "Syncing /etc of oldest snapshot $1 as base into new snapshot $2"
-    get_etc_overlay_from "$1"/etc/fstab.sys
+    get_etc_overlay_from "$1"
     fstab_lowerdirs=("${fstab_lowerdirs[@]///sysroot\/var//var}")
     mount_opts="defaults,"
     mount_opts+="lowerdir=${fstab_upper#/sysroot}:"
     mount_opts+="`echo ${fstab_lowerdirs[@]///sysroot/$1} | tr ' ' ':'`"
     mount -t overlay overlay "${ETC_OVERLAY_DIR}" -o ${mount_opts}
     if [ $? -ne 0 ]; then
-        log_error "ERROR: mount of old overlay stack from $1 failed!"
-        quit 1
+       log_error "ERROR: mount of old overlay stack from $1 failed!"
+       quit 1
     fi
 
-    rsync --archive --xattrs --acls --delete --quiet "${ETC_OVERLAY_DIR}" "$2"
+    rsync --archive --inplace --xattrs --filter='-x security.selinux' --acls 
--delete --quiet "${ETC_OVERLAY_DIR}" "$2"
     if [ $? -ne 0 ]; then
-        log_error "ERROR: syncing $1 into snapshot $2 failed!"
-        quit 1
+       log_error "ERROR: syncing $1 into snapshot $2 failed!"
+       quit 1
     fi
     umount "${ETC_OVERLAY_DIR}"
 }
@@ -489,7 +494,7 @@
            ;;
        dup)
            DO_DUP=1
-           ZYPPER_ARG="--no-cd dup --no-allow-vendor-change"
+           ZYPPER_ARG="--no-cd dup"
            shift
            ;;
         up|patch)
@@ -691,7 +696,7 @@
     fi
 fi
 
-if [ -n "${ZYPPER_ARG}" -a ${ZYPPER_AUTO_IMPORT_KEYS} -eq 1 ]; then
+if [ -n "${ZYPPER_ARG}" -a "${DO_MIGRATION}" -eq 0 -a 
${ZYPPER_AUTO_IMPORT_KEYS} -eq 1 ]; then
     ZYPPER_ARG="--gpg-auto-import-keys ${ZYPPER_ARG}"
 fi
 
@@ -699,18 +704,22 @@
 DEFAULT_SNAPSHOT_ID=`btrfs subvolume get-default / | sed -e 
's|.*.snapshots/\(.*\)/snapshot|\1|g'`
 RO_ROOT=`btrfs property get / ro | sed -e 's|ro=||'`
 
-if [ -e "/.snapshots/${CURRENT_SNAPSHOT_ID}/snapshot/etc/fstab.sys" ]; then
-    get_etc_overlay_from 
"/.snapshots/${CURRENT_SNAPSHOT_ID}/snapshot/etc/fstab.sys"
-    if [ -n "$fstab_upper" ]; then
-       log_info "Separate /etc detected."
-       HAS_SEPARATE_ETC=1
-    fi
+get_etc_overlay_from "/.snapshots/${CURRENT_SNAPSHOT_ID}/snapshot"
+if [ -n "$fstab_upper" ]; then
+    log_info "/etc on overlayfs detected."
+    ETC_IS_OVERLAY=1
 fi
 
 if [ ${DO_ROLLBACK} -eq 1 ]; then
     NEED_REBOOT_WARNING=1
 
-    if [ ${ROLLBACK_SNAPSHOT} -eq 0 ]; then
+    if [ "${ROLLBACK_SNAPSHOT}" = "last" ]; then
+       if [ -n "${LAST_WORKING_SNAPSHOTS}" ]; then
+           ROLLBACK_SNAPSHOT=${LAST_WORKING_SNAPSHOTS%% *}
+       else
+           log_error "No last working snapshot saved; please use 'snapper 
list' for manual selection"
+       fi
+    elif [ ${ROLLBACK_SNAPSHOT} -eq 0 -o ${ROLLBACK_SNAPSHOT} -eq 
${CURRENT_SNAPSHOT_ID} ]; then
        ROLLBACK_SNAPSHOT=${CURRENT_SNAPSHOT_ID}
        NEED_REBOOT_WARNING=0
     fi
@@ -734,6 +743,10 @@
        fi
        # Remove possible cleanup algo
        snapper ${SNAPPER_NO_DBUS} modify -c '' ${ROLLBACK_SNAPSHOT}
+
+       if [ ${NEED_REBOOT_WARNING} -eq 0 ]; then
+           rm -f "${NEEDS_RESTARTING_FILE}"
+       fi
     else
        snapper rollback ${ROLLBACK_SNAPSHOT}
        NEED_REBOOT_WARNING=1
@@ -814,12 +827,14 @@
     fi
 
     # Clean up old unused overlays
-    for overlay in /var/lib/overlay/[0-9]* /var/lib/overlay; do
-       if ! grep -q "${overlay}/etc" /.snapshots/*/snapshot/etc/fstab.sys; then
-           log_info "Deleting unused overlay ${overlay}"
-           rm -rf "${overlay}"
-       fi
-    done
+    if [ ${RO_ROOT} == "true" ]; then
+       for overlay in /var/lib/overlay/[0-9]* /var/lib/overlay; do
+           if ! grep -q "${overlay}/etc" 
/.snapshots/*/snapshot/etc/fstab{,.sys}; then
+               log_info "Deleting unused overlay ${overlay}"
+               rm -rf "${overlay}"
+           fi
+       done
+    fi
 fi
 
 if [ -n "${ZYPPER_ARG}" -o ${REWRITE_GRUB_CFG} -eq 1 \
@@ -837,7 +852,7 @@
     # Check if there are updates at all. Don't check if we do
     # a registration, as this can change the zypper result.
     if [ -n "${ZYPPER_ARG}" -a -n "${ZYPPER_NONINTERACTIVE}" \
-         -a ${DO_REGISTRATION} -eq 0 ]; then
+         -a ${DO_REGISTRATION} -eq 0 -a ${DO_MIGRATION} -eq 0 ]; then
 
        TMPFILE=`mktemp /tmp/transactional-update.XXXXXXXXXX`
        zypper --xml ${ZYPPER_ARG} ${ZYPPER_NONINTERACTIVE} --dry-run 
"${ZYPPER_ARG_PKGS[@]}" > ${TMPFILE}
@@ -888,7 +903,7 @@
        quit 1
     fi
 
-    if [ ${HAS_SEPARATE_ETC} -eq 1 ]; then
+    if [ ${ETC_IS_OVERLAY} -eq 1 ]; then
        # Create new /etc overlay for snapshot
        ETC_OVERLAY_DIR="/var/lib/overlay/${SNAPSHOT_ID}/etc"
        ETC_OVERLAY_WORK_DIR="${ETC_OVERLAY_DIR}-work"
@@ -896,14 +911,45 @@
 
        # Copy the contents of oldest /etc layer into snapshot
        sync_etc "${fstab_oldest_active_snapshot}" "${SNAPSHOT_DIR}"
+       get_etc_overlay_from "/.snapshots/${CURRENT_SNAPSHOT_ID}/snapshot"
+
+       # Special handling /etc/fstab{.sys}: dracut needs the *current* version
+       # of the files in the snapshot, as the overlay is not yet mounted
+       # during early boot - in fact the files are required to be able to
+       # mount the overlays
+       cp /etc/fstab "${SNAPSHOT_DIR}/etc"
+       cp -a /etc/fstab.sys "${SNAPSHOT_DIR}/etc"
+
+       # Migrate fstab.sys' /var and overlay entries to regular fstab
+       if [ -e "${SNAPSHOT_DIR}/etc/fstab.sys" ] && grep -qE "^overlay /etc" 
"${SNAPSHOT_DIR}/etc/fstab.sys"; then
+           awk '$3 == "overlay" && $4 ~ /=\/sysroot\/var\/lib\/overlay/' 
"${SNAPSHOT_DIR}/etc/fstab.sys" >> "${SNAPSHOT_DIR}/etc/fstab"
+           # Remove /etc, /var and /var/lib/overlay (legacy) from fstab.sys
+           gawk -i inplace '$2 != "/etc" && $2 != "/var" && $2 != 
"/var/lib/overlay" &&
+               ($3 != "overlay" || $4 !~ /=\/sysroot\/var\/lib\/overlay\//)' 
"${SNAPSHOT_DIR}/etc/fstab.sys"
+           # Append x-initrd.mount to /var mount options (bsc#1121279)
+           gawk -i inplace '$2 == "/var" || $2 == "/var/lib/overlay" { $4 = 
$4",x-initrd.mount"; } 1' "${SNAPSHOT_DIR}/etc/fstab"
+           gawk -i inplace '$3 == "overlay" && $4 ~ 
"=/sysroot/var/lib/overlay/" { $4 = 
$4",x-systemd.requires-mounts-for=/var,x-systemd.requires-mounts-for=/var/lib/overlay,x-systemd.requires-mounts-for=/sysroot/var,x-systemd.requires-mounts-for=/sysroot/var/lib/overlay,x-initrd.mount";
 } 1' "${SNAPSHOT_DIR}/etc/fstab"
+       fi
 
-       # Update fstab.sys entries for /etc overlays
-       get_etc_overlay_from 
"/.snapshots/${CURRENT_SNAPSHOT_ID}/snapshot/etc/fstab.sys"
+       # Update fstab{,.sys} entries for /etc overlays
        fstab_line="overlay /etc overlay ${fstab_otheroptions}"
        fstab_line+="lowerdir=${fstab_upper}:`echo ${fstab_active_lowerdirs[@]} 
| tr ' ' ':'`,"
        fstab_line+="upperdir=/sysroot${ETC_OVERLAY_DIR},"
-       fstab_line+="workdir=/sysroot/var/lib/overlay/work-etc 0 0"
-       sed -i "/${ETC_OVERLAY_PATTERN}/c ${fstab_line}" 
"${SNAPSHOT_DIR}/etc/fstab.sys"
+       fstab_line+="workdir=/sysroot/var/lib/overlay/work-etc,"
+       fstab_line+="x-systemd.requires-mounts-for=/var,"
+       fstab_line+="x-systemd.requires-mounts-for=/var/lib/overlay,"
+       fstab_line+="x-systemd.requires-mounts-for=/sysroot/var,"
+       fstab_line+="x-systemd.requires-mounts-for=/sysroot/var/lib/overlay,"
+       fstab_line+="x-initrd.mount 0 0"
+       sed -i "/${ETC_OVERLAY_PATTERN}/c ${fstab_line}" 
"${SNAPSHOT_DIR}/etc/fstab"
+
+       # Prettify fstab
+       gawk -i inplace 'NR==FNR { for(i=1;i<=NF;i++) { len=length($i); 
collen[i]=collen[i]>len?collen[i]:(len>42?42:len); } print }
+           NR!=FNR { for(i=1;i<=NF;i++) { printf("%-"collen[i]"s  ", $i); } 
print ""}' "${SNAPSHOT_DIR}/etc/fstab" "${SNAPSHOT_DIR}/etc/fstab"
+
+       # Make the diff visible to the admin by copying /etc/fstab into the
+       # overlay (dracut itself wouldn't need it)
+       cp "${SNAPSHOT_DIR}/etc/fstab" "${ETC_OVERLAY_DIR}"
     fi
 
     # Remember all snapshots we create for update. If transactional-update is
@@ -952,7 +998,7 @@
         log_error "ERROR: mount of sys failed!"
         quit 1
     fi
-    if [ ${HAS_SEPARATE_ETC} -eq 1 ]; then
+    if [ ${ETC_IS_OVERLAY} -eq 1 ]; then
        etc_opts="defaults,"
        etc_opts+="lowerdir=/etc,"
        etc_opts+="upperdir=${ETC_OVERLAY_DIR},"
@@ -1152,6 +1198,7 @@
        quit ${EXITCODE}
     elif [ $REBOOT_AFTERWARDS -eq 0 ]; then
        echo "Please reboot your machine to activate the changes and avoid data 
loss."
+       touch "${NEEDS_RESTARTING_FILE}"
     fi
 fi
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/transactional-update-2.11/systemd/transactional-update.timer 
new/transactional-update-2.12/systemd/transactional-update.timer
--- old/transactional-update-2.11/systemd/transactional-update.timer    
2018-01-05 10:07:35.000000000 +0100
+++ new/transactional-update-2.12/systemd/transactional-update.timer    
2019-01-28 19:16:31.000000000 +0100
@@ -7,7 +7,7 @@
 OnCalendar=daily
 AccuracySec=1m
 RandomizedDelaySec=2h
-Persistent=true
+#Persistent=true
 
 [Install]
 WantedBy=timers.target


Reply via email to