From 52dfa9538b2d99d8f809f42e12a189a4f74f5f9a Mon Sep 17 00:00:00 2001 From: Paul Menzel Date: Sun, 18 Oct 2026 14:34:40 +0200 Subject: [PATCH 1/4] podman: Add version 6.1.4 Copy podman-5.6.2-0.build.sh and update podman and its helpers to the latest upstream releases: podman 5.6.2 -> 6.1.4 conmon 2.1.13 -> 2.2.1 runc 1.3.2 -> 1.5.2 (commit 29dd3dc) crun 1.24 -> 1.30.1 passt 2025_09_19 -> 2026_10_02.cba3570 netavark 1.16.1 -> 2.1.0 aardvark-dns 1.16.0 -> 2.1.0 python-dotenv 1.1.1 -> 1.2.4 podman-compose 1.5.0 -> 1.6.0 go-md2man 2.0.7 and catatonit 0.2.1 are still current. netavark 2.1.0 and aardvark-dns 2.1.0 set rust-version = "1.88", so rustc 1.86.0 is too old. Use /pkg/rustc-1.97.0-0, the newest installed rustc. podman 6 vendors containers/common as go.podman.io/common, so the two sed patches for the netavark plugin and helper binary directories now point to vendor/go.podman.io/common/pkg/config/. The patched lines are unchanged. podman 6.1.4 requires Go 1.26 (go.mod), runc 1.5.2 Go 1.25. The system Go is 1.27.0. podman-compose 1.6.0 requires Python >= 3.10, which python-3.12.8-0 from the profile satisfies. $ sha256sum * daf871488603e659b0501224cf0731ac317809b1d1701fc061cb4f6ae39a894f aardvark-dns-2.1.0.tar.gz 814fb5979a3a4b8576b1f901e606b482bebb41cb7e57926e6d5765ee786b96d3 conmon-2.2.1.tar.gz 99d036d95113552b6df66c7c879432835504bf0e525fc0372745071df129527b crun-1.30.1.tar.gz 96677048168ddd1abe313e4c2e17f1cace72b60ee1bac8ca12a4bd7dfcadfbbb netavark-2.1.0.tar.gz abc3bd6ef9fd9e624071ce9a232fc3aebd78492aa8d18911f39e1a2fc6621dae passt-2026_10_02.cba3570.tar 200fd9b4b6d820cae24fc99d8e290ec945512365cf3cda8283b3905c0c284ea8 podman-6.1.4.tar.gz c83fd9bcbaa635100d581ce52a7a4b712ee0d457481232aff392efe3ebc5a217 podman_compose-1.6.0.tar.gz f0d53e69935a851c0dcc78f3ab7aaccd8cabef0b92382b576b824212902873c0 python_dotenv-1.2.4.tar.gz b5af44864a830c7032cf4a72efa0c6d44f701873d9507b127be31ad4d1d42ff3 runc-1.5.2.tar.gz Assisted-by: claude-opus-5.5 (Claude Code) --- podman-6.1.4-0.build.sh | 267 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 267 insertions(+) create mode 100755 podman-6.1.4-0.build.sh diff --git a/podman-6.1.4-0.build.sh b/podman-6.1.4-0.build.sh new file mode 100755 index 0000000..5f9291e --- /dev/null +++ b/podman-6.1.4-0.build.sh @@ -0,0 +1,267 @@ +#! /bin/bash + +# ------------------------------------------------------------------- Debug + +# COOKIE=$(mcookie|cut -c-8); grep -v V_GREP_ME $0 > /dev/shm/runme-$COOKIE.sh ; sleep 0.3; exec bash /dev/shm/runme-$COOKIE.sh +# TESTING=1 + +# ---------------------------------------------------------------- Preamble + +PKG=podman +VERSION=6.1.4 +BUILD=0 + +TASK=${TASK:-ALL} # when testing parts, do #> TASK=md2man ./podman-6.1.4-0.build.sh + +PREFIX=/pkg/$PKG-$VERSION-$BUILD +if [ -n "$TESTING" ]; then PREFIX=/scratch/local2/$PKG-$VERSION-$BUILD ; fi + +PATH=/bin:/usr/bin:/usr/sbin:/usr/local/bin + +set -eu +umask 022 + +BUILD_TMPDIR=/scratch/local2/$PKG-$VERSION-$BUILD.$USER.build.tmp + +test -d $BUILD_TMPDIR && ( chmod -R u+rwx $BUILD_TMPDIR || true ; rm -rf $BUILD_TMPDIR ) +export TMPDIR=$BUILD_TMPDIR +export HOME=$BUILD_TMPDIR/home +mkdir -vp $HOME + +exec $PREFIX/profile <<-EOF + PATH=$PREFIX/bin:\$PATH + # podman is built with current package python-3.12.8-0, if it is phased out, source it ... + python -VV | grep -q '3.12.8.*Jan 6 2025, 13:15:47' || . /pkg/python-3.12.8-0/profile + PYTHONPATH=$PREFIX/lib/python3.12/site-packages\${PYTHONPATH:+:\$PYTHONPATH} + export PYTHONPATH + export PYTHONNOUSERSITE=1 + if [ -d $PREFIX/.compatlibs ]; then export LD_LIBRARY_PATH=$PREFIX/.compatlibs\${LD_LIBRARY_PATH:+:\$LD_LIBRARY_PATH} ; fi + export MX_NVIDIA_CDI_DIR=\${MX_NVIDIA_CDI_DIR:-/dev/shm/nvidia_cdi} +EOF +. $PREFIX/profile + + +NPROC=$(( $(nproc) * 4 / 5 + 1 )) +export MAKEFLAGS="-j $NPROC" + +BUILDDIR=$PREFIX/build + +mkdir -p $PREFIX/bin +mkdir -p $PREFIX/share/man +mkdir -p $BUILDDIR +cd $BUILDDIR + + +# ------------------------------------------------------------- Maintenance + +if [ $TASK = 'zap' ]; then # reset + test -d $PREFIX && rm -rf $PREFIX/* + echo "# $PREFIX cleaned ..." + test -d $BUILD_TMPDIR && rm -rf $BUILD_TMPDIR/* + echo "# $BUILD_TMPDIR cleaned (again ...)" + exit +fi + +# -------------------------------------- Now all the little building blocks + +( if ! [ $TASK = 'ALL' -o $TASK = 'md2man' ]; then exit; fi + + # orig: https://github.com/cpuguy83/go-md2man/archive/refs/tags/v2.0.7.tar.gz + BEEHIVE=https://beehive.molgen.mpg.de/62c26841be8216afe8ebe50bb200d805/go-md2man-2.0.7.tar.gz + + test -e go-md2man-2.0.7.tar.gz || wget -nv $BEEHIVE + test -d go-md2man-2.0.7 || tar -xf go-md2man-2.0.7.tar.gz + + cd go-md2man-2.0.7 + go telemetry off + make V=1 bin/go-md2man + + cp -pv bin/go-md2man $PREFIX/bin + chmod -c 0755 $PREFIX/bin/go-md2man + +) + + +( if ! [ $TASK = 'ALL' -o $TASK = 'conmon' ]; then exit; fi + + # orig: https://github.com/containers/conmon/archive/refs/tags/v2.2.1.tar.gz + BEEHIVE=https://beehive.molgen.mpg.de/beea74914108dfc2ca7196b86a4905bf/conmon-2.2.1.tar.gz + + test -e conmon-2.2.1.tar.gz || wget -nv $BEEHIVE + test -d conmon-2.2.1 || tar -xf conmon-2.2.1.tar.gz + + cd conmon-2.2.1 + go telemetry off + make V=1 PREFIX=$PREFIX + make V=1 install PREFIX=$PREFIX + +) + +( if ! [ $TASK = 'ALL' -o $TASK = 'runc' ]; then exit; fi + + # orig: https://github.com/opencontainers/runc/archive/v1.5.2/runc-1.5.2.tar.gz + BEEHIVE=https://beehive.molgen.mpg.de/bbbd5a90ed28a726b5b0830fa53350b2/runc-1.5.2.tar.gz + GITHASH=29dd3dc + test -e runc-1.5.2.tar.gz || wget -nv $BEEHIVE + test -d runc-1.5.2 || tar -xf runc-1.5.2.tar.gz + + cd runc-1.5.2 + go telemetry off + make GIT_BRANCH=main COMMIT=$GITHASH all man + make install BINDIR=$PREFIX/bin +) + +( if ! [ $TASK = 'ALL' -o $TASK = 'crun' ]; then exit; fi + + # orig: https://github.com/containers/crun/releases/download/1.30.1/crun-1.30.1.tar.gz + BEEHIVE=https://beehive.molgen.mpg.de/5cf213d08aec8fe6078d6cbac8ec0778/crun-1.30.1.tar.gz + + test -e crun-1.30.1.tar.gz || wget -nv $BEEHIVE + test -d crun-1.30.1 || tar -xf crun-1.30.1.tar.gz + + cd crun-1.30.1 + ./configure --prefix=$PREFIX + make V=1 + make install +) + +# catatonit by Suse -- replaces 'docker-init' +( if ! [ $TASK = 'ALL' -o $TASK = 'catatonit' ]; then exit; fi + + # orig: https://github.com/openSUSE/catatonit/archive/refs/tags/v0.2.1.tar.gz + BEEHIVE=https://beehive.molgen.mpg.de/1b8887244915508590c8d0e9b161b0ca/catatonit-0.2.1.tar.gz + + test -e catatonit-0.2.1.tar.gz || wget -nv $BEEHIVE + test -d catatonit-0.2.1 || tar -xf catatonit-0.2.1.tar.gz + + cd catatonit-0.2.1 + ./autogen.sh + ./configure --prefix=$PREFIX + make + make install +) + +# . . . . . . . . . . And, when was your last visit at a 'Baumarkt' ? + +( if ! [ $TASK = 'ALL' -o $TASK = 'passt' ]; then exit; fi + + # https://passt.top/passt/about/ -- passt implements a translation layer between a Layer-2 network + # interface and native Layer-4 sockets (TCP, UDP, ICMP/ICMPv6 echo) on a host. It doesn't require + # any capabilities or privileges, and it can be used as a simple replacement for Slirp. + + # orig: https://passt.top/passt/snapshot/passt-2026_10_02.cba3570.tar + BEEHIVE=https://beehive.molgen.mpg.de/0c61e7ccb03cda8787a6696b92cf8539/passt-2026_10_02.cba3570.tar + + test -e passt-2026_10_02.cba3570.tar || wget -nv $BEEHIVE + test -d passt-2026_10_02.cba3570 || tar -xf passt-2026_10_02.cba3570.tar + + cd passt-2026_10_02.cba3570 + make + make prefix=$PREFIX install +) + +( if ! [ $TASK = 'ALL' -o $TASK = 'netavark' ]; then exit; fi + + source /pkg/rustc-1.97.0-0/profile + + # orig: https://github.com/containers/netavark/archive/v2.1.0/netavark-2.1.0.tar.gz + BEEHIVE=https://beehive.molgen.mpg.de/0eb1dfb4a156e76f1160bcab23244be4/netavark-2.1.0.tar.gz + + test -e netavark-2.1.0.tar.gz || wget -nv $BEEHIVE + test -d netavark-2.1.0 || tar -xf netavark-2.1.0.tar.gz + + cd netavark-2.1.0 + make PREFIX=$PREFIX + make install PREFIX=$PREFIX +) + +( if ! [ $TASK = 'ALL' -o $TASK = 'aardvarkdns' ]; then exit; fi + + source /pkg/rustc-1.97.0-0/profile + + # orig: https://github.com/containers/aardvark-dns/archive/v2.1.0/aardvark-dns-2.1.0.tar.gz + BEEHIVE=https://beehive.molgen.mpg.de/c40c5a8636b7be85ba1051cf07cd984d/aardvark-dns-2.1.0.tar.gz + + test -e aardvark-dns-2.1.0.tar.gz || wget -nv $BEEHIVE + test -d aardvark-dns-2.1.0 || tar -xf aardvark-dns-2.1.0.tar.gz + + cd aardvark-dns-2.1.0 + make PREFIX=$PREFIX + make install PREFIX=$PREFIX +) + +( if ! [ $TASK = 'ALL' -o $TASK = 'podman' ]; then exit; fi + + # orig: https://github.com/containers/podman/archive/v6.1.4/podman-6.1.4.tar.gz + BEEHIVE=https://beehive.molgen.mpg.de/c82c4a9c46db5d911e65ca5955fd81cd/podman-6.1.4.tar.gz + + test -e podman-6.1.4.tar.gz || wget -nv $BEEHIVE + test -d podman-6.1.4 || tar -xf podman-6.1.4.tar.gz + + cd podman-6.1.4 + + # Help with 'Error: could not find "netavark" ...' + sed -i -e \ + "/DefaultNetavarkPluginDirs = / a \ \"$PREFIX/libexec/podman/netavark\"," \ + vendor/go.podman.io/common/pkg/config/default.go + + # and in the same sense, may save some clutter in config files ... + sed -i -e \ + "/defaultHelperBinariesDir = / a \ \"$PREFIX/libexec/podman\"," \ + vendor/go.podman.io/common/pkg/config/config_linux.go + + go telemetry off + make BUILDTAGS="seccomp libsubid" PREFIX=$PREFIX + make install PREFIX=$PREFIX +) + +# Right now the CDI spec is generated on a per user basis. +# Could be generated at boot time, given nvidia-ctk could be build +# w/o downloading go packages. +( if ! [ $TASK = 'ALL' -o $TASK = 'gpuwraper' ]; then exit; fi + + cat > $PREFIX/bin/podman-gpu <<- EOF + #! /usr/bin/bash + + set -eu + + MX_NVIDIA_CDI_DIR=\${MX_NVIDIA_CDI_DIR:-} + NVIDIA_CDI=nvidia.yaml + + if ! test -f "\$MX_NVIDIA_CDI_DIR/\$NVIDIA_CDI"; then + MX_NVIDIA_CDI_DIR=/dev/shm/\$USER + if ! test -f "\$MX_NVIDIA_CDI_DIR/\$NVIDIA_CDI"; then + echo "# Creating CDI setup '\$MX_NVIDIA_CDI_DIR/\$NVIDIA_CDI' ..." >&2 + mkdir -pv \$MX_NVIDIA_CDI_DIR + nvidia-ctk cdi generate --mode=nvml --output=\$MX_NVIDIA_CDI_DIR/\$NVIDIA_CDI > \\ + \$MX_NVIDIA_CDI_DIR/nvidia-ctk.log 2>&1 + fi + fi + + exec podman --cdi-spec-dir "\$MX_NVIDIA_CDI_DIR" "\$@" + + EOF + + chmod -c 0755 $PREFIX/bin/podman-gpu +) + +( if ! [ $TASK = 'ALL' -o $TASK = 'compose' ]; then exit; fi + + # a single dependency ... + # orig: https://files.pythonhosted.org/packages/74/26/2fbeedb218a787a5eea551c7532cac4e009f83d689dd2faa0d0353473f86/python_dotenv-1.2.4.tar.gz + BEEHIVE=https://beehive.molgen.mpg.de/ef4507c345544f1b9ef984b8e31eaad1/python_dotenv-1.2.4.tar.gz + python -m pip install --prefix $PREFIX $BEEHIVE + + # orig: https://files.pythonhosted.org/packages/1f/80/a6ada19562b12ed466dac5c3e02aef5ed7c8d0881864d80e0d94d0dc71f5/podman_compose-1.6.0.tar.gz + BEEHIVE=https://beehive.molgen.mpg.de/4f4f1a2a15215d6db99b172a30d02003/podman_compose-1.6.0.tar.gz + python -m pip install --prefix $PREFIX $BEEHIVE + + python -c 'import podman_compose; print("# *** Load & version check:", podman_compose.__version__)' +) + +# -------------------------------------------------------- This is the end. + +exit From 49f254a447c6cb8da3a7df6ee4a8b59296a12523 Mon Sep 17 00:00:00 2001 From: Paul Menzel Date: Sun, 18 Oct 2026 16:06:02 +0200 Subject: [PATCH 2/4] podman-6.1.4-0: Build runc without libpathrs runc 1.5.2 adds libpathrs to the default build tags, so building it fails, as there is no libpathrs package: + go-md2man -in runc.8.md -out ./man8/runc.8 # cyphar.com/go-pathrs/internal/libpathrs # [pkg-config --cflags -- pathrs] Package pathrs was not found in the pkg-config search path. Perhaps you should add the directory containing `pathrs.pc' to the PKG_CONFIG_PATH environment variable No package 'pathrs' found make: *** [Makefile:85: runc-bin] Error 1 Remove the tag with RUNC_BUILDTAGS=-libpathrs. runc then uses the pure-Go pathrs-lite vendored from filepath-securejoin, the successor of the filepath-securejoin 0.4.1 code that runc 1.3.2 in podman-5.6.2-0 used. Building libpathrs (Rust, clang, lld) as another component is not worth it, as podman prefers crun over runc. Assisted-by: claude-opus-5.5 (Claude Code) --- podman-6.1.4-0.build.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/podman-6.1.4-0.build.sh b/podman-6.1.4-0.build.sh index 5f9291e..a3f1d67 100755 --- a/podman-6.1.4-0.build.sh +++ b/podman-6.1.4-0.build.sh @@ -110,7 +110,8 @@ fi cd runc-1.5.2 go telemetry off - make GIT_BRANCH=main COMMIT=$GITHASH all man + # libpathrs is not packaged, use the vendored pure-Go pathrs-lite instead + make GIT_BRANCH=main COMMIT=$GITHASH RUNC_BUILDTAGS=-libpathrs all man make install BINDIR=$PREFIX/bin ) From 6cf72469560049b82981f8e06edb3a7c8301b780 Mon Sep 17 00:00:00 2001 From: Paul Menzel Date: Sun, 18 Oct 2026 16:06:49 +0200 Subject: [PATCH 3/4] podman-6.1.4-0: Drop netavark binary from plugin directories The script appends $PREFIX/libexec/podman/netavark to DefaultNetavarkPluginDirs to avoid Error: could not find "netavark" ... That list is for directories holding netavark plugins, and the entry is the netavark binary itself, which `make install` in netavark puts into $(LIBEXECDIR)/podman. podman never looks for the binary there. It uses conf.FindHelperBinary(netavarkBinary, false) in vendor/go.podman.io/common/libnetwork/network/interface.go, which searches helper_binaries_dir. The second patch already adds $PREFIX/libexec/podman to defaultHelperBinariesDir, so that patch alone lets podman find netavark (and aardvark-dns). For the plugin list, getAllPlugins() in libnetwork/netavark/config.go calls os.ReadDir() on every entry and ignores errors, so a file there is silently skipped. The only other user passes it as --plugin-directory to netavark, which is pointless for a file. Remove the patch and move its comment to the helper directory patch. Assisted-by: claude-opus-5.5 (Claude Code) --- podman-6.1.4-0.build.sh | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/podman-6.1.4-0.build.sh b/podman-6.1.4-0.build.sh index a3f1d67..9c69ddc 100755 --- a/podman-6.1.4-0.build.sh +++ b/podman-6.1.4-0.build.sh @@ -204,12 +204,8 @@ fi cd podman-6.1.4 - # Help with 'Error: could not find "netavark" ...' - sed -i -e \ - "/DefaultNetavarkPluginDirs = / a \ \"$PREFIX/libexec/podman/netavark\"," \ - vendor/go.podman.io/common/pkg/config/default.go - - # and in the same sense, may save some clutter in config files ... + # Help with 'Error: could not find "netavark" ...', and may save some + # clutter in config files ... sed -i -e \ "/defaultHelperBinariesDir = / a \ \"$PREFIX/libexec/podman\"," \ vendor/go.podman.io/common/pkg/config/config_linux.go From 83f7031fb1c21851a8f0453be01bf4ea1b718d9e Mon Sep 17 00:00:00 2001 From: Paul Menzel Date: Sun, 18 Oct 2026 16:06:59 +0200 Subject: [PATCH 4/4] podman-6.1.4-0: Do not break the TESTING check under set -u The check if [ -n "$TESTING" ]; then PREFIX=/scratch/local2/... ; fi works only because it runs before `set -eu`. If it ever moves below, for example when the preamble is reordered, every build without TESTING aborts: TESTING: unbound variable Use ${TESTING:-}, so the check does not depend on where it sits. Assisted-by: claude-opus-5.5 (Claude Code) --- podman-6.1.4-0.build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/podman-6.1.4-0.build.sh b/podman-6.1.4-0.build.sh index 9c69ddc..d135bc5 100755 --- a/podman-6.1.4-0.build.sh +++ b/podman-6.1.4-0.build.sh @@ -14,7 +14,7 @@ BUILD=0 TASK=${TASK:-ALL} # when testing parts, do #> TASK=md2man ./podman-6.1.4-0.build.sh PREFIX=/pkg/$PKG-$VERSION-$BUILD -if [ -n "$TESTING" ]; then PREFIX=/scratch/local2/$PKG-$VERSION-$BUILD ; fi +if [ -n "${TESTING:-}" ]; then PREFIX=/scratch/local2/$PKG-$VERSION-$BUILD ; fi PATH=/bin:/usr/bin:/usr/sbin:/usr/local/bin