[PATCH 1/2] Add rescue kernels to the bootloader install list. (#1036349)
David Shea
dshea at redhat.com
Mon Mar 10 20:58:44 UTC 2014
This adds a new property, rescueKernelList, to Payload.
kernelVersionList is unchanged, since most other places that use it
excluded rescue kernels for a reason.
Every bootloader but grub2 generates a config based on the list of
kernels provided by the Payload object, so every bootloader but grub2
was skipping the rescue kernels. This remedies that.
---
pyanaconda/bootloader.py | 2 +-
pyanaconda/packaging/__init__.py | 48 ++++++++++++++++++++++++++--------------
2 files changed, 32 insertions(+), 18 deletions(-)
diff --git a/pyanaconda/bootloader.py b/pyanaconda/bootloader.py
index 0ea7984..8386b57 100644
--- a/pyanaconda/bootloader.py
+++ b/pyanaconda/bootloader.py
@@ -2343,7 +2343,7 @@ def writeBootLoader(storage, payload, instClass, ksdata):
log.info("bootloader stage2 target device is %s", stage2_device.name)
# get a list of installed kernel packages
- kernel_versions = payload.kernelVersionList
+ kernel_versions = payload.kernelVersionList + payload.rescueKernelList
if not kernel_versions:
log.warning("no kernel was installed -- bootloader config unchanged")
return
diff --git a/pyanaconda/packaging/__init__.py b/pyanaconda/packaging/__init__.py
index c85bbd1..7058672 100644
--- a/pyanaconda/packaging/__init__.py
+++ b/pyanaconda/packaging/__init__.py
@@ -113,6 +113,7 @@ class Payload(object):
self.data = data
self.storage = None
self._kernelVersionList = []
+ self._rescueVersionList = []
self._createdInitrds = False
self.txID = None
@@ -318,6 +319,28 @@ class Payload(object):
self.data.packages.excludedList.append(pkgid)
+ def _updateKernelVersionList(self):
+ import glob
+ try:
+ import yum
+ except ImportError:
+ cmpfunc = cmp
+ else:
+ cmpfunc = yum.rpmUtils.miscutils.compareVerOnly
+
+ files = glob.glob(ROOT_PATH + "/boot/vmlinuz-*")
+ files.extend(glob.glob(ROOT_PATH + "/boot/efi/EFI/redhat/vmlinuz-*"))
+
+ versions = [f.split("/")[-1][8:] for f in files if os.path.isfile(f)]
+ versions.sort(cmp=cmpfunc)
+ log.debug("kernel versions: %s", versions)
+
+ # Store regular and rescue kernels separately
+ self._kernelVersionList = (
+ [v for v in versions if "-rescue-" not in v],
+ [v for v in versions if "-rescue" in v]
+ )
+
###
### METHODS FOR QUERYING STATE
###
@@ -329,25 +352,16 @@ class Payload(object):
@property
def kernelVersionList(self):
if not self._kernelVersionList:
- import glob
- try:
- import yum
- except ImportError:
- cmpfunc = cmp
- else:
- cmpfunc = yum.rpmUtils.miscutils.compareVerOnly
+ self._updateKernelVersionList()
- files = glob.glob(ROOT_PATH + "/boot/vmlinuz-*")
- files.extend(glob.glob(ROOT_PATH + "/boot/efi/EFI/redhat/vmlinuz-*"))
- # strip off everything up to and including vmlinuz- to get versions
- # Ignore rescue kernels
- versions = [f.split("/")[-1][8:] for f in files if os.path.isfile(f) \
- and "-rescue-" not in f]
- versions.sort(cmp=cmpfunc)
- log.debug("kernel versions: %s", versions)
- self._kernelVersionList = versions
+ return self._kernelVersionList[0]
- return self._kernelVersionList
+ @property
+ def rescueKernelList(self):
+ if not self._kernelVersionList:
+ self._updateKernelVersionList()
+
+ return self._kernelVersionList[1]
##
## METHODS FOR TREE VERIFICATION
--
1.8.5.3
More information about the anaconda-patches
mailing list