Fix typo.
[bootmanager.git] / source / utils.py
index 407216b..736dd22 100644 (file)
@@ -142,6 +142,19 @@ def sysexec( cmd, log= None ):
             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)
 
@@ -149,6 +162,34 @@ def sysexec( cmd, log= None ):
     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