else:
self.ks = None
self.repometadata = None
- self.name = None
- self.tmpdir = None
- self.cachedir = None
- self.destdir = None
+ self.name = "MeeGo"
+ self.tmpdir = "/var/tmp"
+ self.cachedir = "/var/cache"
+ self.destdir = "."
self.__builddir = None
self.__bindmounts = []
self.skip_minimize = False
#A flag which indicates i act as a convertor default false
- if creatoropts.has_key('actasconvertor') and not creatoropts['actasconvertor']:
- self.actasconvertor = creatoropts['actasconvertor']
- else:
- self.actasconvertor = False
+ self.actasconvertor = False
#The bootloader timeout from kickstart.
if self.ks:
def _get_menu_options(self):
"""Return a menu options string for syslinux configuration.
"""
- if self.actasconvertor:
+ if self.ks is None:
return "bootinstall autoinst"
r = kickstart.get_menu_args(self.ks)
return r
A sensible default implementation is provided.
"""
- if self.actasconvertor:
+ if self.ks is None:
r = "ro liveimg quiet"
if os.path.exists(instroot + "/usr/bin/rhgb"):
r += " rhgb"
# Actual implementation
#
def _mount_instroot(self, base_on = None):
- self.__imgdir = self._mkdtemp()
+ if self.__imgdir is None:
+ self.__imgdir = self._mkdtemp()
if not base_on is None:
self._base_on(base_on)
cfg.write(xml)
cfg.close()
#print "Wrote: %s.xml" % self.name
-
- @classmethod
- def _mount_srcimg(self, srcimg):
- srcimgsize = (misc.get_file_size(srcimg)) * 1024L * 1024L
- srcmnt = misc.mkdtemp("srcmnt")
- disk = fs_related.SparseLoopbackDisk(srcimg, srcimgsize)
- srcloop = PartitionedMount({'/dev/sdb':disk}, srcmnt, skipformat = True)
-
- srcloop.add_partition(srcimgsize/1024/1024, "/dev/sdb", "/", "ext3", boot=False)
- try:
- srcloop.mount()
- return srcloop
- except MountError, e:
- srcloop.cleanup()
- raise CreatorError("Failed to loopback mount '%s' : %s" %
- (srcimg, e))
- @classmethod
- def _unmount_srcimg(self, srcloop):
- if srcloop:
- srcloop.cleanup()
import subprocess
import logging
import shutil
+import tempfile
from micng.pluginbase.imager_plugin import ImagerPlugin
import micng.chroot as chroot
chroot.cleanup_after_chroot("img",extloop,None,None)
return 1
- def do_pack(self):
+ @classmethod
+ def do_pack(cls, base_on):
def __mkinitrd(instance):
kernelver = instance._get_kernel_versions().values()[0][0]
args = [ "/usr/libexec/mkliveinitrd", "/boot/initrd-%s.img" % kernelver, "%s" % kernelver ]
subprocess.call(args, preexec_fn = instance._chroot)
except OSError, (err, msg):
raise 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]
subprocess.call(args, preexec_fn = instance._chroot)
except OSError, (err, msg):
raise CreatorError("Failed to run post cleanups: %s" % msg)
-
+ convertor = livecd.LiveCDImageCreator()
+ srcimgsize = (misc.get_file_size(base_on)) * 1024L * 1024L
+ base_on_dir = os.path.dirname(base_on)
+ convertor._LoopImageCreator__imgdir = base_on_dir
+ convertor._set_fstype("ext3")
+ convertor._set_image_size(srcimgsize)
+ convertor.mount()
__mkinitrd(convertor)
convertor._create_bootconfig()
__run_post_cleanups(convertor)
convertor.unmount()
convertor.package()
convertor.print_outimage_info()
-
- def do_unpack(self):
- convertoropts = configmgr.getConfigMgr().convert
- convertor = convertoropts["convertor"](convertoropts) #consistent with destfmt
- srcimgsize = (misc.get_file_size(convertoropts["srcimg"])) * 1024L * 1024L
+ shutil.rmtree(base_on_dir, ignore_errors = True)
+
+ @classmethod
+ def do_unpack(cls, srcimg):
+ convertor = livecd.LiveCDImageCreator()
+ srcimgsize = (misc.get_file_size(srcimg)) * 1024L * 1024L
+ convertor._srcfmt = 'livecd'
convertor._set_fstype("ext3")
convertor._set_image_size(srcimgsize)
- base_on = convertoropts["srcimg"]
- convertor.check_depend_tools()
- convertor.mount(base_on, None)
- return convertor
+ convertor.mount(srcimg, None)
+ image = os.path.join(tempfile.mkdtemp(dir = "/var/tmp", prefix = "tmp"), "meego.img")
+ shutil.copyfile(convertor._image, image)
+ return image
mic_plugin = ["livecd", LiveCDPlugin]
import subprocess
import logging
import shutil
+import tempfile
from micng.pluginbase.imager_plugin import ImagerPlugin
import micng.imager.liveusb as liveusb
return 1
@classmethod
- def do_pack(cls, base_on):
+ def do_pack(cls, base_on):
def __mkinitrd(instance):
kernelver = instance._get_kernel_versions().values()[0][0]
args = [ "/usr/libexec/mkliveinitrd", "/boot/initrd-%s.img" % kernelver, "%s" % kernelver ]
subprocess.call(args, preexec_fn = instance._chroot)
except OSError, (err, msg):
raise 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]
subprocess.call(args, preexec_fn = instance._chroot)
except OSError, (err, msg):
raise CreatorError("Failed to run post cleanups: %s" % msg)
-
- convertoropts = configmgr.getConfigMgr().convert
- convertoropts["ks"] = None
- convertor = liveusb.LiveUSBImageCreator(convertoropts) #consistent with destfmt
+
+ convertor = liveusb.LiveUSBImageCreator()
srcimgsize = (misc.get_file_size(base_on)) * 1024L * 1024L
convertor._set_fstype("ext3")
convertor._set_image_size(srcimgsize)
- convertor._image = base_on
- #convertor.check_depend_tools()
+ base_on_dir = os.path.dirname(base_on)
+ convertor._LoopImageCreator__imgdir = base_on_dir
+ convertor.mount()
__mkinitrd(convertor)
convertor._create_bootconfig()
__run_post_cleanups(convertor)
convertor.unmount()
convertor.package()
- #convertor.print_outimage_info()
-
- @classmethod
+ convertor.print_outimage_info()
+ shutil.rmtree(base_on_dir, ignore_errors = True)
+
+ @classmethod
def do_unpack(cls, srcimg):
- convertoropts = configmgr.getConfigMgr().convert
- convertoropts["ks"] = None
- convertor = liveusb.LiveUSBImageCreator(convertoropts) #consistent with destfmt
+ convertor = liveusb.LiveUSBImageCreator()
srcimgsize = (misc.get_file_size(srcimg)) * 1024L * 1024L
convertor._srcfmt = 'livecd'
convertor._set_fstype("ext3")
convertor._set_image_size(srcimgsize)
- #convertor.check_depend_tools()
convertor.mount(srcimg, None)
- return convertor._image, convertor._instroot
+ image = os.path.join(tempfile.mkdtemp(dir = "/var/tmp", prefix = "tmp"), "meego.img")
+ shutil.copyfile(convertor._image, image)
+ return image
mic_plugin = ["liveusb", LiveUSBPlugin]
#!/usr/bin/python
+import os
import sys
import subprocess
import logging
import shutil
+import tempfile
from micng.pluginbase.imager_plugin import ImagerPlugin
import micng.utils.misc as misc
chroot.cleanup_after_chroot("img", extloop, None, None)
print >> sys.stderr, "Failed to chroot to %s." % extloop
return 1
+
+ @classmethod
+ def do_unpack(cls, srcimg):
+ image = os.path.join(tempfile.mkdtemp(dir = "/var/tmp", prefix = "tmp"), "meego.img")
+ shutil.copyfile(srcimg, image)
+ return image
+
mic_plugin = ["loop", LoopPlugin]
import logging
import shutil
import re
+import tempfile
from micng.pluginbase.imager_plugin import ImagerPlugin
import micng.utils.misc as misc
convertor.mount(base_on, None)
return convertor
+ @classmethod
+ def do_unpack(cls, srcimg):
+ srcimgsize = (misc.get_file_size(srcimg)) * 1024L * 1024L
+ srcmnt = misc.mkdtemp("srcmnt")
+ disk = fs_related.SparseLoopbackDisk(srcimg, srcimgsize)
+ srcloop = PartitionedMount({'/dev/sdb':disk}, srcmnt, skipformat = True)
+
+ srcloop.add_partition(srcimgsize/1024/1024, "/dev/sdb", "/", "ext3", boot=False)
+ try:
+ srcloop.mount()
+ except MountError, e:
+ srcloop.cleanup()
+ raise CreatorError("Failed to loopback mount '%s' : %s" %
+ (srcimg, e))
+
+ image = os.path.join(tempfile.mkdtemp(dir = "/var/tmp", prefix = "tmp"), "meego.img")
+ ddcmd = misc.find_binary_path("dd")
+ args = [ ddcmd, "if=%s" % srcloop.partitions[0]['device'], "of=%s" % image ]
+ rc = subprocess.call(args)
+ if rc != 0:
+ raise CreatorError("Failed to dd")
+ srcloop.cleanup()
+ return image
+
mic_plugin = ["raw", RawPlugin]
ret = cr.main(argv[1:])
return ret
-# @cmdln.alias("cv")
-# def do_convert(self, argv):
-# """${cmd_name}: convert an image format to another one
-# """
-# pass
+ @cmdln.alias("cv")
+ def do_convert(self, subcmd, opts, *args):
+ """${cmd_name}: convert an image format to another one
+
+ usage:
+ micng convert <imagefile> <destformat>
+ """
+ if len(args) == 0:
+ self.emptyline()
+ # print help
+ return
+ if len(args) == 1:
+ raise errors.Usage("It takes 2 arguments (1 given)")
+ elif len(args) == 2:
+ srcimg = args[0]
+ destformat = args[1]
+ else:
+ raise errors.Usage("Extra argument given")
+
+ if os.geteuid() != 0:
+ raise errors.Usage("You must run as root")
+
+ srcformat = misc.get_image_type(srcimg)
+ if srcformat == "ext3fsimg":
+ srcformat = "loop"
+
+ pkgmgr = pluginmgr.PluginMgr()
+ pkgmgr.loadPlugins()
+ imagers = pmgr.getImagerPlugins()
+
+ srcimager = None
+ destimager = None
+ for iname, icls in imagers:
+ if iname == srcformat and hasattr(icls, "do_unpack"):
+ srcimager = icls
+ if iname == destformat and hasattr(icls, "do_pack"):
+ destimager = icls
+
+ if (srcimager and destimager) is None:
+ raise CreatorError("Can't convert from %s to %s" %(srcformat, desformat))
+ else:
+ base_on = srcimager.do_unpack(srcimg)
+ destimager.do_pack(base_on)
@cmdln.option("-d", "--debug", action="store_true", help="debug message")
@cmdln.option("-v", "--verbose", action="store_true", help="verbose infomation")