commit 12df149c6b344363d121a5a33a1219b26a6e215d Author: thebadking Date: Thu Dec 11 21:26:37 2025 +0000 initial diff --git a/mirror_alpine.sh b/mirror_alpine.sh new file mode 100755 index 0000000..28ba553 --- /dev/null +++ b/mirror_alpine.sh @@ -0,0 +1,84 @@ +#!/usr/bin/env bash +set -euo pipefail + +ALPINE_VERSION="v3.23" +PACKAGES=("bash" "curl" "jq" "git" "docker") +REPOS=("main" "community") +BASE_URL="https://dl-cdn.alpinelinux.org/alpine" +DEST_DIR="." +ARCHES=("x86_64" "aarch64" "armv7") # only mirror the arches you care about +CURL_OPTS="-fSL --retry 3 --retry-delay 2 --connect-timeout 10" + +mkdir -p "$DEST_DIR" + +# Function to download a single package and its deps for a given arch +download_pkg() { + local pkg="$1" + local arch="$2" + local found=false + + for repo in "${REPOS[@]}"; do + local index_url="${BASE_URL}/${ALPINE_VERSION}/${repo}/${arch}/APKINDEX.tar.gz" + local tmpdir + tmpdir=$(mktemp -d) + trap "rm -rf $tmpdir" EXIT + + echo "📥 Fetching APKINDEX: $index_url" + if ! curl $CURL_OPTS "$index_url" -o "$tmpdir/APKINDEX.tar.gz"; then + echo "⚠️ Failed to fetch $index_url, skipping." + continue + fi + + tar -xzf "$tmpdir/APKINDEX.tar.gz" -C "$tmpdir" + + # Extract version for the package + local version + version=$(grep -A1 "^P:${pkg}$" "$tmpdir"/APKINDEX | grep "^V:" | cut -d':' -f2 | sed 's/^[ \t]*//;s/[ \t]*$//' || true) + + if [ -z "$version" ]; then + continue + fi + + local file="${pkg}-${version}.apk" + local out_dir="${DEST_DIR}/${ALPINE_VERSION}/${arch}" + mkdir -p "$out_dir" + + if [ ! -f "$out_dir/$file" ]; then + echo "🔽 Downloading $file for arch $arch from $repo" + curl $CURL_OPTS "${BASE_URL}/${ALPINE_VERSION}/${repo}/${arch}/${file}" -o "$out_dir/$file" + else + echo "ℹ️ $file already exists for arch $arch, skipping download." + fi + + found=true + + # Handle dependencies + local deps + deps=$(grep -A10 "^P:${pkg}$" "$tmpdir"/APKINDEX | grep "^D:" | cut -d':' -f2- | sed 's/^[ \t]*//' || true) + for dep in $deps; do + # Strip version constraints (e.g., >1.0, =2.0) to get base dep name + dep_name=$(echo "$dep" | sed 's/[><=].*//;s/so://') + if [ -n "$dep_name" ] && [ "$dep_name" != "$pkg" ]; then + download_pkg "$dep_name" "$arch" + fi + done + + break # Stop after finding in one repo + done + + if ! $found; then + echo "⚠️ Package not found: $pkg for arch $arch" + fi +} + +for arch in "${ARCHES[@]}"; do + echo "==============================" + echo "📦 Processing architecture: $arch" + echo "==============================" + for pkg in "${PACKAGES[@]}"; do + download_pkg "$pkg" "$arch" + done +done + +echo +echo "✅ Done! Packages saved under: ${DEST_DIR}/${ALPINE_VERSION}/" diff --git a/v3.23/aarch64/bash-5.3.3-r1.apk b/v3.23/aarch64/bash-5.3.3-r1.apk new file mode 100644 index 0000000..98dae1e Binary files /dev/null and b/v3.23/aarch64/bash-5.3.3-r1.apk differ diff --git a/v3.23/aarch64/curl-8.17.0-r1.apk b/v3.23/aarch64/curl-8.17.0-r1.apk new file mode 100644 index 0000000..89b85c2 Binary files /dev/null and b/v3.23/aarch64/curl-8.17.0-r1.apk differ diff --git a/v3.23/aarch64/docker-29.1.2-r1.apk b/v3.23/aarch64/docker-29.1.2-r1.apk new file mode 100644 index 0000000..ad89ac9 Binary files /dev/null and b/v3.23/aarch64/docker-29.1.2-r1.apk differ diff --git a/v3.23/aarch64/git-2.52.0-r0.apk b/v3.23/aarch64/git-2.52.0-r0.apk new file mode 100644 index 0000000..be9de3c Binary files /dev/null and b/v3.23/aarch64/git-2.52.0-r0.apk differ diff --git a/v3.23/aarch64/jq-1.8.1-r0.apk b/v3.23/aarch64/jq-1.8.1-r0.apk new file mode 100644 index 0000000..e241f81 Binary files /dev/null and b/v3.23/aarch64/jq-1.8.1-r0.apk differ diff --git a/v3.23/armv7/bash-5.3.3-r1.apk b/v3.23/armv7/bash-5.3.3-r1.apk new file mode 100644 index 0000000..8812e00 Binary files /dev/null and b/v3.23/armv7/bash-5.3.3-r1.apk differ diff --git a/v3.23/armv7/curl-8.17.0-r1.apk b/v3.23/armv7/curl-8.17.0-r1.apk new file mode 100644 index 0000000..f707c5f Binary files /dev/null and b/v3.23/armv7/curl-8.17.0-r1.apk differ diff --git a/v3.23/armv7/docker-29.1.2-r1.apk b/v3.23/armv7/docker-29.1.2-r1.apk new file mode 100644 index 0000000..d7a533f Binary files /dev/null and b/v3.23/armv7/docker-29.1.2-r1.apk differ diff --git a/v3.23/armv7/git-2.52.0-r0.apk b/v3.23/armv7/git-2.52.0-r0.apk new file mode 100644 index 0000000..ae55fdc Binary files /dev/null and b/v3.23/armv7/git-2.52.0-r0.apk differ diff --git a/v3.23/armv7/jq-1.8.1-r0.apk b/v3.23/armv7/jq-1.8.1-r0.apk new file mode 100644 index 0000000..ee802b1 Binary files /dev/null and b/v3.23/armv7/jq-1.8.1-r0.apk differ diff --git a/v3.23/x86_64/bash-5.3.3-r1.apk b/v3.23/x86_64/bash-5.3.3-r1.apk new file mode 100644 index 0000000..ab5707e Binary files /dev/null and b/v3.23/x86_64/bash-5.3.3-r1.apk differ diff --git a/v3.23/x86_64/curl-8.17.0-r1.apk b/v3.23/x86_64/curl-8.17.0-r1.apk new file mode 100644 index 0000000..6e78346 Binary files /dev/null and b/v3.23/x86_64/curl-8.17.0-r1.apk differ diff --git a/v3.23/x86_64/docker-29.1.2-r1.apk b/v3.23/x86_64/docker-29.1.2-r1.apk new file mode 100644 index 0000000..8d90dab Binary files /dev/null and b/v3.23/x86_64/docker-29.1.2-r1.apk differ diff --git a/v3.23/x86_64/git-2.52.0-r0.apk b/v3.23/x86_64/git-2.52.0-r0.apk new file mode 100644 index 0000000..e9f5653 Binary files /dev/null and b/v3.23/x86_64/git-2.52.0-r0.apk differ diff --git a/v3.23/x86_64/jq-1.8.1-r0.apk b/v3.23/x86_64/jq-1.8.1-r0.apk new file mode 100644 index 0000000..8dff15b Binary files /dev/null and b/v3.23/x86_64/jq-1.8.1-r0.apk differ