[PATCH] Move _resetRpmDb into iutil and add another upgrade arch check (#498280).

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

 



---
 iutil.py      |    7 +++++++
 packages.py   |    8 +-------
 upgrade.py    |    2 +-
 yuminstall.py |   24 ++++++++++++------------
 4 files changed, 21 insertions(+), 20 deletions(-)

diff --git a/iutil.py b/iutil.py
index af67c5f..eb82b72 100644
--- a/iutil.py
+++ b/iutil.py
@@ -20,6 +20,7 @@
 # Author(s): Erik Troan <ewt@xxxxxxxxxx>
 #
 
+import glob
 import os, string, stat, sys
 import signal
 import os.path
@@ -914,3 +915,9 @@ def reIPL(anaconda, loader_pid):
     # or a two-item list with errorMessage and rebootInstr (=> shutdown)
     return message
 
+def resetRpmDb(rootdir):
+    for rpmfile in glob.glob("%s/var/lib/rpm/__db.*" % rootdir):
+        try:
+            os.unlink(rpmfile)
+        except Exception, e:
+            log.debug("error %s removing file: %s" %(e,rpmfile))
diff --git a/packages.py b/packages.py
index 275c7c7..739cc90 100644
--- a/packages.py
+++ b/packages.py
@@ -307,13 +307,7 @@ def rpmKernelVersionList(rootPath = "/"):
 
     versions = []
 
-    # FIXME: and make sure that the rpmdb doesn't have stale locks :/
-    for rpmfile in glob.glob("%s/var/lib/rpm/__db.*" % rootPath):
-        try:
-            os.unlink(rpmfile)
-        except:
-            log.debug("failed to unlink %s" % rpmfile)
-
+    iutil.resetRpmDb(rootPath)
     ts = rpm.TransactionSet(rootPath)
 
     mi = ts.dbMatch('provides', 'kernel')
diff --git a/upgrade.py b/upgrade.py
index c00c9c6..e5844e8 100644
--- a/upgrade.py
+++ b/upgrade.py
@@ -50,7 +50,7 @@ def guessGuestArch(rootdir):
     """root path -> None|"architecture"
     Guess the architecture of installed system
     """
-
+    iutil.resetRpmDb(rootdir)
     ts = rpm.ts(rootdir)
 
     packages = ["filesystem", "initscripts"]
diff --git a/yuminstall.py b/yuminstall.py
index b16d7c6..0e7a4da 100644
--- a/yuminstall.py
+++ b/yuminstall.py
@@ -1004,7 +1004,7 @@ reposdir=/etc/anaconda.repos.d,/tmp/updates/anaconda.repos.d,/tmp/product/anacon
 
         # clean up rpmdb locks so that kickstart %post scripts aren't
         # unhappy (#496961)
-        self._resetRpmDb(anaconda.rootPath)
+        iutil.resetRpmDb(anaconda.rootPath)
 
     def doBackendSetup(self, anaconda):
         if anaconda.dir == DISPATCH_BACK:
@@ -1012,7 +1012,7 @@ reposdir=/etc/anaconda.repos.d,/tmp/updates/anaconda.repos.d,/tmp/product/anacon
 
         if anaconda.id.getUpgrade():
            # FIXME: make sure that the rpmdb doesn't have stale locks :/
-           self._resetRpmDb(anaconda.rootPath)
+           iutil.resetRpmDb(anaconda.rootPath)
 
         iutil.writeRpmPlatform()
         self.ayum = AnacondaYum(anaconda)
@@ -1480,13 +1480,6 @@ reposdir=/etc/anaconda.repos.d,/tmp/updates/anaconda.repos.d,/tmp/product/anacon
         self._checkUpgradeVersion(anaconda)
         self._checkUpgradeArch(anaconda)
 
-    def _resetRpmDb(self, rootPath):
-        for rpmfile in glob.glob("%s/var/lib/rpm/__db.*" % rootPath):
-            try:
-                os.unlink(rpmfile)
-            except Exception, e:
-                log.debug("error %s removing file: %s" %(e,rpmfile))
-
     def _checkUpgradeVersion(self, anaconda):
         # Figure out current version for upgrade nag and for determining weird
         # upgrade cases
@@ -1514,10 +1507,17 @@ reposdir=/etc/anaconda.repos.d,/tmp/updates/anaconda.repos.d,/tmp/product/anacon
                                       "process?") %(productName,),
                                     type = "yesno")
             if rc == 0:
-                self._resetRpmDb(anaconda.rootPath)
+                iutil.resetRpmDb(anaconda.rootPath)
                 sys.exit(0)
 
     def _checkUpgradeArch(self, anaconda):
+        def compareArch(a, b):
+            import re
+            if re.match("i.86", a) and re.match("i.86", b):
+                return True
+            else:
+                return a == b
+
         # get the arch of the initscripts package
         try:
             pkgs = self.ayum.pkgSack.returnNewestByName('initscripts')
@@ -1534,7 +1534,7 @@ reposdir=/etc/anaconda.repos.d,/tmp/updates/anaconda.repos.d,/tmp/product/anacon
         log.info("initscripts is arch: %s" %(myarch,))
         for po in self.ayum.rpmdb.getProvides('initscripts'):
             log.info("po.arch is arch: %s" %(po.arch,))
-            if po.arch != myarch:
+            if not compareArch(po.arch, myarch):
                 rc = anaconda.intf.messageWindow(_("Warning"),
                                         _("The arch of the release of %s you "
                                           "are upgrading to appears to be %s "
@@ -1545,7 +1545,7 @@ reposdir=/etc/anaconda.repos.d,/tmp/updates/anaconda.repos.d,/tmp/product/anacon
                                         %(productName, myarch, po.arch),
                                         type="yesno")
                 if rc == 0:
-                    self._resetRpmDb(anaconda.rootPath)
+                    iutil.resetRpmDb(anaconda.rootPath)
                     sys.exit(0)
                 else:
                     log.warning("upgrade between possibly incompatible "
-- 
1.6.1.3

_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/anaconda-devel-list

[Index of Archives]     [Kickstart]     [Fedora Users]     [Fedora Legacy List]     [Fedora Maintainers]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]
  Powered by Linux