[PATCH] Use the rpm database to find packages installed by package payloads
David Shea
dshea at redhat.com
Fri Jan 23 15:41:41 UTC 2015
The previous PackagePayload implementations of kernelVersionList had a
problem in that they could miss kernels installed by packages not named
"kernel" (kernel-core, kernel-PAE, kernel-debug) and in that there may
be a difference between the package EVR and the version derived from
s/vmlinuz-// (because there's a +PAE or +debug in it or something).
---
pyanaconda/packaging/__init__.py | 19 +++++++++++++++++++
pyanaconda/packaging/dnfpayload.py | 7 -------
pyanaconda/packaging/yumpayload.py | 8 --------
3 files changed, 19 insertions(+), 15 deletions(-)
diff --git a/pyanaconda/packaging/__init__.py b/pyanaconda/packaging/__init__.py
index 2438b6f..2129347 100644
--- a/pyanaconda/packaging/__init__.py
+++ b/pyanaconda/packaging/__init__.py
@@ -35,6 +35,7 @@ import ConfigParser
import shutil
import time
from glob import glob
+from fnmatch import fnmatch
import threading
import re
@@ -696,6 +697,24 @@ class PackagePayload(Payload):
return kernels
@property
+ def kernelVersionList(self):
+ # Find all installed rpms that provide 'kernel'
+ # Unlike the rpm imports in Payload, this one is mandatory
+ import rpm
+
+ files = []
+
+ ts = rpm.TransactionSet(iutil.getSysroot())
+ mi = ts.dbMatch('providename', 'kernel')
+ for hdr in mi:
+ # Find all /boot/vmlinuz- files and strip off vmlinuz-
+ files.extend((f.split("/")[-1][8:] for f in hdr.filenames
+ if fnmatch(f, "/boot/vmlinuz-*") or
+ fnmatch(f, "/boot/efi/EFI/%s/vmlinuz-*" % self.instclass.efi_dir)))
+
+ return sorted(files, cmp=versionCmp)
+
+ @property
def rpmMacros(self):
"""A list of (name, value) pairs to define as macros in the rpm transaction."""
return self._rpm_macros
diff --git a/pyanaconda/packaging/dnfpayload.py b/pyanaconda/packaging/dnfpayload.py
index 6cea430..0fd3ac3 100644
--- a/pyanaconda/packaging/dnfpayload.py
+++ b/pyanaconda/packaging/dnfpayload.py
@@ -820,10 +820,3 @@ class DNFPayload(packaging.PackagePayload):
log.error(e)
super(DNFPayload, self).postInstall()
-
- @property
- def kernelVersionList(self):
- return ('%s-%s.%s' % (p.version, p.release, p.arch) for p in
- sorted(self._base.sack.query().filter(name='kernel'),
- cmp=dnf.rpm.miscutils.compareEVR,
- key=lambda p: (p.epoch, p.version, p.release)))
diff --git a/pyanaconda/packaging/yumpayload.py b/pyanaconda/packaging/yumpayload.py
index 73caa49..742edad 100644
--- a/pyanaconda/packaging/yumpayload.py
+++ b/pyanaconda/packaging/yumpayload.py
@@ -988,14 +988,6 @@ reposdir=%s
else:
return environment.groups
- @property
- def kernelVersionList(self):
- with _yum_lock:
- return ("%s-%s.%s" % (p.version, p.release, p.arch) for p in
- sorted(self._yum.pkgSack.searchNames(['kernel']),
- cmp=yum.rpmUtils.miscutils.compareEVR,
- key=lambda p: (p.epoch, p.version, p.release)))
-
###
### METHODS FOR WORKING WITH GROUPS
###
--
2.1.0
More information about the anaconda-patches
mailing list