Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
264 changes: 264 additions & 0 deletions podman-6.1.4-0.build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,264 @@
#! /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 </dev/null

mkdir -p $PREFIX
cat >$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
# 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
)

( 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" ...', 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

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