Files
homelab/kubernetes/app/archmirror/configmap-sync.yaml

56 lines
1.4 KiB
YAML

---
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