Hi Stefan!

On Thu, Feb 10 2022 at 17:17 +0100, "Stefan Herbrechtsmeier" 
<[email protected]> wrote:
> From: Stefan Herbrechtsmeier <[email protected]>
>
> 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"
>
> Signed-off-by: Stefan Herbrechtsmeier <[email protected]>
>
> ---
>
>  scripts/lib/wic/plugins/source/rawcopy.py | 28 ++++++++++++++++++++++-
>  1 file changed, 27 insertions(+), 1 deletion(-)
>
> diff --git a/scripts/lib/wic/plugins/source/rawcopy.py 
> b/scripts/lib/wic/plugins/source/rawcopy.py
> index fa7b1eb8ac..7816e00e49 100644
> --- a/scripts/lib/wic/plugins/source/rawcopy.py
> +++ b/scripts/lib/wic/plugins/source/rawcopy.py
> @@ -4,6 +4,8 @@
>  
>  import logging
>  import os
> +import signal
> +import subprocess
>  
>  from wic import WicError
>  from wic.pluginbase import SourcePlugin
> @@ -38,6 +40,24 @@ 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)
> +
> +        decompressor = {
> +            ".bz2": "bzip2",
> +            ".gz": "gzip",
> +            ".xz": "xz"
> +        }.get(os.path.splitext(src)[1])
> +        if not decompressor:
> +            raise WicError("Compression not support")

Here is a small typo: s/support/supported/ .

And what about substituting "Compression" by "Compressor" to express
that not compression in general but only this individual compressor is
currently unsupported? (Or even better: in addition explicitely name the
currently unsupported compressor in the error message?)

Best regards
Ulrich


> +        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 +76,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)):
-- 
Pengutronix e.K.                           | Ulrich Ölmann               |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#161657): 
https://lists.openembedded.org/g/openembedded-core/message/161657
Mute This Topic: https://lists.openembedded.org/mt/89049086/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to