mbox series

[v6,0/6] wic: ship the tools it invokes

Message ID 20260802021000.2886095-1-twoerner@gmail.com
Headers show
Series wic: ship the tools it invokes | expand

Message

Trevor Woerner Aug. 2, 2026, 2:09 a.m. UTC
wic shells out to a range of host tools but does not declare them, so
wherever it is installed as a package it works only by chance depending
on what the host has installed. The do_image_wic task does not have that
problem: image_types_wic.bbclass makes the image recipe depend on the
-native recipe of each tool, so they are all in the image's own native
sysroot by the time wic runs. Nothing outside that task gets the same
treatment.

Patch 1 narrows wic-tools to staging wic's host tools: the target
bootloader firmware (syslinux, grub-efi, systemd-boot) it depended on
for the wic oe-selftest is now built by that oe-selftest instead. Which
firmware is needed depends on the plugins a .wks uses, so it belongs to
whoever supplies the .wks, not to wic-tools. Images already work that
way through WKS_FILE_DEPENDS in image_types_wic.bbclass, and now the
oe-selftest does too.

Patch 2 removes a dependency that outlived its reason. wic gained
virtual/cross-binutils in 2022 because its EFI boot image plugin
assembled unified kernel images and needed cross-objcopy. That plugin
stopped doing so in 2024 and now points at uki.bbclass, which declares
virtual/cross-binutils itself. Nothing wic runs invokes objcopy any
more.

Patch 3 gives the tool list a single home and uses it. wic declares the
host tools it runs as RDEPENDS, so they are installed alongside it in
every variant that packages it; and the two other copies of that list go
away in the same patch. wic-tools and image_types_wic.bbclass had
written it out separately and drifted apart; both now just depend on
wic-native, and native.bbclass's do_populate_sysroot[rdeptask] stages
everything wic runtime-depends on. Three things stay written out.
cdrtools has only a native recipe in oe-core, so there is no package a
target or nativesdk wic could name, even though wic does run mkisofs;
the build host gets it from wic-tools and from WKS_FILE_DEPENDS. grub is
bootloader territory, which belongs to whatever drives wic. pseudo is
wic-tools staging what the oe-selftest needs.

Patches 4 and 5 are follow-on cleanups of the wic oe-selftest: drop a
dead in-tree wic lookup, and drop the redundant per-test PATH overrides
that duplicated what the test setup already establishes.

Patch 6 fixes a dependency that has been on the wrong axis since 2019:
an image depends on syslinux-native when the build host is x86, but it
is the target that decides whether a .wks needs it, so an x86 image
built on a non-x86 host ends up with the bootloader but not the
installer. That is bug 16383, which carries the full history:
https://bugzilla.yoctoproject.org/show_bug.cgi?id=16383

changes in v6:
- new patch 2: drop the obsolete virtual/cross-binutils dependency from
  wic-tools and image_types_wic.bbclass. It comes before the tool-list
  patch so that patch does not have to describe wic-tools as needing
  binutils only for it to be removed shortly afterwards.
- drop the shared conf/wic-helper-tools.inc that v5 added. Review
  pointed out that once wic has the RDEPENDS, a consumer can just depend
  on wic-native and let do_populate_sysroot[rdeptask] do the rest, which
  is true and removes the need for a list to keep in sync. The tool list
  now lives only in the wic recipe.
- the tool list is now defined and used in one patch rather than two:
  wic gets the RDEPENDS, and image_types_wic.bbclass and wic-tools take
  the tools from wic-native, together. Images still gain tar-native and
  util-linux-native relative to master, which was the drift v5 was
  fixing.
- retitle the syslinux patch with an image_types_wic prefix, and gate
  WKS_FILE_DEPENDS_DEFAULT with target-arch appends now that the shared
  variable is gone. wic-tools keeps the arch-gated DEPENDS it already
  had on master.

changes in v5:
- the SDK_FEATURES half of the v4 series (patches 5 to 10) is not here.
  Reworking it to resolve features at the class level, as review asked,
  turned it into a larger piece of work than the wic changes it was
  travelling with, so it is being finished and sent as its own series.
- new patch: one shared list of the tools wic runs, replacing the three
  copies that had drifted apart. Images gain tar-native and
  util-linux-native, which only wic-tools staged before.
- new patch: gate syslinux-native on the target rather than the build
  host [YOCTO #13276]
- wic RDEPENDS patch: drop the bootloader (grub, syslinux) RDEPENDS
  entirely; wic declares only the host tools it runs. The bootloader
  firmware wic copies into an image is the responsibility of whatever
  drives wic (the oe-selftest, and image_types_wic.bbclass via
  WKS_FILE_DEPENDS), not of the wic package. This also removes the
  arch-gating that the v4 grub/syslinux RDEPENDS required.
- drastically trimmed the commit messages and in-tree comments
  throughout the series

changes in v4:
- new patch 1: move the target bootloader firmware out of wic-tools and
  stage it from the wic oe-selftest instead, so wic-tools carries only
  the host tools wic runs
- new selftest cleanups (drop the dead COREBASE/scripts wic lookup and
  the redundant per-test PATH overrides)

changes in v3:
- list the tools on all variants rather than only the nativesdk variant

changes in v2:
- dropped the wic-tools.inc refactor; folded the tool list into the wic
  recipe
- reworked the buildtools-extended-tarball change into a plain removal

Trevor Woerner (6):
  wic-tools: drop the target bootloader firmware
  image_types_wic, wic-tools: drop the obsolete cross-binutils
    dependency
  wic: add runtime dependencies on the tools it invokes
  oeqa/selftest/wic: drop dead COREBASE/scripts wic lookup
  oeqa/selftest/wic: drop redundant per-test PATH overrides
  image_types_wic: gate syslinux-native on the target, not the build
    host

 meta/classes-recipe/image_types_wic.bbclass |  10 +-
 meta/lib/oeqa/selftest/cases/wic.py         | 842 +++++++++-----------
 meta/recipes-core/meta/wic-tools.bb         |  13 +-
 meta/recipes-support/wic/wic_0.3.1.bb       |  12 +
 4 files changed, 414 insertions(+), 463 deletions(-)