Browse Source

Merge remote-tracking branch 'origin/pr/176'

* origin/pr/176:
  Fix downloading dom0 updates on Debian
  dnf: clear updates-available flag when dnf update yields no updates
Marek Marczykowski-Górecki 4 years ago
parent
commit
b1f4c97087
2 changed files with 21 additions and 1 deletions
  1. 16 0
      misc/dnf-qubes-hooks.py
  2. 5 1
      misc/qubes-download-dom0-updates.sh

+ 16 - 0
misc/dnf-qubes-hooks.py

@@ -36,6 +36,22 @@ class QubesHooks(dnf.Plugin):
         self.base = base
         self.log = logging.getLogger('dnf')
 
+    def resolved(self):
+        # in case of no action to do, transaction() hook won't be called;
+        # report updates availability here - especially when everything is up
+        # to date - to clear updates-available flag
+        if not self.base.transaction:
+            query = self.base.sack.query()
+            query = query.upgrades()
+            updates = set(query.run())
+            subprocess.call([
+                '/usr/lib/qubes/qrexec-client-vm',
+                'dom0',
+                'qubes.NotifyUpdates',
+                '/bin/echo',
+                str(len(updates))
+            ])
+
     def transaction(self):
         if LooseVersion(dnf.const.VERSION) < '2.0.0':
             config = self.read_config(self.base.conf, PLUGIN_CONF)

+ 5 - 1
misc/qubes-download-dom0-updates.sh

@@ -116,6 +116,10 @@ YUM_COMMAND="fakeroot $YUM $YUM_ACTION -y --downloadonly"
 # check for --downloadonly option - if not supported (Debian), fallback to
 # yumdownloader
 if ! $YUM --help | grep -q downloadonly; then
+    # setup environment for yumdownloader to be happy
+    if [ ! -e "$DOM0_UPDATES_DIR/etc/yum.conf" ]; then
+        ln -nsf dnf/dnf.conf "$DOM0_UPDATES_DIR/etc/yum.conf"
+    fi
     if [ "$YUM_ACTION" = "install" ]; then
         YUM_COMMAND="yumdownloader --destdir=$DOM0_UPDATES_DIR/packages --resolve"
     elif [ "$YUM_ACTION" = "upgrade" ]; then
@@ -162,7 +166,7 @@ else
     $YUM_COMMAND $OPTS "${PKGLIST[@]}"
 fi
 
-find "$DOM0_UPDATES_DIR/var/cache" -name '*.rpm' -print0 |\
+find "$DOM0_UPDATES_DIR/var/cache" -name '*.rpm' -print0 2>/dev/null |\
     xargs -0 -r ln -f -t "$DOM0_UPDATES_DIR/packages/"
 
 if ls "$DOM0_UPDATES_DIR"/packages/*.rpm > /dev/null 2>&1; then