mirror of
git://git.yoctoproject.org/poky.git
synced 2025-07-19 12:59:02 +02:00
wic: rawcopy: Add support for packed images
Add support for packed images to wic rawcopy handler do minimize disk usage in deploy directory and reuse of packed images between wic and swupdate. Add `unpack` to sourceparams to unpack an bz2, gz and xz archives. Example: part / --source rawcopy --sourceparams="file=core-image-minimal-qemu.ext4.gz,unpack" (From OE-Core rev: 4c97d25791389ece041565981ba3207ce9949a1a) Signed-off-by: Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
5d16ba9078
commit
0c20edddfc
|
@ -4,6 +4,8 @@
|
|||
|
||||
import logging
|
||||
import os
|
||||
import signal
|
||||
import subprocess
|
||||
|
||||
from wic import WicError
|
||||
from wic.pluginbase import SourcePlugin
|
||||
|
@ -38,6 +40,25 @@ class RawCopyPlugin(SourcePlugin):
|
|||
|
||||
exec_cmd(cmd)
|
||||
|
||||
@staticmethod
|
||||
def do_image_uncompression(src, dst, workdir):
|
||||
def subprocess_setup():
|
||||
# Python installs a SIGPIPE handler by default. This is usually not what
|
||||
# non-Python subprocesses expect.
|
||||
# SIGPIPE errors are known issues with gzip/bash
|
||||
signal.signal(signal.SIGPIPE, signal.SIG_DFL)
|
||||
|
||||
extension = os.path.splitext(src)[1]
|
||||
decompressor = {
|
||||
".bz2": "bzip2",
|
||||
".gz": "gzip",
|
||||
".xz": "xz"
|
||||
}.get(extension)
|
||||
if not decompressor:
|
||||
raise WicError("Not supported compressor filename extension: %s" % extension)
|
||||
cmd = "%s -dc %s > %s" % (decompressor, src, dst)
|
||||
subprocess.call(cmd, preexec_fn=subprocess_setup, shell=True, cwd=workdir)
|
||||
|
||||
@classmethod
|
||||
def do_prepare_partition(cls, part, source_params, cr, cr_workdir,
|
||||
oe_builddir, bootimg_dir, kernel_dir,
|
||||
|
@ -56,7 +77,13 @@ class RawCopyPlugin(SourcePlugin):
|
|||
if 'file' not in source_params:
|
||||
raise WicError("No file specified")
|
||||
|
||||
src = os.path.join(kernel_dir, source_params['file'])
|
||||
if 'unpack' in source_params:
|
||||
img = os.path.join(kernel_dir, source_params['file'])
|
||||
src = os.path.join(cr_workdir, os.path.splitext(source_params['file'])[0])
|
||||
RawCopyPlugin.do_image_uncompression(img, src, cr_workdir)
|
||||
else:
|
||||
src = os.path.join(kernel_dir, source_params['file'])
|
||||
|
||||
dst = os.path.join(cr_workdir, "%s.%s" % (os.path.basename(source_params['file']), part.lineno))
|
||||
|
||||
if not os.path.exists(os.path.dirname(dst)):
|
||||
|
|
Loading…
Reference in New Issue
Block a user