[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#827930: apt: Make apt-daily leverage the ConditionACPower feature of systemd



Package: apt
Version: 1.2.13
Severity: normal
Tags: patch

Dear Maintainer,

The rationnal for this is to be able to disable this "feature" without modifying package's script. My laptop has a pretty descent battery and I prefer to keep automatic updates rather than saving a hundreth percent of power.
Actually this feature is hardcoded deep down in the script without any configuration possibility, by using systemd feature, I'll be able to disable this behaviour with a simple /etc/systemd/system/apt-daily.service.d/some.conf file.

I've made the compatibility cron job functionally equivalent (without any configuration possibility unfortunately).

The first patch is a nit-pick I saw while hacking apt scripts. Actually the apt.systemd.daily script (or apt.apt-compat.cron.daily with my patch) is using the on_ac_power utility without recommending powermgmt-base, not sure it's useful.

regards,
Nicolas

-- Package-specific info:

-- (no /etc/apt/preferences present) --


-- (no /etc/apt/sources.list present) --


-- System Information:
Debian Release: stretch/sid
  APT prefers testing
  APT policy: (900, 'testing'), (50, 'unstable'), (1, 'experimental')
Architecture: amd64 (x86_64)

Kernel: Linux 4.6.0-1-amd64 (SMP w/4 CPU cores)
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)

Versions of packages apt depends on:
ii  adduser                 3.114
ii  debian-archive-keyring  2014.3
ii  gnupg                   1.4.20-6
ii  gnupg2                  2.1.11-7
ii  gpgv                    1.4.20-6
ii  init-system-helpers     1.34
ii  libapt-pkg5.0           1.2.13
ii  libc6                   2.22-11
ii  libgcc1                 1:6.1.1-4
ii  libstdc++6              6.1.1-4

apt recommends no packages.

Versions of packages apt suggests:
pn  apt-doc     <none>
ii  aptitude    0.7.5-3
pn  dpkg-dev    <none>
pn  python-apt  <none>

-- no debconf information
>From c9ac5bf1d53d7a346b1532a74ebcdbeb476ee1ce Mon Sep 17 00:00:00 2001
From: Nicolas Le Cam <niko.lecam@gmail.com>
Date: Wed, 22 Jun 2016 21:39:38 +0200
Subject: Leverage the ConditionACPower feature of systemd instead of
 hardcoding it in the apt.systemd.daily script.

Also make the compatibility cron job provide the same functionnality for systems that do not use systemd.
---
 debian/apt-daily.service         |  1 +
 debian/apt.apt-compat.cron.daily | 24 ++++++++++++++++++++++++
 debian/apt.systemd.daily         | 26 --------------------------
 3 files changed, 25 insertions(+), 26 deletions(-)

diff --git a/debian/apt-daily.service b/debian/apt-daily.service
index 941263d..904ed5d 100644
--- a/debian/apt-daily.service
+++ b/debian/apt-daily.service
@@ -1,6 +1,7 @@
 [Unit]
 Description=Daily apt activities
 Documentation=man:apt(8)
+ConditionACPower=true
 
 [Service]
 Type=oneshot
diff --git a/debian/apt.apt-compat.cron.daily b/debian/apt.apt-compat.cron.daily
index 1ea8430..e41fecb 100644
--- a/debian/apt.apt-compat.cron.daily
+++ b/debian/apt.apt-compat.cron.daily
@@ -11,6 +11,27 @@ if [ -d /run/systemd/system ]; then
     exit 0
 fi
 
+check_power()
+{
+    # laptop check, on_ac_power returns:
+    #       0 (true)    System is on main power
+    #       1 (false)   System is not on main power
+    #       255 (false) Power status could not be determined
+    # Desktop systems always return 255 it seems
+    if which on_ac_power >/dev/null 2>&1; then
+        on_ac_power
+        POWER=$?
+        if [ $POWER -eq 1 ]; then
+            debug_echo "exit: system NOT on main power"
+            return 1
+        elif [ $POWER -ne 0 ]; then
+            debug_echo "power status ($POWER) undetermined, continuing"
+        fi
+        debug_echo "system is on main power."
+    fi
+    return 0
+}
+
 # sleep for a random interval of time (default 30min)
 # (some code taken from cron-apt, thanks)
 random_sleep()
