añadido script clientes
This commit is contained in:
144
repo/configure-local-repos.sh
Normal file
144
repo/configure-local-repos.sh
Normal file
@@ -0,0 +1,144 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# ============================
|
||||
# Configuración (ajusta aquí)
|
||||
# ============================
|
||||
BASE_URL="${BASE_URL:-http://repo.c2et.net}" # tu dominio del mirror (sin / al final)
|
||||
LEAP_VER="${LEAP_VER:-15.6}" # versión de Leap
|
||||
ENABLE_NVIDIA="${ENABLE_NVIDIA:-true}" # true/false
|
||||
ENABLE_K8S="${ENABLE_K8S:-true}" # true/false
|
||||
DISABLE_EXTERNAL="${DISABLE_EXTERNAL:-true}" # true/false (deshabilitar repos externos)
|
||||
|
||||
# Rutas base del mirror interno
|
||||
REPO_BASE="${BASE_URL}/opensuse/leap/${LEAP_VER}"
|
||||
KEYS_BASE="${BASE_URL}/keys"
|
||||
|
||||
# Directorio de repos dnf/zypp
|
||||
REPOS_DIR="/etc/zypp/repos.d"
|
||||
|
||||
# ============================
|
||||
# Helpers
|
||||
# ============================
|
||||
need_root() {
|
||||
if [[ $EUID -ne 0 ]]; then
|
||||
echo "Este script debe ejecutarse como root (o con sudo)." >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
have_cmd() {
|
||||
command -v "$1" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
write_repo() {
|
||||
local alias="$1" name="$2" baseurl="$3" gpgkey="$4"
|
||||
local path="${REPOS_DIR}/${alias}.repo"
|
||||
|
||||
cat >"${path}.tmp" <<EOF
|
||||
[${alias}]
|
||||
name=${name}
|
||||
enabled=1
|
||||
autorefresh=1
|
||||
baseurl=${baseurl}
|
||||
type=rpm-md
|
||||
gpgcheck=1
|
||||
gpgkey=${gpgkey}
|
||||
EOF
|
||||
|
||||
# Solo mueve si cambió (idempotente)
|
||||
if [[ ! -f "${path}" ]] || ! cmp -s "${path}.tmp" "${path}"; then
|
||||
mv "${path}.tmp" "${path}"
|
||||
echo " - Escrito ${path}"
|
||||
else
|
||||
rm -f "${path}.tmp"
|
||||
echo " - Sin cambios ${path}"
|
||||
fi
|
||||
}
|
||||
|
||||
import_key() {
|
||||
local url="$1" file="key-$(basename "$url")"
|
||||
# rpm ignora si ya está importada; esto es idempotente
|
||||
echo " - Importando clave: $url"
|
||||
rpm --import "$url" || {
|
||||
echo " * Aviso: no se pudo importar $url. ¿Hay conectividad al mirror?" >&2
|
||||
return 1
|
||||
}
|
||||
}
|
||||
|
||||
disable_external_repos() {
|
||||
echo "Deshabilitando repos externos conocidos..."
|
||||
# Deshabilita TODO lo que no sea *_local que creemos, de forma segura:
|
||||
# Busca todos los alias actuales y deshabilita los que no terminen en '-local'
|
||||
local aliases
|
||||
aliases=$(zypper --non-interactive lr -u | awk 'NR>2 {print $1,$2}' | tail -n +1 | awk '{print $2}')
|
||||
for a in $aliases; do
|
||||
if [[ "$a" != *-local ]]; then
|
||||
# Algunos sistemas traen alias con espacios; saltamos los complicados
|
||||
if [[ "$a" =~ ^[A-Za-z0-9._:-]+$ ]]; then
|
||||
zypper --non-interactive mr -d "$a" || true
|
||||
fi
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# ============================
|
||||
# Main
|
||||
# ============================
|
||||
need_root
|
||||
|
||||
if ! have_cmd zypper; then
|
||||
echo "No se encontró zypper. ¿Es openSUSE/SLE este sistema?" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "== Configurando repos locales desde ${BASE_URL} para Leap ${LEAP_VER} =="
|
||||
|
||||
mkdir -p "$REPOS_DIR"
|
||||
|
||||
# 1) Importa claves GPG desde tu mirror
|
||||
echo "Importando claves GPG desde ${KEYS_BASE} ..."
|
||||
import_key "${KEYS_BASE}/RPM-GPG-KEY-openSUSE" || true
|
||||
$ENABLE_NVIDIA && import_key "${KEYS_BASE}/RPM-GPG-KEY-NVIDIA" || true
|
||||
$ENABLE_K8S && import_key "${KEYS_BASE}/RPM-GPG-KEY-k8s" || true
|
||||
|
||||
# 2) Repos base de openSUSE
|
||||
echo "Escribiendo archivos .repo para repos locales..."
|
||||
write_repo "repo-oss-local" "repo-oss-local" "${REPO_BASE}/oss" "${KEYS_BASE}/RPM-GPG-KEY-openSUSE"
|
||||
write_repo "repo-non-oss-local" "repo-non-oss-local" "${REPO_BASE}/non-oss" "${KEYS_BASE}/RPM-GPG-KEY-openSUSE"
|
||||
write_repo "update-oss-local" "update-oss-local" "${REPO_BASE}/update/oss" "${KEYS_BASE}/RPM-GPG-KEY-openSUSE"
|
||||
write_repo "update-non-oss-local" "update-non-oss-local" "${REPO_BASE}/update/non-oss" "${KEYS_BASE}/RPM-GPG-KEY-openSUSE"
|
||||
write_repo "update-sle-local" "update-sle-local" "${REPO_BASE}/update/sle" "${KEYS_BASE}/RPM-GPG-KEY-openSUSE"
|
||||
write_repo "update-backports-local" "update-backports-local" "${REPO_BASE}/update/backports" "${KEYS_BASE}/RPM-GPG-KEY-openSUSE"
|
||||
write_repo "openh264-local" "openh264-local" "${BASE_URL}/opensuse/openh264" "${KEYS_BASE}/RPM-GPG-KEY-openSUSE"
|
||||
|
||||
# 3) Repos de terceros (opcional)
|
||||
if $ENABLE_NVIDIA; then
|
||||
write_repo "nvidia-local" "nvidia-local" \
|
||||
"${BASE_URL}/thirdparty/nvidia/leap/${LEAP_VER}" \
|
||||
"${KEYS_BASE}/RPM-GPG-KEY-NVIDIA"
|
||||
fi
|
||||
|
||||
if $ENABLE_K8S; then
|
||||
write_repo "k8s-stable-local" "k8s-stable-local" \
|
||||
"${BASE_URL}/thirdparty/kubernetes/core/stable/v1.33/rpm" \
|
||||
"${KEYS_BASE}/RPM-GPG-KEY-k8s"
|
||||
fi
|
||||
|
||||
# 4) Deshabilitar repos externos si procede
|
||||
if $DISABLE_EXTERNAL; then
|
||||
disable_external_repos
|
||||
fi
|
||||
|
||||
# 5) Refrescar repos (no interactivo)
|
||||
echo "Refrescando repos..."
|
||||
zypper --non-interactive --gpg-auto-import-keys ref || true
|
||||
|
||||
echo
|
||||
echo "== Listado final de repos =="
|
||||
zypper lr -d || true
|
||||
|
||||
echo
|
||||
echo "Listo. Si quieres personalizar:"
|
||||
echo " BASE_URL=... LEAP_VER=... ENABLE_NVIDIA=true/false ENABLE_K8S=true/false DISABLE_EXTERNAL=true/false \\"
|
||||
echo " sudo -E ./$(basename "$0")"
|
||||
Reference in New Issue
Block a user