diff options
| author | Bruce Ashfield <bruce.ashfield@gmail.com> | 2026-06-04 03:16:13 +0000 |
|---|---|---|
| committer | Bruce Ashfield <bruce.ashfield@gmail.com> | 2026-06-04 03:31:56 +0000 |
| commit | 0ab5d81a5f5ccd985ca2e4819bb515268a04f2e1 (patch) | |
| tree | f54c797918337daab19829e7f4ee76bb3c134f00 | |
| parent | b8d9e23c511e815ad5a9cf0d1d58a1ef074f1f32 (diff) | |
| download | meta-virtualization-0ab5d81a5f5ccd985ca2e4819bb515268a04f2e1.tar.gz | |
podman: switch from CNI to netavark as sole network backend
Podman's vendored containers/common library removed CNI support
entirely in commit 8d1f636e40 (March 2026). The NetworkBackend()
function now unconditionally rejects any backend other than netavark,
making network_backend = "cni" in containers.conf a runtime error.
The vpdmn rootfs originally used CNI because netavark's dependency
chain (nmap -> libpcap -> bluez5 -> cairo) was too heavy for the
vruntime BBMASK environment. That dependency chain no longer exists
— netavark v1.16.0+ uses a built-in Rust connection tester and has
no heavyweight runtime dependencies.
Recipe changes:
- Clear BUILDTAGS_EXTRA default (was CNI build tag, now a no-op)
- Set VIRTUAL-RUNTIME_container_networking and _container_dns with
strong assignments so podman always RDEPENDS on netavark and
aardvark-dns regardless of distro config
- Remove ${sysconfdir}/cni from FILES
vpdmn rootfs changes:
- Replace cni with netavark + aardvark-dns in IMAGE_INSTALL
- Update containers.conf network_backend from cni to netavark
Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
| -rw-r--r-- | conf/distro/include/meta-virt-container-podman.inc | 2 | ||||
| -rw-r--r-- | recipes-containers/podman/podman_git.bb | 18 | ||||
| -rw-r--r-- | recipes-containers/vcontainer/vpdmn-rootfs-image.bb | 9 |
3 files changed, 14 insertions, 15 deletions
diff --git a/conf/distro/include/meta-virt-container-podman.inc b/conf/distro/include/meta-virt-container-podman.inc index b57eaaca..96ea7d7b 100644 --- a/conf/distro/include/meta-virt-container-podman.inc +++ b/conf/distro/include/meta-virt-container-podman.inc | |||
| @@ -2,6 +2,8 @@ include meta-virt-container.inc | |||
| 2 | 2 | ||
| 3 | VIRTUAL-RUNTIME_container_engine ?= "podman" | 3 | VIRTUAL-RUNTIME_container_engine ?= "podman" |
| 4 | VIRTUAL-RUNTIME_container_runtime ?= "crun" | 4 | VIRTUAL-RUNTIME_container_runtime ?= "crun" |
| 5 | # netavark is the only supported network backend since podman 6.0 | ||
| 6 | # (containers/common removed CNI support entirely) | ||
| 5 | VIRTUAL-RUNTIME_container_networking ?= "netavark" | 7 | VIRTUAL-RUNTIME_container_networking ?= "netavark" |
| 6 | VIRTUAL-RUNTIME_container_dns ?= "aardvark-dns" | 8 | VIRTUAL-RUNTIME_container_dns ?= "aardvark-dns" |
| 7 | VIRTUAL-RUNTIME_container_orchestration ?= "" | 9 | VIRTUAL-RUNTIME_container_orchestration ?= "" |
diff --git a/recipes-containers/podman/podman_git.bb b/recipes-containers/podman/podman_git.bb index 75e2fae3..36c80c0e 100644 --- a/recipes-containers/podman/podman_git.bb +++ b/recipes-containers/podman/podman_git.bb | |||
| @@ -36,13 +36,10 @@ PACKAGES =+ "${PN}-contrib" | |||
| 36 | 36 | ||
| 37 | PODMAN_PKG = "github.com/containers/podman" | 37 | PODMAN_PKG = "github.com/containers/podman" |
| 38 | 38 | ||
| 39 | # Include the cni build tag unless the distro explicitly selects netavark-only. | 39 | # Podman's vendored containers/common library removed CNI support entirely |
| 40 | # The runtime backend is selected via containers.conf (network_backend), | 40 | # (commit 8d1f636e40, March 2026). The network backend is now unconditionally |
| 41 | # but podman must be compiled with the cni tag to support it at all. | 41 | # netavark — the cni build tag is a no-op. |
| 42 | # Previously this was gated on VIRTUAL-RUNTIME_container_networking == "cni", | 42 | BUILDTAGS_EXTRA ?= "" |
| 43 | # which excluded cni in vruntime builds where that variable is intentionally | ||
| 44 | # blank (vpdmn-rootfs-image installs cni packages directly in IMAGE_INSTALL). | ||
| 45 | BUILDTAGS_EXTRA ?= "${@'' if d.getVar('VIRTUAL-RUNTIME_container_networking') == 'netavark' else 'cni'}" | ||
| 46 | BUILDTAGS ?= "seccomp varlink \ | 43 | BUILDTAGS ?= "seccomp varlink \ |
| 47 | ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd', '', d)} \ | 44 | ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd', '', d)} \ |
| 48 | exclude_graphdriver_btrfs exclude_graphdriver_devicemapper ${BUILDTAGS_EXTRA}" | 45 | exclude_graphdriver_btrfs exclude_graphdriver_devicemapper ${BUILDTAGS_EXTRA}" |
| @@ -137,7 +134,6 @@ FILES:${PN} += " \ | |||
| 137 | ${systemd_user_unitdir}/* \ | 134 | ${systemd_user_unitdir}/* \ |
| 138 | ${nonarch_libdir}/tmpfiles.d/* \ | 135 | ${nonarch_libdir}/tmpfiles.d/* \ |
| 139 | ${datadir}/user-tmpfiles.d/* \ | 136 | ${datadir}/user-tmpfiles.d/* \ |
| 140 | ${sysconfdir}/cni \ | ||
| 141 | " | 137 | " |
| 142 | 138 | ||
| 143 | SYSTEMD_SERVICE:${PN} = "podman.service podman.socket" | 139 | SYSTEMD_SERVICE:${PN} = "podman.service podman.socket" |
| @@ -148,9 +144,13 @@ VIRTUAL-RUNTIME_base-utils-nsenter ?= "util-linux-nsenter" | |||
| 148 | 144 | ||
| 149 | COMPATIBLE_HOST = "^(?!mips).*" | 145 | COMPATIBLE_HOST = "^(?!mips).*" |
| 150 | 146 | ||
| 147 | # netavark is the only supported network backend since podman 6.0 | ||
| 148 | VIRTUAL-RUNTIME_container_networking = "netavark" | ||
| 149 | VIRTUAL-RUNTIME_container_dns = "aardvark-dns" | ||
| 150 | |||
| 151 | RDEPENDS:${PN} += "\ | 151 | RDEPENDS:${PN} += "\ |
| 152 | catatonit conmon ${VIRTUAL-RUNTIME_container_runtime} gpgme iptables libdevmapper \ | 152 | catatonit conmon ${VIRTUAL-RUNTIME_container_runtime} gpgme iptables libdevmapper \ |
| 153 | ${VIRTUAL-RUNTIME_container_dns} ${VIRTUAL-RUNTIME_container_networking} ${VIRTUAL-RUNTIME_base-utils-nsenter} \ | 153 | ${VIRTUAL-RUNTIME_container_networking} ${VIRTUAL-RUNTIME_container_dns} ${VIRTUAL-RUNTIME_base-utils-nsenter} \ |
| 154 | " | 154 | " |
| 155 | RRECOMMENDS:${PN} += "slirp4netns \ | 155 | RRECOMMENDS:${PN} += "slirp4netns \ |
| 156 | kernel-module-xt-masquerade \ | 156 | kernel-module-xt-masquerade \ |
diff --git a/recipes-containers/vcontainer/vpdmn-rootfs-image.bb b/recipes-containers/vcontainer/vpdmn-rootfs-image.bb index f061ce08..cca9191f 100644 --- a/recipes-containers/vcontainer/vpdmn-rootfs-image.bb +++ b/recipes-containers/vcontainer/vpdmn-rootfs-image.bb | |||
| @@ -50,7 +50,8 @@ IMAGE_INSTALL = " \ | |||
| 50 | crun \ | 50 | crun \ |
| 51 | skopeo \ | 51 | skopeo \ |
| 52 | conmon \ | 52 | conmon \ |
| 53 | cni \ | 53 | netavark \ |
| 54 | aardvark-dns \ | ||
| 54 | busybox \ | 55 | busybox \ |
| 55 | iproute2 \ | 56 | iproute2 \ |
| 56 | iptables \ | 57 | iptables \ |
| @@ -121,13 +122,9 @@ additionalimagestores = [] | |||
| 121 | EOF | 122 | EOF |
| 122 | 123 | ||
| 123 | # Create containers.conf for podman engine settings | 124 | # Create containers.conf for podman engine settings |
| 124 | # Use CNI instead of netavark — netavark's dependency chain | ||
| 125 | # (nmap → libpcap → bluez5 → python3-pygobject → cairo) is too | ||
| 126 | # heavy for the vruntime BBMASK environment. | ||
| 127 | cat > ${IMAGE_ROOTFS}/etc/containers/containers.conf << 'EOF' | 125 | cat > ${IMAGE_ROOTFS}/etc/containers/containers.conf << 'EOF' |
| 128 | [network] | 126 | [network] |
| 129 | network_backend = "cni" | 127 | network_backend = "netavark" |
| 130 | cni_plugin_dirs = ["/opt/cni/bin", "/usr/libexec/cni"] | ||
| 131 | EOF | 128 | EOF |
| 132 | 129 | ||
| 133 | # Prevent libnss_systemd segfaults — systemd is not running in the | 130 | # Prevent libnss_systemd segfaults — systemd is not running in the |