@@ -28,6 +49,9 @@ random_sleep()
     sleep $TIME
 }
 
+# ensure we don't do this on battery
+check_power || exit 0
+
 # run daily job
 random_sleep
 exec /usr/lib/apt/apt.systemd.daily
diff --git a/debian/apt.systemd.daily b/debian/apt.systemd.daily
index 15024c8..d034d8c 100644
--- a/debian/apt.systemd.daily
+++ b/debian/apt.systemd.daily
@@ -290,27 +290,6 @@ debug_echo()
     fi
 }
 
-check_power()
-{
-    # laptop check, on_ac_power returns:
-    #       0 (true)    System is on main power
-    #       1 (false)   System is not on main power
-    #       255 (false) Power status could not be determined
-    # Desktop systems always return 255 it seems
-    if which on_ac_power >/dev/null 2>&1; then
-        on_ac_power
-        POWER=$?
-        if [ $POWER -eq 1 ]; then
-	    debug_echo "exit: system NOT on main power"
-	    return 1
-        elif [ $POWER -ne 0 ]; then
-	    debug_echo "power status ($POWER) undetermined, continuing"
-        fi
-        debug_echo "system is on main power."
-    fi
-    return 0
-}
-
 # ------------------------ main ----------------------------
 
 if test -r /var/lib/apt/extended_states; then
@@ -358,8 +337,6 @@ if [ "$VERBOSE" -ge 3 ]; then
     set -x
 fi
 
-check_power || exit 0
-
 # check if we can lock the cache and if the cache is clean
 if which apt-get >/dev/null 2>&1 && ! eval apt-get check $XAPTOPT $XSTDERR ; then
     debug_echo "error encountered in cron job with \"apt-get check\"."
@@ -410,9 +387,6 @@ fi
 # deal with BackupArchiveInterval
 do_cache_backup $BackupArchiveInterval
 
-# ensure we don't do this on battery
-check_power || exit 0
-
 # include default system language so that "apt-get update" will
 # fetch the right translated package descriptions
 if [ -r /etc/default/locale ]; then
-- 
2.8.1

>From ca76fdacfc1b2e0771bf8bc0901e9e631a49e43f Mon Sep 17 00:00:00 2001
From: Nicolas Le Cam <niko.lecam@gmail.com>
Date: Wed, 22 Jun 2016 20:55:18 +0200
Subject: Add a apt recommends powermgmt-base

debian/apt.systemd.daily is using on_ac_power utility
---
 debian/control | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/debian/control b/debian/control
index f5c5a75..5cc3d28 100644
--- a/debian/control
+++ b/debian/control
@@ -21,7 +21,7 @@ Architecture: any
 Depends: ${shlibs:Depends}, ${misc:Depends}, ${apt:keyring}, gpgv | gpgv2, adduser
 Replaces: manpages-pl (<< 20060617-3~), manpages-it (<< 2.80-4~), sun-java6-jdk (>> 0), sun-java5-jdk (>> 0), openjdk-6-jdk (<< 6b24-1.11-0ubuntu1~), bash-completion (<< 1:2.1-4.2+fakesync1), apt-utils (<< 1.3~exp2~)
 Breaks: manpages-pl (<< 20060617-3~), manpages-it (<< 2.80-4~), sun-java6-jdk (>> 0), sun-java5-jdk (>> 0), openjdk-6-jdk (<< 6b24-1.11-0ubuntu1~), apt-utils (<< 1.3~exp2~)
-Recommends: gnupg | gnupg2
+Recommends: gnupg | gnupg2, powermgmt-base
 Suggests: aptitude | synaptic | wajig, dpkg-dev (>= 1.17.2), apt-doc, python-apt
 Description: commandline package manager
  This package provides commandline tools for searching and
-- 
2.8.1


Reply to: