#!/bin/sh # mirror-poblar.sh — sube la caché local de tarballs al mirror de fuentes (ADR 0013). # # El mirror está direccionado por CONTENIDO: `takana/fuentes/{sha256}.tar`, exactamente el mismo # nombre que usa `work/tarballs/`. Por eso subir es un rsync plano y no hace falta índice ninguno: # el nombre del fichero ES su verificación. # # Es INCREMENTAL e interrumpible, como el respaldo: los ficheros nunca cambian (un sha256 identifica # un contenido y sólo uno), así que la comparación por tamaño+fecha de rsync es exacta y baratísima. # # Uso: scripts/fuentes/mirror-poblar.sh # sube lo que falte # SECO=1 scripts/fuentes/mirror-poblar.sh # dice qué subiría set -eu ROOT="$(cd "$(dirname "$0")/../.." && pwd)"; cd "$ROOT" SB_USER="${SB_USER:-u647150}" SB_HOST="${SB_HOST:-u647150.your-storagebox.de}" SB_PORT="${SB_PORT:-23}" KEY="${KEY:-$HOME/.ssh/github5}" SRC="${SRC:-work/tarballs}" SECO=""; [ "${SECO:-}" = "1" ] && SECO="--dry-run" [ -d "$SRC" ] || { echo "no hay caché local en $SRC" >&2; exit 1; } SSH_CMD="ssh -4 -p $SB_PORT -i $KEY -o StrictHostKeyChecking=accept-new -o ServerAliveInterval=30" n=$(ls "$SRC" | wc -l); tam=$(du -sh "$SRC" | cut -f1) echo "==> caché local: $n tarballs, $tam" echo "==> destino: $SB_USER@$SB_HOST:hammer/fuentes/ ${SECO:+(SECO)}" $SSH_CMD "$SB_USER@$SB_HOST" 'mkdir hammer hammer/fuentes' >/dev/null 2>&1 || true # --partial-dir: un tarball cortado a la mitad conserva el trozo y la próxima corrida lo TERMINA. rsync -a --info=progress2 --partial-dir=.rsync-partial $SECO \ -e "$SSH_CMD" "$SRC"/ "$SB_USER@$SB_HOST:hammer/fuentes/" echo "==> en el mirror: $($SSH_CMD "$SB_USER@$SB_HOST" 'ls hammer/fuentes | wc -l' 2>/dev/null) objetos"