#!/bin/bash
# Download all topology binaries into explicit disposable paths with vendor hashes.
fail() { printf 'ERROR: %s\n' "$*" >&2; exit 1; }
[[ $# == 3 ]] || fail 'Usage: download_binaries.sh RELEASE ABSOLUTE_BINARY_DIR ABSOLUTE_RESULTS_DIR'
RELEASE=$1
DEST=$2
RESULTS=$3
[[ "$RELEASE" =~ ^r[0-9]{2}\.[0-9]+$ && "$DEST" == /* && "$RESULTS" == /* ]] || fail 'Invalid release or output paths.'
case "$(uname -m)" in aarch64) PLATFORM=linux26aarch64;; x86_64) PLATFORM=linux26x86_64;; *) fail 'Unsupported architecture.';; esac
mkdir -p "$DEST" "$RESULTS" || exit 1
BASE="https://ftp.perforce.com/perforce/$RELEASE/bin.$PLATFORM"
curl --connect-timeout 20 --max-time 300 --retry 2 --retry-delay 1 -fsSL "$BASE/SHA256SUMS" -o "$DEST/SHA256SUMS" || fail 'Cannot download vendor checksum manifest.'
: > "$RESULTS/binary-sources.txt" || exit 1
for binary in p4 p4d p4broker p4p; do
curl --connect-timeout 20 --max-time 300 --retry 2 --retry-delay 1 -fsSL "$BASE/$binary" -o "$DEST/$binary.partial" || fail "Cannot download $binary."
hash=$(awk -v name="$binary" '$2 == "*" name || $2 == name {print $1}' "$DEST/SHA256SUMS")
[[ "$hash" =~ ^[a-fA-F0-9]{64}$ ]] || fail "Missing/ambiguous checksum for $binary."
printf '%s %s\n' "$hash" "$DEST/$binary.partial" | sha256sum -c - || fail "$binary checksum mismatch."
mv "$DEST/$binary.partial" "$DEST/$binary" || exit 1
chmod 755 "$DEST/$binary" || exit 1
"$DEST/$binary" -V > "$RESULTS/$binary-version.txt" 2>&1 || exit 1
printf '%s/%s %s\n' "$BASE" "$binary" "$hash" >> "$RESULTS/binary-sources.txt" || exit 1
done
| # | Change | User | Description | Committed | |
|---|---|---|---|---|---|
| #1 | 34004 | Russell C. Jackson (Rusty) |
Improve SDP backup/recovery, Maintenance, logging and cloud operation. Add owned checkpoint locks, recovery-aware retention, preserved database switches, bounded cleanup and coordinated AWS/Azure snapshots. Fix service-user password initialization, edge staging, standby promotion state parsing, proxy cache setup, typed depot verification and historical-server configuration/error handling. Remove unused OTP programs; keep Windows removed, server.locks cleanup and the journal-count condition unchanged. Add no global shell strict modes. Update operational documentation and add reproducible mkdirs.sh/mkdirs.cfg container assurance. Validate Ubuntu 26.04 and UBI 8.10/9.8/10.2 across both Python runtimes: 44 stages; 428 offline tests per runtime/OS, zero offline skips; 19 deployed-archive comparisons per combination. Three six-node topology runs pass all 30 recovery/failure scenarios. P4D 2023.1 through 2026.1 on UBI 8/9 pass all 14 cells and 98 scenarios. Static, documentation and provenance checks pass. Containers do not certify every fleet kernel, patch build or integration. Tested source manifest SHA-256: e1a23e17b8ced8c1148d9a250589977c6f6e98606bf2a81dc3ff5d7c909e3695 Deployed comparison archive SHA-256: 1bd23217356ee3808e040d39aea5be9519bda7c8f2b4924656a70aff8ad7293a |