[yum-cvs] yum/config.py yum/__init__.py yum/misc.py

Seth Vidal skvidal at linux.duke.edu
Tue Oct 2 16:17:24 UTC 2007


 yum/__init__.py |    5 ++---
 yum/config.py   |    7 ++++---
 yum/misc.py     |   20 +++++++++++++++-----
 3 files changed, 21 insertions(+), 11 deletions(-)

New commits:
commit 41567c811ada35824864865a60623e706d1dc66b
Author: Seth Vidal <skvidal at fedoraproject.org>
Date:   Tue Oct 2 12:15:29 2007 -0400

    close bug: 296771 - handle case where running kernel is in a package we don't expect

diff --git a/yum/__init__.py b/yum/__init__.py
index f738e3e..f27b4bf 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -2212,6 +2212,7 @@ class YumBase(depsolve.Depsolve):
             return 
             
         toremove = []
+        (cur_kernel_v, cur_kernel_r) = misc.get_running_kernel_version_release(self.ts)
         for instpkg in self.conf.installonlypkgs:
             for m in self.tsInfo.getMembers():
                 if (m.name == instpkg or instpkg in m.po.provides_names) \
@@ -2219,11 +2220,9 @@ class YumBase(depsolve.Depsolve):
                     installed = self.rpmdb.searchNevra(name=m.name)
                     if len(installed) >= self.conf.installonly_limit - 1: # since we're adding one
                         numleft = len(installed) - self.conf.installonly_limit + 1
-                        (curv, curr) = misc.get_running_kernel_version_release()
-                        
                         installed.sort(packages.comparePoEVR)
                         for po in installed:
-                            if (po.version, po.release) == (curv, curr): 
+                            if (po.version, po.release) == (cur_kernel_v, cur_kernel_r): 
                                 # don't remove running
                                 continue
                             if numleft == 0:
diff --git a/yum/config.py b/yum/config.py
index a091c03..bf00852 100644
--- a/yum/config.py
+++ b/yum/config.py
@@ -495,13 +495,14 @@ class YumConf(StartupConf):
     proxy_password = Option()
     installonlypkgs = ListOption(['kernel', 'kernel-bigmem',
             'kernel-enterprise','kernel-smp', 'kernel-modules', 'kernel-debug',
-            'kernel-unsupported', 'kernel-source', 'kernel-devel'])            
+            'kernel-unsupported', 'kernel-source', 'kernel-devel', 'kernel-PAE',
+            'kernel-PAE-debug'])
     installonly_limit = IntOption(0)
     kernelpkgnames = ListOption(['kernel','kernel-smp', 'kernel-enterprise',
-            'kernel-bigmem', 'kernel-BOOT'])
+            'kernel-bigmem', 'kernel-BOOT', 'kernel-PAE', 'kernel-PAE-debug'])
     exactarchlist = ListOption(['kernel', 'kernel-smp', 'glibc',
             'kernel-hugemem', 'kernel-enterprise', 'kernel-bigmem',
-            'kernel-devel'])
+            'kernel-devel', 'kernel-PAE', 'kernel-PAE-debug'])
     tsflags = ListOption()
 
     assumeyes = BoolOption(False)
diff --git a/yum/misc.py b/yum/misc.py
index a16cb72..101d3bd 100644
--- a/yum/misc.py
+++ b/yum/misc.py
@@ -355,18 +355,28 @@ def bunzipFile(source,dest):
     destination.close()
     s_fn.close()
 
-def get_running_kernel_version_release():
+def get_running_kernel_version_release(ts):
     """This takes the output of uname and figures out the (version, release)
     tuple for the running kernel."""
     ver = os.uname()[2]
     # FIXME this should probably get passed this list from somewhere in config
     # possibly from the kernelpkgnames option
     for s in ("bigmem", "enterprise", "smp", "hugemem", "PAE", "rt",
-              "guest", "hypervisor", "xen0", "xenU", "xen", "debug"):
+              "guest", "hypervisor", "xen0", "xenU", "xen", "debug",
+              "PAE-debug"):
         if ver.endswith(s):
-            ver = ver.replace(s, "")
-    if ver.find("-") != -1:
-        (v, r) = ver.split("-", 1)
+            reduced = ver.replace(s, "")
+    if reduced.find("-") != -1:
+        (v, r) = reduced.split("-", 1)
         return (v, r)
+    
+    # we've got nothing so far, so... we glob for the file that MIGHT have
+    # this kernels and then look up the file in our rpmdb
+    fns = glob.glob('/boot/vmlinuz*%s*' % ver)
+    for fn in fns:
+        mi = ts.dbMatch('basenames', fn)
+        for h in mi:
+            return (h['version'], h['release'])
+    
     return (None, None)
  



More information about the Yum-cvs-commits mailing list