apiVersion: v1 kind: ConfigMap metadata: name: repo-sources namespace: repo data: # Lista de orígenes a espejar # Formato por línea: NAME|URL|SUBDIR # SUBDIR cuelga de /mirror/repos (asegúrate de que tu Deployment monta el PVC en /usr/local/apache2/htdocs con subPath repos) sources.txt: | # openSUSE Leap 15.6 (básicos + updates) repo-oss|http://download.opensuse.org/distribution/leap/15.6/repo/oss/|opensuse/leap/15.6/oss repo-non-oss|http://download.opensuse.org/distribution/leap/15.6/repo/non-oss/|opensuse/leap/15.6/non-oss update-oss|http://download.opensuse.org/update/leap/15.6/oss/|opensuse/leap/15.6/update/oss update-non-oss|http://download.opensuse.org/update/leap/15.6/non-oss/|opensuse/leap/15.6/update/non-oss update-sle|http://download.opensuse.org/update/leap/15.6/sle/|opensuse/leap/15.6/update/sle backports|http://download.opensuse.org/update/leap/15.6/backports/|opensuse/leap/15.6/update/backports # Codecs openh264 openh264|http://codecs.opensuse.org/openh264/openSUSE_Leap/|opensuse/openh264 # Terceros (opcional) nvidia|https://download.nvidia.com/opensuse/leap/15.6/|thirdparty/nvidia/leap/15.6 k8s-stable|https://pkgs.k8s.io/core:/stable:/v1.33/rpm/|thirdparty/kubernetes/core/stable/v1.33/rpm # Claves públicas a publicar en /mirror/keys # Formato por línea: NAME|URL|FILENAME # Ajusta las URLs si prefieres otras fuentes/ubicaciones oficiales keys.txt: | opensuse|https://download.opensuse.org/repositories/openSUSE:/Leap:/15.6:/Update/standard/repodata/repomd.xml.key|RPM-GPG-KEY-openSUSE nvidia|https://download.nvidia.com/opensuse/repodata/repomd.xml.key|RPM-GPG-KEY-NVIDIA k8s|https://pkgs.k8s.io/core:/stable:/v1.33/rpm/repodata/repomd.xml.key|RPM-GPG-KEY-k8s # Script de sincronización diario (CronJob) # - Sincroniza repos a /mirror/repos/... # - Publica claves GPG en /mirror/keys sync.sh: | #!/usr/bin/env bash set -euo pipefail SRC_LIST="/config/sources.txt" KEYS_LIST="/config/keys.txt" DEST_ROOT="/mirror/repos" DEST_KEYS="/mirror/keys" mkdir -p "$DEST_ROOT" "$DEST_KEYS" # Requisitos command -v wget >/dev/null 2>&1 || { echo "ERROR: wget requerido"; exit 1; } if ! command -v rsync >/dev/null 2>&1; then echo "Aviso: rsync no disponible; usaré wget para HTTP/HTTPS" fi echo "===== SYNC REPOS =====" while IFS='|' read -r NAME URL SUBDIR; do [[ -z "${NAME:-}" || "${NAME:0:1}" == "#" ]] && continue DEST="${DEST_ROOT}/${SUBDIR}" mkdir -p "$DEST" echo "==> Sync ${NAME} (${URL}) -> ${DEST}" if [[ "$URL" == rsync://* ]]; then # Sincronización eficiente por rsync (si el mirror lo soporta) rsync -aH --delete --partial --info=stats1,progress2 "${URL}" "${DEST}/" else # Mirror vía HTTP/HTTPS con wget TMP="${DEST}.tmp" mkdir -p "$TMP" # -m (mirror), -np (no subir), -nH (sin host en ruta), robots=off wget -m -np -nH -e robots=off -P "$TMP" --no-verbose --show-progress "$URL" # Mover contenido espeljado a DEST (limpiando y dejando estructura limpia) shopt -s dotglob nullglob if compgen -G "$TMP/*" >/dev/null; then rsync -a --delete "$TMP"/ "$DEST"/ fi rm -rf "$TMP" fi # Permisos legibles por httpd y Samba chmod -R a+rX "$DEST" done < "$SRC_LIST" echo "===== SYNC KEYS =====" if [[ -f "$KEYS_LIST" ]]; then while IFS='|' read -r KNAME KURL KFILE; do [[ -z "${KNAME:-}" || "${KNAME:0:1}" == "#" ]] && continue echo "==> Key ${KNAME} (${KURL}) -> ${DEST_KEYS}/${KFILE}" wget -q -O "${DEST_KEYS}/${KFILE}.tmp" "$KURL" mv "${DEST_KEYS}/${KFILE}.tmp" "${DEST_KEYS}/${KFILE}" chmod a+r "${DEST_KEYS}/${KFILE}" done < "$KEYS_LIST" else echo "No hay KEYS_LIST ($KEYS_LIST), omitido." fi echo "===== DONE ====="