Control: tags -1 + patch pending

On Tue, 20 Sep 2016 at 14:28:35 +0200, Raphael Geissert wrote:
> If unattended-upgrades is
> 1) launched by apt-daily,
> 2) upgrading packages under minimal steps,
> 3) signaled with SIGUSR1
> 
> Then it exits after the current operation, as expected. However,
> unattended-upgrades-stamp and upgrade-stamp are both updated as if
> everything had been done.

This appears to have been fixed in git with the attached change.

    smcv
>From 82e9eda882aef62dc89df9e40e473fdd8e1f4335 Mon Sep 17 00:00:00 2001
From: Balint Reczey <balint.rec...@canonical.com>
Date: Sat, 9 Dec 2017 23:30:23 +0100
Subject: [PATCH] Exit with error when package installation failed or u-u is
 signalled to stop

Closes: #838368
---
 unattended-upgrade | 22 ++++++++++++++--------
 1 file changed, 14 insertions(+), 8 deletions(-)

diff --git a/unattended-upgrade b/unattended-upgrade
index b68308e..9b53010 100755
--- a/unattended-upgrade
+++ b/unattended-upgrade
@@ -512,7 +512,7 @@ def upgrade_in_minimal_steps(cache,            # type: apt.Cache
         for pkgname in to_upgrade:
             if SIGNAL_STOP_REQUEST:
                 logging.warning("SIGNAL received, stopping")
-                return True
+                return False
             pkg = cache[pkgname]
             if pkg.is_upgradable:
                 pkg.mark_upgrade(from_user=not pkg.is_auto_installed)
@@ -1307,7 +1307,7 @@ def is_update_day():
 
 
 def main(options, rootdir=""):
-    # type: (Options, str) -> None
+    # type: (Options, str) -> int
     # useful for testing
     if rootdir:
         _setup_alternative_rootdir(rootdir)
@@ -1317,7 +1317,7 @@ def main(options, rootdir=""):
 
     # check if today is a patch day
     if not is_update_day():
-        return
+        return 0
 
     # format (origin, archive), e.g. ("Ubuntu","dapper-security")
     allowed_origins = get_allowed_origins()
@@ -1433,7 +1433,7 @@ def main(options, rootdir=""):
     # them
     if SIGNAL_STOP_REQUEST:
         logging.warning("SIGNAL received, stopping")
-        return
+        return 1
     try:
         pm.get_archives(fetcher, list, recs)
     except SystemError as e:
@@ -1445,7 +1445,7 @@ def main(options, rootdir=""):
         logging.error("fetch.run() result: %s", e)
 
     if options.download_only:
-        return
+        return 0
 
     if dpkg_conffile_prompt():
         # now check the downloaded debs for conffile conflicts and build
@@ -1585,8 +1585,10 @@ def main(options, rootdir=""):
         sys.exit(1)
 
     # the user wants *all* auto-removals to be removed
-    if apt_pkg.config.find_b(
-            "Unattended-Upgrade::Remove-Unused-Dependencies", False):
+    # (unless u-u got signalled to stop gracefully quickly)
+    if ((apt_pkg.config.find_b(
+            "Unattended-Upgrade::Remove-Unused-Dependencies", False) and
+         not SIGNAL_STOP_REQUEST)):
         auto_removals = get_auto_removable(cache)
         pkg_install_success = pkg_install_success and do_auto_remove(
             cache, auto_removals, logfile_dpkg,
@@ -1629,6 +1631,10 @@ def main(options, rootdir=""):
     # check if the user wants a reboot
     if not options.dry_run:
         reboot_if_requested_and_needed()
+    if pkg_install_success:
+        return 0
+    else:
+        return 1
 
 
 class Options:
@@ -1697,4 +1703,4 @@ if __name__ == "__main__":
     atexit.register(os.remove, pidf)
 
     # run the main code
-    main(options)
+    sys.exit(main(options))
-- 
2.16.1

Reply via email to