]> git.apps.os.sepia.ceph.com Git - teuthology.git/commitdiff
kernel: maybe_generate_initrd_rpm()
authorIlya Dryomov <idryomov@redhat.com>
Wed, 10 Dec 2014 06:10:12 +0000 (09:10 +0300)
committerIlya Dryomov <idryomov@redhat.com>
Mon, 15 Dec 2014 12:31:16 +0000 (15:31 +0300)
gitbuilder and local packages may not have initrd hooks in them,
depending on how old is the kernel - an appropriate %post section was
added to upstream spec only in 3.12.

Signed-off-by: Ilya Dryomov <idryomov@redhat.com>
teuthology/task/kernel.py

index 871534381c1b2bc7e9c4a195c6ab7734885d127c..96bafbc62942dd04658e0edd5cca7da0d6f7d6db 100644 (file)
@@ -609,6 +609,39 @@ def need_to_install_distro(ctx, role):
     log.info('Not newest distro kernel. Curent: {cur} Expected: {new}'.format(cur=current, new=newest))
     return True
 
+def maybe_generate_initrd_rpm(remote, path, version):
+    """
+    Generate initrd with mkinitrd if the hooks that should make it
+    happen on its own aren't there.
+
+    :param path: rpm package path
+    :param version: kernel version to generate initrd for
+                    e.g. 3.18.0-rc6-ceph-00562-g79a9fa5
+    """
+    proc = remote.run(
+        args=[
+            'rpm',
+            '--scripts',
+            '-qp',
+            path,
+        ],
+        stdout=StringIO())
+    out = proc.stdout.getvalue()
+    if 'bin/installkernel' in out or 'bin/kernel-install' in out:
+        return
+
+    log.info("No installkernel or kernel-install hook in %s, "
+             "will generate initrd for %s", path, version)
+    remote.run(
+        args=[
+            'sudo',
+            'mkinitrd',
+            '--allow-missing',
+            '-f', # overwrite existing initrd
+            '/boot/initramfs-' + version + '.img',
+            version,
+        ])
+
 def install_kernel(remote, path=None):
     """
     A bit of misnomer perhaps - the actual kernel package is installed
@@ -625,6 +658,10 @@ def install_kernel(remote, path=None):
     if system_type == 'rpm':
         if path:
             version = get_image_version(remote, path)
+            # This is either a gitbuilder or a local package and both of these
+            # could have been built with upstream rpm targets with specs that
+            # don't have a %post section at all, which means no initrd.
+            maybe_generate_initrd_rpm(remote, path, version)
         else:
             version = get_latest_image_version_rpm(remote)
         update_grub_rpm(remote, version)