#!/bin/bash # ============================================================================= # scripts/build-packages.sh # # Orchestrates building all seven Slackware .txz packages this plugin ships # (podman, conmon, crun, netavark, aardvark-dns, passt, fuse-overlayfs), by # running each package's .SlackBuild in turn. See # docs/ARCHITECTURE.md section 5.2 (Build-Strategie). # # This script itself does not containerize anything — it assumes it is # already running inside a Slackware-compatible build environment (see # .github/workflows/build-packages.yml, which runs it inside a pinned # Slackware Docker image). Running it on a non-Slackware host will likely # still compile successfully for most components but the resulting .txz # should not be trusted for an actual Unraid install — see the container # image note in the CI workflow. # # Usage: # scripts/build-packages.sh # build all packages # scripts/build-packages.sh podman conmon # build only the named ones # # Output: $REPO_ROOT/dist/---.txz # plus a .sha256 and .md5 sidecar file per package (see # scripts/lib/slackbuild-common.sh, sb_make_package). # Nothing under dist/ is committed to git — see .gitignore. # ============================================================================= set -eu REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" PACKAGES_DIR="$REPO_ROOT/packages" DIST_DIR="$REPO_ROOT/dist" # The full, ordered set of packages this project builds automatically. # containers-common is intentionally excluded for now — see packages/README.md. # unraid-podman (the plugin's own scaffolding, not an upstream component — # see packages/unraid-podman/README.md) is built last since it's by far the # fastest and has nothing useful to report on failure that earlier package # failures wouldn't already explain. ALL_PACKAGES=(conmon crun netavark aardvark-dns passt fuse-overlayfs podman unraid-podman) # Podman is listed second-to-last on purpose: among the seven upstream # components it is the slowest build and the one most likely to fail on a # dependency/tag mistake, so faster packages surface problems first during # local iteration. unraid-podman is genuinely last since it packages this # repo's own files and has no compile step at all. requested=("$@") if [ "${#requested[@]}" -eq 0 ]; then targets=("${ALL_PACKAGES[@]}") else targets=("${requested[@]}") fi mkdir -p "$DIST_DIR" echo "==> Building packages: ${targets[*]}" echo "==> Output directory: $DIST_DIR" echo failed=() built=() for name in "${targets[@]}"; do slackbuild="$PACKAGES_DIR/$name/$name.SlackBuild" if [ ! -x "$slackbuild" ]; then echo "!! No SlackBuild found/executable for '$name' ($slackbuild)" >&2 failed+=("$name") continue fi echo "############################################################" echo "## Building: $name" echo "############################################################" # Run each SlackBuild with OUTPUT pointed at the shared dist/ directory, # so every package's .txz ends up in one place regardless of the # per-package TMP/PKG scratch dirs it uses internally. if OUTPUT="$DIST_DIR" "$slackbuild"; then built+=("$name") else echo "!! Build failed: $name" >&2 failed+=("$name") fi echo done echo "============================================================" echo "Build summary" echo "============================================================" echo "Succeeded (${#built[@]}): ${built[*]:-none}" echo "Failed (${#failed[@]}): ${failed[*]:-none}" if [ "${#failed[@]}" -gt 0 ]; then echo echo "!! One or more packages failed to build — see log above." >&2 exit 1 fi echo echo "All packages built successfully. Artifacts in $DIST_DIR:" ls -1 "$DIST_DIR"