<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux/meta-virtualization.git, branch master</title>
<subtitle>Mirror of git.yoctoproject.org/meta-virtualization</subtitle>
<id>https://git.enea.com/cgit/linux/meta-virtualization.git/atom?h=master</id>
<link rel='self' href='https://git.enea.com/cgit/linux/meta-virtualization.git/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.enea.com/cgit/linux/meta-virtualization.git/'/>
<updated>2026-05-12T12:52:59+00:00</updated>
<entry>
<title>conf: add kvm-host.conf configuration fragment</title>
<updated>2026-05-12T12:52:59+00:00</updated>
<author>
<name>Bruce Ashfield</name>
<email>bruce.ashfield@gmail.com</email>
</author>
<published>2026-05-12T12:52:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.enea.com/cgit/linux/meta-virtualization.git/commit/?id=3260eee09c593201455e866c5ad5cf5c5b5da33f'/>
<id>urn:sha1:3260eee09c593201455e866c5ad5cf5c5b5da33f</id>
<content type='text'>
Building kvm-image-minimal fails without the 'kvm' DISTRO_FEATURE,
requiring users to manually add it to local.conf. Every other
virtualization platform (Xen, Docker, Podman, k3s, containerd) already
has a composable configuration fragment in conf/distro/include/ that
can be included with a single require line.

Add kvm-host.conf following the same pattern as xen-host.conf: a pure
delta fragment that appends the kvm DISTRO_FEATURE. Composable with
any container profile and the base meta-virt-host.conf.

Signed-off-by: Bruce Ashfield &lt;bruce.ashfield@gmail.com&gt;
</content>
</entry>
<entry>
<title>xen: fix buildpaths QA errors for hypervisor EFI and debug packages</title>
<updated>2026-05-12T12:52:48+00:00</updated>
<author>
<name>Bruce Ashfield</name>
<email>bruce.ashfield@gmail.com</email>
</author>
<published>2026-05-12T12:52:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.enea.com/cgit/linux/meta-virtualization.git/commit/?id=88a1c197f845b3e63458c90a48f88177d9f7e986'/>
<id>urn:sha1:88a1c197f845b3e63458c90a48f88177d9f7e986</id>
<content type='text'>
Xen's hypervisor Makefile overrides CFLAGS entirely with its own flags
(nostdinc, fno-builtin, etc.), so OE's DEBUG_PREFIX_MAP flags added via
CFLAGS never reach the hypervisor compilation. The existing prefix map
entries in xen.inc appeared to work only because sstate was caching
pre-built packages — a fresh rebuild exposes the embedded TMPDIR paths
in the EFI binary and debug symbols.

Inject the prefix maps through EXTRA_CFLAGS_XEN_CORE, which is Xen's
own mechanism for accepting additional compiler flags and is already
passed through to oe_runmake. This fixes the EFI binary paths.

The xen-syms debug binary retains one source path in .debug_str from
the linker/assembly stage, which does not honor the C compiler's
-fdebug-prefix-map. Since xen-syms is only shipped in the -dbg package
(not a deployment target), skip buildpaths for xen-dbg. This is an
optional QA test — not in CHECKLAYER_REQUIRED_TESTS — so it has no
impact on yocto-check-layer compatibility.

Signed-off-by: Bruce Ashfield &lt;bruce.ashfield@gmail.com&gt;
</content>
</entry>
<entry>
<title>libvirt: fix python3 compatibility in hook_support.py</title>
<updated>2026-05-11T20:15:08+00:00</updated>
<author>
<name>Massimiliano Minella</name>
<email>massimiliano.minella@se.com</email>
</author>
<published>2026-05-04T09:31:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.enea.com/cgit/linux/meta-virtualization.git/commit/?id=fb1d9123351c86d7804e78e1518788913fb7c672'/>
<id>urn:sha1:fb1d9123351c86d7804e78e1518788913fb7c672</id>
<content type='text'>
By default Popen expects all the streams to be bytes-like objects but,
in the Popen.communicate() function call, the "input" argument is a
string, making the call fail with the error:

qemu hook error: a bytes-like object is required, not 'str'

Fix the error by setting text mode to True in the subprocess creation.

Also fix the "SyntaxWarning: invalid escape sequence '\w'" in the regex
used to match script names.

Signed-off-by: Massimiliano Minella &lt;massimiliano.minella@se.com&gt;
Signed-off-by: Bruce Ashfield &lt;bruce.ashfield@gmail.com&gt;
</content>
</entry>
<entry>
<title>image-oci: don't preserve ownership in directories/files/host layer copies</title>
<updated>2026-05-11T20:11:22+00:00</updated>
<author>
<name>Tim Orling</name>
<email>tim.orling@konsulko.com</email>
</author>
<published>2026-05-02T21:01:40+00:00</published>
<link rel='alternate' type='text/html' href='https://git.enea.com/cgit/linux/meta-virtualization.git/commit/?id=f7eb4abba27a54c06432cca45f817f21f5754532'/>
<id>urn:sha1:f7eb4abba27a54c06432cca45f817f21f5754532</id>
<content type='text'>
The multi-layer 'directories', 'files', and 'host' branches in IMAGE_CMD:oci
copy delta content into the OCI bundle rootfs with 'cp -a'. 'cp -a' implies
'--preserve=all', which calls lchown() on the destination to copy ownership
from the source. When a directories/files layer copies a symbolic link whose
target does not exist at build time (for example, the '/dev/stdout' and
'/dev/stderr' log forwarding symlinks used by the official nginx Docker
image), lchown() can return EINVAL under pseudo and 'cp' aborts with:

    cp: failed to preserve ownership for .../var/log/nginx/access.log: Invalid argument

failing the whole do_image_oci task.

The single-layer rootfs copy already handles this correctly:

    cp -r -a --no-preserve=ownership ${IMAGE_ROOTFS}/* $image_bundle_name/rootfs

and the multi-layer 'packages' branch uses 'rsync -a --no-owner --no-group'
for the same reason. Bring the three remaining cp -a sites in line by adding
'--no-preserve=ownership'. Ownership inside an OCI image is set by umoci
based on the image config and source ownership has no meaning for symlinks
to runtime device nodes anyway, so dropping preservation is the correct
behaviour.

Reproduce: declare a directories: layer that copies a path containing a
symlink to '/dev/stdout' or '/dev/stderr' (e.g. a postprocess that creates
/var/log/nginx/{access,error}.log -&gt; /dev/{stdout,stderr} to mirror the
upstream nginx Docker image).

Signed-off-by: Tim Orling &lt;tim.orling@konsulko.com&gt;
Signed-off-by: Bruce Ashfield &lt;bruce.ashfield@gmail.com&gt;
</content>
</entry>
<entry>
<title>podlet: add podlet utility</title>
<updated>2026-05-11T20:11:11+00:00</updated>
<author>
<name>Patrick Vogelaar</name>
<email>patrick.vogelaar@belden.com</email>
</author>
<published>2026-04-30T07:32:36+00:00</published>
<link rel='alternate' type='text/html' href='https://git.enea.com/cgit/linux/meta-virtualization.git/commit/?id=7ab697991c867dfd9da5704e3ca71f633faf476b'/>
<id>urn:sha1:7ab697991c867dfd9da5704e3ca71f633faf476b</id>
<content type='text'>
Podlet generates Podman Quadlet files from a Podman command, compose file, or existing object.

Signed-off-by: Patrick Vogelaar &lt;patrick.vogelaar@belden.com&gt;
Signed-off-by: Bruce Ashfield &lt;bruce.ashfield@gmail.com&gt;
</content>
</entry>
<entry>
<title>vcontainer: add BBMASK for parse savings and suppress layer warnings</title>
<updated>2026-05-10T20:15:50+00:00</updated>
<author>
<name>Bruce Ashfield</name>
<email>bruce.ashfield@gmail.com</email>
</author>
<published>2026-05-10T20:15:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.enea.com/cgit/linux/meta-virtualization.git/commit/?id=18c7f71383d650a97e28c95e3b61445cb6849bd4'/>
<id>urn:sha1:18c7f71383d650a97e28c95e3b61445cb6849bd4</id>
<content type='text'>
The initial vcontainer distro had no BBMASK at all, making it
effectively poky with fewer DISTRO_FEATURES. Every multiconfig parsed
the entire recipe universe even though container image builds only
need a small subset. With 4+ multiconfigs, the parse overhead is
significant.

Add vcontainer-bbmask.inc as a lighter alternative to vruntime's
aggressive BBMASK. It masks the same categories irrelevant to any
container/VM build (graphics, multimedia, desktop, virtualization
platforms, orchestration tools, meta-python, meta-filesystems,
meta-webserver) but keeps the OCI tooling that vruntime blocks:
umoci, container-registry, image recipes, sloci, oci-image-tools.

Masking entire layers (meta-python, meta-filesystems, meta-webserver)
produces BBFILE_PATTERN warnings because the layers are registered in
bblayers.conf (shared with the main build) but have zero recipes after
masking. BitBake provides BBFILE_PATTERN_IGNORE_EMPTY_&lt;collection&gt;
to suppress this, but checks it on self.data (the base datastore),
not per-multiconfig datastores. Setting it in the distro config has
no effect. Move the suppression to meta-virt-host.conf which is
included by the main build's local.conf and therefore visible to
the base datastore.

Signed-off-by: Bruce Ashfield &lt;bruce.ashfield@gmail.com&gt;
</content>
</entry>
<entry>
<title>container-registry: add multi-arch OCI push support and tests</title>
<updated>2026-05-10T13:58:45+00:00</updated>
<author>
<name>Bruce Ashfield</name>
<email>bruce.ashfield@gmail.com</email>
</author>
<published>2026-05-10T13:58:45+00:00</published>
<link rel='alternate' type='text/html' href='https://git.enea.com/cgit/linux/meta-virtualization.git/commit/?id=cbe004439cae170ad5455fbb881495795e42bf5a'/>
<id>urn:sha1:cbe004439cae170ad5455fbb881495795e42bf5a</id>
<content type='text'>
The registry push script (container-registry-index.bb) treated all OCI
directories as single-arch, calling 'skopeo copy oci:&lt;dir&gt;' which fails
with "more than one image in oci, choose an image" when the directory
contains a multi-arch image index. The original push implementation
predated multi-arch OCI support and only handled the single-manifest
case.

Detect multi-arch OCI Image Index directories (both flat and nested
layouts) in the direct-path push mode and use 'skopeo copy --all' to
push the entire manifest list to the registry in one operation. This
preserves the multi-platform structure so that clients pulling from the
registry automatically get the correct architecture.

Also strip the '-multiarch' suffix from directory names when deriving
the registry image name, so container-base-multiarch-multiarch-oci
pushes as 'container-base' rather than 'container-base-multiarch'.

Add build-profiles.md documentation for the vcontainer distro, container
multiconfigs, and multi-arch container build workflow.

Add test_vcontainer_distro.py with 54 tests across three tiers:
- Tier 1: Static file assertions (vruntime-base.inc, vcontainer.conf,
  multiconfigs, bbclass defaults, recipe structure)
- Tier 2: Cross-file consistency (shared base, distro-MC alignment,
  bbclass-to-multiconfig file matching)
- Tier 3: Build output verification (OCI index structure, platform
  entries, blob integrity, manifest validation)

Signed-off-by: Bruce Ashfield &lt;bruce.ashfield@gmail.com&gt;
</content>
</entry>
<entry>
<title>vcontainer-common: support nested OCI layout and fix vimport shell errors</title>
<updated>2026-05-10T13:58:27+00:00</updated>
<author>
<name>Bruce Ashfield</name>
<email>bruce.ashfield@gmail.com</email>
</author>
<published>2026-05-10T13:58:27+00:00</published>
<link rel='alternate' type='text/html' href='https://git.enea.com/cgit/linux/meta-virtualization.git/commit/?id=af92db59a7d2367528bc86cb37d969e87ef36659'/>
<id>urn:sha1:af92db59a7d2367528bc86cb37d969e87ef36659</id>
<content type='text'>
The multi-arch OCI functions (is_oci_image_index, get_oci_platforms,
select_platform_manifest) only checked index.json directly for platform
information. With the skopeo-compatible nested OCI layout — where
index.json references a single image index blob that in turn contains
the per-platform manifests — the functions failed to detect multi-arch
images because index.json no longer contains platform entries.

Add _resolve_oci_platform_file() helper that handles both layouts:
- Flat: platform info directly in index.json (legacy/simple case)
- Nested: index.json → image index blob → platform manifests

All three multi-arch functions now use this single helper, eliminating
the layout resolution logic that would otherwise be duplicated in each.

Also fixes two issues in the vimport case block:
- 'local' keyword used outside a function (bash error on line 1879).
  The vimport handler is in a case statement in the main script body,
  not inside a function, so 'local' is invalid. The original multi-arch
  code was written assuming it would be inside a function.
- OCI_SELECTED_PLATFORM was blank in output because select_platform_manifest
  sets it inside a $() subshell, where variable assignments are lost.
  Use normalize_arch_to_oci directly for the display message instead.

Signed-off-by: Bruce Ashfield &lt;bruce.ashfield@gmail.com&gt;
</content>
</entry>
<entry>
<title>oci-multiarch: fix MC defaults, deploy dependency, and OCI layout</title>
<updated>2026-05-10T13:58:10+00:00</updated>
<author>
<name>Bruce Ashfield</name>
<email>bruce.ashfield@gmail.com</email>
</author>
<published>2026-05-10T13:58:10+00:00</published>
<link rel='alternate' type='text/html' href='https://git.enea.com/cgit/linux/meta-virtualization.git/commit/?id=3d431848b32caae67b9dcbf7fe04f08ddcd448b5'/>
<id>urn:sha1:3d431848b32caae67b9dcbf7fe04f08ddcd448b5</id>
<content type='text'>
Three issues prevented oci-multiarch.bbclass from producing usable
multi-architecture container images:

1. MC defaults pointed to vruntime-* multiconfigs, whose BBMASK blocks
   OCI tooling. Changed to container-* multiconfigs which use the new
   vcontainer distro without BBMASK.

2. mcdepends targeted do_image_oci, but the OCI output is only deployed
   to deploy/images/ by the later do_image_complete task. The bbclass
   then failed to find the OCI directory at the expected deploy path.
   The original implementation assumed do_image_oci was the final step,
   but OE-core's image pipeline has a separate deploy phase.

3. The OCI Image Index was written directly into index.json with
   multiple manifest entries. This is valid per the OCI spec but skopeo
   requires index.json to reference a single entry when there are
   multiple images. The fix writes the multi-platform image index as a
   blob in blobs/sha256/ and has index.json reference it with a single
   entry of mediaType application/vnd.oci.image.index.v1+json. This
   nested layout is what tools like buildah and crane produce for
   multi-arch images, and is required for 'skopeo copy --all' to work.

Also adds container-base-multiarch.bb recipe that wires up container-base
for aarch64 + x86_64 builds via the oci-multiarch class.

Signed-off-by: Bruce Ashfield &lt;bruce.ashfield@gmail.com&gt;
</content>
</entry>
<entry>
<title>vcontainer: add OCI builder distro with shared base</title>
<updated>2026-05-10T13:57:50+00:00</updated>
<author>
<name>Bruce Ashfield</name>
<email>bruce.ashfield@gmail.com</email>
</author>
<published>2026-05-10T13:57:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.enea.com/cgit/linux/meta-virtualization.git/commit/?id=84e81eea1a581e10528b2ba95f9c34ee67c8ad3c'/>
<id>urn:sha1:84e81eea1a581e10528b2ba95f9c34ee67c8ad3c</id>
<content type='text'>
The oci-multiarch.bbclass was dead code because vruntime's BBMASK blocks
the OCI tooling (umoci, skopeo) needed to build container images. We
could not simply use the vruntime multiconfigs for OCI image builds
because the aggressive recipe masking that keeps vruntime rootfs minimal
also removes the packages needed for container image creation.

Rather than maintaining two independent distro configs with duplicated
DISTRO_FEATURES, extract the common configuration into a shared base
fragment and create a new distro that omits the BBMASK.

Changes:
- Extract vruntime-base.inc from vruntime.conf with shared settings:
  stripped DISTRO_FEATURES, opted-out features, native class overrides
- Simplify vruntime.conf to require vruntime-base.inc, keeping only
  VM-specific settings (BBMASK, busybox init, ptest disable)
- Add vcontainer.conf: requires the same shared base but without BBMASK,
  giving OCI tooling full access to the package set
- Add container-aarch64 and container-x86-64 multiconfigs using the
  vcontainer distro with separate TMPDIRs
- Add container multiconfigs to BBMULTICONFIG in meta-virt-host.conf
- Remove unused container.conf placeholder from 2022

IMAGE_FSTYPES is intentionally NOT set in vcontainer.conf because the
'oci' type requires image-oci.bbclass which only container image recipes
inherit. Setting it distro-wide breaks non-container images parsed under
this distro (e.g., core-image-multilib-example from meta-skeleton).

Signed-off-by: Bruce Ashfield &lt;bruce.ashfield@gmail.com&gt;
</content>
</entry>
</feed>
