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

Louis Rannou
2026-01-08T09:00:59Z

Hello Pierre-Loup,

Thanks for the review

> 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.

Here the name can be customized without impacting the final image. While most of the time you wish the label to keep standard (data, config, home... but not my_specific_name). Then if you need your partition to have label data, you will not be able to select an other variable than IMAGE_EXTRA_PARTITION_FILES_label-data.

>
> - 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.

Fine for me !

>
> 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
> >
> >
> >
>