Files
2026-07-13 12:20:32 +08:00

68 lines
1.9 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
VM_DIR="$PROJECT_DIR/master/iso"
DEBIAN_VERSION="13.5.0"
BASE_URL="https://debian.osuosl.org/debian-cdimage/${DEBIAN_VERSION}"
# Determine architecture
ARCH="${1:-}"
if [ -z "$ARCH" ]; then
HOST_ARCH="$(uname -m)"
case "$HOST_ARCH" in
x86_64|amd64) ARCH="amd64" ;;
arm64|aarch64) ARCH="arm64" ;;
*) echo "Error: cannot auto-detect arch from '$HOST_ARCH'; pass arm64 or amd64 as argument" >&2; exit 1 ;;
esac
echo "Auto-detected architecture: $ARCH"
fi
case "$ARCH" in
arm64|amd64) ;;
*) echo "Error: unsupported architecture '$ARCH' (use arm64 or amd64)" >&2; exit 1 ;;
esac
ISO_NAME="debian-${DEBIAN_VERSION}-${ARCH}-netinst.iso"
ISO_URL="${BASE_URL}/${ARCH}/iso-cd/${ISO_NAME}"
ISO_PATH="$VM_DIR/$ISO_NAME"
SHA_PATH="$VM_DIR/$ISO_NAME.sha256"
mkdir -p "$VM_DIR"
if [ -f "$SHA_PATH" ]; then
echo "SHA256 file exists: $SHA_PATH"
if [ -f "$ISO_PATH" ]; then
echo "ISO already exists, verifying checksum..."
if (cd "$VM_DIR" && shasum -a 256 -c "$ISO_NAME.sha256"); then
echo "ISO is valid, nothing to do."
exit 0
else
echo "Checksum mismatch — re-downloading."
rm -f "$ISO_PATH"
fi
fi
echo "Downloading $ISO_URL ..."
curl -L --progress-bar -o "$ISO_PATH" "$ISO_URL"
echo "Verifying downloaded ISO against existing checksum..."
(cd "$VM_DIR" && shasum -a 256 -c "$ISO_NAME.sha256")
echo "Download verified."
else
if [ -f "$ISO_PATH" ]; then
echo "ISO exists but no SHA256 file — generating checksum..."
else
echo "Downloading $ISO_URL ..."
curl -L --progress-bar -o "$ISO_PATH" "$ISO_URL"
fi
echo "Generating SHA256 checksum..."
(cd "$VM_DIR" && shasum -a 256 "$ISO_NAME" > "$ISO_NAME.sha256")
echo "Wrote $SHA_PATH"
echo "Commit this file to version control: $SHA_PATH"
fi