Add resilient HPL source fallbacks
This commit is contained in:
@@ -38,22 +38,109 @@ mkdir -p "${DOWNLOAD_CACHE_DIR}" "${CACHE_DIR}/bin" "${CACHE_DIR}/lib"
|
|||||||
|
|
||||||
# ── download HPL source ────────────────────────────────────────────────────────
|
# ── download HPL source ────────────────────────────────────────────────────────
|
||||||
HPL_TAR="${DOWNLOAD_CACHE_DIR}/hpl-${HPL_VERSION}.tar.gz"
|
HPL_TAR="${DOWNLOAD_CACHE_DIR}/hpl-${HPL_VERSION}.tar.gz"
|
||||||
HPL_URL="https://www.netlib.org/benchmark/hpl/hpl-${HPL_VERSION}.tar.gz"
|
DEFAULT_HPL_URLS="
|
||||||
|
https://www.netlib.org/benchmark/hpl/hpl-${HPL_VERSION}.tar.gz
|
||||||
|
https://fossies.org/linux/privat/hpl-${HPL_VERSION}.tar.gz
|
||||||
|
"
|
||||||
|
HPL_GIT_URL="${HPL_GIT_URL:-https://github.com/icl-utk-edu/hpl.git}"
|
||||||
|
DEFAULT_HPL_GIT_REFS="v${HPL_VERSION} ${HPL_VERSION} main"
|
||||||
|
HPL_SOURCE_MODE="tarball"
|
||||||
|
|
||||||
|
download_to_file() {
|
||||||
|
url="$1"
|
||||||
|
out="$2"
|
||||||
|
|
||||||
|
if command -v curl >/dev/null 2>&1; then
|
||||||
|
curl -fL \
|
||||||
|
--connect-timeout 15 \
|
||||||
|
--max-time 180 \
|
||||||
|
--retry 2 \
|
||||||
|
--retry-delay 2 \
|
||||||
|
--output "${out}" \
|
||||||
|
"${url}"
|
||||||
|
return $?
|
||||||
|
fi
|
||||||
|
|
||||||
|
wget \
|
||||||
|
--show-progress \
|
||||||
|
--tries=2 \
|
||||||
|
--timeout=30 \
|
||||||
|
-O "${out}" \
|
||||||
|
"${url}"
|
||||||
|
}
|
||||||
|
|
||||||
|
download_hpl_tarball() {
|
||||||
|
out="$1"
|
||||||
|
tmp="${out}.part"
|
||||||
|
urls="${HPL_URLS:-$DEFAULT_HPL_URLS}"
|
||||||
|
|
||||||
|
rm -f "${tmp}"
|
||||||
|
for url in ${urls}; do
|
||||||
|
[ -n "${url}" ] || continue
|
||||||
|
echo "=== trying HPL source: ${url} ==="
|
||||||
|
if download_to_file "${url}" "${tmp}"; then
|
||||||
|
mv "${tmp}" "${out}"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
rm -f "${tmp}"
|
||||||
|
echo "=== failed: ${url} ==="
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "ERROR: failed to download HPL ${HPL_VERSION} from all configured URLs" >&2
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
download_hpl_from_git_archive() {
|
||||||
|
out="$1"
|
||||||
|
refs="${HPL_GIT_REFS:-$DEFAULT_HPL_GIT_REFS}"
|
||||||
|
tmp_root="$(mktemp -d)"
|
||||||
|
repo_dir="${tmp_root}/repo"
|
||||||
|
archive_dir="${tmp_root}/hpl-${HPL_VERSION}"
|
||||||
|
archive_tmp="${out}.part"
|
||||||
|
|
||||||
|
for ref in ${refs}; do
|
||||||
|
[ -n "${ref}" ] || continue
|
||||||
|
echo "=== trying HPL git source: ${HPL_GIT_URL} ref ${ref} ==="
|
||||||
|
rm -rf "${repo_dir}" "${archive_dir}" "${archive_tmp}"
|
||||||
|
if git clone --depth 1 --branch "${ref}" "${HPL_GIT_URL}" "${repo_dir}"; then
|
||||||
|
mv "${repo_dir}" "${archive_dir}"
|
||||||
|
tar czf "${archive_tmp}" -C "${tmp_root}" "hpl-${HPL_VERSION}"
|
||||||
|
mv "${archive_tmp}" "${out}"
|
||||||
|
rm -rf "${tmp_root}"
|
||||||
|
HPL_SOURCE_MODE="git"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
echo "=== failed git ref: ${ref} ==="
|
||||||
|
done
|
||||||
|
|
||||||
|
rm -rf "${tmp_root}" "${archive_tmp}"
|
||||||
|
echo "ERROR: failed to obtain HPL ${HPL_VERSION} from all configured sources" >&2
|
||||||
|
echo " looked for cache: ${out}" >&2
|
||||||
|
echo " tarball mirrors: ${HPL_URLS:-$DEFAULT_HPL_URLS}" >&2
|
||||||
|
echo " git fallback: ${HPL_GIT_URL} refs ${refs}" >&2
|
||||||
|
echo " override mirrors with HPL_URLS=\"https://mirror1/...\"" >&2
|
||||||
|
echo " override git refs with HPL_GIT_REFS=\"v${HPL_VERSION} ${HPL_VERSION} main\"" >&2
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
if [ ! -f "${HPL_TAR}" ]; then
|
if [ ! -f "${HPL_TAR}" ]; then
|
||||||
echo "=== downloading HPL ${HPL_VERSION} ==="
|
echo "=== downloading HPL ${HPL_VERSION} ==="
|
||||||
wget --show-progress -O "${HPL_TAR}" "${HPL_URL}"
|
download_hpl_tarball "${HPL_TAR}" || download_hpl_from_git_archive "${HPL_TAR}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
actual_sha="$(sha256sum "${HPL_TAR}" | awk '{print $1}')"
|
if [ "${HPL_SOURCE_MODE}" = "tarball" ]; then
|
||||||
if [ "${actual_sha}" != "${HPL_SHA256}" ]; then
|
actual_sha="$(sha256sum "${HPL_TAR}" | awk '{print $1}')"
|
||||||
echo "ERROR: sha256 mismatch for hpl-${HPL_VERSION}.tar.gz" >&2
|
if [ "${actual_sha}" != "${HPL_SHA256}" ]; then
|
||||||
echo " expected: ${HPL_SHA256}" >&2
|
echo "ERROR: sha256 mismatch for hpl-${HPL_VERSION}.tar.gz" >&2
|
||||||
echo " actual: ${actual_sha}" >&2
|
echo " expected: ${HPL_SHA256}" >&2
|
||||||
rm -f "${HPL_TAR}"
|
echo " actual: ${actual_sha}" >&2
|
||||||
exit 1
|
rm -f "${HPL_TAR}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "sha256 OK: hpl-${HPL_VERSION}.tar.gz"
|
||||||
|
else
|
||||||
|
echo "=== HPL source obtained from git fallback; skipping tarball sha256 check ==="
|
||||||
fi
|
fi
|
||||||
echo "sha256 OK: hpl-${HPL_VERSION}.tar.gz"
|
|
||||||
|
|
||||||
# ── download OpenBLAS from Debian 12 apt repo ─────────────────────────────────
|
# ── download OpenBLAS from Debian 12 apt repo ─────────────────────────────────
|
||||||
REPO_BASE="https://deb.debian.org/debian/pool/main/o/openblas"
|
REPO_BASE="https://deb.debian.org/debian/pool/main/o/openblas"
|
||||||
|
|||||||
Reference in New Issue
Block a user