<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux/meta-virtualization.git, branch container-cross-install</title>
<subtitle>Mirror of git.yoctoproject.org/meta-virtualization</subtitle>
<id>https://git.enea.com/cgit/linux/meta-virtualization.git/atom?h=container-cross-install</id>
<link rel='self' href='https://git.enea.com/cgit/linux/meta-virtualization.git/atom?h=container-cross-install'/>
<link rel='alternate' type='text/html' href='https://git.enea.com/cgit/linux/meta-virtualization.git/'/>
<updated>2026-02-06T03:54:31+00:00</updated>
<entry>
<title>container-cross-install: add tests and documentation for custom service files</title>
<updated>2026-02-06T03:54:31+00:00</updated>
<author>
<name>Bruce Ashfield</name>
<email>bruce.ashfield@gmail.com</email>
</author>
<published>2026-02-06T03:54:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.enea.com/cgit/linux/meta-virtualization.git/commit/?id=5aab0f92f1e774305c23802566d75922f65e0862'/>
<id>urn:sha1:5aab0f92f1e774305c23802566d75922f65e0862</id>
<content type='text'>
Add pytest tests to verify CONTAINER_SERVICE_FILE varflag support:

TestCustomServiceFileSupport (unit tests, no build required):
- test_bbclass_has_service_file_support
- test_bundle_class_has_service_file_support
- test_service_file_map_syntax
- test_install_custom_service_function

TestCustomServiceFileBoot (boot tests, require built image):
- test_systemd_services_directory_exists
- test_container_services_present
- test_container_service_enabled
- test_custom_service_content
- test_podman_quadlet_directory

Documentation updates:
- docs/container-bundling.md: Add "Custom Service Files" section with
  variable format, usage examples for both BUNDLED_CONTAINERS and
  container-bundle packages, and example .service/.container files
- tests/README.md: Add test class entries to structure diagram and
  "What the Tests Check" table

Signed-off-by: Bruce Ashfield &lt;bruce.ashfield@gmail.com&gt;
</content>
</entry>
<entry>
<title>container-cross-install: add CONTAINER_SERVICE_FILE support</title>
<updated>2026-02-06T03:54:16+00:00</updated>
<author>
<name>Bruce Ashfield</name>
<email>bruce.ashfield@gmail.com</email>
</author>
<published>2026-02-06T03:54:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.enea.com/cgit/linux/meta-virtualization.git/commit/?id=8c31b451c6f5a9d0bb526ee77f467e5b48846bb4'/>
<id>urn:sha1:8c31b451c6f5a9d0bb526ee77f467e5b48846bb4</id>
<content type='text'>
Add support for custom systemd service files (Docker) or Quadlet
container files (Podman) instead of auto-generated ones for container
autostart.

For containers requiring specific startup configuration (ports, volumes,
capabilities, dependencies), users can now provide custom service files
using the CONTAINER_SERVICE_FILE varflag:

  CONTAINER_SERVICE_FILE[container-name] = "${UNPACKDIR}/myservice.service"

For BUNDLED_CONTAINERS in image recipes:
  SRC_URI += "file://myapp.service"
  BUNDLED_CONTAINERS = "myapp-container:docker:autostart"
  CONTAINER_SERVICE_FILE[myapp-container] = "${UNPACKDIR}/myapp.service"

For container-bundle packages:
  SRC_URI = "file://myapp.service"
  CONTAINER_BUNDLES = "myapp-container:autostart"
  CONTAINER_SERVICE_FILE[myapp-container] = "${UNPACKDIR}/myapp.service"

Implementation:
- container-cross-install.bbclass: Add get_container_service_file_map()
  to build varflag map, install_custom_service() for BUNDLED_CONTAINERS,
  and install_custom_service_from_bundle() for bundle packages
- container-bundle.bbclass: Install custom service files to
  ${datadir}/container-bundles/${runtime}/services/

