9 from mic.pluginbase.imager_plugin import ImagerPlugin
10 import mic.utils.misc as misc
11 import mic.utils.cmdln as cmdln
12 import mic.utils.fs_related as fs_related
13 from mic.utils.errors import *
14 import mic.configmgr as configmgr
15 import mic.pluginmgr as pluginmgr
16 import mic.imager.loop as loop
17 import mic.chroot as chroot
19 class LoopPlugin(ImagerPlugin):
21 def do_create(self, subcmd, opts, *args):
22 """${cmd_name}: create loop image
32 raise errors.Usage("Extra arguments given")
34 cfgmgr = configmgr.getConfigMgr()
35 creatoropts = cfgmgr.create
36 cfgmgr.setProperty("ksconf", ksconf)
38 plgmgr = pluginmgr.PluginMgr()
41 for (key, pcls) in plgmgr.getBackendPlugins():
42 if key == creatoropts['pkgmgr']:
46 raise CreatorError("Can't find backend %s" % pkgmgr)
48 creator = loop.LoopImageCreator(creatoropts, pkgmgr)
50 creator.check_depend_tools()
51 creator.mount(None, creatoropts["cachedir"])
53 creator.configure(creatoropts["repomd"])
55 creator.package(creatoropts["outdir"])
56 except CreatorError, e:
57 raise CreatorError("failed to create image : %s" % e)
64 def do_chroot(cls, target):#chroot.py parse opts&args
68 imgsize = misc.get_file_size(img)
69 extmnt = misc.mkdtemp()
70 extloop = fs_related.ExtDiskMount(fs_related.SparseLoopbackDisk(img, imgsize),
80 shutil.rmtree(extmnt, ignore_errors = True)
81 raise CreatorError("Failed to loopback mount '%s' : %s" %(img, e))
83 chroot.chroot(extmnt, None, "/bin/env HOME=/root /bin/bash")
85 raise CreatorError("Failed to chroot to %s." %img)
87 chroot.cleanup_after_chroot("img", extloop, None, extmnt)
90 def do_unpack(cls, srcimg):
91 image = os.path.join(tempfile.mkdtemp(dir = "/var/tmp", prefix = "tmp"), "target.img")
92 print "Copying file system..."
93 shutil.copyfile(srcimg, image)
96 mic_plugin = ["loop", LoopPlugin]