Douglas Schilling Landgraf has uploaded a new change for review. Change subject: install.py: Handle multiple kernels for rebuild initramfs ......................................................................
install.py: Handle multiple kernels for rebuild initramfs Currently, if users try to add external kernel modules using edit-node it will fail as the install.py cannot handle such situation as it only expect one kernel in the image. To avoid such issue, this patch adds a logic for such scenario and detects the higher kernel version available. Change-Id: I7787a9e3e6bc0b6c5ca7a257f8668a599357cd79 Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1330632 Signed-off-by: Douglas Schilling Landgraf <[email protected]> (cherry picked from commit 63caa7e3463654b63eda6302276fff3c459d9bde) --- M src/ovirtnode/install.py 1 file changed, 40 insertions(+), 2 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-node refs/changes/11/58711/1 diff --git a/src/ovirtnode/install.py b/src/ovirtnode/install.py index f92912b..1612173 100755 --- a/src/ovirtnode/install.py +++ b/src/ovirtnode/install.py @@ -30,7 +30,10 @@ import logging import tempfile OVIRT_VARS = _functions.parse_defaults() + +from itertools import combinations from ovirtnode.storage import Storage +from rpmUtils.miscutils import compareVerOnly logger = logging.getLogger(__name__) @@ -57,6 +60,38 @@ return "EFI/redhat" else: return "EFI/redhat" + + def check_higher_kernel(self, path=None): + """ + Check through kernel modules dir, the higher version + available + + path -- The path to kernel modules dir + """ + higher_kernel = None + + if path is None: + modules_dir = "/lib/modules" + else: + modules_dir = "{0}/lib/modules".format(path) + + modules_dir = os.listdir(modules_dir) + for km1, km2 in combinations(modules_dir, 2): + ret = compareVerOnly(km1, km2) + + # Extra validation via rpmUtils.miscutils to + # check if new value in km1 or in km2 is higher than + # the current hold in higher_kernel + if ret == 1: + if higher_kernel is None or \ + compareVerOnly(km1, higher_kernel) == 1: + higher_kernel = km1 + elif ret == -1: + if higher_kernel is None or \ + compareVerOnly(km2, higher_kernel) == 1: + higher_kernel = km2 + + return higher_kernel def kernel_image_copy(self): if (not _functions.system("cp -p %s/vmlinuz0 %s" % \ @@ -747,8 +782,11 @@ if len(upd_kver.splitlines()) != 1: # It would be very unusual to see more than one kver directory - # in /lib/modules, because our images just contain one kernel - raise RuntimeError("Found more than one kernel version") + # in /lib/modules but might happen when using edit-node. + # Check via check_higher_kernel() the higher version available + upd_kver = self.check_higher_kernel(updfs) + if upd_kver is None: + raise RuntimeError("Unable to find the kernel version") # Update initramfs to pickup multipath wwids # Let /boot point to the filesystem on the update candidate partition -- To view, visit https://gerrit.ovirt.org/58711 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I7787a9e3e6bc0b6c5ca7a257f8668a599357cd79 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-node Gerrit-Branch: ovirt-3.6 Gerrit-Owner: Douglas Schilling Landgraf <[email protected]> _______________________________________________ node-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/node-patches