Signed-off-by: Bruce Ashfield &lt;bruce.ashfield@gmail.com&gt;
</content>
</entry>
<entry>
<title>image-oci: add host layer type and delta-only copying</title>
<updated>2026-02-05T21:37:24+00:00</updated>
<author>
<name>Bruce Ashfield</name>
<email>bruce.ashfield@gmail.com</email>
</author>
<published>2026-02-05T21:37:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.enea.com/cgit/linux/meta-virtualization.git/commit/?id=52a307475a13a92cd3025d94b26ee43b1b59fcbd'/>
<id>urn:sha1:52a307475a13a92cd3025d94b26ee43b1b59fcbd</id>
<content type='text'>
Add two enhancements to multi-layer OCI image support:

1. Delta-only copying for directories/files layers:
   - directories and files layers now only copy content that doesn't
     already exist in the bundle rootfs from earlier layers
   - Prevents duplication when a directories layer references paths
     that were already populated by a packages layer
   - Logs show "delta: N copied, M skipped" for visibility

2. New 'host' layer type for build machine content:
   - Copies files from the build machine filesystem (outside Yocto)
   - Format: name:host:source_path:dest_path
   - Multiple pairs: name:host:src1:dst1+src2:dst2
   - Emits warning at parse time about reproducibility impact
   - Fatal error if source path doesn't exist
   - Use case: deployment-specific config, certificates, keys that
     cannot be packaged in recipes

Example:
  OCI_LAYERS = "\
      base:packages:busybox \
      app:directories:/opt/myapp \
      certs:host:/etc/ssl/certs/ca.crt:/etc/ssl/certs/ca.crt \
  "

Signed-off-by: Bruce Ashfield &lt;bruce.ashfield@gmail.com&gt;
</content>
</entry>
<entry>
<title>vcontainer: enable incremental builds by default</title>
<updated>2026-02-05T20:46:17+00:00</updated>
<author>
<name>Bruce Ashfield</name>
<email>bruce.ashfield@gmail.com</email>
</author>
<published>2026-02-05T20:44:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.enea.com/cgit/linux/meta-virtualization.git/commit/?id=b6dca42bf3cbef42809ad2b04156dc274f1e6c41'/>
<id>urn:sha1:b6dca42bf3cbef42809ad2b04156dc274f1e6c41</id>
<content type='text'>
Previously, vcontainer recipes had [nostamp] flags that forced all
tasks to rebuild on every bitbake invocation, even when nothing changed.
This was added as a workaround for dependency tracking issues but caused
slow rebuild times.

Changes:
- Make [nostamp] conditional on VCONTAINER_FORCE_BUILD variable
- Default to normal stamp-based caching for faster incremental builds
- file-checksums on do_rootfs still tracks init script changes
- Add VCONTAINER_FORCE_BUILD status to the tarball build banner

To enable the old always-rebuild behavior (for debugging dependency
issues), set in local.conf:
  VCONTAINER_FORCE_BUILD = "1"

Signed-off-by: Bruce Ashfield &lt;bruce.ashfield@gmail.com&gt;
</content>
</entry>
<entry>
<title>vcontainer-tarball: build all architectures via single bitbake command</title>
<updated>2026-02-05T20:46:12+00:00</updated>
<author>
<name>Bruce Ashfield</name>
<email>bruce.ashfield@gmail.com</email>
</author>
<published>2026-02-05T20:44:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.enea.com/cgit/linux/meta-virtualization.git/commit/?id=efd9914e91aff5f84e0958979410172f4ce0a2a6'/>
<id>urn:sha1:efd9914e91aff5f84e0958979410172f4ce0a2a6</id>
<content type='text'>
Previously, building vcontainer-tarball required multiple bitbake
invocations or complex command lines to build both x86_64 and aarch64
blobs. This was a usability issue.

