From: Paul Barker <pbarker@konsulko.com>
To: openembedded-core@lists.openembedded.org,
Ricardo Ribalda Delgado <ricardo@ribalda.com>
Subject: Re: [PATCH 2/2] wic: Add --embed-rootfs argument
Date: Wed, 4 Mar 2020 09:42:50 +0000 [thread overview]
Message-ID: <20200304094250.3eda52e1@ub1910> (raw)
In-Reply-To: <20200304083438.1022216-2-ricardo@ribalda.com>
On Wed, 4 Mar 2020 09:34:38 +0100
Ricardo Ribalda Delgado <ricardo@ribalda.com> wrote:
> This option adds the content of a rootfs on a specific location on the
> rootfs.
>
> It is very useful for making a partition that contains the rootfs for a
> host and a target Eg:
>
> / -> Roofs for the host
> /export/ -> Rootfs for the target (which will netboot)
>
> Although today we support making a partition for "/export" this might
> not be compatible with some upgrade systems, or we might be limited by
> the number of partitions.
>
> With this patch we can use something like:
>
> part / --source rootfs --embed-rootfs=target-image:/export
I considered using a syntax like this for --include-path but I chose not to
as it's not easy to choose a separator. ':' is a valid character in a
directory name.
My approach is to handle this in two steps:
1) Add a new task before do_image_wic which creates an 'embedded-rootfs'
directory and copies 'target-image' to 'embedded-rootfs/export'.
2) Use '--include-path=embedded-rootfs' in the wks file.
>
> on the .wks file.
>
> Signed-off-by: Ricardo Ribalda Delgado <ricardo@ribalda.com>
> ---
> scripts/lib/wic/help.py | 7 +++++++
> scripts/lib/wic/ksparser.py | 1 +
> scripts/lib/wic/partition.py | 1 +
> scripts/lib/wic/plugins/source/rootfs.py | 20 +++++++++++++++++++-
> 4 files changed, 28 insertions(+), 1 deletion(-)
>
> diff --git a/scripts/lib/wic/help.py b/scripts/lib/wic/help.py
> index 4d342fcf05..67a33e6a65 100644
> --- a/scripts/lib/wic/help.py
> +++ b/scripts/lib/wic/help.py
> @@ -979,6 +979,13 @@ DESCRIPTION
> copies. This option only has an effect with the rootfs
> source plugin.
>
> + --embed-rootfs: This option is specific to wic. It embeds a rootfs into
> + the given path to the resulting image. The option
> + contains two fields, the roofs and the path, separated
> + by a colon. The rootfs follows the same logic as the
> + rootfs-dir argument. This option only has an effect
> + with the rootfs source plugin.
> +
> --extra-space: This option is specific to wic. It adds extra
> space after the space filled by the content
> of the partition. The final size can go
> diff --git a/scripts/lib/wic/ksparser.py b/scripts/lib/wic/ksparser.py
> index 650b976223..d422e2a6bb 100644
> --- a/scripts/lib/wic/ksparser.py
> +++ b/scripts/lib/wic/ksparser.py
> @@ -138,6 +138,7 @@ class KickStart():
> part.add_argument('--align', type=int)
> part.add_argument('--exclude-path', nargs='+')
> part.add_argument('--include-path', nargs='+')
> + part.add_argument('--embed-rootfs', nargs='+')
> part.add_argument("--extra-space", type=sizetype)
> part.add_argument('--fsoptions', dest='fsopts')
> part.add_argument('--fstype', default='vfat',
> diff --git a/scripts/lib/wic/partition.py b/scripts/lib/wic/partition.py
> index 2d95f78439..13857df82f 100644
> --- a/scripts/lib/wic/partition.py
> +++ b/scripts/lib/wic/partition.py
> @@ -31,6 +31,7 @@ class Partition():
> self.extra_space = args.extra_space
> self.exclude_path = args.exclude_path
> self.include_path = args.include_path
> + self.embed_rootfs = args.embed_rootfs
> self.fsopts = args.fsopts
> self.fstype = args.fstype
> self.label = args.label
> diff --git a/scripts/lib/wic/plugins/source/rootfs.py b/scripts/lib/wic/plugins/source/rootfs.py
> index 40419a64b3..16359601dc 100644
> --- a/scripts/lib/wic/plugins/source/rootfs.py
> +++ b/scripts/lib/wic/plugins/source/rootfs.py
> @@ -80,7 +80,7 @@ class RootfsPlugin(SourcePlugin):
>
> new_rootfs = None
> # Handle excluded paths.
> - if part.exclude_path or part.include_path:
> + if part.exclude_path or part.include_path or part.embed_rootfs:
> # We need a new rootfs directory we can delete files from. Copy to
> # workdir.
> new_rootfs = os.path.realpath(os.path.join(cr_workdir, "rootfs%d" % part.lineno))
> @@ -100,6 +100,24 @@ class RootfsPlugin(SourcePlugin):
> for path in part.include_path or []:
> copyhardlinktree(path, new_rootfs)
>
> + for embed in part.embed_rootfs or []:
> + [embed_rootfs, path] = embed.split(":")
> + #we need to remove the initial / for os.path.join to work
> + if os.path.isabs(path):
> + path = path[1:]
> + if embed_rootfs in krootfs_dir:
> + embed_rootfs = krootfs_dir[embed_rootfs]
> + embed_rootfs = cls.__get_rootfs_dir(embed_rootfs)
> + tar_file = os.path.realpath(os.path.join(cr_workdir, "aux.tar"))
> + tar_cmd = "%s tar cpf %s -C %s ." % (cls.__get_pseudo(native_sysroot,
> + embed_rootfs), tar_file, embed_rootfs)
> + exec_native_cmd(tar_cmd, native_sysroot)
> + untar_cmd = "%s tar xf %s -C %s ." % (cls.__get_pseudo(native_sysroot, new_rootfs),
> + tar_file, os.path.join(new_rootfs, path))
> + exec_native_cmd(untar_cmd, native_sysroot,
> + cls.__get_pseudo(native_sysroot, new_rootfs))
> + os.remove(tar_file)
> +
Why are you using an intermediate tar file here?
> for orig_path in part.exclude_path or []:
> path = orig_path
> if os.path.isabs(path):
--
Paul Barker
Konsulko Group
next prev parent reply other threads:[~2020-03-04 9:42 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-04 8:34 [PATCH 1/2] wic: Fix permissions when using exclude or include path Ricardo Ribalda Delgado
2020-03-04 8:34 ` [PATCH 2/2] wic: Add --embed-rootfs argument Ricardo Ribalda Delgado
2020-03-04 9:42 ` Paul Barker [this message]
2020-03-04 9:56 ` Ricardo Ribalda Delgado
2020-03-04 10:08 ` Paul Barker
2020-03-04 10:14 ` Ricardo Ribalda Delgado
2020-03-04 13:49 ` Ricardo Ribalda Delgado
2020-03-04 14:31 ` Joshua Watt
2020-03-04 9:53 ` [PATCH 1/2] wic: Fix permissions when using exclude or include path Paul Barker
2020-03-04 10:02 ` Ricardo Ribalda Delgado
2020-03-05 9:28 ` Paul Barker
2020-03-05 9:46 ` Ricardo Ribalda Delgado
2020-04-03 19:53 ` [OE-core] " Ricardo Ribalda
2020-04-07 18:12 ` Paul Barker
2020-04-07 18:40 ` Ricardo Ribalda
2020-04-07 19:02 ` Paul Barker
2020-04-07 19:19 ` Ricardo Ribalda
2020-04-07 19:43 ` Paul Barker
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200304094250.3eda52e1@ub1910 \
--to=pbarker@konsulko.com \
--cc=openembedded-core@lists.openembedded.org \
--cc=ricardo@ribalda.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox