def do_chroot(cls, target): os_image = cls.do_unpack(target) os_image_dir = os.path.dirname(os_image) # unpack image to target dir imgsize = misc.get_file_size(os_image) * 1024L * 1024L imgtype = misc.get_image_type(os_image) if imgtype == "btrfsimg": fstype = "btrfs" myDiskMount = fs_related.BtrfsDiskMount elif imgtype in ("ext3fsimg", "ext4fsimg"): fstype = imgtype[:4] myDiskMount = fs_related.ExtDiskMount else: raise errors.CreatorError("Unsupported filesystem type: %s" % fstype) extmnt = misc.mkdtemp() extloop = myDiskMount(fs_related.SparseLoopbackDisk(os_image, imgsize), extmnt, fstype, 4096, "%s label" % fstype) try: extloop.mount() except errors.MountError: extloop.cleanup() shutil.rmtree(extmnt, ignore_errors=True) raise try: chroot.chroot(extmnt, None, "/bin/env HOME=/root /bin/bash") except: raise errors.CreatorError("Failed to chroot to %s." % target) finally: chroot.cleanup_after_chroot("img", extloop, os_image_dir, extmnt)
def do_chroot(cls, target):#chroot.py parse opts&args img = target imgsize = misc.get_file_size(img) * 1024L * 1024L imgtype = misc.get_image_type(img) if imgtype == "btrfsimg": fstype = "btrfs" myDiskMount = fs_related.BtrfsDiskMount elif imgtype in ("ext3fsimg", "ext4fsimg"): fstype = imgtype[:4] myDiskMount = fs_related.ExtDiskMount else: raise errors.CreatorError("Unsupported filesystem type: %s" % imgtype) extmnt = misc.mkdtemp() extloop = myDiskMount(fs_related.SparseLoopbackDisk(img, imgsize), extmnt, fstype, 4096, "%s label" % fstype) try: extloop.mount() except errors.MountError: extloop.cleanup() shutil.rmtree(extmnt, ignore_errors = True) raise try: chroot.chroot(extmnt, None, "/bin/env HOME=/root /bin/bash") except: raise errors.CreatorError("Failed to chroot to %s." %img) finally: chroot.cleanup_after_chroot("img", extloop, None, extmnt)
def main(parser, args, argv): """mic choot entry point.""" #args is argparser namespace, argv is the input cmd line if args is None: raise errors.Usage("Invalid arguments") targetimage = args.imagefile if not os.path.exists(targetimage): raise errors.CreatorError("Cannot find the image: %s" % targetimage) _root_confirm() configmgr.chroot['saveto'] = args.saveto imagetype = misc.get_image_type(targetimage) if imagetype in ("ext3fsimg", "ext4fsimg", "btrfsimg"): imagetype = "loop" chrootclass = None for pname, pcls in pluginmgr.get_plugins('imager').iteritems(): if pname == imagetype and hasattr(pcls, "do_chroot"): chrootclass = pcls break if not chrootclass: raise errors.CreatorError("Cannot support image type: %s" \ % imagetype) chrootclass.do_chroot(targetimage, args.cmd)
def do_pack(cls, base_on): import subprocess def __mkinitrd(instance): kernelver = list(instance._get_kernel_versions().values())[0][0] args = [ "/usr/libexec/mkliveinitrd", "/boot/initrd-%s.img" % kernelver, "%s" % kernelver ] try: subprocess.call(args, preexec_fn=instance._chroot) except OSError as xxx_todo_changeme: (err, msg) = xxx_todo_changeme.args raise errors.CreatorError( "Failed to execute /usr/libexec/mkliveinitrd: %s" % msg) def __run_post_cleanups(instance): kernelver = list(instance._get_kernel_versions().values())[0][0] args = ["rm", "-f", "/boot/initrd-%s.img" % kernelver] try: subprocess.call(args, preexec_fn=instance._chroot) except OSError as xxx_todo_changeme1: (err, msg) = xxx_todo_changeme1.args raise errors.CreatorError("Failed to run post cleanups: %s" % msg) convertoropts = configmgr.convert convertoropts['name'] = os.path.splitext(os.path.basename(base_on))[0] convertor = livecd.LiveCDImageCreator(convertoropts) imgtype = misc.get_image_type(base_on) if imgtype == "btrfsimg": fstype = "btrfs" elif imgtype in ("ext3fsimg", "ext4fsimg"): fstype = imgtype[:4] else: raise errors.CreatorError("Unsupported filesystem type: %s" % fstype) convertor._set_fstype(fstype) try: convertor.mount(base_on) __mkinitrd(convertor) convertor._create_bootconfig() __run_post_cleanups(convertor) convertor.launch_shell(convertoropts['shell']) convertor.unmount() convertor.package() convertor.print_outimage_info() finally: shutil.rmtree(os.path.dirname(base_on), ignore_errors=True)
def do_chroot(cls, target, cmd=[]): if target.endswith('.tar'): import tarfile if tarfile.is_tarfile(target): LoopPlugin._do_chroot_tar(target, cmd) return else: raise errors.CreatorError("damaged tarball for loop images") img = target imgsize = misc.get_file_size(img) * 1024L * 1024L imgtype = misc.get_image_type(img) if imgtype == "btrfsimg": fstype = "btrfs" myDiskMount = fs_related.BtrfsDiskMount elif imgtype in ("ext3fsimg", "ext4fsimg"): fstype = imgtype[:4] myDiskMount = fs_related.ExtDiskMount else: raise errors.CreatorError("Unsupported filesystem type: %s" \ % imgtype) extmnt = misc.mkdtemp() extloop = myDiskMount(fs_related.SparseLoopbackDisk(img, imgsize), extmnt, fstype, 4096, "%s label" % fstype) try: extloop.mount() except errors.MountError: extloop.cleanup() shutil.rmtree(extmnt, ignore_errors=True) raise try: if len(cmd) != 0: cmdline = ' '.join(cmd) else: cmdline = "/bin/bash" envcmd = fs_related.find_binary_inchroot("env", extmnt) if envcmd: cmdline = "%s HOME=/root %s" % (envcmd, cmdline) chroot.chroot(extmnt, None, cmdline) except: raise errors.CreatorError("Failed to chroot to %s." % img) finally: chroot.cleanup_after_chroot("img", extloop, None, extmnt)
def do_chroot(cls, target, cmd=[]): if target.endswith('.tar'): import tarfile if tarfile.is_tarfile(target): LoopPlugin._do_chroot_tar(target, cmd) return else: raise errors.CreatorError("damaged tarball for loop images") img = target imgsize = misc.get_file_size(img) * 1024L * 1024L imgtype = misc.get_image_type(img) if imgtype == "btrfsimg": fstype = "btrfs" myDiskMount = fs_related.BtrfsDiskMount elif imgtype in ("ext3fsimg", "ext4fsimg"): fstype = imgtype[:4] myDiskMount = fs_related.ExtDiskMount else: raise errors.CreatorError("Unsupported filesystem type: %s" \ % imgtype) extmnt = misc.mkdtemp() extloop = myDiskMount(fs_related.SparseLoopbackDisk(img, imgsize), extmnt, fstype, 4096, "%s label" % fstype) try: extloop.mount() except errors.MountError: extloop.cleanup() shutil.rmtree(extmnt, ignore_errors=True) raise try: if cmd is not None: cmdline = cmd else: cmdline = "/bin/bash" envcmd = fs_related.find_binary_inchroot("env", extmnt) if envcmd: cmdline = "%s HOME=/root %s" % (envcmd, cmdline) chroot.chroot(extmnt, None, cmdline) except: raise errors.CreatorError("Failed to chroot to %s." % img) finally: chroot.cleanup_after_chroot("img", extloop, None, extmnt)
def do_chroot(cls, target, cmd=[]): os_image = cls.do_unpack(target) os_image_dir = os.path.dirname(os_image) # unpack image to target dir imgsize = misc.get_file_size(os_image) * 1024L * 1024L imgtype = misc.get_image_type(os_image) if imgtype == "btrfsimg": fstype = "btrfs" myDiskMount = fs_related.BtrfsDiskMount elif imgtype in ("ext3fsimg", "ext4fsimg"): fstype = imgtype[:4] myDiskMount = fs_related.ExtDiskMount else: raise errors.CreatorError("Unsupported filesystem type: %s" % fstype) extmnt = misc.mkdtemp() extloop = myDiskMount(fs_related.SparseLoopbackDisk(os_image, imgsize), extmnt, fstype, 4096, "%s label" % fstype) try: extloop.mount() except errors.MountError: extloop.cleanup() shutil.rmtree(extmnt, ignore_errors = True) shutil.rmtree(os_image_dir, ignore_errors = True) raise try: if len(cmd) != 0: cmdline = ' '.join(cmd) else: cmdline = "/bin/bash" envcmd = fs_related.find_binary_inchroot("env", extmnt) if envcmd: cmdline = "%s HOME=/root %s" % (envcmd, cmdline) chroot.chroot(extmnt, None, cmdline) except: raise errors.CreatorError("Failed to chroot to %s." %target) finally: chroot.cleanup_after_chroot("img", extloop, os_image_dir, extmnt)
def do_chroot(cls, target): import tarfile if tarfile.is_tarfile(target): LoopPlugin._do_chroot_tar(target) return img = target imgsize = misc.get_file_size(img) * 1024L * 1024L imgtype = misc.get_image_type(img) if imgtype == "btrfsimg": fstype = "btrfs" myDiskMount = fs_related.BtrfsDiskMount elif imgtype in ("ext3fsimg", "ext4fsimg"): fstype = imgtype[:4] myDiskMount = fs_related.ExtDiskMount else: raise errors.CreatorError("Unsupported filesystem type: %s" \ % imgtype) extmnt = misc.mkdtemp() extloop = myDiskMount(fs_related.SparseLoopbackDisk(img, imgsize), extmnt, fstype, 4096, "%s label" % fstype) try: extloop.mount() except errors.MountError: extloop.cleanup() shutil.rmtree(extmnt, ignore_errors=True) raise try: chroot.chroot(extmnt, None, "/bin/env HOME=/root /bin/bash") except: raise errors.CreatorError("Failed to chroot to %s." % img) finally: chroot.cleanup_after_chroot("img", extloop, None, extmnt)
"Failed to execute /usr/libexec/mkliveinitrd: %s" % msg) def __run_post_cleanups(instance): kernelver = instance._get_kernel_versions().values()[0][0] args = ["rm", "-f", "/boot/initrd-%s.img" % kernelver] try: subprocess.call(args, preexec_fn=instance._chroot) except OSError, (err, msg): raise errors.CreatorError("Failed to run post cleanups: %s" % msg) convertoropts = configmgr.convert convertoropts['name'] = os.path.splitext(os.path.basename(base_on))[0] convertor = liveusb.LiveUSBImageCreator(convertoropts) imgtype = misc.get_image_type(base_on) if imgtype == "btrfsimg": fstype = "btrfs" elif imgtype in ("ext3fsimg", "ext4fsimg"): fstype = imgtype[:4] else: raise errors.CreatorError("Unsupported filesystem type: %s" % fstyp) convertor._set_fstype(fstype) try: convertor.mount(base_on) __mkinitrd(convertor) convertor._create_bootconfig() __run_post_cleanups(convertor) convertor.launch_shell(convertoropts['shell']) convertor.unmount()
except OSError, (err, msg): raise errors.CreatorError("Failed to execute /usr/libexec/mkliveinitrd: %s" % msg) def __run_post_cleanups(instance): kernelver = instance._get_kernel_versions().values()[0][0] args = ["rm", "-f", "/boot/initrd-%s.img" % kernelver] try: subprocess.call(args, preexec_fn = instance._chroot) except OSError, (err, msg): raise errors.CreatorError("Failed to run post cleanups: %s" % msg) convertoropts = configmgr.convert convertoropts['name'] = os.path.splitext(os.path.basename(base_on))[0] convertor = livecd.LiveCDImageCreator(convertoropts) imgtype = misc.get_image_type(base_on) if imgtype == "btrfsimg": fstype = "btrfs" elif imgtype in ("ext3fsimg", "ext4fsimg"): fstype = imgtype[:4] else: raise errors.CreatorError("Unsupported filesystem type: %s" % fstype) convertor._set_fstype(fstype) try: convertor.mount(base_on) __mkinitrd(convertor) convertor._create_bootconfig() __run_post_cleanups(convertor) convertor.launch_shell(convertoropts['shell']) convertor.unmount() convertor.package()