Changes:
- mcdepends now triggers builds for BOTH architectures automatically
- VCONTAINER_ARCHITECTURES defaults to "x86_64 aarch64" (was auto-detect)
- Add informational banner at parse time showing what will be built
- Fix duplicate sanity check messages when multiconfig is active

Usage is now simply:
  bitbake vcontainer-tarball

To build only one architecture, set in local.conf:
  VCONTAINER_ARCHITECTURES = "x86_64"

Signed-off-by: Bruce Ashfield &lt;bruce.ashfield@gmail.com&gt;
</content>
</entry>
<entry>
<title>vdkr-init: improve Docker daemon startup logging and error handling</title>
<updated>2026-01-24T20:53:46+00:00</updated>
<author>
<name>Bruce Ashfield</name>
<email>bruce.ashfield@gmail.com</email>
</author>
<published>2026-01-24T03:32:07+00:00</published>
<link rel='alternate' type='text/html' href='https://git.enea.com/cgit/linux/meta-virtualization.git/commit/?id=c625a5bf7b78795e1000d18eb6e2c0cc833c6a7c'/>
<id>urn:sha1:c625a5bf7b78795e1000d18eb6e2c0cc833c6a7c</id>
<content type='text'>
Improve debugging capabilities when Docker daemon fails to start:
- Log dockerd output to /var/log/docker.log instead of /dev/null
- Capture docker info exit code and output for diagnostics
- Show docker info error on every 10th iteration while waiting
- Include last docker info output and docker.log tail on failure
- Extend sleep on failure from 2s to 5s for log review

Signed-off-by: Bruce Ashfield &lt;bruce.ashfield@gmail.com&gt;
</content>
</entry>
<entry>
<title>packagegroups: add container build aggregates</title>
<updated>2026-01-24T20:53:46+00:00</updated>
<author>
<name>Bruce Ashfield</name>
<email>bruce.ashfield@gmail.com</email>
</author>
<published>2026-01-23T21:15:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.enea.com/cgit/linux/meta-virtualization.git/commit/?id=54197321d56ec4d008f524736513c5a35b1a8f47'/>
<id>urn:sha1:54197321d56ec4d008f524736513c5a35b1a8f47</id>
<content type='text'>
Add packagegroup recipes to simplify building all container-related
artifacts:

- packagegroup-container-images: Build all OCI container images
  (recipes inheriting image-oci)
- packagegroup-container-bundles: Build all container bundles
  (recipes inheriting container-bundle)
- packagegroup-container-demo: Build all demo containers and bundles

Usage:
  bitbake packagegroup-container-images
  bitbake packagegroup-container-bundles
  bitbake packagegroup-container-demo

Signed-off-by: Bruce Ashfield &lt;bruce.ashfield@gmail.com&gt;
</content>
</entry>
<entry>
<title>vcontainer: add host-side idle timeout with QMP shutdown</title>
<updated>2026-01-24T20:53:26+00:00</updated>
<author>
<name>Bruce Ashfield</name>
<email>bruce.ashfield@gmail.com</email>
</author>
<published>2026-01-24T03:22:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.enea.com/cgit/linux/meta-virtualization.git/commit/?id=8f7f2089a528e0d1d39e5f65ae3728ac6b8e56cd'/>
<id>urn:sha1:8f7f2089a528e0d1d39e5f65ae3728ac6b8e56cd</id>
<content type='text'>
Implement reliable idle timeout for vmemres daemon mode using
host-side monitoring with QMP-based shutdown, and container-aware
idle detection via virtio-9p shared file.

Host-side changes (vrunner.sh):
  - Add -no-reboot flag to QEMU for clean exit semantics
  - Spawn background watchdog when daemon starts
  - Watchdog monitors activity file timestamp
  - Check interval scales to idle timeout (timeout/5, clamped 10-60s)
  - Read container status from shared file (guest writes via virtio-9p)
  - Only shutdown if no containers are running
  - Send QMP "quit" command for graceful shutdown
  - Watchdog auto-exits if QEMU dies (no zombie processes)
  - Touch activity file in daemon_send() for user activity tracking

