raise BootManagerException, "Interrupted by user"
returncode= prog.wait()
+ # revert http://git.planet-lab.org/?p=bootmanager.git;a=commitdiff;h=cca3a2cd2096c0235dddb5982b1f05c8d4c7f916
+ # as 256 returned by Python
+ #
+ ## cat test.py
+ #import popen2
+ #
+ #cmd = "false"
+ #prog = popen2.Popen4( cmd, 0 )
+ #returncode = prog.wait()
+ #print returncode
+ #
+ ## python test.py
+ # 256
if returncode != 0:
raise BootManagerException, "Running %s failed (rc=%d)" % (cmd,returncode)
return 1
+def sysexec_chroot( path, cmd, log= None ):
+ """
+ same as sysexec, but inside a chroot
+ """
+ preload = ""
+ release = os.uname()[2]
+ # 2.6.12 kernels need this
+ if release[:5] == "2.6.1":
+ library = "%s/lib/libc-opendir-hack.so" % path
+ if not os.path.exists(library):
+ shutil.copy("./libc-opendir-hack.so", library)
+ preload = "/bin/env LD_PRELOAD=/lib/libc-opendir-hack.so"
+ sysexec("chroot %s %s %s" % (path, preload, cmd), log)
+
+
+def sysexec_chroot_noerr( path, cmd, log= None ):
+ """
+ same as sysexec_chroot, but capture boot manager exceptions
+ """
+ try:
+ rc= 0
+ rc= syexec_chroot( cmd, log )
+ except BootManagerException, e:
+ pass
+
+ return rc
+
+
def sysexec_noerr( cmd, log= None ):
"""
same as sysexec, but capture boot manager exceptions