#!/bin/bash # ============================================================================= # packages/podman/podman.SlackBuild # # Builds the podman .txz package from upstream source (Go). Version and # checksum are pinned centrally in versions.env — see # scripts/lib/slackbuild-common.sh for the shared fetch/verify/package # helpers used below, and docs/ARCHITECTURE.md section 5 for why the # graphdriver build tags below are what they are (this project only ever # uses the overlay storage driver, see docs/ARCHITECTURE.md section 10). # # Requires (in the build environment): go >= 1.22, make, gcc, pkg-config, # libseccomp-dev. GPG signature verification support is intentionally left # out to keep the dependency footprint minimal for a from-scratch Slackware # build. # ============================================================================= set -eu REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" # shellcheck source=/dev/null . "$REPO_ROOT/scripts/lib/slackbuild-common.sh" # shellcheck source=/dev/null . "$REPO_ROOT/versions.env" VERSION="$PODMAN_VERSION" ARCH="$PKG_ARCH" BUILD="$PKG_BUILD" TAG="$PKG_TAG" sb_init "podman" tarball=$(sb_fetch_and_verify "$PODMAN_SRC_URL" "$PODMAN_SRC_SHA256" "podman-$VERSION.tar.gz") srcdir=$(sb_extract "$tarball") # Apply any local patches (none currently — see packages/podman/patches/). for patch in "$CWD"/patches/*.patch; do [ -e "$patch" ] || continue echo "==> [podman] applying $(basename "$patch")" patch -d "$srcdir" -p1 < "$patch" done cd "$srcdir" # Build tags: exclude storage backends this project doesn't use (btrfs, # devicemapper — see docs/ARCHITECTURE.md section 10, overlay-only), exclude # systemd integration (Unraid has no systemd — see docs/ARCHITECTURE.md # "Rahmenbedingungen"), keep seccomp support. export BUILDTAGS="seccomp exclude_graphdriver_btrfs exclude_graphdriver_devicemapper containers_image_openpgp" export CGO_ENABLED=1 export GOFLAGS="${GOFLAGS:--mod=mod}" # podman's own Makefile wants to build ITS bundled copy of go-md2man from # test/tools/vendor/ for doc generation, but that vendor tree isn't # consistent enough to build standalone outside podman's own module scope # ("without -mod=vendor, directory ... has no package path"). Its Makefile # only attempts that build if test/tools/build/go-md2man doesn't already # exist — pre-seed it with our own system go-md2man (installed in # scripts/ci/setup-slackware-buildenv.sh) to skip the broken vendor build # entirely; it's the same tool doing the same job. mkdir -p test/tools/build cp "$(command -v go-md2man)" test/tools/build/go-md2man chmod +x test/tools/build/go-md2man echo "==> [podman] make (BUILDTAGS=$BUILDTAGS)" make BUILDTAGS="$BUILDTAGS" GO_BUILD_FLAGS="-ldflags -s" echo "==> [podman] make install into \$PKG" make install \ DESTDIR="$PKG" \ PREFIX=/usr \ ETCDIR="$PKG/etc" \ BUILDTAGS="$BUILDTAGS" # We ship our own containers.conf/storage.conf/registries.conf/policy.json # templates (see config/) staged via plugin/podman.plg instead of upstream's # defaults, so drop the ones `make install` places under $PKG/etc to avoid # ambiguity about which file is authoritative on a running system. rm -rf "$PKG/etc/containers" # No systemd units — Unraid has no systemd (see docs/ARCHITECTURE.md, # "Rahmenbedingungen"); process lifecycle is entirely owned by rc.podman. rm -rf "$PKG/usr/lib/systemd" "$PKG/lib/systemd" sb_install_docs "$srcdir/LICENSE" "$srcdir/README.md" sb_make_package "$VERSION" "$ARCH" "$BUILD" "$TAG"