Config changes (vcontainer-common.sh):
  - Add idle-timeout to build_runner_args() so it's always passed

Guest-side changes (vcontainer-init-common.sh):
  - Add watchdog that writes container status to /mnt/share/.containers_running
  - Host reads this file instead of socket commands (avoids output corruption)
  - Close inherited virtio-serial fd 3 in watchdog subshell to prevent leaks
  - Guest-side shutdown logic preserved but disabled (QMP more reliable)
  - Handle Yocto read-only-rootfs volatile directories (/var/volatile)

The shared file approach avoids sending container check commands through
the daemon socket, which previously caused output corruption on the
single-stream virtio-serial channel.

The idle timeout is configurable via: vdkr vconfig idle-timeout &lt;secs&gt;
Default: 1800 seconds (30 minutes)

Signed-off-by: Bruce Ashfield &lt;bruce.ashfield@gmail.com&gt;
</content>
</entry>
<entry>
<title>vcontainer: consolidate initramfs-create recipes</title>
<updated>2026-01-24T03:29:29+00:00</updated>
<author>
<name>Bruce Ashfield</name>
<email>bruce.ashfield@gmail.com</email>
</author>
<published>2026-01-23T21:15:03+00:00</published>
<link rel='alternate' type='text/html' href='https://git.enea.com/cgit/linux/meta-virtualization.git/commit/?id=368a238d80da0e971237c154cfafbbf8ca3f85d9'/>
<id>urn:sha1:368a238d80da0e971237c154cfafbbf8ca3f85d9</id>
<content type='text'>
Update vcontainer-initramfs-create.inc to use the image-based approach:
- Depend on tiny-initramfs-image for cpio.gz (replaces file extraction)
- Depend on rootfs-image for squashfs (unchanged)
- Remove DEPENDS on squashfs-tools-native (no longer extracting files)

Update recipe files to use the consolidated inc:
- vdkr-initramfs-create_1.0.bb
- vpdmn-initramfs-create_1.0.bb

Boot flow remains unchanged:
  QEMU boots kernel + tiny initramfs
  -&gt; preinit mounts rootfs.img from /dev/vda
  -&gt; switch_root into rootfs.img
  -&gt; vdkr-init.sh or vpdmn-init.sh runs

Signed-off-by: Bruce Ashfield &lt;bruce.ashfield@gmail.com&gt;
</content>
</entry>
<entry>
<title>vcontainer: add tiny initramfs image infrastructure</title>
<updated>2026-01-24T03:29:11+00:00</updated>
<author>
<name>Bruce Ashfield</name>
<email>bruce.ashfield@gmail.com</email>
</author>
<published>2026-01-23T20:46:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.enea.com/cgit/linux/meta-virtualization.git/commit/?id=37349fc93bd1e69da1eb54a7aa3344f5c11f2e12'/>
<id>urn:sha1:37349fc93bd1e69da1eb54a7aa3344f5c11f2e12</id>
<content type='text'>
Add proper Yocto image recipes for the tiny initramfs used by
vdkr/vpdmn in the switch_root boot flow:

- vcontainer-tiny-initramfs-image.inc: Shared image configuration
- vcontainer-preinit_1.0.bb: Preinit script package (shared)
- vdkr-tiny-initramfs-image.bb: Tiny initramfs for vdkr
- vpdmn-tiny-initramfs-image.bb: Tiny initramfs for vpdmn

The tiny initramfs contains only busybox and a preinit script that:
1. Mounts devtmpfs, proc, sysfs
2. Mounts the squashfs rootfs.img from /dev/vda
3. Creates tmpfs overlay for writes
4. Performs switch_root to the real rootfs

This replaces ad-hoc file extraction with proper image-based builds,
improving reproducibility and maintainability.

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