X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=source%2Fsteps%2FChainBootNode.py;h=5dec7395ef5ba8373f673cdf0d3f0f6d56338f01;hb=04f40909223edfa75aad8d7baa45925aee7ae812;hp=566e4e174b8a11e462394bf26ec57cd019d49eec;hpb=2a50c56c7227393d247fd403f43a71acc1aad5a9;p=bootmanager.git diff --git a/source/steps/ChainBootNode.py b/source/steps/ChainBootNode.py index 566e4e1..5dec739 100644 --- a/source/steps/ChainBootNode.py +++ b/source/steps/ChainBootNode.py @@ -109,20 +109,23 @@ def Run( vars, log ): # update configuration files log.write( "Updating configuration files.\n" ) - try: - cmd = "/etc/init.d/conf_files start --noscripts" + # avoid using conf_files initscript as we're moving to systemd on some platforms + + if (vars['ONE_PARTITION']!='1'): + try: + cmd = "/usr/bin/env python /usr/share/NodeManager/conf_files.py --noscripts" + utils.sysexec_chroot( SYSIMG_PATH, cmd, log ) + except IOError, e: + log.write("conf_files failed with \n %s" % e) + + # update node packages + log.write( "Running node update.\n" ) + if os.path.exists( SYSIMG_PATH + "/usr/bin/NodeUpdate.py" ): + cmd = "/usr/bin/NodeUpdate.py start noreboot" + else: + # for backwards compatibility + cmd = "/usr/local/planetlab/bin/NodeUpdate.py start noreboot" utils.sysexec_chroot( SYSIMG_PATH, cmd, log ) - except IOError, e: - log.write("conf_files failed with \n %s" % e) - - # update node packages - log.write( "Running node update.\n" ) - if os.path.exists( SYSIMG_PATH + "/usr/bin/NodeUpdate.py" ): - cmd = "/usr/bin/NodeUpdate.py start noreboot" - else: - # for backwards compatibility - cmd = "/usr/local/planetlab/bin/NodeUpdate.py start noreboot" - utils.sysexec_chroot( SYSIMG_PATH, cmd, log ) # Re-generate initrd right before kexec call # this is not required anymore on recent depls. @@ -158,9 +161,32 @@ def Run( vars, log ): utils.sysexec( "cp %s/boot/initrd-boot%s /tmp/initrd" % (SYSIMG_PATH,option), log ) else: # Use chroot to call rpm, b/c the bootimage&nodeimage rpm-versions may not work together - kversion = os.popen("chroot %s rpm -qa kernel | tail -1 | cut -c 8-" % SYSIMG_PATH).read().rstrip() + try: + kversion = os.popen("chroot %s rpm -qa kernel | tail -1 | cut -c 8-" % SYSIMG_PATH).read().rstrip() + 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;}'").read().rstrip() + utils.sysexec( "cp %s/boot/vmlinuz-%s /tmp/kernel" % (SYSIMG_PATH,kversion), log ) - utils.sysexec( "cp %s/boot/initramfs-%s.img /tmp/initrd" % (SYSIMG_PATH,kversion), log ) + candidates=[] + # f16/18: expect initramfs image here + candidates.append ("/boot/initramfs-%s.img"%(kversion)) + # f20: uses a uid of some kind, e.g. /boot/543f88c129de443baaa65800cf3927ce//initrd + candidates.append ("/boot/*/%s/initrd"%(kversion)) + # Ubuntu: + candidates.append ("/boot/initrd.img%s"%(kversion)) + def find_file_in_sysimg (candidates): + import glob + for pattern in candidates: + matches=glob.glob(SYSIMG_PATH+pattern) + log.write("locating initrd: found %d matches in %s\n"%(len(matches),pattern)) + if matches: return matches[0] + initrd=find_file_in_sysimg(candidates) + if initrd: + utils.sysexec( "cp %s /tmp/initrd" % initrd, log ) + else: + raise Exception,"Unable to locate initrd - bailing out" BootAPI.save(vars)