bugfixes for the location of kernel and initrd as observed on recent f23
[bootmanager.git] / source / steps / ChainBootNode.py
index 8eac1d1..1fa9609 100644 (file)
@@ -78,7 +78,7 @@ def Run(vars, log):
         # simply creating an instance of this class and listing the system
         # block devices will make them show up so vgscan can find the planetlab
         # volume group
-        systeminfo.get_block_device_list(vars, log)
+        systeminfo.get_block_devices_dict(vars, log)
         
         utils.sysexec("vgscan", log)
         utils.sysexec("vgchange -ay planetlab", log)
@@ -94,7 +94,8 @@ def Run(vars, log):
 
         ROOT_MOUNTED = 1
         vars['ROOT_MOUNTED'] = 1
-        
+
+    utils.display_disks_status(PARTITIONS, "In ChainBootNode", log)
 
     # write out the session value /etc/planetlab/session
     try:
@@ -167,17 +168,24 @@ def Run(vars, log):
             major_version = int(kversion[0]) # Check if the string looks like a kernel version
         except:
             # Try a different method for non-rpm-based distributions
-            kversion = os.popen("ls -lrt {}/lib/modules | tail -1 | awk '{print $9;}'"\
+            kversion = os.popen("ls -lrt {}/lib/modules | tail -1 | awk '{{print $9;}}'"\
                                 .format(SYSIMG_PATH)).read().rstrip()
 
-        utils.sysexec("cp {}/boot/vmlinuz-{} /tmp/kernel".format(SYSIMG_PATH, kversion), log)
-        candidates = []
+        # kernel and initrd come in various locations depending on the distro
+
+        kernel_candidates = []
+        kernel_candidates.append("/boot/vmlinux-{}*".format(kversion))
+        # on f23 starting dec. 2015 - what a twisted naming scheme
+        kernel_candidates.append("/boot/*/{}*/initrd".format(kversion))
+
+        initrd_candidates = []
         # f16/18: expect initramfs image here
-        candidates.append ("/boot/initramfs-{}.img".format(kversion))
+        initrd_candidates.append ("/boot/initramfs-{}.img".format(kversion))
         # f20: uses a uid of some kind, e.g. /boot/543f88c129de443baaa65800cf3927ce/<kversion>/initrd
-        candidates.append ("/boot/*/{}/initrd".format(kversion))
+        initrd_candidates.append ("/boot/*/{}/initrd".format(kversion))
         # Ubuntu:
-        candidates.append ("/boot/initrd.img-{}".format(kversion))
+        initrd_candidates.append ("/boot/initrd.img-{}".format(kversion))
+
         def find_file_in_sysimg (candidates):
             import glob
             for pattern in candidates:
@@ -185,7 +193,15 @@ def Run(vars, log):
                 log.write("locating initrd: found {} matches in {}\n".format(len(matches), pattern))
                 if matches:
                     return matches[0]
-        initrd = find_file_in_sysimg(candidates)
+
+        kernel = find_file_in_sysimg(kernel_candidates)
+        if kernel:
+            utils.sysexec("cp {} /tmp/kernel".format(kernel), log)
+        else:
+            raise Exception("Unable to locate kernel - bailing out")
+
+
+        initrd = find_file_in_sysimg(initrd_candidates)
         if initrd:
             utils.sysexec("cp {} /tmp/initrd".format(initrd), log)
         else:
@@ -197,10 +213,10 @@ def Run(vars, log):
     
     if (vars['ONE_PARTITION'] != '1'):
         utils.sysexec("umount {}/vservers".format(SYSIMG_PATH), log)
-    utils.sysexec("umount {}s/proc".format(SYSIMG_PATH), log)
-    utils.sysexec_noerr("umount {}s/dev".format(SYSIMG_PATH), log)
-    utils.sysexec_noerr("umount {}s/sys".format(SYSIMG_PATH), log)
-    utils.sysexec("umount {}s".format(SYSIMG_PATH), log)
+    utils.sysexec("umount {}/proc".format(SYSIMG_PATH), log)
+    utils.sysexec_noerr("umount {}/dev".format(SYSIMG_PATH), log)
+    utils.sysexec_noerr("umount {}/sys".format(SYSIMG_PATH), log)
+    utils.sysexec("umount {}".format(SYSIMG_PATH), log)
     utils.sysexec("vgchange -an", log)
 
     ROOT_MOUNTED = 0
@@ -296,7 +312,7 @@ def Run(vars, log):
         log.write("Couldn't read /proc/modules, continuing.\n")
 
 
-    kargs = "root={} ramdisk_size=8192".format(PARTITIONS["mapper-root"])
+    kargs = "root={} ramdisk_size=8192".format(PARTITIONS["root"])
     if NODE_MODEL_OPTIONS & ModelOptions.SMP:
         kargs = kargs + " " + "acpi=off"
     try:
@@ -312,7 +328,7 @@ def Run(vars, log):
         pass 
 
     utils.sysexec_noerr('hwclock --systohc --utc ', log)
-    utils.breakpoint ("Before kexec");
+#    utils.breakpoint("Before kexec");
     try:
         utils.sysexec('kexec --force --initrd=/tmp/initrd --append="{}" /tmp/kernel'.format(kargs), log)
     except BootManagerException as e: