aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--scripts/lib/wic/creator.py106
-rw-r--r--scripts/lib/wic/engine.py32
-rw-r--r--scripts/lib/wic/plugins/imager/direct.py108
-rwxr-xr-xscripts/wic3
4 files changed, 56 insertions, 193 deletions
diff --git a/scripts/lib/wic/creator.py b/scripts/lib/wic/creator.py
deleted file mode 100644
index 74db83cd30..0000000000
--- a/scripts/lib/wic/creator.py
+++ /dev/null
@@ -1,106 +0,0 @@
-#!/usr/bin/env python -tt
-#
-# Copyright (c) 2011 Intel, Inc.
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the Free
-# Software Foundation; version 2 of the License
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with this program; if not, write to the Free Software Foundation, Inc., 59
-# Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-import os, sys
-from optparse import OptionParser, SUPPRESS_HELP
-
-from wic import msger
-from wic.utils import errors
-from wic.plugin import pluginmgr
-
-class Creator():
- """${name}: create an image
-
- Usage:
- ${name} SUBCOMMAND <ksfile> [OPTS]
-
- ${command_list}
- ${option_list}
- """
-
- name = 'wic create(cr)'
-
- def __init__(self, *args, **kwargs):
- self._subcmds = {}
-
- # get cmds from pluginmgr
- # mix-in do_subcmd interface
- for subcmd, klass in pluginmgr.get_plugins('imager').items():
- if not hasattr(klass, 'do_create'):
- msger.warning("Unsupported subcmd: %s" % subcmd)
- continue
-
- func = getattr(klass, 'do_create')
- self._subcmds[subcmd] = func
-
- def get_optparser(self):
- optparser = OptionParser()
- optparser.add_option('-d', '--debug', action='store_true',
- dest='debug',
- help=SUPPRESS_HELP)
- optparser.add_option('-v', '--verbose', action='store_true',
- dest='verbose',
- help=SUPPRESS_HELP)
- optparser.add_option('', '--logfile', type='string', dest='logfile',
- default=None,
- help='Path of logfile')
- optparser.add_option('-c', '--config', type='string', dest='config',
- default=None,
- help='Specify config file for wic')
- optparser.add_option('-o', '--outdir', type='string', action='store',
- dest='outdir', default=None,
- help='Output directory')
- optparser.add_option('', '--tmpfs', action='store_true', dest='enabletmpfs',
- help='Setup tmpdir as tmpfs to accelerate, experimental'
- ' feature, use it if you have more than 4G memory')
- optparser.add_option('', '--bmap', action='store_true', help='generate .bmap')
- return optparser
-
- def postoptparse(self, options):
- abspath = lambda pth: os.path.abspath(os.path.expanduser(pth))
-
- if options.verbose:
- msger.set_loglevel('verbose')
- if options.debug:
- msger.set_loglevel('debug')
-
- if options.logfile:
- logfile_abs_path = abspath(options.logfile)
- if os.path.isdir(logfile_abs_path):
- raise errors.Usage("logfile's path %s should be file"
- % options.logfile)
- if not os.path.exists(os.path.dirname(logfile_abs_path)):
- os.makedirs(os.path.dirname(logfile_abs_path))
- msger.set_interactive(False)
- msger.set_logfile(logfile_abs_path)
-
- def main(self, argv=None):
- if argv is None:
- argv = sys.argv
- else:
- argv = argv[:] # don't modify caller's list
-
- pname = argv[0]
- if pname not in self._subcmds:
- msger.error('Unknown plugin: %s' % pname)
-
- optparser = self.get_optparser()
- options, args = optparser.parse_args(argv)
-
- self.postoptparse(options)
-
- return self._subcmds[pname](options, *args[1:])
diff --git a/scripts/lib/wic/engine.py b/scripts/lib/wic/engine.py
index 7fb6f1317b..e27598d01a 100644
--- a/scripts/lib/wic/engine.py
+++ b/scripts/lib/wic/engine.py
@@ -31,7 +31,7 @@
import os
import sys
-from wic import msger, creator
+from wic import msger
from wic.plugin import pluginmgr
from wic.utils.misc import get_bitbake_var
@@ -145,10 +145,10 @@ def list_source_plugins():
print(" %s" % plugin)
-def wic_create(wks_file, rootfs_dir, bootimg_dir, kernel_dir,
- native_sysroot, scripts_path, image_output_dir,
- compressor, bmap, debug):
- """Create image
+def wic_create(wks_file, rootfs_dir, bootimg_dir, kernel_dir, native_sysroot,
+ scripts_path, options):
+ """
+ Create image
wks_file - user-defined OE kickstart file
rootfs_dir - absolute path to the build's /rootfs dir
@@ -157,8 +157,7 @@ def wic_create(wks_file, rootfs_dir, bootimg_dir, kernel_dir,
native_sysroot - absolute path to the build's native sysroots dir
scripts_path - absolute path to /scripts dir
image_output_dir - dirname to create for image
- compressor - compressor utility to compress the image
- bmap - enable generation of .bmap
+ options - wic command line options (debug, bmap, etc)
Normally, the values for the build artifacts values are determined
by 'wic -e' from the output of the 'bitbake -e' command given an
@@ -184,20 +183,21 @@ def wic_create(wks_file, rootfs_dir, bootimg_dir, kernel_dir,
print("BUILDDIR not found, exiting. (Did you forget to source oe-init-build-env?)")
sys.exit(1)
- if debug:
+ if options.debug:
msger.set_loglevel('debug')
- if not os.path.exists(image_output_dir):
- os.makedirs(image_output_dir)
+ if not os.path.exists(options.outdir):
+ os.makedirs(options.outdir)
- crobj = creator.Creator()
+ pname = 'direct'
+ plugin_class = pluginmgr.get_plugins('imager').get(pname)
+ if not plugin_class:
+ msger.error('Unknown plugin: %s' % pname)
- cmdline = ["direct", native_sysroot, kernel_dir, bootimg_dir, rootfs_dir,
- wks_file, image_output_dir, oe_builddir, compressor or ""]
- if bmap:
- cmdline.append('--bmap')
+ plugin = plugin_class(wks_file, rootfs_dir, bootimg_dir, kernel_dir,
+ native_sysroot, scripts_path, oe_builddir, options)
- crobj.main(cmdline)
+ plugin.do_create()
print("\nThe image(s) were created using OE kickstart file:\n %s" % wks_file)
diff --git a/scripts/lib/wic/plugins/imager/direct.py b/scripts/lib/wic/plugins/imager/direct.py
index b38e876758..ae420a687e 100644
--- a/scripts/lib/wic/plugins/imager/direct.py
+++ b/scripts/lib/wic/plugins/imager/direct.py
@@ -39,50 +39,6 @@ from wic.utils.errors import CreatorError, ImageError
from wic.utils.misc import get_bitbake_var, exec_cmd, exec_native_cmd
from wic.utils.partitionedfs import Image
-class DirectPlugin(ImagerPlugin):
- """
- Install a system into a file containing a partitioned disk image.
-
- An image file is formatted with a partition table, each partition
- created from a rootfs or other OpenEmbedded build artifact and dd'ed
- into the virtual disk. The disk image can subsequently be dd'ed onto
- media and used on actual hardware.
- """
-
- name = 'direct'
-
- @staticmethod
- def do_create(opts, *args):
- """
- Create direct image, called from creator as 'direct' cmd
- """
- native_sysroot, kernel_dir, bootimg_dir, rootfs_dir, ksconf, \
- outdir, oe_builddir, compressor = args
-
- try:
- ksobj = KickStart(ksconf)
- except KickStartError as err:
- msger.error(str(err))
-
- name = "%s-%s" % (os.path.splitext(os.path.basename(ksconf))[0],
- strftime("%Y%m%d%H%M"))
-
- # parse possible 'rootfs=name' items
- krootfs_dir = dict(rdir.split('=') for rdir in rootfs_dir.split(' '))
-
- creator = DirectImageCreator(name, ksobj, oe_builddir, outdir,
- krootfs_dir, bootimg_dir, kernel_dir,
- native_sysroot, compressor, opts.bmap)
- try:
- creator.create()
- creator.assemble()
- creator.finalize()
- creator.print_info()
- except errors.CreatorError:
- raise
- finally:
- creator.cleanup()
-
class DiskImage():
"""
A Disk backed by a file.
@@ -101,43 +57,57 @@ class DiskImage():
self.created = True
-class DirectImageCreator:
+class DirectPlugin(ImagerPlugin):
"""
- Installs a system into a file containing a partitioned disk image.
+ Install a system into a file containing a partitioned disk image.
- DirectImageCreator is an advanced ImageCreator subclass; an image
- file is formatted with a partition table, each partition created
- from a rootfs or other OpenEmbedded build artifact and dd'ed into
- the virtual disk. The disk image can subsequently be dd'ed onto
+ An image file is formatted with a partition table, each partition
+ created from a rootfs or other OpenEmbedded build artifact and dd'ed
+ into the virtual disk. The disk image can subsequently be dd'ed onto
media and used on actual hardware.
"""
+ name = 'direct'
- def __init__(self, name, ksobj, oe_builddir, outdir,
- rootfs_dir, bootimg_dir, kernel_dir,
- native_sysroot, compressor, bmap=False):
- """
- Initialize a DirectImageCreator instance.
+ def __init__(self, wks_file, rootfs_dir, bootimg_dir, kernel_dir,
+ native_sysroot, scripts_path, oe_builddir, options):
+ try:
+ self.ks = KickStart(wks_file)
+ except KickStartError as err:
+ msger.error(str(err))
- This method takes the same arguments as ImageCreator.__init__()
- """
- self.name = name
- self.outdir = outdir
- self.workdir = tempfile.mkdtemp(dir=outdir, prefix='tmp.wic.')
- self.ks = ksobj
+ # parse possible 'rootfs=name' items
+ self.rootfs_dir = dict(rdir.split('=') for rdir in rootfs_dir.split(' '))
+ self.bootimg_dir = bootimg_dir
+ self.kernel_dir = kernel_dir
+ self.native_sysroot = native_sysroot
+ self.oe_builddir = oe_builddir
+ self.outdir = options.outdir
+ self.compressor = options.compressor
+ self.bmap = options.bmap
+
+ self.name = "%s-%s" % (os.path.splitext(os.path.basename(wks_file))[0],
+ strftime("%Y%m%d%H%M"))
+ self.workdir = tempfile.mkdtemp(dir=self.outdir, prefix='tmp.wic.')
self._image = None
self._disks = {}
self._disk_format = "direct"
self._disk_names = []
self.ptable_format = self.ks.bootloader.ptable
- self.oe_builddir = oe_builddir
- self.rootfs_dir = rootfs_dir
- self.bootimg_dir = bootimg_dir
- self.kernel_dir = kernel_dir
- self.native_sysroot = native_sysroot
- self.compressor = compressor
- self.bmap = bmap
+ def do_create(self):
+ """
+ Plugin entry point.
+ """
+ try:
+ self.create()
+ self.assemble()
+ self.finalize()
+ self.print_info()
+ except errors.CreatorError:
+ raise
+ finally:
+ self.cleanup()
def _get_part_num(self, num, parts):
"""calculate the real partition number, accounting for partitions not
@@ -359,7 +329,7 @@ class DirectImageCreator:
extension = "direct" + {"gzip": ".gz",
"bzip2": ".bz2",
"xz": ".xz",
- "": ""}.get(self.compressor)
+ None: ""}.get(self.compressor)
full_path = self._full_path(self.outdir, disk_name, extension)
msg += ' %s\n\n' % full_path
diff --git a/scripts/wic b/scripts/wic
index 17e82315e2..8a959a01af 100755
--- a/scripts/wic
+++ b/scripts/wic
@@ -250,8 +250,7 @@ def wic_create_subcommand(args, usage_str):
print("Creating image(s)...\n")
engine.wic_create(wks_file, rootfs_dir, bootimg_dir, kernel_dir,
- native_sysroot, scripts_path, options.outdir,
- options.compressor, options.bmap, options.debug)
+ native_sysroot, scripts_path, options)
def wic_list_subcommand(args, usage_str):