mbox series

[v2,0/1] wic: extra partition plugin

Message ID 20250925072203.3490596-1-pierre-loup.gosse@smile.fr
Headers show
Series wic: extra partition plugin | expand

Message

Pierre-loup GOSSE Sept. 25, 2025, 7:22 a.m. UTC
From: Pierre-Loup GOSSE <pierre-loup.gosse@smile.fr>

Some files are not part of the root filesystem and must be installed in a
separate partition. This is already handled for boot files by the
bootimg_partition plugin and its IMAGE_BOOT_FILES BitBake variable.

This patch introduces a similar approach for generic "extra" files. A new
extra_partition plugin is added, which populates a partition with files
listed in the new IMAGE_EXTRA_FILES BitBake variable. Like the
bootimg_partition plugin, files should be deployed to the DEPLOY_DIR_IMAGE
directory.

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, similar to the
   bootimg_partition plugin.

For example, with the following (simplified) wks file:
  part / --source extra_partition --fstype=ext4 --label foo --size 5M
  part / --source extra_partition --fstype=ext4 --uuid e7d0824e-cda3-4bed-9f54-9ef5312d105d --size 5M
  part / --source extra_partition --fstype=ext4 --label bar --size 5M

And this configuration:
  IMAGE_EXTRA_FILES_label-foo = "bar.conf;foo.conf"
  IMAGE_EXTRA_FILES_uuid-e7d0824e-cda3-4bed-9f54-9ef5312d105d = "bar.conf;foobar.conf"
  IMAGE_EXTRA_FILES = "foo/*"
  WICVARS:append = "\
      IMAGE_EXTRA_FILES_label-foo \
      IMAGE_EXTRA_FILES_uuid-e7d0824e-cda3-4bed-9f54-9ef5312d105d \
  "

The file bar.conf is installed as foo.conf in the first partition, as
foobar.conf in the second partition, and the last partition installs all
files from the foo directory.

Pierre-Loup GOSSE (1):
  wic: extra partition plugin

 meta/classes-recipe/image_types_wic.bbclass   |   1 +
 meta/lib/oeqa/selftest/cases/wic.py           |  41 ++++++
 .../lib/wic/plugins/source/extra_partition.py | 134 ++++++++++++++++++
 3 files changed, 176 insertions(+)
 create mode 100644 scripts/lib/wic/plugins/source/extra_partition.py

Comments

Mathieu Dubois-Briand Sept. 26, 2025, 7:07 a.m. UTC | #1
On Thu Sep 25, 2025 at 9:22 AM CEST, Pierre-loup GOSSE via lists.openembedded.org wrote:
> From: Pierre-Loup GOSSE <pierre-loup.gosse@smile.fr>
>
> Some files are not part of the root filesystem and must be installed in a
> separate partition. This is already handled for boot files by the
> bootimg_partition plugin and its IMAGE_BOOT_FILES BitBake variable.
>
> This patch introduces a similar approach for generic "extra" files. A new
> extra_partition plugin is added, which populates a partition with files
> listed in the new IMAGE_EXTRA_FILES BitBake variable. Like the
> bootimg_partition plugin, files should be deployed to the DEPLOY_DIR_IMAGE
> directory.
>
> 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, similar to the
>    bootimg_partition plugin.
>
> For example, with the following (simplified) wks file:
>   part / --source extra_partition --fstype=ext4 --label foo --size 5M
>   part / --source extra_partition --fstype=ext4 --uuid e7d0824e-cda3-4bed-9f54-9ef5312d105d --size 5M
>   part / --source extra_partition --fstype=ext4 --label bar --size 5M
>
> And this configuration:
>   IMAGE_EXTRA_FILES_label-foo = "bar.conf;foo.conf"
>   IMAGE_EXTRA_FILES_uuid-e7d0824e-cda3-4bed-9f54-9ef5312d105d = "bar.conf;foobar.conf"
>   IMAGE_EXTRA_FILES = "foo/*"
>   WICVARS:append = "\
>       IMAGE_EXTRA_FILES_label-foo \
>       IMAGE_EXTRA_FILES_uuid-e7d0824e-cda3-4bed-9f54-9ef5312d105d \
>   "
>
> The file bar.conf is installed as foo.conf in the first partition, as
> foobar.conf in the second partition, and the last partition installs all
> files from the foo directory.
>
> Pierre-Loup GOSSE (1):
>   wic: extra partition plugin
>
>  meta/classes-recipe/image_types_wic.bbclass   |   1 +
>  meta/lib/oeqa/selftest/cases/wic.py           |  41 ++++++
>  .../lib/wic/plugins/source/extra_partition.py | 134 ++++++++++++++++++
>  3 files changed, 176 insertions(+)
>  create mode 100644 scripts/lib/wic/plugins/source/extra_partition.py

Hi Pierre-Loup,

Thanks for your patch.

It looks like this is breaking the wic.Wic2.test_image_env selftest:

2025-09-25 18:08:01,857 - oe-selftest - INFO - 9: 80/93 623/638 (54.59s) (0 failed) (wic.Wic2.test_image_env)
2025-09-25 18:08:01,858 - oe-selftest - INFO - testtools.testresult.real._StringException: Traceback (most recent call last):
  File "/srv/pokybuild/yocto-worker/oe-selftest-armhost/build/meta/lib/oeqa/selftest/cases/wic.py", line 1030, in test_image_env
    self.assertTrue(var in content, "%s is not in .env file" % var)
    ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/case.py", line 744, in assertTrue
    raise self.failureException(msg)
AssertionError: False is not true : IMAGE_EXTRA_FILES is not in .env file
...
2025-09-25 18:18:17,328 - oe-selftest - INFO - RESULTS - wic.Wic2.test_image_env: FAILED (54.59s)

Can you make sure the test passes?

Thanks,
Mathieu