Re: [PATCH 2/2] wic: extra-partition: introduce variable matching sourceparams

Pierre-loup GOSSE
2026-01-07T16:39:37Z

[-- Attachment #1: Type: text/plain, Size: 8264 bytes --]

Hi Louis,

Thanks for your patches.

I am not sure to understand your first point.

- an extra partition that has a specific label (or uuid) is doomed with the
> associated variable. The partition cannot be configured unless the label
> (or uuid) is changed.

From my comprehension, an extra partition that has a name (
--sourceparams="name=foo") is also doomed with the associated variable (
IMAGE_EXTRA_PARTITION_FILES_sourceparams_foo). So, this does not resolve
the issue for me.
Let me know if I misunderstood your point.

- two partitions with same label from distincts .wks cannot have different
> content.

I agree. I think this is currently possible if you set the variable based
on the WKS file, but this adds unnecessary complexity to the configuration.

For example:
> an image may define:
> IMAGE_EXTRA_PARTITION_FILES_sourceparams_foo = "bar.conf"
> and the .wks line have line:
> part --source extra_partition --sourceparams "name=foo"

Since the source parameter is "name", perhaps the suffix "name" instead of
"sourceparams" would be more intuitive ? For example,
IMAGE_EXTRA_PARTITION_FILES_name_foo.

I think it is great to have another way to select the partition
independently of the label, uuid or partname.

Thanks,

Pierre-Loup

On Wed, Jan 7, 2026 at 11:41 AM Louis Rannou via B4 Relay <
devnull+louis.rannou.non.se.com@kernel.org> wrote:

> From: Louis Rannou <louis.rannou@non.se.com>
>
> The current extra_partition plugin uses predictable variable names (the
> configuration must predict the image partition label or uuid). This has two
> inconveniences:
>
> - an extra partition that has a specific label (or uuid) is doomed with the
> associated variable. The partition cannot be configured unless the label
> (or uuid) is changed.
> - two partitions with same label from distincts .wks cannot have different
> content.
>
> This allows the new suffix _sourceparams_foo to be appended to
> IMAGE_EXTRA_PARTITION_FILES. This variable will be preferred whenever the
> .wks specifies a name in the --sourceparams option.
>
> For example:
> an image may define:
> IMAGE_EXTRA_PARTITION_FILES_sourceparams_foo = "bar.conf"
> and the .wks line have line:
> part --source extra_partition --sourceparams "name=foo"
>
> Signed-off-by: Louis Rannou <louis.rannou@non.se.com>
> ---
> meta/lib/oeqa/selftest/cases/wic.py | 16 ++++++++++-----
> scripts/lib/wic/plugins/source/extra_partition.py | 24
> +++++++++++++++++------
> 2 files changed, 29 insertions(+), 11 deletions(-)
>
> diff --git a/meta/lib/oeqa/selftest/cases/wic.py
> b/meta/lib/oeqa/selftest/cases/wic.py
> index 55fb8dfd1b..542ce6fb05 100644
> --- a/meta/lib/oeqa/selftest/cases/wic.py
> +++ b/meta/lib/oeqa/selftest/cases/wic.py
> @@ -1657,6 +1657,7 @@ INITRAMFS_IMAGE = "core-image-initramfs-boot"
> def test_extra_partition_plugin(self):
> """Test extra partition plugin"""
> config = dedent("""\
> + IMAGE_EXTRA_PARTITION_FILES_sourceparams-foo = "bar.conf"
> IMAGE_EXTRA_PARTITION_FILES_label-foo = "bar.conf;foo.conf"
>
> IMAGE_EXTRA_PARTITION_FILES_uuid-e7d0824e-cda3-4bed-9f54-9ef5312d105d =
> "bar.conf;foobar.conf bar2.conf;foobar2.conf bar3.conf bar4.conf"
> IMAGE_EXTRA_PARTITION_FILES = "foo/*"
> @@ -1688,9 +1689,13 @@ INITRAMFS_IMAGE = "core-image-initramfs-boot"
>
> try:
> with NamedTemporaryFile("w", suffix=".wks") as wks:
> - wks.writelines(['part / --source extra_partition --ondisk
> sda --label foo --align 4 --size 5M\n',
> - 'part / --source extra_partition --ondisk
> sda --fstype=vfat --uuid e7d0824e-cda3-4bed-9f54-9ef5312d105d --align 4
> --size 5M\n',
> - 'part / --source extra_partition --ondisk
> sda --fstype=ext4 --label bar --align 4 --size 5M\n'])
> + wks.writelines([
> + 'part / --source extra_partition --ondisk sda
> --sourceparams "name=foo" --align 4 --size 5M\n',
> + 'part / --source extra_partition --ondisk sda --label
> foo --align 4 --size 5M\n',
> + 'part / --source extra_partition --ondisk sda
> --fstype=vfat --uuid e7d0824e-cda3-4bed-9f54-9ef5312d105d --align 4 --size
> 5M\n',
> + 'part / --source extra_partition --ondisk sda
> --fstype=ext4 --label bar --align 4 --size 5M\n',
> + 'bootloader --ptable gpt\n',
> + ])
> wks.flush()
> _, wicimg = self._get_wic(wks.name)
>
> @@ -1698,14 +1703,15 @@ INITRAMFS_IMAGE = "core-image-initramfs-boot"
> partls = result.output.split('\n')[1:]
>
> # Assert the number of partitions is correct
> - self.assertEqual(3, len(partls), msg="Expect 3 partitions,
> not %s" % result.output)
> + self.assertEqual(4, len(partls), msg="Expect 4 partitions,
> not %s" % result.output)
>
> # Fstype column from 'wic ls' should be fstype as given in
> the part command
> - for part_id, part_fs in enumerate(["fat16", "fat16", "ext4"]):
> + for part_id, part_fs in enumerate(["fat16", "fat16", "fat16",
> "ext4"]):
> self.assertIn(part_fs, partls[part_id])
>
> # For each partition, assert expected files exist
> for part, part_glob in enumerate([
> + ["bar.conf"],
> ["foo.conf"],
> ["foobar.conf", "foobar2.conf", "bar3.conf", "bar4.conf"],
> ["bar.conf", "bar2.conf"],
> diff --git a/scripts/lib/wic/plugins/source/extra_partition.py
> b/scripts/lib/wic/plugins/source/extra_partition.py
> index d370b0107e..f9410388fa 100644
> --- a/scripts/lib/wic/plugins/source/extra_partition.py
> +++ b/scripts/lib/wic/plugins/source/extra_partition.py
> @@ -18,15 +18,17 @@ class ExtraPartitionPlugin(SourcePlugin):
> The plugin supports:
> - Glob pattern matching for file selection.
> - File renaming.
> - - Suffixes to specify the target partition (by label, UUID, or
> partname),
> - enabling multiple extra partitions to coexist.
> + - Suffixes to specify the target partition (by params-name, label,
> UUID,
> + or partname), enabling multiple extra partitions to coexist.
>
> For example:
>
> + IMAGE_EXTRA_PARTITION_FILES_sourceparams-name =
> "bar.conf;foo.conf"
> IMAGE_EXTRA_PARTITION_FILES_label-foo = "bar.conf;foo.conf"
>
> IMAGE_EXTRA_PARTITION_FILES_uuid-e7d0824e-cda3-4bed-9f54-9ef5312d105d =
> "bar.conf;foobar.conf"
> IMAGE_EXTRA_PARTITION_FILES = "foo/*"
> WICVARS:append = "\
> + IMAGE_EXTRA_PARTITION_FILES_sourceparams-name \
> IMAGE_EXTRA_PARTITION_FILES_label-foo \
>
> IMAGE_EXTRA_PARTITION_FILES_uuid-e7d0824e-cda3-4bed-9f54-9ef5312d105d \
> "
> @@ -53,11 +55,21 @@ class ExtraPartitionPlugin(SourcePlugin):
> raise WicError("Couldn't find DEPLOY_DIR_IMAGE, exiting")
>
> extra_files = None
> - for (fmt, id) in (("_uuid-%s", part.uuid), ("_label-%s",
> part.label), ("_part-name-%s", part.part_name), (None, None)):
> - if fmt:
> - var = fmt % id
> - else:
> + for (fmt, part_id) in (
> + ("_sourceparams-%s", source_params.get("name")),
> + ("_uuid-%s", part.uuid),
> + ("_label-%s", part.label),
> + ("_part-name-%s", part.part_name),
> + (None, None)
> + ):
> + if fmt is None:
> var = ""
> + elif part_id is not None:
> + var = fmt % part_id
> + else:
> + continue
> +
> + logger.debug("Looking for extra files in %s" %
> cls.image_extra_partition_files_var_name + var)
> extra_files =
> get_bitbake_var(cls.image_extra_partition_files_var_name + var)
> if extra_files is not None:
> break
>
> --
> 2.43.0
>
>
>

[-- Attachment #2: Type: text/html, Size: 10938 bytes --]