#!/usr/bin/bash set -euo pipefail IFS=$'\n\t' SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" if [[ -d "${SCRIPT_DIR}/../../.git" ]] || [[ -f "${SCRIPT_DIR}/../../nodo/config/etc/mirrors.env" ]]; then REPO_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)" else REPO_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)" fi if [[ -f "${REPO_ROOT}/nodo/config/etc/mirrors.env" ]]; then # shellcheck source=/dev/null source "${REPO_ROOT}/nodo/config/etc/mirrors.env" elif [[ -f "${REPO_ROOT}/config/etc/mirrors.env" ]]; then # shellcheck source=/dev/null source "${REPO_ROOT}/config/etc/mirrors.env" elif [[ -f "${REPO_ROOT}/etc/mirrors.env" ]]; then # shellcheck source=/dev/null source "${REPO_ROOT}/etc/mirrors.env" fi STAGING_DIR="${MIRRORS_STAGING_DIR:-$HOME/ipfs/staging}" SIGS_BASE="${STAGING_DIR}/centos-stream/SIGs/10-stream" UPSTREAM_BASE="https://mirror.stream.centos.org/SIGs/10-stream" log() { local timestamp timestamp="$(date -u +"%Y-%m-%dT%H:%M:%SZ")" echo "[${timestamp}] $*" } sync_repo() { local sig_path="$1" local dest="${SIGS_BASE}/${sig_path}" local url="${UPSTREAM_BASE}/${sig_path}/" local repo_id repo_id="c10s-$(echo "${sig_path}" | tr '/' '-')" mkdir -p "${dest}" log "INFO: Sincronizando ${sig_path} desde ${url}..." local attempt=1 local max_attempts=3 while [[ ${attempt} -le ${max_attempts} ]]; do if dnf5 --repofrompath="${repo_id},${url}" \ --repo="${repo_id}" reposync \ --download-metadata \ --norepopath \ --destdir="${dest}" \ --delete; then return 0 fi log "WARN: Intento ${attempt}/${max_attempts} fallido para ${sig_path}. Reintentando en 3s..." attempt=$((attempt + 1)) sleep 3 done log "ERROR: No se pudo sincronizar ${sig_path} tras ${max_attempts} intentos. Continuando..." return 0 } main() { log "==========================================================" log " Inicio de sincronización Storage y Hyperscale SIGs" log "==========================================================" # 1. Storage - Ceph for ceph in ceph-squid ceph-tentacle ceph-umbrella; do sync_repo "storage/x86_64/${ceph}" done # 2. Storage - Samba for v in 421 422 423 424 425; do sync_repo "storage/x86_64/samba-${v}" done # 3. Storage - NFS Ganesha for v in 6 7 8 9 10 11 12 13 14 15; do sync_repo "storage/x86_64/nfsganesha-${v}" done # 4. Hyperscale for comp in packages-main packages-facebook packages-kernel packages-spin packages-asahi packages-experimental; do sync_repo "hyperscale/x86_64/${comp}" done log "==========================================================" log " Storage y Hyperscale completados." log "==========================================================" } main "$@"