+def sysexec_chroot(path, cmd, log=None, shell=False):
+ """
+ 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 = "{}/lib/libc-opendir-hack.so".format(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 {} {} {}".format(path, preload, cmd), log, shell=shell)
+
+
+def sysexec_chroot_noerr(path, cmd, log=None, shell=False):
+ """
+ same as sysexec_chroot, but capture boot manager exceptions
+ """
+ try:
+ rc = 0
+ rc = sysexec_chroot(cmd, log, shell=shell)
+ except BootManagerException as e:
+ pass
+
+ return rc