--- apiVersion: v1 kind: ConfigMap metadata: name: archmirror-sync-script namespace: archmirror data: sync.sh: | #!/bin/sh set -e TARGET_DIR="/archlinux" MAX_RETRIES=3 log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >&2 } if [ -z "$MIRROR_URL" ]; then log "ERROR: MIRROR_URL not set" exit 1 fi mkdir -p "$TARGET_DIR" do_rsync() { rsync --timeout=600 \ -rltH --no-perms --chmod=D755,F664 --safe-links --delete-delay --delay-updates \ -v --info=progress2 \ "$@" } for i in $(seq 1 $MAX_RETRIES); do log "Sync attempt $i/$MAX_RETRIES from $MIRROR_URL" # Pass 1: sync packages, skip db/files indices so they are never updated # before their referenced package files arrive (avoids 404s). # Pass 2: sync everything including indices now that packages are present. if do_rsync \ --exclude='*.db' --exclude='*.db.*' \ --exclude='*.files' --exclude='*.files.*' \ "$MIRROR_URL/" "$TARGET_DIR/" \ && do_rsync \ "$MIRROR_URL/" "$TARGET_DIR/"; then log "Sync completed successfully" exit 0 fi if [ "$i" -lt "$MAX_RETRIES" ]; then sleep $((i * 300)) fi done log "All sync attempts failed" exit 1