From 3f41a026cadc3a62a218c12dbe47a2df41cac8e2 Mon Sep 17 00:00:00 2001 From: Mikhail Chusavitin Date: Wed, 8 Apr 2026 09:25:31 +0300 Subject: [PATCH] Add resilient HPL source fallbacks --- iso/builder/build-hpl.sh | 107 +++++++++++++++++++++++++++++++++++---- 1 file changed, 97 insertions(+), 10 deletions(-) diff --git a/iso/builder/build-hpl.sh b/iso/builder/build-hpl.sh index 136b4f2..6a1d535 100755 --- a/iso/builder/build-hpl.sh +++ b/iso/builder/build-hpl.sh @@ -38,22 +38,109 @@ mkdir -p "${DOWNLOAD_CACHE_DIR}" "${CACHE_DIR}/bin" "${CACHE_DIR}/lib" # ── download HPL source ──────────────────────────────────────────────────────── 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 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 -actual_sha="$(sha256sum "${HPL_TAR}" | awk '{print $1}')" -if [ "${actual_sha}" != "${HPL_SHA256}" ]; then - echo "ERROR: sha256 mismatch for hpl-${HPL_VERSION}.tar.gz" >&2 - echo " expected: ${HPL_SHA256}" >&2 - echo " actual: ${actual_sha}" >&2 - rm -f "${HPL_TAR}" - exit 1 +if [ "${HPL_SOURCE_MODE}" = "tarball" ]; then + actual_sha="$(sha256sum "${HPL_TAR}" | awk '{print $1}')" + if [ "${actual_sha}" != "${HPL_SHA256}" ]; then + echo "ERROR: sha256 mismatch for hpl-${HPL_VERSION}.tar.gz" >&2 + echo " expected: ${HPL_SHA256}" >&2 + echo " actual: ${actual_sha}" >&2 + 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 -echo "sha256 OK: hpl-${HPL_VERSION}.tar.gz" # ── download OpenBLAS from Debian 12 apt repo ───────────────────────────────── REPO_BASE="https://deb.debian.org/debian/pool/main/o/openblas"