X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=source%2Fsteps%2FChainBootNode.py;h=1fa960933ad3e296ee24a616cd7a0a209b6e766c;hb=75a5bf6f50a6ddccda6afcc9f3dc610f1b25d9c7;hp=8eac1d17b0148e0abf103cf1fb5d0aee99946d52;hpb=f52080486db907ba6557d1047730c638c4562790;p=bootmanager.git diff --git a/source/steps/ChainBootNode.py b/source/steps/ChainBootNode.py index 8eac1d1..1fa9609 100644 --- a/source/steps/ChainBootNode.py +++ b/source/steps/ChainBootNode.py @@ -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//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: