import subprocess
from mic import msger
+from mic.conf import configmgr
from mic.utils import misc, errors, runner, fs_related
chroot_lockfd = -1
os.chroot(chrootdir)
os.chdir("/")
+ if configmgr.chroot['saveto']:
+ savefs = True
+ saveto = configmgr.chroot['saveto']
+ wrnmsg = "Can't save chroot fs for dir %s exists" % saveto
+ if saveto == chrootdir:
+ savefs = False
+ wrnmsg = "Dir %s is being used to chroot" % saveto
+ elif os.path.exists(saveto):
+ if msger.ask("Dir %s already exists, cleanup and continue?" %
+ saveto):
+ shutil.rmtree(saveto, ignore_errors = True)
+ savefs = True
+ else:
+ savefs = False
+
+ if savefs:
+ msger.info("Saving image to directory %s" % saveto)
+ runner.quiet("cp -af %s %s" % (chrootdir, saveto))
+ devs = ['dev/fd',
+ 'dev/stdin',
+ 'dev/stdout',
+ 'dev/stderr',
+ 'etc/mtab']
+ ignlst = [os.path.join(saveto, x) for x in devs]
+ map(os.unlink, filter(os.path.exists, ignlst))
+ else:
+ msger.warning(wrnmsg)
+
dev_null = os.open("/dev/null", os.O_WRONLY)
files_to_check = ["/bin/bash", "/sbin/init"]
destimager.do_pack(base_on)
@cmdln.alias("ch")
+ @cmdln.option('-s', '--saveto',
+ action='store', dest='saveto', default=None,
+ help="Save the unpacked image to specified dir")
def do_chroot(self, subcmd, opts, *args):
"""${cmd_name}: chroot into an image
self._root_confirm()
+ configmgr.chroot['saveto'] = opts.saveto
+
imagetype = misc.get_image_type(targetimage)
if imagetype in ("ext3fsimg", "ext4fsimg", "btrfsimg"):
imagetype = "loop"